sunau — 读取和写入 Sun AU 文件

源代码: Lib/sunau.py

自 3.11 版弃用,将在 3.13 版中移除: sunau 模块已弃用(有关详细信息,请参阅 PEP 594)。


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

音频文件由一个头文件和数据组成。头文件包含以下字段

字段

内容

魔术字

四个字节 .snd

头文件大小

头文件的大小,包括信息,以字节为单位。

数据大小

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

编码

指示音频样本的编码方式。

采样率

采样率。

声道数

样本中的声道数。

信息

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

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

sunau 模块定义了以下函数

sunau.open(file, mode)

如果文件是一个字符串,则按该名称打开文件,否则将其视为可寻址的文件类对象。模式可以是以下任何一种

'r'

只读模式。

'w'

只写模式。

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

模式'r' 返回一个 AU_read 对象,而模式'w''wb' 返回一个 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)

将文件指针设置为指定位置。对于 pos,只应使用从 tell() 返回的值。

AU_read.tell()

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

以下两个函数是为了与 aifc 兼容而定义的,并且不会执行任何有趣的操作。

AU_read.getmarkers()

返回 None

AU_read.getmark(id)

引发错误。

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)

元组应为 (nchannels, sampwidth, framerate, nframes, comptype, compname),其中值对 set*() 方法有效。设置所有参数。

AU_write.tell()

返回文件中的当前位置,对于 AU_read.tell()AU_read.setpos() 方法,免责声明相同。

AU_write.writeframesraw(data)

写入音频帧,无需更正nframes

版本 3.4 中已更改:现在接受任何 类字节对象

AU_write.writeframes(data)

写入音频帧并确保nframes正确。

版本 3.4 中已更改:现在接受任何 类字节对象

AU_write.close()

确保nframes正确,并关闭文件。

此方法在删除时调用。

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