aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorThierry Crozat2017-09-05 21:17:00 +0100
committerThierry Crozat2018-01-23 02:15:32 +0000
commit86795f0fa2c60d322bececf133762b85ef44a23e (patch)
tree795659ccb8764a2f6bb989477dc2739a1188f618 /engines
parent696fcb6bb98a2e527ebba8c70548930fe3a6cb31 (diff)
downloadscummvm-rg350-86795f0fa2c60d322bececf133762b85ef44a23e.tar.gz
scummvm-rg350-86795f0fa2c60d322bececf133762b85ef44a23e.tar.bz2
scummvm-rg350-86795f0fa2c60d322bececf133762b85ef44a23e.zip
SUPERNOVA: Fix clicks at start and end of audio samples
The sound samples start with a 6 bytes header (including the size of the sample coded on a little endian 16 bits uint on bytes 2 and 3) and end with 4 bytes set to null. Those were passed to the raw stream, which resulted in the audible clicks. Note that we could use the information from the header to load the sound samples instead of keeping around an array of offset and size.
Diffstat (limited to 'engines')
-rw-r--r--engines/supernova/supernova.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index 9526481fdf..e421d6f1b4 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -249,6 +249,11 @@ void SupernovaEngine::initData() {
_images[i].init(i);
// Sound
+ // Note:
+ // - samples start with a header of 6 bytes: 01 SS SS 00 AD 00
+ // where SS SS (LE uint16) is the size of the sound sample + 2
+ // - samples end with a footer of 4 bytes: 00 00
+ // Skip those in the buffer
Common::File file;
for (int i = 0; i < kAudioNumSamples; ++i) {
@@ -258,12 +263,12 @@ void SupernovaEngine::initData() {
if (audioInfo[i]._offsetEnd == -1) {
file.seek(0, SEEK_END);
- _soundSamples[i]._length = file.pos() - audioInfo[i]._offsetStart;
+ _soundSamples[i]._length = file.pos() - audioInfo[i]._offsetStart - 10;
} else {
- _soundSamples[i]._length = audioInfo[i]._offsetEnd - audioInfo[i]._offsetStart;
+ _soundSamples[i]._length = audioInfo[i]._offsetEnd - audioInfo[i]._offsetStart - 10;
}
_soundSamples[i]._buffer = new byte[_soundSamples[i]._length];
- file.seek(audioInfo[i]._offsetStart);
+ file.seek(audioInfo[i]._offsetStart + 6);
file.read(_soundSamples[i]._buffer, _soundSamples[i]._length);
file.close();
}