aboutsummaryrefslogtreecommitdiff
path: root/audio/softsynth
diff options
context:
space:
mode:
authorathrxx2016-01-09 20:21:25 +0100
committerathrxx2016-01-09 22:09:53 +0100
commit05aa32dc21cce51d56f3cfbfa5a89a0d01ea3736 (patch)
treee840bf5d179b67fa35f3b7ea6bd744070aafd95e /audio/softsynth
parenta745010998ad81ce56abb00b06803e7ae64f91fb (diff)
downloadscummvm-rg350-05aa32dc21cce51d56f3cfbfa5a89a0d01ea3736.tar.gz
scummvm-rg350-05aa32dc21cce51d56f3cfbfa5a89a0d01ea3736.tar.bz2
scummvm-rg350-05aa32dc21cce51d56f3cfbfa5a89a0d01ea3736.zip
AUDIO: fix two bugs in FM-TOWNS pcm code
Diffstat (limited to 'audio/softsynth')
-rw-r--r--audio/softsynth/fmtowns_pc98/towns_audio.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/audio/softsynth/fmtowns_pc98/towns_audio.cpp b/audio/softsynth/fmtowns_pc98/towns_audio.cpp
index 9db45bd8aa..42824d8423 100644
--- a/audio/softsynth/fmtowns_pc98/towns_audio.cpp
+++ b/audio/softsynth/fmtowns_pc98/towns_audio.cpp
@@ -187,6 +187,7 @@ private:
int intf_pcmPlayEffect(va_list &args);
int intf_pcmChanOff(va_list &args);
int intf_pcmEffectPlaying(va_list &args);
+ int intf_pcmDisableAllChannels(va_list &args);
int intf_fmKeyOn(va_list &args);
int intf_fmKeyOff(va_list &args);
int intf_fmSetPanPos(va_list &args);
@@ -335,7 +336,7 @@ TownsAudioInterfaceInternal::TownsAudioInterfaceInternal(Audio::Mixer *mixer, To
INTCB(pcmChanOff),
// 40
INTCB(pcmEffectPlaying),
- INTCB(notImpl),
+ INTCB(pcmDisableAllChannels),
INTCB(notImpl),
INTCB(notImpl),
// 44
@@ -784,6 +785,8 @@ int TownsAudioInterfaceInternal::intf_loadWaveTable(va_list &args) {
if (_waveTablesTotalDataSize + w.size > 65504)
return 5;
+ callback(41);
+
for (int i = 0; i < _numWaveTables; i++) {
if (_waveTables[i].id == w.id)
return 10;
@@ -800,6 +803,7 @@ int TownsAudioInterfaceInternal::intf_loadWaveTable(va_list &args) {
int TownsAudioInterfaceInternal::intf_unloadWaveTable(va_list &args) {
int id = va_arg(args, int);
+ callback(41);
if (id == -1) {
for (int i = 0; i < 128; i++)
@@ -817,8 +821,8 @@ int TownsAudioInterfaceInternal::intf_unloadWaveTable(va_list &args) {
memcpy(&_waveTables[i], &_waveTables[i + 1], sizeof(TownsAudio_WaveTable));
return 0;
}
- return 9;
}
+ return 9;
}
}
@@ -876,6 +880,12 @@ int TownsAudioInterfaceInternal::intf_pcmEffectPlaying(va_list &args) {
return _pcmChan[chan]._activeEffect ? 1 : 0;
}
+int TownsAudioInterfaceInternal::intf_pcmDisableAllChannels(va_list &args) {
+ for (int i = 0; i < 8; ++i)
+ _pcmChan[i]._activeOutput = false;
+ return 0;
+}
+
int TownsAudioInterfaceInternal::intf_fmKeyOn(va_list &args) {
int chan = va_arg(args, int);
int note = va_arg(args, int);