[Scummvm-cvs-logs] SF.net SVN: scummvm: [26033] scummvm/trunk/engines/queen

cyx at users.sourceforge.net cyx at users.sourceforge.net
Thu Mar 8 23:15:21 CET 2007


Revision: 26033
          http://scummvm.svn.sourceforge.net/scummvm/?rev=26033&view=rev
Author:   cyx
Date:     2007-03-08 14:15:20 -0800 (Thu, 08 Mar 2007)

Log Message:
-----------
Since the amiga version handle music very differently than the PC version, the existing Music and MusicPlayer classes have been merged to a single MidiMusic class, simplifying code a bit.

Modified Paths:
--------------
    scummvm/trunk/engines/queen/journal.cpp
    scummvm/trunk/engines/queen/logic.cpp
    scummvm/trunk/engines/queen/music.cpp
    scummvm/trunk/engines/queen/music.h
    scummvm/trunk/engines/queen/queen.cpp
    scummvm/trunk/engines/queen/sound.cpp
    scummvm/trunk/engines/queen/sound.h

Modified: scummvm/trunk/engines/queen/journal.cpp
===================================================================
--- scummvm/trunk/engines/queen/journal.cpp	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/journal.cpp	2007-03-08 22:15:20 UTC (rev 26033)
@@ -451,7 +451,7 @@
 	_vm->checkOptionSettings();
 
 	drawSlideBar(_vm->talkSpeed(), QueenEngine::MAX_TEXT_SPEED, BOB_TALK_SPEED, 164, FRAME_BLUE_PIN);
-	drawSlideBar(_vm->sound()->volume(), QueenEngine::MAX_MUSIC_VOLUME, BOB_MUSIC_VOLUME, 177, FRAME_GREEN_PIN);
+	drawSlideBar(_vm->sound()->getVolume(), QueenEngine::MAX_MUSIC_VOLUME, BOB_MUSIC_VOLUME, 177, FRAME_GREEN_PIN);
 
 	drawCheckBox(_vm->sound()->sfxOn(), BOB_SFX_TOGGLE, 221, 155, FRAME_CHECK_BOX);
 	drawCheckBox(_vm->sound()->speechOn(), BOB_SPEECH_TOGGLE, 158, 155, FRAME_CHECK_BOX);

Modified: scummvm/trunk/engines/queen/logic.cpp
===================================================================
--- scummvm/trunk/engines/queen/logic.cpp	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/logic.cpp	2007-03-08 22:15:20 UTC (rev 26033)
@@ -655,7 +655,7 @@
 
 	if (_currentRoom == 108) {
 		_vm->graphics()->putCameraOnBob(-1);
-		_vm->bankMan()->load("joe_e.act", 7);
+		_vm->bankMan()->load("JOE_E.ACT", 7);
 		_vm->bankMan()->unpack(2, 31, 7);
 
 		_vm->display()->horizontalScroll(320);

Modified: scummvm/trunk/engines/queen/music.cpp
===================================================================
--- scummvm/trunk/engines/queen/music.cpp	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/music.cpp	2007-03-08 22:15:20 UTC (rev 26033)
@@ -30,7 +30,8 @@
 
 namespace Queen {
 
-MusicPlayer::MusicPlayer(MidiDriver *driver, byte *data, uint32 size) : _driver(driver), _isPlaying(false), _looping(false), _randomLoop(false), _masterVolume(192), _queuePos(0), _musicData(data), _musicDataSize(size), _passThrough(false), _buf(0) {
+MidiMusic::MidiMusic(MidiDriver *driver, QueenEngine *vm)
+	: _driver(driver), _isPlaying(false), _looping(false), _randomLoop(false), _masterVolume(192), _queuePos(0), _passThrough(false), _buf(0) {
 	memset(_channel, 0, sizeof(_channel));
 	queueClear();
 	_lastSong = _currentSong = 0;
@@ -38,18 +39,21 @@
 	_parser->setMidiDriver(this);
 	_parser->setTimerRate(_driver->getBaseTempo());
 
+	const char *filename = vm->resource()->isDemo() ? "AQ8.RL" : "AQ.RL";
+	_musicData = vm->resource()->loadFile(filename, 0, &_musicDataSize);
 	_numSongs = READ_LE_UINT16(_musicData);
 	this->open();
 }
 
-MusicPlayer::~MusicPlayer() {
+MidiMusic::~MidiMusic() {
 	_parser->unloadMusic();
 	delete _parser;
 	this->close();
 	delete[] _buf;
+	delete[] _musicData;
 }
 
-void MusicPlayer::setVolume(int volume) {
+void MidiMusic::setVolume(int volume) {
 	if (volume < 0)
 		volume = 0;
 	else if (volume > 255)
@@ -66,7 +70,13 @@
 	}
 }
 
-bool MusicPlayer::queueSong(uint16 songNum) {
+void MidiMusic::playSong(uint16 songNum) {
+	queueClear();
+	queueSong(songNum);
+	playMusic();
+}
+
+bool MidiMusic::queueSong(uint16 songNum) {
 	if (songNum >= _numSongs && songNum < 1000) {
 		// this happens at the end of the car chase, where we try to play song 176,
 		// see Sound::_tune[], entry 39
@@ -90,14 +100,14 @@
 	return true;
 }
 
-void MusicPlayer::queueClear() {
+void MidiMusic::queueClear() {
 	_lastSong = _songQueue[0];
 	_queuePos = 0;
 	_looping = _randomLoop = false;
 	memset(_songQueue, 0, sizeof(_songQueue));
 }
 
-int MusicPlayer::open() {
+int MidiMusic::open() {
 	// Don't ever call open without first setting the output driver!
 	if (!_driver)
 		return 255;
@@ -109,14 +119,14 @@
 	return 0;
 }
 
-void MusicPlayer::close() {
+void MidiMusic::close() {
 	_driver->setTimerCallback(NULL, NULL);
 	if (_driver)
 		_driver->close();
 	_driver = 0;
 }
 
-void MusicPlayer::send(uint32 b) {
+void MidiMusic::send(uint32 b) {
 	if (_passThrough) {
 		_driver->send(b);
 		return;
@@ -154,7 +164,7 @@
 		_channel[channel]->send(b);
 }
 
-void MusicPlayer::metaEvent(byte type, byte *data, uint16 length) {
+void MidiMusic::metaEvent(byte type, byte *data, uint16 length) {
 	//Only thing we care about is End of Track.
 	if (type != 0x2F)
 		return;
@@ -165,13 +175,13 @@
 		stopMusic();
 }
 
-void MusicPlayer::onTimer(void *refCon) {
-	MusicPlayer *music = (MusicPlayer *)refCon;
+void MidiMusic::onTimer(void *refCon) {
+	MidiMusic *music = (MidiMusic *)refCon;
 	if (music->_isPlaying)
 		music->_parser->onTimer();
 }
 
-void MusicPlayer::queueTuneList(int16 tuneList) {
+void MidiMusic::queueTuneList(int16 tuneList) {
 	queueClear();
 
 	//Jungle is the only part of the game that uses multiple tunelists.
@@ -212,9 +222,9 @@
 		_queuePos = randomQueuePos();
 }
 
-void MusicPlayer::playMusic() {
+void MidiMusic::playMusic() {
 	if (!_songQueue[0]) {
-		debug(5, "MusicPlayer::playMusic - Music queue is empty");
+		debug(5, "MidiMusic::playMusic - Music queue is empty");
 		return;
 	}
 
@@ -276,7 +286,7 @@
 	queueUpdatePos();
 }
 
-void MusicPlayer::queueUpdatePos() {
+void MidiMusic::queueUpdatePos() {
 	if (_randomLoop) {
 		_queuePos = randomQueuePos();
 	} else {
@@ -287,7 +297,7 @@
 	}
 }
 
-uint8 MusicPlayer::randomQueuePos() {
+uint8 MidiMusic::randomQueuePos() {
 	int queueSize = 0;
 	for (int i = 0; i < MUSIC_QUEUE_SIZE; i++)
 		if (_songQueue[i])
@@ -299,46 +309,26 @@
 	return (uint8) _rnd.getRandomNumber(queueSize - 1) & 0xFF;
 }
 
-void MusicPlayer::stopMusic() {
+void MidiMusic::stopMusic() {
 	_isPlaying = false;
 	_parser->unloadMusic();
 }
 
-uint32 MusicPlayer::songOffset(uint16 songNum) const {
+uint32 MidiMusic::songOffset(uint16 songNum) const {
 	uint16 offsLo = READ_LE_UINT16(_musicData + (songNum * 4) + 2);
 	uint16 offsHi = READ_LE_UINT16(_musicData + (songNum * 4) + 4);
 	return (offsHi << 4) | offsLo;
 }
 
-uint32 MusicPlayer::songLength(uint16 songNum) const {
+uint32 MidiMusic::songLength(uint16 songNum) const {
 	if (songNum < _numSongs)
 		return (songOffset(songNum + 1) - songOffset(songNum));
 	return (_musicDataSize - songOffset(songNum));
 }
 
-Music::Music(MidiDriver *driver, QueenEngine *vm) : _vToggle(false) {
-	if (vm->resource()->isDemo()) {
-		_musicData = vm->resource()->loadFile("AQ8.RL", 0, &_musicDataSize);
-	} else {
-		_musicData = vm->resource()->loadFile("AQ.RL", 0, &_musicDataSize);
-	}
-	_player = new MusicPlayer(driver, _musicData, _musicDataSize);
+void MidiMusic::toggleVChange() {
+	setVolume(_vToggle ? (getVolume() * 2) : (getVolume() / 2));
+	_vToggle = !_vToggle;
 }
 
-Music::~Music() {
-	delete _player;
-	delete[] _musicData;
-}
-
-void Music::playSong(uint16 songNum) {
-	_player->queueClear();
-	_player->queueSong(songNum);
-	_player->playMusic();
-}
-
-void Music::toggleVChange() {
-	setVolume(_vToggle ? (volume() * 2) : (volume() / 2));
-	_vToggle ^= true;
-}
-
 } // End of namespace Queen

Modified: scummvm/trunk/engines/queen/music.h
===================================================================
--- scummvm/trunk/engines/queen/music.h	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/music.h	2007-03-08 22:15:20 UTC (rev 26033)
@@ -32,14 +32,16 @@
 
 class QueenEngine;
 
-class MusicPlayer : public MidiDriver {
+class MidiMusic : public MidiDriver {
 public:
-	MusicPlayer(MidiDriver *driver, byte *data, uint32 size);
-	~MusicPlayer();
+	MidiMusic(MidiDriver *driver, QueenEngine *vm);
+	~MidiMusic();
 	void setVolume(int volume);
 	int getVolume()			{ return _masterVolume; }
 
 	void hasNativeMT32(bool b)	{ _nativeMT32 = b; }
+	void playSong(uint16 songNum);
+	void stopSong() { stopMusic(); }
 	void playMusic();
 	void stopMusic();
 	void setLoop(bool loop)		{ _looping = loop; }
@@ -47,6 +49,7 @@
 	bool queueSong(uint16 songNum);
 	void queueClear();
 	void setPassThrough(bool b)		{ _passThrough = b; }
+	void toggleVChange();
 
 	//MidiDriver interface implementation
 	int open();
@@ -93,31 +96,10 @@
 	int16 _songQueue[MUSIC_QUEUE_SIZE];
 
 	uint16 _numSongs;
-	byte *_musicData;
 	uint16 *_buf;
 	uint32 _musicDataSize;
-};
-
-class Music {
-public:
-	Music(MidiDriver *_driver, QueenEngine *vm);
-	~Music();
-	void hasNativeMT32(bool b)		{ _player->hasNativeMT32(b); }
-	void playSong(uint16 songNum);
-	void queueTuneList(int16 tuneList)	{ _player->queueTuneList(tuneList); }
-	void playMusic()			{ _player->playMusic(); }
-	void stopSong()				{ _player->stopMusic(); }
-	void setPassThrough(bool b)		{ _player->setPassThrough(b); }
-
-	void toggleVChange();
-	void setVolume(int vol)			{ _player->setVolume(vol); }
-	int volume()				{ return _player->getVolume(); }
-
-protected:
 	bool _vToggle;
 	byte *_musicData;
-	uint32 _musicDataSize;
-	MusicPlayer *_player;
 };
 
 } // End of namespace Queen

Modified: scummvm/trunk/engines/queen/queen.cpp
===================================================================
--- scummvm/trunk/engines/queen/queen.cpp	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/queen.cpp	2007-03-08 22:15:20 UTC (rev 26033)
@@ -160,7 +160,7 @@
 }
 
 void QueenEngine::writeOptionSettings() {
-	ConfMan.setInt("music_volume", _sound->volume());
+	ConfMan.setInt("music_volume", _sound->getVolume());
 	ConfMan.setBool("music_mute", !_sound->musicOn());
 	ConfMan.setBool("sfx_mute", !_sound->sfxOn());
 	ConfMan.setInt("talkspeed", ((_talkSpeed - MIN_TEXT_SPEED) * 255 + (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 2) / (MAX_TEXT_SPEED - MIN_TEXT_SPEED));

Modified: scummvm/trunk/engines/queen/sound.cpp
===================================================================
--- scummvm/trunk/engines/queen/sound.cpp	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/sound.cpp	2007-03-08 22:15:20 UTC (rev 26033)
@@ -148,7 +148,7 @@
 	if (native_mt32)
 		driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
 
-	_music = new Music(driver, vm);
+	_music = new MidiMusic(driver, vm);
 	_music->hasNativeMT32(native_mt32);
 }
 
@@ -224,7 +224,7 @@
 }
 
 int PCSound::volume() {
-	return _music->volume();
+	return _music->getVolume();
 }
 
 void PCSound::waitFinished(bool isSpeech) {

Modified: scummvm/trunk/engines/queen/sound.h
===================================================================
--- scummvm/trunk/engines/queen/sound.h	2007-03-08 21:40:47 UTC (rev 26032)
+++ scummvm/trunk/engines/queen/sound.h	2007-03-08 22:15:20 UTC (rev 26033)
@@ -50,7 +50,7 @@
 	int16 delay;
 };
 
-class Music;
+class MidiMusic;
 class QueenEngine;
 
 class Sound {
@@ -77,7 +77,7 @@
 	virtual void updateMusic() {}
 
 	virtual void setVolume(int vol)		{ _masterVolume = vol; }
-	virtual int volume()				{ return _masterVolume; }
+	virtual int getVolume()				{ return _masterVolume; }
 
 	void playLastSong()		{ playSong(_lastOverride); }
 
@@ -157,7 +157,7 @@
 
 	Audio::SoundHandle _sfxHandle;
 	Audio::SoundHandle _speechHandle;
-	Music *_music;
+	MidiMusic *_music;
 };
 
 class AmigaSound : public Sound {


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list