# 14.3 `aifc` -- AIFFおよびAIFCファイルの読み書き

このモジュールはAIFFとAIFF-Cファイルの読み書きをサポートします。 AIFF（Audio Interchange File Format）はデジタルオーディオサンプルをファ イルに保存するためのフォーマットです。 AIFF-CはAIFFの新しいバージョンで、オーディオデータの圧縮に対応していま す。

注意： 操作のいくつかはIRIX上でのみ動作します； そういう操作ではIRIXでのみ利用できる`cl`モジュールをインポート しようとして、`ImportError`を発生します。

オーディオファイルには、オーディオデータについて記述したパラメータがたく さん含まれています。 サンプリングレートあるいはフレームレートは、1秒あたりのオーディオサンプ ル数です。 チャンネル数は、モノラル、ステレオ、4チャンネルかどうかを示します。 フレームはそれぞれ、チャンネルごとに一つのサンプルからなります。 サンプルサイズは、一つのサンプルの大きさをバイト数で示したものです。 したがって、一つのフレームはnchannels*samplesizeバイト からなり、1秒間ではnchannels*samplesize*framerate バイトで構成されます。

例えば、CD品質のオーディオは2バイト（16ビット）のサンプルサイズを 持っていて、2チャンネル（ステレオ）であり、44,100フレーム／秒のフレーム レートを持っています。そのため、フレームサイズは4バイト（2*2）で、 1秒間では2*2*44100バイト（176,400バイト）になります。

`aifc`モジュールは以下の関数を定義しています：

`open`( | file[, mode])

  AIFFあるいはAIFF-Cファイルを開き、後述するメソッドを持つインスタンスを返 します。 引数fileはファイルを示す文字列か、ファイルオブジェクトのいずれかで す。 modeは、読み込み用に開くときには`'r'`か`'rb'`のどちらか で、書き込み用に開くときには`'w'`か`'wb'`のどちらかでなければ なりません。 もし省略されたら、`file.mode`が存在すればそれが使用され、なけ れば`'rb'`が使われます。 書き込み用にこのメソッドを使用するときには、これから全部でどれだけのサン プル数を書き込むのか分からなかったり、`writeframesraw()`と `setnframes()`を使わないなら、 ファイルオブジェクトはシーク可能でなければなりません。

ファイルが`open()`によって読み込み用に開かれたときに返されるオ ブジェクトには、以下のメソッドがあります：

`getnchannels`( | )

  オーディオチャンネル数（モノラルなら1、ステレオなら2）を返します。

`getsampwidth`( | )

  サンプルサイズをバイト数で返します。

`getframerate`( | )

  サンプリングレート（1秒あたりのオーディオフレーム数）を返します。

`getnframes`( | )

  ファイルの中のオーディオフレーム数を返します。

`getcomptype`( | )

  オーディオファイルで使用されている圧縮形式を示す4文字の文字列を返しま す。AIFFファイルでは`'NONE'`が返されます。

`getcompname`( | )

  オーディオファイルの圧縮形式を人に判読可能な形にしたものを返します。 AIFFファイルでは`'not compressed'`が返されます。

`getparams`( | )

  以上の全ての値を上の順に並べたタプルを返します。

`getmarkers`( | )

  オーディオファイルのマーカーのリストを返します。 一つのマーカーは三つの要素のタプルです。 要素の1番目はマークID（整数）、2番目はマーク位置のフレーム数をデータの始 めから数えた値（整数）、3番目はマークの名称（文字列）です。

`getmark`( | id)

  与えられたidのマークの要素を`getmarkers()`で述べたタプルで 返します。

`readframes`( | nframes)

  オーディオファイルの次のnframes個のフレームを読み込んで返します。 返されるデータは、全チャンネルの圧縮されていないサンプルをフレームごとに 文字列にしたものです。

`rewind`( | )

  読み込むポインタをデータの始めに巻き戻します。 次に`readframes()`を使用すると、データの始めから読み込みます。

`setpos`( | pos)

  指定したフレーム数の位置にポインタを設定します。

`tell`( | )

  現在のポインタのフレーム位置を返します。

`close`( | )

  AIFFファイルを閉じます。 このメソッドを呼び出したあとでは、オブジェクトはもう使用できません。

ファイルが`open()`によって書き込み用に開かれたときに返されるオ ブジェクトには、`readframes()`と`setpos()`を除く上述の全て のメソッドがあります。 さらに以下のメソッドが定義されています。 `get*()`メソッドは、対応する`set*()`を呼び出したあとでのみ 呼び出し可能です。 最初に`writeframes()`あるいは`writeframesraw()`を呼び出す 前に、フレーム数を除く全てのパラメータが設定されていなければなりません。

`aiff`( | )

  AIFFファイルを作ります。 デフォルトではAIFF-Cファイルが作られますが、ファイル名が`'.aiff'`で 終わっていればAIFFファイルが作られます。

`aifc`( | )

  AIFF-Cファイルを作ります。 デフォルトではAIFF-Cファイルが作られますが、ファイル名が`'.aiff'`で 終わっていればAIFFファイルが作られます。

`setnchannels`( | nchannels)

  オーディオファイルのチャンネル数を設定します。

`setsampwidth`( | width)

  オーディオのサンプルサイズをバイト数で設定します。

`setframerate`( | rate)

  サンプリングレートを1秒あたりのフレーム数で設定します。

`setnframes`( | nframes)

  オーディオファイルに書き込まれるフレーム数を設定します。 もしこのパラメータが設定されていなかったり正しくなかったら、ファイルは シークに対応していなければなりません。

`setcomptype`( | type, name)

  圧縮形式を設定します。 もし設定しなければ、オーディオデータは圧縮されません。 AIFFファイルは圧縮できません。 変数nameは圧縮形式を人に判読可能にしたもので、変数typeは4文字の文字列で なければなりません。 現在のところ、以下の圧縮形式がサポートされています： NONE, ULAW, ALAW, G722。

`setparams`( | nchannels, sampwidth, framerate, com ptype, compname)

  上の全パラメータを一度に設定します。 引数はそれぞれのパラメータからなるタプルです。 つまり、`setparams()`の引数として、`getparams()`を呼び出し た結果を使うことができます。

`setmark`( | id, pos, name)

  指定したID（1以上）、位置、名称でマークを加えます。 このメソッドは、`close()`の前ならいつでも呼び出すことができます。

`tell`( | )

  出力ファイルの現在の書き込み位置を返します。 `setmark()`との組み合わせで使うと便利です。

`writeframes`( | data)

  出力ファイルにデータを書き込みます。 このメソッドは、オーディオファイルのパラメータを設定したあとでのみ呼び出 し可能です。

`writeframesraw`( | data)

  オーディオファイルのヘッダ情報が更新されないことを除いて、 `writeframes()`と同じです。

`close`( | )

  AIFFファイルを閉じます。 ファイルのヘッダ情報は、オーディオデータの実際のサイズを反映して更新され ます。 このメソッドを呼び出したあとでは、オブジェクトはもう使用できません。