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
TypeScript
/**
* 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;