Ipad 在iOS6中加载带有CoreAudio音频放大器的EXS24仪器

Ipad 在iOS6中加载带有CoreAudio音频放大器的EXS24仪器,ipad,ios6,core-audio,coremidi,Ipad,Ios6,Core Audio,Coremidi,从AUSampler API来看,它似乎应该支持车库波段EXS24仪器。AudioUnitProperties.h文件说明如下: typedef struct AUSamplerInstrumentData { CFURLRef fileURL; UInt8 instrumentType; UInt8 bankMSB; UInt8

从AUSampler API来看,它似乎应该支持车库波段EXS24仪器。AudioUnitProperties.h文件说明如下:

typedef struct AUSamplerInstrumentData {
    CFURLRef                fileURL;
    UInt8                   instrumentType;
    UInt8                   bankMSB;
    UInt8                   bankLSB;
    UInt8                   presetID;
} AUSamplerInstrumentData;
其中,仪器类型可以有以下类型:

enum
{
    kInstrumentType_DLSPreset   = 1,
    kInstrumentType_SF2Preset   = kInstrumentType_DLSPreset,
    kInstrumentType_AUPreset    = 2,
    kInstrumentType_Audiofile   = 3,
    kInstrumentType_EXS24       = 4
};
我已尝试使用以下功能加载仪器:

-(OSStatus) loadFromEXS: (NSString *) path withSampler: (AudioUnit) sampler {
    OSStatus result = noErr;

    NSURL *presetURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:path ofType:@"exs"]];

    AUSamplerInstrumentData bpdata = {0};

    bpdata.fileURL = (__bridge CFURLRef)(presetURL);
    bpdata.instrumentType = kInstrumentType_EXS24;

    result = AudioUnitSetProperty(sampler,
                              kAUSamplerProperty_LoadInstrument,
                              kAudioUnitScope_Global,
                              0,
                              &bpdata,
                              sizeof(bpdata));
    return result;
}
在我的参考资料中,我有一个包含.exs文件和一些.wav示例的组。此函数产生以下错误:

GlobalState::LoadEXS24Instrument: Load failed

那么这是否意味着EXS文件不正确?这是否意味着我没有正确加载它?或者,这在iOS6中不受支持?

是的,它似乎支持EXS文件格式。但是有一个问题:EXS使用绝对文件路径。它不支持相对路径。这意味着您不能移动.wav样本,否则会损坏EXS仪器。这就是为什么它不起作用的原因


见此:

建议您在Apple iOS dev Core音频论坛上提问。iOS6仍然是新的,关于API6的这些变化的信息并不多。这个技术说明是对我向苹果提出的信息请求的回复。我可以确认它确实有效。我也有类似的问题。你修好了吗?请看一看