summaryrefslogtreecommitdiffstats
path: root/devtools/shared/specs/webaudio.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/specs/webaudio.js')
-rw-r--r--devtools/shared/specs/webaudio.js163
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;