From 2e6013947df83d3364073d971cdce7325297c889 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 18 Dec 2009 18:32:09 +0000 Subject: Moved the interface class for the the custom SCI MIDI drivers together with the actual driver implementation code svn-id: r46414 --- engines/sci/sfx/core.cpp | 2 +- engines/sci/sfx/iterator.h | 2 +- engines/sci/sfx/iterator_internal.h | 2 +- engines/sci/sfx/sci_midi.h | 106 --------------------------------- engines/sci/sfx/seq/instrument-map.cpp | 2 +- engines/sci/sfx/softseq/adlib.cpp | 2 +- engines/sci/sfx/softseq/amiga.cpp | 2 +- engines/sci/sfx/softseq/mididriver.h | 106 +++++++++++++++++++++++++++++++++ engines/sci/sfx/softseq/pcjr.cpp | 2 +- engines/sci/sfx/softseq/pcjr.h | 2 +- 10 files changed, 114 insertions(+), 114 deletions(-) delete mode 100644 engines/sci/sfx/sci_midi.h create mode 100644 engines/sci/sfx/softseq/mididriver.h (limited to 'engines/sci/sfx') diff --git a/engines/sci/sfx/core.cpp b/engines/sci/sfx/core.cpp index b3bd7bac2a..8da2c7cda5 100644 --- a/engines/sci/sfx/core.cpp +++ b/engines/sci/sfx/core.cpp @@ -28,7 +28,7 @@ #include "sci/sci.h" #include "sci/sfx/core.h" #include "sci/sfx/iterator.h" -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" #include "sci/sfx/softseq/pcjr.h" diff --git a/engines/sci/sfx/iterator.h b/engines/sci/sfx/iterator.h index 74a6b5ab84..f4e87d5b7f 100644 --- a/engines/sci/sfx/iterator.h +++ b/engines/sci/sfx/iterator.h @@ -28,7 +28,7 @@ #ifndef SCI_SFX_SFX_ITERATOR_H #define SCI_SFX_SFX_ITERATOR_H -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" namespace Audio { class AudioStream; diff --git a/engines/sci/sfx/iterator_internal.h b/engines/sci/sfx/iterator_internal.h index 7c9c1c71a4..1b5d856d33 100644 --- a/engines/sci/sfx/iterator_internal.h +++ b/engines/sci/sfx/iterator_internal.h @@ -27,7 +27,7 @@ #define SCI_SFX_SFX_ITERATOR_INTERNAL #include "sci/sfx/iterator.h" -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" #include "common/array.h" #include "common/list.h" diff --git a/engines/sci/sfx/sci_midi.h b/engines/sci/sfx/sci_midi.h deleted file mode 100644 index b2a48b5437..0000000000 --- a/engines/sci/sfx/sci_midi.h +++ /dev/null @@ -1,106 +0,0 @@ -/* 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. - * - * $URL$ - * $Id$ - * - */ - -#ifndef SCI_SFX_MIDI_H -#define SCI_SFX_MIDI_H - -#include "sound/mididrv.h" -#include "sound/softsynth/emumidi.h" -#include "common/error.h" - -namespace Sci { - -class ResourceManager; - -enum { - MIDI_CHANNELS = 16, - MIDI_PROP_MASTER_VOLUME = 0 -}; - - -#define MIDI_RHYTHM_CHANNEL 9 - -/* Special SCI sound stuff */ - -#define SCI_MIDI_TIME_EXPANSION_PREFIX 0xF8 -#define SCI_MIDI_TIME_EXPANSION_LENGTH 240 - -#define SCI_MIDI_EOT 0xFC -#define SCI_MIDI_SET_SIGNAL 0xCF -#define SCI_MIDI_SET_POLYPHONY 0x4B -#define SCI_MIDI_RESET_ON_SUSPEND 0x4C -#define SCI_MIDI_CHANNEL_MUTE 0x4E -#define SCI_MIDI_SET_REVERB 0x50 -#define SCI_MIDI_HOLD 0x52 -#define SCI_MIDI_CUMULATIVE_CUE 0x60 -#define SCI_MIDI_CHANNEL_SOUND_OFF 0x78 /* all-sound-off for Bn */ -#define SCI_MIDI_CHANNEL_NOTES_OFF 0x7B /* all-notes-off for Bn */ - -#define SCI_MIDI_SET_SIGNAL_LOOP 0x7F -/* If this is the parameter of 0xCF, the loop point is set here */ - -#define SCI_MIDI_CONTROLLER(status) ((status & 0xF0) == 0xB0) - -class MidiPlayer : public MidiDriver { -protected: - MidiDriver *_driver; -public: - int open() { return open(NULL); } - virtual int open(ResourceManager *resMan) { return _driver->open(); } - virtual void close() { _driver->close(); } - virtual void send(uint32 b) { _driver->send(b); } - uint32 getBaseTempo() { return _driver->getBaseTempo(); } - virtual bool hasRhythmChannel() const = 0; - MidiChannel *allocateChannel() { return _driver->allocateChannel(); } - MidiChannel *getPercussionChannel() { return _driver->getPercussionChannel(); } - void setTimerCallback(void *timer_param, Common::TimerManager::TimerProc timer_proc) { _driver->setTimerCallback(timer_param, timer_proc); } - - virtual int getPlayMask() const = 0; - virtual int getPolyphony() const = 0; - - virtual void setVolume(byte volume) { - if(_driver) - _driver->property(MIDI_PROP_MASTER_VOLUME, volume); - } - - virtual int getVolume() { - return _driver ? _driver->property(MIDI_PROP_MASTER_VOLUME, 0xffff) : 0; - } - - virtual void playSwitch(bool play) { - if (!play) { - // Send "All Sound Off" on all channels - for (int i = 0; i < MIDI_CHANNELS; ++i) - _driver->send(0xb0 + i, SCI_MIDI_CHANNEL_NOTES_OFF, 0); - } - } -}; - -extern MidiPlayer *MidiPlayer_Adlib_create(); -extern MidiPlayer *MidiPlayer_Amiga_create(); - -} // End of namespace Sci - -#endif // SCI_SFX_MIDI_H diff --git a/engines/sci/sfx/seq/instrument-map.cpp b/engines/sci/sfx/seq/instrument-map.cpp index 2246d517db..3c16780c9a 100644 --- a/engines/sci/sfx/seq/instrument-map.cpp +++ b/engines/sci/sfx/seq/instrument-map.cpp @@ -24,7 +24,7 @@ */ #include "common/scummsys.h" -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" #include "sci/sfx/seq/instrument-map.h" #include "sci/sfx/core.h" diff --git a/engines/sci/sfx/softseq/adlib.cpp b/engines/sci/sfx/softseq/adlib.cpp index a361d33104..efc5c4b823 100644 --- a/engines/sci/sfx/softseq/adlib.cpp +++ b/engines/sci/sfx/softseq/adlib.cpp @@ -30,7 +30,7 @@ #include "sound/softsynth/emumidi.h" #include "sci/resource.h" -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" namespace Sci { diff --git a/engines/sci/sfx/softseq/amiga.cpp b/engines/sci/sfx/softseq/amiga.cpp index 5a960ad1e0..b1cdedaa7a 100644 --- a/engines/sci/sfx/softseq/amiga.cpp +++ b/engines/sci/sfx/softseq/amiga.cpp @@ -24,7 +24,7 @@ */ #include "sound/softsynth/emumidi.h" -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" #include "common/file.h" #include "common/frac.h" diff --git a/engines/sci/sfx/softseq/mididriver.h b/engines/sci/sfx/softseq/mididriver.h new file mode 100644 index 0000000000..01ed3f6573 --- /dev/null +++ b/engines/sci/sfx/softseq/mididriver.h @@ -0,0 +1,106 @@ +/* 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. + * + * $URL$ + * $Id$ + * + */ + +#ifndef SCI_SFX_SOFTSEQ_MIDIDRIVER_H +#define SCI_SFX_SOFTSEQ_MIDIDRIVER_H + +#include "sound/mididrv.h" +#include "sound/softsynth/emumidi.h" +#include "common/error.h" + +namespace Sci { + +class ResourceManager; + +enum { + MIDI_CHANNELS = 16, + MIDI_PROP_MASTER_VOLUME = 0 +}; + + +#define MIDI_RHYTHM_CHANNEL 9 + +/* Special SCI sound stuff */ + +#define SCI_MIDI_TIME_EXPANSION_PREFIX 0xF8 +#define SCI_MIDI_TIME_EXPANSION_LENGTH 240 + +#define SCI_MIDI_EOT 0xFC +#define SCI_MIDI_SET_SIGNAL 0xCF +#define SCI_MIDI_SET_POLYPHONY 0x4B +#define SCI_MIDI_RESET_ON_SUSPEND 0x4C +#define SCI_MIDI_CHANNEL_MUTE 0x4E +#define SCI_MIDI_SET_REVERB 0x50 +#define SCI_MIDI_HOLD 0x52 +#define SCI_MIDI_CUMULATIVE_CUE 0x60 +#define SCI_MIDI_CHANNEL_SOUND_OFF 0x78 /* all-sound-off for Bn */ +#define SCI_MIDI_CHANNEL_NOTES_OFF 0x7B /* all-notes-off for Bn */ + +#define SCI_MIDI_SET_SIGNAL_LOOP 0x7F +/* If this is the parameter of 0xCF, the loop point is set here */ + +#define SCI_MIDI_CONTROLLER(status) ((status & 0xF0) == 0xB0) + +class MidiPlayer : public MidiDriver { +protected: + MidiDriver *_driver; +public: + int open() { return open(NULL); } + virtual int open(ResourceManager *resMan) { return _driver->open(); } + virtual void close() { _driver->close(); } + virtual void send(uint32 b) { _driver->send(b); } + uint32 getBaseTempo() { return _driver->getBaseTempo(); } + virtual bool hasRhythmChannel() const = 0; + MidiChannel *allocateChannel() { return _driver->allocateChannel(); } + MidiChannel *getPercussionChannel() { return _driver->getPercussionChannel(); } + void setTimerCallback(void *timer_param, Common::TimerManager::TimerProc timer_proc) { _driver->setTimerCallback(timer_param, timer_proc); } + + virtual int getPlayMask() const = 0; + virtual int getPolyphony() const = 0; + + virtual void setVolume(byte volume) { + if(_driver) + _driver->property(MIDI_PROP_MASTER_VOLUME, volume); + } + + virtual int getVolume() { + return _driver ? _driver->property(MIDI_PROP_MASTER_VOLUME, 0xffff) : 0; + } + + virtual void playSwitch(bool play) { + if (!play) { + // Send "All Sound Off" on all channels + for (int i = 0; i < MIDI_CHANNELS; ++i) + _driver->send(0xb0 + i, SCI_MIDI_CHANNEL_NOTES_OFF, 0); + } + } +}; + +extern MidiPlayer *MidiPlayer_Adlib_create(); +extern MidiPlayer *MidiPlayer_Amiga_create(); + +} // End of namespace Sci + +#endif // SCI_SFX_SOFTSEQ_MIDIDRIVER_H diff --git a/engines/sci/sfx/softseq/pcjr.cpp b/engines/sci/sfx/softseq/pcjr.cpp index acfb3c7c45..1d007874fb 100644 --- a/engines/sci/sfx/softseq/pcjr.cpp +++ b/engines/sci/sfx/softseq/pcjr.cpp @@ -23,7 +23,7 @@ * */ -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" #include "sci/sfx/softseq/pcjr.h" namespace Sci { diff --git a/engines/sci/sfx/softseq/pcjr.h b/engines/sci/sfx/softseq/pcjr.h index d7d3469db9..e95c690cc5 100644 --- a/engines/sci/sfx/softseq/pcjr.h +++ b/engines/sci/sfx/softseq/pcjr.h @@ -23,7 +23,7 @@ * */ -#include "sci/sfx/sci_midi.h" +#include "sci/sfx/softseq/mididriver.h" namespace Sci { -- cgit v1.2.3