mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-03 09:23:37 +00:00
AUDIO: Miles Audio AdLib: timbre data via data-ptr
add ability to pass timbre data directly to the AdLib Miles Audio driver as well
This commit is contained in:
parent
b40fcb64a1
commit
3bb36663f3
@ -71,7 +71,7 @@ namespace Audio {
|
||||
// Miles Audio actually used 0x4000, because they didn't shift the 2 bytes properly
|
||||
#define MILES_PITCHBENDER_DEFAULT 0x2000
|
||||
|
||||
extern MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String instrumentDataFilename, const Common::String instrumentDataFilenameOPL3);
|
||||
extern MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String instrumentDataFilename, const Common::String instrumentDataFilenameOPL3, const byte *instrumentDataPtr = NULL, uint32 instrumentDataSize = 0);
|
||||
|
||||
extern MidiDriver *MidiDriver_Miles_MT32_create(const Common::String instrumentDataFilename);
|
||||
|
||||
|
@ -1031,11 +1031,12 @@ uint32 MidiDriver_Miles_AdLib::property(int prop, uint32 param) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String instrumentDataFilename, const Common::String instrumentDataFilenameOPL3) {
|
||||
MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String instrumentDataFilename, const Common::String instrumentDataFilenameOPL3, const byte *instrumentRawDataPtr, uint32 instrumentRawDataSize) {
|
||||
// Load adlib instrument data from file SAMPLE.AD (OPL3: SAMPLE.OPL)
|
||||
Common::File *fileStream = new Common::File();
|
||||
Common::File *fileStream = NULL;
|
||||
uint32 fileSize = 0;
|
||||
byte *fileDataPtr = NULL;
|
||||
const byte *fileDataPtr = NULL;
|
||||
bool fileDataAllocatedByUs = false;
|
||||
uint32 fileDataOffset = 0;
|
||||
uint32 fileDataLeft = 0;
|
||||
|
||||
@ -1048,17 +1049,28 @@ MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String instrumentDataFil
|
||||
uint32 instrumentOffset = 0;
|
||||
uint16 instrumentDataSize = 0;
|
||||
|
||||
if (!fileStream->open(instrumentDataFilename))
|
||||
error("MILES-ADLIB: could not open instrument file");
|
||||
if (!instrumentDataFilename.empty()) {
|
||||
// Filename was passed to us (this is the common case for most games)
|
||||
fileStream = new Common::File();
|
||||
|
||||
fileSize = fileStream->size();
|
||||
if (!fileStream->open(instrumentDataFilename))
|
||||
error("MILES-ADLIB: could not open instrument file");
|
||||
|
||||
fileDataPtr = new byte[fileSize];
|
||||
fileSize = fileStream->size();
|
||||
|
||||
if (fileStream->read(fileDataPtr, fileSize) != fileSize)
|
||||
error("MILES-ADLIB: error while reading instrument file");
|
||||
fileStream->close();
|
||||
delete fileStream;
|
||||
fileDataPtr = new byte[fileSize];
|
||||
fileDataAllocatedByUs = true;
|
||||
|
||||
if (fileStream->read((byte *)fileDataPtr, fileSize) != fileSize)
|
||||
error("MILES-ADLIB: error while reading instrument file");
|
||||
fileStream->close();
|
||||
delete fileStream;
|
||||
|
||||
} else if (instrumentRawDataPtr) {
|
||||
// instrument data was passed directly (currently used by Amazon Guardians of Eden
|
||||
fileDataPtr = instrumentRawDataPtr;
|
||||
fileSize = instrumentRawDataSize;
|
||||
}
|
||||
|
||||
// File is like this:
|
||||
// [patch:BYTE] [bank:BYTE] [patchoffset:UINT32]
|
||||
@ -1127,8 +1139,10 @@ MidiDriver *MidiDriver_Miles_AdLib_create(const Common::String instrumentDataFil
|
||||
instrumentPtr++;
|
||||
}
|
||||
|
||||
// Free instrument file data
|
||||
delete[] fileDataPtr;
|
||||
if (fileDataAllocatedByUs) {
|
||||
// Free instrument file data
|
||||
delete[] fileDataPtr;
|
||||
}
|
||||
|
||||
return new MidiDriver_Miles_AdLib(g_system->getMixer(), instrumentTablePtr, instrumentTableCount);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user