加载声音字体失败并显示“无法找到补丁 0 库 0x0/0” 在查看完整的结果路径时,声音字体的 URL 似乎正确。
AVAudioUnitSampler
继承自AVAudioUnitMidiInstrument
AVAudioUnitSampler
没有自己的初始化程序。
AVAudioUnitMidiInstrument
有一个需要一个AudioComponentDescription
使用任何一个都会导致相同的错误。
var error:NSError?
let soundBankUrl:NSURL = NSURL(fileURLWithPath:
NSBundle.mainBundle().pathForResource("FluidR3 GM2-2", ofType: "SF2"))
var audioEngine:AVAudioEngine = AVAudioEngine()
// sampler
var audioCompDesc = AudioComponentDescription(
componentType: OSType(kAudioUnitType_MusicDevice),
componentSubType: OSType(kAudioUnitSubType_Sampler),
componentManufacturer: OSType(kAudioUnitManufacturer_Apple),
componentFlags: 0, componentFlagsMask: 0)
var sampler:AVAudioUnitSampler = AVAudioUnitSampler(audioCompDesc)
// var sampler:AVAudioUnitSampler = AVAudioUnitSampler()
let loaded = sampler.loadSoundBankAtURL(soundBankUrl, error: &error)
结果是:
Unable to find patch 0 bank 0x0/0
使用较低级别的 API 可以在音频单元上设置一个属性。
AUSamplerBankPresetData bpdata;
bpdata.bankURL = (__bridge CFURLRef) presetURL;
bpdata.bankMSB = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB = kAUSampler_DefaultBankLSB;
bpdata.presetID = (UInt8) patch;
return [self loadSynthFromPresetURL:(NSURL*)presetURL
withPatch:(int) patch
audioUnit: (AudioUnit) audioUnit
samplerBankPesetData: (AUSamplerBankPresetData) bpdata];
result = AudioUnitSetProperty(audioUnit,
kAUSamplerProperty_LoadPresetFromBank, kAudioUnitScope_Global,
0, &samplerBankPresetData, sizeof(samplerBankPresetData));