aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound/drivers/fmtowns.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/sound/drivers/fmtowns.cpp')
-rw-r--r--engines/sci/sound/drivers/fmtowns.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/engines/sci/sound/drivers/fmtowns.cpp b/engines/sci/sound/drivers/fmtowns.cpp
index f6dbac2a67..270843c396 100644
--- a/engines/sci/sound/drivers/fmtowns.cpp
+++ b/engines/sci/sound/drivers/fmtowns.cpp
@@ -101,7 +101,7 @@ public:
~MidiDriver_FMTowns();
int open();
- void loadInstruments(const uint8 *data);
+ void loadInstruments(const SciSpan<const uint8> &data);
bool isOpen() const { return _isOpen; }
void close();
@@ -461,14 +461,18 @@ int MidiDriver_FMTowns::open() {
return 0;
}
-void MidiDriver_FMTowns::loadInstruments(const uint8 *data) {
- if (data) {
- data += 6;
- for (int i = 0; i < 128; i++) {
- _intf->callback(5, 0, i, data);
- data += 48;
+void MidiDriver_FMTowns::loadInstruments(const SciSpan<const uint8> &data) {
+ enum {
+ fmDataSize = 48
+ };
+
+ if (data.size()) {
+ SciSpan<const uint8> instrumentData = data.subspan(6);
+ for (int i = 0; i < 128; i++, instrumentData += fmDataSize) {
+ _intf->callback(5, 0, i, instrumentData.getUnsafeDataAt(0, fmDataSize));
}
}
+
_intf->callback(70, 3);
property(MIDI_PROP_MASTER_VOLUME, _masterVolume);
}
@@ -622,7 +626,7 @@ int MidiPlayer_FMTowns::open(ResourceManager *resMan) {
if (_townsDriver) {
result = _townsDriver->open();
if (!result && _version == SCI_VERSION_1_LATE)
- _townsDriver->loadInstruments((resMan->findResource(ResourceId(kResourceTypePatch, 8), true))->data);
+ _townsDriver->loadInstruments(*resMan->findResource(ResourceId(kResourceTypePatch, 8), false));
}
return result;
}