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()



如果你觉得博客内容有帮助,请收藏书签。
版权声明:转载文章之后必须在文章页面给出原文连接创意共享3.0许可证
posted @   longRookie  阅读(635)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
最简单即最美
有了信仰,自己要坚持努力 2017.07.09 21:34


点击右上角即可分享
微信分享提示