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)*。

按照联机帮助页,此模块首先在环境变量AUDIODEV中查找基本音频设备的文件名。如果找不到,它会退回到/dev/audio。pass将“ ctl”附加到基本音频设备来计算控制设备。

40.1.1. 音频设备对象

open()返回的音频设备对象定义了以下方法(control对象仅提供getinfo()setinfo()fileno()drain()除外):

  • audio device.close()

    • 此方法显式关闭设备。在删除对象没有立即关闭它的情况下,这很有用,因为存在对其的其他引用。封闭的设备不应再次使用。
  • audio device.fileno()

    • 返回与设备关联的文件 Descriptors。可以用来设置SIGPOLL通知,如下所述。
  • 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被简单地访问。
  • audio device.ibufcount()

    • 此方法返回在记录端缓冲的 samples 数,即程序不会在read()调用如此多的 samples 时阻塞。
  • audio device.obufcount()

    • 此方法返回在回放侧缓冲的 samples 数。不幸的是,由于内核输出队列长度似乎是可变的,因此该数字不能用于确定可以不阻塞地写入的 samples 数。
  • audio device.read(size)

    • 此方法从音频 Importing 中读取* size *个 samples,并将其作为 Python 字符串返回。该Function将阻塞,直到有足够的数据可用为止。
  • audio device.setinfo(status)

    • 此方法设置音频设备状态参数。 * status *参数是设备状态对象,由getinfo()返回并可能由程序修改。
  • 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_GAINMAX_GAINSPEAKER等。这些常量的名称与 C 包含文件<sun/audioio.h>中使用的名称相同,开头的字符串AUDIO_被去除。