UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

68 lines (67 loc) 1.81 kB
"use strict"; import { TypedAudioNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { AudioBuilder } from "../../../core/audio/AudioBuilder"; import { UserMedia } from "tone/build/esm/source/UserMedia"; import { isBooleanTrue } from "../../../core/Type"; class UserMediaAudioParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); this.autostart = ParamConfig.BOOLEAN(1); /** @param play the audio */ this.open = ParamConfig.BUTTON(null, { callback: (node) => { UserMediaAudioNode.PARAM_CALLBACK_open(node); } }); /** @param stop the audio */ this.close = ParamConfig.BUTTON(null, { callback: (node) => { UserMediaAudioNode.PARAM_CALLBACK_close(node); } }); } } const ParamsConfig = new UserMediaAudioParamsConfig(); export class UserMediaAudioNode extends TypedAudioNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return "userMedia"; } initializeNode() { this.io.inputs.setCount(0); } async cook(inputContents) { const audioBuilder = new AudioBuilder(); const userMedia = this._userMedia(); if (isBooleanTrue(this.pv.autostart)) { await userMedia.open(); } audioBuilder.setSource(userMedia); this.setAudioBuilder(audioBuilder); } _userMedia() { return this.__userMedia__ = this.__userMedia__ || this._createEffect(); } _createEffect() { return new UserMedia(); } async open() { return await this._userMedia().open(); } close() { this._userMedia().close(); } /* * STATIC CALLBACKS */ static PARAM_CALLBACK_open(node) { node.open(); } static PARAM_CALLBACK_close(node) { node.close(); } }