iPhone的声音和延迟

gcs*_*str 2 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
Run Code Online (Sandbox Code Playgroud)

问候.

mah*_*udz 6

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

如果您想要无滞后声音,请使用音频单元:

要提供最低延迟的音频,尤其是在同时输入和输出(例如VoIP应用程序)时,请使用I/O单元或语音处理I/O单元.请参阅"iPhone OS中的音频设备支持".

您可能还想查看Audio Toolbox:

使用Audio Toolbox框架播放具有同步功能的音频,访问传入音频的数据包,解析音频流,转换音频格式以及通过访问单个数据包录制音频.有关详细信息,请参阅Audio Toolbox Framework Reference和SpeakHere示例代码项目.