ホーム < ゲームつくろー! < Ogg Vorbis入門編
Ogg Vorbis入門編
その5 メモリにあるOggファイルを再生する:サンプルプログラム
Ogg Vorbis入門編その5「メモリにあるOggファイルを再生する」で説明した内容を踏まえたサンプルプログラムです。実行するとコンソール画面が現れて、指定のOggファイルがストリーム再生されます。
サンプルスクリーンショット。シンプル過ぎますが機能はあります!
このサンプルはOggファイルを一度メモリにすべて展開し、それをライブラリに解析させて再生しています。Oggライブラリがファイル読み込みに使用するコールバック関数を置き換えることによって実現しています。
○ サンプルの動かし方
サンプルを動かすために必要なファイルはこちらからダウンロードできます(OggSmp_No5.lzh)。空のコンソールアプリケーションを作成し、アーカイブに入っているクラスをすべて追加し、Ogg Vorbisライブラリを環境に設定するとビルドできます。実行して音楽を聴くにはプロジェクトフォルダ下に「Test.Ogg」というOggファイルが必要です。お手元の音楽をOggファイルに変換して試してみてください。
PCMDecoderオブジェクトはスマートポインタに包む必要があります。またIDirectSound8インターフェイスはCOMポインタに包みます。これはポインタ先のアクセスを保障するためです。使用の際はご注意下さい。
○ Ogg Vorbisライブラリについて
このサンプルを動かすには別途Ogg Vorbisライブラリを組み込む必要があります。組み込み方についてはOgg Vorbis入門編その1「Ogg Vorbisライブラリのインストール」に詳しく記載しておりますのでご参照ください。うまくいかない場合は掲示板にご報告下さい。
// Ogg Vorbisストリーム再生クラステストプログラム // // 製作者 : IKD // HP : http://marupeke296.com // #pragma comment ( lib, "dxguid.lib" ) #pragma comment ( lib, "dsound.lib" ) #include <dsound.h> #include <tchar.h> #include "OggDecoderInMemory.h" #include "PCMPlayer.h" #include "DixSmartPtr.h" #include "DixComPtr.h" // コンソールのウィンドウハンドル取得 HWND GetConsoleHwnd(void) { TCHAR pszWindowTitle[ 1024 ]; GetConsoleTitle( pszWindowTitle, 1024 ); return FindWindow( NULL, pszWindowTitle ); } // 一時停止関数 void StopProc() { while ( 1 ) { Sleep( 200 ); // Escapeキーを押したら抜ける if ( GetAsyncKeyState( VK_ESCAPE ) ) break; } } int _tmain(int argc, _TCHAR* argv[]) { // DirectSoundの作成 IDirectSound8 *pDS8; DirectSoundCreate8( NULL, &pDS8, NULL ); Dix::Com_ptr< IDirectSound8 > cpDS8( pDS8 ); pDS8->SetCooperativeLevel( GetConsoleHwnd(), DSSCL_PRIORITY ); // Oggオブジェクト作成 Dix::sp< Dix::OggDecoderInMemory > spOggDecoder( new Dix::OggDecoderInMemory( "test.ogg" ) ); Dix::PCMPlayer player( cpDS8, spOggDecoder ); bool isLoop = true; if( player.play( isLoop ) == false ) { printf( "ファイル準備に失敗しています" ); return 0; } // 再生 printf( "ただ今再生中\n" ); StopProc(); // 停止 player.stop(); printf( "\n停止しました\n" ); return 0; }