UNPKG

woolball-client

Version:

Client-side library for Woolball enabling secure browser resource sharing for distributed AI task processing

95 lines (94 loc) 3.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processAudio = processAudio; exports.blobToArrayBuffer = blobToArrayBuffer; exports.bufferToBase64 = bufferToBase64; exports.base64ToBlob = base64ToBlob; 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; } /** * Converts a Blob to ArrayBuffer * Compatible with browser and Node.js environments * @param blob Blob to convert * @returns Promise<ArrayBuffer> Resulting ArrayBuffer */ async function blobToArrayBuffer(blob) { const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined'; if (isBrowser) { 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); }); } else { if (typeof blob.arrayBuffer === 'function') { return blob.arrayBuffer(); } else { if (blob instanceof Buffer) { return Promise.resolve(blob.buffer.slice(blob.byteOffset, blob.byteOffset + blob.byteLength)); } else { return Promise.resolve(Buffer.from(blob).buffer); } } } } /** * 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); } /** * Converte uma string base64 para um objeto Blob * @param base64 String base64 para converter * @param tipo Tipo MIME do blob resultante * @returns Blob resultante */ function base64ToBlob(base64, tipo = 'image/png') { const binario = atob(base64); const tamanho = binario.length; const bytes = new Uint8Array(tamanho); for (let i = 0; i < tamanho; i++) { bytes[i] = binario.charCodeAt(i); } return new Blob([bytes], { type: tipo }); }