一、wav格式文件

WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式一样,也是44.1K的取样频率,16位量化数字,因此在声音文件质量和CD相差无几! WAV打开工具是WINDOWS的媒体播放器。
  通常使用三个参数来表示声音,量化位数,取样频率和采样点振幅。量化位数分为8位,16位,24位三种,声道有单声道和立体声之分,单声道振幅数据为n1矩阵点,立体声为n2矩阵点,取样频率一般有11025Hz(11kHz) ,22050Hz(22kHz)和44100Hz(44kHz) 三种,不过尽管音质出色,但在压缩后的文件体积过大!相对其他音频格式而言是一个缺点,其文件大小的计算方式为:WAV格式文件所占容量(B) = (取样频率 X量化位数X 声道) X 时间 / 8 (字节= 8bit) 每一分钟WAV格式的音频文件的大小为10MB,其大小不随音量大小及清晰度的变化而变化。
  WAV是最接近无损的音乐格式,所以文件大小相对也比较大。

二、python代码

import wave
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import numpy as npdef wave_read(path):'''#打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据'''f=wave.open(path,"rb")#一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位),# 采# 样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息'''params=f.getparams()# 读取波形数据nchannels, sampwidth, framerate, nframes=params[:4]# 读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)str_date=f.readframes(nframes)f.close()# 需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组wave_date=np.frombuffer(str_date,dtype=np.short)# 将wave_data数组改为2列,行数自动匹配。在修改shape的属性时,需使得数组的总长度不变。wave_date.shape=-1,2# 转置数据,使成为2行的数据,方便下面时间匹配wave_date=wave_date.T#通过取样点数和取样频率计算出每个取样的时间,也就是周期T=采样单数/采样率time=np.arange(0,nframes)* (1.0/framerate)return wave_date,timedef date_fft(data,time,start,end):#wavedata, wavetime = wave_read(path)t=[]y=[]for i in range(time.size):if ((time[i]>=start) & (time[i]<=end)):t=np.append(t,time[i])y=np.append(y,data[0][i])#取左声道n=len(t)# 信号长度yy=fft(y)yf=abs(yy)#取绝对值yf1=abs(fft(y))/n#归一化处理yf2=yf1[range(int(n/2))]##由于对称性,只取一半区间xf=np.arange(len(y))#频率xf1=xfxf2=xf[range(int(n/2))]#取一半区间#显示原始序列plt.figure()plt.subplot(221)plt.plot(t,y,'g')plt.xlabel("Time")plt.ylabel("Amplitude")plt.title("Original wave")#显示取绝对值后的序列plt.subplot(222)plt.plot(xf, yf)plt.xlabel("Freq (Hz)")plt.ylabel("|Y(freq)|")plt.title("FFT of Mixed wave(two sides frequency range",fontsize=7,color='#7A378B')# 注意这里的颜色可以查询颜色代码表#显示归一化处理后双边序列plt.subplot(223)plt.plot(xf1, yf1)# 注意这里的颜色可以查询颜色代码表plt.xlabel("Freq (Hz)")plt.ylabel("|Y(freq)|")plt.title('FFT of Mixed wave(Normalized processing)',fontsize=10,color='#F08080')# 显示归一化处理后单边序列plt.subplot(224)plt.plot(xf2, yf2, 'b')# 注意这里的颜色可以查询颜色代码表plt.xlabel("Freq (Hz)")plt.ylabel("|Y(freq)|")plt.title('FFT of Mixed wave',fontsize=10,color='#F08080')plt.show()wave_date, time=wave_read("01.wav")
date_fft(wave_date,time,1,2)#左右声道的显示
plt.figure()
plt.subplot(211)
plt.plot(time, wave_date[0])
plt.title("Left channel")
plt.subplot(212)
plt.plot(time, wave_date[1], c="g")
plt.title("Right channel")
plt.show()

三、图像显示

1.左右声道的显示

2.FFT变换显示

四、参考文章

1.Python读取麦克风保存成文件并进行FFT
2.https://blog.csdn.net/weixin_32393347/article/details/85273820
3.https://blog.csdn.net/qq_39516859/article/details/79819276
4.https://blog.csdn.net/jeffrey2010/article/details/77427451

python读取wav文件并进行FFT变换相关推荐

  1. Python读取WAV文件的几种方式整理

    1)scipy from scipy.io import wavfile import numpy as npsample_rate, sig = wavfile.read('new.wav') pr ...

  2. MATLAB和Python读取wave文件的波形对比

       用python读取.wav文件的波形后再用MATLAB读取文件波形进行验证. 1.MORSE 1.1 Python 程序见之前的博客. 波形如图1所示: 图1 1.2 MATLAB 读取波形程序 ...

  3. python用os.system打开wav文件_使用python读取wav格式文件

    ** 使用python读取wav格式文件 ** - 基本概念 [采样频率] 即取样频率, 指每秒钟取得声音样本的次数.采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多.由 ...

  4. Python 读取WAV音频文件 画频谱

    import wave import struct from scipy import * from pylab import * #读取wav文件,我这儿读了个自己用python写的音阶的wav f ...

  5. python 读取txt文件没读到400行_400行Python代码实现文语处理助手(3) - 音频显示-嵌入式系统-与非网...

    音频显示是 pzh-py-speech 的主要功能,pzh-py-speech 借助的是 Matplotlib 以及 NumPy 来实现的音频显示功能,今天痞子衡为大家介绍音频显示在 pzh-py-s ...

  6. Python读取音文件

    Python读取语音文件 Python读取音文件 实现代码 运行结果 参考 通过python实现读取语音并绘制语音波形显示. Python读取音文件 实现代码 #-*- coding: utf-8 - ...

  7. python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据

    在使用python读取Excel文件中的时间格式,碰到的时间格式转换问题: 读取这样的表格: 输出这样的数据结果: 然而这样的结果却不是我们想要的,我们需要的是这样的结果: 1.安装python官方库 ...

  8. python读取一个文件夹/子文件夹下的所有文件名字

    python读取一个文件夹/子文件夹下的所有文件名字 示例代码: import osfile_path = './images/' all_file_name = os.listdir(file_pa ...

  9. python 播放 wav 文件

    python 播放 wav 文件 import pyaudio import wave def play_wav(wav_path):CHUNK = 1024# print("wav_pat ...

最新文章

  1. NOIP2018复赛 游记
  2. lacp可以在access接口吗_【基础】防火墙接口类型全介绍
  3. PMP之敏捷图表之产品地图VS产品路线图
  4. SPOJ-COT-Count on a tree(树上路径第K小,可持久化线段树)
  5. 2020年创业公司到底过得怎么样?数据分析来为你揭晓
  6. 【Flink】报错 KryoException ConcurrentModificationException StackOverflowError
  7. linux进程被杀掉日志,Linux进程突然被杀掉(OOM killer),查看系统日志
  8. Ocata:Packstack Ocata does not configure nova for placement API
  9. multisim页面不够大_微信订阅号页面改版,iOS 14.2存在严重耗电问题,贾跃亭再成被执行人,特斯拉回应被判欺诈,这就是今天的其他大新闻!...
  10. 无法连接网络的解决办法
  11. Python 针对Excel操作
  12. python-树-BST_Traversal-二叉搜索树的遍历
  13. 电子会计问题及Propects
  14. 水星MW300R V6(MT7620)CPU引脚图
  15. 电脑D盘格式化了怎么恢复
  16. 天黑请闭眼服务器维护中,天黑请闭眼
  17. linux脚本循环创建用户,shell应用之批量添加用户实例
  18. 微型计算机汇编语言与接口技术课后答案,微机原理、汇编语言及接口技术教程课后习题答案...
  19. 疯狂英语(Chapter one)
  20. EEGLAB直接读入Curry8软件采集的数据信号

热门文章

  1. LXLE Linux取代Windows XP的11个大招
  2. AVOSCloud入门教程:Android Parse云服务的Hello World
  3. 【开发板】洋桃STM32F103开发板介绍-STM32F103CBT6
  4. 微软官网文档人脸识别API分析
  5. 生化奇兵无限服务器过于繁忙,生化奇兵无限BUG问题解决 | 手游网游页游攻略大全...
  6. UML类图中方法(操作)的表示格式
  7. JavaScript框架有哪些?JS框架汇总
  8. 兄弟2560打印机提示DRUM!
  9. python 泛型_python 泛型注释的不理解?
  10. 温控PID调节PWM输出