【问题标题】:Understanding AurioTouch了解 AurioTouch
【发布时间】:2012-06-26 10:22:11
【问题描述】:

在 iPhone 的 AurioTouch 示例中,以下代码用于将样本添加到绘制缓冲区中,该缓冲区在渲染到屏幕时使用

SInt8 *data_ptr = (SInt8 *)(ioData->mBuffers[0].mData);
for (int i=0; i<numFrames; i++)
{
    if ((i+drawBufferIdx) >= drawBufferLen)
    {
        cycleOscilloscopeLines();
        drawBufferIdx = -i;
    }

    drawBuffers[0][i + drawBufferIdx] = data_ptr[2];
    data_ptr += 4;
}

我简直无法理解为什么会这样。实际的 mData 缓冲区包含 SInt32 个固定点 8.24 LPCM 样本。

但是,循环似乎将每个样本的第 3 个字节提取为 SInt8,并使用该值(范围从 -128 到 +127)来表示样本。

如果样本是 24 位值,这对样本来说是一个有效值吗?为什么它查看 SInt32 的第 3 个字节并转换为 SInt8?

我很困惑。感谢任何可以向我解释的人!

【问题讨论】:

    标签: iphone ios core-audio


    【解决方案1】:

    24 位数字的前 8 位是最重要的部分。相对于全尺寸,剩余的不太重要的部分太小,无法在 iPhone 显示器上显示。最高有效 8 位位于内存中 little-endian 24 位数据类型的第 3 个字节中。

    【讨论】:

    • 谢谢。我在这里详细说明了这个答案:kevatron.co.uk/understanding-auriotouch
    • 我也在尝试将 auriotouch 项目集成到我的应用程序中。我已经尝试了很长时间,但我仍然无法弄清楚。那么,你能帮我解决这个问题吗?
    • 同样的问题,谁能帮帮我@TheX-Coder
    • 我有代码。 ping我你的邮件ID,我会发过去的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多