catalogTestFilter.json
{
"label": "Test Filter Plugin",
"purpose": "Filter",
"kind": "tesFilterPluginV1_0",
"ui": "http://127.0.0.1:8080/filter/ui3.html",
"evaluate": "createNewTestFilterPlugin",
"script": "http://127.0.0.1:8080/filter/plugin3.js"
}plugin3.ts
function createNewTestFilterPlugin() {
let audioContext = null;
let inputGainNode;
let outputGainNode;
let flanger;
let properties = {
speed: 1
};
function flangerNode(audioContext, fromNode, toNode) {
let inputGainNode = audioContext.createGain();
let wetGainNode = audioContext.createGain();
let delayNode = audioContext.createDelay();
let gainNode = audioContext.createGain();
let feedbackGainNode = audioContext.createGain();
let oscillatorNode = audioContext.createOscillator();
oscillatorNode.connect(gainNode);
gainNode.connect(delayNode.delayTime);
inputGainNode.connect(wetGainNode);
inputGainNode.connect(delayNode);
delayNode.connect(wetGainNode);
delayNode.connect(feedbackGainNode);
feedbackGainNode.connect(inputGainNode);
oscillatorNode.type = 'sine';
oscillatorNode.start(0);
this.reset = function (delay, depth, feedback, speed) {
delayNode.delayTime.value = delay;
gainNode.gain.value = depth;
feedbackGainNode.gain.value = feedback;
oscillatorNode.frequency.value = speed;
};
fromNode.connect(inputGainNode);
wetGainNode.connect(toNode);
this.reset(0.005, 0.01, 0.5, 0.25);
return this;
}
return {
launch: (context, parameters) => {
if (!(inputGainNode)) {
audioContext = context;
inputGainNode = audioContext.createGain();
outputGainNode = audioContext.createGain();
flanger = flangerNode(audioContext, inputGainNode, outputGainNode);
}
if (parameters) {
properties = parameters;
flanger.reset(0.005, 0.01, 0.5, properties.speed);
}
},
busy: () => {
return false;
},
schedule: (when, tempo, parameters) => {
if (parameters) {
let point = parameters;
flanger.speed = point.speed;
flanger.reset(0.005, 0.01, 0.5, point.speed);
}
},
output: () => {
return outputGainNode;
},
input: () => {
return inputGainNode;
}
};
}ui3.html
<html>
<head>
<style>
body {
background: silver;
}
</style>
</head>
<body>
<h1>Test Filter Plugin</h1>
<p>Flanger speed</p>
<p><input type="range" id="flangerslider" min="0.05" max="0.5" step="0.05" onchange="setSpeed(this.value);" /></p>
</body>
<script>
let dialigId = '';
let properties = {
speed: 0.25
};
function setSpeed(ss) {
properties.speed = ss;
postMessageToHost();
}
function onHostMessage(messageEvent) {
if (dialigId) {
if (messageEvent.data.hostData) {
properties = messageEvent.data.hostData;
setSpeed(properties.speed);
}
document.getElementById('flangerslider').value = properties.speed;
} else {
dialigId = messageEvent.data.hostData;
}
}
function postMessageToHost() {
window.parent.postMessage({
dialogID: dialigId,
pluginData: properties,
done: false,
screenWait: false
}, '*');
}
window.addEventListener('message', onHostMessage, false);
postMessageToHost();
</script>
</html>