使用音调弯曲&;在iPhone上同时播放多首iPod库歌曲;其他影响
在过去的两周里,我一直在这样做,这让我发疯。几天前我问了这个问题(),虽然答案让我半途而废,但我还是被卡住了 基本上,我试图实现的是从iPod库中加载多首歌曲,以便播放效果,如音调弯曲、eq效果等 我已经走上了AVPlayer和AVAudioPlayer的路线,它们太简单了。我所见过的唯一一个可以用这些效果播放音频的框架是OpenAL。我尝试了一些objective c包装(Finch和ObjectAL)Finch不会播放压缩音频,而ObjectAL只会在我传入文件的URL时为我转换它(这是我无法做到的,因为我只有一个不兼容的iPod库URL) 一个应用程序的例子,做什么我想美化是。它可以快速从iPod音乐库中加载歌曲(与之不同),并以各种效果播放歌曲使用音调弯曲&;在iPhone上同时播放多首iPod库歌曲;其他影响,iphone,objective-c,ipod,openal,audio,Iphone,Objective C,Ipod,Openal,Audio,在过去的两周里,我一直在这样做,这让我发疯。几天前我问了这个问题(),虽然答案让我半途而废,但我还是被卡住了 基本上,我试图实现的是从iPod库中加载多首歌曲,以便播放效果,如音调弯曲、eq效果等 我已经走上了AVPlayer和AVAudioPlayer的路线,它们太简单了。我所见过的唯一一个可以用这些效果播放音频的框架是OpenAL。我尝试了一些objective c包装(Finch和ObjectAL)Finch不会播放压缩音频,而ObjectAL只会在我传入文件的URL时为我转换它(这是我无
任何帮助都将不胜感激。如果您可以将音频数据转换为OpenAL喜欢的原始PCM格式,您可以将其加载到ObjectAL中 您需要的是:
- 音频数据
- 数据的大小(以字节为单位)
- 数据的格式(AL_格式MONO16或AL_格式MONO16)
- 抽样率
[OALSimpleAudio sharedInstance].reservedSources = 20; // or some number < 32
您可以使用自定义数据创建ALBuffer,如下所示:
ALBuffer* myBuffer = [ALBuffer bufferWithName:someName
data:myAudioData
size:audioDataSizeInBytes
format:audioFormat
frequency:sampleRateInHz];
现在您可以玩:
[mySource play:myBuffer];
编辑:ALBuffer接管了音频数据的管理,并将在解除分配时对其调用free()
编辑2:我刚刚将“freeDataOnDestroy”属性添加到ALBuffer中,以便您现在可以控制它是否释放数据(默认为“是”)
编辑3:拧它。我要走这么远,不妨一路走。在OALSimpleAudio中添加了“playBuffer”方法
因此,现在您可以一直呆在OALSimpleAudio中:
myBuffer = [[ALBuffer bufferWithName:someName
data:myAudioData
size:audioDataSizeInBytes
format:audioFormat
frequency:sampleRateInHz] retain];
id source=[[OALSimpleAudio sharedInstance]播放缓冲区:myBuffer
卷数:1.0
音高:1.0
潘:0
循环:否];
[来源:2.0]
持续时间:5.0
目标:零
选择器:无];
//等等。。。
现在还有一个更简单的[[OALManager sharedInstance]bufferFromUrl:url reduceToMono:NO]调用,它在内部使用
bufferWithName:data:size:format:frequency。使用它创建一个
ALBuffer*`然后使用playBuffer
方法
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...