// Speak text using a reference WAV for voice cloning. // The server reads the audio_prompt path from its own filesystem. // Usage: node voice-clone.mjs /path/to/reference.wav "Text to speak" const PORT = process.env.TTS_PORT ?? '11500' const audio_prompt = process.argv[2] const text = process.argv[3] ?? 'Hello, this is a cloned voice.' if (!audio_prompt) { console.error('usage: node voice-clone.mjs /path/to/reference.wav "text"') process.exit(1) } const ws = new WebSocket(`ws://localhost:${PORT}`) ws.addEventListener('open', () => { ws.send(JSON.stringify({ type: 'speak', text, audio_prompt })) }) ws.addEventListener('message', ({ data }) => { const msg = JSON.parse(data) if (msg.event === 'finished' || msg.event === 'aborted' || msg.event === 'error') { ws.close() } }) ws.addEventListener('error', (e) => { console.error('error:', e.message) process.exit(1) })