gpt4 book ai didi

ios - maximumFramesPerSlice,inNumberFrames和缓冲区持续时间之间的差异

转载 作者:行者123 更新时间:2023-12-01 18:56:21 26 4
gpt4 key购买 nike

我对这三个概念感到困惑

尽管我是 objective-c 和c的新手,但我仍在ios上进行音频项目。
我正在尝试实时获取音频数据。

在此过程中,我对这三个概念感到非常困惑。
-maximumFramesPerSlice,
-inNumberFrames呈现功能上的变量
-在AVAudioSession上设置的首选I / O硬件缓冲区持续时间

我将缓冲区持续时间设置为100毫秒。虽然我希望InNumberFrames能够以44.1khz的采样率获得4410个样本/帧,但它总是在每个render(callback)上带来470-471帧。虽然我对这两者感到困惑,但现在又出现了另一个变量。 maximumFramesPerSlice?

它的默认值为4096。
在coreAudio词汇表中说
“片段:在一个音频单元的一个渲染周期内请求和处理的帧数”

那么为什么每个渲染中有470帧。

我将非常感谢您的帮助

最佳答案

iOS中的缓冲区持续时间仅是首选持续时间。操作系统可以尝试使用接近于此配置的首选项的值,但是可以自由使用不同的持续时间(基于当前设备的硬件功能,设备的状态,其他正在运行的音频应用程序以及操作系统的版本等)。 ,甚至在应用程序运行时更改此持续时间(例如,在显示“锁定”时增加该持续时间)。

因此,iNumberOfFrames除以采样率就是在当前回调中呈现的音频数据的实际持续时间。此持续时间可以在连续的回调之间改变。操作系统选择持续时间,而不是应用程序。该应用程序仅建议偏好。

如果实际缓冲区的大小大于maximumFramesPerSlice,则音频单元将返回错误,因此,最好将maximumFramesPerSlice保留在4096,以防止在锁定显示和/或发生涉及应用外部操作系统的其他情况时导致应用崩溃。

每帧470到471个样本表明,实际的硬件ADC芯片以48000 sps的速度运行,并且向处理器提供了512个样本的DMAing缓冲区,在将结果提交给您的应用之前,操作系统会在44100处将其重采样为470.x样本。

关于ios - maximumFramesPerSlice,inNumberFrames和缓冲区持续时间之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26530030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com