aboutsummaryrefslogtreecommitdiff
path: root/sound.cpp
diff options
context:
space:
mode:
authorJames Brown2002-04-22 11:18:11 +0000
committerJames Brown2002-04-22 11:18:11 +0000
commitc74f9669916bd9da16b78c01b739da8d478e5eff (patch)
tree54296933f0b7f5900543c7ae76c507ad2c7f3d4e /sound.cpp
parentd447f057094084f55b19a9806ce70a3ed44b96c6 (diff)
downloadscummvm-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.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/sound.cpp b/sound.cpp
index 0441b26d5e..9bd538d827 100644
--- a/sound.cpp
+++ b/sound.cpp
@@ -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);