ページ 11

サウンドのループ

Posted: 2011年7月15日(金) 23:06
by kojinoki
特定の鳴らしている音楽のみを一定時間停止させて、その後また再開させる方法がわかりません。
DXライブラリを使っているのですがWaitTimerだと他の処理も停止してしまうのでできません。
どうしたらよいのかよろしければ教えてください

Re: サウンドのループ

Posted: 2011年7月15日(金) 23:47
by a5ua
PlaySoundMemの第3引数TopPositionFlagに、先頭から開始するかどうかの指定ができます。(リファレンスには書かれていませんが)
デフォルトではTRUEになっているので、再開したい時に、このフラグをFALSEに指定することで、途中から再生ができます。

以下に、サンプルコードを示します。
キー入力をすると音楽を停止して、1秒後に再開します。

コード:

#include <DxLib.h>

int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
	ChangeWindowMode(TRUE);
	DxLib_Init();

	int sound = LoadSoundMem(_T("bgm.wav"));

	PlaySoundMem(sound, DX_PLAYTYPE_LOOP);

	int start;

	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
		ClearDrawScreen();
		int playing = CheckSoundMem(sound);		// 再生中かどうかのフラグ
		int input = CheckHitKeyAll();			// キー入力があったかどうかのフラグ

		// 再生中にキー入力があると一時停止
		if (playing && input) {
			printfDx(_T("%s\n"), _T("一時停止します"));
			StopSoundMem(sound);
			start = GetNowCount();	// 停止開始カウント
		}
		
		// 1秒以上停止していたら、再開
		if (!playing && GetNowCount() - start >= 1000) {
			printfDx(_T("%s\n"), _T("再開します"));
			PlaySoundMem(sound, DX_PLAYTYPE_LOOP, FALSE);
		}
	}

	DxLib_End();
}

Re: サウンドのループ

Posted: 2011年7月17日(日) 11:28
by kojinoki
ありがとうございました。なんとか解決することができました。