[Scummvm-git-logs] scummvm master -> 5e855ea2c26e0aaec248d6885f641a94417a13e6
neuromancer
noreply at scummvm.org
Tue Feb 6 07:14:00 UTC 2024
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
c58629e17d FREESCAPE: implement PWM sounds from dos release of eclipse
5e855ea2c2 FREESCAPE: make sure _soundFx pointer array is properly deallocated
Commit: c58629e17d1559a92af6035a760d8ef644b48202
https://github.com/scummvm/scummvm/commit/c58629e17d1559a92af6035a760d8ef644b48202
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-02-06T08:14:13+01:00
Commit Message:
FREESCAPE: implement PWM sounds from dos release of eclipse
Changed paths:
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/eclipse/dos.cpp
engines/freescape/games/eclipse/eclipse.cpp
engines/freescape/games/eclipse/eclipse.h
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index d366d63bc84..b5ea436f693 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -209,6 +209,11 @@ FreescapeEngine::~FreescapeEngine() {
it->free();
delete it;
}
+
+ for (auto &it : _soundsFx) {
+ free(it._value->data);
+ free(it._value);
+ }
}
void FreescapeEngine::drawBorder() {
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index b45c6757323..2753e6caeb4 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -367,8 +367,8 @@ public:
uint16 playSoundDOSSpeaker(uint16 startFrequency, soundSpeakerFx *speakerFxInfo);
void playSoundDOS(soundSpeakerFx *speakerFxInfo, bool sync);
- void playSoundFx(int index, bool sync);
- void loadSoundsFx(Common::SeekableReadStream *file, int offset, int number);
+ virtual void playSoundFx(int index, bool sync);
+ virtual void loadSoundsFx(Common::SeekableReadStream *file, int offset, int number);
Common::HashMap<uint16, soundFx *> _soundsFx;
void loadSpeakerFx(Common::SeekableReadStream *file, int offsetFreq, int offsetDuration);
Common::HashMap<uint16, soundSpeakerFx *> _soundsSpeakerFx;
diff --git a/engines/freescape/games/eclipse/dos.cpp b/engines/freescape/games/eclipse/dos.cpp
index 6704e810f6d..c743cc3808c 100644
--- a/engines/freescape/games/eclipse/dos.cpp
+++ b/engines/freescape/games/eclipse/dos.cpp
@@ -19,6 +19,9 @@
*
*/
+#include "audio/audiostream.h"
+#include "audio/decoders/raw.h"
+
#include "freescape/freescape.h"
#include "freescape/games/eclipse/eclipse.h"
#include "freescape/language/8bitDetokeniser.h"
@@ -51,6 +54,7 @@ void EclipseEngine::loadAssetsDOSFullGame() {
if (!file.isOpen())
error("Failed to open TOTEE.EXE");
+ loadSoundsFx(&file, 0xecb4, 1);
loadSpeakerFx(&file, 0x7396 + 0x200, 0x72a1 + 0x200);
loadFonts(&file, 0xd403);
load8bitBinary(&file, 0x3ce0, 16);
@@ -132,24 +136,47 @@ void EclipseEngine::drawDOSUI(Graphics::Surface *surface) {
}
-Common::MemoryReadStream *EclipseEngine::load1bPCM(Common::File *file, int offset) {
+soundFx *EclipseEngine::load1bPCM(Common::SeekableReadStream *file, int offset) {
+ soundFx *sound = (soundFx *)malloc(sizeof(soundFx));
file->seek(offset);
- int size = file->readUint16LE();
- debug("size: %d", size);
- int freq = file->readUint16LE();
- debug("freq: %x", freq);
+ sound->size = file->readUint16LE();
+ debugC(1, kFreescapeDebugParser, "size: %d", sound->size);
+ sound->sampleRate = file->readUint16LE();
+ debugC(1, kFreescapeDebugParser, "sample rate?: %f", sound->sampleRate);
- uint8 *buf = (uint8 *)malloc(size * sizeof(uint8) * 8);
- for (int i = 0; i < size; i++) {
+ uint8 *data = (uint8 *)malloc(sound->size * sizeof(uint8) * 8);
+ for (int i = 0; i < sound->size; i++) {
uint8 byte = file->readByte();
for (int j = 0; j < 8; j++) {
- buf[8 * i + j] = byte & 1 ? 255 : 0;
+ data[8 * i + j] = byte & 1 ? 255 : 0;
byte = byte >> 1;
}
}
+ sound->size = sound->size * 8;
+ sound->data = (byte *)data;
+ return sound;
+}
+
+void EclipseEngine::loadSoundsFx(Common::SeekableReadStream *file, int offset, int number) {
+ for (int i = 0; i < 3; i++) {
+ _soundsFx[i] = load1bPCM(file, offset);
+ offset += (_soundsFx[i]->size / 8) + 4;
+ }
+}
+
+void EclipseEngine::playSoundFx(int index, bool sync) {
+ if (_soundsFx.size() == 0) {
+ debugC(1, kFreescapeDebugMedia, "WARNING: Sounds are not loaded");
+ return;
+ }
+
+ int size = _soundsFx[index]->size;
+ //int sampleRate = _soundsFx[index]->sampleRate;
+ byte *data = _soundsFx[index]->data;
- return (new Common::MemoryReadStream(buf, size * 8));
+ Audio::SeekableAudioStream *stream = Audio::makeRawStream(data, size, 11025, Audio::FLAG_UNSIGNED, DisposeAfterUse::NO);
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundFxHandle, stream);
}
-} // End of namespace Freescape
\ No newline at end of file
+} // End of namespace Freescape
diff --git a/engines/freescape/games/eclipse/eclipse.cpp b/engines/freescape/games/eclipse/eclipse.cpp
index 4a0bd3d9ca8..3ace851c627 100644
--- a/engines/freescape/games/eclipse/eclipse.cpp
+++ b/engines/freescape/games/eclipse/eclipse.cpp
@@ -197,6 +197,12 @@ void EclipseEngine::drawBackground() {
}
}
+void EclipseEngine::titleScreen() {
+ if (isDOS())
+ playSoundFx(0, true);
+ FreescapeEngine::titleScreen();
+}
+
void EclipseEngine::borderScreen() {
if (_border) {
diff --git a/engines/freescape/games/eclipse/eclipse.h b/engines/freescape/games/eclipse/eclipse.h
index 95b7134ae00..ffa9567942f 100644
--- a/engines/freescape/games/eclipse/eclipse.h
+++ b/engines/freescape/games/eclipse/eclipse.h
@@ -20,7 +20,8 @@
*/
#include "common/file.h"
-#include "common/memstream.h"
+
+#include "freescape/sound.h"
namespace Freescape {
@@ -36,6 +37,7 @@ public:
void gotoArea(uint16 areaID, int entranceID) override;
void borderScreen() override;
+ void titleScreen() override;
void loadAssetsDOSFullGame() override;
@@ -58,11 +60,14 @@ public:
void drawAnalogClock(Graphics::Surface *surface, int x, int y, uint32 colorHand1, uint32 colorHand2, uint32 colorBack);
void drawAnalogClockHand(Graphics::Surface *surface, int x, int y, double degrees, double magnitude, uint32 color);
- Common::MemoryReadStream *load1bPCM(Common::File *file, int offset);
+ soundFx *load1bPCM(Common::SeekableReadStream *file, int offset);
bool checkIfGameEnded() override;
+ void loadSoundsFx(Common::SeekableReadStream *file, int offset, int number) override;
+ void playSoundFx(int index, bool sync) override;
+
Common::Error saveGameStreamExtended(Common::WriteStream *stream, bool isAutosave = false) override;
Common::Error loadGameStreamExtended(Common::SeekableReadStream *stream) override;
};
-}
\ No newline at end of file
+}
Commit: 5e855ea2c26e0aaec248d6885f641a94417a13e6
https://github.com/scummvm/scummvm/commit/5e855ea2c26e0aaec248d6885f641a94417a13e6
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-02-06T08:14:13+01:00
Commit Message:
FREESCAPE: make sure _soundFx pointer array is properly deallocated
Changed paths:
engines/freescape/freescape.cpp
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index b5ea436f693..1f977efc7f5 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -211,8 +211,10 @@ FreescapeEngine::~FreescapeEngine() {
}
for (auto &it : _soundsFx) {
- free(it._value->data);
- free(it._value);
+ if (it._value) {
+ free(it._value->data);
+ free(it._value);
+ }
}
}
More information about the Scummvm-git-logs
mailing list