前提・実現したいこと
Visual Studio上でDXライブラリを使用してゲームを作っています。
BGM以外の枠組みは完成しており最後に画面ごと(タイトル画面、ゲーム画面、リザルト画面etc)に異なるBGMを流そうとしています。
発生している問題・エラーメッセージ
エラーメッセージは出ることなくプログラムは動きますがPlaySoundMemがBGMを流しません。
LoadSoundMemでmp3ファイルを読み込みHandle_bgmに代入しています(Handle_bgm_aは複数のファイルを読み込む為に作成しておりファイルを増やすごとにbgm_b, c, d...と作成します)がDrawFormatStringで戻り値を確認したところ-1(エラー)を返していました。
以下はDXライブラリ置き場リファレンスページ(https://dxlib.xsrv.jp/function/dxfunc_sound.html)より抜粋
宣言 int LoadSoundMem( char *FileName ) ;
概略 音ファイルをメモリに読みこむ
引数 FileName : メモリに読みこむ音ファイルのファイル名
文字列のポインタ
戻り値 -1:エラー
-1以外:サウンドハンドル
該当のソースコード
C++
//Main.cpp #include "DxLib.h" #include "Main.h" #include "Sound.h" extern int Handle_bgm; char Key[256]; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { if (ChangeWindowMode(TRUE) != 0) { return 0; } if (DxLib_Init() != 0) { return 0; } if (SetDrawScreen(DX_SCREEN_BACK) != 0) { return 0; } if (SetBackgroundColor(0, 0, 0) != 0) { return 0; } PlaySoundMem(Handle_bgm, DX_PLAYTYPE_LOOP); while (1) { if (ScreenFlip() != 0) { break; } if (ProcessMessage() != 0) { break; } if (ClearDrawScreen() != 0) { break; } if (GetHitKeyStateAll(Key) != 0) { break; } Sound(); } DxLib_End(); return 0; } //-------------------------------------------------- //Main.h #ifndef DEF_MAIN_H #define DEF_MAIN_H int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); #endif //-------------------------------------------------- //Sound.cpp #include "DxLib.h" #include "Main.h" #include "Sound.h" int Handle_bgm_a = LoadSoundMem("./Audio/testsound_a.mp3"); int Handle_bgm = Handle_bgm_a; void Sound() { DrawFormatString(200, 300, GetColor(255, 255, 255), "BGM : %d", Handle_bgm); } //-------------------------------------------------- //Sound.h #ifndef DEF_SOUND_H #define DEF_SOUND_H void Sound(); #endif
試したこと
BGMと関係ないゲーム部分のコードを削りながら上記コードのようになるまで解決方法を模索しましたが状況の改善は全くありませんでした。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual C++ 2019
DXライブラリ Windows版 Visual C++用 Ver3.22c
まだ回答がついていません
会員登録して回答してみよう