在iOS中强制执行音频采样率



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

AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareSampleRate,propSize,&hwSampleRate)

然而,在某些运行中,我会返回44.1 kHz的采样率。在这种情况下,我的应用程序似乎无法工作,因为它无法以该采样率处理计算。将采样率强制设置为8kHz的最佳选择是什么?退出并再次打开应用程序是有效的,但会造成糟糕的用户体验。

正如hotpaw2所指出的,音频是iOS上的共享资源。你不能独占访问硬件。调用AudioSessionSetProperty/kAudioSessionProperty_PreferenceHardwareSampleRate设置首选硬件采样率。正如你所注意到的,你最终可能会发现硬件以不同的速度运行,这并不意味着你的应用程序不能以8kHz的频率运行。

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

您可以通过在以下文档中搜索"采样率"来阅读有关实现这一目标的各种方法:

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

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

最新更新