40.1. sunaudiodev — Sunオーディオハードウェアへのアクセス—Pythonドキュメント
40.1。 sunaudiodev —Sunオーディオハードウェアへのアクセス
バージョン2.6以降非推奨: sunaudiodev モジュールはPython3で削除されました。
このモジュールを使用すると、Sunオーディオインターフェイスにアクセスできます。 Sunオーディオハードウェアは、8K /秒のサンプルレートでu-LAW形式のオーディオデータを録音および再生できます。 詳細な説明は、 audio(7I)のマニュアルページにあります。
モジュール SUNAUDIODEV は、このモジュールで使用できる定数を定義します。
このモジュールは、次の変数と関数を定義します。
- exception sunaudiodev.error
- この例外は、すべてのエラーで発生します。 引数は、何が悪かったのかを説明する文字列です。
- sunaudiodev.open(mode)
この関数はオーディオデバイスを開き、Sunオーディオデバイスオブジェクトを返します。 このオブジェクトを使用して、I / Oを実行できます。 mode パラメーターは、レコードのみのアクセスの場合は
'r'
、再生のみのアクセスの場合は'w'
、両方の場合は'rw'
、'control'
のいずれかです。 ]制御装置へのアクセス用。 レコーダーまたはプレーヤーを同時に開くことができるプロセスは1つだけなので、必要なアクティビティのためだけにデバイスを開くことをお勧めします。 詳細については、 audio(7I)を参照してください。マンページに従って、このモジュールは最初に環境変数
AUDIODEV
でベースオーディオデバイスのファイル名を探します。 見つからない場合は、/dev/audio
にフォールバックします。 制御デバイスは、ベースオーディオデバイスに「ctl」を追加することによって計算されます。
40.1.1。 オーディオデバイスオブジェクト
オーディオデバイスオブジェクトは、 open()によって返され、次のメソッドを定義します(getinfo()
、setinfo()
、 [のみを提供するcontrol
オブジェクトを除く) X157X]、およびdrain()
):
- audio device.close()
- このメソッドは、デバイスを明示的に閉じます。 オブジェクトへの他の参照があるため、オブジェクトを削除してもすぐには閉じない場合に便利です。 閉じたデバイスを再度使用しないでください。
- audio device.fileno()
- デバイスに関連付けられているファイル記述子を返します。 これは、以下で説明するように、
SIGPOLL
通知を設定するために使用できます。
- audio device.drain()
- このメソッドは、保留中のすべての出力が処理されるまで待機してから戻ります。 多くの場合、このメソッドを呼び出す必要はありません。オブジェクトを破棄すると、オーディオデバイスが自動的に閉じられ、暗黙的にドレインされます。
- audio device.flush()
- このメソッドは、保留中の出力をすべて破棄します。 これは、ユーザーの停止要求への応答が遅いことを回避するために使用できます(最大1秒のサウンドのバッファリングによる)。
- 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 —で使用される定数 sunaudiodev
バージョン2.6以降非推奨: SUNAUDIODEV モジュールはPython3で削除されました。
これは、 sunaudiodev のコンパニオンモジュールであり、MIN_GAIN
、MAX_GAIN
、SPEAKER
などの便利なシンボリック定数を定義します。 定数の名前は、Cインクルードファイル<sun/audioio.h>
で使用されている名前と同じですが、先頭の文字列AUDIO_
が削除されています。