[備考開始]
この文書は古くなっています。その内SounDecoder 0.2.0.0用に書き直すので、暫くお待ち下さい。
[備考終了]
[注釈開始]
次のSounDecoderのバージョンでは、
SounDecoder.SoundDecoder.Open()
は明示的に呼び出されるべきものとする予定です。これは、プロパティの値の取得など、一見軽そうな処理の中にも、実際には重い(かも知れない)デコーダの初期化が行われうる事が不適切だと(後になって)思われたからです。
SounDecoder.SoundDecoder.Open()
の二回目以降の呼び出しは今までと同様に無視されるようにする為、「このコードが実行される段階では確実にデコーダは開かれている」という確証が無い限り、
SounDecoder.SoundDecoder.Open()
を予め呼び出すように書いて下さい。
なお、このドキュメントのこの備考以降及びリファレンスは未だSounDecoder 0.1.0.0用のものであり、
SounDecoder.SoundDecoder.Open()
は明示的に呼ばれていません。
[注釈終了]
SounDecoderで中心となるクラスは、抽象クラス
SounDecoder.SoundDecoder
です。フォーマットに拘わらず、デコーダはすべてこのクラスを通して扱えるので、デコーダに特有の利用方法などを覚える必要はありません。
SounDecoder.SoundDecoder
の最も簡単な利用例は、ファイルストリームを使って初期化して、ファイルストリームに全サンプル列を書き出すというものでしょう。初期化に必要なストリームは、
System.IO.Stream
の継承クラスであり、(かつ、特に断りが無い限り)読み取りとシークをサポートするストリームです。勿論、最も一般的な選択肢である
System.IO.FileStream
はこの要件を満たしています。
System.IO.PipeStream
などではシークがサポートされていない為、利用できません。これは、SounDecoderがループ再生などを行う再生ライブラリから利用される事を念頭に置いて設計された為です。
入力ストリームに含まれるサウンドデータのフォーマットが予め判っている場合、
SounDecoder.SoundDecoder
の継承クラスのコンストラクタを直接呼び出して初期化します。また、このクラスは
System.IDisposable
を実装する為、破棄する場合は
System.IDisposable.Dispose()
を呼び出します。
[プログラムコード開始]
[プログラムコード終了]
SounDecoder.ReadEntireData(Type)
は、引数typeで与えられた型を要素型とする一次元配列を新たに作成し、デコードされたサンプル列を格納して返します。
一つ、初期化に関して注意する事があります。それは、初期化時にコンストラクタに与えたストリームの管理は、すべて
SounDecoder.SoundDecoder
に任せる必要がある、という事です。SounDecoderを利用するプログラムでは、一旦コンストラクタに与えたストリームの状態を外部から変更しないように注意して下さい。
SounDecoder.SoundDecoder
は、
SounDecoder.SoundDecoder.Dispose()
が呼ばれた時に使用しているストリームをきちんと破棄します。
ここでいうフォーマットとは、RIFF WAVEだとか、Ogg Vorbisなどの事ではなく、サンプリングレート(標本化周波数)や量子化ビット数などの事です。このフォーマットは、
SounDecoder.SoundFormat
構造体で記述され、
SounDecoder.SoundDecoder.Format
プロパティで取得できます。これを使えば、例えばRIFF WAVEに落とす簡易デコーダも作れます。
[プログラムコード開始]
[プログラムコード終了]
ストリームに含まれるデータのフォーマット(ここではWAVEだとか、Ogg Vorbisだとか)が判らない事もあるかも知れません。例えばプレイヤーを作る場合、プレイヤーのユーザはわざわざ「これはMP3ファイルですよ」とか「FLACファイルなんだけど、再生できるかな?」なんて言ってくれません。入力をファイルストリームに限定するなら拡張子を見るというのも一つの手ですが、多くのフォーマットでは、ファイルの先頭にフォーマットを識別する為の情報が入っています。
SounDecoder.SoundDecoder.Identify(Stream)
は、これを利用してフォーマットを識別し、適切なクラスのコンストラクタを呼んで
SounDecoder.SoundDecoder
のインスタンスを返します(但し、対象となるフォーマットはSounDecoderが標準でサポートするフォーマットに限られます)。
[プログラムコード開始]
[プログラムコード終了]
フォーマットが正しいRIFF WAVE、Ogg Vorbis、Native/Ogg FLACの何れかであれば、このメソッドによって必ず適切なクラスのインスタンスが得られます。一方、MP3などであった場合、正しいMP3ストリームであったとしても
System.IO.InvalidDataException
が投げられるかも知れません。このメソッドはRIFF WAVE、Ogg Vorbis、Native/Ogg FLACの何れでもない場合は、ID3タグが先頭にあるかどうかでしか分岐しません。先頭の3バイトがASCII文字列"ID3"であれば
SounDecoder.MpegAudioDecoder
のインスタンスが返されますが、そうでなければ
System.IO.InvalidDataException
が投げられます。
| [プログラム例] | ||
|---|---|---|
| Published | : | 2009-02-19T01:22:01+09:00 |
| Last Modified | : | 2009-09-02T03:13:16+09:00 |
| Table of Contents | : | SounDecoder |
| Verified with | : |
|