class Codec { constructor() { } } class OpusCodec extends Codec { constructor() { super(); this.channelCount = 1; } name() { return "Opus"; } initialise() { this.fn_newHandle = Module.cwrap("codec_opus_createNativeHandle", "pointer", ["number"]); this.fn_decode = Module.cwrap("codec_opus_decode", "number", ["pointer", "pointer", "number", "number"]); /* codec_opus_decode(handle, buffer, length, maxlength) */ this.fn_encode = Module.cwrap("codec_opus_encode", "number", ["pointer", "pointer", "number", "number"]); this.nativeHandle = this.fn_newHandle(1); } deinitialise() { } decode(data) { let maxBytes = 4096; let buffer = Module._malloc(maxBytes); let heapBytes = new Uint8Array(Module.HEAPU8.buffer, buffer, maxBytes); heapBytes.set(data); let result = this.fn_decode(this.nativeHandle, heapBytes.byteOffset, data.byteLength, maxBytes); if (result < 0) { Module._free(buffer); return "invalid result on decode (" + result + ")"; } let buf = Module.HEAPF32.slice(heapBytes.byteOffset / 4, (heapBytes.byteOffset / 4) + (result * 4 * this.channelCount)); Module._free(buffer); return buf; } encode(data) { let maxBytes = 4096 * 1 + 4; let buffer = Module._malloc(maxBytes); console.log("X"); let heapBytes = new Uint8Array(Module.HEAPU8.buffer, buffer, maxBytes); //heapBytes.set(data); let result = this.fn_encode(this.nativeHandle, heapBytes.byteOffset, 960, maxBytes); if (result < 0) { Module._free(buffer); return "invalid result on encode (" + result + ")"; } console.log("Bytes: " + result); let buf = Module.HEAP8.slice(heapBytes.byteOffset, heapBytes.byteOffset + result); Module._free(buffer); return Uint8Array.from(buf); } _arrayToHeap(typedArray) { let numBytes = typedArray.length * typedArray.BYTES_PER_ELEMENT; let ptr = Module._malloc(numBytes); let heapBytes = new Uint8Array(Module.HEAPU8.buffer, ptr, numBytes); heapBytes.set(new Uint8Array(typedArray.buffer)); return heapBytes; } } //# sourceMappingURL=Codec.js.map