function main(){
    document.addEventListener("DOMContentLoaded", () => {
        const tracksContainer = document.getElementById("tracks-container");
        const addTrackButton = document.getElementById("add-track");
        const fileInput = document.getElementById("file-input");

        function createTrack(audioFile = null) {
            const track = document.createElement("div");
            track.classList.add("track");

            const waveform = document.createElement("div");
            waveform.classList.add("waveform");

            const playhead = document.createElement("div");
            playhead.classList.add("playhead");
            waveform.appendChild(playhead);

            const playButton = document.createElement("button");
            playButton.textContent = "Play";

            const muteButton = document.createElement("button");
            muteButton.textContent = "Mute";

            const player = new Tone.Player(audioFile).toDestination();
            player.loop = true;

            let animationFrame;
            playButton.addEventListener("click", () => {
                if (player.state === "started") {
                    player.stop();
                    playButton.textContent = "Play";
                    cancelAnimationFrame(animationFrame);
                } else {
                    player.start();
                    playButton.textContent = "Stop";
                    const startTime = Tone.now();
                    const duration = player.buffer.duration;

                    function updatePlayhead() {
                        const elapsedTime = Tone.now() - startTime;
                        const progress = (elapsedTime % duration) / duration;
                        playhead.style.transform = `translateX(${progress * 100}%)`;
                        animationFrame = requestAnimationFrame(updatePlayhead);
                    }
                    updatePlayhead();
                }
            });

            muteButton.addEventListener("click", () => {
                player.mute = !player.mute;
                muteButton.textContent = player.mute ? "Unmute" : "Mute";
            });

            track.appendChild(waveform);
            track.appendChild(playButton);
            track.appendChild(muteButton);

            tracksContainer.appendChild(track);
        }

        addTrackButton.addEventListener("click", () => {
            fileInput.click();
        });

        fileInput.addEventListener("change", (event) => {
            const file = event.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = (e) => {
                    const audioUrl = e.target.result;
                    createTrack(audioUrl);
                };
                reader.readAsDataURL(file);
            }
        });
    });


    const osc = new Tone.Oscillator().toDestination().start();
    // a scheduleable signal which can be connected to control an AudioParam or another Signal
    const signal = new Tone.Signal({
        value: "C4",
        units: "frequency"
    }).connect(osc.frequency);
    // the scheduled ramp controls the connected signal
    signal.rampTo("C2", 4, "+0.5");
    console.log(signal);

}
main();