Example #1
0
    /// <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;
    }
Example #2
0
    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}");
    }
Example #3
0
 public MainPage()
 {
     this.InitializeComponent();
     MusicFrame.Navigate(MusicPage);
     VideoFrame.Navigate(VideoPage);
 }