python音频分析(一)绘制wav的时域频域图
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的时域频域图相关推荐
- python音频分析工具_『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- python音频频谱_Python 读取WAV音频文件 画频谱的实例
Python 读取WAV文件 import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用p ...
- python音频频谱_Python读取WAV音频文件 画频谱的方法
Python 读取WAV文件 import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用p ...
- R统计绘图-PCA分析及绘制双坐标轴双序图
zhe 点击名片 关注我们 有师妹来咨询,怎样画类似于上图的双坐标轴PCA双序图.正好之前虽然PCA和RDA分析及绘图都写过教程,但是变量分析结果没有在图中显示,所以使用R统计绘图-环境因子相关性 ...
- python绘制频谱图,在音频分析中绘制频谱图
I am working on speech recognition using neural network. To do so I need to get the spectrograms of ...
- python音频分析工具_Python对音频进行测试及频谱分析
语音识别领域对音频文件进行频谱分析是一项基本的数据处理过程,同时也为后续的特征分析准备数据. 1.前驱知识 Python需要使用的相关库: wave https://docs.python.org/3 ...
- python音频分析工具_python – 鸟鸣音频分析 – 查找两个剪辑的匹配程度
要做出这个答案,因为评论太久了. 我基本上在这个领域工作,所以我觉得我有一些知识.显然,从我的立场来看,我建议使用音频而不是图像.我还建议使用MFCC作为特征提取(您可以将其视为总结/表征音频特定子带 ...
- 【Python绘图】pyecharts绘制南丁格尔玫瑰图
from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...
- python图片分析中央气象台降水量预报_全国天气降水量预报图数据接口
全国天气降水量预报图接口 免费在线测试此接口(需要登录) 接口每两小时更新一次,一天调取1-2次即可,返回3张图:24.48.72小时,请勿频繁调用!. 请求方式及url: 请求方式:GET 接口地址 ...
- python音频实时频谱分析_基于python的音频设计及频谱分析
74 Internet Technology 互联网 + 技术 一.引言 WAV 是 Microsoft 开发的一种声音文件格式,虽然它支持多种压缩格式,但是它通常被用来保存未压缩的声音数据(PCM ...
最新文章
- 东北大米为何如此好吃
- python怎么创建方法_python中的__new__方法
- 刚毕业的ERP实施顾问做甲方
- gambas 编译_使用Gambas进行BASIC编程,适合初学者
- 1024告诉身边的程序员,今天他过节日
- javascript Node对象
- linux 常用正则表达式,Linux中基本正则表达式
- 制作CAB自解压文件的工具——IExpress
- 高级恶意软件技术新挑战——突破主动防御
- buffer pool mysql_理解Mysql中的Buffer pool
- python求解LeetCode习题Maximum Gap
- 2017第八届(C/C++)B组蓝桥国赛题
- Yarn 和 NPM 国内快速镜像(淘宝镜像)
- PHP教程一环境搭建 Wampserve 下载和安装
- 普渡大学统计与计算机科学,普渡大学西拉法叶分校
- 李开复写给中国大学生的七封信(2/7)
- python fft ifft
- hdu 1348 wall
- 行内元素和块级元素:内联(行级)元素不能设置margin-top
- mysql workbench 6.3 ce 中文版_Mysql workbench
热门文章
- 发送文件夹不存在或被删除
- 972_MISRA C 2004规范解读1
- matlab 全局符号变量,优化全局变量使用
- MATLAB Simulink Example
- MathWorks 中国
- 一个 可以在线播放 m3u8 的网页
- 服务器虚拟机迁移的6个步骤,KVM 虚拟机迁移(示例代码)
- 今日头条笔试 机器人跳跃问题
- 【3dmax千千问】初学3dmax插件神器第22课:3dmax效果图渲染进阶教程|VRAY相机为何要与VRAY灯光、VRAY材质、VRAY贴图等进行匹配呢?食住玩3dmax千千问教程
- Linux 添加管理员用户
- oracle语句执行过程
- 微盟致远OA聚水潭YonSuite系统对接集成整体解决方案