上下文:iOS5 AUSampler AudioUnit
我一直在努力确定是否有一种编程方式来确定DLS或sf2文件中的预设数量。我希望通过'AudioUnitGetProperty'或'AudioUnitGetParameter'为AUSampler提供它。当然,我希望能够动态切换预设。文档没有说明这是否可能。
我正在使用标准代码按TechNote TN2283加载DLS / sf2。问题是,对于大量的sf2文件,找出预设是一个试错过程。
-(OSStatus) loadFromDLSOrSoundFont: (NSURL *)bankURL withPatch: (int)presetNumber
OSStatus result = noErr;
// fill out a bank preset data structure
AUSamplerBankPresetData bpdata;
bpdata.bankURL = (CFURLRef) bankURL;
bpdata.bankMSB = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB = kAUSampler_DefaultBankLSB;
bpdata.presetID = (UInt8) presetNumber;
// set the kAUSamplerProperty_LoadPresetFromBank property
result = AudioUnitSetProperty(self.mySamplerUnit,
kAUSamplerProperty_LoadPresetFromBank,
kAudioUnitScope_Global,
0,
&bpdata,
sizeof(bpdata));
// check for errors
NSCAssert (result == noErr,
@"Unable to set the preset property on the Sampler. Error code:%d '%.4s'",
(int) result,
(const char *)&result);
return result;
}
答案 0 :(得分:2)
好的 - 得到Apple Core Audio工程师的回答:
“没有API来检索预设数量。采样器AU一次只能从任何SF2或DLS库加载一个仪器,因此它不会”消化“整个银行文件(因此不知道)它的完整内容)。“