*Changes*
- Ableton keyboard layout for ladidahh also thanks for a user name that I had to type about four times because of my phone's autocorrect! :)
- Tempo sliders for practice and Simon modes
- Lock icon which lets you freeze the difficulty at a certain number of notes in Practice mode instead of constantly increasing
- Floating display window in settings which displays stave and note that you are currently playing on a midi keyboard.
*Future Updates*
- Noodle time (let you play around to experiment before going O'Reilly Live)
- Markov or Transformer (thanks viraptor) approach to generate more sonically pleasing melodies
- Pianistic echoes (caetris24) - an optional visualization for the onscreen keyboard almost like a heat map pattern
- Fix the weird iPhone audio issue (EdNutting had some good advice on this)
- still looking at adding the Tracker 4-layout as proposed by moosedev
*Helpful fixes*
- Some midi controllers don't send a corresponding NOTE_OFF, instead they send a NOTE_ON with velocity of 0 (Thanks ta2112 for this helpful info)
White Keys: The keys from ‘A’ to ‘L’ on your keyboard correspond to the white keys on a piano, covering a full octave from C to D. Black Keys: The keys in between, like ‘W’ and ‘E’, correspond to the black keys or the sharp notes on a piano. from : https://www.electrikjam.com/use-your-keyboard-as-a-midi-cont...
On a US keyboard:
QWERTYUIOP[] is the white keys starting at middle C. (The row above is the black keys; the 2 key plays C#.)
ZXCVBNM,./ is the white keys starting an octave lower. (S plays a low C#.)
The two ranges overlap; e.g. Q and , both play C in the same octave.
Grew up composing music on a computer this way when my (musical) keyboard didn't have MIDI and I couldn't afford a better one :)
But if FL Studio (formerly FruityLoops) and Renoise use the same layout, as others have said, then those are probably going to resonate with a wider modern audience :D Or maybe just call it "FL Studio / Renoise / tracker layout"?
I don't do computer keyboard note entry any more, but I still have the muscle memory for that 4-row layout from hours spent with it in the late 90s :D And I'd totally use it in your game. (My MIDI keyboards are kinda too far away from the mouse and monitor.)
As a classically trained pianist, I'll say the following commentary regarding this thread: there are many ways to learn to "play the piano" and no one is going to agree on "the right way" because there's no true way.
This project is a good way to practice basic sheet music reading as well as to aurally recognize notes and phrases; teaching would require some cultivation of understanding the context and nomenclature. Thanks for sharing!
There’s just no substitute for having someone there in person watching your hands, correcting small ergonomic issues, fingering, and so on. Build those fundamentals now so you don’t have to unlearn bad habits later!
During lessons, we did this kind of stuff all the time. I would close my eyes and my instructor would play a series of notes and I would need to play them back by ear.
I would also listen to whatever song I was learning before I went to be bed and again when I woke up in the morning, visualizing every note.
Give me a guitar today and I can work out pretty much any song I hear on the radio in under a minute just by listening.
EDIT: To be clear, I also played a LOT of guitar and piano. Ear training was in addition to the hard work of becoming a player.
I found that it's also an excellent way to "feel" the structure of a melody as well since you're essentially building it up again. Of course you could read music to see the actual melody, but working it out this way feels a bit more intimate.
I guess this showing you the sheet music as you find the notes can help with that, but as others noted - I'd like a "mess around" mode, before a "test" mode.
I have a great ear and am terrible at reading sheet music. Fine if you aspire to be a rock guitarist. Not so fine if you aspire to be a classical pianist.
Funny, but I'm final tired of my poor sight reading and have set a goal for 2025 to average one hour of piano playing from sheet music per day.
And I agree...a "mess around" mode on the app would be great. Feels almost punitive when I make a mistake.
If you're looking to improve your sight-reading and don’t mind playing church music, I highly recommend picking up a second-hand copy of an old Episcopal Church hymnal (I like the 1940 edition). All the pieces are four-voice and the rhythms are relatively simple, so you can concentrate on sight reading. Good luck!
Funny, but in church, I spend more time than maybe I should sight reading hymns during the sermon. :)
I couldn't find a setting to freeze the difficulty where it's comfortable and where the melody can still be construed to make sense.
When adding more notes, it breaks the flow and turn a training for pitch practicing into a memory game for rain man, even more so when we make a mistake and must redo the melody partially.
The "construed melody" is a harder problem. I've been playing around with the idea of using a markov model or even borrowing what CPU Bach did to try to create more coherent melodies over time.
Thanks for the feedback!
As the melodies get longer and longer with each win, this devolves quickly into a memory game. I'd like to keep playing ear training, but I struggle with remembering what sequence of notes came at steps 8+.
This is somewhat aggravated by completely resetting the current level and replaying the whole melody after a single mistake. If I keep making a mistake in note 10, I get all the notes over and over again, which is a bit maddening.
I'll need to put in some proper limitations or possibly add 8va type symbols to more properly limit to a grand staff.
Mine's based on the old electronic toy Simon - infinite and progressively more difficult.
https://en.wikipedia.org/wiki/Simon_(game)
You should definitely add midi controller support though - WebMidiJS makes it pretty simple.
I hate that I can't do a second one after finishing the first task... I know this is supposed to be this magic user engagement trick where people come back day after day because there's no other way to use it, but it's not for me if I can't choose when to play a game or practice a skill
I have to sign every note with a letter in a music book because only other way to "read" music sheet for me is count lines for each note, which is unbearably slow.
I wonder if there is any modern (AI, bluetooth midi app, etc) way to get over initial hurdles easier?
I’ve heard some people say that the Piano Adventures Player app is a nice little tool because it serves as a supplement to the books themselves.
https://pianoadventures.com/resources/piano-adventures-playe...
Good luck on your journey!
Keep at it!
Also, I think the missed the first note UI could feel a little nicer. Something about the popup/hiding the music takes you out of the flow. Possibly just a subtitle would be enough with an encouraging message. There is a big difference between failing to do the whole pattern and failing the first note so definitely worth refining the feedback here.
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.
Thanks for the feedback. Oof that's weird. Maybe I'm triggering some kind of odd aftertouch?
EDIT: Just saw ta2112's note. That's super helpful I'm definitely only responding to standard MIDI NOTE_ON and NOTE_OFF messages.
I'll try to get this fixed this evening.
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!
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!
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.
I feel like "listen" should be the first, more prominent button and "start" should be moved to the end and renamed to something more meaningful like "ahh shit, give me a different one"
other than that, cool.
Also the sound is very high quality. Having built various A440 piano synths from scratch, the fidelity of the sound is superb. One thing I noticed was that the sound buffer has a memory issue at some point (after about 40 minutes of continuous practice) that causes the sound to start crackling. Maybe something to do with memory storage or something isn't getting flushed when the channel goes idle (no sound playing). Will fiddle. Nice work!
Should be as simple as adjusting the color interpolation in an animation on a piano key to its gain (not sure how low the sound API is for this, but you should be able to track the key's moving average on amplitude over 10 frames and bound it to get a fade effect that takes the key press strength into consideration).
Perhaps you can even use a Simon Says color theme suited to the app's theme to work in a nice easter egg. Lots of cool things with this!
Thanks for the feedback - I'm glad you found it useful! I literally made it because I was thinking about the old Simon toy which plays a set of consonant notes (G, C, E, G) and thought it would be a fun way to practice playing by ear!
Thanks for the feedback - that should be pretty easy to add as an option in the Settings. I'll see about getting it added this evening!
Also, too complicated for a beginner, I would start with things like "guess which note is higher" or "how many notes are played simultaneously".
- Show All Notes - all notes in the sequence are displayed in the staff (which pages to next groups of notes as you play)
- Show Next Note - only the next note to play is shown
- Show Last Note - this only shows the previous note that you got correct forcing you to rely entirely on ear training
Beginner modes like "higher/lower" are an interesting idea. Thanks for the feedback!
Maybe it just needs to reset faster or maybe start more gradually so you can build up muscle memory of intervals.
I'll look into it!
One improvement that would help me a lot is to control the playback speed. My brain needs to start a bit slower as some of the sequences are fairly fast for my brain right now.
Thank you
The defaults are currently
- Simon is set to 100-120 BPM
- Practice mode is set to 90-160 BPM
I'll add it to the Settings later this evening. Thanks for the feedback!
The MIDI support is a nice touch. Haven't connected my keyboard yet though. Gonna try this out.
I don't have a midi piano. Wondering if it is easy for you to support my inputs using microphone. I think there will be several noobs like me with the same problem.
So you're saying I should add a klaxon? :)
Seriously though - I'll look into a redesign!
Just waiting for Yosemite Sam to run in and blow himself up.
Hope this helps you on your musical journey~
Okay, okay, not quite (FFT libraries are a thing), but pressing buttons on a keyboard is leagues easier than reliably detecting (and filtering noise from) tones coming through a microphone! Not a bad suggestion though
I’m guessing you may be using a JavaScript API which possibly doesn’t exist in whatever version of Safari (fuck Safari…fuck Apple’s control of browsers…etc).
My advice: Use the free tier of BrowserStack to test basic functionality on a wide range of devices (assuming they still have a free offering…). Also check “caniuse” to see if all the JS APIs you’re using are available on a wide range of devices.
If you get a chance, could you see if the Metronome works? It'll only play if you're in the middle of a game but it doesn't use the old soundfont-player, just direct web audio.
Haha - I don't collect any telemetry so your secret is safe. Yeah - if you've got a USB midi keyboard plugged in - the game should autodetect it and just work.
If you're looking for something portable that just works (and don't need a weighted action) - IK Multimedia makes a 37-key controller that is cheap and decent. It's frequently on sale for about $80-120 and probably could be had for cheaper secondhand.
I realize the GP comment was a provocation, but please don't respond to a bad comment by breaking the site guidelines yourself. That only makes things worse.
I love this response. for what its worth there is some thought here on this app.
I thought one way to help mitigate my emotional responses was to desensitize myself, but who really wants to expose themselves to the requisite sufficient threshold of personal attacks? That’s not exactly a fun callus to develop.
No, "LLMs can only output what's in their training data" hasn't been true for awhile.
Curious what you mean by no attempt to teach. We learn multiplication tables by rote. Are flash cards a genuine instrument of learning? The only way to learn intervals is to practice identifying them. This is how you do it. You can read about music theory (and should) but the only way to build your listening skills is to practice it starting with basic stuff.
That said, I think it's very useful for what it is and highlights that whatever your view on AI, there is a niche here that AI can fill that people otherwise would just not build either because they don't think it is interesting, or because no one would pay enough for it.
FWIW I think it's probably more useful to play what you hear than it is to be able to name it. Although they're both good.
> You can read about music theory (and should) but the only way to [...]
My point is just that "you" (an abstract you) can learn music abstractly and in practice. Some things require book reading. Some things require practice and listening. Nothing intended about the cgriswald "you".
I know how to do long-hand multiplication and have memorized the 12x12 multiplication table. I'm not sure which one is more valuable, but I think they complement each other.
I'm not sure if we actually disagree about anything, except maybe the relative value of knowing what an interval sounds like vs what it's called.
Imo not being able to select a subset of intervals to train heavily limits how useful this is.
As meta commentary, those not in a subgroup sometime fail to see utility of a thing built for that subgroup and it's easy to feel a sense of superiority "oh how dumb and trivial this thing is", but it may be better to first have curiosity and see how the intended audience responds. Often it's not dumb or trivial, you're missing context and experience to see the value.
Other commentary is you're not owed courtesy you yourself didn't give.
Your original comment implies "it's GenAI so it must be bad."
I think "teach" is a high bar, but I do think it's a good practice tool.
My one and only complaint is that sometimes the melodies it generates are tough to play back because they don't really sound like a real melody and I have to fight my brain telling me to play back the one that would actually sound good. Sort of like having to memorize a random string of words vs memorizing a normal sentence.
For me I was thinking a thought I almost never think and is long forgotten "where is that old home button in my browser so I can set this as my homepage, or maybe I have to solve 2-3 of these before I can log in to my computer" xD
"insubstantive" is a nice word - software that is modifiable by the user at run time - I guess like scripting "it's just throw away" or emacs bit of elisp and keyboard macro and move on "insubstantive"
Embrace the insubstantive! Otherwise - enjoy when you have a "problem" sitting down and having to abstract more and find the general and solve for "N" because the time investment was high and the tools did not allow for this sort of sketching, insubstantive, throwaway type thing.
The good news is that this means you can quickly make the same app yourself at home, and improve it to suit your needs.
Liked: Sheet/No shit split
Would like:
- Ability to play with PC keyboard, other apps already have some type of interface to type with keyboard, of course it might change depending on keyboard layout, but it's pretty standard and it happens that the keys aren't usually alighned, so you can have one row be whites and the upper row being blacks.
- Maybe the waiting times between new notes in simon says can be faster? The "You Win" is a bit slow and it feels like forever, breaking the pace of the music.
- Difficulties can be increased as well, Simon Says currently seems like it only does very small intervals, (feels like sheet based is a bit different but maybe not). Maybe it can be configured to allow a wider range of intervals, making it more difficult.
The other similar product that I've seen is an app called Yousician that did this for guitar but it was microphone based. This is very neat.