Mypal/devtools/shared/specs/webaudio.js

164 lines
4.1 KiB
JavaScript

/* 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;