あなたは生のPCMフォーマットにオーディオデータを得ることができる場合。OpenALのが好きなことを、あなたはObjectALにロードすることができます
が必要なものは次のとおりです。
- オーディオデータ
- データのバイト単位のサイズ
- データ(AL_FORMAT_MONO16またはAL_FORMAT_STEREO16)
- ます。また、必要ALSourceはバッファを再生するよ
サンプルレートのフォーマット。 (
[OALSimpleAudio sharedInstance].reservedSources = 20; // or some number < 32
はソースを作成する必要があります:あなたはOALSimpleAudioのと一緒にこれを使用している場合は、利用可能なソースのすべてを取らないことを伝える必要があります、(それはあなたのための装置およびコンテキストを処理しますので、お勧めします) )INITでこれを実行します。
mySource = [[ALSource source] retain];
あなたはそうのようなカスタムデータをALBufferを作成することができます。
ALBuffer* myBuffer = [ALBuffer bufferWithName:someName
data:myAudioData
size:audioDataSizeInBytes
format:audioFormat
frequency:sampleRateInHz];
今あなたがプレイすることができます:
を210
[mySource play:myBuffer];
編集:ALBufferはオーディオデータの管理を引き継ぎ、割り当てが解除されるとfree()を呼び出します。したがって、ダブルフリーにならないように注意してください。
編集2:データを解放するかどうかを制御できるように、ALBufferに「freeDataOnDestroy」プロパティを追加しました(デフォルトはYES)。
編集3:ねじを締めます。私はこれまでずっと行っているし、すべての道を行くかもしれない。 OALSimpleAudioに "playBuffer"メソッドを追加しました。
だから今はちょうど全体のことのためにOALSimpleAudioに滞在することができます。
myBuffer = [[ALBuffer bufferWithName:someName
data:myAudioData
size:audioDataSizeInBytes
format:audioFormat
frequency:sampleRateInHz] retain];
を...今もあります
id<ALSoundSource> source = [[OALSimpleAudio sharedInstance] playBuffer:myBuffer
volume:1.0
pitch:1.0
pan:0
loop:NO];
[source pitchTo:2.0
duration:5.0
target:nil
selector:nil];
// And so on...
単純 '[[OALManager sharedInstance] bufferFromUrl:URLのreduceToMono:内部的に 'bufferWithName:data:size:format:frequency'を使用します。それを使って 'ALBuffer *'を作成し、 'playBuffer'メソッドを使用してください –