ページ 11

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

Posted: 2013年2月11日(月) 01:33
by アグルス
プログラミング初心者の者です
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が鳴らない

Posted: 2013年2月11日(月) 01:34
by アグルス
すいません補足です
使用している自作関数全てには、音楽に関するコードを記述していません

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

Posted: 2013年2月11日(月) 11:56
by softya(ソフト屋)
インデントが乱れているので、読み辛いプログラムですので注意して下さい。バグの原因となります。

試してもらいたいのですが、DX_PLAYTYPE_NORMALだと再生されますか?
もう一つは、リファレンスのサンプルコードを使った場合です。
「DXライブラリ置き場 リファレンスページ」
http://homepage2.nifty.com/natupaji/DxL ... .html#R8N4
DX_PLAYTYPE_BACKでも試してみて下さい。

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

Posted: 2013年2月13日(水) 02:18
by アグルス
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;
}

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

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

あとサンプルでDX_PLAYTYPE_BACKでならないのは、WaitKey();を入れれば大丈夫だと思います。

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

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

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

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

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

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

Posted: 2013年2月13日(水) 23:08
by softya(ソフト屋)
直ってよかったです。
-は大丈夫のはずなんですが・・・。
アグルス さんが書きました: LoadGraph、DrawGraphについては、質問をする前にゲームのメイン部分を作った後に気付いたので、頻繁にループを行うゲーム中(game();)のみ修整しました。次書くプログラムではそのようなコードは無くす予定です
その様なコードを書くとメモリが足らなくなり落ちる可能性があります。※ 正確には先にDXLIBの管理領域がなくなります。
タスクマネージャでメモリの使用量を確認すると分かります。プレイ中にどんどん増えるならマズイと思います。
あと、このコードのままのタイトル画面だとタイトル画面で放置するとエラー終了すると可能性がありますよ。