sunau — 读取和写入 Sun AU 文件 — Python 文档

来自菜鸟教程
Python/docs/3.9/library/sunau
跳转至:导航、​搜索

sunau — 读写 Sun AU 文件

源代码: :source:`Lib/sunau.py`



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

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

场地 内容
魔法词 四个字节 .snd
标题大小 标头的大小,包括信息,以字节为单位。
数据大小 数据的物理大小,以字节为单位。
编码 指示音频样本的编码方式。
采样率 采样率。
频道数量 样本中的通道数。
信息 给出音频文件描述的 ASCII 字符串(用空字节填充)。

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

sunau 模块定义了以下函数:

sunau.open(file, mode)

如果 file 是字符串,则按该名称打开文件,否则将其视为可查找的类文件对象。 mode 可以是

'r'

只读模式。

'w'

只写模式。

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

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

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 标头的编码字段的其他已知值,但本模块不支持这些值。

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()
返回一个 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)
提出错误。


AU_write 对象

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

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)
元组应该是(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 正确,然后关闭文件。

删除时调用此方法。

注意调用【X61X】【X65X】或【X74X】【X78X】后,任何参数设置均无效。