Kev*_*Kev 4 iphone core-audio ios
在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;
}
Run Code Online (Sandbox Code Playgroud)
我根本无法理解为什么会这样.实际的mData缓冲区包含固定点8.24 LPCM 中的SInt32样本.
然而,循环似乎是将每个样本的第3个字节作为SInt8进行提取,并使用该值(范围从-128到+127)来表示样本.
如果样本是24位值,那么这个样本的有效值如何?为什么要查看SInt32的第3个字节并转换为SInt8?
我很迷茫.对任何可以向我解释的人都感到荣幸!
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |