我有以下我无法正确实现的功能。
我一遍又一遍地研究它,以某种方式总是发现错误。

我已经编码了一些音频数据。
音频数据被编码为每个3字节的“帧”。

例如这样:

Frame #1
0
1
2

Frame #2
3
4
5

Frame #3
6
7
8


现在,当我想解码一些音频时(例如,从3字节长度的字节位置4开始),我首先必须计算将在哪个帧中找到该音频,我必须解码多少帧,以及解码后的偏移量是多少。框架是。

在这种情况下,我将不得不读取第2帧和第3帧,并且偏移量将为1。

我尝试设置以下空白:

int g_iByteSize1FrameDecoded = 3;

void CalcFrames(unsigned long uByteStart,unsigned long uByteCount,unsigned long &uStartFrame,unsigned long &uFramesToRead,unsigned long& uOffset)
{
    ////calculate in which decoded frame the byte from uByteStart would be found in
    uStartFrame = ((uByteStart) / g_iByteSize1FrameDecoded) + 1;
    unsigned long iEndFrame = ((uByteStart + uByteCount) / g_iByteSize1FrameDecoded) + 1;

    uFramesToRead = (iEndFrame - uStartFrame + 1);

    uOffset = (uByteStart) % g_iByteSize1FrameDecoded;
}


但这只是行不通,总会出错...四舍五入,数学本身...

可能会有一些数学技能的人看看我的错误可能在哪里吗?

最佳答案

字节i在帧i / 3中在偏移i%3处:

void CalcFrames(unsigned long uByteStart,unsigned long uByteCount,unsigned long &uStartFrame,unsigned long &uFramesToRead,unsigned long& uOffset) {
    uStartFrame = uByteStart / g_iByteSize1FrameDecoded + 1;
    uOffset = uByteStart % g_iByteSize1FrameDecoded;
    unsigned long lastFrame = (uByteStart + uByteCount - 1) / g_iByteSize1FrameDecoded + 1;
    uFramesToRead = lastFrame - uStartFrame + 1;
}

关于c++ - 带舍入的C++函数(跨平台),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21008619/

10-11 07:47