[Scummvm-git-logs] scummvm master -> 0354a6981f83e917f50bb3474617f64c6db4cbb2
yuv422
yuv422 at users.noreply.github.com
Fri Aug 7 13:33:02 UTC 2020
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:
c2831cccf8 DRAGONS: Wire up soundfont code to dragons engine
0354a6981f DRAGONS: Only load SF2 if using fluidsynth driver.
Commit: c2831cccf82d5bcf49c0146fa056a930ec5cf799
https://github.com/scummvm/scummvm/commit/c2831cccf82d5bcf49c0146fa056a930ec5cf799
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-07T22:34:10+10:00
Commit Message:
DRAGONS: Wire up soundfont code to dragons engine
Changed paths:
engines/dragons/midimusicplayer.cpp
engines/dragons/midimusicplayer.h
engines/dragons/sound.cpp
engines/dragons/sound.h
diff --git a/engines/dragons/midimusicplayer.cpp b/engines/dragons/midimusicplayer.cpp
index e4342de516..ba5d113017 100644
--- a/engines/dragons/midimusicplayer.cpp
+++ b/engines/dragons/midimusicplayer.cpp
@@ -26,9 +26,13 @@
namespace Dragons {
-MidiMusicPlayer::MidiMusicPlayer(VabSound *musicVab): _musicVab(musicVab), _midiDataSize(0) {
+MidiMusicPlayer::MidiMusicPlayer(VabSound *musicVab, Common::SeekableReadStream *soundFont): _musicVab(musicVab), _midiDataSize(0) {
_midiData = nullptr;
- MidiPlayer::createDriver();
+ MidiPlayer::createDriver(MDT_PREFER_FLUID | MDT_MIDI);
+
+ if (_driver->acceptsSoundFontData()) {
+ _driver->setEngineSoundFont(soundFont);
+ }
int ret = _driver->open();
if (ret == 0) {
diff --git a/engines/dragons/midimusicplayer.h b/engines/dragons/midimusicplayer.h
index 4a57b10bae..8ce89539ca 100644
--- a/engines/dragons/midimusicplayer.h
+++ b/engines/dragons/midimusicplayer.h
@@ -32,7 +32,7 @@ private:
VabSound *_musicVab;
uint32 _midiDataSize;
public:
- MidiMusicPlayer(VabSound *musicVab);
+ MidiMusicPlayer(VabSound *musicVab, Common::SeekableReadStream *soundFont);
~MidiMusicPlayer();
void setVolume(int volume) override;
diff --git a/engines/dragons/sound.cpp b/engines/dragons/sound.cpp
index f2ab4d7782..e375b424f8 100644
--- a/engines/dragons/sound.cpp
+++ b/engines/dragons/sound.cpp
@@ -19,6 +19,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
+#include <audio/soundfont/rawfile.h>
+#include <audio/soundfont/vab/vab.h>
+#include <audio/soundfont/vgmcoll.h>
#include "audio/mixer.h"
#include "audio/audiostream.h"
#include "audio/decoders/raw.h"
@@ -291,7 +294,7 @@ SoundManager::SoundManager(DragonsEngine *vm, BigfileArchive *bigFileArchive, Dr
SomeInitSound_FUN_8003f64c();
initVabData();
- _midiPlayer = new MidiMusicPlayer(_vabMusx);
+ _midiPlayer = new MidiMusicPlayer(_vabMusx, loadSoundFont());
_midiPlayer->setVolume(_musicVolume);
}
@@ -525,4 +528,38 @@ void SoundManager::playMusic(int16 song) {
delete seq;
}
+Common::SeekableReadStream *SoundManager::loadSoundFont() {
+ uint32 headSize, bodySize;
+ byte *headData = _bigFileArchive->load("musx.vh", headSize);
+ byte *bodyData = _bigFileArchive->load("musx.vb", bodySize);
+
+ byte *vabData = (byte *)malloc(headSize + bodySize);
+
+ memcpy(vabData, headData, headSize);
+ memcpy(vabData + headSize, bodyData, bodySize);
+
+ free(headData);
+ free(bodyData);
+
+ MemFile *memFile = new MemFile(vabData, headSize + bodySize);
+ debug("Loaded vab file size: %lu", memFile->size());
+ Vab *vab = new Vab(memFile, 0);
+ vab->LoadVGMFile();
+ VGMColl vabCollection;
+ SF2File *file = vabCollection.CreateSF2File(vab);
+ const byte *bytes = (const byte *)file->SaveToMem();
+ uint32 size = file->GetSize();
+
+ delete file;
+ delete vab;
+ delete memFile;
+ Common::DumpFile *dumpFile = new Common::DumpFile();
+ dumpFile->open("testing.sf2");
+ dumpFile->write(bytes, size);
+ dumpFile->close();
+ delete dumpFile;
+
+ return new Common::MemoryReadStream(bytes, size, DisposeAfterUse::YES);
+}
+
} // End of namespace Dragons
diff --git a/engines/dragons/sound.h b/engines/dragons/sound.h
index b01ad87387..a7b371e5fc 100644
--- a/engines/dragons/sound.h
+++ b/engines/dragons/sound.h
@@ -90,6 +90,8 @@ private:
void initVabData();
+ Common::SeekableReadStream *loadSoundFont();
+
void playSound(uint16 soundId, uint16 i);
void stopSound(uint16 id, uint16 i);
Commit: 0354a6981f83e917f50bb3474617f64c6db4cbb2
https://github.com/scummvm/scummvm/commit/0354a6981f83e917f50bb3474617f64c6db4cbb2
Author: Eric Fry (yuv422 at users.noreply.github.com)
Date: 2020-08-07T23:31:15+10:00
Commit Message:
DRAGONS: Only load SF2 if using fluidsynth driver.
Changed paths:
engines/dragons/midimusicplayer.cpp
engines/dragons/midimusicplayer.h
engines/dragons/sound.cpp
engines/dragons/sound.h
diff --git a/engines/dragons/midimusicplayer.cpp b/engines/dragons/midimusicplayer.cpp
index ba5d113017..1ca0a33471 100644
--- a/engines/dragons/midimusicplayer.cpp
+++ b/engines/dragons/midimusicplayer.cpp
@@ -19,19 +19,24 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
+#include "common/debug.h"
+#include "common/memstream.h"
#include "common/stream.h"
#include "audio/midiparser.h"
+#include "audio/soundfont/rawfile.h"
+#include "audio/soundfont/vab/vab.h"
+#include "audio/soundfont/vgmcoll.h"
#include "midimusicplayer.h"
namespace Dragons {
-MidiMusicPlayer::MidiMusicPlayer(VabSound *musicVab, Common::SeekableReadStream *soundFont): _musicVab(musicVab), _midiDataSize(0) {
+MidiMusicPlayer::MidiMusicPlayer(BigfileArchive *bigFileArchive, VabSound *musicVab): _musicVab(musicVab), _midiDataSize(0) {
_midiData = nullptr;
MidiPlayer::createDriver(MDT_PREFER_FLUID | MDT_MIDI);
if (_driver->acceptsSoundFontData()) {
- _driver->setEngineSoundFont(soundFont);
+ _driver->setEngineSoundFont(loadSoundFont(bigFileArchive));
}
int ret = _driver->open();
@@ -132,4 +137,33 @@ void MidiMusicPlayer::setVolume(int volume) {
MidiPlayer::setVolume(volume);
}
+Common::SeekableReadStream *MidiMusicPlayer::loadSoundFont(BigfileArchive *bigFileArchive) {
+ uint32 headSize, bodySize;
+ byte *headData = bigFileArchive->load("musx.vh", headSize);
+ byte *bodyData = bigFileArchive->load("musx.vb", bodySize);
+
+ byte *vabData = (byte *)malloc(headSize + bodySize);
+
+ memcpy(vabData, headData, headSize);
+ memcpy(vabData + headSize, bodyData, bodySize);
+
+ free(headData);
+ free(bodyData);
+
+ MemFile *memFile = new MemFile(vabData, headSize + bodySize);
+ debug("Loading soundfont2 from musx vab file.");
+ Vab *vab = new Vab(memFile, 0);
+ vab->LoadVGMFile();
+ VGMColl vabCollection;
+ SF2File *file = vabCollection.CreateSF2File(vab);
+ const byte *bytes = (const byte *)file->SaveToMem();
+ uint32 size = file->GetSize();
+
+ delete file;
+ delete vab;
+ delete memFile;
+
+ return new Common::MemoryReadStream(bytes, size, DisposeAfterUse::YES);
+}
+
} // End of namespace Dragons
diff --git a/engines/dragons/midimusicplayer.h b/engines/dragons/midimusicplayer.h
index 8ce89539ca..155aa64818 100644
--- a/engines/dragons/midimusicplayer.h
+++ b/engines/dragons/midimusicplayer.h
@@ -24,6 +24,7 @@
#include "audio/midiplayer.h"
#include "vabsound.h"
+#include "bigfile.h"
namespace Dragons {
@@ -32,7 +33,7 @@ private:
VabSound *_musicVab;
uint32 _midiDataSize;
public:
- MidiMusicPlayer(VabSound *musicVab, Common::SeekableReadStream *soundFont);
+ MidiMusicPlayer(BigfileArchive *bigFileArchive, VabSound *musicVab);
~MidiMusicPlayer();
void setVolume(int volume) override;
@@ -44,6 +45,7 @@ public:
uint32 getBaseTempo() { return _driver ? (109 * _driver->getBaseTempo()) / 120 : 0; }
private:
byte *resizeMidiBuffer(uint32 desiredSize);
+ Common::SeekableReadStream *loadSoundFont(BigfileArchive *bigFileArchive);
};
} // End of namespace Dragons
diff --git a/engines/dragons/sound.cpp b/engines/dragons/sound.cpp
index e375b424f8..d9c44cc28d 100644
--- a/engines/dragons/sound.cpp
+++ b/engines/dragons/sound.cpp
@@ -294,7 +294,7 @@ SoundManager::SoundManager(DragonsEngine *vm, BigfileArchive *bigFileArchive, Dr
SomeInitSound_FUN_8003f64c();
initVabData();
- _midiPlayer = new MidiMusicPlayer(_vabMusx, loadSoundFont());
+ _midiPlayer = new MidiMusicPlayer(_bigFileArchive, _vabMusx);
_midiPlayer->setVolume(_musicVolume);
}
@@ -528,38 +528,4 @@ void SoundManager::playMusic(int16 song) {
delete seq;
}
-Common::SeekableReadStream *SoundManager::loadSoundFont() {
- uint32 headSize, bodySize;
- byte *headData = _bigFileArchive->load("musx.vh", headSize);
- byte *bodyData = _bigFileArchive->load("musx.vb", bodySize);
-
- byte *vabData = (byte *)malloc(headSize + bodySize);
-
- memcpy(vabData, headData, headSize);
- memcpy(vabData + headSize, bodyData, bodySize);
-
- free(headData);
- free(bodyData);
-
- MemFile *memFile = new MemFile(vabData, headSize + bodySize);
- debug("Loaded vab file size: %lu", memFile->size());
- Vab *vab = new Vab(memFile, 0);
- vab->LoadVGMFile();
- VGMColl vabCollection;
- SF2File *file = vabCollection.CreateSF2File(vab);
- const byte *bytes = (const byte *)file->SaveToMem();
- uint32 size = file->GetSize();
-
- delete file;
- delete vab;
- delete memFile;
- Common::DumpFile *dumpFile = new Common::DumpFile();
- dumpFile->open("testing.sf2");
- dumpFile->write(bytes, size);
- dumpFile->close();
- delete dumpFile;
-
- return new Common::MemoryReadStream(bytes, size, DisposeAfterUse::YES);
-}
-
} // End of namespace Dragons
diff --git a/engines/dragons/sound.h b/engines/dragons/sound.h
index a7b371e5fc..b01ad87387 100644
--- a/engines/dragons/sound.h
+++ b/engines/dragons/sound.h
@@ -90,8 +90,6 @@ private:
void initVabData();
- Common::SeekableReadStream *loadSoundFont();
-
void playSound(uint16 soundId, uint16 i);
void stopSound(uint16 id, uint16 i);
More information about the Scummvm-git-logs
mailing list