ページ 11

DXライブラリでの音声ファイルの読み込みと再生について

Posted: 2011年12月16日(金) 02:44
by あめんぼ
最近DXライブラリを使い始め、ちょっとしたゲームを作っています。
現在ゲーム中にBGMを再生させたいと思っています。
ゲーム中はループにより画面の描写やマウスの座標を取得しているので、ゲーム途中での再読み込みは不可能と判断しました。
そこで音楽ファイルをメモリに読み込ませようと思ったのですが、最初に何曲かを一気に読み込ませ、その後は読み込んだ順に勝手にバックグラウンド再生させることは可能でしょうか?

Re: DXライブラリでの音声ファイルの読み込みと再生について

Posted: 2011年12月16日(金) 07:31
by naohiro19
Memのついた関数でLoadGraphと同じように読み込めば再生ができます。

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	int sound;
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
	sound = LoadSoundMem("a.ogg");
	while(!ClearDrawScreen() && !ProcessMessage() )
	{
		PlaySoundMem(sound, DX_PLAYTYPE_BACK, FALSE);
		ScreenFlip();
	}
	DxLib_End();
	return 0;
}

Re: DXライブラリでの音声ファイルの読み込みと再生について

Posted: 2011年12月16日(金) 07:41
by みけCAT
こんな感じでしょうか?

コード:

#include <DxLib.h>
 
#define SOUND_MAX 3

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    int sound[SOUND_MAX];
    int playing=0;
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
    sound[0] = LoadSoundMem("a.ogg");
    sound[1] = LoadSoundMem("b.ogg");
    sound[2] = LoadSoundMem("c.ogg");
    PlaySoundMem(sound[0], DX_PLAYTYPE_BACK, FALSE);
    while(!ClearDrawScreen() && !ProcessMessage() )
    {
        if(!CheckSoundMem(sound[playing])) {
            //再生が終わっている
            playing=(playing+1)%SOUND_MAX;
            PlaySoundMem(sound[playing], DX_PLAYTYPE_BACK, FALSE);
        }
        ScreenFlip();
    }
    DxLib_End();
    return 0;
}
未確認です。

Re: DXライブラリでの音声ファイルの読み込みと再生について

Posted: 2011年12月16日(金) 14:20
by あめんぼ
回答してくださった御二方、ありがとうございます。
お二方のプログラムを参考に試してみたところ、考えていたような再生のさせ方ができそうです。
もうひとつお聞きしたいのですが、メモリに読み込んだファイルはプログラム終了後に勝手にメモリから削除されるのでしょうか?
それとも、DeleteSoundMemで削除しないとメモリに残ったままになってしまうのでしょうか?

Re: DXライブラリでの音声ファイルの読み込みと再生について

Posted: 2011年12月16日(金) 15:44
by hss12
DxLib_End(); が書いてあれば大丈夫です。
DeleteSoundMem等はゲーム中に使わなくなった音を消してメモリを節約するためですね。

Re: DXライブラリでの音声ファイルの読み込みと再生について

Posted: 2011年12月16日(金) 20:09
by あめんぼ
回答ありがとうございます。
おかげさまで、うまくいきそうです!