我是语音编码新手,现在我成功地在文件中录制麦克风,并将每 10 秒保存在一个文件中SaveRecordtoFile
功能(这样做没有问题)
现在我想从记录的数据中删除例如 2 秒,这样我的输出将是 8 秒而不是 10 秒,在randomTime
array 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
返回 192001(不是 4 的倍数)并且蒸汽不同步。如果你幸运的话,你会在 10 秒内收到 1920040 字节,并且除以 10 后仍然是 4 的倍数,那就没问题了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)