void Update()
    {
        // Check key press.
        if (Input.GetKeyDown(KeyCode.Space))
        {
            PlayerInputted();
        }

        if (!songStarted)
        {
            return;
        }

        // Calculate songposition. (Time passed - time passed last frame).
        songposition = (float)(AudioSettings.dspTime - dsptimesong - songOffset);

        // Check if we need to instantiate a new note. (We obtain the current beat of the song by (songposition / secondsPerBeat).)
        // See the image for note spawning (note that the direction is reversed):
        // http://shinerightstudio.com/posts/music-syncing-in-rhythm-games/pic2.png
        float beatToShow = songposition / secondsPerBeat + BeatsShownOnScreen;

        // Check if there are still notes in the track, and check if the next note is within the bounds we intend to show on screen.
        if (indexOfNextNote < track.Length && track[indexOfNextNote] < beatToShow)
        {
            // Instantiate a new music note. (Search "Object Pooling" for more information if you wish to minimize the delay when instantiating game objects.)
            // We don't care about the position and rotation because we will set them later in MusicNote.Initialize(...).
            MusicNote musicNote = ((GameObject)Instantiate(musicNotePrefab, Vector2.zero, Quaternion.identity)).GetComponent <MusicNote>();

            musicNote.Initialize(this, startLineX, finishLineX, removeLineX, posY, track[indexOfNextNote]);

            // The note is push into the queue for reference.
            notesOnScreen.Enqueue(musicNote);

            // Update the next index.
            indexOfNextNote++;
        }

        // Loop the queue to check if any of them reaches the finish line.
        if (notesOnScreen.Count > 0)
        {
            MusicNote currNote = notesOnScreen.Peek();

            if (currNote.transform.position.x >= finishLineX + tolerationOffset)
            {
                // Change color to red to indicate a miss.
                currNote.ChangeColor(false);

                notesOnScreen.Dequeue();

                statusText.text = "MISS!";
            }
        }

        // Note that the music note is eventually removed by itself (the Update() function in MusicNote) when it reaches the removeLine.
    }