/// /** * Browser examples for Cartesia JS SDK v3.x * * These examples are designed for browser environments. They use browser APIs * like Blob, URL.createObjectURL, Audio, and the Web Audio API. * * To use in a project: * npm install @cartesia/cartesia-js * * Note: Never embed API keys in client-side code. Use an access token from * your backend instead: * const client = new Cartesia({ token: "" }); */ import Cartesia from '@cartesia/cartesia-js'; // ============================================================================= // Client Initialization // ============================================================================= function createClient(token: string): Cartesia { // In a browser, use a short-lived access token from your backend, // not a raw API key. return new Cartesia({ token }); } const AUDIO_CHUNK_MS = 100; const AUDIO_CONTEXT_ENCODING = 'pcm_f32le'; function createFloat32AudioChunker( sampleRate: number, sendRaw: (chunk: ArrayBufferLike) => void, ): { append(samples: Float32Array): void; flush(): void } { const chunkSamples = Math.round((sampleRate * AUDIO_CHUNK_MS) / 1000); let pending = new Float32Array(0); const send = (samples: Float32Array) => { const chunk = new Float32Array(samples.length); chunk.set(samples); sendRaw(chunk.buffer); }; return { append(samples: Float32Array) { const combined = new Float32Array(pending.length + samples.length); combined.set(pending); combined.set(samples, pending.length); let offset = 0; while (combined.length - offset >= chunkSamples) { send(combined.subarray(offset, offset + chunkSamples)); offset += chunkSamples; } pending = combined.slice(offset); }, flush() { if (pending.length === 0) return; send(pending); pending = new Float32Array(0); }, }; } // ============================================================================= // TTS Generate — Play with