[Scummvm-tracker] [ScummVM :: Bugs] #15886: SCUMM: Bug when restoring CD audio sound in some games

ScummVM :: Bugs trac at scummvm.org
Wed Apr 23 18:02:53 UTC 2025


#15886: SCUMM: Bug when restoring CD audio sound in some games
-------------------------+------------------------------
Reporter:  eriktorbjorn  |       Owner:  (none)
    Type:  defect        |      Status:  new
Priority:  normal        |   Component:  Engine: SCUMM
 Version:                |  Resolution:
Keywords:                |        Game:  Monkey Island 1
-------------------------+------------------------------
Description changed by eriktorbjorn:

Old description:

> This is something I noticed while playing the Sega CD version of The
> Secret of Monkey Island, but I assume it also happens in other, less
> obscure, games. When loading certain savegames, there is a warning like
> this:
>
> {{{
> WARNING: makeLoopingAudioStream: start (159733) >= end (159173)!
> WARNING: stream is 0!
> }}}
>
> The problem seems to happen if you save in a room that's playing looping
> CD audio, and it's played it played for long enough for it to loop back
> to the beginning again. As far as I can tell, this is almost certainly a
> bug in `SoundCD::restoreAfterLoad()`:
>
> {{{
>         } else if (_vm->_game.platform != Common::kPlatformFMTowns) {
>                 trackNr = getCDTrackIdFromSoundId(_currentCDSound, loops,
> start, end);
>                 if (trackNr != -1)
>                         g_system->getAudioCDManager()->play(trackNr,
> loops, start + _vm->VAR(_vm->VAR_MUSIC_TIMER), 0, true);
>         }
> }}}
>
> Apparently, `VAR_MUSIC_TIMER` does not reset when the track loops (should
> it?), so when it adds that to `start` it tries to start the track from a
> point beyond the end of it.
>
> Also, doesn't this mean that if, say, you save five seconds from the end
> of the song, it will loop only that final five seconds?
>
> Finally, it seems rather inexact when restoring the current position of
> the track. Can we really just add `VAR_MUSIC_TIMER` like that? It seems
> to work much better in VGA Loom, but that apparently does it differently.
>
> I suppose restoring the position is only really necessary for tracks that
> play once (where the action may be timed to the music), so the quick-and-
> dirty solution would be to just play from the beginning if the track
> loops.

New description:

 This is something I noticed while playing the Sega CD version of The
 Secret of Monkey Island, but I assume it also happens in other, less
 obscure, games. When loading certain savegames, there is a warning like
 this:

 {{{
 WARNING: makeLoopingAudioStream: start (159733) >= end (159173)!
 WARNING: stream is 0!
 }}}

 The problem seems to happen if you save in a room that's playing looping
 CD audio, and it's played it played for long enough for it to loop back to
 the beginning again. As far as I can tell, this is almost certainly a bug
 in `SoundCD::restoreAfterLoad()`:

 {{{
         } else if (_vm->_game.platform != Common::kPlatformFMTowns) {
                 trackNr = getCDTrackIdFromSoundId(_currentCDSound, loops,
 start, end);
                 if (trackNr != -1)
                         g_system->getAudioCDManager()->play(trackNr,
 loops, start + _vm->VAR(_vm->VAR_MUSIC_TIMER), 0, true);
         }
 }}}

 Apparently, `VAR_MUSIC_TIMER` does not reset when the track loops (should
 it?), so when it adds that to `start` it tries to start the track from a
 point beyond the end of it.

 Also, doesn't this mean that if, say, you save five seconds from the end
 of the song, it will loop only that final five seconds? That's certainly
 the impression I get when I'm testing it.

 Finally, it seems rather inexact when restoring the current position of
 the track. Can we really just add `VAR_MUSIC_TIMER` like that? It seems to
 work much better in VGA Loom, but that apparently does it differently.

 I suppose restoring the position is only really necessary for tracks that
 play once (where the action may be timed to the music), so the quick-and-
 dirty solution would be to just play from the beginning if the track
 loops.

--
-- 
Ticket URL: <https://bugs.scummvm.org/ticket/15886#comment:2>
ScummVM :: Bugs <https://bugs.scummvm.org>
ScummVM


More information about the Scummvm-tracker mailing list