Python 读取WAV文件

import wave

import struct

from scipy import *

from pylab import *

#读取wav文件,我这儿读了个自己用python写的音阶的wav

filename = '1.wav'

wavefile = wave.open(filename, 'r') # open for writing

#读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames,在后面要用到滴。

nchannels = wavefile.getnchannels()

sample_width = wavefile.getsampwidth()

framerate = wavefile.getframerate()

numframes = wavefile.getnframes()

print("channel",nchannels)

print("sample_width",sample_width)

print("framerate",framerate)

print("numframes",numframes)

#建一个y的数列,用来保存后面读的每个frame的amplitude。

y = zeros(numframes)

#for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。

#unpack是struct里的一个函数,用法详见http://docs.python.org/library/struct.html。简单说来就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个

#tuple,所以我们取它的第零位。

for i in range(numframes):

val = wavefile.readframes(1)

left = val[0:2]

#right = val[2:4]

v = struct.unpack('h', left )[0]

y[i] = v

#framerate就是44100,文件初读取的值。然后本程序最关键的一步!specgram!实在太简单了。。。

Fs = framerate

specgram(y, NFFT=1024, Fs=Fs, noverlap=900)

show()

补充知识:matlab生成wav文件并用python验证

在进行频谱分析时,发现MATLAB和python读取wav文件的波形不一致,导致不能得出正确结果,为了验证MATLAB和python哪部分有问题,于是有了这篇博客。

1、需求分析

用MATLAB生成一个正弦波并保存为wav文件,然后用python读取这个wav文件画出波形,查看python读取出来的波形和matlab生成的波形是否一致。

2、代码实现

2.1 MATLAB生成wav文件

Df=5; %频率间隔

fs = 8000; %采样频率

T = 1/fs; %采样周期

N=fs/Df; %序列点数

time = (N-1)./fs; %第一个声音片段的总时长

t=0:T:(N-1)./fs;

y = sin(2*pi*200*t); %生成第一个声音片段,注意需要用db2mag()函数把dB转换成magnitude。

sound(y,fs) %可以播放声音的函数 sound()

filename = ('sinwave.wav'); %给文件取名

plot(t,y)

audiowrite(filename,y,fs) %存储.wav音频文件,在这里文件名为sinwave.wav

其中生成的正弦波波形如下图所示:

2.2 python读取wav文件

import wave

import numpy as np

import pylab as plt

#打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据。

f = wave.open(r"E:\练习\音频信号处理\spectrum.m\sinwave.wav","rb")

#读取格式信息

#一次性返回所有的WAV文件的格式信息,它返回的是一个组元(tuple):声道数, 量化位数(byte单位), 采

#样频率, 采样点数, 压缩类型, 压缩类型的描述。wave模块只支持非压缩的数据,因此可以忽略最后两个信息

params = f.getparams()

nchannels, sampwidth, framerate, nframes = params[:4]

#读取波形数据

#读取声音数据,传递一个参数指定需要读取的长度(以取样点为单位)

str_data = f.readframes(nframes)

f.close()

#将波形数据转换成数组

#需要根据声道数和量化单位,将读取的二进制数据转换为一个可以计算的数组

wave_data = np.fromstring(str_data,dtype=np.short)

#通过取样点数和取样频率计算出每个取样的时间。

time=np.arange(0,nframes)/framerate

print(params)

print(wave_data.max())#找出正弦波的峰值

#time 也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标

plt.plot(time,wave_data/32768)

plt.show()

python读取wav文件显示出来的正弦波如下图所示:

python读取wav文件的信息及求出波形峰值的结果如下图所示:

我们可以看出峰值为32767(该wav文件有16bit,且带一个符号位。215=32768215=32768 ),我们进行归一化处理后的到波形如下图所示:

由上图可以看出MATLAB生成的正弦波保存为wav文件后,python读取该wav文件。两种语言下正弦波相同。

以上这篇Python 读取WAV音频文件 画频谱的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: Python 读取WAV音频文件 画频谱的实例

本文地址: http://www.cppcns.com/jiaoben/python/302974.html

python音频频谱_Python 读取WAV音频文件 画频谱的实例相关推荐

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

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

  2. python绘制音频频谱_Python 读取wav画频谱

    Python 读取wav音频文件,并用specgram画频谱 import wave import struct from scipy import * from pylab import * #读取 ...

  3. python 读取图片为数字矩阵_python读取图像矩阵文件并转换为向量实例

    假设图像矩阵大小为32×32,将其转换为向量,首先创建1×1024的NumPy数组,然后打开给定的文件,循环读出文件的前32行,并将每行的头32个字符值存储在NumPy数组中 import numpy ...

  4. python dicom图像分割_python读取DICOM头文件的实例

    这篇文章主要介绍了关于python 读取DICOM头文件的实例,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 用dicompyler软件打开dicom图像,头文件如图所示: 当然也可以 ...

  5. python读取音频文件_python 读取wav 音频文件的两种方式

    JavaScript算法(冒泡排序.选择排序与插入排序) 冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看介绍的冒泡排序,选择排 ...

  6. python 读取wav 音频文件的两种方式

    python 中,常用的有两种可以读取wav音频格式的方法,如下所示: 1 import scipy 2 from scipy.io import wavfile 3 4 import soundfi ...

  7. 如何用C语言编写wav读取函数,C++读取WAV音频文件的头部数据的实现方法

    C++读取WAV音频文件的头部数据的实现方法 前言: 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有 ...

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

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

  9. 音频制作与转换—WAV音频文件

    音频制作与转换-WAV音频文件 在音视频制作或转换中,常需要面临如下选择: 是否选择WAV这种音频文件格式:选择何种编码格式:如何设置采样频率(Hz.kHz).采样精度(bit).码率(kBps.比特 ...

最新文章

  1. mytag.class.php,dedetag.class.php文件分析
  2. 免费网络研讨会:调试生产中Java的新方法
  3. 阿里高级技术专家:研发效能的追求永无止境
  4. virtualbox display size
  5. Linux中设置Docker的yum源时,报-bash: yum-config-manager: command not found错误
  6. linux下mail函数,Linux主机禁用Mail函数的解决办法
  7. DJL 教程 1.1 什么是AI人工智能
  8. python通配符_Python通配符一览
  9. 对给git配置邮箱和用户名的理解
  10. 王小波:资本主义居然用代码行发工资,真虚伪!
  11. Oracle动态性能视图学习之v$session_longops
  12. 阿里云香港服务器怎么样?稳定不稳定?站长现身说法
  13. [Java]一个WiFi管理器(获取WiFi连接的网关的ip和信息)和热点管理器(获取连接本机的热点的设备的ip、MAC和信息)
  14. java.util.regex.PatternSyntaxException: Unclosed counted closure near index 14 [0-9a-zA-Z]{1, 20}报错
  15. 计算机基础知识考试技巧,计算机二级考试Office应试技巧
  16. Nginx 之实现原理
  17. 安全狗限制计算机名,绕过安全狗用户限制提权
  18. ATFX:美元指数阶段性走弱,EURUSD重回平价线上方
  19. 10以内数的组成分解图_10以内数的组成与分解
  20. jai_imageio-1.1-alpha.jar下载

热门文章

  1. Scrapy中对xpath使用re
  2. App是什么,可以分为几类?及其相关解释。
  3. excel数学分析相关知识
  4. 精通Java并发——张龙
  5. Eclipse项目红叉:报错Description Resource Path Location Type Target runtime Apache Tomcat v8.0 is not defin
  6. 网络攻防|CVE-2021-42287、CVE-2021-42278域内提权
  7. Linux 启动优化实战-2.41 秒启动应用!
  8. (支持阿朱)安的广厦千万间 天下寒士尽欢颜
  9. 修复共享服务器,集群服务器共享磁盘柜的修复案例
  10. android 在状态栏耳机图标显示图标显示图标显示图标,Android 通知栏图标