Files
youtube-music/src/plugins/visualizer/visualizers/wave.ts

47 lines
1.1 KiB
TypeScript

import { Wave } from '@foobar404/wave';
import { Visualizer } from './visualizer';
import type { VisualizerPluginConfig } from '../index';
class WaveVisualizer extends Visualizer {
private readonly visualizer: Wave;
constructor(
audioContext: AudioContext,
audioSource: MediaElementAudioSourceNode,
canvas: HTMLCanvasElement,
audioNode: GainNode,
_stream: MediaStream,
config: VisualizerPluginConfig,
) {
super(audioSource, audioNode);
this.visualizer = new Wave(
{ context: audioContext, source: audioSource },
canvas,
);
for (const animation of config.wave.animations) {
const TargetVisualizer =
this.visualizer.animations[
animation.type as keyof typeof this.visualizer.animations
];
this.visualizer.addAnimation(
new TargetVisualizer(animation.config as never), // Magic of Typescript
);
}
}
resize(_: number, __: number) {}
destroy() {
this.visualizer.clearAnimations();
try {
this.audioSource.disconnect(this.audioNode);
} catch {}
}
}
export default WaveVisualizer;