相关文章推荐
奋斗的竹笋  ·  Mac OS安装Python的pip - ...·  1 周前    · 
酷酷的电梯  ·  python ...·  1 年前    · 
悲伤的梨子  ·  QTreeWidget拖拽节点 - ...·  1 年前    · 

1、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位三种,声道有单声道和立体声之分,单声道振幅数据为n*1矩阵点,立体声为n*2矩阵点,取样频率一般有11025Hz(11kHz) ,22050Hz(22kHz)和44100Hz(44kHz) 三种,不过尽管音质出色,但在压缩后的文件体积过大!相对其他音频格式而言是一个缺点,其文件大小的计算方式为:WAV格式文件所占容量(B) = (取样频率 X量化位数X 声道) X 时间 / 8 (字节= 8bit) 每一分钟WAV格式的音频文件的大小为10MB,其大小不随音量大小及清晰度的变化而变化。
WAV是最接近无损的音乐格式,所以文件大小相对也比较大。

2、使用python读wav文件

import wave 用于读写wav文件。
它提供了一个方便的WAV格式接口。
但是不支持压缩/解压缩,支持单声道/立体声。
读取格式:
open(file[, mode])
如果file是一个字符串,那么就打开文件,不然就把它当做一个类文件对象。
mode是可以缺省的,如果输入的参数是一个类文件对象,那么file.mode将会作为mode的值。
mode可选参数如下:
‘r’, ‘rb’

Read only mode.

‘w’, ‘wb’

Write only mode.

注意不能同时完成读/写操作

3、wav文件读操作

4、代码实现

import wave  
import numpy as np
import pylab as plt 
#打开wav文件 ,open返回一个的是一个Wave_read类的实例,通过调用它的方法读取WAV文件的格式和数据。
f = wave.open(r"E:\练习\音频信号处理\Spectrum_analysis\night.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)
#将wave_data数组改为2列,行数自动匹配。在修改shape的属性时,需使得数组的总长度不变。
wave_data.shape = -1,2
#转置数据
wave_data = wave_data.T
#通过取样点数和取样频率计算出每个取样的时间。
time=np.arange(0,nframes)/framerate
#print(params)  
plt.figure(1) 
plt.subplot(2,1,1)  
#time 也是一个数组,与wave_data[0]或wave_data[1]配对形成系列点坐标
plt.plot(time,wave_data[0])  
plt.subplot(2,1,2)  
plt.plot(time,wave_data[1],c="r")  
plt.xlabel("time")  
plt.show() 

通过fromstring函数将字符串转换为数组,通过其参数dtype指定转换后的数据格式,由于我们的声音格式是以两个字节表示一个取样值,因此采用short数据类型转换。现在我们得到的wave_data是一个一维的short类型的数组,但是因为我们的声音文件是双声道的,因此它由左右两个声道的取样交替构成:LRLRLRLR….LR(L表示左声道的取样值,R表示右声道取样值)。修改wave_data的sharp之后:

wave_data.shape = -1, 2

5、画出的波形图

1、wav格式文件  WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广泛支持,该格式也支持MSADPCM,CCITT A LAW等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的WAV文件和CD格式...
python 播放声音文件(mp3、 wav 、m4a等) 前段时间在搞一个基于 python 的语音助手,其中需要用到 python 播放音频的功能,要在windows上和树莓派上运行,但是在网上找了好久,都没有找到合适的解决方案(pygame 和 PyAudio勉强能用,但是效果不理想)。无奈只能想办法Google一下,找到了一篇比较基础的文章,详细的介绍了怎样用一些库来实现播放音频的功能,简单实用。为了方便以后 使用 ,我把文章简要的翻译记录如下: 原文地址:https:// python basics.org/pyth
本文介绍 wav e模块的 使用 方法及生成音频的算法实现。程序自动生成一段频率为200Hz, 长度为1.8秒的蜂鸣声。 wav e模块提供了一个处理 wav 声音格式的便利接口, 可从文件 读取 数据, 也可直接将`bytes`格式的数据写入 wav 文件。 with wav e.open(file,'wb') as f: f.setnchannels(1) f.setsampwidth(sampwidth) f.setframerate(framerate) f.writeframes(data).......
本文主要 使用 python 编程,实现解析 wav 语音文件,得到. wav 语音文件的声道数,量化位数,采样频率,采样点数。编写 python 程序 使用 pycharm。 下面简单介绍一下 wav 文件结构。 一 解析. wav 文件原理 WAV E文件本质上就是一种RIFF格式,它可以抽象成一颗树(数据结构的一种)来看。 ​ 如图所示,从上到下分别对应着二进制数据在文件中相对于起始位置的偏移量。每一个格子对应一...
如果你想 使用 Python 读取 音频信息,可以 使用 一些第三方库,比如 scipy、 wav e 或者 PySoundFile。 下面是 使用 scipy 读取 WAV 文件的示例代码: ``` python import scipy.io. wav efile # 读取 WAV 文件 wav e_data, sample_rate = scipy.io. wav efile.read('audio. wav ') # 输出采样率和音频数据 print(sample_rate) print( wav e_data) 如果你想 使用 wav e 库来 读取 音频文件,可以 使用 下面的代码: ``` python import wav e # 打开 WAV 文件 with wav e.open('audio. wav ', 'rb') as wav _file: # 读取 音频信息 sample_rate = wav _file.getframerate() num_channels = wav _file.getnchannels() sample_width = wav _file.getsampwidth() num_frames = wav _file.getnframes() # 读取 音频数据 wav e_data = wav _file.readframes(num_frames) # 输出采样率和音频数据 print(sample_rate) print( wav e_data) 如果你想 使用 PySoundFile 库来 读取 音频文件,可以 使用 下面的代码: ``` python import soundfile # 读取 音频文件 wav e_data, sample_rate = soundfile.read('audio. wav ') # 输出采样率和音频数据 print(sample_rate) print( wav e_data) 这些库都可以用来 读取 常见的音频格式,比如 WAV 、MP3 和 AIFF。