aifc模块中的各种功能为读取和写入AIFF(音频交换文件格式)和AIFF-C文件提供了支持。AIFF格式用于将数字音频样本存储在文件中。其较新版本的AIFF-C具有压缩音频数据的能力
音频文件具有描述音频数据的参数数量。
采样率或帧率:每秒采样声音的次数。
声道数:指示音频是单声道,立体声还是四声道。
帧:每个通道包含一个样本。
样本大小:每个样本的大小(以字节为单位)。
因此,帧由通道*采样字节组成。1秒的音频数据是通道*采样大小*帧速率字节。
aifc模块中定义了以下功能:
此函数将打开AIFF或AIFF-C文件并根据模式返回用于读取/写入音频数据的对象实例。如果必须打开文件以进行读取,则该对象实例必须为'r'或'rb'。当必须打开文件进行写入时,应为“ w”或“ wb”。
具有写模式的对象使用以下功能
| aiff() | 创建一个AIFF文件。 | 
| aifc() | 创建一个AIFF-C文件。 | 
| setnchannels() | 指定音频文件中的声道数。 | 
| setsampwidth() | 指定音频样本的大小(以字节为单位)。 | 
| setframerate() | 以每秒帧为单位指定采样频率。 | 
| setnframes() | 指定要写入音频文件的帧数。 | 
| setcomptype() | 指定压缩类型。AIFF文件无法进行压缩。支持的压缩类型-b'NONE',b'ULAW',b'ALAW',b'G722'。 | 
| setparams() | 一次设置以上所有参数。参数是一个由各种参数组成的元组。 | 
| writeframes() | 将数据写入输出文件。Ť | 
| writeframesraw() | 与相似writeframes(),除了音频文件的标头未更新。 | 
以下程序创建一个AIFF文件
import aifc, struct
sampleRate = 44100.0 # hertz
duration = 1.0 # seconds
frequency = 440.0 # hertz
obj = aifc.open('sound.aiff','w')
obj.setnchannels(1) # mono
obj.setsampwidth(2)
obj.setframerate(sampleRate)
for i in range(99999):
value = random.randint(-32767, 32767)
data = struct.pack('<h', value)
obj.writeframesraw( data )
obj.close()aiff或aiff-c读取对象使用以下功能
| getnchannels() | 返回音频通道的数量(单声道为1,立体声为2)。 | 
| getsampwidth() | 返回单个样本的大小(以字节为单位)。 | 
| getframerate() | 返回采样率(每秒的音频帧数)。 | 
| getnframes() | 返回文件中音频帧的数量。 | 
| getcomptype() | 返回一个长度为4的字节数组,描述了音频文件中使用的压缩类型。 | 
| getparams() | 返回一个namedtuple()(nchannels,sampwidth,framerate,nframe,comptype,compname | 
| readframes() | 从音频文件读取并返回下一个nframe帧。 | 
| setpos(pos) | 寻求指定的帧号。 | 
这些功能可用于可读和可写aiff对象:
| 倒带() | 倒回读取指针。下一个readframes()将从头开始。 | 
| 告诉() | 返回当前帧号。 | 
| 关() | 关闭AIFF文件。调用此方法后,将无法再使用该对象。 | 
以下程序读取aiff文件的属性
import aifc
obj = aifc.open('sound.aiff','r')
print( "Number of channels",obj.getnchannels())
print ( "Sample width",obj.getsampwidth())
print ( "帧率。",obj.getframerate())
print ("Number of frames",obj.getnframes())
print ( "parameters:",obj.getparams())
obj.close()输出结果
Number of channels 1 Sample width 2 帧率。 44100 Number of frames 99999 parameters: _aifc_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype=b'NONE', compname=b'not compressed')