mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-02-03 05:03:44 +00:00
47 lines
1.1 KiB
TypeScript
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;
|