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许可证)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探