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()
原文地址:https://www.cnblogs.com/AccompanyingLight/p/15772682.html