源代码: Lib/sunau.py
sunau 模拟提供了一个处理 Sun AU 声音格式的便利接口。请注意此模块与 aifc 和 wave 是兼容接口的。
音频文件由标头和数据组成。标头的字段为:
域 | 目录 |
magic word | 四个字节 .snd |
header size | 标头的大小,包括信息,以字节为单位。 |
data size | 数据的物理大小,以字节为单位。 |
编码 | 指示音频样本的编码方式。 |
sample rate | 采样率 |
# of channels | 的通道数。 |
info | 提供音频文件描述的ASCII字符串(用空字节填充)。 |
除了info字段之外,所有头字段的大小都是4字节。它们都是用大端字节顺序编码的32位无符号整数。
sunau模块定义了以下功能:
sunau.open(file, mode)
如果file是一个字符串,按该名称打开文件,否则将其视为一个可查找的类文件对象。
mode:
‘r':
只读模式。
‘w':
只写模式。
注意,它不允许读/写文件。
'r'模式返回一个AU_read对象,而'w'或'wb'模式返回一个AU_write对象。
sunau.openfp(file, mode)
同 open() ,用于向后兼容。
sunau模块定义了以下异常:
exception sunau.Error
由于Sun AU规格或实现缺陷而导致某些事情不可能完成时出现的错误。
sunau模块定义了以下数据项:
sunau.AUDIO_FILE_MAGIC
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
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_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”和“未压缩”。
AU_read.getparams()
返回一个 namedtuple() (nchannels, sampwidth, framerate, nframes, comptype, compname),与 get*() 方法的输出相同。
AU_read.readframes(n)
读取和返回最多n帧的音频,作为一个字节对象。数据将以线性格式返回。如果原始数据是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)
Set the sample width (in bytes.)
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是正确的,然后关闭文件。
在删除时调用此方法。
注意,在调用writeframes()或writeframesraw()之后设置任何参数都是无效的。