Skip to content

Commit 331b41b

Browse files
committed
modulate chain.
1 parent 961269b commit 331b41b

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

CRMidi.cpp

+15-12
Original file line numberDiff line numberDiff line change
@@ -330,22 +330,25 @@ inline cr_fp_t amModulate(cr_fp_t p, cr_fp_t depth, cr_fp_t level) {
330330
return p - (dp + (dp * level));
331331
}
332332

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+
333347
cr_fp_t CRMidi::Modulate(Oscillator *audibleOscillator) {
334348
cr_fp_t p = _crio->pw;
335349
MidiChannel *midiChannel = getOscillatorChannel(audibleOscillator);
336350
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;
349352
}
350353
if (_percussionChannel == midiChannel) {
351354
_noiseModPending = false;

CRMidi.h

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class CRMidi {
3939
MidiNote *GetFreeNote();
4040
void ReturnFreeNote(MidiNote *midiNote);
4141
void FMModulate(MidiChannel *midiChannel);
42+
cr_fp_t ModulateChain(cr_fp_t p, Oscillator *audibleOscillator, MidiChannel *midiChannel);
4243
bool setCC(uint8_t *value, uint8_t newValue);
4344
MidiNote _midiNotes[oscillatorCount];
4445
MidiChannel _midiChannels[midiChannelStorage];

0 commit comments

Comments
 (0)