错误:未知格式:3在尝试将wav文件转换为Python中的文本时出现

错误:未知格式:3在尝试将wav文件转换为Python中的文本时出现,python,wav,speech-to-text,voice-recording,Python,Wav,Speech To Text,Voice Recording,我需要从麦克风录制音频并将其转换为文本。我用从网上下载的几个音频剪辑尝试了这个转换过程,效果很好。但当我试图转换从麦克风录制的音频片段时,会出现以下错误 回溯(最近一次呼叫最后一次): 文件“C:\Users\HP\AppData\Local\Programs\Python\37\lib\site packages\speech\u recognition\u\u init\u\u.py”,第203行,在输入 self.audio\u reader=wave.open(self.filename

我需要从麦克风录制音频并将其转换为文本。我用从网上下载的几个音频剪辑尝试了这个转换过程,效果很好。但当我试图转换从麦克风录制的音频片段时,会出现以下错误

回溯(最近一次呼叫最后一次): 文件“C:\Users\HP\AppData\Local\Programs\Python\37\lib\site packages\speech\u recognition\u\u init\u\u.py”,第203行,在输入 self.audio\u reader=wave.open(self.filename\u或\u fileobject,“rb”) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python37\lib\wave.py”,第510行,打开 返回波读数(f) 文件“C:\Users\HP\AppData\Local\Programs\Python\37\lib\wave.py”,第164行,位于init 自初始化fp(f) 文件“C:\Users\HP\AppData\Local\Programs\Python\Python37\lib\wave.py”,第144行,在initfp中 self.\u read\u fmt\u块(chunk) 文件“C:\Users\HP\AppData\Local\Programs\Python\37\lib\wave.py”,第269行,在\u read\u fmt\u块中 引发错误('未知格式:%r'(wFormatTag,)) wave.Error:未知格式:3

我正在尝试的代码如下

import speech_recognition as sr
import sounddevice as sd
from scipy.io.wavfile import write

# recording from the microphone
fs = 44100  # Sample rate
seconds = 3  # Duration of recording

myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
sd.wait()  # Wait until recording is finished
write('output.wav', fs, myrecording)  # Save as WAV file
sound = "output.wav"
recognizer = sr.Recognizer()

with sr.AudioFile(sound) as source:
     recognizer.adjust_for_ambient_noise(source)
     print("Converting audio file to text...")
     audio = recognizer.listen(source)

     try:
          text = recognizer.recognize_google(audio)
          print("The converted text:" + text)

     except Exception as e:
          print(e)

我看了回答的类似问题,他们说我们需要将其转换为不同的wav格式。有人能为我提供一个代码或库,我可以使用这个转换?提前感谢。

您以浮点格式编写了文件:

soxi output.wav 

Input File     : 'output.wav'
Channels       : 2
Sample Rate    : 44100
Precision      : 25-bit
Duration       : 00:00:03.00 = 132300 samples = 225 CDDA sectors
File Size      : 1.06M
Bit Rate       : 2.82M
Sample Encoding: 32-bit Floating Point PCM
波形模块无法读取它

要存储int16格式,请执行以下操作:

import numpy as np
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
sd.wait()  # Wait until recording is finished
write('output.wav', fs, myrecording.astype(np.int16))  # Save as WAV file in 16-bit format
方法1 您听不到任何声音,因为您将浮点值强制转换为不正确的整数。在WAV文件中,信号中的浮点值从-1变为1,16位PCM(整数)值从-32768变为32767。所以本质上,你的信号是由类似
[-1.4240753e-05,4.3602209e-05,1.0526689e-06。。。,
1.7763522e-02、1.6644333e-02、6.7148944e-03]


[0,0,0,…,0,0,0]

上述转换不正确

要将文件正确转换为整数(PCM格式),您需要转换,而不是转换。下面给出了一种方法“def float2pcm(sig,dtype='int16'): sig=np.asarray(sig) dtype=np.dtype(dtype)

因此,您可以在使用
sd.wait
行之后使用以下代码

float2pcm(myrecording)
方法2 另一种(更简单的)解决问题的方法是使用
sounddevice
库的功能在内部执行此操作,方法是调用以下函数进行录制

import numpy as np
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2, dtype=np.int16)

共享音频文件上的链接这是音频文件的链接。嗨!你的回答解决了波浪误差。但是现在我听不到output.wav文件中的任何内容。你有什么解决办法吗?
import numpy as np
myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2, dtype=np.int16)