HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何正确使用iOS AudioUnit渲染回调大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个iOS应用程序,它将播放音频指令作为其中一项功能.

每次应用程序想要播放音频时,它都会从非标准文件中读取,并将该音频的结果PCM数据放入内存中的缓冲区.@H_675_7@

即使我有PCM数据的缓冲区,我也无法让应用程序实际播放声音.在搜索iOS文档后,我开始实现AudioUnit.这个AudioUnit的问题是使用渲染回调(据我所知,输出声音的唯一方法).从Apple’s developer documentation开始:@H_675_7@

如果我不能在render回调方法中使用锁,那么在写入时我无法读取缓冲区.没有机会读取文件并写入缓冲区,因为渲染回调将不断访问它.@H_675_7@

唯一的例子I found实际上在render方法生成了PCM数据,这是我做不到的.@H_675_7@

这是使用AudioUnits的唯一方法(使用异步渲染回调)吗?@H_675_7@

是否可以从内存中播放PCM数据?@H_675_7@

解决方法

使用RemoteIO音频单元可能需要在音频单元回调之外有一个单独的数据队列(fifo或循环缓冲区),它可以在音频单元渲染回调之前预先缓冲来自文件读取的足够音频数据,以满足更糟糕的情况延迟.然后,渲染回调只需要快速复制音频数据,然后更新指示音频数据被消耗的只写标志.

iOS内置的替代方案是使用Audio Queue API,它为您进行预缓冲.它允许您的应用提前在主运行循环中填充许多较大的音频缓冲区.您仍然必须预先缓冲足够的数据以允许最大的文件,网络,锁定或其他延迟.@H_675_7@

另一种策略是,如果文件或网络读取没有跟上,则可以使用备用音频数据来提供实时渲染回调,例如快速创建逐渐变为静音的音频缓冲区(然后在实际数据开始到达时逐渐减小)再次).@H_675_7@

大佬总结

以上是大佬教程为你收集整理的如何正确使用iOS AudioUnit渲染回调全部内容,希望文章能够帮你解决如何正确使用iOS AudioUnit渲染回调所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。