diff options
author | Dreammaster | 2013-02-15 08:25:09 -0500 |
---|---|---|
committer | Dreammaster | 2013-02-15 08:25:09 -0500 |
commit | bb3285d933419b6bdefadc55a6e320855ff0dd27 (patch) | |
tree | 2df613c52f854c33cff660ed1b064e2996ed80bb /backends/midi | |
parent | d1a19a1d4c3e20b57250e73141d81e8d9b44a2a1 (diff) | |
parent | adc338cd719179a94ff470b28e9584262d7b47e8 (diff) | |
download | scummvm-rg350-bb3285d933419b6bdefadc55a6e320855ff0dd27.tar.gz scummvm-rg350-bb3285d933419b6bdefadc55a6e320855ff0dd27.tar.bz2 scummvm-rg350-bb3285d933419b6bdefadc55a6e320855ff0dd27.zip |
Merge branch 'master' into hopkins
Diffstat (limited to 'backends/midi')
-rw-r--r-- | backends/midi/coreaudio.cpp | 117 | ||||
-rw-r--r-- | backends/midi/seq.cpp | 6 |
2 files changed, 74 insertions, 49 deletions
diff --git a/backends/midi/coreaudio.cpp b/backends/midi/coreaudio.cpp index 94262d0d92..e42b8ca313 100644 --- a/backends/midi/coreaudio.cpp +++ b/backends/midi/coreaudio.cpp @@ -102,6 +102,7 @@ public: void sysEx(const byte *msg, uint16 length); private: + void loadSoundFont(const char *soundfont); AUGraph _auGraph; AudioUnit _synth; }; @@ -171,52 +172,8 @@ int MidiDriver_CORE::open() { #endif // Load custom soundfont, if specified - if (ConfMan.hasKey("soundfont")) { - 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) { - err = FSGetCatalogInfo (&fsref, kFSCatInfoNone, NULL, NULL, &fsSpec, NULL); - } - - if (err == noErr) { - err = AudioUnitSetProperty ( - _synth, - kMusicDeviceProperty_SoundBankFSSpec, kAudioUnitScope_Global, - 0, - &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) - error("Failed loading custom sound font '%s' (error %ld)", soundfont, (long)err); - } + if (ConfMan.hasKey("soundfont")) + loadSoundFont(ConfMan.get("soundfont").c_str()); #ifdef COREAUDIO_DISABLE_REVERB // Disable reverb mode, as that sucks up a lot of CPU power, which can @@ -242,6 +199,74 @@ bail: return MERR_CANNOT_CONNECT; } +void MidiDriver_CORE::loadSoundFont(const char *soundfont) { + // TODO: We should really check whether the file contains an + // actual soundfont... + + OSStatus err = 0; + +#if USE_DEPRECATED_COREAUDIO_API + FSRef fsref; + err = FSPathMakeRef((const byte *)soundfont, &fsref, NULL); + + SInt32 version; + err = Gestalt(gestaltSystemVersion, &version); + + if (err == noErr) { + 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 + // kMusicDeviceProperty_SoundBankURL was added in 10.5 as a replacement + // In addition, the File Manager API became deprecated starting in 10.8 + 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 // USE_DEPRECATED_COREAUDIO_API + + if (err != noErr) + error("Failed loading custom sound font '%s' (error %ld)", soundfont, (long)err); +} + void MidiDriver_CORE::close() { MidiDriver_MPU401::close(); if (_auGraph) { diff --git a/backends/midi/seq.cpp b/backends/midi/seq.cpp index 4efad9ceae..d48b80c40b 100644 --- a/backends/midi/seq.cpp +++ b/backends/midi/seq.cpp @@ -90,9 +90,9 @@ int MidiDriver_SEQ::open() { if ((device_name == NULL) || (device < 0)) { if (device_name == NULL) - warning("Opening /dev/null (no music will be heard) "); + warning("Opening /dev/null (no music will be heard)"); else - warning("Cannot open rawmidi device %s - using /dev/null (no music will be heard) ", + warning("Cannot open rawmidi device %s - using /dev/null (no music will be heard)", device_name); device = (::open(("/dev/null"), O_RDWR, 0)); if (device < 0) @@ -145,7 +145,7 @@ void MidiDriver_SEQ::send(uint32 b) { buf[position++] = 0; break; default: - warning("MidiDriver_SEQ::send: unknown : %08x", (int)b); + warning("MidiDriver_SEQ::send: unknown: %08x", (int)b); break; } if (write(device, buf, position) == -1) |