Initial commit

This commit is contained in:
2022-12-22 16:27:24 +01:00
commit a05807667f
14 changed files with 744 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
@file:OptIn(ExperimentalJsExport::class)
package nl.astraeus.processor
import org.khronos.webgl.Float64Array
import org.w3c.dom.MessageEvent
import org.w3c.dom.MessagePort
@ExperimentalJsExport
@JsExport
object WorkletProcessor {
var port: MessagePort? = null
@JsName("setPort")
fun setPort(port: MessagePort) {
this.port = port
this.port?.onmessage = ::onMessage
}
@JsName("onMessage")
fun onMessage(message: MessageEvent) {
console.log("WorkletProcessor: Received message", message)
when (message.data) {
"start" -> {
println("Start worklet!")
}
"stop" -> {
}
else ->
console.error("Don't kow how to handle message", message)
}
}
@JsName("process")
fun process(samples: Int, left: Float64Array, right: Float64Array) {
//console.log("WorkletProcessor.process", samples)
// val buffer = Float64SampleBuffer(samples, left, right)
//
// audioGenerator?.also { generator ->
// generator.fillBuffer(buffer, 0, samples, false)
// }
}
}

View File

@@ -0,0 +1,54 @@
; // make sure kotlin js code last statement is ended
class WorkletProcessor extends AudioWorkletProcessor {
// Static getter to define AudioParam objects in this custom processor.
static get parameterDescriptors() {
return [{
name: 'volume',
defaultValue: 0.75
}];
}
constructor() {
super();
console.log("worklet-processor.constructor", this, audioWorklet);
audioWorklet.nl.astraeus.processor.WorkletProcessor.setPort(this.port);
console.log("STARTED worklet-processor.js");
}
process(inputs, outputs, parameters) {
let result = true;
let samplesToProcess = 0;
if (outputs.length !== 1) {
result = false;
console.log("Unexpected number of outputs!", outputs)
} else {
let channels = outputs[0].length;
if (channels !== 2) {
result = false;
console.log("Unexpected number of channels!", outputs[0]);
} else if (outputs[0][0].length !== outputs[0][1].length) {
result = false;
console.log("Channels have different lengths!!", outputs[0]);
} else {
samplesToProcess = outputs[0][0].length;
audioWorklet.nl.astraeus.processor.WorkletProcessor.process(
samplesToProcess,
outputs[0][0],
outputs[0][1]
);
}
}
return result;
}
}
registerProcessor('worklet-processor', WorkletProcessor);