diff options
author | Johannes Schickel | 2008-01-03 14:42:49 +0000 |
---|---|---|
committer | Johannes Schickel | 2008-01-03 14:42:49 +0000 |
commit | 58f0d4e632793ac9e38f5c0596626eba1173748d (patch) | |
tree | 5f02d8697f853a46e2aa2ffb28696f26d2c14439 /engines/kyra/sound_towns.cpp | |
parent | d531d4234730edfb0e6ec095b34f22c1fb66754e (diff) | |
download | scummvm-rg350-58f0d4e632793ac9e38f5c0596626eba1173748d.tar.gz scummvm-rg350-58f0d4e632793ac9e38f5c0596626eba1173748d.tar.bz2 scummvm-rg350-58f0d4e632793ac9e38f5c0596626eba1173748d.zip |
Committed slightly modified patch #1862758 "KYRA: audio data assignment patch".
svn-id: r30198
Diffstat (limited to 'engines/kyra/sound_towns.cpp')
-rw-r--r-- | engines/kyra/sound_towns.cpp | 102 |
1 files changed, 19 insertions, 83 deletions
diff --git a/engines/kyra/sound_towns.cpp b/engines/kyra/sound_towns.cpp index 6a5bb17c37..7315672130 100644 --- a/engines/kyra/sound_towns.cpp +++ b/engines/kyra/sound_towns.cpp @@ -1118,46 +1118,16 @@ void SoundTowns::process() { AudioCD.updateCD(); } -namespace { - -struct CDTrackTable { - uint32 fileOffset; - bool loop; - int track; -}; - -} // end of anonymous namespace - void SoundTowns::playTrack(uint8 track) { if (track < 2) return; track -= 2; - static const CDTrackTable tTable[] = { - { 0x04000, 1, 0 }, { 0x05480, 1, 6 }, { 0x05E70, 0, 1 }, - { 0x06D90, 1, 3 }, { 0x072C0, 0, -1 }, { 0x075F0, 1, -1 }, - { 0x07880, 1, -1 }, { 0x089C0, 0, -1 }, { 0x09080, 0, -1 }, - { 0x091D0, 1, 4 }, { 0x0A880, 1, 5 }, { 0x0AF50, 0, -1 }, - { 0x0B1A0, 1, -1 }, { 0x0B870, 0, -1 }, { 0x0BCF0, 1, -1 }, - { 0x0C5D0, 1, 7 }, { 0x0D3E0, 1, 8 }, { 0x0e7b0, 1, 2 }, - { 0x0edc0, 0, -1 }, { 0x0eef0, 1, 9 }, { 0x10540, 1, 10 }, - { 0x10d80, 0, -1 }, { 0x10E30, 0, -1 }, { 0x10FC0, 0, -1 }, - { 0x11310, 1, -1 }, { 0x11A20, 1, -1 }, { 0x12380, 0, -1 }, - { 0x12540, 1, -1 }, { 0x12730, 1, -1 }, { 0x12A90, 1, 11 }, - { 0x134D0, 0, -1 }, { 0x00000, 0, -1 }, { 0x13770, 0, -1 }, - { 0x00000, 0, -1 }, { 0x00000, 0, -1 }, { 0x00000, 0, -1 }, - { 0x00000, 0, -1 }, { 0x14710, 1, 12 }, { 0x15DF0, 1, 13 }, - { 0x16030, 1, 14 }, { 0x17030, 0, -1 }, { 0x17650, 0, -1 }, - { 0x134D0, 0, -1 }, { 0x178E0, 1, -1 }, { 0x18200, 0, -1 }, - { 0x18320, 0, -1 }, { 0x184A0, 0, -1 }, { 0x18BB0, 0, -1 }, - { 0x19040, 0, 19 }, { 0x19B50, 0, 20 }, { 0x17650, 0, -1 }, - { 0x1A730, 1, 21 }, { 0x00000, 0, -1 }, { 0x12380, 0, -1 }, - { 0x1B810, 0, -1 }, { 0x1BA50, 0, 15 }, { 0x1C190, 0, 16 }, - { 0x1CA50, 0, 17 }, { 0x1D100, 0, 18 } - }; + const int32 * const tTable = (const int32 * const) cdaData(); + int tTableIndex = 3 * track; - int trackNum = tTable[track].track; - bool loop = tTable[track].loop; + int trackNum = tTable[tTableIndex + 2]; + int32 loop = tTable[tTableIndex + 1]; if (track == _lastTrack && _musicEnabled) return; @@ -1168,7 +1138,7 @@ void SoundTowns::playTrack(uint8 track) { AudioCD.play(trackNum+1, loop ? -1 : 1, 0, 0); AudioCD.updateCD(); } else if (_musicEnabled) { - playEuphonyTrack(tTable[track].fileOffset, loop); + playEuphonyTrack((uint32) tTable[tTableIndex], loop); } _lastTrack = track; @@ -1195,7 +1165,7 @@ void SoundTowns::loadSoundFile(uint file) { return; _sfxFileIndex = file; delete [] _sfxFileData; - _sfxFileData = _vm->resource()->fileData(soundFilename(file), 0); + _sfxFileData = _vm->resource()->fileData(fileListEntry(file), 0); } void SoundTowns::playSoundEffect(uint8 track) { @@ -1230,22 +1200,13 @@ void SoundTowns::playSoundEffect(uint8 track) { if (offset == -1) return; - struct SfxHeader { - uint32 id; - uint32 inBufferSize; - uint32 unused1; - uint32 outBufferSize; - uint32 unused2; - uint32 unused3; - uint32 rate; - uint32 rootNoteOffs; - } *sfxHeader = (SfxHeader*)(fileBody + offset); - - uint32 sfxHeaderID = TO_LE_32(sfxHeader->id); - uint32 sfxHeaderInBufferSize = TO_LE_32(sfxHeader->inBufferSize); - uint32 sfxHeaderOutBufferSize = TO_LE_32(sfxHeader->outBufferSize); - uint32 sfxRootNoteOffs = TO_LE_32(sfxHeader->rootNoteOffs); - uint32 sfxRate = TO_LE_32(sfxHeader->rate); + uint32 * sfxHeader = (uint32*)(fileBody + offset); + + uint32 sfxHeaderID = READ_LE_UINT32(sfxHeader); + uint32 sfxHeaderInBufferSize = READ_LE_UINT32(&sfxHeader[1]); + uint32 sfxHeaderOutBufferSize = READ_LE_UINT32(&sfxHeader[3]); + uint32 sfxRootNoteOffs = READ_LE_UINT32(&sfxHeader[7]); + uint32 sfxRate = READ_LE_UINT32(&sfxHeader[6]); uint32 playbackBufferSize = (sfxHeaderID == 1) ? sfxHeaderInBufferSize : sfxHeaderOutBufferSize; @@ -1452,10 +1413,12 @@ void SoundTowns_v2::playTrack(uint8 track) { if (track == _lastTrack && _musicEnabled) return; + const uint8 * const cdaTracks = (const uint8 * const) cdaData(); + int trackNum = -1; - for (int i = 0; i < _themes[_currentTheme].cdaTableSize; i++) { - if (track == _themes[_currentTheme].cdaTable[i * 2]) { - trackNum = _themes[_currentTheme].cdaTable[i * 2 + 1] - 1; + for (uint32 i = 0; i < cdaTrackNum(); i++) { + if (track == cdaTracks[i * 2]) { + trackNum = cdaTracks[i * 2 + 1] - 1; break; } } @@ -1470,7 +1433,7 @@ void SoundTowns_v2::playTrack(uint8 track) { AudioCD.updateCD(); } else if (_musicEnabled) { char musicfile[13]; - sprintf(musicfile, "%s%d.twn", _themes[_currentTheme].twnFilename, track); + sprintf(musicfile, "%s%d.twn", fileListEntry(0), track); if (_twnTrackData) delete [] _twnTrackData; _twnTrackData = _vm->resource()->fileData(musicfile, 0); @@ -1547,33 +1510,6 @@ void SoundTowns_v2::beginFadeOut() { haltTrack(); } -const uint8 SoundTowns_v2::_cdaTrackTableK2Intro[] = { - 0x03, 0x01, 0x04, 0x02, 0x05, 0x03, 0x06, 0x04, 0x07, 0x05, 0x08, 0x06 -}; - -const uint8 SoundTowns_v2::_cdaTrackTableK2Ingame[] = { - 0x02, 0x07, 0x03, 0x08, 0x04, 0x09, 0x07, 0x0A, 0x0C, 0x0B, 0x0D, 0x0C, 0x0E, 0x0D, 0x0F, 0x0E, - 0x10, 0x0F, 0x12, 0x10, 0x13, 0x11, 0x15, 0x12, 0x17, 0x13, 0x18, 0x14, 0x19, 0x15, 0x1A, 0x16, - 0x1B, 0x17, 0x1C, 0x18, 0x1D, 0x19, 0x1E, 0x1A, 0x1F, 0x1B, 0x21, 0x1C, 0x22, 0x1D, 0x23, 0x1E, - 0x24, 0x1F, 0x25, 0x20, 0x26, 0x21, 0x27, 0x22, 0x28, 0x23, 0x29, 0x24, 0x2A, 0x25, 0x2B, 0x26, - 0x2C, 0x27, 0x2D, 0x28, 0x2E, 0x29, 0x2F, 0x2A, 0x30, 0x2B, 0x31, 0x2C, 0x32, 0x2D, 0x33, 0x2E, - 0x34, 0x2F, 0x35, 0x30, 0x36, 0x31, 0x37, 0x32, 0x38, 0x33, 0x39, 0x34, 0x3A, 0x35, 0x3B, 0x36, - 0x3C, 0x37, 0x3D, 0x38, 0x3E, 0x39, 0x3F, 0x3A, 0x40, 0x3B, 0x41, 0x3C, 0x42, 0x3D, 0x43, 0x3E, - 0x44, 0x3F, 0x45, 0x40, 0x46, 0x41, 0x47, 0x42, 0x48, 0x43, 0x49, 0x44, 0x4A, 0x45, 0x4B, 0x46, - 0x4C, 0x47, 0x4D, 0x48, 0x4E, 0x49, 0x4F, 0x4A, 0x50, 0x4B, 0x51, 0x4C, 0x52, 0x4D, 0x53, 0x4E, - 0x54, 0x4F, 0x55, 0x50, 0x56, 0x51, 0x57, 0x52 -}; - -const uint8 SoundTowns_v2::_cdaTrackTableK2Finale[] = { - 0x03, 0x53, 0x04, 0x54 -}; - -const SoundTowns_v2::Kyra2AudioThemes SoundTowns_v2::_themes[] = { - { _cdaTrackTableK2Intro, ARRAYSIZE(_cdaTrackTableK2Intro) >> 1, "intro" }, - { _cdaTrackTableK2Ingame, ARRAYSIZE(_cdaTrackTableK2Ingame) >> 1, "k2" }, - { _cdaTrackTableK2Finale, ARRAYSIZE(_cdaTrackTableK2Finale) >> 1, "finale" } -}; - } // end of namespace Kyra #undef EUPHONY_FADEOUT_TICKS |