aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicola Mettifogo2007-10-15 20:20:50 +0000
committerNicola Mettifogo2007-10-15 20:20:50 +0000
commit485b70b2b004d2683e31920b8f33053b46fb811d (patch)
treeffe1833ff839d3a43dcefcec931e39ec15ec7ced
parentdb19310ad106db774f752383fea54c8c3af26ebb (diff)
downloadscummvm-rg350-485b70b2b004d2683e31920b8f33053b46fb811d.tar.gz
scummvm-rg350-485b70b2b004d2683e31920b8f33053b46fb811d.tar.bz2
scummvm-rg350-485b70b2b004d2683e31920b8f33053b46fb811d.zip
* Changed IFF/8SVX audio to use signed data (int8), and modified Parallaction accordingly.
* Implemented proper beep in Parallaction for Amiga. svn-id: r29226
-rw-r--r--engines/parallaction/sound.cpp23
-rw-r--r--engines/parallaction/sound.h2
-rw-r--r--sound/iff.cpp4
-rw-r--r--sound/iff.h4
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();
};