我在将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”的含义...
答案 0 :(得分:1)
您误解了错误消息。 PCM是wave文件格式所固有的。没有“ PCM”版本,然后是“普通”版本-波形文件格式始终使用脉冲编码调制(PCM)-这实际上仅意味着构成您信号的采样被数字化和连续量化。如果您的speech_recognition
函数无法解析wave文件,则不是由于与PCM相关的任何事情。
我对SpeechRecognition
模块一无所知(我假设这就是您正在使用的东西?)。我也对pjsua
一无所知。我的猜测是,pjsua
可能会在标头元数据中的某些其他块中烘烤,而SpeechRecognition
API对此并没有期望。您是否有可能通过保管箱等共享wave文件?
此外,您的音频听起来像“蚂蚁说话”的原因是因为wave文件包含的元数据与写入新wave文件的元数据之间存在差异。 您的wave文件是mono文件-这意味着一个频道,您编写了两个频道。您的文件的采样率也为16khz,但您写的为44.1khz。