dispatch: add function to notify playback stopped

for the PC Speaker real driver
This commit is contained in:
tildearrow 2022-03-07 01:48:48 -05:00
parent 93d160da5e
commit 8f957baa3e
5 changed files with 19 additions and 0 deletions

View file

@ -316,6 +316,11 @@ class DivDispatch {
*/
virtual void notifyInsDeletion(void* ins);
/**
* notify that playback stopped.
*/
virtual void notifyPlaybackStop();
/**
* force-retrigger instruments.
*/

View file

@ -828,6 +828,9 @@ void DivEngine::stop() {
sPreview.sample=-1;
sPreview.wave=-1;
sPreview.pos=0;
for (int i=0; i<song.systemLen; i++) {
disCont[i].dispatch->notifyPlaybackStop();
}
isBusy.unlock();
}

View file

@ -97,6 +97,10 @@ void DivDispatch::notifyInsDeletion(void* ins) {
}
void DivDispatch::notifyPlaybackStop() {
}
void DivDispatch::forceIns() {
}

View file

@ -344,6 +344,8 @@ void DivPlatformPCSpeaker::reset() {
}
#endif
beepFreq(0);
} else {
beepFreq(0);
}
memset(regPool,0,2);
@ -365,6 +367,10 @@ void DivPlatformPCSpeaker::notifyInsDeletion(void* ins) {
}
}
void DivPlatformPCSpeaker::notifyPlaybackStop() {
beepFreq(0);
}
void DivPlatformPCSpeaker::poke(unsigned int addr, unsigned short val) {
// ???
}

View file

@ -82,6 +82,7 @@ class DivPlatformPCSpeaker: public DivDispatch {
bool keyOffAffectsArp(int ch);
void setFlags(unsigned int flags);
void notifyInsDeletion(void* ins);
void notifyPlaybackStop();
void poke(unsigned int addr, unsigned short val);
void poke(std::vector<DivRegWrite>& wlist);
const char** getRegisterSheet();