DCSOlympus/frontend/react/src/audio/audiosource.ts
2024-09-05 22:35:08 +02:00

40 lines
899 B
TypeScript

import { AudioSink } from "./audiosink";
export abstract class AudioSource {
#connectedTo: AudioSink[] = [];
#name = "";
#playing = false;
connect(sink: AudioSink) {
this.getNode().connect(sink.getNode());
this.#connectedTo.push(sink);
document.dispatchEvent(new CustomEvent("audioSourcesUpdated"));
}
disconnect(sinkToDisconnect?: AudioSink) {
if (sinkToDisconnect !== undefined) {
this.getNode().disconnect(sinkToDisconnect.getNode());
this.#connectedTo = this.#connectedTo.filter((sink) => sink != sinkToDisconnect);
} else {
this.getNode().disconnect();
}
document.dispatchEvent(new CustomEvent("audioSourcesUpdated"));
}
setName(name) {
this.#name = name;
}
getName() {
return this.#name;
}
getConnectedTo() {
return this.#connectedTo;
}
abstract play(): void;
abstract getNode(): AudioNode;
}