aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/midi.h
diff options
context:
space:
mode:
authorEugene Sandulenko2006-09-29 08:37:24 +0000
committerEugene Sandulenko2006-09-29 08:37:24 +0000
commit798c7ee6822517601ef3c4096ad76a2fc0eefb50 (patch)
tree02b63f44348a35d6e3b6ab53540e94b2e45738e7 /engines/agos/midi.h
parent8e2c703baba570b18aec9d871fdc8ee7efe49e57 (diff)
downloadscummvm-rg350-798c7ee6822517601ef3c4096ad76a2fc0eefb50.tar.gz
scummvm-rg350-798c7ee6822517601ef3c4096ad76a2fc0eefb50.tar.bz2
scummvm-rg350-798c7ee6822517601ef3c4096ad76a2fc0eefb50.zip
Phase 2 of Simon renaming. Simon directory renaming
svn-id: r24009
Diffstat (limited to 'engines/agos/midi.h')
-rw-r--r--engines/agos/midi.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/engines/agos/midi.h b/engines/agos/midi.h
new file mode 100644
index 0000000000..cf055bffac
--- /dev/null
+++ b/engines/agos/midi.h
@@ -0,0 +1,128 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2001 Ludvig Strigeus
+ * Copyright (C) 2001-2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *
+ */
+
+#ifndef AGOS_MIDI_H
+#define AGOS_MIDI_H
+
+#include "sound/mididrv.h"
+#include "sound/midiparser.h"
+#include "common/mutex.h"
+
+namespace Common {
+ class File;
+}
+
+namespace Simon {
+
+struct MusicInfo {
+ MidiParser *parser;
+ byte *data;
+ byte num_songs; // For Type 1 SMF resources
+ byte *songs[16]; // For Type 1 SMF resources
+ uint32 song_sizes[16]; // For Type 1 SMF resources
+
+ MidiChannel *channel[16]; // Dynamic remapping of channels to resolve conflicts
+ byte volume[16]; // Current channel volume
+
+ MusicInfo() { clear(); }
+ void clear() {
+ parser = 0; data = 0; num_songs = 0;
+ memset(songs, 0, sizeof(songs));
+ memset(song_sizes, 0, sizeof(song_sizes));
+ memset(channel, 0, sizeof(channel));
+ }
+};
+
+class MidiPlayer : public MidiDriver {
+protected:
+ Common::Mutex _mutex;
+ MidiDriver *_driver;
+ bool _map_mt32_to_gm;
+ bool _passThrough;
+
+ MusicInfo _music;
+ MusicInfo _sfx;
+ MusicInfo *_current; // Allows us to establish current context for operations.
+
+ // These are maintained for both music and SFX
+ byte _masterVolume; // 0-255
+ bool _paused;
+
+ // These are only used for music.
+ byte _currentTrack;
+ bool _loopTrack;
+ byte _queuedTrack;
+ bool _loopQueuedTrack;
+
+protected:
+ static void onTimer(void *data);
+ void clearConstructs();
+ void clearConstructs(MusicInfo &info);
+ void resetVolumeTable();
+
+public:
+ bool _enable_sfx;
+
+public:
+ MidiPlayer(OSystem *system);
+ virtual ~MidiPlayer();
+
+ void loadSMF(Common::File *in, int song, bool sfx = false);
+ void loadMultipleSMF(Common::File *in, bool sfx = false);
+ void loadXMIDI(Common::File *in, bool sfx = false);
+ void loadS1D(Common::File *in, bool sfx = false);
+
+ void mapMT32toGM(bool map);
+ void setLoop(bool loop);
+ void startTrack(int track);
+ void queueTrack(int track, bool loop);
+ bool isPlaying(bool check_queued = false) { return (_currentTrack != 255 && (_queuedTrack != 255 || !check_queued)); }
+
+ void stop();
+ void pause(bool b);
+
+ int get_volume() { return _masterVolume; }
+ void set_volume(int volume);
+ void set_driver(MidiDriver *md);
+
+public:
+ // MidiDriver interface implementation
+ int open();
+ void close();
+ void send(uint32 b);
+
+ void metaEvent(byte type, byte *data, uint16 length);
+ void setPassThrough(bool b) { _passThrough = b; }
+
+ // Timing functions - MidiDriver now operates timers
+ void setTimerCallback(void *timer_param, void (*timer_proc) (void *)) { }
+ uint32 getBaseTempo(void) { return _driver ? _driver->getBaseTempo() : 0; }
+
+ // Channel allocation functions
+ MidiChannel *allocateChannel() { return 0; }
+ MidiChannel *getPercussionChannel() { return 0; }
+};
+
+} // End of namespace Simon
+
+#endif