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

Method executeADPCMStepEvents

BambooTracker/playback.cpp:629–684  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

627}
628
629void PlaybackManager::executeADPCMStepEvents(const Step& step, bool calledByNoteDelay)
630{
631 if (!calledByNoteDelay && !step.isEmptyNote()) clearADPCMDelayBeyondStepCounts(); // Except no key event
632
633 // Set volume
634 int vol = step.getVolume();
635 if (step.hasVolume() && vol < bt_defs::NSTEP_ADPCM_VOLUME) {
636 opnaCtrl_->setVolumeADPCM(vol);
637 }
638
639 // Set instrument
640 if (step.hasInstrument()) {
641 if (auto inst = instMan_.lock()->getInstrumentSharedPtr(step.getInstrumentNumber())) {
642 if (inst->getType() == InstrumentType::ADPCM)
643 opnaCtrl_->setInstrumentADPCM(std::dynamic_pointer_cast<InstrumentADPCM>(inst));
644 else if (inst->getType() == InstrumentType::Drumkit)
645 opnaCtrl_->setInstrumentDrumkit(std::dynamic_pointer_cast<InstrumentDrumkit>(inst));
646 }
647 }
648
649 // Set effect
650 executeStoredEffectsADPCM();
651
652 // Set key
653 int noteNum = step.getNoteNumber();
654 switch (noteNum) {
655 case Step::NOTE_NONE:
656 if (!calledByNoteDelay) {
657 // When this is called by note delay, skip delay check because it has already checked.
658 checkADPCMDelayEventsInTick(step);
659 }
660 opnaCtrl_->tickEvent(SoundSource::ADPCM, 0);
661 break;
662 case Step::NOTE_KEY_OFF:
663 opnaCtrl_->keyOffADPCM();
664 break;
665 case Step::NOTE_KEY_CUT:
666 opnaCtrl_->setNoteCutADPCM();
667 break;
668 case Step::NOTE_ECHO0:
669 opnaCtrl_->keyOnADPCM(0);
670 break;
671 case Step::NOTE_ECHO1:
672 opnaCtrl_->keyOnADPCM(1);
673 break;
674 case Step::NOTE_ECHO2:
675 opnaCtrl_->keyOnADPCM(2);
676 break;
677 case Step::NOTE_ECHO3:
678 opnaCtrl_->keyOnADPCM(3);
679 break;
680 default: // Key on
681 opnaCtrl_->keyOnADPCM(Note(noteNum));
682 break;
683 }
684}
685
686bool PlaybackManager::executeStoredEffectsGlobal()

Callers

nothing calls this directly

Calls 15

isEmptyNoteMethod · 0.80
getVolumeMethod · 0.80
hasVolumeMethod · 0.80
setVolumeADPCMMethod · 0.80
hasInstrumentMethod · 0.80
setInstrumentADPCMMethod · 0.80
setInstrumentDrumkitMethod · 0.80
tickEventMethod · 0.80
setNoteCutADPCMMethod · 0.80
keyOnADPCMMethod · 0.80
NoteClass · 0.70

Tested by

no test coverage detected