语音识别 语音识别项目相关笔记内容
- 语音识别应用范畴
- 语音识别框架
- 语音基本操作
-
- 使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数
- 使用numpy读取pcm格式音频文件
- 读取wav音频文件,并绘制图像
- 读取双声道的wav音频文件,分别绘制不同声道的波形图
- 读取一个采样率为16k的音频,分别绘制出其时域与频域的图
- 音频特征相关内容
- RNN相关内容
- 卷积模块
- 语音识别小项目(音频事件检测)
-
- 项目相关描述
- 项目结构
- 数据集
- 音频数据校验
- 配置文件
- 音频特征抽取
- 模型结构设计
- 超参数
- 训练
- 语音特征提取——动态时间规整(Dynamic Time Warping,简称 DTW)
语音识别应用范畴
语音识别框架
语音基本操作
使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数
import scipy.io.wavfile as wavfile
# 读取 WAV 文件
file_path = 'path_to_your_audio_file.wav'
sampling_rate, data = wavfile.read(file_path)
# 获取采样率
print(f'Sampling Rate: {
sampling_rate} Hz')
# 获取音频长度
# 音频长度 = 样本数 / 采样率
audio_length = data.shape[0] / sampling_rate
print(f'Audio Length: {
audio_length:.2f} seconds')
# 获取通道数
# 如果音频是单声道,data.shape 将返回 (样本数,)
# 如果音频是多声道,data.shape 将返回 (样本数, 通道数)
if len(data.shape) == 1:
channels = 1
else:
channels = data.shape[1]
print(f'Number of Channels: {
channels}')
使用numpy读取pcm格式音频文件
import numpy as np
# 定义PCM文件的路径
pcm_file_path = 'path/to/your/audio.pcm'
# 定义采样率和采样深度
sample_rate = 44100 # 例如,44.1 kHz
sample_depth = 16 # 例如,16-bit PCM
# 读取PCM文件
def read_pcm(file_path, sample_rate, sample_depth):
# 根据采样深度设置数据类型
if sample_depth == 16:
dtype = np.int16
elif sample_depth == 32:
dtype = np.int32
else:
raise ValueError("Unsupported sample depth: {}".format(sample_depth))
# 读取二进制PCM数据并转换为NumPy数组
pcm_data = np.fromfile(file_path, dtype=dtype)
# 返回音频数据和采样率
return pcm_data, sample_rate
# 读取PCM文件数据
audio_data, sr = read_pcm(pcm_file_path, sample_rate, sample_depth)
# 打印音频数据和采样率
print("Sample Rate: {} Hz".format(sr))
print("Audio Data: ", audio_data)
读取wav音频文件,并绘制图像
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
# 读取 WAV 文件
sample_rate, audio_data = wavfile.read('your_audio_file.wav')
# 如果音频是立体声,将其转换为单声道
if audio_data.ndim > 1:
audio_data = audio_data.mean(axis=1)
# 创建时间轴
time_axis = np.linspace(0, len(audio_data) / sample_rate, num=len(audio_data))
# 绘制音频波形
plt.figure(figsize=(15, 5))
plt.plot(time_axis, audio_data, label='Audio waveform')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Waveform of the audio file')
plt.legend()
plt.show()
读取双声道的wav音频文件,分别绘制不同声道的波形图
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
# 读取 WAV 文件
sample_rate, audio_data = wavfile.read('your_stereo_audio_file.wav')
# 检查是否为双声道音频
if audio_data.ndim != 2 or audio_data.shape[1] != 2:
raise ValueError("音频文件不是双声道文件")
# 分离左右声道
left_channel = audio_data[:, 0]
right_channel = audio_data[:, 1]
# 创建时间轴
time_axis = np.linspace(0, len(left_channel) / sample_rate, num=len(left_channel))
# 绘制左声道波形
plt.figure(figsize=(15, 5))
plt.subplot(2, 1, 1)
plt.plot(time_axis, left_channel, label='Left Channel', color='blue')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Left Channel Waveform')
plt.legend()
# 绘制右声道波形
plt.subplot(2, 1, 2)
plt.plot(time_axis, right_channel, label='Right Channel', color='red')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Right Channel Waveform')
plt.legend()
# 显示波形图
plt.tight_layout()
plt.show()
读取一个采样率为16k的音频,分别绘制出其时域与频域的图
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.fftpack import fft
# 读取 WAV 文件
sample_rate, audio_data = wavfile.read('your_audio_file.wav')
# 检查采样率是否为16k
if sample_rate != 16000:
raise ValueError("音频文件的采样率不是16k")
# 如果是立体声,取第一个通道
if audio_data.ndim == 2:
audio_data = audio_data[:, 0]
# 创建时间轴
time_axis = np.linspace(0, len(audio_data) / sample_rate, num=len(audio_data))
# 绘制时域图
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(time_axis, audio_data, label='Time Domain', color='blue')
plt.xlabel('Time [s]')
plt.ylabel('Amplitude')
plt.title('Time Domain Signal')
plt.legend()
# 计算音频的 FFT(快速傅里叶变换)
n = len(audio_data)
audio_fft = fft(audio_data)
audio_fft = np.abs(