在 iOS 中强制音频采样率

Posted

技术标签:

【中文标题】在 iOS 中强制音频采样率【英文标题】:Enforcing an audio sampling rate in iOS 【发布时间】:2013-08-16 19:34:16 【问题描述】:

我有一个应用程序正在使用 RemoteIO 音频单元来创建声音。但是,由于延迟和计算问题,该系统的采样率不能高于 8 kHz。我使用以下行来设置采样率。

AudiosessionSetProperty(kAudioSessionProperty_PreferredHardwareSampleRate,propSize,&hwSampleRate)

但是,在某些运行中,我得到了 44.1 kHz 的采样率。在这种情况下,我的应用程序似乎无法正常工作,因为它无法以该采样率处理计算。强制采样率为 8 kHz 的最佳选择是什么?退出并再次打开应用程序可以正常工作,但会导致用户体验不佳。

【问题讨论】:

音频是 iOS 中的共享资源。没有一个应用程序可以强制进行音频配置,因为这可能与其他操作系统服务或共享音频硬件的应用程序不兼容。相反,请尝试使用采样率转换器、音频单元或音频处理的一部分。 【参考方案1】:

正如 hotpaw2 所说,音频是 iOS 上的共享资源。您无法获得对硬件的独占访问权限。调用 AudioSessionSetProperty/kAudioSessionProperty_PreferredHardwareSampleRate 设置首选硬件采样率。正如您所注意到的,您最终可能会以不同的速率运行硬件,这并不意味着您的应用不能以 8kHz 运行。

如果您正确配置 RemoteIO 格式,则 RemoteIO 将为您执行输出采样率转换。硬件将以 44.1kHz 运行,但您的应用程序将以 8kHz 输出。

您可以通过在本文档中搜索“采样率”来了解实现此目的的各种方法:

http://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/ConstructingAudioUnitApps/ConstructingAudioUnitApps.html

一种选择(如文档中所述)是设置具有正确输出采样率的混音器,然后将渲染回调附加到混音器的输入。

【讨论】:

是否有关于让混音器单元、音频回调和 RemoteIO 协同工作的教程?最近2天一直在努力。 Apple 的 MixerHost 在运行时也会崩溃。尝试从那里复制代码,到达似乎连接的点,但在记录控制台时,很明显回调正在以 44100 的速率有效调用。成员节点:节点 1:'auou'' rioc' 'appl', instance 0x1f53e150 O node 2: 'aumx' 'mcmx' 'appl', instance 0x20031320 O Input Callbacks: 0xa430d, 0x1f53549c => node 1 bus 0 [2 ch, 16000 Hz]

以上是关于在 iOS 中强制音频采样率的主要内容,如果未能解决你的问题,请参考以下文章

听说高通平台处理器有先天的音频采样率缺陷,是啥

如何更改插孔音频中的采样率?

iOS 将音频采样率从 16 kHz 转换为 8 kHz

在 iOS 中以不同的采样率同时录制和播放

libfdk_aac音频采样率和编码字节数注意

音频中采样位数,采样率,比特率的名词解释(转)