Alpha-09 proj 30something of 56: Channel
Posted: Mon May 01, 2017 6:43 pm
Alpha-09 project 30-something. Now doing the Channel to-dos.
You can now specify in a patch initial values for MIDI controls. To see the importance of this, assume we have a chorus, and MIDI general purpose controller #1 sets depth. If you haven't turned this knob yet, its value, as far as Moselle knows, is 0. So, the patch has no chorus when you load it. Far better to say "when this patch is loaded, assume chorus depth is 1.0 (max) until the user actually adjusts it.
The Channel now has 128 extra variables you can check indicating that each MIDI key is down or not. This could be used for a lot of things, but the key one is allowing a good Hammond organ simulation. As many know, Hammonds basically have 90 sine-wave generators, but they're NOT exact harmonics of each other and this is part of the charm of the sound. Instead we have to adjust the volume of each one based on which keys are being held down.
To test this... I made a new "Additive Synthesis" module, called Adder. It is actually the FMAlgo with every feature stripped out, making it as simple and fast as possible. I specify each of 90 oscillators with the exact Hammond frequency determined by the exact number of gear teeth turning it and the number of lobes on the tone wheel.
It should be spot-on*... except I can't verify it because my CPU is about 40% too slow to run the resulting 90-oscillator patch...
(* for pitch and volume of each tonewheel. No simulation of crosstalk, vibrato/chorus, percussion, the 8-contact attack, or the Leslie...)
There are a couple other Channel TODO's. For instance a graphic window letting you manipulate any MIDI controller used by the patch, so you can use it without reconfiguring your MIDI controller to send those controllers. Allow multiple channels to be monitored by one patch. That'd let you use one keyboard to tell a patch what key to harmonize in while you play the other keyboard and get magic harmony. Extract BPM from MIDI clock, and make it available to trigger and syn envelopes and LFOs. That could be a LOT of fun. But I don't think I'll have time to do these, and they could in fact be done later.
You can now specify in a patch initial values for MIDI controls. To see the importance of this, assume we have a chorus, and MIDI general purpose controller #1 sets depth. If you haven't turned this knob yet, its value, as far as Moselle knows, is 0. So, the patch has no chorus when you load it. Far better to say "when this patch is loaded, assume chorus depth is 1.0 (max) until the user actually adjusts it.
The Channel now has 128 extra variables you can check indicating that each MIDI key is down or not. This could be used for a lot of things, but the key one is allowing a good Hammond organ simulation. As many know, Hammonds basically have 90 sine-wave generators, but they're NOT exact harmonics of each other and this is part of the charm of the sound. Instead we have to adjust the volume of each one based on which keys are being held down.
To test this... I made a new "Additive Synthesis" module, called Adder. It is actually the FMAlgo with every feature stripped out, making it as simple and fast as possible. I specify each of 90 oscillators with the exact Hammond frequency determined by the exact number of gear teeth turning it and the number of lobes on the tone wheel.
It should be spot-on*... except I can't verify it because my CPU is about 40% too slow to run the resulting 90-oscillator patch...
(* for pitch and volume of each tonewheel. No simulation of crosstalk, vibrato/chorus, percussion, the 8-contact attack, or the Leslie...)
There are a couple other Channel TODO's. For instance a graphic window letting you manipulate any MIDI controller used by the patch, so you can use it without reconfiguring your MIDI controller to send those controllers. Allow multiple channels to be monitored by one patch. That'd let you use one keyboard to tell a patch what key to harmonize in while you play the other keyboard and get magic harmony. Extract BPM from MIDI clock, and make it available to trigger and syn envelopes and LFOs. That could be a LOT of fun. But I don't think I'll have time to do these, and they could in fact be done later.