diff options
Diffstat (limited to 'engines/sci/sound/drivers/fmtowns.cpp')
-rw-r--r-- | engines/sci/sound/drivers/fmtowns.cpp | 20 |
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; } |