我生成了一个 .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)
Run Code Online (Sandbox Code Playgroud)
如果我使用我的 .wav 文件,我会收到以下错误:
ValueError:无法将音频文件读取为 PCM WAV、AIFF/AIFF-C 或 Native FLAC;检查文件是否损坏或其他格式
如果我用声音文件保存这个 .wav 文件,情况会略有改善:
import soundfile as sf
wav, samplerate = sf.read(wav_path)
sf.write(saved_wav_path, original_wav, fs)
Run Code Online (Sandbox Code Playgroud)
然后将新的 saved_wav_path 加载回第一个代码块,这次我得到:
如果不是 isinstance(actual_result, dict) 或 len(actual_result.get("alternative", [])) == 0: raise UnknownValueError()
音频文件被保存为
wavfile.write(wav_path, fs, data)
Run Code Online (Sandbox Code Playgroud)
其中 wav_path = 'data.wav'。有任何想法吗?
解决方案:
以下列方式保存音频数据会生成正确的 .wav 文件:
import wavio
wavio.write(wav_path, data, fs ,sampwidth=2)
Run Code Online (Sandbox Code Playgroud) 我在Python中使用函数filtfilt,如下所示
import numpy as np
from scipy.signal import filtfilt
a = np.array([1, -lambd]).T
b = np.array([-lambd,1]).T
delayed = filtfilt(b,a,sig)
Run Code Online (Sandbox Code Playgroud)
其中 sig 的形状为 (6,)。结果,我收到以下错误:
ValueError:输入向量x的长度必须大于padlen,即6。
由 scipy.signal 生成。
如果 sig 的形状为 (7,) 或更长,则相同的代码可以正常工作,而对于任何小于 (6,) 的形状,它会返回相同的错误。任何想法?