// music handler
if is_array( musicTrack ) {
musicFade = musicTrack[ 2 ];
musicBuffer = musicTrack[ 1 ];
musicTrack = musicTrack[ 0 ];
musicFadeOut= musicFade;
log( 0, "TRACK : ", musicTrack );
}
var _difference = ( volumeMusic != musicVolume ) ? ( ( volumeMusic ) / musicVolume ) : volumeMusic;
musicVolume = volumeMusic;
switch( musicState ) {
case music_state_none :
switch ( musicTrack ) {
case undefined :
break;
default :
musicInfo = musicTrack;
musicEvent = music_event_start;
break;
}
break;
case music_state_fade_in :
audio_sound_gain( musicPlaying, ( musicFadeTime / musicFade ) * musicGain * _difference, 0 );
musicFadeTime++;
if musicFadeTime == musicFade { musicState = music_state_play }
musicEvent = music_event_play;
break;
case music_state_fade_out :
audio_sound_gain( musicPlaying, ( musicFadeTime / musicFade ) * _difference, 0 );
musicFadeTime--;
if musicFadeTime == 0 { musicEvent = music_event_stop }
else { musicEvent = music_event_play }
break;
case music_state_play :
switch ( musicTrack ) {
case undefined :
musicEvent = music_event_end;
break;
default :
switch( musicTrack == musicInfo ) {
case true :
musicEvent = music_event_play;
break;
case false :
musicEvent = music_event_end;
break;
}
break;
}
break;
}
if musicInfo != undefined {
var _trackInfo = music[ musicInfo ];
var _track = _trackInfo[ music_track_id ];
var _start = _trackInfo[ music_track_start ];
var _length = _trackInfo[ music_track_length ] + _start;
var _loop = _trackInfo[ music_track_loop ] + _start;
switch ( musicEvent ) {
case music_event_start :
if musicBuffer > 0 { musicBuffer--; break }
musicPlaying = audio_play_sound( _track, 1, false );
musicGain = audio_sound_get_gain( _track ) * _difference;
audio_sound_gain( musicPlaying, musicGain, 0 );
audio_sound_set_track_position( musicPlaying, _start );
if musicFade > 0 {
audio_sound_gain( musicPlaying, 0, 0 );
musicState = music_state_fade_in;
} else {
musicState = music_state_play;
}
log( 0, "START : ", _start );
break;
case music_event_play :
var _pos = audio_sound_get_track_position( musicPlaying );
if _difference != 1 {
var _level = audio_sound_get_gain( musicPlaying );
audio_sound_gain( musicPlaying, _level * _difference, 0 );
}
if _loop != undefined {
if !audio_is_playing( musicPlaying ) { musicPlaying = audio_play_sound( _track, 1, false ) }
if _pos > _length { audio_sound_set_track_position( musicPlaying, _loop ) }
}
break;
case music_event_end :
if musicBuffer > 0 { musicBuffer--; break }
if musicFade > 0 {
musicState = music_state_fade_out;
musicFadeTime = musicFade;
musicGain = audio_sound_get_gain( musicPlaying );
break;
}
case music_event_stop :
audio_stop_sound( musicPlaying );
musicPlaying = undefined;
musicState = music_state_none;
break;
}
musicEvent = music_event_none;
}