AKIYAMA Kouhei
2002年10月11日
DirectSoundの薄いラップクラスと、各種Waveファイル読み込みクラスです。圧縮形式のwavファイル(ACM使用)やoggファイル(OggVorbis Win32 SDK使用)、独自waveアーカイブファイルを再生できます。
そのまま役に立つかは分かりませんが、参考程度にはなるかもしれません。
boost.orgのshared_ptrを使用しています。shared_ptr.hppがインクルードできるようにしておいてください。気に入らない場合は自分で適当なスマートポインタを用意するか、SoundBufferが自分で解放するように細工してください。
WarFileReader, OggFileReaderを使う場合はwww.vorbis.comからOggVorbis-win32sdk-1.0.zipを落としてきて使えるようにしてください。リンカエラーを防ぐためにプロジェクトの設定をしてください。このライブラリの使い方はgoogle等で検索して調べてください。
dxguid.libをリンクするようにしてください。
例えば以下のようにして使います。
#include <windows.h> #include <boost/shared_ptr.hpp> #include <sslib2/dsound/DirectSound.h> #include <sslib2/dsound/OggFileReader.h> #include <sslib2/dsound/StreamSoundBuffer.h> void Test(HWND hWnd) { //DirectSoundオブジェクトの作成 sslib2::CDirectSound ds; if(!ds.Create(hWnd)){ MessageBox(hWnd, "DirectSound初期化失敗", "error", MB_OK); return; } //Reader作成 boost::shared_ptr<sslib2::COggFileReader> reader(new sslib2::COggFileReader()); if(!reader->Open("test.ogg")){ MessageBox(hWnd, "test.oggが開けない", "error", MB_OK); return; } //SoundBuffer作成 sslib2::CStreamSoundBuffer buffer; if(!buffer.Create(ds, reader)){ MessageBox(hWnd, "SoundBufferを作れなかった", "error", MB_OK); return; } //再生 buffer.Play(); //待ち MessageBox(hWnd, "再生中", "wait", MB_OK); } WinMain() { //適当にメインウィンドウを作っておく。ハンドルをhWndとする。 //COM初期化 CoInitialize(NULL); Test(hWnd); //COM解放 CoUninitialize(); return 0; }
本ライブラリが提供するのは下図に示すクラス群です。
CDirectSoundはDirectSoundオブジェクトを作るためのクラスです。プライマリバッファへの操作なんかも付けてみました。
CSoundBufferは一つのサウンドを再生する役割を持ちます。CStaticSoundBufferは全てのサウンドデータをメモリに蓄えてから再生します。CStreamSoundBufferは少しずつ読みながら再生します。いずれもCWaveReaderインタフェースを通じてPCMデータを読み込みます。
CWaveReaderはSoundBufferがPCMデータを読み込むために使用するインタフェースを規定します。このインタフェースを実装するクラスは以下の通りです。
読みたいファイルに応じて適切なReaderオブジェクトを生成して、それをSoundBufferに関連づけてください。
warファイルは独自のwaveアーカイブファイルフォーマットです。ループに関する情報も埋め込めるのが特徴です。詳しくは以下をご覧ください。
フリーソフトウェアです。改変、配布、商用利用などをする自由があります。そのまま使うもよし、自分のプログラムに組み込むのもよし。各自の責任で自由に扱ってください。
バグなどがありましたら教えていただけると助かります。適当に「ここまちがってるよー」とメールしてください。「ありがとー」と返して修正できたら修正します。
基本的に自分に必要なものしか作っていないので、機能など至らない部分が多々あると思います。コーディング規約が気に入らないという人もいるでしょう。そのへんは適当に修正して使ってください。もしくは参考程度にご利用ください。
Last modified: Tue Oct 22 16:40:53 2002