音频操作和删除音频的某些部分

Audio manipulation and delete some part of the audio

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

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

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

这似乎是一个真正的算法并且应该有效,但问题是输出,一些输出是好的(大约 70% 或更多)但其中一些已损坏

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

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

您的代码可能会分解样本,之后流就会不同步,您会听到很大的噪音。

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

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

那个 returns 192001(不是 4 的倍数)和 Steam 不同步。如果你幸运的话,你会在 10 秒内收到 1920040 字节,并且在除以 10 后仍然是 4 的倍数,你没问题。