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 ではサポートされていないのでしょうか?