Skip to main content

22.2. aifc —读写AIFF和AIFC文件

源代码: Lib/aifc.py


此模块支持读写AIFF和AIFF-C文件。 AIFF是音频交换文件格式,用于将数字音频样本存储在文件中的格式。 AIFF-C是包括压缩音频数据的能力的格式的较新版本。

注解

有些操作只能在IRIX下工作;这些将会在尝试导入 cl 模块时引发 ImportError,该模块仅在IRIX上可用。

音频文件具有描述音频数据的多个参数。采样率或帧率是声音被采样的每秒的次数。通道数指示音频是单声道,立体声还是四声道。每个帧由每个通道一个采样组成。样本大小是每个样本的字节大小。因此,帧由 nchannels * samplesize 字节组成,而第二个音频由 nchannels * samplesize * framerate 字节组成。

例如,CD质量音频具有两个字节(16位)的样本大小,使用两个声道(立体声)并且具有44,100帧/秒的帧速率。这给出了4字节(2*2)的帧大小,并且第二值的占用2*2*44100字节(176,400字节)。

模块 aifc 定义了以下功能:

aifc.open(file, mode=None)

打开AIFF或AIFF-C文件,并返回具有下述方法的对象实例。参数 file 是命名文件或 file object 的字符串。当文件必须打开以进行读取时,mode 必须是 'r''rb',或者当文件必须打开以进行写入时,mode 必须是 'w''wb'。如果省略,则使用 file.mode (如果存在),否则使用 'rb'。当用于写入时,文件对象应该是可搜索的,除非你提前知道将要写入多少个样本,并使用 writeframesraw()setnframes()open() 函数可以在 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()。此外,存在以下方法。 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.setmark(id, pos, name)

添加具有给定ID(大于0)的标记,以及给定位置处的给定名称。此方法可以在 close() 之前的任何时间调用。

aifc.tell()

返回输出文件中的当前写入位置。可用于与 setmark() 组合。

aifc.writeframes(data)

将数据写入输出文件。此方法只能在音频文件参数设置后调用。

在 3.4 版更改: 任何 bytes-like object 现已被接受。

aifc.writeframesraw(data)

writeframes(),除了音频文件的标题没有更新。

在 3.4 版更改: 任何 bytes-like object 现已被接受。

aifc.close()

关闭AIFF文件。文件的头部被更新以反映音频数据的实际大小。调用此方法后,对象将无法再使用。