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

Method executeStoredEffectsSSG

BambooTracker/playback.cpp:976–1091  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

974}
975
976void PlaybackManager::executeStoredEffectsSSG(int ch)
977{
978 size_t uch = static_cast<size_t>(ch);
979 bool isNoteDelay = false;
980
981 // Read step beginning based effects
982 auto& stepBeginBasedEffs = effOnStepBeginMem_[SoundSource::SSG].at(uch);
983 for (const auto& eff : stepBeginBasedEffs) {
984 switch (eff.type) {
985 case EffectType::NoteDelay:
986 ntDlyCntSSG_.at(uch) = eff.value;
987 isNoteDelay = true;
988 break;
989 default:
990 break;
991 }
992 }
993 stepBeginBasedEffs.clear();
994
995 // Read note on and step beginning based effects
996 if (!isNoteDelay) {
997 auto& keyOnBasedEffs = effOnKeyOnMem_[SoundSource::SSG].at(uch);
998 for (const auto& eff : keyOnBasedEffs) {
999 switch (eff.type) {
1000 case EffectType::Arpeggio:
1001 opnaCtrl_->setArpeggioEffectSSG(ch, eff.value >> 4, eff.value & 0x0f);
1002 break;
1003 case EffectType::PortamentoUp:
1004 opnaCtrl_->setPortamentoEffectSSG(ch, eff.value);
1005 break;
1006 case EffectType::PortamentoDown:
1007 opnaCtrl_->setPortamentoEffectSSG(ch, -eff.value);
1008 break;
1009 case EffectType::TonePortamento:
1010 opnaCtrl_->setPortamentoEffectSSG(ch, eff.value, true);
1011 break;
1012 case EffectType::Vibrato:
1013 opnaCtrl_->setVibratoEffectSSG(ch, eff.value >> 4, eff.value & 0x0f);
1014 break;
1015 case EffectType::Tremolo:
1016 opnaCtrl_->setTremoloEffectSSG(ch, eff.value >> 4, eff.value & 0x0f);
1017 break;
1018 case EffectType::VolumeSlide:
1019 {
1020 int hi = eff.value >> 4;
1021 int low = eff.value & 0x0f;
1022 if (hi && !low) opnaCtrl_->setVolumeSlideSSG(ch, hi, true); // Slide up
1023 else if (!hi) opnaCtrl_->setVolumeSlideSSG(ch, low, false); // Slide down
1024 break;
1025 }
1026 case EffectType::Detune:
1027 opnaCtrl_->setDetuneSSG(ch, eff.value - 0x80);
1028 break;
1029 case EffectType::FineDetune:
1030 opnaCtrl_->setFineDetuneSSG(ch, eff.value - 0x80);
1031 break;
1032 case EffectType::NoteSlideUp:
1033 opnaCtrl_->setNoteSlideSSG(ch, eff.value >> 4, eff.value & 0x0f);

Callers

nothing calls this directly

Calls 15

setArpeggioEffectSSGMethod · 0.80
setVibratoEffectSSGMethod · 0.80
setTremoloEffectSSGMethod · 0.80
setVolumeSlideSSGMethod · 0.80
setDetuneSSGMethod · 0.80
setFineDetuneSSGMethod · 0.80
setNoteSlideSSGMethod · 0.80
setToneNoiseMixSSGMethod · 0.80
setNoisePitchSSGMethod · 0.80
setHardEnvelopePeriodMethod · 0.80
setAutoEnvelopeSSGMethod · 0.80

Tested by

no test coverage detected