On this page
wave —读写 WAV 文件
源代码: Lib/wave.py
wave模块为 WAV 声音格式提供了方便的界面。它不支持压缩/解压缩,但支持单声道/立体声。
wave模块定义以下Function和异常:
wave.
open
(* file , mode = None *)- 如果* file *是字符串,请使用该名称打开文件,否则将其视为类似文件的对象。 模式可以是:
'rb'
只读模式。
'wb'
- 只写模式。
请注意,它不允许读/写 WAV 文件。
'rb'
的* mode 返回Wave_read
对象,而'wb'
的 mode 返回Wave_write
对象。如果Ellipsis mode ,并且将类似文件的对象作为 file 传递,则file.mode
用作 mode *的默认值。
如果传入类似文件的对象,则在调用其close()
方法时,wave 对象不会将其关闭;关闭文件对象是调用者的责任。
open()函数可以在with语句中使用。 with
块完成后,将调用Wave_read.close()或Wave_write.close()方法。
在版本 3.4 中进行了更改:添加了对不可搜索文件的支持。
wave.
openfp
(* file , mode *)- open()的同义词,为向后兼容而保留。
从 3.7 版开始不推荐使用,将在 3.9 版中删除。
- exception
wave.
Error
- 当某些事情由于违反 WAV 规范或遇到实现缺陷而无法执行时,将引发错误。
Wave_read Objects
open()返回的 Wave_read 对象具有以下方法:
Wave_read.
close
( )- 如果流是由wave打开的,请关闭该流,并使该实例不可用。这在对象收集时自动调用。
Wave_read.
getnchannels
( )- 返回音频通道数(单声道为
1
,立体声为2
)。
- 返回音频通道数(单声道为
Wave_read.
getsampwidth
( )- 返回以字节为单位的 samples 宽度。
Wave_read.
getframerate
( )- 返回采样频率。
Wave_read.
getnframes
( )- 返回音频帧数。
Wave_read.
getcomptype
( )- 返回压缩类型(
'NONE'
是唯一受支持的类型)。
- 返回压缩类型(
Wave_read.
getcompname
( )- getcomptype()的可读版本。通常
'not compressed'
Parallel'NONE'
。
- getcomptype()的可读版本。通常
Wave_read.
getparams
( )- 返回namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,等效于get*()
方法的输出。
- 返回namedtuple()
Wave_read.
readframes
(* n *)- 读取并返回最多* n *帧音频,作为bytes对象。
Wave_read.
rewind
( )- 将文件指针倒退到音频流的开头。
为了与aifc模块兼容,定义了以下两种方法,并且没有做任何有趣的事情。
Wave_read.
getmarkers
( )- 返回
None
。
- 返回
Wave_read.
getmark
(* id *)- 引发错误。
以下两种方法定义了术语“位置”,它们在它们之间是兼容的,否则与实现有关。
Wave_read.
setpos
(* pos *)- 将文件指针设置到指定位置。
Wave_read.
tell
( )- 返回当前文件指针位置。
Wave_write Objects
对于可搜索的输出流,wave
Headers 将自动更新以反映实际写入的帧数。对于无法搜索的流,写入第一帧数据时,* nframes 值必须准确。可以pass调用setnframes()或setparams()并调用close()之前要写入的帧数,然后使用writeframesraw()来写入帧数据,或者pass调用writeframes()并获得所有帧数据来获得准确的 nframes 值。书面。在后一种情况下,writeframes()将计算数据中的帧数,并在写入帧数据之前相应地设置 nframes *。
open()返回的 Wave_write 对象具有以下方法:
在版本 3.4 中进行了更改:添加了对不可搜索文件的支持。
Wave_write.
close
( )- 确保* nframes 是正确的,如果文件是由wave打开的,则将其关闭。在对象收集时调用此方法。如果输出流不可搜索并且 nframes *与实际写入的帧数不匹配,则会引发异常。
Wave_write.
setnchannels
(* n *)- 设置 Channels 数。
Wave_write.
setsampwidth
(* n *)- 将 samples 宽度设置为* n *个字节。
Wave_write.
setframerate
(* n *)- 将帧频设置为* n *。
在版本 3.2 中更改:此方法的非整数 Importing 四舍五入为最接近的整数。
Wave_write.
setnframes
(* n *)- 将帧数设置为* n *。如果实际写入的帧数不同,则稍后将对此进行更改(如果无法找到输出流,则此更新try将引发错误)。
Wave_write.
setcomptype
(* type , name *)- 设置压缩类型和描述。目前,仅支持压缩类型
NONE
,表示不压缩。
- 设置压缩类型和描述。目前,仅支持压缩类型
Wave_write.
setparams
(* tuple *)-
- tuple *应该是
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,其值对于set*()
方法有效。设置所有参数。
- tuple *应该是
-
Wave_write.
tell
( )- 返回文件中的当前位置,并对Wave_read.tell()和Wave_read.setpos()方法使用相同的免责语句。
Wave_write.
writeframesraw
(* data *)- 编写音频帧,而不校正* nframes *。
在版本 3.4 中更改:现在接受任何bytes-like object。
Wave_write.
writeframes
(* data *)- 编写音频帧,并确保* nframes 正确。如果无法找到输出流,并且在写入 data 之后写入的帧总数与先前为 nframes *设置的值不匹配,则会产生错误。
在版本 3.4 中更改:现在接受任何bytes-like object。
请注意,在调用writeframes()
或writeframesraw()
之后设置任何参数都是无效的,任何try都会引发wave.Error。