zoukankan      html  css  js  c++  java
  • matplotlib绘制wav文件的波形图


    • date: 2022/1/6
    • author: longRookie
    • title: matplotlib绘制wav文件的波形图

    一、matplotlib绘制wav文件的波形图

    目的:在于理解wav文件的存储格式,并且提取不同声道的语音帧数据;

    关于wav文件的格式:https://codeantenna.com/a/3Mdc0fRshG

    matplotlib可以再美化一下。

    import wave
    import pyaudio
    import pylab
    import numpy as np
    import matplotlib.pyplot as plt
    
    wav_file = 'output1.wav'
    
    wf = wave.open(wav_file, 'rb')
    # 获取参数
    params = wf.getparams()
    # 声道数,采样宽度,帧率,帧数
    nchannels, sampwidth, framerate, nframes = params[:4]
    
    print("声道数:{},采样位数:{},帧率:{},帧数:{}".format(nchannels, sampwidth, framerate, nframes))
    
    # 将所有帧的数据读取到str_data,字符串格式,bytes
    str_data = wf.readframes(nframes)
    # frombuffer会返回一个只读的数组,fromstring会返回一个新的数组,不推荐使用fromstring二进制模式
    wave_data = np.frombuffer(str_data, dtype=np.int16)  # 先默认使用16位的采样位数
    # wave幅值归一化
    wave_data = wave_data * 1.0 / (max(abs(wave_data)))
    # wav文件的存储格式:当处理这种多通道声音时,来自每个通道的单个采样点被交错。先存储左声道的第一个样本。然后,您将存储右声道的第一个样本,依此类推。
    # https://codeantenna.com/a/3Mdc0fRshG
    wave_data = np.reshape(wave_data,[nframes,nchannels]).T
    wf.close()
    
    # 绘制波形图
    y = wave_data[0]
    x = np.arange(nframes)/framerate
    #x = np.linspace(0,1,nframes)
    plt.plot(x,y)
    plt.show()
    
  • 相关阅读:
    移动端rem.js及移动端的一些属性和事件
    win10下nodejs的安装及配置
    $.ajax()在IE9下的兼容性问题
    H5 video自定义视频控件
    js表格排序
    [转]jQuery不同版本区别
    移动端H5多终端适配解决方案
    一个目录结构
    Linux学习
    Python3基础笔记---线程与进程
  • 原文地址:https://www.cnblogs.com/AccompanyingLight/p/15772682.html
Copyright © 2011-2022 走看看