aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/sound_towns.cpp
diff options
context:
space:
mode:
authorFlorian Kagerer2008-08-16 14:25:03 +0000
committerFlorian Kagerer2008-08-16 14:25:03 +0000
commit193f52906c617f7b0305e18f34e632bb256e4c8f (patch)
tree6ab5f1f7e2233dab218cd2163fb2244cfd0ef738 /engines/kyra/sound_towns.cpp
parentfbc9483ed2d7ee96a9c67b0b0b85b53d282b3f1a (diff)
downloadscummvm-rg350-193f52906c617f7b0305e18f34e632bb256e4c8f.tar.gz
scummvm-rg350-193f52906c617f7b0305e18f34e632bb256e4c8f.tar.bz2
scummvm-rg350-193f52906c617f7b0305e18f34e632bb256e4c8f.zip
KYRA: Fm-Towns Audio: fixed music fading
svn-id: r33942
Diffstat (limited to 'engines/kyra/sound_towns.cpp')
-rw-r--r--engines/kyra/sound_towns.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp
index d4c6afa4f6..9ae012b9c4 100644
--- a/engines/kyra/sound_towns.cpp
+++ b/engines/kyra/sound_towns.cpp
@@ -1631,7 +1631,7 @@ protected:
bool _sfxPlaying;
bool _fading;
uint8 _looping;
- uint32 _tickCounter;
+ uint32 _musicTickCounter;
bool _updateEnvelopeParameters;
@@ -2662,7 +2662,7 @@ bool TownsPC98_OpnChannelPCM::processControlEvent(uint8 cmd) {
}
void TownsPC98_OpnChannelPCM::fadeStep() {
-
+ // TODO (emulation not implemented anyway)
}
bool TownsPC98_OpnChannelPCM::control_f1_pcmStart(uint8 para) {
@@ -2878,7 +2878,7 @@ TownsPC98_OpnDriver::TownsPC98_OpnDriver(Audio::Mixer *mixer, OpnType type) :
_ssgChannels(0), _sfxChannels(0), _pcmChannel(0), _looping(0), _opnCarrier(_drvTables + 76),
_opnFreqTable(_drvTables + 84), _opnFreqTableSSG(_drvTables + 252), _opnFxCmdLen(_drvTables + 36),
_opnLvlPresets(_drvTables + (type == OD_TOWNS ? 52 : 228)), _oprRates(0), _oprRateshift(0), _oprAttackDecay(0),
- _oprFrq(0), _oprSinTbl(0), _oprLevelOut(0), _oprDetune(0), _cbCounter(4), _tickCounter(0),
+ _oprFrq(0), _oprSinTbl(0), _oprLevelOut(0), _oprDetune(0), _cbCounter(4), _musicTickCounter(0),
_updateChannelsFlag(type == OD_TYPE26 ? 0x07 : 0x3F), _updateSSGFlag(type == OD_TOWNS ? 0 : 7),
_updatePCMFlag(type == OD_TYPE86 ? 1 : 0), _finishedChannelsFlag(0), _finishedSSGFlag(0),
_finishedPCMFlag(0), _samplesTillCallback(0), _samplesTillCallbackRemainder(0),
@@ -3132,7 +3132,7 @@ void TownsPC98_OpnDriver::reset() {
_musicPlaying = _sfxPlaying = _fading = false;
_looping = 0;
- _tickCounter = 0;
+ _musicTickCounter = 0;
_sfxData = 0;
unlock();
@@ -3147,20 +3147,22 @@ void TownsPC98_OpnDriver::fadeOut() {
_fading = true;
- uint32 dTime = _tickCounter + 2;
+ uint32 dTime = _musicTickCounter + 2;
for (int j = 0; j < _numChan; j++) {
if (_updateChannelsFlag & _channels[j]->_idFlag)
_channels[j]->fadeStep();
}
for (int j = 0; j < _numSSG; j++) {
- if (_updateSSGFlag & _channels[j]->_idFlag)
+ if (_updateSSGFlag & _ssgChannels[j]->_idFlag)
_ssgChannels[j]->fadeStep();
}
+ if (_updatePCMFlag & _pcmChannel->_idFlag)
+ _pcmChannel->fadeStep();
unlock();
while (_musicPlaying) {
- if (_tickCounter >= dTime)
+ if (_musicTickCounter >= dTime)
break;
}
}
@@ -3171,8 +3173,6 @@ void TownsPC98_OpnDriver::fadeOut() {
void TownsPC98_OpnDriver::callback() {
lock();
- _tickCounter++;
-
if (_sfxChannels && _sfxPlaying) {
if (_sfxData)
startSoundEffect();
@@ -3192,6 +3192,7 @@ void TownsPC98_OpnDriver::callback() {
if (!--_cbCounter && _musicPlaying) {
_cbCounter = 4;
+ _musicTickCounter++;
for (int i = 0; i < _numChan; i++) {
if (_updateChannelsFlag & _channels[i]->_idFlag) {