14.11.1 オーディオデバイスオブジェクト

デバイスの設定

デバイスを設定するために、3つの関数を正しい順序で呼び出さなければなりま せん。

  1. setfmt()で出力フォーマットを設定し、
  2. channels()でチャンネル数を設定し、
  3. speed()でサンプリングレートを設定します。

open()で返されるオーディオデバイスオブジェクトには以下のメ ソッドがあります:

close( )
このメソッドはデバイスを明示的に閉じます。 他にデバイスを参照しているものがあって、オブジェクトをすぐに閉じることが できない場合に便利です。 閉じられたオブジェクトを再び使うことはできません。

fileno( )
デバイスに関連付けられたファイルディスクリプタを返します。

read( size)
オーディオ入力からサンプル数sizeを読み込んで、Python文字列として返 します。 この関数は必要なデータが得られるまでブロックします。

write( data)
Python文字列のdataをオーディオデバイスに書き込んで、書き込まれたバ イト数を返します。 もしオーディオデバイスがブロックモードで開かれたら、文字列全体が書き込ま れます。 もしデバイスが非ブロックモードで開かれたら、書き込まれないデータがあるか もしれません--writeall()を参照してください。

writeall( data)
Python文字列のdata全体をオーディオデバイスに書き込みます。 もしデバイスがブロックモードで開かれたらwrite()と同様に働きま す;非ブロックモードでは、デバイスにデータを与える前にデバイスが利用可能 になるまで待ちます。 書き込まれたデータの量は与えたデータと常に同じ量なので、Noneを返 します。

シンプルなI/Oコントロール:

nonblock( )
デバイスを非ブロックモードにします。 いったん非ブロックモードにしたら、ブロックモードに戻すことはできません。

I/Oコントロールに失敗したらIOErrorが発生します。

getfmts( )
サウンドカードでサポートされるオーディオ出力フォーマットのビットマスクを 返します。 典型的なLinuxシステムでは以下のフォーマットがあります:

フォーマット  説明 
AFMT_MU_LAW 対数エンコーディング。 これは/dev/audioのデフォルトのフォーマットで、Sunの.auファイルで 使われているフォーマットです。
AFMT_A_LAW 対数エンコーディング
AFMT_IMA_ADPCM Interactive Multimedia Association で定められた4:1の圧縮フォーマット。
AFMT_U8 符号なし8ビットオーディオ。
AFMT_S16_LE 符号なし16ビットオーディオでリトルエンディアン (Intelプロセッサで使われ るフォーマット)
AFMT_S16_BE 符号なし16ビットオーディオでビッグエンディアン (68k、PowerPC、Sparcで使 われるフォーマット)
AFMT_S8 符号つき8ビットオーディオ。
AFMT_U16_LE 符号つき16ビットリトルエンディアンオーディオ
AFMT_U16_BE 符号つき16ビットビッグエンディアンオーディオ
たいていのシステムではこれらのフォーマットのうちのいくつかだけをサポート しています。 多くのデバイスではAFMT_U8だけをサポートしています;現在使われ ている最も一般的なフォーマットはAFMT_S16_LEです。

setfmt( format)
現在のオーディオフォーマットをformatにします-- formatについてはgetfmts()のリストを参照してください。 また、現在のオーディオフォーマットを返すのにも使えます-- これは``オーディオフォーマット''としてAFMT_QUERYを渡すことで できます。 デバイスに設定されたオーディオフォーマットが返されますが、設定するよう要 求したフォーマットではないかもしれません。

channels( num_channels)
出力チャンネル数をnum_channelsに設定します。 値1はモノラル、2はステレオを示します。 いくつかのデバイスでは2つより多いチャンネルを持つものもありますし、 ハイエンドなデバイスではモノラルをサポートしないものもあります。 デバイスに設定されたチャンネル数を返します。

speed( samplerate)
サンプリングレートを1秒あたりsamplerateに設定し、実際に設定された レートを返します。 たいていのサウンドデバイスでは任意のサンプリングレートをサポートしていま せん。 一般的なレートは以下の通りです:

8000--デフォルトのレート 11025--声の録音 22050 44100--オーディオCD品質 (2チャンネルで16ビット/サンプル) 96000--DVD品質

sync( )
サウンドデバイスがバッファ内の全てのバイトを再生するまで待って、それから 制御が戻ります。 これはサウンドデバイスが閉じられるときにも起こります。 OSSの文書ではsync()を使うよりもデバイスを単純に閉じて、再び開く ことを推奨しています。

reset( )
再生あるいは録音を中止して、デバイスをコマンド待ちの状態にします。 OSSの文書ではreset()を呼び出した後にデバイスを閉じて、再び開く ことを推奨しています。

post( )
簡単なsync()のように使われます。post()のI/Oコントロー ルによってオーディオデバイスにオーディオ出力にポーズがある--つまり、短 いサウンドエフェクトの後や、ユーザの入力待ちの前、あるいはディスクI/Oの 前であることを伝えます。

便利なメソッド

setparameters( samplerate,num_channels,format,emulate)
サウンドデバイスを一つのメソッドで初期化します。 sampleratechannelsformatspeed()channels()setfmt()で述べたものでな ければなりません。 もしemulateがTrueなら、もっともマッチするフォーマットを見つけよう としますが、そうでないなら、指定したフォーマットをデバイスがサポートしな ければValueErrorを発生します。 デフォルトではサポートしないフォーマットに対してValueErrorを発生します。

bufsize( )
ハードウェアのバッファサイズをサンプル数で返します。

obufcount( )
ハードウェアバッファにある、再生されるサンプル数を返します。

obuffree( )
ブロックすることなしにハードウェアのキューに書き込んで再生できるサンプル 数を返します。

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。