| import { WaveSurfer } from "https://unpkg.com/wavesurfer.js"; | |
| const waveform = document.querySelector("waveform"); | |
| const audioFiles = []; | |
| function playAudioClip(clipIndex) { | |
| const clip = audioFiles[clipIndex]; | |
| waveform.waveSurfer.mute(); | |
| waveform.waveSurfer.play(); | |
| waveform.waveSurfer.on("audioprocess", (event) => { | |
| if (event.clipIndex !== clipIndex) { | |
| waveform.waveSurfer.pause(); | |
| waveform.waveSurfer.mute(); | |
| } | |
| }); | |
| } | |
| function stopAudioClip() { | |
| waveform.waveSurfer.pause(); | |
| } | |
| function addAudioClip(blob) { | |
| const id = audioFiles.length; | |
| audioFiles[id] = new WaveSurfer(blob, `audio ${id}`); | |
| waveform.append(audioFiles[id].amplitudeNode); | |
| } | |
| function initWaveform() { | |
| const wavesurfer = new WaveSurfer({ | |
| container: waveform.querySelector(".waveform"), | |
| }); | |
| wavesurfer.on("audioprocess", (event) => { | |
| const clipIndex = event.clipIndex; | |
| if (clipIndex !== undefined) { | |
| const clip = audioFiles[clipIndex]; | |
| if (event.type === "mute") { | |
| clip.mute(); | |
| } else { | |
| clip.play(); | |
| } | |
| } | |
| }); | |
| return wavesurfer; | |
| } | |
| function initAudioClips() { | |
| audioFiles.forEach((clip) => { | |
| addAudioClip(clip); | |
| }); | |
| } | |
| function main() { | |
| const uploadButton = document.querySelector("button"); | |
| const audioInput = document.createElement("input"); | |
| audioInput.type = "file"; | |
| audioInput.multiple = "multiple"; | |
| audioInput.accept = "audio/*"; | |
| uploadButton.addEventListener("click", () => { | |
| audioInput.click(); | |
| }); | |
| audioInput.onchange = async () => { | |
| if (audioInput.files.length) { | |
| for (const file of audioInput.files) { | |
| const url = await createObjectURL(file); | |
| const blob = new Blob(url, { type: file.type }); | |
| addAudioClip(blob); | |
| } | |
| } | |
| }; | |
| } | |
| function createObjectURL(file) { | |
| const url = URL.createObjectURL(file); | |
| return url; | |
| } | |
| main(); | |
| }) |