I've recently finished a major reworking of my rhythm stage setup, and wanted to sit down where things are now. As before, this is a system that takes MIDI from a few sources and generates audio:

  • Piano: this is my main instrument in Kingfisher, and you primarily hear it directly through its own output. But it can control other sounds, either by selecting a bass note (whatever I have most recently played on the left side of the piano) or as a full keyboard (everything I'm currently playing).

  • Drums: a foot-controlled electronic drumkit. Like piano, you primarily hear it through its own output. I feed it into the system so that I can determine the current tempo.

  • Breath: a breath controller, which detects how hard I am currently blowing. This can be used to directly to control volume like a wind instrument, or slowly ("inflating a virtual bag") to let sound gradually swell and decay.

High-level changes since my last overview two years ago:

Some videos showing how things sound now:

Sandy Boys (Mandolin, Footbass, Whistle Synth):

All the Rage (Piano, Footbass, Footdrums, Whistle Synth):

Tamlin (Mandolin, Footbass):

Playing around in D (Piano, Footbass, Footdrums, Organs):

Here's what the controls look like:

This is a small cheap USB keyboard, with stickers on it so I can remember what I have set each of the keys to do. It's connected to a program that listens for keyboard events, presents as a virtual midi device, and generates midi signals, which means my core code can work just with MIDI.

The interface isn't really designed for anyone but me, but talking through it is a good illustration of what it can do.

The core of the system is an instrument or "endpoint". These seven buttons toggle instruments on and off:

  • Jawharp: bass note follows the piano left hand, volume follows current breath. Toggling D turns it into a drone (ignore breath, constant volume).

  • Footbass: note follows piano left hand, timing follows drums, patterns controlled with other keys:

    • J/R: whether I'm playing in jig or reel time. I experimented with having the system pick up timing from me as I played, but this ended up being very fiddly and I removed it.
    • DB: should the bass include downbeats?
    • UB: should the bass include updates?
    • II: should the bass go doubletime?
    • UH: should the upbeat be an octave up? (Like rocking octaves on piano.)
    • Q: should the extra notes from II be unique?
    • S: should we cut notes a bit short?
    • SS: should we cut notes a lot short?
    • C: should we include the 5th?
    • AADD: should all drums count as potential downbeats, or only the kick and snare?
  • Arppegiator: a copy of the footbass, but with different default values for the various settings. Generally plays high fiddly things instead of low bassy things.

  • Flex organ: notes follow the piano, volume follows current breath. I typically use this with something that has a bit of a rough sound, and use it to add a little bit of emphasis in places.

  • Low organ, high organ, overlay organ: notes follow the piano. Toggling V makes velocity follow the piano as well, otherwise all notes are constant volume (like a real organ, doesn't know how hard you hit the keys). Low and high only respond each to a portion of the keyboard, while overlay does the whole thing. Good for stacking voices.

By default the current bass note is controlled by the piano left hand, but that doesn't work for changing notes while playing mandolin. I put my electronic drum kit into a mode where is silent, and I'll tell the system that which drum pedal I play should choose the note. I use the piano to select the key (or F8 + midi note number if I don't have a piano) and then the arrow keys choose which notes the drums mean:

Up Major 6, 1, 4, 5
Left Mixolydian 7, 1, 4, 5
Down Minor 5, 6, 7, 8
Right Raccoon 7, 1, 3, 4

(I originally hadn't implemented this, but then when writing this post and rewatching the videos on my V3 post I realized I really missed being able to change the note while playing mandolin.)

When pressing a modifier button, it applies to which ever instrument I have most recently toggled. Often I want to modify an instrument without toggling it, so the keys immediately up and to the left of each instrument select it without toggling it:

I've set up many options for voices, and any instrument can be given any voice. I don't use most of the voices, and I'm still figuring out if these are the voices I want. Voices are selected by pressing the corresponding key:

Common ones I use are:

  • A: Subdued synth bass (footbass)
  • S: Forward synth bass (footbass or arppegiator)
  • M: Saw wave (flex or overlay)
  • F3: Piano (footbass or arppegiator)
  • F6: Hammond-style organ (overlay or arppegiator)

Sometimes I want to bring something in gradually, and maybe have it fade in and out as I vary intensity. The system maintains a concept of the current "air" level, which you can think of as the size of a leaky bag. The more I've recently blown into the breath controller, the higher the air level. Any instrument can have its volume pegged to the current air level by pressing Af. If, after bringing an instrument in this way I want to keep it at the selected volume, I can press Al to lock its air level.

There are also a few more controls that can apply to any instrument:

  • Up and down arrows: change the octave

  • ER: return this instrument to default settings

  • CH: By default all instruments are on the left channel, but can be toggled to the right channel. This is useful for separating out some instruments to make life easier for the person running sound, or if I want to be able to send some instruments (typically high ones) to my talkbox while others (typically low ones) are not filtered.

Plus and minus are a bit weird in that they work on voices, not instruments. They change the volume by 5 midi steps. I built these to make it easier to get the voices in balance, and after making a change I typically hardcode that change. It's possible that I should now switch them to work on instruments.

FR is "full reset" and puts everything back to defaults. I typically tap this after every set, to make sure settings don't accidentally persist. This is especially important because there is no way to tell which settings are on aside from observing behavior.

New to LessWrong?

New Comment