如果你能得到的音频数据转换成原始的PCM格式。这OpenAL的喜欢,你可以将其加载到ObjectAL
你需要的是:
- 音频数据
- 数据的字节大小
- 数据(AL_FORMAT_MONO16或AL_FORMAT_STEREO16)
- 采样率
你还需要一个ALSource起到缓冲的格式。如果您在使用本OALSimpleAudio的旁边(推荐,因为它会为你处理设备和环境),你需要告诉它不要采取一切可用来源:
[OALSimpleAudio sharedInstance].reservedSources = 20; // or some number < 32
创建源(应在初始化做到这一点):
mySource = [[ALSource source] retain];
您可以使用自定义数据创建一个ALBuffer像这样:
ALBuffer* myBuffer = [ALBuffer bufferWithName:someName
data:myAudioData
size:audioDataSizeInBytes
format:audioFormat
frequency:sampleRateInHz];
现在你可以玩:
[mySource play:myBuffer];
编辑:ALBuffer接管音频数据并在其释放时调用free()。所以要小心不要双倍免费:)
编辑2:我只是将“freeDataOnDestroy”属性添加到ALBuffer,所以您现在可以控制是否释放数据(默认为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: NO]调用内部使用`bufferWithName:data:size:format:frequency`。用它来创建一个`ALBuffer *`,然后使用`playBuffer`方法 – 2011-07-11 19:21:24