Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
iphone上实现OpenAL时的声音播放延迟(hiccup)_Iphone_Objective C_Delay_Openal_Hiccup - Fatal编程技术网

iphone上实现OpenAL时的声音播放延迟(hiccup)

iphone上实现OpenAL时的声音播放延迟(hiccup),iphone,objective-c,delay,openal,hiccup,Iphone,Objective C,Delay,Openal,Hiccup,我在iphone游戏中实现了OpenAL代码。当我开始游戏时,它会运行1秒并暂停2秒,然后恢复打嗝效果。我相信它的延迟是由于声音文件的加载。解决办法是什么?有人能推荐任何书、网站或源代码而不是iphone参考吗?是否有加载过程?在哪里初始化加载过程?那会有帮助吗 下面,我已经包括了我已经实现的OpenAL代码的相关组件。声音文件将由gameloop中的if语句播放和调用。OpenALController类用于创建声源和缓冲区,InitOpenAL方法在OpenALController中调用。My

我在iphone游戏中实现了OpenAL代码。当我开始游戏时,它会运行1秒并暂停2秒,然后恢复打嗝效果。我相信它的延迟是由于声音文件的加载。解决办法是什么?有人能推荐任何书、网站或源代码而不是iphone参考吗?是否有加载过程?在哪里初始化加载过程?那会有帮助吗

下面,我已经包括了我已经实现的OpenAL代码的相关组件。声音文件将由gameloop中的if语句播放和调用。OpenALController类用于创建声源和缓冲区,InitOpenAL方法在OpenALController中调用。MyView是UIView的一个自定义子类,连接到主视图,但我没有使用默认视图

//MyView.m //自定义UIView作为主视图。 导入OpenALSoundController.h -空隙开始铺设{ ... [自初始化可评估]; ... [自初始化程序]; } -无效初始化剂{ 如果timer==nil{ 计时器=[CADisplayLink DISPLAYLINK WITH TARGET:selector:@selectorgameLoop]; timer.frameInterval=2; [Timer addToUnloop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode]; } } -空心环{ ... 如果某事是真的 //播放声音 [[OpenALSoundController sharedSoundController]playSound1]; ... } ... @结束

//OpenALSoundController.h @接口OpenALSoundController:NSObject{ ...} ... +OpenALSoundController*sharedSoundController ... @结束

//OpenALSoundController.m //单重存取器 { 静态OpenALSoundController*共享声音控制器; @同步自我 { ifnil==共享声音控制器 { 共享的声音控制器=[[OpenALSoundController alloc]init]; } 返回共享的声音控制器; } 返回共享的声音控制器; } -初始空位{ ... file_url=[[NSURL alloc]initFileURLWithPath:[[NSBundle mainBundle]pathForResource:@fire of type:@wav]]; FirefoxData=MyGetOpenALAudioDataAllCFURLReffile\u url、数据大小、格式和采样率; alBufferDatafireOutputBuffer、Alu格式、FireCmdata、数据大小、采样率; [文件url发布]; ... AlSourceOutputSourceFire、AL_缓冲区、fireOutputBuffer; ... }


您可能会感兴趣,一个用于iOS的OpenAL声音引擎。它非常适合比赛。通常,重用一些已经存在的代码比开发和维护自己的代码要好。

首先,最好使用mp3,因为wav文件很大,从磁盘加载需要时间。Mp3文件在磁盘上更小,加载到内存中并在那里解压播放。尝试降低mp3比特率/编码质量

此外,您还需要预加载声音以避免打嗝,否则第一次播放声音时会有延迟