我使用ExtAudioFile
接口来解码音频,并想知道它是否曾使用硬件辅助音频解码。
kExtAudioFileProperty_CodecManufacturer
属性的文档说:
通过指定kAppleHardwareAudioCodecManufacturer或kAppleSoftwareAudioCodecManufacturer,在iOS中使用此属性可在硬件或软件编码器之间进行选择。
这似乎表明ExtAudioFile
确实可以使用解码硬件。
在其他地方,在Audio Format Services文档中,我找到了:
只有在使用音频队列服务或使用音频队列服务等接口(如AV Foundation)播放或录制时,才能使用基于硬件的编解码器。特别是,您不能在OpenAL或使用I / O音频单元时使用基于硬件的音频编解码器。
......这不完全清楚;如果ExtAudioFile
在其实现中使用音频队列服务,那么可能它可以使用硬件,但我们实际上并不知道它是如何实现的。
我试图在运行时测试硬件是否正在使用,但这本身就很困难。 Audio Format Services参考中给出的一种方法是使用AudioFormatGetProperty
来测试kAudioFormatProperty_HardwareCodecCapabilities
属性。但示例代码不起作用,始终返回kAudioFormatUnsupportedPropertyError
。 (在网上搜索之后,我发现了有这个问题的人提出的一些其他问题,但没有关于成功使用它的报告。)
所以...我想知道是否有人知道有任何方法可以测试硬件解码器当前是否处于活动状态(在这种情况下,我可以自己测试ExtAudioFile
是否正在使用它)。或者,如果有人对ExtAudioFile
是否确实使用硬件有任何明确的知识(不仅仅基于Apple文档中含糊不清的提及)。
答案 0 :(得分:0)
使用kAppleHardwareAudioCodecManufacturer
指定ExtAudioFileSetProperty()
似乎启用了硬件解码,因为当已经使用该编解码器集打开一个音频文件时,kAudioConverterErr_HardwareInUse
失败并且kAudioQueueErr_InvalidCodecAccess
当音频类别设置为不能(根据文档)启用硬件解码时。
然而,在使用Instruments进行分析后,我发现在启用硬件解码的情况下,性能稍差 ,我仍然无法解释......