mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-18 07:39:08 +00:00
4f18a92f5a
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.
58 lines
1.6 KiB
C++
58 lines
1.6 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#ifndef SCUMM_PLAYER_V5M_H
|
|
#define SCUMM_PLAYER_V5M_H
|
|
|
|
#include "common/scummsys.h"
|
|
#include "common/util.h"
|
|
#include "common/mutex.h"
|
|
#include "scumm/music.h"
|
|
#include "scumm/player_mac.h"
|
|
#include "audio/audiostream.h"
|
|
#include "audio/mixer.h"
|
|
|
|
class Mixer;
|
|
|
|
namespace Scumm {
|
|
|
|
class ScummEngine;
|
|
|
|
/**
|
|
* Scumm V5 Macintosh music driver.
|
|
*/
|
|
class Player_V5M : public Player_Mac {
|
|
public:
|
|
Player_V5M(ScummEngine *scumm, Audio::Mixer *mixer);
|
|
|
|
virtual bool checkMusicAvailable();
|
|
virtual bool loadMusic(const byte *ptr);
|
|
virtual bool getNextNote(int ch, uint32 &samples, int &pitchModifier, byte &velocity);
|
|
|
|
private:
|
|
uint32 _lastNoteSamples[3];
|
|
};
|
|
|
|
} // End of namespace Scumm
|
|
|
|
#endif
|