Exemplo n.º 1
0
void Game_System::BgmPlay(RPG::Music const& bgm) {
	RPG::Music previous_music = data.current_music;
	data.current_music = bgm;

	// (OFF) means play nothing
	// A Polish RPG Maker translation overtranslated the (OFF) reserved string.
	// This particular translation uses (Brak) in editor for these cases.
	// Because RPG_RT doesn't show warnings about audios not found,
	// theses strings are ignored to prevent filling the log.
	// Though RPG_RT plays files named (Brak) is still preferred to ignore it.
	if (!bgm.name.empty() && bgm.name != "(OFF)" && bgm.name != "(Brak)") {
		// Same music: Only adjust volume and speed
		if (previous_music.name == bgm.name) {
			if (previous_music.volume != bgm.volume) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Volume(bgm.volume);
				}
			}
			if (previous_music.tempo != bgm.tempo) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Pitch(bgm.tempo);
				}
			}
		} else {
			Audio().BGM_Stop();
			bgm_pending = true;
			FileRequestAsync* request = AsyncHandler::RequestFile("Music", bgm.name);
			request->Bind(&Game_System::OnBgmReady);
			request->Start();
		}
	} else {
		BgmStop();
	}
}
Exemplo n.º 2
0
static void* bgmFunc(unsigned int command, void *data, int size)
{
    int ch;

//	asm volatile( "break 1");

//	PRINTF(( " bgmfunc %x, %x, %x, %x\n", *((int*)data + 0),
//		*((int*)data + 1), *((int*)data + 2),*((int*)data + 3) ));

    ch = command&0x000F;

    switch( command&0xFFF0 )
    {
    case EzBGM_INIT:
        ret = BgmInit( ch, *((int*)data) );
        break;
    case EzBGM_QUIT:
        BgmQuit ( ch, *((int*)data) );
        break;
    case EzBGM_OPEN:
        ret = BgmOpen ( ch, (char*)((int*)data) );
        break;
    case EzBGM_CLOSE:
        BgmClose( ch, *((int*)data) );
        break;
    case EzBGM_CLOSE_NO_WAIT:
        BgmCloseNoWait( ch, *((int*)data) );
        break;
    case EzBGM_PRELOAD:
        ret = BgmPreLoad ( ch, *((int*)data) );
        break;
    case EzBGM_START:
        BgmStart( ch, *((int*)data) );
        break;
    case EzBGM_STOP:
        BgmStop( ch, *((int*)data) );
        break;
    case EzBGM_SEEK:
        BgmSeek( ch, (unsigned int)*((int*)data) );
        break;
    case EzBGM_SETVOL:
        ret = BgmSetVolume( ch, (unsigned int)*((int*)data) );
        break;
    case EzBGM_SETVOLDIRECT:
        ret = BgmSetVolumeDirect( ch, (unsigned int)*((int*)data) );
        break;
    case EzBGM_GETMODE:
        ret = BgmGetMode( ch, *((int*)data) );
        break;
    case EzBGM_SDINIT:
        BgmSdInit( ch, *((int*)data) );
        break;
    default:
        ERROR(("EzBGM driver error: unknown command %d \n", *((int*)data) ));
        break;
    }
//	PRINTF(( "return value = %x \n", ret ));
    return (void*)(&ret);
}
Exemplo n.º 3
0
void Game_System::BgmPlay(RPG::Music const& bgm) {
	RPG::Music previous_music = data.current_music;
	data.current_music = bgm;

	// Validate
	if (bgm.volume < 0 || bgm.volume > 100) {
		data.current_music.volume = 100;

		Output::Debug("BGM %s has invalid volume %d", bgm.name.c_str(), bgm.volume);
	}

	if (bgm.fadein < 0 || bgm.fadein > 10000) {
		data.current_music.fadein = 0;

		Output::Debug("BGM %s has invalid fadein %d", bgm.name.c_str(), bgm.fadein);
	}

	if (bgm.tempo < 50 || bgm.tempo > 200) {
		data.current_music.tempo = 100;

		Output::Debug("BGM %s has invalid tempo %d", bgm.name.c_str(), bgm.tempo);
	}

	// (OFF) means play nothing
	if (!bgm.name.empty() && bgm.name != "(OFF)") {
		// Same music: Only adjust volume and speed
		if (!force_bgm_play && previous_music.name == bgm.name) {
			if (previous_music.volume != data.current_music.volume) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Volume(data.current_music.volume);
				}
			}
			if (previous_music.tempo != data.current_music.tempo) {
				if (!bgm_pending) { // Delay if not ready
					Audio().BGM_Pitch(data.current_music.tempo);
				}
			}
		} else {
			Audio().BGM_Stop();
			bgm_pending = true;
			FileRequestAsync* request = AsyncHandler::RequestFile("Music", bgm.name);
			music_request_id = request->Bind(&Game_System::OnBgmReady);
			request->Start();
		}
	} else {
		BgmStop();
	}

	force_bgm_play = false;
}