質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

4781閲覧

DxlibraryでのPlaySoundMemでの音の再生ができません。

kourinkabosu

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2021/05/01 13:36

前提・実現したいこと

Dxlibraryで、ゲームを作っているのですが、
そのゲームのBGMとして曲をかけたいのですが、かかりません。
PlaySoundFile()では、動いてくれますが、PlaySoundMemで再生したいです。

発生している問題・エラーメッセージ

実行したときにエラーは出ませんが、音楽が流れません。

該当のソースコード

C

1#include "DxLib.h" 2#include <string.h> 3#include <Windows.h> 4 5void DrawPos(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow); 6void DrawPic(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow, int x, int y, char*, bool); 7void DrawPic_k(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow, int x1, int y1, int x2, int y2, char*, bool); 8void DrawDialog(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow, int x, int y, const char*, char*, int Cr); 9 10//#define POS 1 11 12int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 13{ 14 char BackGround[] = { "F:\Background\tanpopo.jpg" }; 15 char NamePlate[] = { "F:\Background\name.png" }; 16 char Name2[] = { "F:\Background\name2.png" }; 17 char Mother[] = { "F:\Background\母.png" }; 18 char yorunikakeru[] = { "E:\MUSIC\YOASOBI\THE BOOK\08 夜に駆ける.mp3" }; 19 char gunjou[] = { "E:\MUSIC\YOASOBI\THE BOOK\06 群青.mp3" }; 20 char kaikaikitan[] = { "kaikai.mp3" }; 21 int Black = GetColor(255, 255, 255); 22 23 //メモリへ読み込みサウンドハンドルを保存する。 24 int SHandle_yorunikakeru = LoadSoundMem(yorunikakeru); 25 int SHandle_gunjou = LoadSoundMem(gunjou); 26 int SHandle_kaikaikitan; 27 SHandle_kaikaikitan= LoadSoundMem("kaikai.mp3"); 28 29 SetGraphMode(1920, 1080, 32);//ディスプレイのモードを1920×1080にする。 30 SetTransColor(0, 0, 0);//白を透明にする。 31 32 if (DxLib_Init() == -1) 33 { 34 return -1; 35 } 36 37 SetMouseDispFlag(TRUE);//マウスのポインタを表示する。 38 DrawPic(hInstance, hPrevInstance, lpCmdLine, nCmdShow, 0, 0, BackGround, FALSE);//写真を表示。(x,y,BackGround,TRUE or FALSE) 39 DrawPic_k(hInstance, hPrevInstance, lpCmdLine, nCmdShow, 1300, 400, 1652, 800, Mother, TRUE);//352*400 40 DrawPic_k(hInstance, hPrevInstance, lpCmdLine, nCmdShow, 0, 700, 1920, 1080, NamePlate, TRUE);//写真を表示(拡大縮小可能) 41 42 //PlaySoundFile(kaikaikitan, DX_PLAYTYPE_BACK);//曲をかける。StopSoundFile();で止める。 43 PlaySoundMem(SHandle_kaikaikitan, DX_PLAYTYPE_BACK); 44 45 SetFontSize(32); 46 DrawString(30, 730, "主人公", Black); 47 SetFontSize(16);//デフォルトに戻す。 48 49 DrawDialog(hInstance, hPrevInstance, lpCmdLine, nCmdShow, 30, 800, "主人公のセリフの表示", Name2, Black); 50 51#ifdef POS 52 while (CheckHitKey(KEY_INPUT_RETURN) == 0)//エンターキーが押されるまで 53 { 54 DrawPos(hInstance, hPrevInstance, lpCmdLine, nCmdShow); 55 } 56#endif 57 58 ClearDrawScreen(); 59 StopSoundFile(); 60 61 WaitKey(); 62 63 //サウンドハンドルの削除 64 DeleteSoundMem(SHandle_yorunikakeru); 65 DeleteSoundMem(SHandle_gunjou); 66 DeleteSoundMem(SHandle_kaikaikitan); 67 68 DxLib_End(); 69 70 return 0; 71}

試したこと

PlaySoundFile()では動きました。
サウンドハンドルを使うとできなくなります。

補足情報(FW/ツールのバージョンなど)

開発環境は、visual studio 2019 です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

多分、オーディオの読み込みをDXライブラリの初期化の前にしているからです。

LoadSoundMem関数はDxLib_Init関数で初期化した後でないと機能しません。

↓PlaySoundMemで再生のサンプル(初期化した後に読み込めば再生できる)

c++

1#include "DxLib.h" 2 3int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 4{ 5 //初期化前の設定 6 ChangeWindowMode(TRUE); 7 SetGraphMode(640, 480, 32); 8 9 //DXライブラリ初期化 10 if (DxLib_Init() == -1)return -1; 11 12 //初期化の後にオーディオを読み込む 13 int SHandle_kaikaikitan = LoadSoundMem("kaikai.mp3"); 14 15 //裏画面に描画 16 SetDrawScreen(DX_SCREEN_BACK); 17 18 //再生開始 19 PlaySoundMem(SHandle_kaikaikitan, DX_PLAYTYPE_LOOP); 20 21 //メインループ 22 while (!ProcessMessage()) 23 { 24 //描画 25 ClearDrawScreen(); 26 DrawFormatString(4,4,0xffffff,"音データが再生中かチェック=%d\n(1なら正常に再生出来ている)", 27 CheckSoundMem(SHandle_kaikaikitan)); 28 ScreenFlip(); 29 } 30 31 DeleteSoundMem(SHandle_kaikaikitan); 32 33 DxLib_End(); 34 return 0; 35}

ちなみに、DXライブラリの大多数の関数は初期化した後じゃないと使用できません。
(グラフィック描画やサウンド再生をする準備のための初期化ですので…)

投稿2021/05/01 14:21

kousatu

総合スコア225

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kourinkabosu

2021/05/02 01:11

変更したらうまく動きました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問