2

我是语音编码的新手,现在我成功地在文件中录制了麦克风,并每 10 秒将其保存在具有SaveRecordtoFile功能的文件中(这样做没有问题)

现在我想从记录的数据中删除例如 2 秒,所以我的输出将是 8 秒而不是 10 秒,randomTime数组0中是我想要删除的秒数......

在 for 循环中,我将数据复制到waveHeader->lpData新缓冲区中if (randomTime[i] == '1')

看起来这是一个真正的算法,应该可以工作,但问题是输出,一些输出很好(大约 70% 或更多),但其中一些已损坏

我认为我的代码有错误,但我调试了这段代码几天,但我不明白问题出在哪里?

由于我 70% 或更多的输出都很好,我认为这不是因为字节或样本

4

1 回答 1

1

您的代码可以将样本分开,之后流不同步并且您会听到很大的噪音。

它是怎么发生的?您的样本大小为 4 个字节。所以你绝不能复制任何不是 4 的倍数的东西。10 秒的音频将占用 10x48000×4=1920000 字节。但是Sleep(10000)总是接近 10 秒,但不完全是 10 秒。所以你可以获得 1920012 个字节。然后你做:

dwSamplePerSec = waveHeader->dwBytesRecorded / 10; // 10 Secs

返回 192001(不是 4 的倍数)并且蒸汽不​​同步。如果幸运的话,您会在 10 秒内收到 1920040 字节,并且在除以 10 后仍然是 4 的倍数,您就可以了。

于 2019-06-11T05:48:52.550 回答