From 1f5d4dcd233e15aa1cc15f533cc4d65342164e15 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sat, 13 Mar 2004 12:04:18 +0000 Subject: When both music channels are used, and a third piece of music starts, silence the channel that appears to be closest to silence already. This is the same method I used in BS2, and it might fix a glitch I heard at the Club Alamut. svn-id: r13234 --- sword1/music.cpp | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'sword1') diff --git a/sword1/music.cpp b/sword1/music.cpp index ae0a9c0794..586a93638e 100644 --- a/sword1/music.cpp +++ b/sword1/music.cpp @@ -154,12 +154,27 @@ void Music::startMusic(int32 tuneId, int32 loopFlag) { if (strlen(_tuneList[tuneId]) > 0) { int newStream = 0; if (_handles[0].streaming() && _handles[1].streaming()) { - // If both handles are playing, stop the one that's - // fading down. - if (_handles[0].fading() > 0) - _handles[0].stop(); - else - _handles[1].stop(); + int streamToStop; + // Both streams playing - one must be forced to stop. + if (!_handles[0].fading() && !_handles[1].fading()) { + // None of them are fading. Shouldn't happen, + // so it doesn't matter which one we pick. + streamToStop = 0; + } else if (_handles[0].fading() && !_handles[1].fading()) { + // Stream 0 is fading, so pick that one. + streamToStop = 0; + } else if (!_handles[0].fading() && _handles[1].fading()) { + // Stream 1 is fading, so pick that one. + streamToStop = 1; + } else { + // Both streams are fading. Pick the one that + // is closest to silent. + if (ABS(_handles[0].fading()) < ABS(_handles[1].fading())) + streamToStop = 0; + else + streamToStop = 1; + } + _handles[streamToStop].stop(); } if (_handles[0].streaming()) { _handles[0].fadeDown(); -- cgit v1.2.3