サウンドのループ

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

サウンドのループ

#1

投稿記事 by kojinoki » 14年前

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

アバター
a5ua
記事: 199
登録日時: 14年前

Re: サウンドのループ

#2

投稿記事 by a5ua » 14年前

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();
}

kojinoki

Re: サウンドのループ

#3

投稿記事 by kojinoki » 14年前

ありがとうございました。なんとか解決することができました。

閉鎖

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