gpt4 book ai didi

cocoa - AudioUnit 的数据包和帧大小使用什么值

转载 作者:行者123 更新时间:2023-12-03 16:13:37 24 4
gpt4 key购买 nike

我正在熟悉如何使用 AudioUnit 来播放声音,但对数据包和帧的概念感到困惑。我想知道:

  • AudioUnit上下文中数据包和帧的定义是什么

  • 每个数据包使用多个样本以及每个帧使用多个数据包的交易是什么

我提问的原因:在迄今为止我看到的所有代码示例中,数据包本质上是一个示例,对于 16 位立体声流,通常 mBytesPerPacket=4。 mFramesPerPacket 通常为 1,使得帧、数据包和样本(都是立体样本)成为相同的概念。

我期望数据包和/或帧成为样本缓冲区,即一组 256 或 512 个连续样本,驱动程序可以指向并线性读取它们。将帧/数据包大小减少到一个样本似乎会给负责播放数据的任何驱动程序带来不必要的压力。我缺少什么?

最佳答案

首先,一些定义:

  • 帧是音频数据的单个样本,代表给定时间点单个 channel 的信号值。
  • 数据包是一组帧,通常是指给定时间点所有 channel 的帧集。
  • 缓冲区是一组交付用于处理的帧。

您不应该混淆数据包和帧,事实上 mFramesPerPacket 通常应设置为 1。这并不意味着您的 AudioUnit 的 render 方法将在每帧获得回调。如果您想控制发生这种情况的频率,则需要将 kAudioSessionProperty_PreferredHardwareIOBufferDuration 属性设置为首选缓冲区大小。设置此属性并不能保证您所要求的确切缓冲区大小,但系统会尝试为您提供接近此值的值。

关于cocoa - AudioUnit 的数据包和帧大小使用什么值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561462/

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