aifc ---读写AIFF和AIFC文件

源代码: Lib/aifc.py


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

音频文件有许多描述音频数据的参数。采样率或帧速率是每秒对声音进行采样的次数。频道数表示音频是单声道、立体声还是四声道。每个帧由每个通道一个样本组成。样本大小是每个样本的字节大小。因此,框架由 nchannels * samplesize 字节,一秒钟的音频包括 nchannels * samplesize * framerate 字节。

例如,CD质量音频的采样大小为两个字节(16位),使用两个通道(立体声),帧速率为44100帧/秒。这使得帧大小为4字节(2 * 2),一秒钟的价值占2 * 2 * 44100字节(176400字节)。

模块 aifc 定义以下函数:

aifc.open(file, mode=None)

打开一个aiff或aiff-c文件并返回一个对象实例,方法如下所述。参数 file 是命名文件的字符串或 file object . 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()

返回A namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname) ,相当于 get*() 方法。

aifc.getmarkers()

返回音频文件中标记的列表。标记由三个元素组成的元组组成。第一个是标记ID(整数),第二个是从数据开始的帧中的标记位置(整数),第三个是标记的名称(字符串)。

aifc.getmark(id)

返回tuple,如中所述 getmarkers() 对于给定的标记 id .

aifc.readframes(nframes)

阅读并返回下一个 n框架 音频文件中的帧。返回的数据是一个字符串,其中每个帧包含所有通道的未压缩样本。

aifc.rewind()

倒回读指针。下一个 readframes() 将从头开始。

aifc.setpos(pos)

查找指定的帧编号。

aifc.tell()

返回当前帧号。

aifc.close()

关闭AIFF文件。调用此方法后,无法再使用该对象。

返回的对象 open() 打开文件进行写入时,除了 readframes()setpos() .此外,还存在以下方法。这个 get*() 方法只能在相应的 set*() 方法已被调用。在第一个之前 writeframes()writeframesraw() ,必须填写除帧数以外的所有参数。

aifc.aiff()

创建AIFF文件。默认情况下,除非文件名以 '.aiff' 在这种情况下,默认值是aiff文件。

aifc.aifc()

创建一个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文件。文件头会更新以反映音频数据的实际大小。调用此方法后,无法再使用该对象。