21.3. aifc —读写 AIFF 和 AIFC 文件

源代码: Lib/aifc.py


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

Note

某些操作可能仅在 IRIX 下有效;try导入cl模块(仅在 IRIX 上可用)时,它们将引发ImportError

音频文件具有许多描述音频数据的参数。采样率或帧率是每秒采样声音的次数。通道数指示音频是单声道,立体声还是四声道。每个帧每个通道包含一个 samples。samples 大小是每个 samples 的大小(以字节为单位)。因此,一帧包含* nchannels * * samplesize 个字节,而一秒钟的音频包含 nchannels * * samplesize * * * framerate *个字节。

例如,CD 质量的音频的 samples 大小为 2 个字节(16 位),使用两个声道(立体声),并且帧速率为 44,100 帧/秒。这样得出的帧大小为 4 字节(2 * 2),一秒钟的时间占用 2 * 2 * 44100 字节(176,400 字节)。

模块aifc定义以下Function:

  • aifc. open(* file * [,* mode *])
    • 打开 AIFF 或 AIFF-C 文件,并使用下面介绍的方法返回对象实例。参数* file 是命名文件或文件对象的字符串。当必须打开文件进行读取时, mode 必须为'r''rb',而当必须打开文件进行写入时, mode *必须为'w''wb'。如果Ellipsis,则使用file.mode(如果存在),否则使用'rb'。当用于写入时,文件对象应该是可搜索的,除非您事先知道要总共写入多少个 samples 并使用writeframesraw()setnframes()

打开文件进行读取时,open()返回的对象具有以下方法:

  • aifc. getnchannels ( )

    • 返回音频通道的数量(单声道为 1,立体声为 2)。
  • aifc. getsampwidth ( )

    • 返回单个 samples 的大小(以字节为单位)。
  • aifc. getframerate ( )

    • 返回采样率(每秒的音频帧数)。
  • aifc. getnframes ( )

    • 返回文件中的音频帧数。
  • aifc. getcomptype ( )

    • 返回一个四个字符的字符串,描述音频文件中使用的压缩类型。对于 AIFF 文件,返回值为'NONE'
  • aifc. getcompname ( )

    • 返回人类可读的音频文件中使用的压缩类型的描述。对于 AIFF 文件,返回值为'not compressed'
  • aifc. getparams ( )

    • 以上述 Sequences 返回由上述所有值组成的 Tuples。
  • aifc. getmarkers ( )

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

    • 返回getmarkers()中描述的具有给定* id *的标记的 Tuples。
  • aifc. readframes(* nframes *)

    • 读取并返回音频文件中的下一个* nframe *帧。返回的数据是一个字符串,其中包含每个帧的所有通道的未压缩 samples。
  • aifc. rewind ( )

    • 倒回读取指针。下一个readframes()将从头开始。
  • aifc. setpos(* pos *)

    • 寻求指定的帧号。
  • aifc. tell ( )

    • 返回当前帧号。
  • aifc. close ( )

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

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

  • aifc. aiff ( )

    • 创建一个 AIFF 文件。默认值是创建 AIFF-C 文件,除非文件名以'.aiff'结尾,在这种情况下默认值为 AIFF 文件。
  • aifc. aifc ( )

    • 创建一个 AIFF-C 文件。默认值是创建 AIFF-C 文件,除非文件名以'.aiff'结尾,在这种情况下默认值为 AIFF 文件。
  • aifc. setnchannels(* nchannels *)

    • 指定音频文件中的声道数。
  • aifc. setsampwidth(* width *)

    • 指定音频 samples 的大小(以字节为单位)。
  • aifc. setframerate(* rate *)

    • 以每秒帧为单位指定采样频率。
  • aifc. setnframes(* nframes *)

    • 指定要写入音频文件的帧数。如果未设置或未正确设置此参数,则文件需要支持查找。
  • aifc. setcomptype(* type name *)

    • 指定压缩类型。如果未指定,则不会压缩音频数据。在 AIFF 文件中,无法进行压缩。名称参数应该是人类可以理解的压缩类型的描述,类型参数应该是四个字符的字符串。当前支持以下压缩类型:NONE,ULAW,ALAW,G722.
  • aifc. setparams(* nchannels sampwidth framerate comptype compname *)

    • 一次设置以上所有参数。参数是一个由各种参数组成的 Tuples。这意味着可以将getparams()调用的结果用作setparams()的参数。
  • aifc. setmark(* id pos name *)

    • 在给定位置添加具有给定 id(大于 0)和给定名称的标记。可以在close()之前的任何时间调用此方法。
  • aifc. tell ( )

    • 返回输出文件中的当前写入位置。与setmark()结合使用。
  • aifc. writeframes(* data *)

    • 将数据写入输出文件。仅在设置了音频文件参数后才能调用此方法。
  • aifc. writeframesraw(* data *)

    • 类似于writeframes(),只是音频文件的 Headers 未更新。
  • aifc. close ( )

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