aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/sound.h
diff options
context:
space:
mode:
authorEugene Sandulenko2009-12-29 23:18:24 +0000
committerEugene Sandulenko2009-12-29 23:18:24 +0000
commit0ea022d076c491d802431ee90b658d5e8c06d0e0 (patch)
tree23953ed8dbd2c1cc798b6aa9aa51df93c7041c7d /engines/mohawk/sound.h
parent5f1d2a88b51af43d8903866b46a424fe556abb3c (diff)
downloadscummvm-rg350-0ea022d076c491d802431ee90b658d5e8c06d0e0.tar.gz
scummvm-rg350-0ea022d076c491d802431ee90b658d5e8c06d0e0.tar.bz2
scummvm-rg350-0ea022d076c491d802431ee90b658d5e8c06d0e0.zip
Add Mohawk engine code. Part 1/3: main code.
svn-id: r46727
Diffstat (limited to 'engines/mohawk/sound.h')
-rw-r--r--engines/mohawk/sound.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/engines/mohawk/sound.h b/engines/mohawk/sound.h
new file mode 100644
index 0000000000..44c4409b0c
--- /dev/null
+++ b/engines/mohawk/sound.h
@@ -0,0 +1,157 @@
+/* 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 MOHAWK_SOUND_H
+#define MOHAWK_SOUND_H
+
+#include "common/scummsys.h"
+#include "common/str.h"
+
+#include "sound/audiostream.h"
+#include "sound/adpcm.h"
+#include "sound/mididrv.h"
+#include "sound/midiparser.h"
+#include "sound/mixer.h"
+
+#include "mohawk/mohawk.h"
+#include "mohawk/file.h"
+
+namespace Mohawk {
+
+#define MAX_CHANNELS 2 // Can there be more than 2?
+#define CUE_MAX 256
+
+struct SLSTRecord {
+ uint16 index;
+ uint16 sound_count;
+ uint16* sound_ids;
+ uint16 fade_flags;
+ uint16 loop;
+ uint16 global_volume;
+ uint16 u0;
+ uint16 u1;
+ uint16* volumes;
+ int16* balances;
+ uint16* u2;
+};
+
+enum SndHandleType {
+ kFreeHandle,
+ kUsedHandle
+};
+
+struct SndHandle {
+ Audio::SoundHandle handle;
+ SndHandleType type;
+};
+
+struct SLSTSndHandle {
+ Audio::SoundHandle *handle;
+ uint16 id;
+};
+
+struct ADPC_Chunk { // Appears to only exist if there isn't MPEG-2 Audio
+ uint32 size;
+ uint16 u0; // Unknown (2 when there's a Cue# Chunk, 1 when there's not)
+ uint16 channels;
+ uint32 u1; // Unknown (always 0)
+ uint32 u2[MAX_CHANNELS]; // Unknown (0x00400000 for both channels)
+
+ // If there is a Cue# chunk, there can be two more variables:
+ uint32 u3;
+ uint32 u4[MAX_CHANNELS];
+};
+
+struct Cue_Chunk {
+ uint32 size;
+ uint16 point_count;
+ struct {
+ uint32 position;
+ byte length;
+ Common::String name;
+ } cueList[CUE_MAX];
+};
+
+enum {
+ kCodecRaw = 0,
+ kCodecADPCM = 1,
+ kCodecMPEG2 = 2
+};
+
+struct Data_Chunk {
+ uint32 size;
+ uint16 sample_rate;
+ uint32 sample_count;
+ byte bitsPerSample;
+ byte channels;
+ uint16 encoding;
+ uint16 loop;
+ uint32 loopStart;
+ uint32 loopEnd;
+ byte* audio_data;
+};
+
+class MohawkEngine;
+
+class Sound {
+public:
+ Sound(MohawkEngine*);
+ ~Sound();
+
+ void loadRivenSounds(uint16 stack);
+ Audio::SoundHandle *playSound(uint16 id, bool mainSoundFile = true, byte volume = Audio::Mixer::kMaxChannelVolume);
+ void playMidi(uint16 id);
+ void stopSound();
+ void pauseSound();
+ void resumeSound();
+ void playSLST(uint16 index, uint16 card);
+ void playSLST(SLSTRecord slstRecord);
+ void pauseSLST();
+ void resumeSLST();
+ void stopAllSLST();
+
+private:
+ MohawkEngine *_vm;
+ MohawkFile *_rivenSoundFile;
+ MidiDriver *_midiDriver;
+ MidiParser *_midiParser;
+
+ static Audio::AudioStream *getCSAmtrakMusic(uint16 id);
+ static Audio::AudioStream *makeMohawkWaveStream(Common::SeekableReadStream *stream, bool loop = false);
+ static Audio::AudioStream *makeOldMohawkWaveStream(Common::SeekableReadStream *stream, bool loop = false);
+ void initMidi();
+
+ Common::Array<SndHandle> _handles;
+ SndHandle *getHandle();
+
+ // Riven specific
+ void playSLSTSound(uint16 index, bool fade, bool loop, uint16 volume, int16 balance);
+ void stopSLSTSound(uint16 id, bool fade);
+ Common::Array<SLSTSndHandle> _currentSLSTSounds;
+};
+
+} // End of namespace Mohawk
+
+#endif