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 ファイル形式をサポートしているようです。ただし、1 つ問題があります。EXS は絶対ファイル パスを使用します。相対パスはサポートしていません。つまり、.wav サンプルを移動することはできません。そうしないと、EXS インストゥルメントが壊れてしまいます。それが機能しない理由だと思います。

これを参照してください: https://developer.apple.com/library/mac/#technotes/tn2283/_index.html

于 2012-12-27T09:43:09.073 に答える