diff options
author | athrxx | 2015-11-02 20:52:49 +0100 |
---|---|---|
committer | athrxx | 2015-11-09 18:41:06 +0100 |
commit | 4ec41c291e3a1e273b0ee571acdf2942a579e3ad (patch) | |
tree | 302c307bda7c6acb845d1acb22fa916174dc510f /engines | |
parent | 82c98e98033eafa2ed04febe2607f09636e7e6a5 (diff) | |
download | scummvm-rg350-4ec41c291e3a1e273b0ee571acdf2942a579e3ad.tar.gz scummvm-rg350-4ec41c291e3a1e273b0ee571acdf2942a579e3ad.tar.bz2 scummvm-rg350-4ec41c291e3a1e273b0ee571acdf2942a579e3ad.zip |
AUDIO: (FM-TOWNS) - cleanup euphony code
(rework parts of the code + improve naming of variables/functions)
Diffstat (limited to 'engines')
-rw-r--r-- | engines/kyra/sound_intern.h | 2 | ||||
-rw-r--r-- | engines/kyra/sound_towns.cpp | 100 | ||||
-rw-r--r-- | engines/scumm/players/player_towns.cpp | 61 | ||||
-rw-r--r-- | engines/scumm/players/player_towns.h | 4 |
4 files changed, 83 insertions, 84 deletions
diff --git a/engines/kyra/sound_intern.h b/engines/kyra/sound_intern.h index 007ca3d3f5..4b77bf1351 100644 --- a/engines/kyra/sound_intern.h +++ b/engines/kyra/sound_intern.h @@ -151,7 +151,7 @@ private: uint8 *_sfxFileData; uint8 _sfxChannel; - TownsEuphonyDriver *_driver; + EuphonyPlayer *_player; bool _cdaPlaying; diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp index 725dedae3f..65ab4f31ef 100644 --- a/engines/kyra/sound_towns.cpp +++ b/engines/kyra/sound_towns.cpp @@ -37,13 +37,13 @@ SoundTowns::SoundTowns(KyraEngine_v1 *vm, Audio::Mixer *mixer) : Sound(vm, mixer), _lastTrack(-1), _musicTrackData(0), _sfxFileData(0), _cdaPlaying(0), _sfxFileIndex((uint)-1), _musicFadeTable(0), _sfxWDTable(0), _sfxBTTable(0), _sfxChannel(0x46), _currentResourceSet(0) { memset(&_resInfo, 0, sizeof(_resInfo)); - _driver = new TownsEuphonyDriver(_mixer); + _player = new EuphonyPlayer(_mixer); } SoundTowns::~SoundTowns() { g_system->getAudioCDManager()->stop(); haltTrack(); - delete _driver; + delete _player; delete[] _musicTrackData; delete[] _sfxFileData; for (int i = 0; i < 3; i++) @@ -58,15 +58,15 @@ bool SoundTowns::init() { _sfxBTTable = _vm->staticres()->loadRawData(k1TownsSFXbtTable, unused); _musicTrackData = new uint8[50570]; - if (!_driver->init()) + if (!_player->init()) return false; if (!loadInstruments()) return false; - _driver->intf()->callback(68); - _driver->intf()->callback(70, 0x33); - _driver->setOutputVolume(1, 118, 118); + /*_player->driver()->intf()->callback(68); + _player->driver()->intf()->callback(70, 0x33);*/ + _player->driver()->setOutputVolume(1, 118, 118); return true; } @@ -93,7 +93,7 @@ void SoundTowns::playTrack(uint8 track) { beginFadeOut(); if (_musicEnabled == 2 && trackNum != -1) { - _driver->setOutputVolume(1, 118, 118); + _player->driver()->setOutputVolume(1, 118, 118); g_system->getAudioCDManager()->play(trackNum + 1, loop ? -1 : 1, 0, 0); g_system->getAudioCDManager()->updateCD(); _cdaPlaying = true; @@ -112,12 +112,12 @@ void SoundTowns::haltTrack() { _cdaPlaying = false; for (int i = 0; i < 6; i++) - _driver->chanVolume(i, 0); + _player->driver()->channelVolume(i, 0); for (int i = 0x40; i < 0x46; i++) - _driver->chanVolume(i, 0); + _player->driver()->channelVolume(i, 0); for (int i = 0; i < 32; i++) - _driver->configChan_enable(i, 0); - _driver->stopParser(); + _player->configPart_enable(i, 0); + _player->stop(); } void SoundTowns::initAudioResourceInfo(int set, void *info) { @@ -179,11 +179,11 @@ void SoundTowns::playSoundEffect(uint8 track, uint8) { if (offset == -1) return; - if (!_driver->soundEffectIsPlaying(_sfxChannel ^ 1)) { + if (!_player->driver()->soundEffectIsPlaying(_sfxChannel ^ 1)) { _sfxChannel ^= 1; - } else if (_driver->soundEffectIsPlaying(_sfxChannel)) { + } else if (_player->driver()->soundEffectIsPlaying(_sfxChannel)) { _sfxChannel ^= 1; - _driver->stopSoundEffect(_sfxChannel); + _player->driver()->stopSoundEffect(_sfxChannel); } uint32 *sfxHeader = (uint32 *)(fileBody + offset); @@ -221,57 +221,57 @@ void SoundTowns::playSoundEffect(uint8 track, uint8) { } } - _driver->chanVolume(_sfxChannel, 127); - _driver->chanPanPos(_sfxChannel, 0x40); - _driver->chanPitch(_sfxChannel, 0); - _driver->playSoundEffect(_sfxChannel, note, 127, sfxPlaybackBuffer); + _player->driver()->channelVolume(_sfxChannel, 127); + _player->driver()->channelPan(_sfxChannel, 0x40); + _player->driver()->channelPitch(_sfxChannel, 0); + _player->driver()->playSoundEffect(_sfxChannel, note, 127, sfxPlaybackBuffer); delete[] sfxPlaybackBuffer; } void SoundTowns::updateVolumeSettings() { - if (!_driver) + if (!_player) return; bool mute = false; - _driver->setSoundEffectVolume(ConfMan.getInt("sfx_volume")); + _player->driver()->setSoundEffectVolume(ConfMan.getInt("sfx_volume")); if (ConfMan.hasKey("mute")) mute = ConfMan.getBool("mute"); - _driver->setMusicVolume((mute ? 0 : ConfMan.getInt("music_volume"))); - _driver->setSoundEffectVolume((mute ? 0 : ConfMan.getInt("sfx_volume"))); + _player->driver()->setMusicVolume((mute ? 0 : ConfMan.getInt("music_volume"))); + _player->driver()->setSoundEffectVolume((mute ? 0 : ConfMan.getInt("sfx_volume"))); } void SoundTowns::stopAllSoundEffects() { - _driver->chanVolume(0x46, 0); - _driver->chanVolume(0x47, 0); - _driver->stopSoundEffect(0x46); - _driver->stopSoundEffect(0x47); + _player->driver()->channelVolume(0x46, 0); + _player->driver()->channelVolume(0x47, 0); + _player->driver()->stopSoundEffect(0x46); + _player->driver()->stopSoundEffect(0x47); _sfxChannel = 0x46; } void SoundTowns::beginFadeOut() { if (_cdaPlaying) { for (int i = 118; i > 103; i--) { - _driver->setOutputVolume(1, i, i); + _player->driver()->setOutputVolume(1, i, i); _vm->delay(2 * _vm->tickLength()); } for (int i = 103; i > 83; i -= 2) { - _driver->setOutputVolume(1, i, i); + _player->driver()->setOutputVolume(1, i, i); _vm->delay(2 * _vm->tickLength()); } for (int i = 83; i > 58; i -= 2) { - _driver->setOutputVolume(1, i, i); + _player->driver()->setOutputVolume(1, i, i); _vm->delay(_vm->tickLength()); } for (int i = 58; i > 0; i--) { - _driver->setOutputVolume(1, i, i); + _player->driver()->setOutputVolume(1, i, i); _vm->delay(1); } - _driver->setOutputVolume(1, 0, 0); + _player->driver()->setOutputVolume(1, 0, 0); } else { if (_lastTrack == -1) @@ -292,9 +292,9 @@ void SoundTowns::beginFadeOut() { for (int i = 0; i < 12; i++) { for (int ii = 0; ii < 6; ii++) - _driver->chanVolume(ii, fadeVolCur[ii]); + _player->driver()->channelVolume(ii, fadeVolCur[ii]); for (int ii = 0x40; ii < 0x46; ii++) - _driver->chanVolume(ii, fadeVolCur[ii - 0x3A]); + _player->driver()->channelVolume(ii, fadeVolCur[ii - 0x3A]); for (int ii = 0; ii < 6; ii++) { fadeVolCur[ii] -= fadeVolStep[ii]; @@ -323,20 +323,20 @@ bool SoundTowns::loadInstruments() { Screen::decodeFrame4(twm, _musicTrackData, 50570); for (int i = 0; i < 128; i++) - _driver->loadInstrument(0, i, &_musicTrackData[i * 48 + 8]); + _player->driver()->loadInstrument(0, i, &_musicTrackData[i * 48 + 8]); Screen::decodeFrame4(twm + 3232, _musicTrackData, 50570); for (int i = 0; i < 32; i++) - _driver->loadInstrument(0x40, i, &_musicTrackData[i * 128 + 8]); + _player->driver()->loadInstrument(0x40, i, &_musicTrackData[i * 128 + 8]); - _driver->unloadWaveTable(-1); + _player->driver()->unloadWaveTable(-1); uint8 *src = &_musicTrackData[32 * 128 + 8]; for (int i = 0; i < 10; i++) { - _driver->loadWaveTable(src); + _player->driver()->loadWaveTable(src); src = src + READ_LE_UINT16(&src[12]) + 32; } - _driver->reserveSoundEffectChannels(2); + _player->driver()->reserveSoundEffectChannels(2); delete[] twm; @@ -350,26 +350,26 @@ void SoundTowns::playEuphonyTrack(uint32 offset, int loop) { const uint8 *src = _musicTrackData + 852; for (int i = 0; i < 32; i++) - _driver->configChan_enable(i, *src++); + _player->configPart_enable(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_setMode(i, *src++); + _player->configPart_setType(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_remap(i, *src++); + _player->configPart_remap(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_adjustVolume(i, *src++); + _player->configPart_adjustVolume(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_setTranspose(i, *src++); + _player->configPart_setTranspose(i, *src++); src = _musicTrackData + 1748; for (int i = 0; i < 6; i++) - _driver->assignChannel(i, *src++); + _player->driver()->assignPartToChannel(i, *src++); for (int i = 0x40; i < 0x46; i++) - _driver->assignChannel(i, *src++); + _player->driver()->assignPartToChannel(i, *src++); uint32 trackSize = READ_LE_UINT32(_musicTrackData + 2048); uint8 startTick = _musicTrackData[2052]; - _driver->setMusicTempo(_musicTrackData[2053]); + _player->setTempo(_musicTrackData[2053]); src = _musicTrackData + 2054; uint32 l = READ_LE_UINT32(src + trackSize); @@ -377,14 +377,14 @@ void SoundTowns::playEuphonyTrack(uint32 offset, int loop) { l = READ_LE_UINT32(src + trackSize); trackSize += (l + 4); - _driver->setMusicLoop(loop); - _driver->startMusicTrack(src, trackSize, startTick); + _player->setLoopStatus(loop); + _player->startTrack(src, trackSize, startTick); } void SoundTowns::fadeOutSoundEffects() { for (int i = 127; i > 0; i-= 12) { - _driver->chanVolume(0x46, i); - _driver->chanVolume(0x47, i); + _player->driver()->channelVolume(0x46, i); + _player->driver()->channelVolume(0x47, i); _vm->delay(_vm->tickLength()); } stopAllSoundEffects(); diff --git a/engines/scumm/players/player_towns.cpp b/engines/scumm/players/player_towns.cpp index 5b8ca04021..67993888aa 100644 --- a/engines/scumm/players/player_towns.cpp +++ b/engines/scumm/players/player_towns.cpp @@ -202,23 +202,24 @@ Player_Towns_v1::Player_Towns_v1(ScummEngine *vm, Audio::Mixer *mixer) : Player_ memset(_soundOverride, 0, _numSoundMax * sizeof(SoundOvrParameters)); } - _driver = new TownsEuphonyDriver(mixer); + _player = new EuphonyPlayer(mixer); + _intf = new TownsAudioInterface(mixer, 0); } Player_Towns_v1::~Player_Towns_v1() { - delete _driver; + delete _intf; + delete _player; delete[] _soundOverride; } bool Player_Towns_v1::init() { - if (!_driver) + if (!_player) return false; - if (!_driver->init()) + if (!_player->init()) return false; - _driver->reserveSoundEffectChannels(8); - _intf = _driver->intf(); + _player->driver()->reserveSoundEffectChannels(8); // Treat all 6 fm channels and all 8 pcm channels as sound effect channels // since music seems to exist as CD audio only in the games which use this @@ -231,7 +232,7 @@ bool Player_Towns_v1::init() { } void Player_Towns_v1::setMusicVolume(int vol) { - _driver->setMusicVolume(vol); + _player->driver()->setMusicVolume(vol); } void Player_Towns_v1::startSound(int sound) { @@ -275,7 +276,7 @@ void Player_Towns_v1::stopSound(int sound) { if (sound != 0 && sound == _eupCurrentSound) { _eupCurrentSound = 0; _eupLooping = false; - _driver->stopParser(); + _player->stop(); } stopPcmTrack(sound); @@ -288,7 +289,7 @@ void Player_Towns_v1::stopAllSounds() { _eupCurrentSound = 0; _eupLooping = false; - _driver->stopParser(); + _player->stop(); stopPcmTrack(0); } @@ -297,7 +298,7 @@ int Player_Towns_v1::getSoundStatus(int sound) const { if (sound == _cdaCurrentSound) return _vm->_sound->pollCD(); if (sound == _eupCurrentSound) - return _driver->parserIsPlaying() ? 1 : 0; + return _player->isPlaying() ? 1 : 0; return Player_Towns::getSoundStatus(sound); } @@ -306,7 +307,7 @@ int32 Player_Towns_v1::doCommand(int numargs, int args[]) { switch (args[0]) { case 2: - _driver->intf()->callback(73, 0); + _player->driver()->cdaToggle(0); break; case 3: @@ -344,7 +345,7 @@ int32 Player_Towns_v1::doCommand(int numargs, int args[]) { void Player_Towns_v1::setVolumeCD(int left, int right) { _cdaVolLeft = left & 0xff; _cdaVolRight = right & 0xff; - _driver->setOutputVolume(1, left >> 1, right >> 1); + _player->driver()->setOutputVolume(1, left >> 1, right >> 1); } void Player_Towns_v1::setSoundVolume(int sound, int left, int right) { @@ -373,7 +374,7 @@ void Player_Towns_v1::saveLoadWithSerializer(Serializer *ser) { ser->saveLoadEntries(this, cdEntries); - if (!_eupLooping && !_driver->parserIsPlaying()) + if (!_eupLooping && !_player->isPlaying()) _eupCurrentSound = 0; static const SaveLoadEntry eupEntries[] = { @@ -439,10 +440,10 @@ void Player_Towns_v1::restartLoopingSounds() { c++; } - _driver->playSoundEffect(i + 0x3f, _pcmCurrentSound[i].note, _pcmCurrentSound[i].velo, ptr); + _player->driver()->playSoundEffect(i + 0x3f, _pcmCurrentSound[i].note, _pcmCurrentSound[i].velo, ptr); } - _driver->intf()->callback(73, 1); + _player->driver()->cdaToggle(1); } void Player_Towns_v1::startSoundEx(int sound, int velo, int pan, int note) { @@ -492,9 +493,9 @@ void Player_Towns_v1::stopSoundSuspendLooping(int sound) { } else { for (int i = 1; i < 9; i++) { if (sound == _pcmCurrentSound[i].index) { - if (!_driver->soundEffectIsPlaying(i + 0x3f)) + if (!_player->driver()->soundEffectIsPlaying(i + 0x3f)) continue; - _driver->stopSoundEffect(i + 0x3f); + _player->driver()->stopSoundEffect(i + 0x3f); if (_pcmCurrentSound[i].looping) _pcmCurrentSound[i].paused = 1; else @@ -510,23 +511,23 @@ void Player_Towns_v1::playEuphonyTrack(int sound, const uint8 *data) { const uint8 *trackData = src + 150; for (int i = 0; i < 32; i++) - _driver->configChan_enable(i, *src++); + _player->configPart_enable(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_setMode(i, 0xff); + _player->configPart_setType(i, 0xff); for (int i = 0; i < 32; i++) - _driver->configChan_remap(i, *src++); + _player->configPart_remap(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_adjustVolume(i, *src++); + _player->configPart_adjustVolume(i, *src++); for (int i = 0; i < 32; i++) - _driver->configChan_setTranspose(i, *src++); + _player->configPart_setTranspose(i, *src++); src += 8; for (int i = 0; i < 6; i++) - _driver->assignChannel(i, *src++); + _player->driver()->assignPartToChannel(i, *src++); for (int i = 0; i < data[14]; i++) { - _driver->loadInstrument(i, i, pos + i * 48); - _driver->intf()->callback(4, i, i); + _player->driver()->loadInstrument(i, i, pos + i * 48); + _player->driver()->setInstrument(i, i); } _eupVolLeft = _soundOverride[sound].vLeft; @@ -537,18 +538,18 @@ void Player_Towns_v1::playEuphonyTrack(int sound, const uint8 *data) { lvl >>= 2; for (int i = 0; i < 6; i++) - _driver->chanVolume(i, lvl); + _player->driver()->channelVolume(i, lvl); uint32 trackSize = READ_LE_UINT32(src); src += 4; uint8 startTick = *src++; - _driver->setMusicTempo(*src++); - _driver->startMusicTrack(trackData, trackSize, startTick); + _player->setTempo(*src++); + _player->startTrack(trackData, trackSize, startTick); _eupLooping = (*src != 1) ? 1 : 0; - _driver->setMusicLoop(_eupLooping != 0); - _driver->continueParsing(); + _player->setLoopStatus(_eupLooping != 0); + _player->resume(); _eupCurrentSound = sound; } diff --git a/engines/scumm/players/player_towns.h b/engines/scumm/players/player_towns.h index 3736524ee2..576d17e392 100644 --- a/engines/scumm/players/player_towns.h +++ b/engines/scumm/players/player_towns.h @@ -104,8 +104,6 @@ public: void saveLoadWithSerializer(Serializer *ser); void restoreAfterLoad(); - TownsEuphonyDriver *driver() { return _driver; } - private: void restartLoopingSounds(); void startSoundEx(int sound, int velo, int pan, int note); @@ -137,7 +135,7 @@ private: uint8 _cdaCurrentSoundTemp; uint8 _cdaNumLoopsTemp; - TownsEuphonyDriver *_driver; + EuphonyPlayer *_player; }; class Player_Towns_v2 : public Player_Towns { |