MCPcopy Create free account
hub / github.com/BambooTracker/BambooTracker / executeStoredEffectsFM

Method executeStoredEffectsFM

BambooTracker/playback.cpp:783–929  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

781}
782
783void PlaybackManager::executeStoredEffectsFM(int ch)
784{
785 size_t uch = static_cast<size_t>(ch);
786 bool isNoteDelay = false;
787
788 // Read step beginning based effects
789 auto& stepBeginBasedEffs = effOnStepBeginMem_[SoundSource::FM].at(uch);
790 for (const auto& eff : stepBeginBasedEffs) {
791 switch (eff.type) {
792 case EffectType::NoteDelay:
793 ntDlyCntFM_.at(uch) = eff.value;
794 isNoteDelay = true;
795 break;
796 default:
797 break;
798 }
799 }
800 stepBeginBasedEffs.clear();
801
802 // Read note on and step beginning based effects
803 if (!isNoteDelay) {
804 auto& keyOnBasedEffs = effOnKeyOnMem_[SoundSource::FM].at(uch);
805 for (auto& eff : keyOnBasedEffs) {
806 switch (eff.type) {
807 case EffectType::Arpeggio:
808 opnaCtrl_->setArpeggioEffectFM(ch, eff.value >> 4, eff.value & 0x0f);
809 break;
810 case EffectType::PortamentoUp:
811 opnaCtrl_->setPortamentoEffectFM(ch, eff.value);
812 break;
813 case EffectType::PortamentoDown:
814 opnaCtrl_->setPortamentoEffectFM(ch, -eff.value);
815 break;
816 case EffectType::TonePortamento:
817 opnaCtrl_->setPortamentoEffectFM(ch, eff.value, true);
818 break;
819 case EffectType::Vibrato:
820 opnaCtrl_->setVibratoEffectFM(ch, eff.value >> 4, eff.value & 0x0f);
821 break;
822 case EffectType::Tremolo:
823 opnaCtrl_->setTremoloEffectFM(ch, eff.value >> 4, eff.value & 0x0f);
824 break;
825 case EffectType::Pan:
826 if (-1 < eff.value && eff.value < 4) opnaCtrl_->setPanFM(ch, eff.value);
827 break;
828 case EffectType::VolumeSlide:
829 {
830 int hi = eff.value >> 4;
831 int low = eff.value & 0x0f;
832 if (hi && !low) opnaCtrl_->setVolumeSlideFM(ch, hi, true); // Slide up
833 else if (!hi) opnaCtrl_->setVolumeSlideFM(ch, low, false); // Slide down
834 break;
835 }
836 case EffectType::Detune:
837 opnaCtrl_->setDetuneFM(ch, eff.value - 0x80);
838 break;
839 case EffectType::FineDetune:
840 opnaCtrl_->setFineDetuneFM(ch, eff.value - 0x80);

Callers

nothing calls this directly

Calls 15

setArpeggioEffectFMMethod · 0.80
setPortamentoEffectFMMethod · 0.80
setVibratoEffectFMMethod · 0.80
setTremoloEffectFMMethod · 0.80
setPanFMMethod · 0.80
setVolumeSlideFMMethod · 0.80
setDetuneFMMethod · 0.80
setFineDetuneFMMethod · 0.80
setNoteSlideFMMethod · 0.80
setFBControlFMMethod · 0.80
setTLControlFMMethod · 0.80
setMLControlFMMethod · 0.80

Tested by

no test coverage detected