iPhone的声音和延迟

时间:2009-10-07 07:18:28

标签: iphone cocoa-touch

我正在开发一个应用程序,用户可以点击多个产生声音的命中区域 但结果有点滞后,当多个声音同时开始时,声音播放时会有一个难看的延迟。

我正在为每个声音使用AVAudioPlayer实例。 是否有更好的方式播放声音并防止这种滞后?

以下是代码:

#import "MBImageView.h"
#import <AVFoundation/AVFoundation.h>

@implementation MBImageView

-(void)awakeFromNib
{
NSURL* audioFile = [NSURL fileURLWithPath[[NSBundlemainBundle] pathForResource:@"shaker" 
                                               ofType:@"caf"]]; 
    AudioServicesCreateSystemSoundID((CFURLRef)audioFile, &shortSound); 

}

- (id)initWithImage:(UIImage *)image{ 
    return self; 
}

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
    AudioServicesPlaySystemSound(shortSound);
}


@end

问候。

3 个答案:

答案 0 :(得分:6)

大多数声音(AVAudioPlayer和AudioServices)在runloop结束后播放。也就是说,你说游戏,他们排队等待比赛,他们不会立即开始比赛。

如果您想要无滞后声音,请使用Audio Unit

  

提供最低延迟的音频,   特别是同时做的时候   输入和输出(例如用于VoIP)   应用程序),使用I / O单元或   语音处理I / O单元。请参阅“音频   iPhone OS中的单元支持。“

您可能还想查看Audio Toolbox

  

使用音频工具箱框架   同步播放音频   功能,访问数据包   传入音频,解析音频流,   转换音频格式,并记录   可以访问个人的音频   数据包。有关详情,请参阅音频   工具箱框架参考和   SpeakHere示例代码项目。

答案 1 :(得分:1)

如果它们是你不介意加载到内存中的短音,那么基于C的System Sound Services可能会更适合你。

答案 2 :(得分:0)

我在Audio Toolbox中使用了SoundEffect类,效果很好。我的短暂声音没有延迟。

另外还有一个需要考虑音频延迟的事情;确保你的音频文件在实际声音之前没有“空白” - 一旦寻找声音延迟,我就把头撞到了墙上,只是在实际的音频文件中找到它。

希望这有帮助。