栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在iOS Swift中进行简单的低延迟音频播放

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在iOS Swift中进行简单的低延迟音频播放

如果您需要极低的延迟,我在AVAudioSession单例中发现了一个非常简单的解决方案(当应用启动时会自动实例化):

首先,使用此类方法获取对应用程序的AVAudioSession单例的引用:

(来自AVAudioSession类参考):

获取共享的音频会话

声明SWIFT

class func sharedInstance() -> AVAudioSession

然后,尝试使用此实例方法将首选IO缓冲区持续时间设置为非常短的时间(例如.002):

设置首选的音频I / O缓冲区持续时间(以秒为单位)。

声明SWIFT

func setPreferredIOBufferDuration(_ duration: NSTimeInterval) throws

参量

duration
您要使用的音频I / O缓冲区持续时间(以秒为单位)。

outError

输入时,指向错误对象的指针。如果发生错误,则将指针设置为描述该错误的NSError对象。如果您不想要错误信息,请输入nil。返回值如果成功发出请求,则为true,否则为false。

讨论区

此方法请求更改I /
O缓冲区持续时间。要确定更改是否生效,请使用IOBufferDuration属性。有关详细信息,请参阅配置音频会话。


请紧记上面的注释-

IOBufferDuration
属性是否 实际上 设置为传递给
funcsetPrefferedIOBufferDuration(_ duration: NSTimeInterval)throws
方法的值,取决于函数是否不返回错误, 并且 我还不太清楚的其他因素。另外-在我的测试中-
我发现,如果将此值设置为极低的值,则确实会设置该值(或接近它的值),但是在播放文件(例如使用AVAudioPlayerNode)时,声音不会被演奏。没有错误,只有声音。这显然是一个问题。而且,除了注意到在实际设备上进行测试时听不到声音的声音之外,我还没有发现如何测试此问题的方法。我会调查一下。但就目前而言,我建议将首选时长设置为不小于.002或.0015。.0015的值似乎适用于我正在测试的iPad
Air(型号A1474)。低至.0012似乎可以在我的iPhone 6S上正常工作。

从CPU开销角度考虑的另一件事是音频文件的格式。播放时,未压缩的格式将具有非常低的CPU开销。苹果公司建议您为获得最高质量和最低开销而使用CAF文件。对于压缩文件和最低开销,您应该使用IMA4压缩:

(来自iOS多媒体编程指南):

iOS中的首选音频格式对于未压缩(最高质量)的音频,请使用打包在CAF文件中的16位,小字节序,线性PCM音频数据。您可以使用afconvert命令行工具在Mac
OS X中将音频文件转换为这种格式,如下所示:

/usr/bin/afconvert -f caff -d LEI16 {INPUT} {OUTPUT}

当需要同时播放多个声音时,为了减少内存使用量,请使用IMA4(IMA /
ADPCM)压缩。这样可以减小文件大小,但在解压缩期间对CPU的影响最小。与线性PCM数据一样,将IMA4数据打包在CAF文件中。

您也可以使用afconvert转换为IMA4:

/usr/bin/afconvert -f AIFC -d ima4 [file]



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448341.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号