【问题标题】:What values to use for packet and frame size with AudioUnit使用 AudioUnit 的数据包和帧大小使用什么值
【发布时间】:2011-07-30 12:11:04
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: cocoa audio frame packet audiounit


    【解决方案1】:

    首先,一些定义:

    • 是音频数据的单个样本,表示给定时间点单个通道的信号值。
    • 数据包是一组帧,通常是给定时间点所有通道的一组帧。
    • 缓冲区是为处理而交付的一组帧。

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

    【讨论】:

    • 如果模拟器似乎没有响应您请求的kAudioSessionProperty_PreferredHardwareIOBufferDuration,请不要感到困惑,因为根据我的经验,此属性仅影响设备。
    • @Itamar 是的,很好。模拟器使用系统的 CoreAudio 配置,因此在包括这一方面在内的几个方面表现与 iOS 有很大不同。
    • 谢谢。非常感谢您的澄清和定义。
    • m4a 格式的框架尺寸是多少?无法获得幅度值(
    • 只是为了澄清一下,根据 Core Audio Glossary,frame 是“一组样本,其中包含来自音频数据流中每个通道的一个样本”。换句话说,一帧包含所有个通道的样本,而不仅仅是一个。
    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    相关资源
    最近更新 更多