使用 Python (aifc) 读取和写入 AIFF 和 AIFC 文件
aifc 模块中的各种函数提供了对读取和写入 AIFF(音频交换文件格式)和 AIFF-C 文件的支持。AIFF 格式用于将数字音频样本存储在文件中。其更新版本 AIFF-C 能够压缩音频数据。
音频文件包含许多描述音频数据的参数。
采样率或帧率:每秒钟对声音进行采样的次数。
声道数:指示音频是单声道、立体声还是四声道。
帧:每个声道包含一个样本。
样本大小:每个样本的字节大小。
因此,一个帧包含声道 * 样本大小字节。1 秒的音频数据为声道 * 样本大小 * 帧率字节。
aifc 模块中定义了以下函数
aifc.open()
此函数打开一个 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, nframes, comptype, compname |
| readframes() | 读取并返回音频文件中的下一个 nframes 帧。 |
| setpos(pos) | 跳转到指定的帧号。 |
这些函数可用于可读和可写的 aiff 对象
| rewind() | 倒回读取指针。下一个 readframes() 将从开头开始。 |
| tell() | 返回当前帧号。 |
| close() | 关闭 AIFF 文件。调用此方法后,该对象将无法再使用。 |
示例
以下程序读取 aiff 文件的属性
import aifc
obj = aifc.open('sound.aiff','r')
print( "Number of channels",obj.getnchannels())
print ( "Sample width",obj.getsampwidth())
print ( "Frame rate.",obj.getframerate())
print ("Number of frames",obj.getnframes())
print ( "parameters:",obj.getparams())
obj.close()输出
Number of channels 1 Sample width 2 Frame rate. 44100 Number of frames 99999 parameters: _aifc_params(nchannels=1, sampwidth=2, framerate=44100, nframes=99999, comptype=b'NONE', compname=b'not compressed')
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP