使用Python中的wav文件记录音频和语音到文本的转换

时间:2020-03-09 10:32:21

标签: python audio speech-recognition wav speech-to-text

我正在尝试录制音频并将其转换为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文件时,其中没有任何内容。因此,语音到文本的转换也有例外。有人可以提供解决方案吗? 预先感谢。

1 个答案:

答案 0 :(得分:0)

我会尝试加载另一个wav文件来分别测试sounddevice和speech_recognizer部件。我正在做类似的事情,并且双方都可以单独工作,但是由于声音设备在float 32中写wavs,所以一起出现了一个问题,而且Speech_recognizer似乎需要int32。转换为int16的地方可能出了问题。如果您使用大胆,您确定它保持沉默吗?我尝试使用wavio来代替写文件,但从文档中无法确定应该使用的sampwidth。

更新:通过在开头添加以下行,我可以使sounddevice记录音频以与sound_recognition库一起工作:sounddevice.default.dtype='int32', 'int32'输入和输出的默认值均为float32。由于某种原因,我不明白,仅更改输出并不能解决问题。声音文件或scipy用于文件写入。 另外,audacity仍然相信wavs是float32 ...我认为从audacity导出文件时,可能在bc上还有其他事情发生,标头看起来与不兼容的文件相同,但是Speech_recognizer接受它。

相关问题