# voice-input-settings.screen S2 settings category — voice + input config. Implements per [brief S §S2](./S-settings-ia.brief.md). Reached from settings-root.screen.md "Voice & input" card. Voice: working. ## Layout (full-screen sheet) ``` ┌─────────────────────────────────────────────────┐ │ ◄ Settings Done │ 56pt ├─────────────────────────────────────────────────┤ │ │ │ ─── Speech-to-text ─── │ │ Recognizer: ● iOS native ○ Cloud (cocotte.io) │ │ Auto-punctuate: ☑ │ │ Auto-stop on silence: [ 2s ▼ ] │ │ │ │ ─── Text-to-speech (Cocotte's voice) ─── │ │ TTS engine: [ system-default ▼ ] │ speech-synthesis MCP picks │ Voice character: [ warm-alto ▼ ] │ per available voices │ Speak action receipts: ○ Always ● High-stakes ○ Off│ │ Speed: ━━●━━ 1.0× │ │ │ │ ─── Mic / push-to-talk ─── │ │ Tap behavior: ● Push-to-talk ○ Tap-and-release │ │ Long-press behavior: [ Cook-mode ▼ ] │ │ Voice trigger word ("hey cocotte"): ☐ enabled │ opt-in │ ⓘ Background mic listening uses more battery. │ │ │ │ ─── Composer input ─── │ │ Default keyboard: [ system ▼ ] │ │ Auto-correct: ☑ Predictive text: ☑ │ │ Markdown shortcuts (`**`, `_`, `>`): ☑ │ │ │ │ ─── Voice register override ─── │ │ ○ Auto (let Cocotte pick) ● Hearth ○ Working ○ Plain│ │ ⓘ Forces all Cocotte copy to one register. │ │ │ └─────────────────────────────────────────────────┘ ``` ## Components | Component | Notes | |---|---| | STT | Recognizer choice (iOS-native = on-device; cloud = `cocotte.io` cloud transcription for hands-busy fidelity). | | TTS | Engine + character + when-to-speak + speed. Hands off to [speech-synthesis MCP](./_engineering-v2-port-map.md). | | Mic / PTT | Push-to-talk vs tap-and-release default; long-press routes to cook-mode or alternate. Voice-trigger opt-in (battery impact disclosed). | | Composer input | Keyboard, autocorrect, predictive, markdown shortcuts. | | Voice register override | Auto / hearth / working / plain. Auto = brief T register-by-surface; override = global. | ## States 1. **Default (iOS-native STT, system TTS)** — privacy-leaning defaults. 2. **Cloud STT selected** — banner: "Audio is sent to cocotte.io for transcription, retained 30s. Override at any time." 3. **Voice trigger on** — banner: "Background mic on. Battery impact: ~5% / day. Disable if unsure." 4. **Voice register forced** — chip on settings-root.screen.md: "Voice override active." 5. **VoiceOver** — same content read; mic settings have additional VoiceOver hints. ## Interactions - **Tap recognizer radio** → confirm sheet on cloud-STT switch (privacy disclosure). - **Tap TTS voice picker** → speech-synthesis MCP voice list. - **Tap "Speak action receipts"** → updates listen-rule for chat-home receipts. - **Tap voice register override** → commits; chat-home banner reflects. ## Edge cases - **No microphone permission** — banner: "Cocotte doesn't have mic access. Grant in iOS Settings to enable voice." - **TTS voice unavailable** (offline) — fallback to system default with chip "voice unavailable, using system." - **Reduced-haptics + mic active** — single-haptic on mic-start; no haptic on each word recognized. ## Related - [Brief S §S2](./S-settings-ia.brief.md) — parent. - [`voice.md`](./00-system-voice.md) — voice register source. - [Brief J](./_engineering-v2-port-map.md) — speech-synthesis MCP. - [Brief X](./X-accessibility.brief.md) — accessibility override layer. - [chat-home.screen.md](./chat-home.screen.md) — composer mic affordance source. ## Out of scope - Per-language STT (English-only at P0). - Custom TTS voice training (defer).