PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アグルス

PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#1

投稿記事 by アグルス » 13年前

プログラミング初心者の者です
C++、DXライブラリの環境でゲームを作っているのですが、困った点が出てきました…
PlayMusicでBGMを再生しようとした場合、問題なく再生されるのですが、PlaySoundMemを使用した場合、BGMが再生されません…
以下が問題のコードです(コメントアウトされているPlayMusicは、コメントアウトを外すと問題なく再生されます)
どう修整すればよいでしょうか?教えていただければ嬉しいです。

コード:

#include"stdio.h"
#include"DxLib.h"
#include"kansuu.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);

int hbs;
int swi=0;
//PlayMusic("hbs.mp3",DX_PLAYTYPE_BACK);
hbs=LoadSoundMem("hbs.mp3");
PlaySoundMem(hbs,DX_PLAYTYPE_BACK);
ran();

while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 )
{
	switch(pt){
	case 1:
		first();
		break;
	case 2:
		start();
		break;
	case 3:
		game();
		break;
	}
	if(pt==3 && swi ==0)
	{swi=1;
	}
	else
	{
	}
	if(seikou==1)
	{
	seikou=0;
	}
	else
	{}

}
}

アグルス

Re: PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#2

投稿記事 by アグルス » 13年前

すいません補足です
使用している自作関数全てには、音楽に関するコードを記述していません

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#3

投稿記事 by softya(ソフト屋) » 13年前

インデントが乱れているので、読み辛いプログラムですので注意して下さい。バグの原因となります。

試してもらいたいのですが、DX_PLAYTYPE_NORMALだと再生されますか?
もう一つは、リファレンスのサンプルコードを使った場合です。
「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... .html#R8N4
DX_PLAYTYPE_BACKでも試してみて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アグルス

Re: PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#4

投稿記事 by アグルス » 13年前

softyaさん返信ありがとうございます。
インデントが乱れているのは気が付きませんでした…以後気を付けます。

試してみましたが、
このコードのままDX_PLAYTYPE_NORMALにする→再生されない
リファレンスのサンプルコードをこのコードに強引に書く→再生されない
リファレンスのサンプルコードだけをDX_PLAYTYPE_NORMALのままで実行→再生される
上記をDX_PLAYTYPE_BACKで実行→再生されないままプログラム終了
また、別に作ったプログラムに
int hbs;
hbs=LoadSoundMem("hbs.mp3");
PlaySoundMem(hbs,DX_PLAYTYPE_BACK);を記述したところ、BGMは正常に鳴りました

あと、役に立つかわかりませんが正常に音楽が鳴るべきタイミングで動いている関数の内容を記述しておきます

コード:

int ran()
{
	lv=0;
	ransuu = GetRand(5);
	return 0;
}
int first(){
	int s_title = LoadGraph("s-title.png");
	DrawGraph(0,0,s_title,TRUE);
	if(Key[KEY_INPUT_RETURN] ==1)
	{pt=2;}
	else
	{}
	return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#5

投稿記事 by softya(ソフト屋) » 13年前

サンプルのままだと正常に動く場合は、ご自身で作られたプログラムに何らかの重要な問題が隠れている可能性が高いです。
同じ状況を再現できるコンパクトなプログラムを作成出来ませんでしょうか?
上記のranとfirstを組み込みだけで状況が再現されるのなら良いのですが。私には、そうは思えません。
※ LoadGraphとDrawGraphを同時に行っているけど大丈夫なの?

あとサンプルでDX_PLAYTYPE_BACKでならないのは、WaitKey();を入れれば大丈夫だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アグルス

Re: PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#6

投稿記事 by アグルス » 13年前

softyaさん再び返信ありがとうございます。
色々試してみたんですが、プログラムが入っているフォルダをまるごとコピーして実行するとちゃんと動くことが分かりました。
で、そこからもしかしてと思ってフォルダ名の―を抜いてみたらやはり動きました。再び―を付けると動かないことも分かりました。

ということで変な方向で自己解決してしまいました…。
質問するときの情報が足りなかったのが非常に申し訳ないです…。

ともあれ、解決に向けて一緒に考えてくださり、ありがとうございました。

LoadGraph、DrawGraphについては、質問をする前にゲームのメイン部分を作った後に気付いたので、頻繁にループを行うゲーム中(game();)のみ修整しました。次書くプログラムではそのようなコードは無くす予定です

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: PlayMusicの場合bgmが鳴るがPlaySoundMemの場合bgmが鳴らない

#7

投稿記事 by softya(ソフト屋) » 13年前

直ってよかったです。
-は大丈夫のはずなんですが・・・。
アグルス さんが書きました: LoadGraph、DrawGraphについては、質問をする前にゲームのメイン部分を作った後に気付いたので、頻繁にループを行うゲーム中(game();)のみ修整しました。次書くプログラムではそのようなコードは無くす予定です
その様なコードを書くとメモリが足らなくなり落ちる可能性があります。※ 正確には先にDXLIBの管理領域がなくなります。
タスクマネージャでメモリの使用量を確認すると分かります。プレイ中にどんどん増えるならマズイと思います。
あと、このコードのままのタイトル画面だとタイトル画面で放置するとエラー終了すると可能性がありますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る