首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS音乐应用的音频框架

iOS音乐应用的音频框架
EN

Stack Overflow用户
提问于 2012-08-14 03:02:54
回答 3查看 1.3K关注 0票数 2

所以我正在构建一个小的应用程序,它有一个键盘和一些触发音频样本的其他按钮。

对于这个应用程序,有几个预先录制的音频轨道(鼓,人声,吉他),可以静音/取消静音...我让这部分与AVAudioPlayer配合得很好。

但是,正如你们大多数人所知道的,如果AVAudioPlayer被分配来触发击鼓或合成的小音频样本,那么它会有点慢,并且会有一些延迟。所以我实现了SystemSoundServices来播放简短的声音样本。就按下按钮和播放声音之间的延迟而言,它工作得很好,但我有一个小问题。当样本被重复敲击两次时,你会听到一个小的爆裂声,这是意料之中的,因为当第二次点击按钮时,它会切断第一个样本的播放。

我想通过检测样本是否正在播放来解决这个问题,如果正在播放,则将音量设置为0,停止播放,然后再次播放样本。但不幸的是,systemsoundservices没有内置这个功能。AVAudioPlayer可以,但它太慢了。我知道有CoreAudio,AudioQueue,Open AL,但对于我需要做的事情来说,这些似乎都很复杂。我不需要做任何类型的音频处理。

有没有人建议一个不需要编写100行代码就能播放一小段音频片段的音频框架?EVerything似乎建议我花几周的时间学习核心音频/音频队列/OpenAL,这似乎是在浪费我正在工作的时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-14 03:12:35

您可以对采样器使用AUSampler。诚然,它比SystemSounds更复杂。AUSampler是系统提供的AudioUnit。所以你需要做一些编程的AU配置,但是困难的事情是不可能实现的。

您可以使用AudioFileExtAudioFile读取和创建音频文件。对于AUSampler,它知道如何加载样本(以可用格式的子集),因此您甚至不需要编写文件i/o部分。

对于更复杂的音频,您可能需要自己处理音频流。

票数 1
EN

Stack Overflow用户

发布于 2012-08-14 03:13:57

你没有提到你的音轨是否压缩,但如果它们很短,你可以尝试使用.wav或其他未压缩的格式。AVAudioPlayer不需要花时间开始解压缩它们。它仍然有一个很短的延迟,但不像MP3那样长。

除此之外,我认为认真学习一个较低级别的框架将是您需要做的。

如果你喜欢,这里有一个很好的简单的OpenAL介绍:http://benbritten.com/2008/11/06/openal-sound-on-the-iphone/

编辑:也是-你在调用play之前使用了prepareToPlay方法调用,对吗?

票数 0
EN

Stack Overflow用户

发布于 2013-08-29 09:53:44

我的解决方案如下。我创建了三个具有相同URL的Avaudio播放器。当我要开始播放声音时,我使用属性isPlaying来确定要播放哪个Avaudio。声音通过以下方法淡出: performSelector:WithObject:AfterDelay。当声音逐渐淡出时,用户可以再次播放键盘和第二个Avaudio,依此类推。

您需要的Avaudio的数量取决于您淡出声音的速度以及您希望用户能够播放的速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11940624

复制
相关文章

相似问题

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