使用Python读写WAV文件(波形)
Python标准库中的wave模块是音频WAV格式的便捷接口。该模块中的功能可以将原始格式的音频数据写入对象之类的文件,并读取WAV文件的属性。
如同内置open()
方法一样,文件以“写入”或读取模式打开,但具有open()
wave模块中的功能
wave.open()
此功能打开一个文件以读取/写入音频数据。该函数需要两个参数-第一个是文件名,第二个是模式。该模式可以是用于写入音频数据的“wb”或用于读取的“rb”。
obj = wave.open('sound.wav','wb')
模式“rb”返回Wave_read对象,而模式“wb”返回Wave_write对象。
Wave_write对象具有以下方法
以下代码创建一个WAV文件,该文件具有99999秒持续时间的随机短整数字节。
import wave, struct, math, random sampleRate = 44100.0 # hertz duration = 1.0 # seconds frequency = 440.0 # hertz obj = wave.open('sound.wav','w') obj.setnchannels(1) # mono obj.setsampwidth(2) obj.setframerate(sampleRate) for i in range(99999): value = random.randint(-32767, 32767) data = struct.pack('<h', value) obj.writeframesraw( data ) obj.close()
Wave_read对象方法
namedtuple()
(nchannels,sampwidth,framerate,nframe,comptype,compname),它等于get*()方法的输出。以下代码读取WAV文件的一些参数。
import wave obj = wave.open('sound.wav','r') print( "Number of channels",obj.getnchannels()) print ( "Sample width",obj.getsampwidth()) print ( "帧率。",obj.getframerate()) print ("Number of frames",obj.getnframes()) print ( "parameters:",obj.getparams()) obj.close()
输出结果
Number of channels 1 Sample width 2 帧率。 44100 Number of frames 99999 parameters: _wave_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype='NONE', compname='not compressed')