Update Files
This commit is contained in:
75
Kinc/Backends/System/Wasm/JS-Sources/audio-thread.js
Normal file
75
Kinc/Backends/System/Wasm/JS-Sources/audio-thread.js
Normal file
@ -0,0 +1,75 @@
|
||||
// from https://developer.mozilla.org/en-US/docs/Web/API/AudioWorkletNode
|
||||
|
||||
function create_thread(func) {
|
||||
|
||||
}
|
||||
|
||||
class AudioThread extends AudioWorkletProcessor {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
|
||||
const self = this;
|
||||
|
||||
this.port.onmessageerror = (e) => {
|
||||
console.error('Error', e);
|
||||
};
|
||||
|
||||
this.port.onmessage = (e) => {
|
||||
console.log('Audio onmessage');
|
||||
|
||||
const mod = e.data.mod;
|
||||
const memory = e.data.memory;
|
||||
|
||||
const importObject = {
|
||||
env: { memory },
|
||||
imports: {
|
||||
imported_func: arg => console.log('thread: ' + arg),
|
||||
create_thread
|
||||
}
|
||||
};
|
||||
|
||||
WebAssembly.instantiate(mod, importObject).then((instance) => {
|
||||
console.log('Running audio thread');
|
||||
self.audio_func = instance.exports.audio_func;
|
||||
self.audio_pointer = instance.exports.malloc(16 * 1024);
|
||||
console.log('Audio pointer: ' + self.audio_pointer);
|
||||
console.log('Memory byteLength: ' + memory.buffer.byteLength);
|
||||
self.audio_data = new Float32Array(
|
||||
memory.buffer,
|
||||
self.audio_pointer,
|
||||
16 * 256
|
||||
);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
process(inputs, outputs, parameters) {
|
||||
const output = outputs[0];
|
||||
|
||||
const data = output[0];
|
||||
|
||||
//for (let i = 0; i < data.length; ++i) {
|
||||
// data[i] = Math.random() * 2 - 1;
|
||||
//}
|
||||
|
||||
if (this.audio_func) {
|
||||
let offset = 0;
|
||||
for (;;) {
|
||||
const length = Math.min(data.length - offset, this.audio_data.length);
|
||||
this.audio_func(this.audio_pointer + offset, length);
|
||||
for (let i = 0; i < length; ++i) {
|
||||
data[offset + i] = this.audio_data[i];
|
||||
}
|
||||
|
||||
if (offset + this.audio_data.length >= data.length) {
|
||||
break;
|
||||
}
|
||||
offset += this.audio_data.length;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
registerProcessor('audio-thread', AudioThread);
|
Reference in New Issue
Block a user