Just a quick compatibility issue: for some reason, my midi board triggers a key input both when I press it down, and when I let it go. I'm assuming that it might just be something wrong with my board, but I did want to let you know in case there might be some nuance you haven't considered with respect to the midi commands. I know my first crack at it didn't distinguish between note-on and note-off commands, for instance.
I can add a bit of information to what might be behind this bug.
In MIDI, there are NOTE_ON and NOTE_OFF events, for when you press and release each key. The NOTE_ON has pitch and velocity parameters. The NOTE_OFF just has pitch parameter (maybe it has velocity as well I can't quite remember, it's off the point). So if you push middle C, it might look like this:
NOTE_ON 60 (middle C) 98 (velocity),
NOTE_OFF 60
Some keyboards never send NOTE_OFF events, instead they send NOTE_ON with velocity 0. On these keyboards, pressing middle C looks like this:
NOTE_ON 60 98,
NOTE_ON 60 0
Both are valid MIDI streams, and all stream processors should react appropriately to both. This app likely does not correctly map zero velocity NOTE_ON events to NOTE_OFF with the same pitch.
Sweet! Thanks for the follow up. I hope it's a straightforward fix!
Aside from that, nice work on the app! Looking forward to giving it another try.
ETA: a shameless plug, but since you may have an interest in this kind of thing - I built and published a free, online midi piano (and drum kit) available for anyone to use. It's pretty bare-bones and doesn't really explain itself, but in case you ever want to use it, check out https://midi-speaker.com/
works with midi input as well as keyboard and touch/mouse input. it only has the two sampled instruments, but it's great for a groove in a pinch!
Okay I think it's fixed - I'm testing for NOTE_ON with velocity of 0. Let me now if that solves it for you. I simulated a test of it because my midi controller just sends the regular NOTE_ON/NOTE_OFF messages!
Tried out your site - super clean interface. I noticed you are using the Salamander Grand Piano samples. For some weird reason I thought that those samples were pretty huge (50+ MB) but it loaded up pretty quick so great job!
Working as expected. Thanks for the fix! Now that I'm actually able to use it, it's pretty great. It's a really great experience, exploring to fill out the notes. I do get that rogue-like itch for immediacy, when I make a simple mistake, but it feels like having to wait gives a nice buffer. I also really like how configurable it is. That's something that is often overlooked.
Also, thanks for checking out the site! Yeah, I compressed the files down to .mp3, myself, and then only used a single velocity, so that they were around 2MB in total. They sound terrible, in comparison, but good enough for phone speakers and non-recordable jamming. You can find the same-sized, better-sounding .opus versions in all velocities on the repo's base-functionality branch, if you're interested in those samples.