Skip to main content

22.3. sunau —读写Sun AU文件

源代码: Lib/sunau.py


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

音频文件由标题后跟数据组成。标题的字段是:

领域

内容

魔术词

四字节 .snd

标题大小

标题的大小,包括info,以字节为单位。

数据大小

数据的物理大小(以字节为单位)。

编码

指示音频样本如何编码。

采样率

采样率。

频道数量

样本中的通道数。

信息

给出音频文件描述的ASCII字符串(用空字节填充)。

除了info字段,所有头字段的大小为4字节。它们都是以大端字节顺序编码的32位无符号整数。

sunau 模块定义以下功能:

sunau.open(file, mode)

如果 file 是字符串,请使用该名称打开该文件,否则将其视为可搜索的类文件对象。 mode 可以是任何

'r'

只读模式。

'w'

只写模式。

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

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

sunau.openfp(file, mode)

open() 的同义词,为了向后兼容性而维护。

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

来自AU标头的编码字段的其他已知值,但不受此模块支持。

22.3.1. AU_read对象

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

AU_read.close()

关闭流,并使实例不可用。 (删除时自动调用。)

AU_read.getnchannels()

返回音频通道数(1表示金钱,2表示立体声)。

AU_read.getsampwidth()

返回以字节为单位的样本宽度。

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)

将文件指针设置为指定位置。只有从 tell() 返回的值才能用于 pos

AU_read.tell()

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

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

AU_read.getmarkers()

返回 None

AU_read.getmark(id)

引发错误。

22.3.2. AU_write对象

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

AU_write.setnchannels(n)

设置通道数。

AU_write.setsampwidth(n)

设置样本宽度(以字节为单位)。

在 3.4 版更改: 增加了对24位样本的支持。

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_read.tell()AU_read.setpos() 方法使用相同的免责声明。

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() 后设置任何参数无效。