Files
reticulum-meshchatX/public/assets/js/codec2-emscripten/codec2-lib.js
2024-05-20 16:06:30 +12:00

128 lines
3.7 KiB
JavaScript

class Codec2Lib {
static arrayBufferToBase64(buffer) {
let binary = "";
let bytes = new Uint8Array(buffer);
for (let byte of bytes) {
binary += String.fromCharCode(byte);
}
return window.btoa(binary);
}
static base64ToArrayBuffer(base64) {
let binary = window.atob(base64);
let bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
return bytes.buffer;
}
static readFileAsArrayBuffer(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.readAsArrayBuffer(file);
});
}
static runDecode(mode, data) {
return new Promise((resolve, reject) => {
const module = {
arguments: [mode, "input.bit", "output.raw"],
preRun: () => {
module.FS.writeFile("input.bit", new Uint8Array(data));
},
postRun: () => {
let buffer = module.FS.readFile("output.raw", {
encoding: "binary",
});
resolve(buffer);
},
};
createC2Dec(module);
});
}
static runEncode(mode, data) {
return new Promise((resolve, reject) => {
const module = {
arguments: [mode, "input.raw", "output.bit"],
preRun: () => {
module.FS.writeFile("input.raw", new Uint8Array(data));
},
postRun: () => {
let buffer = module.FS.readFile("output.bit", {
encoding: "binary",
});
resolve(buffer);
},
};
createC2Enc(module);
});
}
static rawToWav(buffer) {
return new Promise((resolve, reject) => {
const module = {
arguments: [
"-r",
"8000",
"-L",
"-e",
"signed-integer",
"-b",
"16",
"-c",
"1",
"input.raw",
"output.wav",
],
preRun: () => {
module.FS.writeFile("input.raw", new Uint8Array(buffer));
},
postRun: () => {
let output = module.FS.readFile("output.wav", {
encoding: "binary",
});
resolve(output);
},
};
SOXModule(module);
});
}
static audioFileToRaw(buffer, filename) {
return new Promise((resolve, reject) => {
const module = {
arguments: [
filename,
"-r",
"8000",
"-L",
"-e",
"signed-integer",
"-b",
"16",
"-c",
"1",
"output.raw",
],
preRun: () => {
module.FS.writeFile(filename, new Uint8Array(buffer));
},
postRun: () => {
let output = module.FS.readFile("output.raw", {
encoding: "binary",
});
resolve(output);
},
};
SOXModule(module);
});
}
}