gpt4 book ai didi

Python,speech_recognition 工具无法识别 .wav 文件

转载 作者:太空宇宙 更新时间:2023-11-04 00:11:51 25 4
gpt4 key购买 nike

我生成了一个 .wav 音频文件,其中包含一些语音和背景中的一些其他干扰语音。此代码适用于我的测试 .wav 文件:

    import speech_recognition as sr

r = sr.Recognizer()
with sr.WavFile(wav_path) as source:
audio = r.record(source)

text = r.recognize_google(audio)

如果我使用我的 .wav 文件,我会收到以下错误:

ValueError: Audio file could not be read as PCM WAV, AIFF/AIFF-C, or Native FLAC; check if file is corrupted or in another format

如果我用声音文件保存这个 .wav 文件,情况会略有改善:

    import soundfile as sf        

wav, samplerate = sf.read(wav_path)
sf.write(saved_wav_path, original_wav, fs)

然后将新的 saved_wav_path 加载回第一个代码块,这次我得到:

if not isinstance(actual_result, dict) or len(actual_result.get("alternative", [])) == 0: raise UnknownValueError()

音频文件保存为

    wavfile.write(wav_path, fs, data)

其中 wav_path = 'data.wav'。有什么想法吗?

解决方案:

按以下方式保存音频数据会生成正确的 .wav 文件:

    import wavio
wavio.write(wav_path, data, fs ,sampwidth=2)

最佳答案

speech_recognition 包中的代码来看,它似乎使用 Python 标准库中的 wave 来读取 WAV 文件。 Python 的 wave 库不处理浮点 WAV 文件,因此您必须确保对以整数格式保存的文件使用 speech_recognition

SciPy 的函数 scipy.io.wavfile.write 将创建一个整数文件,如果您向它传递一个整数数组。所以如果 data 是一个 float numpy 数组,你可以试试这个:

from scipy.io import wavfile

# Convert `data` to 32 bit integers:
y = (np.iinfo(np.int32).max * (data/np.abs(data).max())).astype(np.int32)

wavfile.write(wav_path, fs, y)

然后尝试使用 speech_recognition 读取该文件。

或者,您可以使用 wavio (我创建的一个小型图书馆)将您的数据保存到 WAV 文件。它还使用 Python 的 wave 库来创建其输出,因此 speech_recognition 应该能够读取它创建的文件。

关于Python,speech_recognition 工具无法识别 .wav 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com