python音频分析(一)绘制wav的时域频域图

一.引入

时域图:x轴为时间,y轴为振幅
频域图:x轴为频率,y轴为振幅
(上述频域图为线性振幅谱,还另有对数振幅谱、自功率谱,y轴不是单纯振幅)

时域与频域的直观关系见下图

二.画时域图

1.读入wav文件
(pyaudio.PyAudio)
2.波形数据转换为数组
(numpy.frombuffer )
3.构建横坐标
(numpy.arange)
4.画图
(matplotlib)

import wave
import pyaudio
import pylab
import numpy as np
import matplotlib.pyplot as pltdef get_framerate(wavefile):'''输入文件路径,获取帧率'''wf=wave.open(wavfile,"rb")#打开wavp = pyaudio.PyAudio()#创建PyAudio对象params = wf.getparams()#参数获取nchannels, sampwidth, framerate, nframes = params[:4]return frameratedef get_nframes(wavefile):'''输入文件路径,获取帧数'''wf=wave.open(wavfile,"rb")#打开wavp = pyaudio.PyAudio()#创建PyAudio对象params = wf.getparams()#参数获取nchannels, sampwidth, framerate, nframes = params[:4]return nframesdef get_wavedata(wavfile):'''输入文件路径,获取处理好的 N-2 左右声部数组'''#####1.读入wave文件wf=wave.open(wavfile,"rb")#打开wavp = pyaudio.PyAudio()#创建PyAudio对象params = wf.getparams()#参数获取nchannels, sampwidth, framerate, nframes = params[:4]stream = p.open(format=p.get_format_from_width(sampwidth),channels=nchannels, rate=framerate,output=True)#创建输出流#读取完整的帧数据到str_data中,这是一个string类型的数据str_data = wf.readframes(nframes)wf.close()#关闭wave#####2.将波形数据转换为数组# N-1 一维数组,右声道接着左声道wave_data = numpy.frombuffer(str_data, dtype=numpy.short)#2-N N维数组wave_data.shape = -1,2#将数组转置为 N-2 目标数组wave_data = wave_data.Treturn wave_datadef plot_timedomain(wavfile):'''画出时域图'''wave_data=get_wavedata(wavfile) #获取处理好的wave数据framerate=get_framerate(wavfile) #获取帧率nframes=get_nframes(wavfile) #获取帧数#####3.构建横坐标time = numpy.arange(0,nframes)*(1.0/framerate)#####4.画图pylab.figure(figsize=(40,10))pylab.subplot(211)pylab.plot(time, wave_data[0]) #第一幅图:左声道pylab.subplot(212)pylab.plot(time, wave_data[1], c="g") #第二幅图:右声道pylab.xlabel("time (seconds)")pylab.show()return None
plot_timedomain(wavfile=wavfile)

三.画频域图

1.取出所需部分进行傅里叶变换,并得到幅值*
(numppy.fft.rfft)
2.计算出作为x轴的频率列
( np.linspace)
3.画图
(matplotlib)

def plot_freqdomain(start,fft_size,wavfile):'''画出频域图'''waveData=get_wavedata(wavfile) #获取wave数据framerate=get_framerate(wavfile) #获取帧率数据#### 1.取出所需部分进行傅里叶变换,并得到幅值# rfft,对称保留一半,结果为 fft_size/2-1 维复数数组fft_y1 = np.fft.rfft(waveData[0][start:start+fft_size-1])/fft_size #左声部fft_y2 = np.fft.rfft(waveData[1][start:start+fft_size-1])/fft_size #右声部#### 2.计算频域图x值#最小值为0Hz,最大值一般设为采样频率的一半freqs = np.linspace(0, framerate/2, fft_size/2)#### 3.画图plt.figure(figsize=(20,10))pylab.subplot(211)plt.plot(freqs, np.abs(fft_y1))pylab.xlabel("frequence(Hz)")pylab.subplot(212)plt.plot(freqs, np.abs(fft_y2),c='g')pylab.xlabel("frequence(Hz)")plt.show()
plot_freqdomain(10000,4000,wavfile)

python音频分析(一)绘制wav的时域频域图相关推荐

  1. python音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程

    『开发技巧』Python音频操作工具PyAudio上手教程 ​ 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...

  2. python音频频谱_Python 读取WAV音频文件 画频谱的实例

    Python 读取WAV文件 import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用p ...

  3. python音频频谱_Python读取WAV音频文件 画频谱的方法

    Python 读取WAV文件 import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用p ...

  4. R统计绘图-PCA分析及绘制双坐标轴双序图

    zhe 点击名片   关注我们 有师妹来咨询,怎样画类似于上图的双坐标轴PCA双序图.正好之前虽然PCA和RDA分析及绘图都写过教程,但是变量分析结果没有在图中显示,所以使用R统计绘图-环境因子相关性 ...

  5. python绘制频谱图,在音频分析中绘制频谱图

    I am working on speech recognition using neural network. To do so I need to get the spectrograms of ...

  6. python音频分析工具_Python对音频进行测试及频谱分析

    语音识别领域对音频文件进行频谱分析是一项基本的数据处理过程,同时也为后续的特征分析准备数据. 1.前驱知识 Python需要使用的相关库: wave https://docs.python.org/3 ...

  7. python音频分析工具_python – 鸟鸣音频分析 – 查找两个剪辑的匹配程度

    要做出这个答案,因为评论太久了. 我基本上在这个领域工作,所以我觉得我有一些知识.显然,从我的立场来看,我建议使用音频而不是图像.我还建议使用MFCC作为特征提取(您可以将其视为总结/表征音频特定子带 ...

  8. 【Python绘图】pyecharts绘制南丁格尔玫瑰图

    from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...

  9. python图片分析中央气象台降水量预报_全国天气降水量预报图数据接口

    全国天气降水量预报图接口 免费在线测试此接口(需要登录) 接口每两小时更新一次,一天调取1-2次即可,返回3张图:24.48.72小时,请勿频繁调用!. 请求方式及url: 请求方式:GET 接口地址 ...

  10. python音频实时频谱分析_基于python的音频设计及频谱分析

    74 Internet Technology 互联网 + 技术 一.引言 WAV 是 Microsoft 开发的一种声音文件格式,虽然它支持多种压缩格式,但是它通常被用来保存未压缩的声音数据(PCM ...

最新文章

  1. 东北大米为何如此好吃
  2. python怎么创建方法_python中的__new__方法
  3. 刚毕业的ERP实施顾问做甲方
  4. gambas 编译_使用Gambas进行BASIC编程,适合初学者
  5. 1024告诉身边的程序员,今天他过节日
  6. javascript Node对象
  7. linux 常用正则表达式,Linux中基本正则表达式
  8. 制作CAB自解压文件的工具——IExpress
  9. 高级恶意软件技术新挑战——突破主动防御
  10. buffer pool mysql_理解Mysql中的Buffer pool
  11. python求解LeetCode习题Maximum Gap
  12. 2017第八届(C/C++)B组蓝桥国赛题
  13. Yarn 和 NPM 国内快速镜像(淘宝镜像)
  14. PHP教程一环境搭建 Wampserve 下载和安装
  15. 普渡大学统计与计算机科学,普渡大学西拉法叶分校
  16. 李开复写给中国大学生的七封信(2/7)
  17. python fft ifft
  18. hdu 1348 wall
  19. 行内元素和块级元素:内联(行级)元素不能设置margin-top
  20. mysql workbench 6.3 ce 中文版_Mysql workbench

热门文章

  1. 发送文件夹不存在或被删除
  2. 972_MISRA C 2004规范解读1
  3. matlab 全局符号变量,优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国
  4. 一个 可以在线播放 m3u8 的网页
  5. 服务器虚拟机迁移的6个步骤,KVM 虚拟机迁移(示例代码)
  6. 今日头条笔试 机器人跳跃问题
  7. 【3dmax千千问】初学3dmax插件神器第22课:3dmax效果图渲染进阶教程|VRAY相机为何要与VRAY灯光、VRAY材质、VRAY贴图等进行匹配呢?食住玩3dmax千千问教程
  8. Linux 添加管理员用户
  9. oracle语句执行过程
  10. 微盟致远OA聚水潭YonSuite系统对接集成整体解决方案