Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS音乐应用程序的音频框架_Objective C_Ios_Frameworks_Core Audio - Fatal编程技术网

Objective c iOS音乐应用程序的音频框架

Objective c iOS音乐应用程序的音频框架,objective-c,ios,frameworks,core-audio,Objective C,Ios,Frameworks,Core Audio,因此,我正在构建一个小应用程序,它有一个键盘和一些其他按钮来触发音频样本 对于这个应用程序,有几个预先录制的音频曲目(鼓、人声、吉他)可以静音/取消静音。。。我和AVAudioPlayer的那部分工作得很好 但是,正如你们大多数人所知道的,AVAudioPlayer有点慢,如果它被指定为触发一个击鼓或合成器的小音频样本,它会有一些延迟。所以我实现了SystemSoundServices来播放简短的声音样本。它在按下按钮和播放声音之间的延迟方面工作得很好,但我有一个小问题。当样本被重复点击两次时,

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

对于这个应用程序,有几个预先录制的音频曲目(鼓、人声、吉他)可以静音/取消静音。。。我和AVAudioPlayer的那部分工作得很好

但是,正如你们大多数人所知道的,AVAudioPlayer有点慢,如果它被指定为触发一个击鼓或合成器的小音频样本,它会有一些延迟。所以我实现了SystemSoundServices来播放简短的声音样本。它在按下按钮和播放声音之间的延迟方面工作得很好,但我有一个小问题。当样本被重复点击两次时,您会听到一个小的弹出声,这是预期的,因为当第二次点击按钮时,它会切断第一个样本的播放

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


有人对音频框架有什么建议吗?它不需要编写100行代码来播放一个简短的音频片段?一切似乎都在提醒我要花数周的时间学习CoreAudio/AudioQueue/OpenAL,而这似乎是在浪费我的时间做我正在做的事情。

你可以使用
AUSampler
作为采样器。诚然,它比系统声音更复杂。
AUSampler
是系统提供的音频单元。因此,您将有一点编程AU配置要做,但硬的东西是遥不可及的

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


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

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

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

如果您喜欢,这里有一个简单的OpenAL介绍:


编辑:另外-在调用
play
之前,您正在使用
prepareToPlay
方法调用,对吗?

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


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

谢谢,这正是我想要的……谢谢您的回复。是的,我在用prepareToPlay和AVAudio一起玩。所有的样本都是.aif格式的,但是如果必要的话我们可以更改它。我认为AUSampler的justins解决方案对我的案例有效,但如果不行,我将咬紧牙关学习OpenAL..aif并不是真正的压缩,所以你已经在做我建议的所有事情了。