クラス SounDecoder.SoundDecoder

ストリーム入力を解釈して無圧縮線形PCMデータを取り出すサウンドデコーダです。 [詳細]

SounDecoder.SoundDecoderに対する継承グラフ
SounDecoder.FlacDecoder SounDecoder.MpegAudioDecoder SounDecoder.OggVorbisDecoder SounDecoder.WaveLpcmDecoder SounDecoder.NativeFlacDecoder SounDecoder.OggFlacDecoder

すべてのメンバ一覧

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のインスタンスを作成します。

  • RIFF WAVE 無圧縮線形PCM
  • Ogg Vorbis
  • Native/Ogg FLAC
  • MPEG 1.0/2.0/2.5 Audio Layer I/II/IIIの何れか(おまけ; まともな識別は行われません)

それぞれのインスタンスを作成する前でもそれなりに正しい識別が行われるよう努めていますが、一部非常にいい加減ですので、過信しないで下さい。予めフォーマット(コーデック)が判っている場合は、直接それぞれのクラスのコンストラクタを呼び出すようにして下さい。

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 offsetlength が負です。
ArgumentException offsetlength がブロックアラインメントの倍数ではありません。

このメソッドは、例外が投げられた場合を除き、length で与えられた長さのデータを読み取ろうとします。その為、通常は戻り値はlength に等しくなりますが、現在のデコード位置から終わりまでに要求された長さのデータが無い場合はそれより小さな値が返されます。

ラップアラウンドを実現する場合、ReadPositionを組み合わせて使う必要があります。

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で再定義されています。


このクラスの説明は次のファイルから生成されました:
 全て クラス 関数 変数 プロパティ イベント

SounDecoderに対してWed Sep 2 02:36:23 2009に生成されました。  doxygen 1.6.1