一个小例子
wave 用于处理wav 格式的音频数据,支持单声道/立体声。
先看一个简单的示例
import wave
wavRead = wave.open('test.wav','rb')
params = wavRead.getparams()
print(params)
wavWrite = wave.open('new.wav','wb')
wavWrite.setparams(params)
segment = wavRead.readframes(1629184)
wavWrite.writeframes(segment)
wavRead.close()
wavWrite.close()
在运行完上面的代码后,可以看到工作路径下多出一个new.wav ,大小差不多是test.wav 的十分之一左右,即成功对test.wav 进行了分割。
其中wave.open 用于打开音频文件,当模式为rb 时,表示只读;wb 为只写。只读模式下,返回一个Wave_read 对象;只写模式下,返回Wave_write 的实例。
读:Wave_read
除了用于关闭音频文件的close() 之外,只读模式返回的Wave_read 对象中封装了许多无参函数,用以获取音频数据的信息。
| |
---|
getnchannels() | 返回声道数量,1为单声道,2为立体声 | getsampwidth() | 返回字节长度 | getframerate() | 返回采样频率 | getnframes() | 返回音频总帧数 | getcomptype()
getcompname() | 返回压缩类型,然鹅只能是None | getparams() | 返回一个元组,内容包括上面五项 |
接下来,是Wave_read 的核心功能——readframes(n) 。通过该方法,可以读取并返回以bytes 对象表示的最多n帧音频。
在读取n 帧之后,数据流的指针也会跳到n 处,通过tell() 函数可以返回当前指针位置。若想让指针重新回到文件开始,可实用rewind() ;通过setpos(n) ,可以让指针跳到n 处。
写:Wave_write
与Wave_read 中的get 相对应,Wave_write 中除了也提供get 方法之外,也提供一些set 方法,用于设置相关的信息
get | set | set功能 |
---|
getnchannels() | setnchannels(n) | 设置声道数量 | getsampwidth() | setsampwidth(n) | 设置字节长度为n | getframerate() | setframerate(n) | 设置采样频率为n | getnframes() | setnframes(n) | 设置音频总帧数为n | getcompname()
getcomptype() | setcomptype(type,name) | 设置压缩格式,然鹅只能是None | getparams() | setparams(tuple) | 设置上面的那些内容 |
接下来,与Wave_read.readframes() 针锋相对的函数为writeframes(data) ,用于写入音频数据,其中data 为bytes格式的二进制数据。
|