使用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对象具有以下方法

关()如果文件是通过wave打开的,则将其关闭。
setnchannels()设置频道数。1单声道2个立体声通道
setsampwidth()将样本宽度设置为n个字节。
setframerate()将帧频设置为n。
setnframes()将帧数设置为n。
setcomptype()设置压缩类型和描述。目前,仅支持压缩类型NONE(无压缩)。
setparams()接受参数元组(nchannel,sampwidth,framerate,nframe,comptype,compname)
告诉()检索文件中的当前位置
writeframesraw()编写音频帧,而不进行校正。
writeframes()编写音频帧,并确保它们正确。

以下代码创建一个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对象方法

关()如果流是通过wave模块打开的,则将其关闭。
getnchannels()返回音频通道的数量(单声道为1,立体声为2)。
getsampwidth()返回以字节为单位的样本宽度。
getframerate()返回采样频率。
getnframes()返回音频帧数。
getcomptype()返回压缩类型(“ NONE”是唯一受支持的类型)。
getparams()返回一个namedtuple()(nchannels,sampwidth,framerate,nframe,comptype,compname),它等于get *()方法的输出。
读框(n)作为字节对象读取和返回最多n帧音频。
倒带()将文件指针倒退到音频流的开头。

以下代码读取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')

以上是 使用Python读写WAV文件(波形) 的全部内容, 来源链接: utcz.com/z/357127.html

回到顶部