当前位置: 首页 > 编程笔记 >

使用Python读写WAV文件(波形)

董高畅
2023-03-14
本文向大家介绍使用Python读写WAV文件(波形),包括了使用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')
 类似资料:
  • 本文向大家介绍java读取wav文件(波形文件)并绘制波形图的方法,包括了java读取wav文件(波形文件)并绘制波形图的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java读取wav文件(波形文件)并绘制波形图的方法。分享给大家供大家参考。具体如下: 因为最近有不少网友询问我波形文件读写方面的问题,出于让大家更方便以及让代码能够得到更好的改进,我将这部分(波形文件的读写)代码开源

  • 问题内容: 我想阅读Java中的wav文件,我将使用K-means对它们进行分类。 如何读取Java中的wav文件并将其分配到数组或类似的内容(您可以提出想法)中以对其进行分类? 编辑: 我想使用API​​读取wav文件和K-均值。 问题答案: 官方的Java声音编程指南走过读取和写入的音频文件。 A Greensted 撰写的本文:用Java读写Wav文件应该会有所帮助。WavFile类非常有用

  • 问题内容: 以下代码将频率为400Hz的简单正弦写入单声道WAV文件。为了产生 立体声 WAV文件,应如何更改此代码。第二个频道应处于不同的频率。 问题答案: 使用另一个频率/频道set来构建一个并行列表,并在输出循环中将其用作标题子句,并使用两个调用来创建主体- 一个用于,一个用于。IOW,文件中两个通道的对应帧“交替”。 例如参见本页面的所有可能的WAV文件格式的全面描述,我引用: 多通道数字

  • 问题内容: 我有一个包含内容的文件 如何使用Python 阅读? 同样,如果我有 如何data使用Python 写入CSV文件? 问题答案: 以下是一些最小的完整示例,这些示例如何读取CSV文件以及如何使用Python编写CSV文件。 Python 2 + 3:读取CSV文件 Python 之后,的内容data_read是 Unicode和Python 2.X 如果要编写Unicode,则必须安装

  • 本文向大家介绍利用python 读写csv文件,包括了利用python 读写csv文件的使用技巧和注意事项,需要的朋友参考一下 1、读文件 csv_reader把每一行数据转化成了一个list,list中每个元素是一个字符串。 2、写文件 读文件时,我们把csv文件读入列表中,写文件时会把列表中的元素写入到csv文件中。 可能遇到的问题:直接使用这种写法会导致文件每一行后面会多一个空行。 解决办法

  • 本文向大家介绍使用Python(aifc)读写AIFF和AIFC文件,包括了使用Python(aifc)读写AIFF和AIFC文件的使用技巧和注意事项,需要的朋友参考一下 aifc模块中的各种功能为读取和写入AIFF(音频交换文件格式)和AIFF-C文件提供了支持。AIFF格式用于将数字音频样本存储在文件中。其较新版本的AIFF-C具有压缩音频数据的能力 音频文件具有描述音频数据的参数数量。 采样