40.1. sunaudiodev — 访问 Sun 音频硬件 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/sunaudio
跳转至:导航、​搜索

40.1. 太阳音频开发 — 访问 Sun 音频硬件

自 2.6 版起已弃用:sunaudiodev 模块已在 Python 3 中删除。


该模块允许您访问 Sun 音频接口。 Sun 音频硬件能够以每秒 8K 的采样率以 u-LAW 格式录制和播放音频数据。 完整说明可在 audio(7I) 手册页中找到。

模块 SUNAUDIODEV 定义了可以与该模块一起使用的常量。

该模块定义了以下变量和函数:

exception sunaudiodev.error
所有错误都会引发此异常。 参数是一个字符串,描述出了什么问题。
sunaudiodev.open(mode)

此函数打开音频设备并返回一个 Sun 音频设备对象。 然后可以使用该对象进行 I/O。 mode 参数是仅记录访问的 'r'、仅播放访问的 'w'、两者的 'rw''control' 之一] 用于访问控制设备。 由于只允许一个进程同时打开记录器或播放器,因此最好仅针对所需活动打开设备。 有关详细信息,请参阅 audio(7I)

根据联机帮助页,该模块首先在环境变量 AUDIODEV 中查找基本音频设备文件名。 如果没有找到,则回退到/dev/audio。 控制设备是通过将“ctl”附加到基本音频设备来计算的。

40.1.1. 音频设备对象

open() 返回的音频设备对象定义了以下方法(control 对象除外,它们仅提供 getinfo()setinfo()、[ X157X] 和 drain()):

audio device.close()
此方法显式关闭设备。 它在删除对象不会立即关闭它的情况下很有用,因为还有其他引用它。 不应再次使用封闭的设备。
audio device.fileno()
返回与设备关联的文件描述符。 这可用于设置 SIGPOLL 通知,如下所述。
audio device.drain()
此方法等待所有待处理的输出处理完毕,然后返回。 调用此方法通常不是必需的:销毁对象将自动关闭音频设备,这将进行隐式消耗。
audio device.flush()
此方法丢弃所有挂起的输出。 它可用于避免对用户停止请求的响应缓慢(由于缓冲长达一秒的声音)。
audio device.getinfo()
此方法检索输入和输出音量等状态信息。 并以音频状态对象的形式返回它。 该对象没有方法,但它包含许多描述当前设备状态的属性。 <sun/audioio.h>audio(7I) 手册页中描述了属性的名称和含义。 成员名称与其对应的 C 名称略有不同:状态对象只是一个结构。 play 子结构的成员在其名称前加上 o_,而 record 结构的成员有 i_。 因此,C 成员 play.sample_rate 被访问为 o_sample_raterecord.gain 被访问为 i_gain,而 monitor_gain 被访问为 monitor_gain
audio device.ibufcount()
该方法返回记录端缓冲的样本数,即 程序不会在这么多样本的 read() 调用上阻塞。
audio device.obufcount()
此方法返回在播放端缓冲的样本数。 不幸的是,由于内核输出队列长度似乎是可变的,因此这个数字不能用于确定可以在不阻塞的情况下写入的样本数量。
audio device.read(size)
此方法从音频输入中读取 size 样本,并将它们作为 Python 字符串返回。 该功能会阻塞,直到有足够的数据可用。
audio device.setinfo(status)
此方法设置音频设备状态参数。 status 参数是由 getinfo() 返回并可能由程序修改的设备状态对象。
audio device.write(samples)
Write 传递一个包含要播放的音频样本的 Python 字符串。 如果有足够的可用缓冲区空间,它将立即返回,否则将阻塞。

音频设备通过 SIGPOLL 信号支持各种事件的异步通知。 以下是如何在 Python 中启用此功能的示例:

def handle_sigpoll(signum, frame):
    print 'I got a SIGPOLL update'

import fcntl, signal, STROPTS

signal.signal(signal.SIGPOLL, handle_sigpoll)
fcntl.ioctl(audio_obj.fileno(), STROPTS.I_SETSIG, STROPTS.S_MSG)

40.2. SUNAUDIODEV — 使用的常量太阳音频开发

自 2.6 版起已弃用:SUNAUDIODEV 模块已在 Python 3 中删除。


这是 sunaudiodev 的配套模块,它定义了有用的符号常量,如 MIN_GAINMAX_GAINSPEAKER 等。 常量的名称与 C 包含文件 <sun/audioio.h> 中使用的名称相同,但去掉了前导字符串 AUDIO_