// wakewords/audioRoutingConfig.ts export type PreferredAudioInput = | 'bluetoothHighQualityMic' | 'builtInMic' | 'none'; export type RouteConfigEntry = { category: 'playAndRecord' | 'record' | 'soloAmbient' | 'ambient' | 'playback'; mode: 'default' | 'measurement' | 'voiceChat' | 'videoRecording' | 'gameChat'; options: ( | 'mixWithOthers' | 'duckOthers' | 'allowBluetooth' | 'allowBluetoothHFP' | 'allowBluetoothA2DP' | 'bluetoothHighQualityRecording' | 'allowAirPlay' | 'defaultToSpeaker' | 'overrideMutedMicrophoneInterruption' )[]; /** First input policy to try. HD Bluetooth requires iOS 26, mode=default, and bluetoothHighQualityRecording. */ preferredInput: PreferredAudioInput; /** * Forced fallback after an HD Bluetooth request fails. builtInMic switches * to phone-mic + A2DP; none switches to ordinary headset HFP. */ forceFallback?: PreferredAudioInput; /** Lowercase JSON alias for forceFallback. Prefer forceFallback in TypeScript. */ forcefallback?: PreferredAudioInput; /** Backward-compatible alias for forceFallback. */ preferredInputFallback?: PreferredAudioInput; /** Additional forced fallback after forceFallback. */ forceFallback1?: PreferredAudioInput; /** Lowercase JSON alias for forceFallback1. */ forcefallback1?: PreferredAudioInput; /** Backward-compatible alias for forceFallback1. */ preferredInputFallback1?: PreferredAudioInput; /** Final forced fallback. */ forceFallback2?: PreferredAudioInput; /** Lowercase JSON alias for forceFallback2. */ forcefallback2?: PreferredAudioInput; /** Backward-compatible alias for forceFallback2. */ preferredInputFallback2?: PreferredAudioInput; }; export type AudioRoutingConfig = { /** Wake-word-only AEC preferences for regular capture and physical TTS playback. */ WakewordAEC?: { regular: boolean; duringTTS: boolean; }; default: RouteConfigEntry; byOutputPort: { carAudio?: RouteConfigEntry; // .carAudio (CarPlay) builtInReceiver?: RouteConfigEntry; // .builtInReceiver (earpiece) builtInSpeaker?: RouteConfigEntry; // .builtInSpeaker bluetoothA2DP?: RouteConfigEntry; // .bluetoothA2DP bluetoothHFP?: RouteConfigEntry; // .bluetoothHFP headphones?: RouteConfigEntry; // .headphones // add more as needed }; /** Temporary wake-word sensitivity used only while physical TTS audio plays. */ wakeWordDuringTTS?: { threshold: number; buffer_cnt: number; }; };