sunau ---读写sun au文件

源代码: Lib/sunau.py


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

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

目录

魔术字

四字节 .snd .

标题大小

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

数据大小

数据的物理大小(字节)。

编码

指示如何对音频样本进行编码。

采样率

采样率。

通道的γ

样本中的通道数。

信息

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

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

这个 sunau 模块定义以下功能:

sunau.open(file, mode)

如果 file 是一个字符串,按该名称打开文件,否则将其视为可查找的文件,就像对象一样。 mode 可以是任何

'r'

只读模式。

'w'

只写模式。

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

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

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

读取对象

读取对象,由返回 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()

返回A 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)

提出错误。

写对象

写入对象,由返回 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)

编写音频帧,不更正 n框架 .

在 3.4 版更改: 任何 bytes-like object 现在被接受。

AU_write.writeframes(data)

编写音频帧并确保 n框架 是正确的。

在 3.4 版更改: 任何 bytes-like object 现在被接受。

AU_write.close()

确保 n框架 正确,然后关闭文件。

删除时调用此方法。

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