Ai song
Suno Music AI
Your key is stored only in this browser session.
Results & Status
Ready.
Suno Music AI
Your key is stored only in this browser session.
Results & Status
Ready.
${message}
`; } function displayTracks(sunoData) { tracksContainer.innerHTML = ''; sunoData.forEach((track, index) => { const tags = track.tags ? track.tags.split(',').map(tag => `${tag.trim()}`).join('') : ''; const trackElement = document.createElement('div'); trackElement.className = 'p-4 bg-gray-50 rounded-lg border border-gray-200 shadow-sm'; trackElement.innerHTML = `${track.title || 'Untitled Track'}
Duration: ${track.duration ? track.duration.toFixed(2) : 'N/A'}s | ID: ${track.id}
${tags}
${track.lyric ? `
View Lyrics
${track.lyric}
No lyrics available (Instrumental or Lyrics mode).
'} `; tracksContainer.appendChild(trackElement); }); } generateBtn.addEventListener('click', async () => { clearError(); tracksContainer.innerHTML = ''; statusMessage.innerHTML = 'Starting generation...
'; const apiKey = apiKeyInput.value.trim(); const prompt = document.getElementById('prompt').value.trim(); const style = document.getElementById('style').value.trim(); const model = document.getElementById('model').value; if (!apiKey || !prompt) { displayError('Please enter a valid API Key and a prompt.'); return; } setLoading(true); try { const api = new SunoAPI(apiKey); const taskId = await api.generateMusic(prompt, { style: style, model: model, title: 'Canvas Generated Track' }); updateStatus('PENDING'); const result = await api.waitForCompletion(taskId, updateStatus); displayTracks(result.sunoData); } catch (error) { displayError(error.message); updateStatus('ERROR', error.message); } finally { setLoading(false); } });