[Scummvm-cvs-logs] CVS: scummvm/queen music.cpp,1.2,1.3 music.h,1.2,1.3
Joost Peters
joostp at users.sourceforge.net
Sat Dec 27 21:25:10 CET 2003
Update of /cvsroot/scummvm/scummvm/queen
In directory sc8-pr-cvs1:/tmp/cvs-serv7363/queen
Modified Files:
music.cpp music.h
Log Message:
Improved music code a bit. still has 'hanging notes' when stopping music, though.
Index: music.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- music.cpp 28 Dec 2003 01:17:29 -0000 1.2
+++ music.cpp 28 Dec 2003 03:31:05 -0000 1.3
@@ -29,26 +29,23 @@
namespace Queen {
- Music::Music(MidiDriver *driver, QueenEngine *vm) : _loop(false), _driver(driver) {
+ Music::Music(MidiDriver *driver, QueenEngine *vm) : _isPlaying(false), _loop(false), _driver(driver) {
_midi = MidiParser::createParser_SMF();
_midi->setMidiDriver(_driver);
int ret = _driver->open();
if (ret)
warning("MIDI Player init failed: \"%s\"", _driver->getErrorName(ret));
_midi->setTimerRate(_driver->getBaseTempo());
- _driver->setTimerCallback((void *)_midi, _midi->timerCallback);
-
+ _driver->setTimerCallback(this, myTimerProc);
+
_musicData = vm->resource()->loadFile("AQ.RL", 0, NULL);
_musicDataSize = vm->resource()->fileSize("AQ.RL");
_numSongs = READ_LE_UINT16(_musicData);
}
Music::~Music() {
- stopSong();
+ _driver->setTimerCallback(NULL, NULL);
_midi->unloadMusic();
- // Send All Notes Off
- for (int i = 0; i < 16; ++i)
- _driver->send((123 << 8) | 0xB0 | i);
_driver->close();
delete _midi;
delete[] _musicData;
@@ -60,13 +57,19 @@
else
_midi->property(MidiParser::mpAutoLoop, 0);
+ _isPlaying = true;
_midi->loadMusic(_musicData + songOffset(songNum), songLength(songNum));
_midi->setTrack(0);
- _driver->setTimerCallback((void *)_midi, _midi->timerCallback);
}
void Music::stopSong() {
- _driver->setTimerCallback(NULL, NULL);
+ _isPlaying = false;
+ }
+
+ void Music::myTimerProc(void *refCon) {
+ Music *music = (Music *)refCon;
+ if (music->_isPlaying)
+ music->_midi->onTimer();
}
uint32 Music::songOffset(uint16 songNum) {
Index: music.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/queen/music.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- music.h 14 Dec 2003 01:04:07 -0000 1.2
+++ music.h 28 Dec 2003 03:31:05 -0000 1.3
@@ -40,13 +40,15 @@
void loop(bool val) { _loop = val; }
protected:
+ bool _isPlaying;
bool _loop;
byte *_musicData;
uint16 _numSongs;
uint32 _musicDataSize;
MidiDriver *_driver;
MidiParser *_midi;
-
+
+ static void myTimerProc(void *refCon);
uint32 songOffset(uint16 songNum);
uint32 songLength(uint16 songNum);
};
More information about the Scummvm-git-logs
mailing list