60 lines
2.0 KiB
JavaScript
60 lines
2.0 KiB
JavaScript
import { app } from "../../../scripts/app.js";
|
|
import { api } from "../../../scripts/api.js";
|
|
|
|
app.registerExtension({
|
|
name: "TangoFlux.playAudio",
|
|
async beforeRegisterNodeDef(nodeType, nodeData, app) {
|
|
if (nodeData.name === "TangoFluxVAEDecodeAndPlay") {
|
|
const originalNodeCreated = nodeType.prototype.onNodeCreated;
|
|
|
|
nodeType.prototype.onNodeCreated = async function () {
|
|
originalNodeCreated?.apply(this, arguments);
|
|
this.widgets_count = this.widgets?.length || 0;
|
|
|
|
this.addAudioWidgets = (audios) => {
|
|
if (this.widgets) {
|
|
for (let i = 0; i < this.widgets.length; i++) {
|
|
if (this.widgets[i].name.startsWith("_playaudio")) {
|
|
this.widgets[i].onRemove?.();
|
|
}
|
|
}
|
|
this.widgets.length = this.widgets_count;
|
|
}
|
|
|
|
let index = 0
|
|
for (const params of audios) {
|
|
const audioElement = document.createElement("audio");
|
|
audioElement.controls = true;
|
|
|
|
this.addDOMWidget("_playaudio" + index, "playaudio", audioElement, {
|
|
serialize: false,
|
|
hideOnZoom: false,
|
|
});
|
|
audioElement.src = api.apiURL(
|
|
`/tangoflux/playaudio?${new URLSearchParams(params)}`
|
|
);
|
|
index++
|
|
}
|
|
|
|
requestAnimationFrame(() => {
|
|
const newSize = this.computeSize();
|
|
newSize[0] = Math.max(newSize[0], this.size[0]);
|
|
newSize[1] = Math.max(newSize[1], this.size[1]);
|
|
this.onResize?.(newSize);
|
|
app.graph.setDirtyCanvas(true, false);
|
|
});
|
|
};
|
|
};
|
|
|
|
const originalNodeExecuted = nodeType.prototype.onExecuted;
|
|
|
|
nodeType.prototype.onExecuted = async function (message) {
|
|
originalNodeExecuted?.apply(this, arguments);
|
|
if (message?.audios) {
|
|
this.addAudioWidgets(message.audios);
|
|
}
|
|
};
|
|
}
|
|
},
|
|
});
|