[備考開始]
この文書ではC#のプログラム例を掲載していますが、SounDecoder Soundsはその他の.NET言語(Visual Basic .NET、C++/CLIなど)からでも使えます。
[備考終了]
SounDecoder Soundsのクラスやインターフェイスなどは、すべてSounDecoder.Sounds名前空間に入っています。また、SounDecoderに含まれるデコーダを利用する為、SounDecoder名前空間のクラスにも頻繁にアクセスする事になるでしょう。この為、SounDecoder Soundsを利用するプログラムでは、ソースコードの頭でこれらの名前空間をusingディレクティブなどを使って省略して書けるようにしておくと良いでしょう。
[プログラムコード開始]
[プログラムコード終了]
以下のプログラムは、この記述がソースコードの頭にあるものとして書かれています。
SounDecoder Soundsを使うには、まずサウンドデバイスを初期化する必要があります。サウンドデバイスの初期化は、例えば
MDXSoundDevice
のようなクラスのインスタンスを作成する事で行えます。
[プログラムコード開始]
[プログラムコード終了]
サウンドデバイスに関してはまだ実装に依存する所が大きくなっています。現在の唯一の実装であるSounDecoder Sounds MDXにおける情報については、MDX固有 - サウンドデバイスの初期化をご覧下さい。
また、SounDecoder Soundsを利用するすべての処理が終わったら、これを破棄する必要があります。これにはDispose()メソッドを呼び出します。
[プログラムコード開始]
[プログラムコード終了]
SounDecoder Soundsにおけるスタティックサウンド
(短い効果音向きのサウンド)は、すべて
StaticSound
を継承します。それらのクラスのコンストラクタの仕様は実装によって異なりますが、最も簡単なものは次のようにサウンドデバイスとサウンドデコーダを受け取ります。
[プログラムコード開始]
[プログラムコード終了]
第1引数には、予め初期化しておいたサウンドデバイスを渡し、第2引数にはこのスタティックサウンドの内容となるデータを返すデコーダを与えます。また、得られたインスタンスは
StaticSound
にアップキャストしてしまって構わないでしょう。
スタティックサウンドの再生は、
Play()
メソッドを呼び出せば始まります。
[プログラムコード開始]
[プログラムコード終了]
サウンドデータの最後まで再生されると自動的に停止されますが、再生途中で一時停止を行いたい場合は
Stop()
メソッドを呼び出します。
[プログラムコード開始]
[プログラムコード終了]
スタティックサウンドを作成した直後は、
Play()
メソッドで再生を開始した後、最後まで再生すると自動的に停止するようになっています。この動作は、
Looping
プロパティをtrueにする事で変えられます。
[プログラムコード開始]
[プログラムコード終了]
スタティックサウンドを使い終わったら、Dispose()メソッドで破棄します。
[プログラムコード開始]
[プログラムコード終了]
SounDecoder Soundsにおけるストリーミングサウンド
(長いBGM向きのサウンド)は、すべて
StreamingSound
を継承します。スタティックサウンドと同じく、それらのクラスのコンストラクタの仕様は実装によって異なりますが、最も簡単なものは次のようにサウンドデバイスとサウンドデコーダを受け取ります。
[プログラムコード開始]
[プログラムコード終了]
第1引数には、予め初期化しておいたサウンドデバイスを渡し、第2引数にはこのストリーミングサウンドの内容となるデータを返すデコーダを与えます。得られたインスタンスは
StreamingSound
にアップキャストするのがいいでしょう。
ストリーミングサウンドの再生も、スタティックサウンドの時と全く同じです。
Play()
メソッドを呼び出せば始まります。
[プログラムコード開始]
[プログラムコード終了]
ストリーミングサウンドの場合でもサウンドデータの最後まで再生されると自動的に停止されますが、再生途中で一時停止を行いたい場合は
Stop()
メソッドを呼び出します。
[プログラムコード開始]
[プログラムコード終了]
ストリーミングサウンドを思い通りに再生するにはまずサウンドパートの概念を理解する必要があるでしょうが、ただ単に一つのサウンドをループ再生したい場合は、ほぼスタティックサウンドの時と同じように行えます。まず、スタティックサウンドと同様に
Looping
プロパティをtrueに変更します。
[プログラムコード開始]
[プログラムコード終了]
更に、次のようなコードを書き加えます。
[プログラムコード開始]
[プログラムコード終了]
このコードの詳しい意味についてはここでは触れませんが、これだけ書けばストリーミングサウンド全体をループ再生する事ができます。
ストリーミングサウンドを使い終わったら、Dispose()メソッドで破棄します。
[プログラムコード開始]
[プログラムコード終了]
ボリュームの変更は、
Volume
プロパティを変更する事で行えます。
[プログラムコード開始]
[プログラムコード終了]
パンは、ボリュームと同様にして
Pan
プロパティで変更できます。
[プログラムコード開始]
[プログラムコード終了]
既定では、パンは値0.0を持ち、(基の音源に偏りがなければ)音が中央から聞こえます。-1.0を与えると右チャネルが無音になり、左から聞こえてくるようになります。1.0ではその逆で左チャネルが消え、音が右から聞こえるようになります。ボリュームと同様に、パンは線形のスケールを持ちます──中間値は人間の感覚に比例するように解釈されます。
パンの最低値は常に-1.0で、最大値は常に1.0です。
再生速度の変更には、
Speed
プロパティを使います。
[プログラムコード開始]
[プログラムコード終了]
スタティックサウンドの長さは、次のようにして取得する事ができます。
[プログラムコード開始]
[プログラムコード終了]
長さはサンプル単位で得られます。もし秒単位に直したいのであれば、そのサウンドのサンプリングレートを取得し、それによって割る必要があります。
[プログラムコード開始]
[プログラムコード終了]
再生位置は、
Position
プロパティで取得・変更が行えます。
[プログラムコード開始]
[プログラムコード終了]
スタティックサウンドは、複製してクローンを作る事が可能です。複製するには
Clone()
メソッドを呼び出します。
[プログラムコード開始]
[プログラムコード終了]
クローンの内容は、オリジナルと同じものになります。つまり、
Play()
メソッドが呼ばれれば、同じ音が再生されます。また、クローンとオリジナルは別々の再生位置を持つ事ができます。これにより、複数の同じ音を重ねて再生する事ができます。
複数の同じ音を重ねて再生するだけなら、同じ内容のストリームを扱うサウンドデコーダを複数用意して、個別にスタティックサウンドを作成する事によっても可能ですが、クローンを用いる方法はそれと比べてメモリ消費量などの点で有利です。
SounDecoder Sounds MDXのサウンドデバイス(
MDXSoundDevice
)の初期化には、少なくともデバイスの所有者となるウィンドウが必要です。SounDecoder Sounds MDXではWPFアプリケーションとWindowsフォームアプリケーションの二種類を想定しており、それらのアプリケーションのメインウィンドウを渡す事ができます。
例えば
Loaded
イベントをWindow_LoadedメソッドでハンドルするWPFアプリケーションでは、次のように初期化すると良いでしょう。
[プログラムコード開始]
[プログラムコード終了]
コンストラクタの第2引数は、サウンドデバイスを特定する為のGUIDです。大抵の場合はシステムにサウンドデバイスが一つしか無い為、プライマリサウンドデバイスを表すGuid.Emptyを渡せば十分です。
| [プログラム例] | ||
|---|---|---|
| Published | : | 2009-10-12T02:55:47+09:00 |
| Last Modified | : | 2009-10-15T23:02:32+09:00 |
| Table of Contents | : | SounDecoder Sounds |
| Verified with | : |
|