aifc — 读写 AIFF 和 AIFC 文件 — Python 文档

来自菜鸟教程
Python/docs/3.9/library/aifc
跳转至:导航、​搜索

aifc — 读写 AIFF 和 AIFC 文件

源代码: :source:`Lib/aifc.py`



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

音频文件有许多描述音频数据的参数。 采样率或帧率是每秒采样声音的次数。 通道数表示音频是单声道、立体声还是四声道。 每一帧由每个通道的一个样本组成。 样本大小是每个样本的字节大小。 因此,一帧由 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 是命名文件的字符串或 文件对象mode 必须是 'r''rb' 文件必须打开读取,或 '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 文件。 更新文件的标题以反映音频数据的实际大小。 调用此方法后,该对象不能再使用。