プラットフォーム: SunOS
バージョン 2.6 で撤廃: sunaudiodev モジュールは Python 3.0 での削除に向け非推奨になりました。
このモジュールを使うと、Sun のオーディオインターフェースにアクセスできます。 Sun オーディオハードウェアは、1秒あたり8kのサンプリングレート、u-LAW フォーマットでオーディオデータを録音、再生できます。 完全な説明文書はマニュアルページ audio(7I) にあります。
モジュール SUNAUDIODEV には、このモジュールで使われる定数が定義されています。
このモジュールには、以下の変数と関数が定義されています:
この例外は、全てのエラーについて発生します。引数は誤りを説明する文字列です。
この関数はオーディオデバイスを開き、Sun オーディオデバイスのオブジェクトを返します。こうすることで、オブジェクトが I/O に使用できるようになります。 パラメータ mode は次のうちのいずれか一つで、録音のみには 'r' 、 再生のみには 'w' 、録音と再生両方には 'rw' 、 コントロールデバイスへのアクセスには 'control' です。 レコーダーやプレーヤーには同時に1つのプロセスしかアクセスが許されていないので、必要な動作についてだけデバイスをオープンするのがいい考えです。 詳しくは audio(7I) を参照してください。 マニュアルページにあるように、このモジュールは環境変数 AUDIODEV の中のベースオーディオデバイスファイルネームを初めに参照します。見つからない場合は /dev/audio を参照します。 コントロールデバイスについては、ベースオーディオデバイスに”ctl”を加えて扱われます。
オーディオデバイスオブジェクトは open() で返され、このオブジェクトには以下のメソッドが定義されています (control オブジェクトは除きます。これには getinfo() 、 setinfo() 、 fileno() 、 drain() だけが定義されています):
このメソッドはデバイスを明示的に閉じます。 オブジェクトを削除しても、それを参照しているものがあって、すぐに閉じてくれない場合に便利です。 閉じられたデバイスを使うことはできません。
デバイスに関連づけられたファイルディスクリプタを返します。 これは、後述の SIGPOLL の通知を組み立てるのに使われます。
このメソッドは全ての出力中のプロセスが終了するまで待って、それから制御が戻ります。このメソッドの呼び出しはそう必要ではありません: オブジェクトを削除すると自動的にオーディオデバイスを閉じて、暗黙のうちに吐き出します。
このメソッドは全ての出力中のものを捨て去ります。 ユーザの停止命令に対する反応の遅れ(1秒までの音声のバッファリングによって起こります)を避けるのに使われます。
このメソッドは入出力のボリューム値などの情報を引き出して、オーディオステータスのオブジェクト形式で返します。 このオブジェクトには何もメソッドはありませんが、現在のデバイスの状態を示す多くの属性が含まれます。 属性の名称と意味は <sun/audioio.h> と audio(7I) に記載があります。 メンバー名は相当する C のものとは少し違っています: ステータスオブジェクトは1つの構造体です。 その中の構造体である play のメンバーには名前の初めに o_ がついていて、 record には i_ がついています。 そのため、C のメンバーである play.sample_rate は o_sample_rate として、 record.gain は i_gain として参照され、 monitor_gain はそのまま monitor_gain で参照されます。
このメソッドは録音側でバッファリングされるサンプル数を返します。 つまり、プログラムは同じ大きさのサンプルに対する read() の呼び出しをブロックしません。
このメソッドは再生側でバッファリングされるサンプル数を返します。 残念ながら、この数値はブロックなしに書き込めるサンプル数を調べるのには使えません。というのは、カーネルの出力キューの長さは可変だからです。
このメソッドはオーディオ入力から size のサイズのサンプルを読み込んで、Pythonの文字列として返します。 この関数は必要なデータが得られるまで他の操作をブロックします。
このメソッドはオーディオデバイスのステータスパラメータを設定します。 パラメータ status は getinfo() で返されたり、 プログラムで変更されたオーディオステータスオブジェクトです。
パラメータとしてオーディオサンプルを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)
プラットフォーム: SunOS
バージョン 2.6 で撤廃: SUNAUDIODEV モジュールは Python 3.0 での削除に向け非推奨になりました。
これは sunaudiodev に付随するモジュールで、 MIN_GAIN 、 MAX_GAIN 、 SPEAKER などの便利なシンボル定数を定義しています。 定数の名前は C の include ファイル <sun/audioio.h> のものと同じで、 初めの文字列 AUDIO_ を除いたものです。