OggファイルをDirectSoundで再生する

By | 2014-04-24

OggVorbisファイルをDirectSoundで再生する方法のメモ書きです。

全体的な処理の流れは以下のようになります。

 OggVorbisファイルオープン
   ↓
 OggVorbisファイルのフォーマット・デコード後サイズ取得
   ↓
 DirectSoundの初期化
   ↓
 OggVorbisファイルをDirectSoundバッファにデコード
   ↓
 バッファの再生
   ↓
 後始末

以上の流れのソースコードを以下に記します。

長い上汚いコードになってしまいました(泣)
実際に使うときはこのようなベタ書きはせずにクラス化や関数分割しましょう。

順を追って説明していきます。

1.ヘッダファイル、ライブラリの準備

まず、必要なヘッダファイルとライブラリをインクルードします。

OggVorbisのAPIを使用するためには、vorbis/codec.hとvorbis/vorbisfile.hをインクルードします。
また、libogg_static.lib、libvorbis_static.lib、libvorbisfile_static.libをインポートします。

DirectSoundのAPIを使用するためには、dsound.hをインクルードし、dsound.libをインポートします。
dxguid.libをインポートしているのは、DirectSoundのCOMオブジェクトのGUIDを扱えるようにするためです。

2.OggVorbisファイルの読み込み準備
OggVorbisファイルを開いて必要な情報を読み込みます。
この時点ではまだデータのデコードは行いません。

3.再生用ウィンドウの作成
DirectSoundの再生対象となるウィンドウを作成します。
簡単のため、何も無いウィンドウにします。

4.DirectSoundの初期化
DirectSoundを初期化します。
ここで再生対象のウィンドウハンドルを指定し、再生用バッファの作成を行います。

バッファの作成はほぼ処理が決まっています。
今回はデコード後全体のサイズ分のバッファを作成しています。

5.OggVorbisデータをDirectSoundバッファにデコードする
バッファの作成が出来たため、いよいよデコードを実行します。
作成したバッファにOggVorbisデータをデコードします。

今回のプログラムの場合、デコードしたらOggVorbisファイルへのアクセスは必要なくなるため、ファイルを閉じます。

6.再生
デコードされたデータが格納されたDirectSoundバッファを再生します。

再生中は空ウィンドウを表示させ続けるようにします。
今回はウィンドウを閉じると以降の後始末を行うようにしました。

7.後始末
再生を停止してからDirectSoundオブジェクトの後始末を行います。
これによりDirectSound関連のリソースはすべて開放されます。

以上のような流れでOggVorbisファイルをDirectSoundで再生できます。
既にお気づきの方もいらっしゃるかもしれませんが、OggVorbisのデコード処理はループ文の中で行っています。
したがって、ストリーミング再生も簡単に実現できます。
サイズの小さな効果音ファイルの再生では、メモリ上にデータをすべて展開しても問題ないですが、BGMファイルのような巨大なファイルの場合はストリーミング再生が必要不可欠になるでしょう。

2 thoughts on “OggファイルをDirectSoundで再生する

    1. ftvoidftvoid Post author

      コメントありがとうございます!
      無事OggVorbis形式のファイルを再生できたということで、良かったです。

      Reply

コメントを残す

メールアドレスが公開されることはありません。

This site uses Akismet to reduce spam. Learn how your comment data is processed.