dev223 - Y8950: fix ADPCM pitch

issue #2028
This commit is contained in:
tildearrow 2024-09-26 14:41:14 -05:00
parent 0cf6c7cd64
commit 0f2fd76a90
5 changed files with 23 additions and 5 deletions

View file

@ -985,7 +985,7 @@ double DivPlatformOPL::NOTE_ADPCMB(int note) {
if (adpcmChan<0) return 0;
if (chan[adpcmChan].sample>=0 && chan[adpcmChan].sample<parent->song.sampleLen) {
double off=65535.0*(double)(parent->getSample(chan[adpcmChan].sample)->centerRate)/8363.0;
return parent->calcBaseFreq((double)chipClock/144,off,note,false);
return parent->calcBaseFreq((double)chipClock/(compatYPitch?144:72),off,note,false);
}
return 0;
}
@ -1315,7 +1315,7 @@ void DivPlatformOPL::tick(bool sysTick) {
if (chan[adpcmChan].freqChanged || chan[adpcmChan].keyOn || chan[adpcmChan].keyOff) {
if (chan[adpcmChan].sample>=0 && chan[adpcmChan].sample<parent->song.sampleLen) {
double off=65535.0*(double)(parent->getSample(chan[adpcmChan].sample)->centerRate)/8363.0;
chan[adpcmChan].freq=parent->calcFreq(chan[adpcmChan].baseFreq,chan[adpcmChan].pitch,chan[adpcmChan].fixedArp?chan[adpcmChan].baseNoteOverride:chan[adpcmChan].arpOff,chan[adpcmChan].fixedArp,false,4,chan[adpcmChan].pitch2,(double)chipClock/144,off);
chan[adpcmChan].freq=parent->calcFreq(chan[adpcmChan].baseFreq,chan[adpcmChan].pitch,chan[adpcmChan].fixedArp?chan[adpcmChan].baseNoteOverride:chan[adpcmChan].arpOff,chan[adpcmChan].fixedArp,false,4,chan[adpcmChan].pitch2,(double)chipClock/(compatYPitch?144:72),off);
} else {
chan[adpcmChan].freq=0;
}
@ -3152,6 +3152,7 @@ void DivPlatformOPL::setFlags(const DivConfig& flags) {
break;
}
compatPan=flags.getBool("compatPan",false);
compatYPitch=flags.getBool("compatYPitch",false);
for (int i=0; i<44; i++) {
oscBuf[i]->rate=rate;