diff options
author | Jamieson Christian | 2002-11-21 19:26:44 +0000 |
---|---|---|
committer | Jamieson Christian | 2002-11-21 19:26:44 +0000 |
commit | e68d425cdc9c2ac9a7191c2945675d9f7326cc35 (patch) | |
tree | 41c0c98c83d648c9f3202de08994649fccfbecd9 | |
parent | 40597a9193a4ee0a471c5023904297f883b8b200 (diff) | |
download | scummvm-rg350-e68d425cdc9c2ac9a7191c2945675d9f7326cc35.tar.gz scummvm-rg350-e68d425cdc9c2ac9a7191c2945675d9f7326cc35.tar.bz2 scummvm-rg350-e68d425cdc9c2ac9a7191c2945675d9f7326cc35.zip |
Broke MidiStreamer into .h and .cpp components.
svn-id: r5682
-rw-r--r-- | simon/midi.cpp | 5 | ||||
-rw-r--r-- | sound/midistreamer.cpp | 78 | ||||
-rw-r--r-- | sound/midistreamer.h | 64 |
3 files changed, 72 insertions, 75 deletions
diff --git a/simon/midi.cpp b/simon/midi.cpp index cf31d24b0f..15d61ab74e 100644 --- a/simon/midi.cpp +++ b/simon/midi.cpp @@ -24,13 +24,10 @@ #include "scummsys.h" #include "common/system.h" #include "common/file.h" -#include "sound/mididrv.h" +#include "sound/midistreamer.h" #include "sound/mixer.h" #include "simon/simon.h" -// FIXME: This is a horrible place to put this, but for now.... -#include "sound/midistreamer.cpp" - MidiPlayer::MidiPlayer() { // Since initialize() is called every time the music changes, // this is where we'll initialize stuff that must persist diff --git a/sound/midistreamer.cpp b/sound/midistreamer.cpp index 724b0852c5..ed32ef7934 100644 --- a/sound/midistreamer.cpp +++ b/sound/midistreamer.cpp @@ -19,49 +19,10 @@ * */ - -#include "stdafx.h" -#include "mididrv.h" -#include "engine.h" +// #include "stdafx.h" +#include "midistreamer.h" #include "common/util.h" -class MidiStreamer : public MidiDriver { -private: - MidiDriver *_target; - StreamCallback *_stream_proc; - void *_stream_param; - volatile int _mode; - volatile bool _paused; - - MidiEvent _events [64]; - int _event_count; - int _event_index; - - long _driver_tempo; - long _tempo; - uint16 _ticks_per_beat; - long _delay; - - volatile bool _active; - - uint32 property(int prop, uint32 param); - static void timer_thread (void *param); - void on_timer(); - -public: - MidiStreamer (MidiDriver *target); - - int open(int mode); - void close(); - void send(uint32 b) { if (_mode) _target->send (b); } - void pause(bool p) { _paused = p; } - void set_stream_callback(void *param, StreamCallback *sc); - void setPitchBendRange (byte channel, uint range) { _target->setPitchBendRange (channel, range); } - - void setTimerCallback (void *timer_param, void (*timer_proc) (void *)) { } - uint32 getBaseTempo (void) { return _target->getBaseTempo(); } -}; - MidiStreamer::MidiStreamer (MidiDriver *target) : _target (target), _stream_proc (0), @@ -72,8 +33,7 @@ _event_count (0), _event_index (0), _tempo (500000), // 120 BPM = 500,000 microseconds between each beat _ticks_per_beat (96), -_delay (0), -_active (false) +_delay (0) { } void MidiStreamer::set_stream_callback (void *param, StreamCallback *sc) @@ -86,41 +46,17 @@ void MidiStreamer::set_stream_callback (void *param, StreamCallback *sc) _event_index = 0; } } -/* -int MidiStreamer::timer_thread (void *param) { - MidiStreamer *mid = (MidiStreamer *) param; - int old_time, cur_time; - while (mid->_mode) { - g_system->delay_msecs (100); - while (!mid->_stream_proc); - old_time = g_system->get_msecs(); - while (!mid->_paused) { - g_system->delay_msecs(10); - - cur_time = g_system->get_msecs(); - while (old_time < cur_time) { - old_time += 10; - mid->on_timer(); - } - } - } - // Turn off all notes on all channels, - // just to catch anything still playing. - int i; - for (i = 0; i < 16; ++i) - mid->_target->send ((0x7B << 8) | 0xB0 | i); - mid->_active = false; - return 0; -} -*/ void MidiStreamer::timer_thread (void *param) { ((MidiStreamer *) param)->on_timer(); } void MidiStreamer::on_timer() { - _delay += _driver_tempo; // 10000; + if (_paused || !_stream_proc) + return; + + _delay += _driver_tempo; while (true) { if (_event_index >= _event_count) { _event_count = _stream_proc (_stream_param, _events, ARRAYSIZE (_events)); diff --git a/sound/midistreamer.h b/sound/midistreamer.h new file mode 100644 index 0000000000..62f95db70b --- /dev/null +++ b/sound/midistreamer.h @@ -0,0 +1,64 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001/2002 The ScummVM project + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Header$ + * + */ + +#ifndef INCLUDED_MIDISTREAMER +#define INCLUDED_MIDISTREAMER + +class MidiStreamer; + +#include "mididrv.h" + +class MidiStreamer : public MidiDriver { +private: + MidiDriver *_target; + StreamCallback *_stream_proc; + void *_stream_param; + int _mode; + bool _paused; + + MidiEvent _events [64]; + int _event_count; + int _event_index; + + long _driver_tempo; + long _tempo; + uint16 _ticks_per_beat; + long _delay; + + uint32 property(int prop, uint32 param); + static void timer_thread (void *param); + void on_timer(); + +public: + MidiStreamer (MidiDriver *target); + + int open(int mode); + void close(); + void send(uint32 b) { if (_mode) _target->send (b); } + void pause(bool p) { _paused = p; } + void set_stream_callback(void *param, StreamCallback *sc); + void setPitchBendRange (byte channel, uint range) { _target->setPitchBendRange (channel, range); } + + void setTimerCallback (void *timer_param, void (*timer_proc) (void *)) { } + uint32 getBaseTempo (void) { return _target->getBaseTempo(); } +}; + +#endif |