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.xticks(fontsize=12)
    plt.yticks(fontsize=12)

    plt.plot(time, samples3)
    plt.title('改进后降噪后音频时域波形', fontsize=18)
    plt.xlabel('时长(秒)', fontsize=18)
    plt.ylabel('振幅', fontsize=18)
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    
    plt.subplots_adjust(hspace=0.5) # 调整子图间距
    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 用于数值计算。
  2. 设置绘图参数: 设置绘图分辨率、字体、显示中文和符号。
  3. 定义 displayWaveform 函数:
    • 该函数接受三个音频文件路径作为参数。
    • 使用 librosa.load 加载音频文件,并获取音频信号和采样率。
    • 找到三个样本中最短的长度,并将所有样本截取到相同长度。
    • 使用 matplotlib.pyplot.plot 绘制三个样本的时域波形。
    • 设置图标题、坐标轴标签、字体大小等参数。
    • 使用 plt.subplots_adjust 调整子图之间的间距。
  4. 主程序:
    • 定义三个音频文件路径。
    • 调用 displayWaveform 函数,绘制三个样本的时域波形。

使用方法:

  1. 将代码保存为 Python 文件(例如 waveform_comparison.py)。
  2. 将三个音频文件(p335_023.wavenhanced_p335_023.wavenhanced_p335_023G_88_0.2559.wav)放置在与 Python 文件相同的目录下。
  3. 在终端运行 python waveform_comparison.py

代码将生成一个窗口,显示三个音频样本的时域波形图,方便对比降噪前后音频的差异。

Python Librosa: 音频波形可视化与降噪对比

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

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