/// <summary> Get references to game objects, initialize settings, and start music. </summary> void Awake() { // Get the audio sources attached to the game object mMusicSources = GetComponents <AudioSource>(); mSourceBPS = SourceBPM / 60f; // Setup music frame config MusicFrames = new Queue <MusicFrame>(); MusicFrames.Enqueue(new MusicFrame("Main Menu", 9.391F, 9.391F, 36.521F, false)); MusicFrames.Enqueue(new MusicFrame("Level 1", 0.000F, 82.434F, 161.739F, true)); MusicFrames.Enqueue(new MusicFrame("Level 2 Low Intensity", 136.695F, 161.739F, 270.260F, false)); MusicFrames.Enqueue(new MusicFrame("Level 2 High Intensity", 270.260F, 295.304F, 351.652F, false)); MusicFrames.Enqueue(new MusicFrame("Level 3 Low Intensity", 351.652F, 355.826F, 420.521F, false)); MusicFrames.Enqueue(new MusicFrame("Level 3 High Intensity", 420.521F, 441.391F, 485.217F, true)); MusicFrames.Enqueue(new MusicFrame("Credits", 485.217F, 535.304F, 566.000F, false)); mDeathFrame = new MusicFrame("Death", 542.912F, 542.912F, 560.000F, true); mCurrentFrame = MusicFrames.Dequeue(); mOffset = AudioSettings.dspTime + 0.5; // Setup the first music source to play mMusicSources[0].PlayScheduled(mOffset); mMusicSources[0].time = mCurrentFrame.IntroStartTime; // Source 1 plays first mAudioSourcePlaying = true; // Setup AudioSource system swap helper variables mSwapAudioSourceTime = AudioSettings.dspTime + mCurrentFrame.LoopStartTime - mCurrentFrame.IntroStartTime; mSourceSwapped = true; }
private void HandleTransition(MusicFrame transitionTo) { AudioSource toPlay = mMusicSources[mAudioSourcePlaying ? 1 : 0]; AudioSource toStop = mMusicSources[mAudioSourcePlaying ? 0 : 1]; mCurrentFrame = transitionTo; toPlay.time = mCurrentFrame.IntroStartTime; // Find the timestamp for the next bar end int beat = GetBeat() % BarLength; double timeBetweenBeats = 1 / mSourceBPS; double timeToNextBeat = timeBetweenBeats - (GetTimeSinceBeat() * timeBetweenBeats); // Find the number of beats to wait (number of beats to wait until transitioning, we usually transition on the first beat of each bar) int beatsToWait = 0; if (!mCurrentFrame.TransitionImmediately) { beatsToWait = BarLength - (beat + 1); } double transitionTime = beatsToWait * timeBetweenBeats + timeToNextBeat + AudioSettings.dspTime; // If we transition immediately, we need to reset our offset, otherwise the bar count will get messed up if (mCurrentFrame.TransitionImmediately) { mOffset = transitionTime; } toPlay.PlayScheduled(transitionTime); toStop.SetScheduledEndTime(transitionTime); mSwapAudioSourceTime = transitionTime; mSourceSwapped = false; Debug.Log($"Next track queued: {mCurrentFrame.Name}, time until transition: {transitionTime - AudioSettings.dspTime}"); }
public MainPage() { this.InitializeComponent(); MusicFrame.Navigate(MusicPage); VideoFrame.Navigate(VideoPage); }