wave.Error: неизвестный формат: 3 возникает при попытке преобразовать wav-файл в текст в Python - PullRequest
0 голосов
/ 22 февраля 2020

Мне нужно записать звук с микрофона и преобразовать его в текст. Я пробовал этот процесс преобразования, используя несколько аудиоклипов, которые я скачал из Интернета, и он отлично работает. Но когда я пытаюсь преобразовать аудиоклип, записанный с микрофона, выдается следующая ошибка:

Traceback (последний вызов был последним): файл "C: \ Users \ HP \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ speech_recognition__init __. Py ", строка 203, в введите self.audio_reader = wave.open (self.filename_or_fileobject," rb ") файл" C: \ Users \ HP \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ wave.py ", строка 510, в открытом возвращаемом файле Wave_read (f)" C: \ Users \ HP \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ wave.py ", строка 164, в файле init self.initfp (f)" C: \ Users \ HP \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ wave .py ", строка 144, в файле initfp self._read_fmt_chunk (chunk)" C: \ Users \ HP \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ wave.py ", строка 269, в _read_fmt_chunk вывести ошибку ('неизвестный формат:% 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. Может ли кто-нибудь предоставить мне код или библиотеку, которую я могу использовать для этого преобразования? Заранее спасибо.

1 Ответ

1 голос
/ 22 февраля 2020

Вы записали файл в формате с плавающей запятой:

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
...