错误:未知格式:3在尝试将wav文件转换为Python中的文本时出现
我需要从麦克风录制音频并将其转换为文本。我用从网上下载的几个音频剪辑尝试了这个转换过程,效果很好。但当我试图转换从麦克风录制的音频片段时,会出现以下错误 回溯(最近一次呼叫最后一次): 文件“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 我正在尝试的代码如下错误:未知格式: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
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)