I was going over journal notes from last year, and spotted my scribbles for working out MIDI notes from corresponding standard musical notation (C1, C#, etc). Maybe my Google-fu was weak, but I couldn’t find anything that described, in algorithmic terms, how to convert between these two systems at the time.
Beyond some brief flirtations with learning guitar in my teens, I’ve never had much of a musical education, so it’s likely that this is just old news to folks who do. In any case, it was a bit of fun to work out.
I was using it to help “debug” the drives I used for my musical floppy drives project last year. It’s obvious when you think about it, but due to each drive’s history and construction each produces a different range and timbre. This means when you’re making tunes, you get drives which work better as sort of “baritones” or “sopranos”, if you catch my drift.
I’d hook up the drives before playing anything, and run through each note in the desired range, and adjust the drives accordingly. Drives can start to wear down a bit when you’re using them for a purpose they were never intended for, so their ranges change; again, useful to test beforehand.
Another angle on this is that MIDI is a really weird old format, with various implementations of the spec at different times, and created for different target devices (an array of floppy drives was not an early contender, unsurprisingly).
I thought it would be fun to write code to create some of the songs I wanted to reproduce. Since “output to floppy drive” is a definite reduction in fidelity, I thought it wouldn’t be too much hassle, and would save me basically learning how to play piano. Someone else clearly thought this would be a good idea too, and created MIDIUtil to aid in doing so.
Reproducing songs turned out to be somewhat tricky (to put it mildly). I did, however, use it to help produce the tests for my drives. I wanted to start hooking up microphones and run an automated test and callibration suite on the drives, but at this point it was becoming a bit of an obsession and I decided to take my foot off the gas for a while.
I never ended up doing all I wanted to with the code, but I’ve now open sourced the few bits and pieces I did write. Of particular interest, to me anyway, is the implementation of the algorithm for converting from standard notation to pitches. Might be useful to someone else!