在 python 中将 PCM WAV 转换为普通 WAV

Convert PCM WAV to normal WAV in python

我正在使用 speech_recognition 和 pjsua 录制的 wav 文件,当我尝试发送文件内容时,它总是以错误消息结尾。

Audio file could not be read as PCM WAV, AIFF/AIFF-C, or Native FLAC; check if file is corrupted or in another format

文件使用MPV播放正常,查看文件显示是PCM(我用的是file命令)

test2.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

抬头,我发现一个人有类似的 problem,建议的解决方案(使用 wave 库更改一些参数)对我没有用。在我使用 wav.setparams((2, 2, 44100, 0, 'NONE', 'NONE')) 之后,音频变得完全垃圾,就像蚂蚁在说话。

我真的不太了解声音文件,无法理解“channels”、“sampwidth”、“framerate”、“nframes”、“comptype”和“compname”的含义...

您误解了错误消息。 PCM 是波形文件格式所固有的。没有“PCM”版本,然后是“普通”版本 - 波形文件格式始终使用脉冲编码调制 (PCM) - 这实际上只是意味着构成信号的样本是连续数字量化的。如果您的 speech_recognition 函数无法解析 wave 文件,那不是因为与 PCM 相关的任何问题。

我对 SpeechRecognition 模块一无所知(我假设这就是您正在使用的?)。我对 pjsua 也一无所知。我的猜测是 pjsua 可能会在 header meta-data 中烘焙一些额外的块,而 SpeechRecognition API 并没有预料到。您是否有机会通过 dropbox 等方式共享 wave 文件?

此外,您的音频听起来像“蚂蚁说话”的原因是您的 wave 文件包含的 meta-data 与您写入新 wave 文件的 meta-data 之间存在差异。 你的 wave 文件是单声道的——这意味着一个通道,你写了两个。你的文件也有16khz的采样率,但你写的是44.1khz。