On this page
40.1. sunaudiodev-访问 Sun 音频硬件
自 2.6 版起弃用:sunaudiodev模块已在 Python 3 中删除。
该模块允许您访问 Sun 音频接口。 Sun 音频硬件能够以 u-LAW 格式记录和播放音频数据,采样速率为每秒 8K。完整说明可在* audio(7I)*手册页中找到。
模块SUNAUDIODEV定义可以与此模块一起使用的常量。
该模块定义以下变量和函数:
exception
sunaudiodev.
error
- 所有错误均引发此异常。参数是描述错误原因的字符串。
sunaudiodev.
open
(模式)- 此函数打开音频设备并返回 Sun 音频设备对象。然后可以使用该对象执行 I/O。 * mode 参数是
'r'
(仅用于记录访问),'w'
(仅用于播放访问),'rw'
(两者都用于)和'control'
(用于访问控制设备)之一。由于只允许一个进程同时打开 Logger 或播放器,因此最好仅针对所需的活动打开设备。有关详细信息,请参见 audio(7I)*。
- 此函数打开音频设备并返回 Sun 音频设备对象。然后可以使用该对象执行 I/O。 * mode 参数是
按照联机帮助页,此模块首先在环境变量AUDIODEV
中查找基本音频设备的文件名。如果找不到,它会退回到/dev/audio
。pass将“ ctl”附加到基本音频设备来计算控制设备。
40.1.1. 音频设备对象
open()返回的音频设备对象定义了以下方法(control
对象仅提供getinfo()
,setinfo()
,fileno()
和drain()
除外):
audio device.close()
- 此方法显式关闭设备。在删除对象没有立即关闭它的情况下,这很有用,因为存在对其的其他引用。封闭的设备不应再次使用。
audio device.fileno()
- 返回与设备关联的文件 Descriptors。可以用来设置
SIGPOLL
通知,如下所述。
- 返回与设备关联的文件 Descriptors。可以用来设置
audio device.drain()
- 该方法 await,直到处理完所有待处理的输出,然后返回。通常不需要调用此方法:销毁对象将自动关闭音频设备,这将导致隐式消耗。
audio device.flush()
- 此方法丢弃所有待处理的输出。可以使用它来避免对用户的停止请求的缓慢响应(由于缓冲了多达一秒钟的声音)。
audio device.getinfo()
- 此方法检索状态信息,例如 Importing 和输出音量等,并以音频状态对象的形式返回它。该对象没有方法,但是包含许多描述当前设备状态的属性。属性的名称和含义在
<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
被简单地访问。
- 此方法检索状态信息,例如 Importing 和输出音量等,并以音频状态对象的形式返回它。该对象没有方法,但是包含许多描述当前设备状态的属性。属性的名称和含义在
audio device.ibufcount()
- 此方法返回在记录端缓冲的 samples 数,即程序不会在
read()
调用如此多的 samples 时阻塞。
- 此方法返回在记录端缓冲的 samples 数,即程序不会在
audio device.obufcount()
- 此方法返回在回放侧缓冲的 samples 数。不幸的是,由于内核输出队列长度似乎是可变的,因此该数字不能用于确定可以不阻塞地写入的 samples 数。
audio device.read(size)
- 此方法从音频 Importing 中读取* size *个 samples,并将其作为 Python 字符串返回。该Function将阻塞,直到有足够的数据可用为止。
audio device.setinfo(status)
- 此方法设置音频设备状态参数。 * status *参数是设备状态对象,由
getinfo()
返回并可能由程序修改。
- 此方法设置音频设备状态参数。 * status *参数是设备状态对象,由
audio device.write(samples)
- Write 传递了一个 Python 字符串,其中包含要播放的音频 samples。如果有足够的可用缓冲区空间,它将立即返回,否则将阻塞。
音频设备pass SIGPOLLsignal 支持各种事件的异步通知。以下是如何在 Python 中启用此Function的示例:
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 —与 sunaudiodev 一起使用的常量
自 2.6 版起弃用:SUNAUDIODEV模块已在 Python 3 中删除。
这是sunaudiodev的配套模块,它定义了有用的符号常量,例如MIN_GAIN
,MAX_GAIN
,SPEAKER
等。这些常量的名称与 C 包含文件<sun/audioio.h>
中使用的名称相同,开头的字符串AUDIO_
被去除。