aifc — 读取和写入 AIFF 和 AIFC 文件

源代码: Lib/aifc.py

自版本 3.11 起已弃用,将在版本 3.13 中移除: The aifc 模块已弃用(有关详细信息,请参见 PEP 594)。


此模块提供对读取和写入 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()。The 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()。此外,还存在以下方法。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.setmark(id, pos, name)

在给定位置添加一个标记,该标记具有给定的 ID(大于 0)和给定的名称。此方法可以在调用 close() 之前随时调用。

aifc.tell()

返回输出文件中的当前写入位置。与 setmark() 结合使用很有用。

aifc.writeframes(data)

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

Changed in version 3.4: 现在接受任何 字节类对象

aifc.writeframesraw(data)

writeframes() 相似,但不会更新音频文件头。

Changed in version 3.4: 现在接受任何 字节类对象

aifc.close()

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