我正在尝试录制音频并将其转换为python中的文本。以下是我的代码。
import speech_recognition as sr
import sounddevice as sd
import numpy as np
import os
from scipy.io.wavfile import write
fs = 44100 # Sample rate
seconds = 15 # Duration of recording
print("Start recording the answer.....")
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
recognizer = sr.Recognizer()
sound = "output.wav"
with sr.AudioFile(sound) as source:
recognizer.adjust_for_ambient_noise(source)
print("Converting the answer to text...")
audio = recognizer.listen(source)
try:
text = recognizer.recognize_google(audio)
print("The converted text:" + text)
except Exception as e:
print('Exception',e)
当我播放output.wav文件时,里面什么都没有。因此语音到文本的转换也会出现异常。有人能给出一个解决方案吗?提前谢谢。
我会尝试加载另一个wav文件,分别测试声音设备和语音识别器部分。我正在做类似的事情,双方单独工作,但由于声音设备在float 32中写入波形,所以一起出现了问题,而且speech_recognizer似乎需要int32。也许在转换为int16的地方出了问题。如果你使用大胆,你确定它的沉默吗?我试着用wavio来写文件,但从文档中看不出采样宽度应该是多少。
更新:通过在开头添加以下行,我可以让sounddevice录制音频以使用sound_recognition库:sounddevice.default.dtype='int32', 'int32'
输入和输出的默认值都是float32。出于某种原因,我不明白,只更改输出并不能解决问题。声音文件或科幻作品的文件写作。此外,大胆仍然认为wav是float32……我认为bc可能发生了其他事情,当我从大胆导出文件时,标头看起来与不兼容的文件相同,但speech_recognizer接受了它。