upend/webui/src/components/display/blobs/AudioViewer.svelte

44 lines
979 B
Svelte
Raw Normal View History

2022-02-14 13:27:51 +01:00
<script lang="ts">
2022-02-14 14:57:35 +01:00
import { onMount } from "svelte";
import type WaveSurfer from "wavesurfer.js";
2022-02-14 13:27:51 +01:00
import Spinner from "../../utils/Spinner.svelte";
export let address: string;
2022-02-14 14:57:35 +01:00
export let detail: boolean;
2022-02-14 13:27:51 +01:00
2022-02-14 14:57:35 +01:00
let containerEl: HTMLDivElement;
let loaded = false;
let wavesurfer: WaveSurfer;
$: if (wavesurfer) wavesurfer.drawBuffer() && detail;
onMount(async () => {
const WaveSurfer = await import("wavesurfer.js");
wavesurfer = WaveSurfer.default.create({
container: containerEl,
waveColor: "#dc322f",
progressColor: "#991c1a",
responsive: true,
backend: "MediaElement",
mediaControls: true,
});
wavesurfer.on("ready", () => {
loaded = true;
});
wavesurfer.load(`api/raw/${address}`);
});
2022-02-14 13:27:51 +01:00
</script>
<div class="audio">
2022-02-14 14:57:35 +01:00
{#if !loaded}
<Spinner centered />
2022-02-14 13:27:51 +01:00
{/if}
2022-02-14 14:57:35 +01:00
<div class="wavesurfer" bind:this={containerEl} />
2022-02-14 13:27:51 +01:00
</div>
<style lang="scss">
.audio {
2022-02-14 14:57:35 +01:00
width: 100%;
2022-02-14 13:27:51 +01:00
}
</style>