Как загрузить Sound Font
Мне не повезло, загрузка файла звукового шрифта (.SF2) в моем приложении IOS. Сначала я попытался использовать код Apple из технической заметки TN2283
- (OSStatus) loadFromDLSOrSoundFont: (NSURL *)bankURL withPatch: (int)presetNumber {
OSStatus result = noErr;
// fill out a instrument data structure
AUSamplerInstrumentData instdata;
instdata.bankURL = (CFURLRef) bankURL;
instdata.instrumentType = kInstrumentType_DLSPreset;
instdata.bankMSB = kAUSampler_DefaultMelodicBankMSB;
instdata.bankLSB = kAUSampler_DefaultBankLSB;
instdata.presetID = (UInt8) presetNumber;
// set the kAUSamplerProperty_LoadPresetFromBank property
result = AudioUnitSetProperty(self.mySamplerUnit,
kAUSamplerProperty_LoadInstrument,
kAudioUnitScope_Global,
0,
&instdata,
sizeof(instdata));
// 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; }
Но компилятор жалуется, что "Нет члена с именем" bankURL "в структуре AUSamplerInstrumentData", что является истинным, структура не содержит члена "bankURL"??
Затем я наткнулся на следующий код от Apple, я считаю,
- (OSStatus)loadSoundFont:(NSURL *)bankURL withPatch:(int)presetNumber
{
OSStatus result = noErr;
// fill out a bank preset data structure
AUSamplerBankPresetData bpdata;
bpdata.bankURL = (__bridge CFURLRef) bankURL;
bpdata.bankMSB = kAUSampler_DefaultMelodicBankMSB;
bpdata.bankLSB = kAUSampler_DefaultBankLSB;
bpdata.presetID = (UInt8) presetNumber;
// set the kAUSamplerProperty_LoadPresetFromBank property
result = AudioUnitSetProperty(self.samplerUnit,
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;
}
Это все выглядит правильно, но когда я пытаюсь загрузить звуковой шрифт, используя этот метод, например, следующим
NSURL *SFURL = [[NSBundle mainBundle] URLForResource:@"YAMAHA DX7Piano" withExtension:@"SF2"];
[self loadSoundFont:url withPatch:0];
он выдает ошибку "Невозможно установить предустановленное свойство в сэмплере...". Это привело меня к мысли, что произошла некоторая ошибка в том, как я указал номер патча, например, указание несуществующего номера патча. Но в конце концов я обнаружил, что NSURL, который я предоставлял, был нулевым, поэтому я попытался указать URL следующим образом:
NSString *resources = [[NSBundle mainBundle] resourcePath];
NSURL *SFURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@",resources,@"YAMAHA DX7Piano.SF2"]];
Это сделало меня на шаг ближе. Я думаю, что теперь я предоставляю действительный URL-адрес файла звукового шрифта в моем комплекте приложений. Но это все еще не работает. Мой компилятор теперь говорит мне
ОШИБКА: [0x19a824310] 486: сбой загрузки банка DLS/SF2
Отсутствует кусок головоломки, и я не вижу, что.??
1 ответ
Ну, я нашел решение. Шрифт Sound не загружался. Он не загружался, потому что не был правильно добавлен в комплект приложений. Я перетащил его в ресурсы, но затем мне пришлось добавить его в "Копировать ресурсы комплекта" в проекте "Этапы сборки".