aboutsummaryrefslogtreecommitdiff
path: root/engines/scumm/player_mac.cpp
AgeCommit message (Collapse)Author
2013-07-16SCUMM: Better Player_Mac::durationToSamplescountingpine
Uses the fact that 4*480*480 == 225 << 12, and the identity (a*b)>>n == (a>>n)*b + ((a%(1<<n))*b)>>n (assuming non-overflowing math), except the rhs uses smaller intermediate values and does not overflow(*). Compared to the original code, this uses 1 fewer division and eliminates the rounding error. (*) Technical note: In some cases the right hand side of the above identity still has possibilities of intermediate overflow, but only if b > (1 << n), or if (b << n) overflows, neither of which are true here.
2012-12-14SCUMM: Fix compilation on AmigaOS4.Johannes Schickel
2012-11-24SCUMM: Handle note value 1 as "hold current note" in MI1 MacTorbjörn Andersson
After listening to the original music in a Mac emulator (which unfortunately doesn't handle the music very well), I can only conclude that note value 1 means the note should continue playing. At first I thought maybe it was supposed to fade the current note, or perhaps change its volume, but I can't hear any traces of either. So I'm going to assume it just means "hold the current note", though for the life of me I cannot think of any valid reason for such a command. So it may be wrong, but it sounds closer to the emulator than it did before.
2012-11-23SCUMM: Added TODO comment about Mac MI1 musicTorbjörn Andersson
Some notes in the main theme are very staccato, and this could possibly explain why.
2012-11-23SCUMM: Fix memory leak when loading old MI1 Mac savegamesTorbjörn Andersson
I completely forgot to delete the dummy iMUSE object after using it to skip over the old music save information. Thanks to Lordhoto for pointing this out.
2012-11-19SCUMM: Fix crash when Macintosh instruments aren't availableTorbjörn Andersson
Initialise _channel[] even when the instruments aren't available. Otherwise, ScummVM will crash in a number of places including, but not limited to, when loading savegames.
2012-11-18SCUMM: Lock the sound resource while the music is playingTorbjörn Andersson
After some discussion on #scummvm, the player now locks the sound resource while the music is playing. This prevents the resource manager from expiring the resource, which at best could cause music to restart where it shouldn't.. At worst, I guess it could have crashed, but I never saw that happen.
2012-11-18SCUMM: Use more correct (I think) way of converting samplesTorbjörn Andersson
It shouldn't make any real difference, but it's probably more formally correct.
2012-11-18SCUMM: Prevent music channels from drifting out of sync in Mac MI1Torbjörn Andersson
In looped music, prevent the music channels from drifting out of sync over time. This was noticeable after a few minutes in the SCUMM Bar. We do this by extending the last note (which is just zeroes, so we didn't even use to play it) so that it has the exact number of samples needed to make all channels the exact same length. (This is calculated when the music is loaded, so it does not need any extra data in the save games, thankfully.) As a result, the getNextNote() is now responsible for converting the duration to number of samples (out of necessity) and for converting the note to a pitch modifier (out of symmetry). I made several false starts before I realized how much easier it would be this way.
2012-11-17SCUMM: Avoid "pops" at the end of the note in Mac MI1/Loom musicTorbjörn Andersson
At least on my computer, when the note ended abruptly there would be an annoying "pop" at the end. This was particularly noticeable at the end of the distaff notes in Loom. To get around this, fade out the last 100 samples. There's nothing magical about 100 in particular, but it's a nice even number and it should be short enough that it's never a noticeable part of the note, even at low sample rates.
2012-11-17SCUMM: Remove commented out code.Torbjörn Andersson
It was the remains of an experiment and no longer serves a purpose.
2012-11-16SCUMM: Store sample rate in Mac MI1 / Loom savegamesTorbjörn Andersson
This keeps the music from breaking when loading a savegame that was made with a different sample rate than the current one. It also breaks all savegames made in the past eight hours, but I don't think it's necessary to maintain savegame compatibility within a pull request, as long as it still works with savegames made before it.
2012-11-16SCUMM: Add hack to preserve savegame compatibility with Mac MI1Torbjörn Andersson
For old savegames, we now use a "dummy" iMUSE objet to skip the old iMUSE save state. I had hoped to be able to do this without making any changes to the iMUSE code itself, but I was unable to. Also added note about how the save state for the new music will not quite work if the mixer output rate changes. Personally, I'm not too worried about that. It breaks, but it shouldn't break badly.
2012-11-15SCUMM: Save/load Mac music engine state for Loom and MI1Torbjörn Andersson
Note that while this removes _townsPlayer->saveLoadWithSerializer(s) it really shouldn't break anything because _musicEngine also points to the FM Towns player. Famous last words...
2012-11-14SCUMM: Move Mac player initialization to its own functionTorbjörn Andersson
Apparently we cannot (portably) call virtual functions from the constructor, so initialization has been moved to a separate function.
2012-11-14SCUMM: Hopefully fix warningTorbjörn Andersson
Excplicitly cast to int to avoid a warning that I don't get, but which clone2727 does. At least, I hope it avoids the warning.
2012-11-14SCUMM: Move most of the Macintosh player code into its own classTorbjörn Andersson
The Monkey Island and Loom mac music is really quite similar. The data layout is a bit different, but most of the code was easy to separate into its own class. The Loom player doesn't do looped music but I don't remember off-hand if it ever should.