Spaces:
Running
on
Zero
Running
on
Zero
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); | |
} | |
}; | |
} | |
}, | |
}); | |