collecting sum signal per-channel of midi-notes
Greetings. ( Serious Newbie-warning :-) So: I want to work with MIDI, and implement the Great Missing Midi-Controller, namely a per-channel overdrive distortion like the foverdrive,1196 LADSPA plugin. Untested: fun float foverdrive_1196(float x, float drive) { drive - 1.0 => float drivem1; Std.fabs(x) => float fx; return x*(fx + drive)/(x*x + drivem1*fx + 1.0); } This means I have to get the TriOsc of the note not into a dac TriOsc t => dac; // NO! but into some code which will add it to the per-channel total. I guess those totals will be stored in perhaps LiSa's ? float cha2drive[16]; // set by nonstandard MIDI controller 87 LiSa lisa[16]; // the per-channel total signal of all its notes But at this point I get brain-overload :-( How do I add the TriOsc sample to its LiSa ? How do I invoke foverdrive_1196() on each sample before outputting it to the dac ? I'm very unsure about "now", too, how it co-ordinates between code of all the individual notes and the final "=> dac" step, but still executes all these things scattered throughout the code in an appropriate order. Hope this makes sense... If I get this solved, I should become more self-maintaining... Thanks, Regards, Peter Billam http://www.pjb.com.au pj@pjb.com.au (03) 6278 9410 "Follow the charge, not the particle." -- Richard Feynman from The Theory of Positrons, Physical Review, 1949
Peter Billam
Greetings.
( Serious Newbie-warning :-)
So: I want to work with MIDI, and implement the Great Missing Midi-Controller, namely a per-channel overdrive distortion like the foverdrive,1196 LADSPA plugin. Untested: fun float foverdrive_1196(float x, float drive) { drive - 1.0 => float drivem1; Std.fabs(x) => float fx; return x*(fx + drive)/(x*x + drivem1*fx + 1.0); }
This means I have to get the TriOsc of the note not into a dac TriOsc t => dac; // NO! but into some code which will add it to the per-channel total. I guess those totals will be stored in perhaps LiSa's ? float cha2drive[16]; // set by nonstandard MIDI controller 87 LiSa lisa[16]; // the per-channel total signal of all its notes
But at this point I get brain-overload :-( How do I add the TriOsc sample to its LiSa ? How do I invoke foverdrive_1196() on each sample before outputting it to the dac ?
If you are going to shape a wave at sample rate, you want to use a Chugen: class Foverdrive1196 extends Chugen { 1.0 => float drive; fun float tick(float in) { return ...; } } Then TriOsc t => Foverdrive1196 over => dac;
I'm very unsure about "now", too, how it co-ordinates between code of all the individual notes and the final "=> dac" step, but still executes all these things scattered throughout the code in an appropriate order.
Hope this makes sense... If I get this solved, I should become more self-maintaining...
Keep it up, this sounds interesting! michael
participants (2)
-
Michael Heuer
-
Peter Billam