document.addEventListener('DOMContentLoaded', function() { const fileInput = document.getElementById('audioFile'); const fileNameDisplay = document.getElementById('fileNameDisplay'); const submitBtn = document.getElementById('submitBtn'); const dropZone = document.getElementById('dropZone'); fileInput.addEventListener('change', function(e) { if (this.files && this.files[0]) { fileNameDisplay.textContent = this.files[0].name; fileNameDisplay.style.color = '#ffffff'; submitBtn.disabled = false; submitBtn.style.opacity = '1'; } }); dropZone.addEventListener('dragover', (e) => { e.preventDefault(); dropZone.classList.add('dragover'); }); dropZone.addEventListener('dragleave', () => { dropZone.classList.remove('dragover'); }); dropZone.addEventListener('drop', (e) => { e.preventDefault(); dropZone.classList.remove('dragover'); if (e.dataTransfer.files && e.dataTransfer.files[0]) { fileInput.files = e.dataTransfer.files; const event = new Event('change'); fileInput.dispatchEvent(event); } }); }); async function makePrediction() { const submitBtn = document.getElementById('submitBtn'); const originalText = submitBtn.innerText; const fileInput = document.getElementById('audioFile'); const resultCard = document.getElementById('resultCard'); if (!fileInput.files || !fileInput.files[0]) { alert("Please select a file first."); return; } submitBtn.innerText = " Extracting Features & Analyzing... \n(This may take 5-10 seconds)"; submitBtn.disabled = true; submitBtn.style.opacity = "0.7"; const formData = new FormData(); formData.append('audio_file', fileInput.files[0]); try { const response = await fetch('/predict', { method: 'POST', body: formData }); const result = await response.json(); if (response.ok) { const genre = result.prediction; const confidence = result.confidence || 0; const barColor = '#7e57c2'; resultCard.innerHTML = `
PREDICTED GENRE
Audio feature extraction and classification complete.