使用Python对音频进行频谱分析
2017-08-20 11:26
267 查看
原文链接:http://blog.sina.com.cn/s/blog_40793e970102w3m2.html本篇尝试使用Python对音频文件进行频谱分析。在语音识别领域对音频文件进行频谱分析是一项基本的数据处理过程,同时也为后续的特征分析准备数据。直接上Python代码:
import wave import pyaudio import numpy import pylab #打开WAV文档,文件路径根据需要做修改 wf = wave.open("D:\\Python\\wavs\\Do-piano-2.20s.wav", "rb") #创建PyAudio对象 p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) nframes = wf.getnframes() framerate = wf.getframerate() #读取完整的帧数据到str_data中,这是一个string类型的数据 str_data = wf.readframes(nframes) wf.close() #将波形数据转换为数组 # A new 1-D array initialized from raw binary or text data in a string. wave_data = numpy.fromstring(str_data, dtype=numpy.short) #将wave_data数组改为2列,行数自动匹配。在修改shape的属性时,需使得数组的总长度不变。 wave_data.shape = -1,2 #将数组转置 wave_data = wave_data.T #time 也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标 #time = numpy.arange(0,nframes)*(1.0/framerate) #绘制波形图 #pylab.plot(time, wave_data[0]) #pylab.subplot(212) #pylab.plot(time, wave_data[1], c="g") #pylab.xlabel("time (seconds)") #pylab.show() # # 采样点数,修改采样点数和起始位置进行不同位置和长度的音频波形分析 N=44100 start=0 #开始采样位置 df = framerate/(N-1) # 分辨率 freq = [df*n for n in range(0,N)] #N个元素 wave_data2=wave_data[0][start:start+N] c=numpy.fft.fft(wave_data2)*2/N #常规显示采样频率一半的频谱 d=int(len(c)/2) #仅显示频率在4000以下的频谱 while freq[d]>4000: d-=10 pylab.plot(freq[:d-1],abs(c[:d-1]),'r') pylab.show()
实验结果
图1:本文博主发“啊”音的频谱分析图:
图2:博主女儿(4岁半)发“啊”音的频谱分析图:
图3:IPhone上音乐软件发“Do”音(C4)的频谱分析图:
图4:博主发“Do”音的频谱分析图:
相关文章推荐
- 使用Python进行聚类分析
- 使用 profile 进行python代码性能分析
- 使用cProfiler对Python程序进行性能分析
- 使用python中的matplotlib进行绘图分析数据
- 利用 Python 进行数据分析(三)使用 IPython 提高开发效率
- 使用python中的matplotlib进行绘图分析数据
- 像Excel一样使用Python进行数据分析 Dataframe
- Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据
- 【机器学习实战-python3】使用Apriori算法进行关联 分析
- 利用Python进行数据分析(3) 使用IPython提高开发效率
- 转:使用Python对音频进行频谱分析
- 使用MATLAB进行频谱分析
- PythonStock(12):使用python,pandas进行股票分析
- Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)
- Python 文本挖掘:使用机器学习方法进行情感分析(一、特征提取和选择)
- 使用python,pandas对外汇储备进行预测分析
- 使用opencv_python进行视频分析遇到的bgsegm问题
- 使用python进行数据分析
- PythonStock(9):使用优矿uqer.io 进行简单的数据分析