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

时间:2020-07-03 14:38:44

标签: python wave

我在将pjsua记录的wav文件与Speech_recognition一起使用,当我尝试发送文件内容时,它总是以错误msg结尾。

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'))后,音频就变成了垃圾,就像蚂蚁的讲话一样。

我真的对声音文件了解得不够多,无法理解“通道”,“采样宽度”,“帧速率”,“ nframes”,“ comptype”和“ compname”的含义...

1 个答案:

答案 0 :(得分:1)

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

我对SpeechRecognition模块一无所知(我假设这就是您正在使用的东西?)。我也对pjsua一无所知。我的猜测是,pjsua可能会在标头元数据中的某些其他块中烘烤,而SpeechRecognition API对此并没有期望。您是否有可能通过保管箱等共享wave文件?

此外,您的音频听起来像“蚂蚁说话”的原因是因为wave文件包含的元数据与写入新wave文件的元数据之间存在差异。 您的wave文件是mono文件-这意味着一个频道,您编写了两个频道。您的文件的采样率也为16khz,但您写的为44.1khz。