[Scummvm-cvs-logs] scummvm master -> 3bb36663f3d8c8a5220afc5afe7d64005cc01794

m-kiewitz m_kiewitz at users.sourceforge.net
Wed Jul 1 01:29:02 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
3bb36663f3 AUDIO: Miles Audio AdLib: timbre data via data-ptr


Commit: 3bb36663f3d8c8a5220afc5afe7d64005cc01794
    https://github.com/scummvm/scummvm/commit/3bb36663f3d8c8a5220afc5afe7d64005cc01794
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2015-07-01T01:28:24+02:00

Commit Message:
AUDIO: Miles Audio AdLib: timbre data via data-ptr

add ability to pass timbre data directly to the AdLib Miles
Audio driver as well

Changed paths:
    audio/miles.h
    audio/miles_adlib.cpp



diff --git a/audio/miles.h b/audio/miles.h
index 0858623..16ef885 100644
--- a/audio/miles.h
+++ b/audio/miles.h
@@ -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);
 
diff --git a/audio/miles_adlib.cpp b/audio/miles_adlib.cpp
index e59da10..8d6b1d6 100644
--- a/audio/miles_adlib.cpp
+++ b/audio/miles_adlib.cpp
@@ -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);
 }






More information about the Scummvm-git-logs mailing list