以编程方式确定DLS或sf2文件中的预设数量?

时间:2012-02-23 18:25:59

标签: ios5 core-audio

上下文: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;
}

1 个答案:

答案 0 :(得分:2)

好的 - 得到Apple Core Audio工程师的回答:

“没有API来检索预设数量。采样器AU一次只能从任何SF2或DLS库加载一个仪器,因此它不会”消化“整个银行文件(因此不知道)它的完整内容)。“