最近DXライブラリを使い始め、ちょっとしたゲームを作っています。
現在ゲーム中にBGMを再生させたいと思っています。
ゲーム中はループにより画面の描写やマウスの座標を取得しているので、ゲーム途中での再読み込みは不可能と判断しました。
そこで音楽ファイルをメモリに読み込ませようと思ったのですが、最初に何曲かを一気に読み込ませ、その後は読み込んだ順に勝手にバックグラウンド再生させることは可能でしょうか?
DXライブラリでの音声ファイルの読み込みと再生について
Re: DXライブラリでの音声ファイルの読み込みと再生について
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ライブラリでの音声ファイルの読み込みと再生について
こんな感じでしょうか?
未確認です。
#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;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: DXライブラリでの音声ファイルの読み込みと再生について
回答してくださった御二方、ありがとうございます。
お二方のプログラムを参考に試してみたところ、考えていたような再生のさせ方ができそうです。
もうひとつお聞きしたいのですが、メモリに読み込んだファイルはプログラム終了後に勝手にメモリから削除されるのでしょうか?
それとも、DeleteSoundMemで削除しないとメモリに残ったままになってしまうのでしょうか?
お二方のプログラムを参考に試してみたところ、考えていたような再生のさせ方ができそうです。
もうひとつお聞きしたいのですが、メモリに読み込んだファイルはプログラム終了後に勝手にメモリから削除されるのでしょうか?
それとも、DeleteSoundMemで削除しないとメモリに残ったままになってしまうのでしょうか?
Re: DXライブラリでの音声ファイルの読み込みと再生について
DxLib_End(); が書いてあれば大丈夫です。
DeleteSoundMem等はゲーム中に使わなくなった音を消してメモリを節約するためですね。
DeleteSoundMem等はゲーム中に使わなくなった音を消してメモリを節約するためですね。