diff options
author | James Brown | 2002-04-22 11:18:11 +0000 |
---|---|---|
committer | James Brown | 2002-04-22 11:18:11 +0000 |
commit | c74f9669916bd9da16b78c01b739da8d478e5eff (patch) | |
tree | 54296933f0b7f5900543c7ae76c507ad2c7f3d4e /sound.cpp | |
parent | d447f057094084f55b19a9806ce70a3ed44b96c6 (diff) | |
download | scummvm-rg350-c74f9669916bd9da16b78c01b739da8d478e5eff.tar.gz scummvm-rg350-c74f9669916bd9da16b78c01b739da8d478e5eff.tar.bz2 scummvm-rg350-c74f9669916bd9da16b78c01b739da8d478e5eff.zip |
Apply urkles MI1 MP3 CD Audio patch and Loom MP3 syncronisation fix patch
svn-id: r4049
Diffstat (limited to 'sound.cpp')
-rw-r--r-- | sound.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -106,8 +106,13 @@ void Scumm::playSound(int sound) ptr = getResourceAddress(rtSound, sound); if (ptr != NULL && READ_UINT32_UNALIGNED(ptr) == MKID('SOUN')) { ptr += 8; - _system->play_cdrom(ptr[16], ptr[17] == 0xff ? -1 : ptr[17], +#ifdef COMPRESSED_SOUND_FILE + playMP3CDTrack(ptr[16], ptr[17] == 0xff ? -1 : ptr[17], (ptr[18] * 60 + ptr[19]) * 75 + ptr[20], 0); +#else + _system->play_cdrom(ptr[16], ptr[17] == 0xff ? -1 : ptr[17], + (ptr[18] * 60 + ptr[19]) * 75 + ptr[20], 0); +#endif current_cd_sound = sound; return; } @@ -717,7 +722,7 @@ void Scumm::playMP3CDTrack(int track, int num_loops, int start, int delay) { if (_soundsPaused) return; - if (!start && !delay) { + if (!num_loops && !start) { _mixer->stop(_mp3_handle); return; } @@ -728,11 +733,17 @@ void Scumm::playMP3CDTrack(int track, int num_loops, int start, int delay) { // Calc offset frame_size = 144 * _mad_header[index].bitrate / _mad_header[index].samplerate; - offset = (long)((float)start / (float)75 * 1000 / - (float)((float)1152 / (float)_mad_header[index].samplerate * - 1000) * (float)(frame_size + 0.5)); + offset = (long)( (float)start / (float)75 * ((float)_mad_header[index].bitrate/(float)8)); + // Calc delay - mad_timer_set(&duration, 0, delay, 75); + if (!delay) { + struct stat file_stat; + fstat(fileno(_mp3_tracks[index]),&file_stat); + mad_timer_set(&duration, 0,file_stat.st_size, (_mad_header[index].bitrate/8)); + } else { + mad_timer_set(&duration, 0, delay, 75); + } + // Go fseek(_mp3_tracks[index], offset, SEEK_SET); |