mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-23 04:55:13 +00:00
add isVolGlobal to DivDispatch
do not key release on pendingNotes if so issue #1325
This commit is contained in:
parent
10ecc71a60
commit
9d410dfe9c
9 changed files with 26 additions and 1 deletions
|
@ -485,6 +485,12 @@ class DivDispatch {
|
|||
*/
|
||||
virtual bool keyOffAffectsPorta(int ch);
|
||||
|
||||
/**
|
||||
* test whether volume is global.
|
||||
* @return whether it is.
|
||||
*/
|
||||
virtual bool isVolGlobal();
|
||||
|
||||
/**
|
||||
* get the lowest note in a portamento.
|
||||
* @param ch the channel in question.
|
||||
|
|
|
@ -86,6 +86,10 @@ bool DivDispatch::keyOffAffectsPorta(int ch) {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool DivDispatch::isVolGlobal() {
|
||||
return false;
|
||||
}
|
||||
|
||||
int DivDispatch::getPortaFloor(int ch) {
|
||||
return 0x00;
|
||||
}
|
||||
|
|
|
@ -566,6 +566,10 @@ bool DivPlatformC64::getWantPreNote() {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool DivPlatformC64::isVolGlobal() {
|
||||
return true;
|
||||
}
|
||||
|
||||
float DivPlatformC64::getPostAmp() {
|
||||
return (sidCore==1)?3.0f:1.0f;
|
||||
}
|
||||
|
|
|
@ -105,6 +105,7 @@ class DivPlatformC64: public DivDispatch {
|
|||
void notifyInsChange(int ins);
|
||||
bool getDCOffRequired();
|
||||
bool getWantPreNote();
|
||||
bool isVolGlobal();
|
||||
float getPostAmp();
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
void notifyInsDeletion(void* ins);
|
||||
|
|
|
@ -257,6 +257,10 @@ void DivPlatformTED::forceIns() {
|
|||
updateCtrl=true;
|
||||
}
|
||||
|
||||
bool DivPlatformTED::isVolGlobal() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void* DivPlatformTED::getChanState(int ch) {
|
||||
return &chan[ch];
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ class DivPlatformTED: public DivDispatch {
|
|||
public:
|
||||
void acquire(short** buf, size_t len);
|
||||
int dispatch(DivCommand c);
|
||||
bool isVolGlobal();
|
||||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
|
|
|
@ -278,6 +278,10 @@ void DivPlatformVIC20::forceIns() {
|
|||
}
|
||||
}
|
||||
|
||||
bool DivPlatformVIC20::isVolGlobal() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void* DivPlatformVIC20::getChanState(int ch) {
|
||||
return &chan[ch];
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ class DivPlatformVIC20: public DivDispatch {
|
|||
public:
|
||||
void acquire(short** buf, size_t len);
|
||||
int dispatch(DivCommand c);
|
||||
bool isVolGlobal();
|
||||
void* getChanState(int chan);
|
||||
DivMacroInt* getChanMacroInt(int ch);
|
||||
DivDispatchOscBuffer* getOscBuffer(int chan);
|
||||
|
|
|
@ -1307,7 +1307,7 @@ bool DivEngine::nextTick(bool noAccum, bool inhibitLowLat) {
|
|||
} else {
|
||||
DivMacroInt* macroInt=disCont[dispatchOfChan[note.channel]].dispatch->getChanMacroInt(dispatchChanOfChan[note.channel]);
|
||||
if (macroInt!=NULL) {
|
||||
if (macroInt->hasRelease) {
|
||||
if (macroInt->hasRelease && !disCont[dispatchOfChan[note.channel]].dispatch->isVolGlobal()) {
|
||||
dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF_ENV,note.channel));
|
||||
} else {
|
||||
dispatchCmd(DivCommand(DIV_CMD_NOTE_OFF,note.channel));
|
||||
|
|
Loading…
Reference in a new issue