質問者
wav形式ファイルを再生できない

質問
すべての返信
-
"ファイル名.wav" で指定されたファイルは exe と同じディレクトリに存在していますか?存在している場合は、GetCurrentDirectory 関数で取得されるディレクトリの場所は exe と同じ場所になっていますでしょうか?または、フルパスでサウンドファイルを指定して再生されますでしょうか?
try { System::Media::SoundPlayer^ player = gcnew System::Media::SoundPlayer(L"ファイル名.wav"); player->Play(); } catch (System::Exception^ e) { System::Console::WriteLine(e->Message); }
というように例外をキャッチすると原因がわかるかもしれません。
- 編集済み kenjinoteMVP 2018年8月26日 8:41
-
回答ありがとうございます。
exeファイルと同じフォルダに存在しているので、()内には、ファイル名.wavを指定しています。
しかし再生されませんでした。
何かincludeしたり、宣言したり、dllファイルが必要だったりしますか?
==============================
仰る通り、ファイルを認識できてなさそうです。
"指定された場所にサウンド ファイルが存在することを確認してください。"というエラーが出てました。
今回はWindowsFormアプリケーションなので、動画再生をaxWindowsMediaPlayerで試してみました。
動画、これもexeファイルと同じ場所に配置し、パスは入れないで、L"ファイル名.mp4"と試してみると、動画は再生されました。
何故、wavファイルは再生されないのでしょうか?
- 編集済み Expressll 2018年8月26日 8:42
-
Visual Studio で exe を実行させていますでしょうか?Visual Studio から実行させた場合は、カレントディレクトリと作成された exe の場所が異なることがあります。(私の環境の場合は Debug に exe が生成されましたが、カレントはその一つ上のフォルダになっていました。GetCurrentDirectory 関数で確認)
カレントディレクトリは変動するものと考えて、フルパスで音声ファイルを指定するほうがよいと思います。例えば下記のように
try { TCHAR szSoundFilePath[MAX_PATH] = { 0 }; ::GetModuleFileName(NULL, szSoundFilePath, _countof(szSoundFilePath)); ::PathRemoveFileSpec(szSoundFilePath); ::PathAppend(szSoundFilePath, TEXT("ファイル名.wav")); System::Media::SoundPlayer^ player = gcnew System::Media::SoundPlayer(gcnew System::String(szSoundFilePath)); player->Play(); } catch (System::Exception^ e) { System::Console::WriteLine(e->Message); } // #include <shlwapi.h> // #pragma comment(lib, "shlwapi") // が必要かも
axWindowsMediaPlayer の方はファイルのサーチが違うのかな?