From 485b70b2b004d2683e31920b8f33053b46fb811d Mon Sep 17 00:00:00 2001 From: Nicola Mettifogo Date: Mon, 15 Oct 2007 20:20:50 +0000 Subject: * Changed IFF/8SVX audio to use signed data (int8), and modified Parallaction accordingly. * Implemented proper beep in Parallaction for Amiga. svn-id: r29226 --- engines/parallaction/sound.cpp | 23 ++++++++++++++++------- engines/parallaction/sound.h | 2 +- sound/iff.cpp | 4 ++-- sound/iff.h | 4 ++-- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/engines/parallaction/sound.cpp b/engines/parallaction/sound.cpp index 872ed29b08..c6c108c111 100644 --- a/engines/parallaction/sound.cpp +++ b/engines/parallaction/sound.cpp @@ -318,20 +318,29 @@ AmigaSoundMan::~AmigaSoundMan() { stopSfx(3); } -static byte res_amigaBeep[] = { - 0, 20, 40, 60, 80, 60, 40, 20, 0, 236, 216, 196, 176, 196, 216, 236 +#define AMIGABEEP_SIZE 16 +#define NUM_REPEATS 60 + +static int8 res_amigaBeep[AMIGABEEP_SIZE] = { + 0, 20, 40, 60, 80, 60, 40, 20, 0, -20, -40, -60, -80, -60, -40, -20 }; + void AmigaSoundMan::loadChannelData(const char *filename, Channel *ch) { if (!scumm_stricmp("beep", filename)) { ch->header.oneShotHiSamples = 0; ch->header.repeatHiSamples = 0; ch->header.samplesPerHiCycle = 0; - ch->header.samplesPerSec = 12000; - ch->header.volume = 255; - ch->data = res_amigaBeep; - ch->dataSize = 16; - ch->dispose = false; + ch->header.samplesPerSec = 11934; + ch->header.volume = 160; + ch->data = new int8[AMIGABEEP_SIZE * NUM_REPEATS]; + int8* odata = ch->data; + for (uint i = 0; i < NUM_REPEATS; i++) { + memcpy(odata, res_amigaBeep, AMIGABEEP_SIZE); + odata += AMIGABEEP_SIZE; + } + ch->dataSize = AMIGABEEP_SIZE * NUM_REPEATS; + ch->dispose = true; return; } diff --git a/engines/parallaction/sound.h b/engines/parallaction/sound.h index c07fa9affc..9d6ea01485 100644 --- a/engines/parallaction/sound.h +++ b/engines/parallaction/sound.h @@ -89,7 +89,7 @@ class AmigaSoundMan : public SoundMan { struct Channel { Audio::Voice8Header header; - byte *data; + int8 *data; uint32 dataSize; bool dispose; Audio::SoundHandle handle; diff --git a/sound/iff.cpp b/sound/iff.cpp index 7b6b38acb7..de380276bb 100644 --- a/sound/iff.cpp +++ b/sound/iff.cpp @@ -45,7 +45,7 @@ void A8SVXDecoder::readBODY(Common::IFFChunk &chunk) { switch (_header.compression) { case 0: _dataSize = chunk.size; - _data = (byte*)malloc(_dataSize); + _data = (int8*)malloc(_dataSize); chunk.read(_data, _dataSize); break; @@ -57,7 +57,7 @@ void A8SVXDecoder::readBODY(Common::IFFChunk &chunk) { } -A8SVXDecoder::A8SVXDecoder(Common::ReadStream &input, Voice8Header &header, byte *&data, uint32 &dataSize) : +A8SVXDecoder::A8SVXDecoder(Common::ReadStream &input, Voice8Header &header, int8 *&data, uint32 &dataSize) : IFFParser(input), _header(header), _data(data), _dataSize(dataSize) { if (_typeId != ID_8SVX) error("unknown audio format"); diff --git a/sound/iff.h b/sound/iff.h index 44831fe863..539064162d 100644 --- a/sound/iff.h +++ b/sound/iff.h @@ -54,7 +54,7 @@ class A8SVXDecoder : public Common::IFFParser { protected: Voice8Header &_header; - byte* &_data; + int8* &_data; uint32 &_dataSize; protected: @@ -62,7 +62,7 @@ protected: void readBODY(Common::IFFChunk &chunk); public: - A8SVXDecoder(Common::ReadStream &input, Voice8Header &header, byte *&data, uint32 &dataSize); + A8SVXDecoder(Common::ReadStream &input, Voice8Header &header, int8 *&data, uint32 &dataSize); void decode(); }; -- cgit v1.2.3