open-mgl-dev (開発バージョン) (0.7.9.80) | 2009-11-02 22:25 |
open-mgl (DirectX9, VC++2008) (0.7.9) | 2009-09-27 20:32 |
roast-dev (開発バージョン) (0.0.1.40-dev) | 2009-11-02 23:09 |
>Wikiトップ>August Framework 2.0>AF2_tutorial11
(本項で説明する機能は ver 0.7.9 以降でのみ使えます。)
CAugustSound2 では .wavファイルしか再生できませんでした。
今回、CAugustMusic2 クラスを用いて、.wavファイル以外の各種オーディオメディアを再生してみます。
- #include "mglaugust2.h"
- #include <string>
- // メインフレームクラス
- class CMyFrame : public CAugustWindowFrame2
- {
- private:
- CAugustMusic2 m_music;
- CAugustKeyboardInput2 m_kb;
- CAugustText2 m_text;
- bool m_bMediaLoaded; // メディアが読み込み済ならtrueにする
- // メディアファイル選択ダイアログ
- std::string SelectMedia()
- {
- OPENFILENAME ofn;
- char szOutFilePath[1024];
- ZeroMemory( &ofn, sizeof(ofn) );
- ZeroMemory( szOutFilePath, sizeof(szOutFilePath) );
- ofn.lStructSize = sizeof(OPENFILENAME);
- ofn.hwndOwner = (HWND)this->GetHwnd();
- ofn.lpstrFile = szOutFilePath;
- ofn.nMaxFile = sizeof(szOutFilePath);
- ofn.lpstrFilter = "再生可能なメディア(mp3,wma,ogg,mid,wav)\0*.mp3;*.wma;*.ogg;*.mid;*.wav\0";
- ofn.lpstrTitle = "ファイルを開く";
- ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR;
- // 実行
- if ( ::GetOpenFileName(&ofn) )
- return szOutFilePath;
- else
- return "";
- }
- public:
- // 初期化時に呼ばれる
- bool OnGraphicInitEnded()
- {
- // メディアが読みこまれていないのでfalseを設定
- m_bMediaLoaded = false;
- // コントロールクラスの登録
- RegistControl(&m_kb);
- RegistControl(&m_music);
- RegistControl(&m_text);
- // キーボードハンドラの登録
- m_kb.RegistHandler(
- CAugustKeyboardInput::EVTTYPE_ON_DOWN,
- 'O',
- (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::Open,
- this);
- m_kb.RegistHandler(
- CAugustKeyboardInput::EVTTYPE_ON_DOWN,
- 'Z',
- (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::Play,
- this);
- m_kb.RegistHandler(
- CAugustKeyboardInput::EVTTYPE_ON_DOWN,
- 'X',
- (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::Stop,
- this);
- m_kb.RegistHandler(
- CAugustKeyboardInput::EVTTYPE_ON_DOWN,
- 'C',
- (CAugustKeyboardInput::CALLBACK_TYPE_MI)&CMyFrame::Pause,
- this);
- m_text.SetText(
- "O: ファイルを開く\n"
- "Z: 再生\n"
- "X: 停止\n"
- "C: ポーズ\n");
- SetWindowTitle("簡易メディアプレイヤー");
- return true;
- }
- // ファイルを開く
- bool Open(){
- std::string strMedia = SelectMedia();
- if ( strMedia.length() != 0 )
- {
- m_music.Load(strMedia.c_str());
- m_bMediaLoaded = true;
- Play();
- }
- return true;
- }
- // 再生
- bool Play(){
- if ( !m_bMediaLoaded )
- Open();
- else
- m_music.Play();
- return true;
- }
- // 停止
- bool Stop(){
- if ( m_bMediaLoaded )
- m_music.Stop();
- return true;
- }
- // ポーズ
- bool Pause(){
- if ( m_bMediaLoaded )
- m_music.Pause();
- return true;
- }
- };
- // WinMain
- int APIENTRY WinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow )
- {
- CMyFrame frame;
- frame.Start();
- return 0;
- }
ちょっとしたメディアプレイヤーっぽく仕上げてみました。再生、停止、ポーズが出来ます。
(ファイル選択ダイアログのために、SelectMedia() メソッド内部で ::GetOpenFileName() と言うWindows APIを呼び出していますが、ここでは詳しくは説明しません。悪しからず)
ちなみにサポートしているメディア形式は、mp3,wma,ogg,mid,wavのいづれかです。
なお、.oggファイルを再生する場合には、Open-MGL配布パッケージ内 bin\Release の Vox.dll が
実行モジュールと同じディレクトリに配置されている必要があります(ちなみにReleaseビルド、Debugビルドに関係なく bin\Release の Vox.dll です)。
また、wmaファイルの再生には、Windows Media Player 7 以降がインストールされている必要があります。
(確かWindows XPではデフォルトで入っていたような気がしますが・・・Windows 2000等の古いOSでは、初期状態ではインストールされていなかったと思います。)