Как программно определить количество предустановок в файле DLS или sf2? - PullRequest
1 голос
/ 23 февраля 2012

Контекст: 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;
}

1 Ответ

2 голосов
/ 27 марта 2012

ОК - ответ от инженера Apple Core Audio:

"Нет API для получения количества пресетов. Sampler AU одновременно загружает только один инструмент из любого банка SF2 или DLSпоэтому он не "переваривает" весь файл банка (и поэтому не знает его полного содержимого). "

...