python实现简单的声⾳⽂件读写
⼀、声⾳的读与写
以下将⽤到python⾃带的wave模块进⾏操作。
声⾳⽂件的读取
python怎么读的
以下以wav⽂件为例。
使⽤wave模块进⾏声⾳的读取操作是:wave.open(r"wav⽂件路径",“rb")
‘rb‘表⽰命令为只读模式。
wav.open命令后将返回⼀个wave_read对象,通过调⽤wave_read的⽅法可以获取wav⽂件的参数。
wave_read对象的⽅法有以下⼏种:
(假定已经执⾏以下wave.open()代码)
f=wave.open(r"wav⽂件路径","rb")
(1)f.getparams():获取wav⽂件的参数
图⽚1
调⽤此⽅法后,将返回六个参数,分别为wav⽂件的声道、采样深度、采样率、取样点数、压缩类型、压缩类型的描述。wave模块只⽀持⾮压缩的类型,后⾯两项参数可以省略。
另外,通过
四个⽅法可分别获得声道数、采样深度、采样率、取样点数四个参数。
(2)f.readframs(nframes):读取声⾳数据
图⽚2
nframes为必需指定的参数,指定需要读取的长度。
如上图所⽰,调⽤此⽅法后,将返回以字符串代表的⼆进制数据。
(3)np.fromstring(str_data,dtype=np.short):将⼆进制⽂件转换为可计算的数组。
图⽚3
str_adframs(nframes)
np.short ####问题-1
令wave_data=np.fromstring(str_data,dtype=np.short),此时wave_data是⼀个⼀维数组。
通过改变它的形状使其重新变为双声道⽂件:
wave_data.shape=-1,2
将其转置得:
wave_data = wave_data.T
补充:
通过取样点数和取样频率能计算出每个取样的时间,
time = np.arrange(0, nframes) * (1.0 / framerate)
声⾳⽂件的写⼊:
导⼊需要的模块;
import wave
import numpy as np
import scipy.signal as signal
wave⽤来导出声⾳⽂件,numpy⽤来作数据处理,signal⽤于决定声⾳⽂件的波形。
设置参数:
framerate = 44100
time = 10
设置声⾳⽂件的波形及数据类型:
####在0~time范围内,⽣成framerate个长度为1.0/framerate的⼩区间,以此近似模拟声⾳波形。
t = np.arange(0, time, 1.0/framerate)
####以((t, 100,)为起始点,(time, 1000)为终⽌点,设置频率扫描为线性曲线。
wave_data = signal.chirp(t, 100, time, 1000, method='linear') * 10000
####设置数据存储⽅式为两个字节为⼀单位。
wave_data = wave_data.astype(np.short)
创建⼀个新⽂件:
f = wave.open(r"⽂件名.wav", "wb")
设置声⾳⽂件的参数:
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(framerate)
将设置好参数的wav_data转换为⼆进制数据后写⼊声⾳⽂件中:
f.writeframes(string())
f.close()
在python中,⼆进制数据以字符串表⽰,所以string()即表⽰将wave_data转换为⼆进制数据。此⽂为转载⽂章,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。