diff options
Diffstat (limited to 'devtools/shared/specs/webaudio.js')
-rw-r--r-- | devtools/shared/specs/webaudio.js | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/devtools/shared/specs/webaudio.js b/devtools/shared/specs/webaudio.js new file mode 100644 index 000000000..9dfb92467 --- /dev/null +++ b/devtools/shared/specs/webaudio.js @@ -0,0 +1,163 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const { + Arg, + Option, + RetVal, + generateActorSpec, + types, +} = require("devtools/shared/protocol"); + +exports.NODE_CREATION_METHODS = [ + "createBufferSource", "createMediaElementSource", "createMediaStreamSource", + "createMediaStreamDestination", "createScriptProcessor", "createAnalyser", + "createGain", "createDelay", "createBiquadFilter", "createWaveShaper", + "createPanner", "createConvolver", "createChannelSplitter", "createChannelMerger", + "createDynamicsCompressor", "createOscillator", "createStereoPanner" +]; + +exports.AUTOMATION_METHODS = [ + "setValueAtTime", "linearRampToValueAtTime", "exponentialRampToValueAtTime", + "setTargetAtTime", "setValueCurveAtTime", "cancelScheduledValues" +]; + +exports.NODE_ROUTING_METHODS = [ + "connect", "disconnect" +]; + +types.addActorType("audionode"); +const audionodeSpec = generateActorSpec({ + typeName: "audionode", + + methods: { + getType: { response: { type: RetVal("string") }}, + isBypassed: { + response: { bypassed: RetVal("boolean") } + }, + bypass: { + request: { enable: Arg(0, "boolean") }, + response: { bypassed: RetVal("boolean") } + }, + setParam: { + request: { + param: Arg(0, "string"), + value: Arg(1, "nullable:primitive") + }, + response: { error: RetVal("nullable:json") } + }, + getParam: { + request: { + param: Arg(0, "string") + }, + response: { text: RetVal("nullable:primitive") } + }, + getParamFlags: { + request: { param: Arg(0, "string") }, + response: { flags: RetVal("nullable:primitive") } + }, + getParams: { + response: { params: RetVal("json") } + }, + connectParam: { + request: { + destActor: Arg(0, "audionode"), + paramName: Arg(1, "string"), + output: Arg(2, "nullable:number") + }, + response: { error: RetVal("nullable:json") } + }, + connectNode: { + request: { + destActor: Arg(0, "audionode"), + output: Arg(1, "nullable:number"), + input: Arg(2, "nullable:number") + }, + response: { error: RetVal("nullable:json") } + }, + disconnect: { + request: { output: Arg(0, "nullable:number") }, + response: { error: RetVal("nullable:json") } + }, + getAutomationData: { + request: { paramName: Arg(0, "string") }, + response: { values: RetVal("nullable:json") } + }, + addAutomationEvent: { + request: { + paramName: Arg(0, "string"), + eventName: Arg(1, "string"), + args: Arg(2, "nullable:json") + }, + response: { error: RetVal("nullable:json") } + }, + } +}); + +exports.audionodeSpec = audionodeSpec; + +const webAudioSpec = generateActorSpec({ + typeName: "webaudio", + + /** + * Events emitted by this actor. + */ + events: { + "start-context": { + type: "startContext" + }, + "connect-node": { + type: "connectNode", + source: Option(0, "audionode"), + dest: Option(0, "audionode") + }, + "disconnect-node": { + type: "disconnectNode", + source: Arg(0, "audionode") + }, + "connect-param": { + type: "connectParam", + source: Option(0, "audionode"), + dest: Option(0, "audionode"), + param: Option(0, "string") + }, + "change-param": { + type: "changeParam", + source: Option(0, "audionode"), + param: Option(0, "string"), + value: Option(0, "string") + }, + "create-node": { + type: "createNode", + source: Arg(0, "audionode") + }, + "destroy-node": { + type: "destroyNode", + source: Arg(0, "audionode") + }, + "automation-event": { + type: "automationEvent", + node: Option(0, "audionode"), + paramName: Option(0, "string"), + eventName: Option(0, "string"), + args: Option(0, "json") + } + }, + + methods: { + getDefinition: { + response: { definition: RetVal("json") } + }, + setup: { + request: { reload: Option(0, "boolean") }, + oneway: true + }, + finalize: { + oneway: true + } + } +}); + +exports.webAudioSpec = webAudioSpec; |