21.4. sunau --- Sun AUファイルの読み書き

ソースコード: Lib/sunau.py


sunau モジュールは、Sun AUサウンドフォーマットへの便利なインターフェースを提供します。このモジュールは、 aifc モジュールや wave モジュールと互換性のあるインターフェースを備えています。

オーディオファイルはヘッダとそれに続くデータから構成されます。ヘッダのフィールドは以下の通りです:

フィールド

内容

magic word

4バイト文字列 .snd

header size

infoを含むヘッダのサイズをバイト数で示したもの。

data size

データの物理サイズをバイト数で示したもの。

encoding

オーディオサンプルのエンコード形式。

sample rate

サンプリングレート。

# of channels

サンプルのチャンネル数。

info

オーディオファイルについての説明をASCII文字列で示したもの(null バイトで埋められます)。

infoフィールド以外の全てのヘッダフィールドは4バイトの大きさです。ヘッダフィールドはbig-endianでエンコードされた、計32ビットの符合なし整数です。

sunau モジュールは以下の関数を定義しています:

sunau.open(file, mode)

file が文字列ならその名前のファイルを開き、そうでないならファイルのようにシーク可能なオブジェクトとして扱います。mode は以下のうちのいずれかです

'r'

読み込みのみのモード。

'w'

書き込みのみのモード。

読み込み/書き込み両方のモードで開くことはできないことに注意して下さい。

'r'modeAU_read オブジェクトを返し、 'w''wb'modeAU_write オブジェクトを返します。

sunau.openfp(file, mode)

open() と同義。後方互換性のために残されています。

sunau モジュールは以下の例外を定義しています:

exception sunau.Error

Sun AUの仕様や実装に対する不適切な操作により何か実行不可能となった時に発生するエラー。

sunau モジュールは以下のデータアイテムを定義しています:

sunau.AUDIO_FILE_MAGIC

big-endianで保存された正規のSun AUファイルは全てこの整数で始まります。これは文字列 .snd を整数に変換したものです。

sunau.AUDIO_FILE_ENCODING_MULAW_8
sunau.AUDIO_FILE_ENCODING_LINEAR_8
sunau.AUDIO_FILE_ENCODING_LINEAR_16
sunau.AUDIO_FILE_ENCODING_LINEAR_24
sunau.AUDIO_FILE_ENCODING_LINEAR_32
sunau.AUDIO_FILE_ENCODING_ALAW_8

AUヘッダのencodingフィールドの値で、このモジュールでサポートしているものです。

sunau.AUDIO_FILE_ENCODING_FLOAT
sunau.AUDIO_FILE_ENCODING_DOUBLE
sunau.AUDIO_FILE_ENCODING_ADPCM_G721
sunau.AUDIO_FILE_ENCODING_ADPCM_G722
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_3
sunau.AUDIO_FILE_ENCODING_ADPCM_G723_5

AUヘッダのencodingフィールドの値のうち既知のものとして追加されているものですが、このモジュールではサポートされていません。

21.4.1. AU_read オブジェクト

上述の open() によって返されるAU_readオブジェクトには、以下のメソッドがあります:

AU_read.close()

ストリームを閉じ、このオブジェクトのインスタンスを使用できなくします。(これはオブジェクトのガベージコレクション時に自動的に呼び出されます。)

AU_read.getnchannels()

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

AU_read.getsampwidth()

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

AU_read.getframerate()

サンプリングレートを返します。

AU_read.getnframes()

オーディオフレーム数を返します。

AU_read.getcomptype()

圧縮形式を返します。'ULAW', 'ALAW', 'NONE' がサポートされている形式です。

AU_read.getcompname()

getcomptype() を人に判読可能な形にしたものです。上述の形式に対して、それぞれ 'CCITT G.711 u-law', 'CCITT G.711 A-law', 'not compressed' がサポートされています。

AU_read.getparams()

get*() メソッドが返すのと同じ (nchannels, sampwidth, framerate, nframes, comptype, compname) のタプルを返します。

AU_read.readframes(n)

n 個のオーディオフレームの値を読み込んで、バイトごとに文字に変換した文字列を返します。データはlinear形式で返されます。もし元のデータがu-LAW形式なら、変換されます。

AU_read.rewind()

ファイルのポインタをオーディオストリームの先頭に戻します。

以下の2つのメソッドは共通の"位置"を定義しています。"位置"は他の関数とは独立して実装されています。

AU_read.setpos(pos)

ファイルのポインタを指定した位置に設定します。 tell() で返される値を pos として使用しなければなりません。

AU_read.tell()

ファイルの現在のポインタ位置を返します。返される値はファイルの実際の位置に対して何も操作はしません。

以下の2つのメソッドは aifc モジュールとの互換性のために定義されていますが、何も面白いことはしません。

AU_read.getmarkers()

None を返します。

AU_read.getmark(id)

エラーを発生します。

21.4.2. AU_write オブジェクト

上述の open() によって返されるWave_writeオブジェクトには、以下のメソッドがあります:

AU_write.setnchannels(n)

チャンネル数を設定します。

AU_write.setsampwidth(n)

サンプルサイズを(バイト数で)設定します。

AU_write.setframerate(n)

フレームレートを設定します。

AU_write.setnframes(n)

フレーム数を設定します。あとからフレームが書き込まれるとフレーム数は変更されます。

AU_write.setcomptype(type, name)

圧縮形式とその記述を設定します。'NONE''ULAW' だけが、出力時にサポートされている形式です。

AU_write.setparams(tuple)

tuple(nchannels, sampwidth, framerate, nframes, comptype, compname) で、それぞれ set*() のメソッドの値にふさわしいものでなければなりません。全ての変数を設定します。

AU_write.tell()

ファイルの中の現在位置を返します。 AU_read.tell()AU_read.setpos() メソッドでお断りしたことがこのメソッドにも当てはまります。

AU_write.writeframesraw(data)

nframes の修正なしにオーディオフレームを書き込みます。

AU_write.writeframes(data)

オーディオフレームを書き込んで nframes を修正します。

AU_write.close()

nframes が正しいか確認して、ファイルを閉じます。

このメソッドはオブジェクトの削除時に呼び出されます。

writeframes()writeframesraw() メソッドを呼び出したあとで、どんなパラメータを設定しようとしても不正となることに注意して下さい。