woolball-client
Version:
Client-side library for Woolball enabling secure browser resource sharing for distributed AI task processing
63 lines (62 loc) • 2.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.bufferToBase64 = exports.blobToArrayBuffer = exports.processAudio = void 0;
const wavefile_1 = require("wavefile");
/**
* Processes audio data by converting base64 to Float64Array with specific sample rate and bit depth
* @param data Base64 encoded audio data
* @returns Float64Array Processed audio samples
*/
function processAudio(data) {
let wav = new wavefile_1.WaveFile();
wav.fromBase64(data);
wav.toBitDepth('32f');
wav.toSampleRate(16000);
let samples = wav.getSamples();
if (Array.isArray(samples) && samples.length > 1) {
const SCALING_FACTOR = Math.sqrt(2);
for (let i = 0; i < samples[0].length; ++i) {
samples[0][i] = SCALING_FACTOR * (samples[0][i] + samples[1][i]) / 2;
}
samples = samples[0];
}
return samples;
}
exports.processAudio = processAudio;
/**
* Converte um Blob para ArrayBuffer
* @param blob Blob para converter
* @returns Promise<ArrayBuffer> ArrayBuffer resultante
*/
async function blobToArrayBuffer(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
if (reader.result instanceof ArrayBuffer) {
resolve(reader.result);
}
else {
reject(new Error('Failed to convert blob to ArrayBuffer'));
}
};
reader.onerror = () => reject(reader.error);
reader.readAsArrayBuffer(blob);
});
}
exports.blobToArrayBuffer = blobToArrayBuffer;
/**
* Converte um ArrayBuffer para string base64
* @param buffer ArrayBuffer para converter
* @returns String base64
*/
function bufferToBase64(buffer) {
let binary = '';
const bytes = new Uint8Array(buffer);
const chunkSize = 8192;
for (let i = 0; i < bytes.length; i += chunkSize) {
const chunk = bytes.subarray(i, i + chunkSize);
binary += String.fromCharCode(...chunk);
}
return btoa(binary);
}
exports.bufferToBase64 = bufferToBase64;