@@ -330,22 +330,25 @@ inline cr_fp_t amModulate(cr_fp_t p, cr_fp_t depth, cr_fp_t level) {
330
330
return p - (dp + (dp * level));
331
331
}
332
332
333
+ inline cr_fp_t CRMidi::ModulateChain (cr_fp_t p, Oscillator *audibleOscillator, MidiChannel *midiChannel) {
334
+ p *= audibleOscillator->pulseUsScale ;
335
+ if (midiChannel->tremoloRange ) {
336
+ p = amModulate (p, midiValMap[midiChannel->tremoloRange ], _oc->tremoloLfo ->Level ());
337
+ }
338
+ if (!audibleOscillator->envelope ->isNull ) {
339
+ p *= audibleOscillator->envelope ->level ;
340
+ }
341
+ if (midiChannel->volume != maxMidiVal) {
342
+ p *= midiValMap[midiChannel->volume ];
343
+ }
344
+ return p;
345
+ }
346
+
333
347
cr_fp_t CRMidi::Modulate (Oscillator *audibleOscillator) {
334
348
cr_fp_t p = _crio->pw ;
335
349
MidiChannel *midiChannel = getOscillatorChannel (audibleOscillator);
336
350
if (!_crio->fixedPulseEnabled ()) {
337
- p -= _crio->breakoutUs ;
338
- p *= audibleOscillator->pulseUsScale ;
339
- if (midiChannel->tremoloRange ) {
340
- p = amModulate (p, midiValMap[midiChannel->tremoloRange ], _oc->tremoloLfo ->Level ());
341
- }
342
- if (!audibleOscillator->envelope ->isNull ) {
343
- p *= audibleOscillator->envelope ->level ;
344
- }
345
- if (midiChannel->volume != maxMidiVal) {
346
- p *= midiValMap[midiChannel->volume ];
347
- }
348
- p += _crio->breakoutUs ;
351
+ p = ModulateChain (p - _crio->breakoutUs , audibleOscillator, midiChannel) + _crio->breakoutUs ;
349
352
}
350
353
if (_percussionChannel == midiChannel) {
351
354
_noiseModPending = false ;
0 commit comments