UNPKG

wavesurfer-multitracks

Version:

A modification to the multi-track super-plugin for wavesurfer.js that allows each track to have a different container

121 lines (120 loc) 3.25 kB
/** * MultiTracks is a super-plugin for creating a MultiTrack audio player. * Individual tracks are synced and played together. * They can be dragged to set their start position. * The top track is meant for dragging'n'dropping an additional track id (not a file). */ import { type WaveSurferOptions } from "wavesurfer.js"; import { type EnvelopePluginOptions } from "wavesurfer.js/dist/plugins/envelope.js"; import EventEmitter from "./event-emitter"; export type TrackId = string | number; export type TrackOptions = { id: TrackId; container?: HTMLElement; url?: string; peaks?: WaveSurferOptions["peaks"]; hideScrollbar: boolean; draggable?: boolean; startPosition: number; startCue?: number; endCue?: number; fadeInEnd?: number; fadeOutStart?: number; volume?: number; markers?: Array<{ time: number; label?: string; color?: string; }>; intro?: { endTime: number; label?: string; color?: string; }; options?: WaveSurferOptions; }; export type MultiTracksOptions = { container?: HTMLElement; minPxPerSec?: number; cursorColor?: string; cursorWidth?: number; trackBackground?: string; trackBorderColor?: string; rightButtonDrag?: boolean; envelopeOptions?: EnvelopePluginOptions; }; export type MultiTracksEvents = { canplay: []; "start-position-change": [{ id: TrackId; startPosition: number; }]; "start-cue-change": [{ id: TrackId; startCue: number; }]; "end-cue-change": [{ id: TrackId; endCue: number; }]; "fade-in-change": [{ id: TrackId; fadeInEnd: number; }]; "fade-out-change": [{ id: TrackId; fadeOutStart: number; }]; "volume-change": [{ id: TrackId; volume: number; }]; "intro-end-change": [{ id: TrackId; endTime: number; }]; drop: [{ id: TrackId; }]; }; export type MultiTracksTracks = Array<TrackOptions>; declare class MultiTracks extends EventEmitter<MultiTracksEvents> { private tracks; private options; private audios; private wavesurfers; private durations; private currentTime; private maxDuration; private rendering; private isDragging; private frameRequest; private timer; private subscriptions; private timeline; static create(tracks: MultiTracksTracks, options: MultiTracksOptions): MultiTracks; constructor(tracks: MultiTracksTracks, options: MultiTracksOptions); private initDurations; private initAudio; private initAllAudios; private initWavesurfer; private initAllWavesurfers; private initTimeline; private updatePosition; private setIsDragging; private onDrag; private findCurrentTracks; private startSync; play(): void; pause(): void; isPlaying(): boolean; getCurrentTime(): number; seekTo(time: number): void; /** Set time in seconds */ setTime(time: number): void; zoom(pxPerSec: number): void; addTrack(track: TrackOptions): void; destroy(): void; setSinkId(sinkId: string): Promise<void[]>; } export default MultiTracks;