Контекст: iOS5 AUSampler AudioUnit
Я копался, пытаясь определить, существует ли программный способ определения количества предустановок в файле DLS или sf2.Я надеялся, что он будет доступен через AudioUnitGetProperty или AudioUnitGetParameter для AUSampler.Тогда, конечно, я хочу иметь возможность переключать пресеты на лету.Документы не указывают, возможно ли это.
Я использую стандартный код для загрузки DLS / sf2 для TechNote TN2283 .Проблема в том, что при большом количестве файлов 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;
}