diff options
author | Matthew Hoops | 2012-09-14 09:48:04 -0400 |
---|---|---|
committer | Matthew Hoops | 2012-09-14 09:50:45 -0400 |
commit | 486f04b7614a633d39cf4633797a8baa790bb95b (patch) | |
tree | c3b0750c867d3e2d0b70cc3d2d1e9613d7fd9936 /backends/midi | |
parent | 3919c51e865b6b895447d94861def0444887daa2 (diff) | |
download | scummvm-rg350-486f04b7614a633d39cf4633797a8baa790bb95b.tar.gz scummvm-rg350-486f04b7614a633d39cf4633797a8baa790bb95b.tar.bz2 scummvm-rg350-486f04b7614a633d39cf4633797a8baa790bb95b.zip |
MACOSX: Fix soundfont loading with CoreAudio on newer versions of Mac OS X
Diffstat (limited to 'backends/midi')
-rw-r--r-- | backends/midi/coreaudio.cpp | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/backends/midi/coreaudio.cpp b/backends/midi/coreaudio.cpp index 43c801287d..ffa2580acf 100644 --- a/backends/midi/coreaudio.cpp +++ b/backends/midi/coreaudio.cpp @@ -172,10 +172,15 @@ int MidiDriver_CORE::open() { // Load custom soundfont, if specified if (ConfMan.hasKey("soundfont")) { - FSRef fsref; - FSSpec fsSpec; const char *soundfont = ConfMan.get("soundfont").c_str(); + // TODO: We should really check whether the file contains an + // actual soundfont... + +#if USE_DEPRECATED_COREAUDIO_API + // Before 10.5, we need to use kMusicDeviceProperty_SoundBankFSSpec + FSRef fsref; + FSSpec fsSpec; err = FSPathMakeRef ((const byte *)soundfont, &fsref, NULL); if (err == noErr) { @@ -183,8 +188,6 @@ int MidiDriver_CORE::open() { } if (err == noErr) { - // TODO: We should really check here whether the file contains an - // actual soundfont... err = AudioUnitSetProperty ( _synth, kMusicDeviceProperty_SoundBankFSSpec, kAudioUnitScope_Global, @@ -192,6 +195,24 @@ int MidiDriver_CORE::open() { &fsSpec, sizeof(fsSpec) ); } +#else + // kMusicDeviceProperty_SoundBankFSSpec is present on 10.6+, but broken + // kMusicDeviceProperty_SoundBankURL was added in 10.5 as a replacement + CFURLRef url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, (const UInt8 *)soundfont, strlen(soundfont), false); + + if (url) { + err = AudioUnitSetProperty ( + _synth, + kMusicDeviceProperty_SoundBankURL, kAudioUnitScope_Global, + 0, + &url, sizeof(url) + ); + + CFRelease(url); + } else { + warning("Failed to allocate CFURLRef from '%s'", soundfont); + } +#endif if (err != noErr) warning("Failed loading custom sound font '%s' (error %ld)\n", soundfont, (long)err); |