Script Dump: Bogosort Musical Notes

I’m done playing with this so grab some notes in MP3 format and run the script. Do adapt it to your own likings and have fun!

<html>
<head>
    <title>Music Bogosort</title>
    <script>
        function bogosortAndPlay() {
            var notes = ["C", "D", "E", "F", "G", "A", "B"];
            var sortedNotes = [];
            while (sortedNotes.length < 6) {
                var randomIndex = Math.floor(Math.random() * notes.length);
                var randomNote = notes[randomIndex];
                if (!sortedNotes.includes(randomNote)) {
                    sortedNotes.push(randomNote);
                }
            }
            document.getElementById("unsorted_notes").innerHTML = "Unsorted notes: " + sortedNotes.join(", ");

            // Bogosort (this is extremely inefficient)
            while (!isSorted(sortedNotes)) {
                shuffleArray(sortedNotes);
            }

            document.getElementById("sorted_notes").innerHTML = "Sorted notes: " + sortedNotes.join(", ");
            playNotes(sortedNotes);
        }

        function isSorted(array) {
            for (var i = 0; i < array.length - 1; i++) {
                if (array[i] > array[i + 1]) {
                    return false;
                }
            }
            return true;
        }

        function shuffleArray(array) {
            for (var i = array.length - 1; i > 0; i--) {
                var j = Math.floor(Math.random() * (i + 1));
                var temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }

        function playNotes(notes) {
            var index = 0;
            function playNextNote() {
                if (index < notes.length) {
                    var audio = new Audio("notes/" + notes[index] + ".mp3");
                    audio.play();
                    index++;
                    // Delay between notes (adjust as needed)
                    setTimeout(playNextNote, 1000); // Delay of 1 second between notes
                }
            }
            playNextNote();
        }
    </script>
</head>
<body>
    <h1>Music Bogosort</h1>
    <button onclick="bogosortAndPlay()">Sort and Play</button>
    <p id="unsorted_notes"></p>
    <p id="sorted_notes"></p>
</body>
</html>

 

Loading