
#include <all.inc>

#if defined HELPER_AUDIO_INCLUDED___
  #endinput
#endif
#define HELPER_AUDIO_INCLUDED___


static g_BGMLoaded = -1;
static g_SELoaded = -1;


/////////////////////////////////////////////////////////////////////////
/*!

	BGMの読み込み

*/
stock BGMLoad(bgm_no) {

	new id[32];
	sprintf( id, "bgm_%d", bgm_no );

	new str_bd[256];
	new str_hd[256];
	new str_sq[256];
	xmlGetAttr( "BGM", id, "bd", str_bd );
	xmlGetAttr( "BGM", id, "hd", str_hd );
	xmlGetAttr( "BGM", id, "sq", str_sq );

	soundBgmLoadStart( str_bd, str_hd, str_sq );

	g_BGMLoaded = soundBgmLoadWait();
	printf( "soundBgmLoadWait::ret = %d\n", g_BGMLoaded );
}
stock BGMAsyncLoad(bgm_no) {

	new id[32];
	sprintf( id, "bgm_%d", bgm_no );

	new str_bd[256];
	new str_hd[256];
	new str_sq[256];
	xmlGetAttr("BGM", id, "bd", str_bd);
	xmlGetAttr("BGM", id, "hd", str_hd);
	xmlGetAttr("BGM", id, "sq", str_sq);

	soundBgmLoadStart( str_bd, str_hd, str_sq );

//	g_BGMLoaded = soundBgmLoadWait();
//	printf( "soundBgmLoadWait::ret = %d\n", g_BGMLoaded );
}

stock BGMAnsyncWait() {
	g_BGMLoaded = soundBgmLoadWait();
	printf( "soundBgmLoadWait::ret = %d\n", g_BGMLoaded );
}

/////////////////////////////////////////////////////////////////////////
/*!
	BGMを鳴らす。
*/
stock BGMPlay() {
	if (g_BGMLoaded != -1) {
		soundBgmStop();
		soundBgmSeek(0);
		soundBgmPlay();
	}
}
/////////////////////////////////////////////////////////////////////////
/*!
	BGMを止める
*/
stock BGMStop() {
	if (g_BGMLoaded != -1) {
		soundBgmStop();
	}
}

/////////////////////////////////////////////////////////////////////////
/*!

	BGMが鳴り終わるまで待つ。

	BGMはsoundBgmPlay()を呼んだ後に一度sleepしないと鳴りださないので、
	この関数を使うときは事前に一度sleepが呼ばれているか注意してください。

*/
stock BGMEndWait(value) {

	if (g_BGMLoaded != -1) {

		new info[256];
		for(;;) {
			soundGetInfo(SOUND_INFO_BGM_STATE, info);
//			printf( "bgm state = %d\n", info );
			if (info[0] == 0) {
				break;
			}
			sleep;
		}
	} else {

		wait(value);

	}

}

/////////////////////////////////////////////////////////////////////////
/*!
	SEの読み込み
*/
stock SELoad(se_no) {

	new id[32];
	sprintf(id, "se_%d", se_no);

	new str_bd[256];
	new str_hd[256];
	xmlGetAttr("SE", id, "bd", str_bd);
	xmlGetAttr("SE", id, "hd", str_hd);

	soundSeLoadStart(str_bd, str_hd);

	g_SELoaded = soundSeLoadWait();

}
/////////////////////////////////////////////////////////////////////////
/*!
	SEを鳴らす
*/
stock SEPlay(key_no, velocity = 127) {

	if (g_SELoaded != -1) {
		// native soundSePlay(note,velocity);
		// note    ：キー番号 (0-127)
		// velocity：音の強さ (0-127)
		soundSePlay( key_no, velocity );
	}
}
