##
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)

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

`bufsize`( | )

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

`obufcount`( | )

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

`obuffree`( | )

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