I've been increasingly dissatisfied with the idea that the MIDI router should only know how to talk to FluidSynth. There's no particular reason a MIDI message should have to end up at the synthesizer. It could control something else on the Pi, get sent out another MIDI port, trigger a loop, or control some aspect of the SquishBox itself.

So I've been experimenting with Python MIDI libraries as a way of making the routing more general. The idea is that the SquishBox should be able to respond to MIDI events in useful ways without having to hard-code every possible interaction into the main program. For example, buttons on a MIDI controller could control the SquishBox, messages could be mapped to legacy MIDI ports, and eventually the same machinery could handle loops or other kinds of events.

I also finally got portamento working in FluidSynth by applying a patch from the FluidSynth project. That was a good reminder that one of the advantages of building this thing around open-source software is that when something doesn't quite do what I want, I can actually go look at the source and fix it - or at least steal somebody else's fix.

The more I work on this, the less the project seems like a "synthesizer" and the more it looks like a general-purpose MIDI/audio computer with a deliberately simple hardware interface.