aifc
— 读取和写入 AIFF 和 AIFC 文件¶
源代码: Lib/aifc.py
此模块提供对读取和写入 AIFF 和 AIFF-C 文件的支持。AIFF 是音频交换文件格式,一种用于将数字音频样本存储在文件中的格式。AIFF-C 是该格式的较新版本,它包括压缩音频数据的功能。
音频文件具有一系列参数来描述音频数据。采样率或帧率是每秒对声音采样的次数。声道数表示音频是单声道、立体声还是四声道。每个帧包含每个声道的样本。样本大小是每个样本的字节大小。因此,一个帧包含 nchannels * samplesize
字节,一秒钟的音频包含 nchannels * samplesize * framerate
字节。
例如,CD 音质音频的样本大小为 2 字节(16 位),使用 2 个声道(立体声),帧率为 44,100 帧/秒。这使得帧大小为 4 字节(2*2),一秒钟的音频占用 2*2*44100 字节(176,400 字节)。
模块 aifc
定义了以下函数
- aifc.open(file, mode=None)¶
打开一个 AIFF 或 AIFF-C 文件,并返回一个对象实例,该实例具有下面描述的方法。参数 file 是一个命名文件的字符串或一个 文件对象。当文件必须打开以供读取时,mode 必须为
'r'
或'rb'
;当文件必须打开以供写入时,mode 必须为'w'
或'wb'
。如果省略,则使用file.mode
(如果存在),否则使用'rb'
。当用于写入时,文件对象应该是可查找的,除非您事先知道要写入的样本总数,并使用writeframesraw()
和setnframes()
。Theopen()
函数可以在with
语句中使用。当with
块完成时,将调用close()
方法。在版本 3.4 中更改: 添加了对
with
语句的支持。
当以读取模式打开文件时,由 open()
返回的对象具有以下方法
- aifc.getnchannels()¶
返回音频声道的数量(单声道为 1,立体声为 2)。
- aifc.getsampwidth()¶
返回单个样本的字节大小。
- aifc.getframerate()¶
返回采样率(每秒的音频帧数)。
- aifc.getnframes()¶
返回文件中音频帧的数量。
- aifc.getcomptype()¶
返回一个长度为 4 的字节数组,描述音频文件中使用的压缩类型。对于 AIFF 文件,返回值为
b'NONE'
。
- aifc.getcompname()¶
返回一个可转换为人类可读描述的字节数组,描述音频文件中使用的压缩类型。对于 AIFF 文件,返回值为
b'not compressed'
。
- aifc.getparams()¶
返回一个
namedtuple()
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,等效于get*()
方法的输出。
- aifc.getmarkers()¶
返回音频文件中的标记列表。一个标记由一个包含三个元素的元组组成。第一个是标记 ID(一个整数),第二个是标记在数据开头处的帧位置(一个整数),第三个是标记的名称(一个字符串)。
- aifc.getmark(id)¶
返回
getmarkers()
中描述的元组,用于具有给定 id 的标记。
- aifc.readframes(nframes)¶
读取并返回音频文件中的下一个 nframes 帧。返回的数据是一个字符串,包含每个帧的所有声道的未压缩样本。
- aifc.rewind()¶
倒带读取指针。下一个
readframes()
将从开头开始。
- aifc.setpos(pos)¶
跳转到指定的帧号。
- aifc.tell()¶
返回当前帧号。
- aifc.close()¶
关闭 AIFF 文件。调用此方法后,该对象将无法再使用。
当以写入模式打开文件时,由 open()
返回的对象具有上述所有方法,除了 readframes()
和 setpos()
。此外,还存在以下方法。The get*()
方法只能在调用相应的 set*()
方法后才能调用。在第一次调用 writeframes()
或 writeframesraw()
之前,必须填充所有参数,除了帧数。
- aifc.aiff()¶
创建 AIFF 文件。默认情况下,会创建 AIFF-C 文件,除非文件名以
'.aiff'
结尾,在这种情况下,默认情况下会创建 AIFF 文件。
- aifc.aifc()¶
创建 AIFF-C 文件。默认情况下,会创建 AIFF-C 文件,除非文件名以
'.aiff'
结尾,在这种情况下,默认情况下会创建 AIFF 文件。
- aifc.setnchannels(nchannels)¶
指定音频文件中的声道数。
- aifc.setsampwidth(width)¶
指定音频样本的大小(以字节为单位)。
- aifc.setframerate(rate)¶
指定采样频率(以帧/秒为单位)。
- aifc.setnframes(nframes)¶
指定要写入音频文件的帧数。如果未设置此参数或设置不正确,则文件需要支持查找。
- aifc.setcomptype(type, name)¶
指定压缩类型。如果未指定,则音频数据不会被压缩。在 AIFF 文件中,无法进行压缩。name 参数应为压缩类型的可读描述(以字节数组形式),type 参数应为长度为 4 的字节数组。目前支持以下压缩类型:
b'NONE'
、b'ULAW'
、b'ALAW'
、b'G722'
。
- aifc.setparams(nchannels, sampwidth, framerate, comptype, compname)¶
一次性设置所有上述参数。参数是一个元组,包含各种参数。这意味着可以使用
getparams()
调用的结果作为setparams()
的参数。
- aifc.tell()
返回输出文件中的当前写入位置。与
setmark()
结合使用很有用。
- aifc.writeframesraw(data)¶
与
writeframes()
相似,但不会更新音频文件头。Changed in version 3.4: 现在接受任何 字节类对象。
- aifc.close()
关闭 AIFF 文件。文件头将更新以反映音频数据的实际大小。调用此方法后,该对象将无法再使用。