21.4. sunau — 读取和写入 Sun AU 文件 — Python 文档
21.4. 苏瑙 — 读取和写入 Sun AU 文件
sunau 模块为 Sun AU 声音格式提供了一个方便的接口。 请注意,该模块与模块 aifc 和 wave 的接口兼容。
音频文件由标题和数据组成。 标题的字段是:
场地 | 内容 |
---|---|
魔法词 | 四个字节 .snd 。
|
标题大小 | 标头的大小,包括信息,以字节为单位。 |
数据大小 | 数据的物理大小,以字节为单位。 |
编码 | 指示音频样本的编码方式。 |
采样率 | 采样率。 |
频道数量 | 样本中的通道数。 |
信息 | 给出音频文件描述的 ASCII 字符串(用空字节填充)。 |
除信息字段外,所有头字段的大小均为 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 文件开头的整数,以大端格式存储。 这是解释为整数的字符串
.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 标头的编码字段的其他已知值,但本模块不支持这些值。
21.4.1. AU_read 对象
AU_read 对象,由上面的 open() 返回,有以下方法:
- 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()
- 返回一个元组
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,相当于get*()
方法的输出。
- AU_read.readframes(n)
- 读取并返回至多 n 帧音频,作为字节字符串。 数据将以线性格式返回。 如果原始数据为 u-LAW 格式,则会进行转换。
- AU_read.rewind()
- 将文件指针倒回到音频流的开头。
以下两种方法定义了一个术语“位置”,它在它们之间是兼容的,否则取决于实现。
- AU_read.setpos(pos)
- 将文件指针设置到指定位置。 只有从 tell() 返回的值应该用于 pos。
- AU_read.tell()
- 返回当前文件指针位置。 请注意,返回值与文件中的实际位置无关。
下面两个函数是为了兼容aifc而定义的,不做任何有趣的事情。
- AU_read.getmarkers()
- 返回
None
。
- AU_read.getmark(id)
- 提出错误。
21.4.2. AU_write 对象
AU_write 对象,由上面的 open() 返回,有以下方法:
- AU_write.setnchannels(n)
- 设置通道数。
- AU_write.setsampwidth(n)
- 设置样本宽度(以字节为单位)。
- AU_write.setframerate(n)
- 设置帧率。
- AU_write.setnframes(n)
- 设置帧数。 这可以稍后更改,何时以及是否写入更多帧。
- AU_write.setcomptype(type, name)
- 设置压缩类型和描述。 输出仅支持
'NONE'
和'ULAW'
。
- AU_write.setparams(tuple)
- 元组应该是
(nchannels, sampwidth, framerate, nframes, comptype, compname)
,值对set*()
方法有效。 设置所有参数。
- AU_write.tell()
- 返回文件中的当前位置,对 AU_read.tell() 和 AU_read.setpos() 方法具有相同的免责声明。
- AU_write.writeframesraw(data)
- 写入音频帧,不修正 nframes。
- AU_write.writeframes(data)
- 写入音频帧并确保 nframes 正确。
- AU_write.close()
确保 nframes 正确,然后关闭文件。
删除时调用此方法。
注意调用【X61X】【X65X】或【X74X】【X78X】后,任何参数设置均无效。