128 lines
3.7 KiB
JavaScript
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);
|
|
});
|
|
}
|
|
|
|
}
|