python做语音信号处理
音频信号的读写、播放及录音
标准的python已经支持WAV格式的书写,而实时的声音输入输出需要安装pyAudiio(http://people.csail.mit.edu/hubert/pyaudio)。最后我们还将使用pyMedia(http://pymedia.org)进行Mp3的解码和播放。
音频信号是模拟信号,我们需要将其保存为数字信号,才能对语音进行算法操作,WAV是Microsoft开发的一种声音文件格式,通常被用来保存未压缩的声音数据。
语音信号有三个重要的参数:声道数、取样频率和量化位数。
声道数:可以是单声道或者是双声道
采样频率:一秒内对声音信号的采集次数,44100Hz采样频率意味着每秒钟信号被分解成44100份。换句话说,每隔$\frac{1}{44100}Hz$就会存储一次,如果采样率高,那么媒体播放音频时会感觉信号是连续的。
量化位数:用多少bit表达一次采样所采集的数据,通常有8bit、16bit、24bit和32bit等几种
例如CD中所储存的声音信号是双声道、44.1kHz、16bit。
如果你需要自己录制和编辑声音文件,推荐使用Audacity(http://audacity.sourceforge.net),它是一款开源的、跨平台、多声道的录音编辑软件。在我的工作中经常使用Audacity进行声音信号的录制,然后再输出成WAV文件供Python程序处理。
wave-读wav文件
wava模块为WAV声音格式提供了方面的界面,他不支持压缩/解压,但支持单声道/立体声。
Wave_read = wave.open(file,mode="rb")
file通常为是字符串格式的文件名或者文件路径
例如voice.wav文件的路径C:\Users\Never\Desktop\code for the speech
则file有以下三种填写格式:
r"C:\Users\Never\Desktop\code for the speech\voice.wav"
"C:/Users/Never/Desktop/code for the speech/voice.wav"
"C:\\Users\\Never\\Desktop\\code for the speech\\voice.wav"
三者等价,右划线\为转意字符,如果要表达\则需要\\,引号前面加r表示原始字符串。
mode是缺省参数,可以不填,也可以是"rb":只读模式;"wb":只写模式。注意不支持读/写格式。
该open()函数可用于with声明中。当with块完成时,Wave_read.close()或Wave_write.close()方法被调用。Wave_read是读取的文件流。
Wave_read.getparams()
一次性返回所有的音频参数,返回的是一个元组(声道数,量化位数(byte单位),采样频率,采样点数,压缩类型,压缩类型的描述)。(nchannels, sampwidth, framerate, nframes, comptype, compname)wave模块只支持非压缩的数据,因此可以忽略最后两个信息。
str_data = Wave_read.readframes(nframes)
指定需要读取的长度(以取样点为单位),返回的是字符串类型的数据
wave_data = np.fromstring(str_data, dtype=np.short)
将读取的字符串数据转换为一维short类型的数组。
通过np.fromstring函数将字符串转换为数组,通过其参数dtype指定转换后的数据格式(由于我们的声音格式是以两个字节表示一个取样值,因此采用short数据类型转换)
现在的wave_data是一个一维的short类型的数组,但是因为我们的声音文件是双声道的,因此它由左右两个声道的取样交替构成:LR
wave_data.shape = (-1, 2) # -1的意思就是没有指定,根据另一个维度的数量进行分割,得到n行2列的数组。
getnchannels, getsampwidth, getframerate, getnframes等方法可以单独返回WAV文件的特定的信息。
Wave_read.close() 关闭文件流wave
Wave_read.getnchannels() 返回音频通道的数量(1对于单声道,2对于立体声)。
Wave_read.getsampwidth() 以字节为单位返回样本宽度
Wave_read.getframerate() 返回采样频率。
Wave_read.getnframes() 返回音频帧数。
Wave_read.rewind() 将文件指针倒回到音频流的开头。
Wave_read.tell() 返回当前文件指针位置。
————————————————
版权声明:本文为CSDN博主「凌逆战」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34218078/article/details/84967662
- 点赞
- 收藏
- 关注作者
评论(0)