import librosa
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft
import librosa.display



plt.figure(dpi=600) # 将显示的所有图分辨率调高
matplotlib.rc("font",family='SimHei') # 显示中文
matplotlib.rcParams['axes.unicode_minus']=False # 显示符号


def displayWaveform(sample1, sample2,sample3): # 显示语音时域波形
    '''
    display waveform of a given speech sample
    :param sample_name: speech sample name
    :param fs: sample frequency
    :return:
    '''
    samples1, sr1 = librosa.load(sample1, sr=16000)
    samples2, sr2 = librosa.load(sample2, sr=16000)
    samples3, sr3 = librosa.load(sample3, sr=16000) # 读取音频文件

    min_len = min(len(samples1), len(samples2), len(samples3)) # 取三个样本中最短的长度
    samples1 = samples1[:min_len]
    samples2 = samples2[:min_len]
    samples3 = samples3[:min_len]

    time = np.arange(0, min_len) * (1.0 / sr1)

    plt.figure(figsize=(18, 8))
    plt.plot(time, samples1)
    plt.title("原音频时域波形",fontsize=18)
    plt.xlabel("时长(秒)",fontsize=18)
    plt.ylabel("振幅",fontsize=18)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)

    plt.plot(time, samples2)
    plt.title("改进前降噪后音频时域波形",fontsize=18)
    plt.xlabel("时长(秒)",fontsize=18)
    plt.ylabel("振幅",fontsize=18)
    plt.subplots_adjust(hspace=0.5) # 调整子图间距
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)

    plt.plot(time, samples3) # 传入读取到的音频数据
    plt.title("改进后降噪后音频时域波形", fontsize=18)
    plt.xlabel("时长(秒)", fontsize=18)
    plt.ylabel("振幅", fontsize=18)
    plt.subplots_adjust(hspace=0.5)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    plt.show()


if __name__ == '__main__':
    sample1 = r'p335_023.wav'
    sample2 = r'enhanced_p335_023.wav'
    sample3 = r'enhanced_p335_023G_88_0.2559.wav'
    displayWaveform(sample1, sample2,sample3)

代码解释:

  1. 导入必要的库:

    • librosa: 用于加载和处理音频数据
    • matplotlib: 用于绘制图形
    • numpy: 用于数值计算
    • scipy.fft: 用于快速傅里叶变换
    • librosa.display: 用于显示音频数据
  2. 设置图形参数:

    • plt.figure(dpi=600): 设置图形分辨率为 600dpi
    • matplotlib.rc("font",family='SimHei'): 设置字体为 SimHei,以便显示中文
    • matplotlib.rcParams['axes.unicode_minus']=False: 设置负号显示
  3. 定义 displayWaveform 函数:

    • 该函数接收三个音频样本的路径作为参数
    • 使用 librosa.load 加载音频文件,并获取样本数据和采样率
    • 找到三个样本中最短的长度,并截取所有样本到相同的长度
    • 使用 plt.plot 绘制波形图
    • 设置图形标题、轴标签、字体大小等
    • 使用 plt.subplots_adjust 调整子图间距
    • 使用 plt.show 显示图形
  4. 主程序:

    • 定义三个音频样本的路径
    • 调用 displayWaveform 函数显示波形图

运行代码:

  1. 确保安装了所有必要的库。
  2. 将代码保存为 .py 文件,例如 audio_waveform.py
  3. 在终端中运行代码,例如 python audio_waveform.py

修改和使用:

  • 可以修改 sample1, sample2, sample3 变量的值,以显示不同的音频样本。
  • 可以调整图形参数,例如分辨率、字体大小、颜色等。
  • 可以将代码整合到其他程序中,用于分析和处理音频数据。

注意:

  • 代码中使用的音频样本文件需要存在于当前目录中。
  • 如果使用的是其他音频格式,请调整 librosa.load 函数的参数。
  • 如果出现错误,请检查代码是否正确,以及是否安装了必要的库。

使用场景:

  • 音频信号处理
  • 降噪效果评估
  • 语音识别
  • 音频分析
  • 音频编辑
Librosa 音频时域波形对比显示 - Python 代码示例

原文地址: https://www.cveoy.top/t/topic/n7Xz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录