MACOSX: Fix compilation with the 10.2.8 SDK

This is a pretty bad hack of not using the kMusicDeviceProperty_SoundBankFSRef symbol and using its value instead. It felt wrong breaking 10.2.8 support just because of Soundfonts.
This commit is contained in:
Matthew Hoops 2013-02-01 16:48:38 -05:00
parent 412ac740aa
commit 31252e1095

View File

@ -209,35 +209,41 @@ void MidiDriver_CORE::loadSoundFont(const char *soundfont) {
FSRef fsref;
err = FSPathMakeRef((const byte *)soundfont, &fsref, NULL);
#ifdef MAC_OS_X_VERSION_10_5
// Use kMusicDeviceProperty_SoundBankFSRef if we know it's available
// (This became available in 10.3, but the 10.2 SDK has 10.3/10.4 defines)
SInt32 version;
err = Gestalt(gestaltSystemVersion, &version);
if (err == noErr) {
err = AudioUnitSetProperty(
_synth,
kMusicDeviceProperty_SoundBankFSRef, kAudioUnitScope_Global,
0,
&fsref, sizeof(fsref)
);
if (version >= 0x1030) {
// Use kMusicDeviceProperty_SoundBankFSRef in >= 10.3
// HACK HACK HACK HACK SUPER HACK: Using the value of 1012 instead of
// kMusicDeviceProperty_SoundBankFSRef so this compiles with the 10.2
// SDK (which does not have that symbol).
if (err == noErr) {
err = AudioUnitSetProperty(
_synth,
/*kMusicDeviceProperty_SoundBankFSRef*/ 1012, kAudioUnitScope_Global,
0,
&fsref, sizeof(fsref)
);
}
} else {
// In 10.2, only kMusicDeviceProperty_SoundBankFSSpec is available
FSSpec fsSpec;
if (err == noErr)
err = FSGetCatalogInfo(&fsref, kFSCatInfoNone, NULL, NULL, &fsSpec, NULL);
if (err == noErr) {
err = AudioUnitSetProperty(
_synth,
kMusicDeviceProperty_SoundBankFSSpec, kAudioUnitScope_Global,
0,
&fsSpec, sizeof(fsSpec)
);
}
}
}
#else
// Otherwise, we know kMusicDeviceProperty_SoundBankFSSpec is available
FSSpec fsSpec;
if (err == noErr)
err = FSGetCatalogInfo(&fsref, kFSCatInfoNone, NULL, NULL, &fsSpec, NULL);
if (err == noErr) {
err = AudioUnitSetProperty(
_synth,
kMusicDeviceProperty_SoundBankFSSpec, kAudioUnitScope_Global,
0,
&fsSpec, sizeof(fsSpec)
);
}
#endif // MAC_OS_X_VERSION_10_5
#else
// kMusicDeviceProperty_SoundBankURL was added in 10.5 as a replacement
// In addition, the File Manager API became deprecated starting in 10.8