sf-e3b / app.js
djwugee's picture
Add 2 files
f9dccbc verified
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();
})