ストリーム入力を解釈して無圧縮線形PCMデータを取り出すサウンドデコーダです。 [詳細]
Public メソッド | |
| void | Dispose () |
| すべてのリソースを破棄します。 | |
| abstract void | Open () |
| サウンドストリームを開きます。 | |
| abstract int | Read (Array data, int offset, int length) |
| 指定された範囲のPCMデータを取得します。 | |
| Array | ReadEntireData (Type type) |
| PCMデータ全体を読み取ります。. | |
Static Public メソッド | |
| static SoundDecoder | Identify (Stream source) |
| ストリームの入力を元にフォーマット(コーデック)を識別し、適切だと思われるSoundDecoderのインスタンスを返します。 | |
Protected メソッド | |
| SoundDecoder (Stream source) | |
| サウンドデコーダを作成します。 | |
| virtual void | Dispose (bool disposing) |
| リソースを破棄します。 | |
プロパティ | |
| bool | Opened [get, set] |
| 既にストリームが開かれているかどうかを取得または設定します。 | |
| bool | Disposed [get, set] |
| 既にリソースが破棄されているかどうかを取得します。 | |
| Stream | BaseStream [get, set] |
| デコーダで使われているストリームを取得します。 | |
| SoundFormat | Format [get, set] |
| デコードされたサウンドのフォーマットを取得または設定します。 | |
| long | Length [get, set] |
| ストリームに含まれるPCMデータの長さを取得します。 | |
| abstract long | Position [get, set] |
| デコード位置を取得または設定します。 | |
ストリーム入力を解釈して無圧縮線形PCMデータを取り出すサウンドデコーダです。
SoundDecoderは、Streamを継承するストリームクラスから入力を受け取って、最も単純な波形の表現形式であるLPCM(Linear Pulse Code Modulation)のサンプル列を提供します。派生クラスによって特に断りが無い場合は、入力ストリームは読み取り可能かつシーク可能である必要があります。
それぞれのSoundDecoderのインスタンスがそれぞれのデコード位置を持つ為には、それぞれのインスタンスがストリームを独占し、ストリームの読み取り位置を個別に保持する必要があります。ストリームを派生クラスのコンストラクタに渡した後に、その状態を外部から変化させた場合のデコーダの振る舞いは定義されません。SoundDecoderを使用するプログラムは、派生クラスのコンストラクタにストリームを渡した後は、一切そのストリームに関与しないよう記述して下さい。また、SoundDecoderを継承するクラスでDispose(bool)メソッドをオーバーライドする場合、最後にこのクラスのDispose(bool)メソッドを確実に呼び出してストリームを破棄して下さい。なお、ファイナライザはこのクラスで実装される為、派生クラスで実装し直す必要はありません。
派生クラスで特に断りが無ければ、一部の共有資源(ストリームなど)に関して、サウンドデコーダの操作はすべてスレッドセーフです。即ち、SoundDecoderを利用するプログラムは、通常の利用方法でSoundDecoderにアクセスする場合に限っては外部で同期を取る必要はありません。但し、これはすべての場合にスレッドセーフティが保証されるという意味ではありません。複数のスレッドが一部の共有資源に対してアクセスしようとした場合でも、その共有資源にアクセスするスレッドはすべての瞬間において高々一つしか無い事が保証されるだけです。複数のスレッドが一つのSoundDecoderのインスタンスの同じプロパティに対して読み取りと書き込みを繰り返すような場合、外部で同期を取らないとインターリーブが起こり、予期しない結果となる場合があります。
この前提を満たす為、SoundDecoderを継承するクラスは、特に断りを入れない限り、共有資源へのアクセスが同時に一つのスレッドからしか為されないよう実装する必要があります。但し、SoundDecoder.BaseStreamプロパティで得られるストリームはスレッドセーフである為、共有資源がこのストリームだけである場合は特に同期を取る必要はありません。
| SounDecoder.SoundDecoder.SoundDecoder | ( | Stream | source | ) | [protected] |
サウンドデコーダを作成します。
| source | 入力元のストリーム。 |
| ArgumentNullException | source がnull参照です。 |
| virtual void SounDecoder.SoundDecoder.Dispose | ( | bool | disposing | ) | [protected, virtual] |
リソースを破棄します。
| disposing | マネージドリソースを含むすべてのリソースを破棄するならばtrue、アンマネージドリソースのみを破棄するならばfalse。 |
disposing は、通常のユーザコードの中からこのメソッドが呼ばれる際はtrueです。これはDispose()にも当てはまり、Dispose()が明示的に呼ばれた場合にはマネージドリソースも早い段階で破棄できます。
disposing がfalseで呼ばれるのは、ファイナライザの中からです。各インスタンスのファイナライザが呼ばれる順番は保証されていない為、ファイナライザで他の(既にファイナライズされているかも知れない)マネージドリソースを参照する事は避けるべきです。従って、ファイナライザはこのメソッドをdisposing にfalseを与えて呼び出します。派生クラスでこのメソッドをオーバーライドする場合、disposing がfalseの場合はマネージドリソースを参照しないよう気を付けて下さい。
SounDecoder.FlacDecoder, SounDecoder.MpegAudioDecoder, SounDecoder.OggVorbisDecoder, と SounDecoder.WaveLpcmDecoderで再定義されています。
| void SounDecoder.SoundDecoder.Dispose | ( | ) |
すべてのリソースを破棄します。
| static SoundDecoder SounDecoder.SoundDecoder.Identify | ( | Stream | source | ) | [static] |
ストリームの入力を元にフォーマット(コーデック)を識別し、適切だと思われるSoundDecoderのインスタンスを返します。
| source | 入力元のストリーム。 |
| ArgumentNullException | source がnull参照です。 | |
| InvalidDataException | このメソッドではフォーマット(コーデック)を識別できません。 |
このメソッドは、入力元のストリームに含まれるデータのフォーマット(コーデック)が、次に挙げるものの内の何れかであると仮定して、SoundDecoderのインスタンスを作成します。
それぞれのインスタンスを作成する前でもそれなりに正しい識別が行われるよう努めていますが、一部非常にいい加減ですので、過信しないで下さい。予めフォーマット(コーデック)が判っている場合は、直接それぞれのクラスのコンストラクタを呼び出すようにして下さい。
| abstract void SounDecoder.SoundDecoder.Open | ( | ) | [pure virtual] |
サウンドストリームを開きます。
| ObjectDisposedException | 既にデコーダが破棄されています。 |
SoundDecoderを継承するクラスには、このメソッド内で実際にストリームのデータを解釈し始める事をお勧めします。データの解釈に時間がかかるような場合の為に、このメソッドはできる限り遅いタイミングで(かつできれば別スレッドから)呼ばれます。この事は初期化処理の体感速度の向上に役立ちます。
このメソッドが呼ばれて正常に処理を終えられた場合、Openedをtrueに設定して下さい。また、このメソッドは何度も呼ばれる可能性があります。この為、Openedがtrueの場合は何もせずすぐに制御を返すようにして下さい。
SounDecoder.FlacDecoder, SounDecoder.MpegAudioDecoder, SounDecoder.OggVorbisDecoder, と SounDecoder.WaveLpcmDecoderで実装されています。
| abstract int SounDecoder.SoundDecoder.Read | ( | Array | data, | |
| int | offset, | |||
| int | length | |||
| ) | [pure virtual] |
指定された範囲のPCMデータを取得します。
| data | デコードされたPCMデータが格納される配列。要求された長さのデータが読み取れなかった場合、その部分のデータは変更されません。 | |
| offset | 配列data 内の、データを格納し始めるオフセット。単位はバイト。 | |
| length | デコードされた状態でのデータの長さ。単位はバイト。 |
| InvalidOperationException | まだストリームが開かれていません。 | |
| ObjectDisposedException | 既にデコーダが破棄されています。 | |
| ArgumentNullException | data がnull参照です。 | |
| ArgumentOutOfRangeException | offset かlength が負です。 | |
| ArgumentException | offset かlength がブロックアラインメントの倍数ではありません。 |
このメソッドは、例外が投げられた場合を除き、length で与えられた長さのデータを読み取ろうとします。その為、通常は戻り値はlength に等しくなりますが、現在のデコード位置から終わりまでに要求された長さのデータが無い場合はそれより小さな値が返されます。
ラップアラウンドを実現する場合、ReadとPositionを組み合わせて使う必要があります。
SounDecoder.FlacDecoder, SounDecoder.MpegAudioDecoder, SounDecoder.OggVorbisDecoder, と SounDecoder.WaveLpcmDecoderで実装されています。
| Array SounDecoder.SoundDecoder.ReadEntireData | ( | Type | type | ) |
PCMデータ全体を読み取ります。.
| type | 戻り値の配列の要素の型。 |
| InvalidOperationException | まだストリームが開かれていません。 | |
| ObjectDisposedException | 既にデコーダが破棄されています。 | |
| InvalidOperationException | サンプルをすべてデコードした際のバイト長がInt32.MaxValueを超えています。 |
このメソッドはスタティックサウンド(メモリ上にすべてのデータを予め展開しておくサウンド)に適していますが、サンプルをすべてデコードした際のバイト長がInt32.MaxValue以下である必要があります。
Stream SounDecoder.SoundDecoder.BaseStream [get, set] |
デコーダで使われているストリームを取得します。
入力元のストリーム。このストリームへのアクセスはスレッドセーフです。
bool SounDecoder.SoundDecoder.Disposed [get, set] |
既にリソースが破棄されているかどうかを取得します。
既にリソースが破棄されていればtrue、そうでなければfalse。
SoundFormat SounDecoder.SoundDecoder.Format [get, set] |
デコードされたサウンドのフォーマットを取得または設定します。
サウンドのフォーマット。
| InvalidOperationException | まだストリームが開かれていません。 | |
| ObjectDisposedException | 既にデコーダが破棄されています。 |
long SounDecoder.SoundDecoder.Length [get, set] |
ストリームに含まれるPCMデータの長さを取得します。
PCMデータの長さ。単位はサンプル。
| InvalidOperationException | まだストリームが開かれていません。 | |
| ObjectDisposedException | 既にデコーダが破棄されています。 |
bool SounDecoder.SoundDecoder.Opened [get, set] |
既にストリームが開かれているかどうかを取得または設定します。
既にストリームが開かれていればtrue、そうでなければfalse。
abstract long SounDecoder.SoundDecoder.Position [get, set] |
デコード位置を取得または設定します。
次にデコードされるデータの位置。単位はサンプル。
| InvalidOperationException | まだストリームが開かれていません。 | |
| ObjectDisposedException | 既にデコーダが破棄されています。 | |
| ArgumentOutOfRangeException | 値が異常です。 |
SounDecoder.FlacDecoder, SounDecoder.MpegAudioDecoder, SounDecoder.OggVorbisDecoder, と SounDecoder.WaveLpcmDecoderで再定義されています。
1.6.1