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_rate
,record.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_GAIN
、MAX_GAIN
、SPEAKER
等。 常量的名称与 C 包含文件 <sun/audioio.h>
中使用的名称相同,但去掉了前导字符串 AUDIO_
。