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。