Tuesday 5 April 2016

Update

The Synth Collection is going into deep hibernation as I focus on other stuff that requires focus. Like having a life, enjoying the nice weather, slowly updating iPad apps, volunteering for good causes. That sort of stuff.

But it finds itself in very good shape as it does so. New (ish) stuff is :

It now has MIDI filters. These are .so files that users write for themselves - coding!!! - and these filters extend the functionality of the sequencer part of the Synth Collection at run-time. They may be installed for the duration of a session or for just one song, or for just part of a performance. They work only on keyed / performed MIDI events (notes, twiddled controllers, bashed pads). Anything played as a result of having been programmed into the sequencer is executed as-is, with no filtering. The filters accept as input a single MIDI message, and output zero or more MIDI messages, and typically they input one, output one, selectively changing the contents of the message. Multiple - up to 8 at present - chained filters may be active at any one time. All the messages output by filter n will be processed as inputs by filter n+1. As a message exits the final filter in the chain it is passed through to the cluster of synths to be played or otherwise interpreted.

This is the first time 3rd party code has been able to run inside the synth / sequencer setup, and the purpose of this in my mind - others will I am sure find other and better uses - is live rig setup. For example, I have a Novation LaunchKey. Given to me by Novation, so thanks for that. It is in fact pretty brilliant, but it doesn't have a Program Change control. But it does have a pair of round buttons on the far right of the keyboard that generate a pair of MIDI CC events on controllers number 104 and 105 respectively, with the data parameter at 127 on pressing the button, and 0 when releasing the button. Perfect candidate for a MIDI filter then, where these specific events are intercepted and converted to MIDI Program Change events for that MIDI channel. And as a result of implementing the filters I have been able to remove all the Launchkey-specifics in the code base, and push all that into a plug-in filter or two.

Another use, which I totally love given my current fixation - Swell to Great. I'm going through a 'fascinated by church organs' phase, admiring pipes, looking lovingly at stops and pedals in churches, but didn't actually know what 'Swell to Great' meant or how it worked until last week, when a YouTube video showed me mechanical coupling of manuals for the first time. So now I have a 'SwellToGreat.so' filter that implements a Swell to Great lever, coupling and uncoupling NoteOn and NoteOff events from one channel to another according to the value of a CC, and dealing with all the corner cases around pulling or releasing the lever when notes are being played across the 2 manuals/MIDI channels. This one is wildly entertaining as twiddling the knob fast while bashing 2 keyboards can cause a veritable explosion of NoteOn and NoteOff events, a good testing corner case.

And filters will I am sure have many more uses that I just haven't thought of yet - many of them around the next feature, which is 'drawbar organs'. The wavetable synth can now be programmed as if it were a Hammond / drawbar organ. People get jumpy when you say 'Hammond' because no, it IS NOT a Hammond, it has no programmable keyclick, no paraphonic percussion, no Leslie emulation. But yet, it is a drawbar organ and to my ears it sounds pretty sweet, Hammond or not.

Anyway, in case you've forgotten, the wavetable synth lets you program a voice with 2 layers of 'wavetable trajectory', with up to 8 settings within each trajectory. The synth moves smoothly between these settings at a constant or 'tweaked constant' rate - time, time squared, sqrt(time) or exponential time / half-life - at independent rates per layer. Each setting along the trajectory is built from a linear blend of a pair of the built-in wavetables, so it all gets quite rich as notes evolve and morph during playback.

The new stuff is a 'drawbar' mode which lets a trajectory be made up of drawbar settings, programmed with 'Hammond strings'. So you can ask for "528370621", it will set up the location in the wavetable as if it were a Hammond with that drawbar setting. To add spice and more harmonic richness to it, table zero (the one programmed above with a '5', the 16' / sub-octave /  'Bourdon' drawbar) can be any wave from the inbuilt set of tables rather than a sine wave. Here is a preset using drawbars -

preset:1 organs {
layer:0 drawbar:4,117,808000000,123,880808000,122,002673540,121,888405088, EG:0.003,0.0,0.999,500.0,0.004,0.0 lambda:0.0 lin:2 LFOsense:0.0,0.2 level:1.0 feet:8
layer:1 drawbar:4,117,808000000,123,880808000,122,002673540,121,888405088, EG:0.003,0.0,0.999,500.0,0.004,0.0 lambda:0.0 lin:2 LFOsense:0.0,0.2 level:1.0 feet:8
poly:4 bend:12,2 LFO:0.2,tri MOD:7.0,tri Bdrift:0.05 cutoff:0.6 mixmode:cross

a) yikes b) notice that both layers have identical settings. This seems a bit wasteful, but it does let one detune layer B against layer A for a big rich phasey experience.

Having a drawbar organ sound evolving over time is a bit odd and not at all organy, so there is now a CC trajectory control. To get a believable drawbar organ tone you program in a trajectory that proceeds at zero speed, and the trajectory CC adds its value onto the trajectory parameter, giving you direct control of the trajectory parameter via a single knob to morph through up to 8 Hammond stop combinations. Couple that with MIDI filters and you are winning, you have an instant stage organ with fingertip control. How's that? Well, just intercept the Launchkey drum pads within a filter, and get them to push out 8 different trajectory CC settings instead of their built-in channel 10 NoteOn / NoteOff events. For just one song in a set you might need a Hammondish organ sound with a bunch of presets for first verse, first chorus, bridges, second chorus, giant mega finale - you can program up a single Hammond preset in the wavetable synth, and have the otherwise unused pads on your Launchkey be instant access stop settings for the organ. For the giant climactic stops you can also make the pads automatically ramp up the send amount into the Vibrato Chorus unit, and into the reverb, for genuine massive swelling organ magnificence. And if you program up 2 totally different layers, the LaunchKey has 16 buttons - you can set up 16 different stop settings picking from or blending between the 2 layers by setting the trajectory controller AND the layer mix controller according to a pressed pad. See what I mean about these filters being great? Really, this is too brilliant for words, plus it means I don't have to bust a gut adding features into the sequencer, I can let users do that. Big old win.

'Hang on there daddio, back up a minute - what Vibrato Chorus unit?' you may ask. I shall assume you did ask - so, whilst implementing Hammond mode, I decided an LFO modulated pitch wasn't Hammond enough. It sounded cute and poppy, but way too Vox Continental. So I read up on stuff and added a cute modulation effect as 'delay slot 4'. Now when you plumb a synth's output to a delay input, delay units 0 .. 3 operate as before, but the new delay 4 is a 'Hammond Vibrato Chorus', and it sounds pretty brilliant. It is a very short delay line, maximum length only about half a millisecond, with the amount of delay driven by an LFO. The LFO waveshape is a stepped triangle so it has big chunks of time when the delay is constant, and the delays - the flat bits - are chosen to align as closely as possible to the delays induced by a physical Hammond Vibrato Chorus unit.

Here's a very quick taste of the organness of it all -



And the final new thing that I can think of is envelope control - at least of wavetable and SR synths - from CCs. So you can wiggle knobs to change any parameter of the envelopes, but the Launchkey only has enough knobs for me to mess with attack and release, as I have already got mappings for pan, reverb send, delay send, layer B detune, A/B mix and trajectory. It makes an otherwise somewhat lifeless sample replay setting much more interesting, electronic and 'synthesised' to have artificial attack and release behaviours overlaid on the sample recording, particularly release - a choir of Caitlins with soft attack and extended piano-like decay tails suddenly sounds only sort of human.

So that's it - sounding awesome, and being put to bed.

Anyone who is a genuine, serious musical artist / performer / composer / busker / synthband who would like to use these synths and the accompanying sequencer to invest time in learning and actually make and play music, please do contact me. Ditto school music departments who are willing to put some effort into this. Note, this is primarily a music thing, as opposed to being primarily a computing / software thing. I suspect the right people for this are either music departments with access to coders or with coding-capable students, or departments looking to STEAM as the next big thing, with the art . performing art as the focus, not the tech / coding piece. This is totally not about teaching 8 year-olds to code, it's about using low-cost computers to make music via high quaity synthesis.

Be prepared to make a strong case for yourself - if I buy into it and believe in your commitment to using this, I may give you one (or 20/30 if you are a music department), and the support you need to make things happen with it. UK-based folks only, sorry to the rest of you.

Anyone who sounds remotely tyre-kicky won't get a response. If you don't get a response but you aren't a tyre kicker, please don't be offended, I am going to be VERY VERY selective about any partnering with artists.

Right, now to enjoy the sunshine for a few months.