I originally wrote it for my patreon, so I cover stuff most of you will know. But I got kinda deep, thought someone out there might find it interesting.
skipping notes
so here I am, working on the synths. Working on the synths for me is like, you press play, and you kinda do your thing while everything keeps moving. think of it like double dutch jump rope. You got one person jumping and the other's gotta feel the rhythm and jump in. at least, I think it's called double dutch, but in a fit of anti-ai rage I refuse to look it up.
skipping notes
When you play music this way, you have to take some care into how you program all your synths. If you tell a synth to 'jump in', it can't fuck up the other kid that's currently jumping like a kriss-cross. And when a synth jumps in and eats shit, you really notice. The only way to catch these issues is to perform the song and just, see where they are. You won't usually notice them in the context of a single look, it has to be when you're changing things in the middle of a song.
Anyway, I had one of these issues. Sometimes, not all the time, when i'd tell this one synth to jump in, it would eat shit. And sometimes it was fine. This usually would point to some note programming on a 4, 8, 16, or 32 bar boundary since I always modify what's playing in one of those multiples. A common thing I do, for example, is I like to push some notes ahead of the beat, this kinda makes the song drive a little bit. If you do this kind note-pushing right on a "4-bar boundary", the note can end up cutting off weird. And usually that goes one of two ways, you get a quick blip, or the note just won't happen (common in sounds with a long attack, anyway...).
I'm trying to do a new bridge for 'mew', and so i'm doing a bunch of experimental layering, trying to figure out just how to build the track up. And yea, sometimes I'm getting the 'no note' symptom i describe. Sadly, after inspecting like 8 times, I just couldn't find anything wrong. Though I did eventually figure out how to make this little blip happen without fail. It would happen specifically at the 32 bar boundary. A clue, at least.
program control woes
Now from experience, I'm aware of another thing that can cause a musical blip at the start of a passage. It has to do with a special kind of programming called a program control. This is just a number we send to the synths that tell them what sound to load up. Sometimes when 'new sounds' load, there can be a hiccup. It depends on how long it takes the synth to load the sound, as loading a sound on the actual first note is too late. Program controls are special, they send before the notes play. If the synth is fast enough great, if not, bye bye first note.
Though, there's one more possibility. These program control messages are a little more complicated. The issue is any single message in MIDI (which is the spec for how this stuff works), these messages are like 8-bit. I mean it was made in 1970/80 something. An 8-bit number only goes so high, idk how much you know about binary but each bit gives us a little bit bigger of a number (and i'll leave it at that). So if a synth wants to offer more than "8-bit" worth of sounds, this program control thing falls apart.
There is a solution. Tl;dr the way MIDI solves this is to put THREE messages together. There are two messages to optionally accompany these program change messages. These two messages, (and yes, i'm going deep because I WANT YOU TO KNOW MY PAIN, anyway, these two messages) are called most significant byte and least significant byte. When you want to have two bytes (8bits each) to represent a... bigger number, you stick them together. You just have to know which message goes first, thus the most and least significant.
These two numbers form together to do something called bank switching. Basically like thumbing through a library index if you want to look at it that way.
With me so far, so we have a most significant and a least significant byte, and they go before the program change, and all of that, if done "really really fast" will load up a sound on a synth. Lol, fuck my life sometimes.
Bug hunting
Anyways, two issues it could be. To figure it out, I have to hook the synths up to the computer and then manually inspect the data. I'm going to show you that now, your lives shall be changed forever.
[image: midi_bug.jpg]
The image above is from a thing called uhhh midi monitor. I have it setup to filter out music data to just one synth which lives on channel 3. I drew a yellow box on the left, and it tells you what 'kind' a message is and so far I've only told you about program control. The other kind of message is called a control message, these are basically anything we use for automation (musical notes would be called notes).
This shows a bug. Well, like half of the why. The secret is in that box on the red. Control messages have two pieces to them. First they have a 'control number', so you can have different controls. Then the second number is a 'value', basically what do you want to set that control number to. I want the volume to be 8. Make sense?
The first two control messages are the MSB and LSB (most and least significant bytes). They launch and then right after the program change message happens. I think this is to spec. But then something funny happens, you see the MSB and LSB fire off again however this time no program change follows. When this happens, the synth can be waiting for a program message, and so it has to wait a certain amount of time and this is where my note is vanishing to. At least, I've seen this behavior on other synths, so it's plausible enough for me to continue.
half the why
We can from a technical perspective understand what causes the symptom of the note not playing; it's these not happening in the correct order; rather we have more controls being sent than we even want. But we don't what is causing these controls to send in the first place.
And that's a huge fucking mystery to me still. I did some experimenting and I think the sequencer is bugging out. I basically found where MSB and LSB are set and totally unset them. They send anyway.
The only way I can get them not to send, is to delete the whole program change message.
And if I put the message back, MSB and LSB, tho unset, send anyway. Something is lodged somewhere - like session corruption or something. I don't really feeling like trying to disassemble this with claude so I won't. But this is most certainly some weird little bug.
the fix
well, I can't live this way. I have to fix it. More like work-around. But I mean, just writing midi is a workaround to life so it's more like "this is how you have to program music" heh. Anyway, oddly enough, this bug doesn't happen on earlier passages of the song. So, just have the early passage setup what sound the synth is playing and make it so this particular passage of the song can't load a sound on this synth. It can be a little annoying when I want to spot fix something, cause I have to take extra steps to load the sound. But I don't have to hack my sequencer and I can get the song to play.
And now you understand my pain. Ever want to know why it takes like 7 years to make a record? It's days like today.
Hopefully you followed along, that was a deep one. But that's real life, when you're dawless.