2

从 AUSampler API 看来,它似乎应该支持 Garage Band 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 中不受支持?

4

1 回答 1

0

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

看到这个:https ://developer.apple.com/library/mac/#technotes/tn2283/_index.html

于 2012-12-27T09:43:09.073 回答