首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iPod上播放多首iPhone曲目,同时播放音高弯曲和其他效果

在iPod上播放多首iPhone曲目,同时播放音高弯曲和其他效果
EN

Stack Overflow用户
提问于 2011-01-28 09:48:45
回答 1查看 1.8K关注 0票数 3

在过去的两周里,我一直在做这件事,这让我发疯了。几天前我问了这个问题(提取iPod库原始样本并播放声音效果),虽然答案让我半途而废,但我还是被困住了。

基本上,我试图实现的是加载多首歌曲从iPod库,以播放效果,如音高弯曲,eq效果等.

我沿着AVPlayer和AVAudioPlayer的路线走,这太简单了。我看到的唯一可以播放这些效果的框架是OpenAL。我已经尝试过一些目标c包装器(Finch和ObjectAL)芬奇不播放压缩音频,而ObjectAL只会为我传递文件的URL (这是我不能做的,因为我只有一个不兼容的iPod库URL)。

一个应用程序做我想要的漂亮的例子是Tap DJ。它可以快速加载iPod库中的歌曲(与TouchDJ不同,它可以播放各种效果)。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2011-02-06 06:54:49

如果您可以将音频数据转换为OpenAL喜欢的原始PCM格式,则可以将其加载到ObjectAL中。

你需要的是:

  • 音频数据
  • 数据的大小(以字节为单位)
  • 数据的格式(AL_FORMAT_MONO16或AL_FORMAT_STEREO16)
  • 抽样率

您还需要一个ALSource来播放缓冲区。如果您将它与OALSimpleAudio一起使用(因为它将为您处理设备和上下文),则需要告诉它不要使用所有可用的源:

代码语言:javascript
复制
[OALSimpleAudio sharedInstance].reservedSources = 20; // or some number < 32

创建源(在init中应该这样做):

代码语言:javascript
复制
mySource = [[ALSource source] retain];

您可以使用自定义数据创建ALBuffer,如下所示:

代码语言:javascript
复制
ALBuffer* myBuffer = [ALBuffer bufferWithName:someName
                           data:myAudioData
                           size:audioDataSizeInBytes
                         format:audioFormat
                      frequency:sampleRateInHz];

现在你可以玩:

代码语言:javascript
复制
[mySource play:myBuffer];

编辑: ALBuffer接管了音频数据的管理,当它被释放时,它将调用free()。所以,要小心不要双倍免费:)

编辑2:我刚刚将"freeDataOnDestroy“属性添加到ALBuffer中,这样您现在就可以控制它是否释放数据(默认为YES)。

编辑3:去他的。我要走这么远,还是一路走吧。将"playBuffer“方法添加到OALSimpleAudio中。

所以现在你可以呆在OALSimpleAudio里了:

代码语言:javascript
复制
myBuffer = [[ALBuffer bufferWithName:someName
                           data:myAudioData
                           size:audioDataSizeInBytes
                         format:audioFormat
                      frequency:sampleRateInHz] retain];

..。

代码语言:javascript
复制
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...
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4826800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档