From 42165028684d9cb2fe06304c15775796bf036216 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Thu, 2 Apr 2026 21:44:54 -0700 Subject: [PATCH] =?UTF-8?q?feat(voice):=20=E2=9C=A8=20Update=20voice=20pro?= =?UTF-8?q?tocol=20implementation=20for=20new=20encoding/decoding=20suppor?= =?UTF-8?q?t=20and=20improved=20audio=20quality?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- @packages/companion-client/src/voice/binary-protocol.ts | 7 +++++-- @packages/companion-client/src/voice/voice-client.ts | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/@packages/companion-client/src/voice/binary-protocol.ts b/@packages/companion-client/src/voice/binary-protocol.ts index 117c055..9d957d0 100644 --- a/@packages/companion-client/src/voice/binary-protocol.ts +++ b/@packages/companion-client/src/voice/binary-protocol.ts @@ -17,8 +17,11 @@ export function encodeUpstreamFrame(frame: AudioUpstreamFrame): ArrayBuffer { view.setUint8(0, UPSTREAM_FRAME_TYPE); view.setUint32(1, frame.seq, false); // big-endian - const dst = new Int16Array(buffer, UPSTREAM_HEADER_BYTES); - dst.set(frame.pcm); + // Int16Array requires 2-byte-aligned offsets; UPSTREAM_HEADER_BYTES=5 is odd. + // Copy PCM bytes via Uint8Array instead. + new Uint8Array(buffer, UPSTREAM_HEADER_BYTES).set( + new Uint8Array(frame.pcm.buffer, frame.pcm.byteOffset, frame.pcm.byteLength), + ); return buffer; } diff --git a/@packages/companion-client/src/voice/voice-client.ts b/@packages/companion-client/src/voice/voice-client.ts index 223f51b..39624da 100644 --- a/@packages/companion-client/src/voice/voice-client.ts +++ b/@packages/companion-client/src/voice/voice-client.ts @@ -76,7 +76,8 @@ export class VoiceClient { const socket = io(`${baseUrl}/voice`, { query: { session_id: this.config.sessionId }, - transports: ['websocket'], + // Default transports: polling first (works through HTTP proxies like Vite), + // then upgrades to WebSocket automatically. reconnection: this.config.reconnect, reconnectionAttempts: this.config.maxReconnectAttempts, reconnectionDelay: this.config.reconnectDelay,