UNPKG

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
"use strict"; 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;