aifc —读写 AIFF 和 AIFC 文件

源代码: Lib/aifc.py


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

音频文件具有许多描述音频数据的参数。采样率或帧率是每秒采样声音的次数。通道数指示音频是单声道,立体声还是四声道。每个帧每个通道包含一个 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 = None *)
    • 打开 AIFF 或 AIFF-C 文件,并使用下面介绍的方法返回对象实例。参数* file 是命名文件的字符串或file object。当必须打开文件进行读取时, mode 必须为'r''rb',而必须打开文件进行写入时 mode 必须为'w''wb'。如果Ellipsis,则使用file.mode(如果存在),否则使用'rb'。当用于写入时,文件对象应该是可搜索的,除非您事先知道要总共写入多少个 samples 并使用writeframesraw()setnframes()open()函数可以在with语句中使用。 with块完成后,将调用close()方法。

在版本 3.4 中更改:添加了对with语句的支持。

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

  • aifc. getnchannels ( )

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

    • 返回单个 samples 的大小(以字节为单位)。
  • 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 ( )

    • 返回音频文件中的标记列表。标记由三个元素的 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 文件中,无法进行压缩。名称参数应该是对压缩类型的易于理解的描述,以字节数组的形式表示,类型参数应该是长度为 4 的字节数组。当前支持以下压缩类型:b'NONE'b'ULAW'b'ALAW'b'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 *)

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

在版本 3.4 中更改:现在接受任何bytes-like object

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

在版本 3.4 中更改:现在接受任何bytes-like object

  • aifc. close ( )

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