sunau —读写 Sun AU 文件

源代码: Lib/sunau.py


sunau模块为 Sun AU 声音格式提供了方便的界面。请注意,此模块与模块aifcwave接口兼容。

音频文件由标题和数据组成。Headers 的字段为:

FieldContents
magic word四个字节.snd
header sizeHeaders 的大小,包括信息,以字节为单位。
data size数据的物理大小,以字节为单位。
encoding指示音频 samples 的 encodings。
sample rate采样率。
Channels 数samples 中的通道数。
info提供音频文件描述的 ASCII 字符串(用空字节填充)。

除信息字段外,所有 Headers 字段均为 4 个字节。它们都是以 big-endian 字节 Sequences 编码的 32 位无符号整数。

sunau模块定义以下Function:

  • sunau. open(* file mode *)

    • 如果* file *是字符串,请使用该名称打开文件,否则将其视为可搜索的类似于文件的对象。 模式可以是以下任何一种
  • 'r'

    • 只读模式。

    • 'w'

      • 只写模式。

请注意,它不允许读/写文件。

'r'的* mode 返回AU_read对象,而'w''wb' mode *返回AU_write对象。

  • sunau. openfp(* file mode *)
    • open()的同义词,为向后兼容而保留。

从 3.7 版开始不推荐使用,将在 3.9 版中删除。

sunau模块定义以下异常:

  • exception sunau. Error
    • 当由于 Sun AU 规范或实施缺陷而无法解决某些问题时,将引发错误。

sunau模块定义以下数据项:

  • sunau. AUDIO_FILE_MAGIC

    • 每个有效的 Sun AU 文件都以整数开头,并以 big-endian 形式存储。这是字符串.snd解释为整数。
  • sunau. AUDIO_FILE_ENCODING_MULAW_8

  • sunau. AUDIO_FILE_ENCODING_LINEAR_8

  • sunau. AUDIO_FILE_ENCODING_LINEAR_16

  • sunau. AUDIO_FILE_ENCODING_LINEAR_24

  • sunau. AUDIO_FILE_ENCODING_LINEAR_32

  • sunau. AUDIO_FILE_ENCODING_ALAW_8

    • 此模块支持 AU 头中编码字段的值。
  • sunau. AUDIO_FILE_ENCODING_FLOAT

  • sunau. AUDIO_FILE_ENCODING_DOUBLE

  • sunau. AUDIO_FILE_ENCODING_ADPCM_G721

  • sunau. AUDIO_FILE_ENCODING_ADPCM_G722

  • sunau. AUDIO_FILE_ENCODING_ADPCM_G723_3

  • sunau. AUDIO_FILE_ENCODING_ADPCM_G723_5

    • AUHeaders 中编码字段的其他已知值,但此模块不支持。

AU_read Objects

如上面的open()返回的 AU_read 对象具有以下方法:

  • AU_read. close ( )

    • 关闭流,并使实例不可用。 (这在删除时自动称为.)
  • AU_read. getnchannels ( )

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

    • 返回以字节为单位的 samples 宽度。
  • AU_read. getframerate ( )

    • 返回采样频率。
  • AU_read. getnframes ( )

    • 返回音频帧数。
  • AU_read. getcomptype ( )

    • 返回压缩类型。支持的压缩类型为'ULAW''ALAW''NONE'
  • AU_read. getcompname ( )

    • getcomptype()的可读版本。支持的类型分别具有名称'CCITT G.711 u-law''CCITT G.711 A-law''not compressed'
  • AU_read. getparams ( )

    • 返回namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname),等效于get*()方法的输出。
  • AU_read. readframes(* n *)

    • 读取并返回最多* n *帧音频,作为bytes对象。数据将以线性格式返回。如果原始数据为 u-LAW 格式,将对其进行转换。
  • AU_read. rewind ( )

    • 将文件指针倒退到音频流的开头。

以下两种方法定义了术语“位置”,它们在它们之间是兼容的,否则与实现有关。

  • AU_read. setpos(* pos *)

    • 将文件指针设置到指定位置。 * pos *仅应使用从tell()返回的值。
  • AU_read. tell ( )

    • 返回当前文件指针位置。请注意,返回的值与文件中的实际位置无关。

定义以下两个函数是为了与aifc兼容,并且不会做任何有趣的事情。

  • AU_read. getmarkers ( )

    • 返回None
  • AU_read. getmark(* id *)

    • 引发错误。

AU_write Objects

如上面的open()返回的 AU_write 对象具有以下方法:

  • AU_write. setnchannels(* n *)

    • 设置 Channels 数。
  • AU_write. setsampwidth(* n *)

    • 设置 samples 宽度(以字节为单位)。

在版本 3.4 中进行了更改:添加了对 24 位 samples 的支持。

  • AU_write. setframerate(* n *)

    • 设置帧频。
  • AU_write. setnframes(* n *)

    • 设置帧数。当以及是否写入更多帧时,可以稍后更改。
  • AU_write. setcomptype(* type name *)

    • 设置压缩类型和描述。输出仅支持'NONE''ULAW'
  • AU_write. setparams(* tuple *)

      • tuple *应该是(nchannels, sampwidth, framerate, nframes, comptype, compname),其值对于set*()方法有效。设置所有参数。
  • AU_write. tell ( )

  • AU_write. writeframesraw(* data *)

    • 编写音频帧,而不校正* nframes *。

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

  • AU_write. writeframes(* data *)
    • 编写音频帧,并确保* nframes *正确。

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

  • AU_write. close ( )
    • 确保* nframes *是正确的,然后关闭文件。

删除时调用此方法。

请注意,在调用writeframes()writeframesraw()之后设置任何参数都是无效的。