[HN Gopher] Terpstra Keyboard
___________________________________________________________________
Terpstra Keyboard
Author : xeonmc
Score : 203 points
Date : 2025-06-18 10:31 UTC (12 hours ago)
(HTM) web link (terpstrakeyboard.com)
(TXT) w3m dump (terpstrakeyboard.com)
| squircle wrote:
| First thing I did when I started playing with LLMs was vibe code
| a bunch of shitty virtual instruments. Roll your own, folks! Good
| fun.
| steveBK123 wrote:
| Pretty cool
| awongh wrote:
| This is cool!
|
| I want to try to build a hardware midi keyboard using mechanical
| hall effect switches like this:
| https://mechanicalkeyboards.com/products/wuque-studio-dash-5...
|
| There's a few physical keyboards out there but many are super
| super expensive.
| maxdamantus wrote:
| I've kind of done this, just without the actual "build" part--I
| instead use a Wooting computer keyboard (which has the hall
| effect switches you're referring to), and I've written some
| program to emit MIDI based on key velocity.
|
| I've been using it very frequently for a few years, and can
| confirm it's quite fun to use, though I don't have much
| experience playing other keyboard instruments and haven't tried
| to learn it seriously enough to make proper use of chords etc.
|
| Demo of me playing here, though try not to mind the messy desk
| and bad recording setup (one-hand, MIDI going through phone due
| to lack of speakers):
| https://drive.google.com/file/d/1qZuFlK9GybX5aP5tGi54AvTTFKd...
|
| The layout I use is not a regular piano layout, but a B-griff
| layout, as used on a bayan (Russian accordion). I made a demo
| site for playing with the layout (keyboard or touchscreen), but
| without velocity sensitivity:
| https://maxdamantus.gitlab.io/bayan/
|
| The B-griff/C-griff layouts naturally fit computer keyboards,
| and I'd argue they're better in general than piano layouts for
| various reasons. There's also this cool video of someone using
| two Commodores for similar effect:
| https://youtube.com/watch?v=EBCYvoC4muc
|
| EDIT: turns out the Terpstra keyboard is also able to work
| using B-griff: http://terpstrakeyboard.com/web-
| app/keys.htm?fundamental=261...
| awongh wrote:
| > I've written some program to emit MIDI based on key
| velocity.
|
| nice! Is the velocity code on the firmware side? Is that why
| it's not included on the demo site?
| maxdamantus wrote:
| No, it's on the software (computer) side. It's not in the
| demo site because I created that in 2019 [0] for use with a
| regular keyboard (since I was having issues with the
| software I'd previously been using for playing MIDI). I
| only upgraded to the Wooting keyboard in late 2021.
|
| I've been meaning to look into adding Wooting support, just
| haven't got round to it. This would require either WebUSB
| or WebHID which are still "experimental", and I'm not sure
| if there will be latency issues.
|
| The program I created for computing velocity and emitting
| MIDI is here [1]. When it's listening for keyboard data it
| does it in another thread so that it can attach fairly
| accurate timestamps to the key events, without being
| subject to pauses from Gtk or something. If there's
| inconsistency between the key event times and the relative
| timestamps, the velocity detection can be noticably off.
| I've noticed this in Wooting's own MIDI application [2].
| Hopefully WebUSB/WebHID includes timestamps in the data, so
| it doesn't have to be subject to JS GC pauses.
|
| As well as the Rust program above (possibly Linux-only,
| though should be easily adaptable to work on
| Windows/macOS), I've written an Android app that does the
| same thing so I can use it without a computer (though in
| Android you have to take control of the USB device rather
| than just read the HID data), but I haven't uploaded the
| code anywhere.
|
| [0] https://gitlab.com/Maxdamantus/bayan
|
| [1] https://gist.github.com/Maxdamantus/c5d5133cab1ef3596ac
| 589d2...
|
| [2] https://github.com/WootingKb/wooting-analog-midi ... as
| well as issues with timestamp jitter, this application
| seems overall a bit bloated for my taste (web-based app
| using Tauri), and it's inconvenient since it will continue
| to generate MIDI when you're focused on other applications,
| so you'd have to close and open it (slow startup time too)
| each time you want to use it. their timestamp jitter occurs
| because the Wooting SDK (at least at the time, haven't
| looked at it recently) worked by running a thread that
| would update a shared HashMap and you would have to poll
| that hash map; it wasn't possible to see all updates, and
| there were no timestamps attached. I avoided the SDK and
| instead just read the data directly from the "hidraw"
| device.
| bluGill wrote:
| Some mechanical keyboard firmware already supports midi. I
| don't think any supports velocity, but they would likely
| welcome the code if you wrote it. They already support
| these switches, so it seems workable.
| nayuki wrote:
| > https://maxdamantus.gitlab.io/bayan/
|
| Here is how to imitate it on the Terpstra keyboard web
| application: http://terpstrakeyboard.com/web-
| app/keys.htm?fundamental=261...
| Cthulhu_ wrote:
| Fun fact, anyone with a surname that ends with the -stra or -sma
| suffix has their origins in Frisia [0], a region in current-day
| Netherlands and Germany that retained their independence in the
| Roman era. Terpstra specifically refers to someone living on a
| terp, an artificial hill (because there's no hills in the
| Netherlands lololol) that people would live on or retreat to with
| the intermittent floodings.
|
| This in turn is why the Netherlands is so big when it comes to
| dairy and cheese; grass was one of the few things that would grow
| consistently and survive the floods, cows eat grass, cheese and
| butter can be preserved to last through winter, etc.
|
| [0] https://en.wikipedia.org/wiki/Frisia
| docdeek wrote:
| Very interesting. The only Terpstra I knew of before this link
| was Niki Terpstra, one of only three Dutch winners of both
| Paris-Roubaix and the Tour of Flanders.
| agos wrote:
| I also recall one Brett Terpstra, maker of Marked app and
| kind of a known name in the indie Mac developer scene
| futura_heavy wrote:
| I thought this was him debuting a new project.
| thechao wrote:
| Dijkstra!
| cwbrandsma wrote:
| And you will forever have your name mispronounced by English
| speakers that can't wrap their tongues around the -sma or -stra
| ending.
|
| Things like TerpSON, TerpSmith, Terp....
|
| One time while voting the lady working there butchered my name
| 8 times, she literally could not get it right.
| jeroenhd wrote:
| To be fair to an English speaker reading your name from
| paper: some native English speakers are taught to read by
| recognizing words by their first letter and their shape, and
| skipping the word to later fill in the blanks when they don't
| recognize the word. The lady may have simply never been
| taught how to sound out unfamiliar letter combinations, and
| may have been trying her best to make sense of the
| unrecognizable mess of letters she saw in front of her.
|
| https://www.apmreports.org/episode/2019/08/22/whats-wrong-
| ho...
| cwbrandsma wrote:
| She wasn't even reading it, I was telling her my name, all
| she had to do was repeat it and she couldn't do it.
| yusina wrote:
| I challenge you to go to China and ask people to make fun
| of you if you are unable to correctly pronounce half
| their words. Not because of stupidity but because of a
| mix of not hearing the subtle difference ("but that's
| exactly what you said!") and being unable to accurately
| reproduce a sound that you hear.
|
| As kids, we have the ability to make lots of noises. Kids
| learning languages keep those skills alive. Over time, we
| lose that ability for sounds that we don't use regularly,
| and re-acquiring that capability is really hard.
| cardanome wrote:
| Oh gosh, this explains so much.
|
| I always felt that many native English speakers can't
| really parse a text properly. They seem to react to certain
| keywords. When the text says something they didn't expect,
| they often miss it or get confused.
|
| I thought it might be a side-effect of being monolingual
| and hence having a less explicit understanding of language
| but seeing how they are taught to read, things make
| perfectly sense.
|
| It is crazy of much staying power bogus science has in
| education. Reminds me how the idea of individual learning
| styles is still popular and though it lacks empirical
| evidence.
| nayuki wrote:
| And the 13-episode podcast from them:
| https://features.apmreports.org/sold-a-story/
| quink wrote:
| > she literally could not get it right
|
| Eh, they get their revenge. As any Australian of a certain
| age can tell you TelSTRA could not get it right, for any
| value of right, without expending an equivalent effort to
| moving a mountain.
| mrarjen wrote:
| Can confirm, usually misunderstood too.
| quotz wrote:
| Another fun fact, from Wikipedia, the name Frisia "stems from
| Latin Frisii, an ethnonym used for a group of ancient tribes in
| modern-day Northwestern Germany, possibly being a loanword of
| Proto-Germanic *frisaz, meaning "curly, crisp", presumably
| referring to the hair of the tribesmen."
|
| In German Frisur, and in south slavic languages Frizura, means
| hairstyle, which is also related to the english word Frizz
| vintermann wrote:
| I think this is a reference to the muse Terpsichore, though?
|
| We also have at least one -stra river in Norway, Vinstra. Don't
| know if anyone has it as last name, though.
| Aachen wrote:
| I'm impressed how responsive the keys are! Will definitely be
| checking out on desktop if I can see how the audio rendering code
| works (unless someone here already knows). I presume the audio
| synthesis API and ontouchstart but maybe there's something clever
| in addition like prerendering the audio samples rather than
| synthesising them on press
|
| Maybe it also helps that I've got a headphone jack plugged in
| instead of the Bluetooth I'm used to from listening to things
| during the day, but even so, my touchscreen just doesn't feel
| this responsive normally, including in games. It's on my list of
| things to check the delay of, but since my phone's 960 fps camera
| is the equipment I use to check that, it is a bit tricky
|
| Edit: ontouchstart calls noteOn method
| https://github.com/wcgbg/terpstrakeyboard/blob/03d526a0ed5c7...
|
| This eventually calls into audio api start with 0 delay
| https://github.com/wcgbg/terpstrakeyboard/blob/03d526a0ed5c7...
|
| The data to play was retrieved from the server (based on the
| instrument you selected) and parsed ahead of time
| https://github.com/wcgbg/terpstrakeyboard/blob/03d526a0ed5c7...
|
| It loads samples at four frequencies and plays the nearest one at
| the appropriate rate (proportional to the target frequency)
| https://github.com/wcgbg/terpstrakeyboard/blob/03d526a0ed5c7...
|
| The settings.audioContext variable is simply an instance of the
| web audio API as expected (with a fallback to support
| Safari/webkit)
| https://github.com/wcgbg/terpstrakeyboard/blob/03d526a0ed5c7...
|
| This gainNode it's connecting is just about playback volume it
| seems https://developer.mozilla.org/en-
| US/docs/Web/API/BaseAudioCo... and "audioContext.destination",
| MDN says, you can think of as a speaker device
|
| So nothing too special here: of course preloading server data but
| then simply creating a new sound source during ontouchstart is
| enough. I guess delay in other software comes from the extra
| cruft they have such as big libraries (and Bluetooth, in the
| cases where I use that), not from any actual delay in touchscreen
| or audio rendering
| dist-epoch wrote:
| responsive, but there is a small click between notes. maybe
| they start mid phase
| Aachen wrote:
| What browser and OS is that? I experience no clicks on
| Android 10 with a chromium webview-based browser
| mikepurvis wrote:
| Butter-smooth for me on Window 11 + Firefox
| matteason wrote:
| I had a quick look - it's sample-based (eg organ has 4
| preloaded samples, http://terpstrakeyboard.com/web-
| app/sounds/organ440.mp3 plus 110, 220 and 880Hz variants), and
| different notes are created by adjusting the playbackRate of
| the closest sample
|
| It's also all just vanilla JS which probably helps keep it
| snappy
| randomtoast wrote:
| Somehow I cannot open the website.
| aniviacat wrote:
| It's HTTP only, maybe that's why?
| amne wrote:
| The article link is missing the scheme so the browser will
| default to https. I get an error about the CNAME mismatching
| the Host on https for example.
| yonatan8070 wrote:
| I just get a 404 looking page in Romanian
| _joel wrote:
| This would be great for Klingon Opera :)
| https://www.youtube.com/watch?v=1LjcBv-OWtQ
| ldb wrote:
| Wow, not in my wildest dreams would I have thought that such a
| deep dive into Klingon music theory exists. This is amazing.
| Thanks for sharing.
| _joel wrote:
| Indeed, it's probably the geekiest confluence going! No
| worries, glad you enjoyed it.
| gbuk2013 wrote:
| Sound is not quite right - C## should sound like D but it's
| slightly off.
| kevinwang wrote:
| Looks like the default settings correspond to a 31-note scale
| instead of the usual 12-tone scale.
| https://en.m.wikipedia.org/wiki/31_equal_temperament
| gbuk2013 wrote:
| Thanks, TIL :)
| bluGill wrote:
| I've been trying to design a keyboard that can be used with the
| feet - something that I can play like dance dance revolution,
| while playing something else with my hands (mandolin), thus
| making me a one man band. Figuring out what a good layout would
| be is the first step and so far everything I've thought of either
| lacks useful notes, is too big to reach useful notes, or the keys
| are too close together. If anyone has ideas on how to do this I'd
| love help. (or better yet do this as I don't have must time to
| work on it)
| hobs wrote:
| I'd probably be thinking foot pedals and chording if I needed a
| lot of options.
| coldpie wrote:
| Have you looked at existing MIDI foot controllers? E.g.
| Behringer FCB1010 or Yamaha MFC10 or Roland FC-300.
| Hesinde wrote:
| An organ pedalboard MIDI controller would be an off-the-shelf
| solution albeit expensive. You could hook it up to a drum rack
| in a DAW in order to remap the pedals to a useful layout.
|
| With a foot activated MIDI controller the number of keys will
| always be rather limited. Therefore, I think that the virtual
| layout should be customized to the music you play or even for
| each song. E.g. you could only map notes of a certain scale and
| range in order to save space.
|
| If you consider building something custom; I have found that
| outputting to hardware MIDI from an Arduino is delightfully
| simple. (The hard part on my own project is finding motivation
| for figuring out how to read velocity from piezos and isolating
| vibrations.)
| bluGill wrote:
| Organ pedalboards require sitting down and so are not really
| what I want.
|
| The number of keys is the real problem - I don't want to be
| playing a single note in one octave, I want to play my chord
| progression and that means I need separate buttons for the
| major, minor, 7th (which 7th...) for the chords that go with
| the song.
| Hesinde wrote:
| A medium number of keys could work out by using a custom
| layout for each song as many songs don't use too many
| chords. Similar to tuning timpani for each song.
| Y_Y wrote:
| Organists have been using foot-keyboards (somehow) for hundreds
| of years.
|
| I'm personally fond of this one though:
| https://en.wikipedia.org/wiki/Moog_Taurus
|
| See also this classic instrument, familiar from the late great
| FAO Schwartz on Fifth Avenue:
| https://en.wikipedia.org/wiki/Walking_Piano
| hippari2 wrote:
| Piano layout is suprisingly robust, just use a bigger size key
| like organists do.
| vunderba wrote:
| OP needs the walking piano from the movie "Big". That'll give
| them a workout.
| vunderba wrote:
| I've messed with using a 9-button dance pad as an impromptu
| midi controller - gives you a full octave and you use the
| center square as a "rest", but I can't imagine trying to use it
| in a live setting - it would be like trying to play a guitar in
| a bouncy castle.
| bluGill wrote:
| That idea was my inspiration. However I want more than 9
| notes. In particular I want major, minor, and 7th chords
| based as well as the root note.
| vunderba wrote:
| Yeah totally get it. You'd almost need a "mod" key or a
| wireless controller to turn on a chord mode similar to how
| arranger keyboards work...
| jfengel wrote:
| Is that possible, given that you only have two feet?
|
| Are you looking for a mode which allows you to select a
| chord rather than just a single note? (One foot for the
| root, and the other selects single/major/minor/etc)?
| bluGill wrote:
| I've been looking at accordion keyboards - with the
| accordion layout you get 100+ buttons and you only need
| to push one to get a chord. However at the width of a
| foot that is too big, and so I'm not sure if I take a
| simplified layout or just a smaller version of that.
| sdrothrock wrote:
| Have you seen Electones?
|
| https://en.m.wikipedia.org/wiki/Electone
| alexjplant wrote:
| Keith McMillen Instruments makes a one-octave foot controller
| that can send note data [1]. It was the most compact and
| affordable MIDI foot controller of this type that I was able to
| find when I looked a few years back.
|
| [1] https://www.keithmcmillen.com/products/12-step/
| addandsubtract wrote:
| TIL MacBook keyboards only send 6 key presses at once.
| neuroelectron wrote:
| iPad maxes out at 10
|
| https://imgur.com/a/01OYs3o
| beefman wrote:
| Now the Lumatone
|
| https://www.lumatone.io/
|
| Mike Battaglia plays Scarborough Fair in 31-tone equal
| temperament
|
| https://www.youtube.com/watch?v=HJKB1_gvhLE
| awongh wrote:
| A Lumatone is $4250, though!
| Ericson2314 wrote:
| For programmers only :(
| htek wrote:
| I wish I had bought a few Axis-49 controllers when they were in
| production. They were a much more reasonable $500 at the time.
|
| https://www.c-thru-music.com/cgi/?page=prod_axis-49
| septimal_lemon wrote:
| You might be interested in the Hexboard. Basically a mini-
| lumatone for ~$500; main downside is no velocity sensitivity.
|
| https://shapingthesilence.com/tech/hexboard-midi-controller/
|
| I'm quite happy with mine, and play it with the Wicki-Hayden
| layout.
|
| https://en.wikipedia.org/wiki/Wicki%E2%80%93Hayden_note_layo.
| ..
| pugworthy wrote:
| Amusing things to do... * Type things and listen
| to the various tones. I'd go for a little app that just let me
| do this day to day. I'd probably find it annoying pretty quickly
| but it would be interesting turned down low. * Use
| your browser's zoom to go way out. It has no problems offering
| you notes way beyond the ability of you to hear it let alone your
| computer from playing it.
| satiric wrote:
| Fun to mess around with. The qwerty keyboard maps nicely (for the
| default tuning you gave anyway). I found I wanted to be able to
| hold a chord on the keyboard and play a melody with the mouse,
| but the system only responds to either the keyboard xor the
| mouse. Any chance it could be made to work with both at the same
| time?
| nayuki wrote:
| My favorite variant: https://novayashkola.org/janko/ ,
| https://en.wikipedia.org/wiki/Jank%C3%B3_keyboard ,
| https://en.wikipedia.org/wiki/Isomorphic_keyboard
|
| Since a year ago, I found that I can play songs by ear on the
| Janko keyboard far more easily than on standard piano keyboards.
|
| More resources: https://github.com/wcgbg/terpstrakeyboard/ ,
| https://www.youtube.com/results?search_query=janko%20keyboar...
| joshlemer wrote:
| For those who haven't ever gotten into microtonal and other non-
| standard tuned music before, it's a really interesting space. I
| would highly recommend checking out Kyle Gann's album
| Hyperchromatica (https://www.youtube.com/watch?v=gbT9oRbu3h8&list
| =PL1IsImnKxK...), which has a pretty wide variety of
| pieces/genres, showing the potential of nonstandard tuning. It
| takes a bit to get used to it but there are brand new colours and
| emotions that open up here IMO. Definitely worth checking out!
| patrickscoleman wrote:
| Highly recommend King Gizzard and the Lizard Wizard for
| microtonal music too!
|
| For example: https://kinggizzard.bandcamp.com/album/flying-
| microtonal-ban...
| cjhveal wrote:
| To add yet another example for those looking to try out
| microtonal music, Sevish's track Gleam[1] is upbeat/poppy and
| surprisingly palatable. It explores the crunchy textures of
| microtonal while resolving to familiar pop cadences and helped
| bridge the gap for me to start enjoying the spectrum of
| microtonal harmony.
|
| [1]: https://www.youtube.com/watch?v=l9wINwlgxRU
| bluGill wrote:
| Technically Bach was writing for microtonal music - his well
| tempered clavier was written to show how songs need to be
| played in the correct keys to sound right. He was against the
| systems of the day where some keys could not be used, but his
| preferred system had each key usable but sounding different.
| Playing them on a modern equal tempered instrument fails to
| capture what he was trying to show.
| enneff wrote:
| Zheanna Erose's channel is a goldmine of microtonal music and
| discussion thereof.
|
| https://youtube.com/@zheannaerose
___________________________________________________________________
(page generated 2025-06-18 23:00 UTC)