Skip to content

Commit

Permalink
Merge pull request #9 from anarkiwi/modchain
Browse files Browse the repository at this point in the history
modulate chain.
  • Loading branch information
anarkiwi authored Jun 19, 2022
2 parents 961269b + 331b41b commit 9b75308
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 12 deletions.
27 changes: 15 additions & 12 deletions CRMidi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,22 +330,25 @@ inline cr_fp_t amModulate(cr_fp_t p, cr_fp_t depth, cr_fp_t level) {
return p - (dp + (dp * level));
}

inline cr_fp_t CRMidi::ModulateChain(cr_fp_t p, Oscillator *audibleOscillator, MidiChannel *midiChannel) {
p *= audibleOscillator->pulseUsScale;
if (midiChannel->tremoloRange) {
p = amModulate(p, midiValMap[midiChannel->tremoloRange], _oc->tremoloLfo->Level());
}
if (!audibleOscillator->envelope->isNull) {
p *= audibleOscillator->envelope->level;
}
if (midiChannel->volume != maxMidiVal) {
p *= midiValMap[midiChannel->volume];
}
return p;
}

cr_fp_t CRMidi::Modulate(Oscillator *audibleOscillator) {
cr_fp_t p = _crio->pw;
MidiChannel *midiChannel = getOscillatorChannel(audibleOscillator);
if (!_crio->fixedPulseEnabled()) {
p -= _crio->breakoutUs;
p *= audibleOscillator->pulseUsScale;
if (midiChannel->tremoloRange) {
p = amModulate(p, midiValMap[midiChannel->tremoloRange], _oc->tremoloLfo->Level());
}
if (!audibleOscillator->envelope->isNull) {
p *= audibleOscillator->envelope->level;
}
if (midiChannel->volume != maxMidiVal) {
p *= midiValMap[midiChannel->volume];
}
p += _crio->breakoutUs;
p = ModulateChain(p - _crio->breakoutUs, audibleOscillator, midiChannel) + _crio->breakoutUs;
}
if (_percussionChannel == midiChannel) {
_noiseModPending = false;
Expand Down
1 change: 1 addition & 0 deletions CRMidi.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class CRMidi {
MidiNote *GetFreeNote();
void ReturnFreeNote(MidiNote *midiNote);
void FMModulate(MidiChannel *midiChannel);
cr_fp_t ModulateChain(cr_fp_t p, Oscillator *audibleOscillator, MidiChannel *midiChannel);
bool setCC(uint8_t *value, uint8_t newValue);
MidiNote _midiNotes[oscillatorCount];
MidiChannel _midiChannels[midiChannelStorage];
Expand Down

0 comments on commit 9b75308

Please sign in to comment.