在 python 中对.Wav文件进行语音转文字为什么文字不在一行
时间: 2024-09-29 10:11:51 浏览: 39
在Python中,使用特定库如`speech_recognition`处理WAV文件并转换成文本时,音频识别通常会将结果分割成多行,这是因为识别到的每个句子或短语被单独作为一个独立的实体输出。这并非错误,而是为了清晰地展示语音内容的分界。
例如,一段包含多个句子的录音会被分成不同的行,每行对应识别出的一句话。如果你希望得到连续的文字输出而不是按行划分,可以尝试使用` SpeechRecognition`的`continuous=True`选项,但这依赖于所使用的语音识别引擎是否支持这样的设置。
```python
import speech_recognition as sr
r = sr.Recognizer()
audio_file = sr.AudioFile('your_wav_file.wav')
with audio_file as source:
# 使用 continuous=True 进行连续识别
text = r.recognize_google(audio=source, language='zh-CN', continuous=True)
```
相关问题
import os from random import shuffle import pickle import librosa import tensorflow.keras as keras import librosa.display import numpy as np from pandas import Series from matplotlib import pyplot as plt def load_files(audio_dir): files = os.listdir(audio_dir) wav_files = [] for wav in files: if not wav.endswith('.wav'): continue wav_files.append(wav) if not wav_files: print('未找到数据集') shuffle(wav_files) nfiles = len(wav_files) ntrain = int(nfiles * 0.7) return wav_files[: ntrain], wav_files[ntrain:] andio_dir = '../data/recordings/' dataset_pickle = '../tmp/recordings.pk1' train_files, valid_files = load_files(andio_dir) print('训练集样本数为{}\n验证集样本数为{}'.format(len(train_files), len(valid_files))) wave, sr = librosa.load('../data/recordings/0_Agnes_120.wav') plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False librosa.display.waveshow(wave, sr=sr) plt.xlabel('时间(s)', fontsize = 13) plt.ylabel('振幅', fontsize = 13) plt.title('原始语音波形图', fontsize = 13) plt.show() mfcc = librosa.feature.mfcc(wave, sr) plt.imshow(np.flipud(mfcc.T), cmap=plt.cm.jet, aspect=0.2, 运行不出来热力图extent=[0, mfcc.shape[0], 0, mfcc.shape[1]]) plt.title('MFCC特征热力图') plt.show()
这段代码有一个拼写错误。在 `load_files` 函数中,您声明了函数参数为 `audio_dir`,但是在调用函数时拼写为 `andio_dir`,应该将其改为 `audio_dir`。
另外,在 `mfcc` 函数中,您没有指定 `n_mfcc` 参数,默认值为 `20`。如果您要使用默认值,可以忽略传递该参数,或者显式地指定为 `n_mfcc=20`。如果您要使用其他值,可以手动传递该参数,例如:
```python
mfcc = librosa.feature.mfcc(wave, sr, n_mfcc=40)
```
最后,在 `plt.imshow` 函数中,您将 `extent` 参数拆分成两行,应该将其合并为一行,即:
```python
plt.imshow(np.flipud(mfcc.T), cmap=plt.cm.jet, aspect=0.2, extent=[0, mfcc.shape[0], 0, mfcc.shape[1]])
```
import librosa as librosa import pycharts import numpy as np from scipy.fft import rfft, irfft from scipy.io import wavfile import matplotlib.pyplot as plt # 读取音频文件 fs, audio = wavfile.read("C:/Users/H-XUE49/Desktop/语音信号/实验一/雷声.wav") # 将音频转换为单声道信号 audio = np.mean(audio, axis=1) # 计算时间轴 time = np.arange(len(audio)) / fs # 绘制时间波形图 pycharts.plot(time, audio, xlabel="Time (s)", ylabel="Amplitude", title="Time domain waveform of audio signal") # 计算音频信号的自相关函数 autocorr = np.correlate(audio, audio, mode="full") # 取自相关函数的一半作为倒谱 r = autocorr[len(autocorr)//2:] # 计算倒谱 cepstrum = irfft(np.log(np.abs(r))) # 绘制倒谱图 pycharts.plot(np.arange(len(cepstrum)) / fs, cepstrum, xlabel="Time (s)", ylabel="Cepstrum", title="Cepstrum of audio signal")为什么显示ValueError: File format b'ID3\x03' not understood. Only 'RIFF' and 'RIFX' supported.请修改错误
这个错误提示是因为在读取音频文件时,使用的是 `wavfile.read` 函数,但是该函数只支持 WAV 格式的音频文件,而你的音频文件可能不是 WAV 格式的,所以需要使用其他的库来读取音频文件。
例如,如果你的音频文件是 MP3 格式的,可以使用 `pydub` 库将其转换为 WAV 格式,然后再使用 `wavfile.read` 函数读取。
另外,你的代码中有一个语法错误,应该将导入语句放在一行中,而不是分开写。修改后的代码如下:
```python
import librosa
import pycharts
import numpy as np
from scipy.fft import rfft, irfft
from scipy.io import wavfile
import matplotlib.pyplot as plt
# 读取音频文件
audio, fs = librosa.load("C:/Users/H-XUE49/Desktop/语音信号/实验一/雷声.mp3", sr=None, mono=True)
# 计算时间轴
time = np.arange(len(audio)) / fs
# 绘制时间波形图
pycharts.plot(time, audio, xlabel="Time (s)", ylabel="Amplitude", title="Time domain waveform of audio signal")
# 计算音频信号的自相关函数
autocorr = np.correlate(audio, audio, mode="full")
# 取自相关函数的一半作为倒谱
r = autocorr[len(autocorr)//2:]
# 计算倒谱
cepstrum = irfft(np.log(np.abs(r)))
# 绘制倒谱图
pycharts.plot(np.arange(len(cepstrum)) / fs, cepstrum, xlabel="Time (s)", ylabel="Cepstrum", title="Cepstrum of audio signal")
```
阅读全文