Spaces:
Running
Running
const descriptions = ['Text Description 1', 'Text Description 2', 'Text Description 3', 'Text Description 4']; | |
const models = ['AR', 'FM', 'FM_VAE', 'GT']; | |
function createSection1Table() { | |
let table = '<table><thead><tr><th>Text Description</th>'; | |
models.forEach(model => table += `<th>${model}</th>`); | |
table += '</tr></thead><tbody>'; | |
descriptions.forEach((desc, idx) => { | |
table += `<tr><td>${desc}</td>`; | |
models.forEach(model => { | |
const audioSrc = `section1/audio/text${idx+1}_${model.toLowerCase()}.wav`; | |
table += `<td><audio controls src="${audioSrc}"></audio></td>`; | |
}); | |
table += '</tr>'; | |
}); | |
table += '</tbody></table>'; | |
document.getElementById('section1').innerHTML = table; | |
} | |
function createSectionWithObj(sectionId, sectionPath) { | |
let table = '<table><thead><tr><th>Text Description</th>'; | |
models.forEach(model => table += `<th>${model}</th>`); | |
table += '</tr></thead><tbody>'; | |
descriptions.forEach((desc, idx) => { | |
table += `<tr><td>${desc}</td>`; | |
models.forEach(model => { | |
const audioSrc = `${sectionPath}/audio/text${idx+1}_${model.toLowerCase()}.wav`; | |
const imageSrc = `${sectionPath}/images/text${idx+1}_${model.toLowerCase()}.png`; | |
table += `<td> | |
<canvas id="canvas_${sectionId}_${idx+1}_${model}" width="200" height="100" style="border:1px solid #ccc;"></canvas> | |
<audio id="audio_${sectionId}_${idx+1}_${model}" controls src="${audioSrc}"></audio> | |
</td>`; | |
}); | |
table += '</tr>'; | |
}); | |
table += '</tbody></table>'; | |
document.getElementById(sectionId).innerHTML = table; | |
} | |
function setupWaveformOverlay(sectionId) { | |
descriptions.forEach((desc, idx) => { | |
models.forEach(model => { | |
const canvas = document.getElementById(`canvas_${sectionId}_${idx+1}_${model}`); | |
const ctx = canvas.getContext('2d'); | |
const img = new Image(); | |
img.src = `${sectionId}/images/text${idx+1}_${model.toLowerCase()}.png`; | |
img.onload = () => ctx.drawImage(img, 0, 0, canvas.width, canvas.height); | |
const audio = document.getElementById(`audio_${sectionId}_${idx+1}_${model}`); | |
let interval; | |
audio.addEventListener('play', () => { | |
interval = setInterval(() => { | |
const x = (audio.currentTime / audio.duration) * canvas.width; | |
ctx.clearRect(0, 0, canvas.width, canvas.height); | |
ctx.drawImage(img, 0, 0, canvas.width, canvas.height); | |
ctx.beginPath(); | |
ctx.moveTo(x, 0); | |
ctx.lineTo(x, canvas.height); | |
ctx.strokeStyle = 'red'; | |
ctx.stroke(); | |
}, 30); | |
}); | |
audio.addEventListener('pause', () => clearInterval(interval)); | |
audio.addEventListener('ended', () => clearInterval(interval)); | |
}); | |
}); | |
} | |
createSection1Table(); | |
createSectionWithObj('section2', 'section2'); | |
createSectionWithObj('section3', 'section3'); | |
window.onload = () => { | |
setupWaveformOverlay('section2'); | |
setupWaveformOverlay('section3'); | |
}; | |