0

我正在使用该ExtAudioFile接口来解码音频,并且想知道它是否曾经使用过硬件辅助音频解码。

kExtAudioFileProperty_CodecManufacturer物业的文档说:

通过指定 kAppleHardwareAudioCodecManufacturer 或 kAppleSoftwareAudioCodecManufacturer,在 iOS 中使用此属性在硬件或软件编码器之间进行选择。

这似乎表明ExtAudioFile确实可以利用解码硬件。

在其他地方,在音频格式服务文档中,我发现:

基于硬件的编解码器只能在使用音频队列服务或使用接口(如使用音频队列服务的 AV Foundation)播放或录制时使用。特别是,您不能将基于硬件的音频编解码器与 OpenAL 一起使用或在使用 I/O 音频单元时使用。

...这并不完全清楚;如果ExtAudioFile在其实现中使用音频队列服务,那么它也许可以利用硬件,但我们实际上并不知道它是如何实现的。

我试图在运行时测试是否正在使用硬件,但这本身就很困难。音频格式服务参考中给出的一种方法是用于AudioFormatGetProperty测试kAudioFormatProperty_HardwareCodecCapabilities属性。但是示例代码不起作用,总是返回kAudioFormatUnsupportedPropertyError. (在网上搜索后,我发现有这个问题的人提出了一些其他问题,但没有成功使用它的报告。)

所以......我想知道是否有人知道任何方法来测试硬件解码器当前是否处于活动状态(在这种情况下,我可以自己测试是否ExtAudioFile正在使用它)。或者,如果有人对是否ExtAudioFile使用硬件有任何明确的了解(不仅仅是基于 Apple 文档中的模糊提及)。

4

1 回答 1

0

指定kAppleHardwareAudioCodecManufacturerwithExtAudioFileSetProperty()似乎启用了硬件解码,因为kAudioConverterErr_HardwareInUse当已经使用该编解码器集打开了一个音频文件时,并且kAudioQueueErr_InvalidCodecAccess当音频类别设置为不启用硬件解码的音频类别时(根据文档),它会失败。

但是,在使用 Instruments 进行分析后,我发现启用硬件解码后性能稍差我仍然无法解释......

于 2014-01-30T17:42:50.510 回答