--- title: "3DARCH-FT-22 — Speak with push-to-talk and spatial cues" description: "Enable a participant to hold a voice control, grant microphone access, stream speech to the current-floor context, see who is speaking, and hear volume reflect speaker distance." --- # Speak with push-to-talk and spatial cues | Feature | Parent Epic | Delivery status | Status source | Owner | Approved for Solution | |---|---|---|---|---|---| | `3DARCH-FT-22` | [3DARCH-EP-5 — Communicate in Spatial Context](../../3darch-ep-5.md) | `IN_BACKLOG` | `EXACT` | 3D Architecture Wizzard team | No | ## Description Enable a participant to hold a voice control, grant microphone access, stream speech to the current-floor context, see who is speaking, and hear volume reflect speaker distance. ## User or operator problem Participants need hands-busy voice communication with visible speaking state and spatial listening cues. ## Expected value Adds immediate spoken coordination while preserving floor isolation and distance-aware feedback. ## Scope Includes push-to-talk capture, permission feedback, current-floor relay, speaking indicators, distance-based volume, and explicit playback recovery. ### Exclusions - Direct messaging, persistence, history, recording, transcription, and cross-floor communication are excluded. ## Acceptance outcomes - [ ] Voice capture starts only while the configured push-to-talk action is active. - [ ] Microphone denial or unsupported capture produces clear user feedback. - [ ] Voice traffic remains isolated to the current floor. - [ ] A speaking indicator identifies active speakers. - [ ] Playback volume decreases to silence outside the approved proximity range. - [ ] Playback can recover after browser autoplay restrictions through an explicit user action. ## Dependencies - [3DARCH-FT-18 — See who shares the current floor](../../3darch-ep-4/features/3darch-ft-18.md) - [3DARCH-FT-20 — Follow coworker movement and activity in real time](../../3darch-ep-4/features/3darch-ft-20.md) ## Risks - Voice is relayed floor-wide, does not reach silence outside the nominal range, and lacks complete autoplay recovery. ## Human approval Linas approved this Feature for documentation on 2026-09-02T10:40:43.220Z. It is **not Approved for Solution** and has no implementation approval. - [Documentation decision](https://discord.com/channels/1518726359512387766/1543925247361814568/1544658325738885201) ## Delivery status evidence The Feature was separately registered at `IN_BACKLOG` as an accepted catalogue boundary. This records backlog retention, not design or delivery progress. - Event: Catalogue registration - Actor and authority: Linas — Human project team member - Reason: The Feature catalogue was accepted for governed documentation and retained in the backlog. - [Status evidence](https://discord.com/channels/1518726359512387766/1543925247361814568/1544658325738885201) ## Architecture traceability - Requirements: none derived. - Readiness: Not started. Architecture solution work must not begin until a separate human **Approved for Solution** decision is recorded. ## Tasks [Review the Tasks group](./3darch-ft-22/tasks.md). No canonical implementation Tasks have been defined. ## Original source - [Discord – Scope – Linas: original Feature request](https://discord.com/channels/1518726359512387766/1543925247361814568/1544647879111483562) - [Discord – Scope – Linas: proceed with documented mapping](https://discord.com/channels/1518726359512387766/1543925247361814568/1544658325738885201) ### Legacy implementation evidence The Feature boundary was mined from legacy revision `c0ced47ecaf4426f47e5c2e4868677f7144b951a`. - [`apps/nebula/src/hooks/useVoiceChat.ts`](https://gitea.lego-cloud.eu/corp-v1-3darch-legacy/corp-v1-3darch-legacy/src/commit/c0ced47ecaf4426f47e5c2e4868677f7144b951a/apps/nebula/src/hooks/useVoiceChat.ts) - [`apps/nebula/src/components/VoiceIndicator.tsx`](https://gitea.lego-cloud.eu/corp-v1-3darch-legacy/corp-v1-3darch-legacy/src/commit/c0ced47ecaf4426f47e5c2e4868677f7144b951a/apps/nebula/src/components/VoiceIndicator.tsx) - [`apps/singularity/src/socket-server/voice-handler.ts`](https://gitea.lego-cloud.eu/corp-v1-3darch-legacy/corp-v1-3darch-legacy/src/commit/c0ced47ecaf4426f47e5c2e4868677f7144b951a/apps/singularity/src/socket-server/voice-handler.ts) - [`packages/utils/constants/src/chat.ts`](https://gitea.lego-cloud.eu/corp-v1-3darch-legacy/corp-v1-3darch-legacy/src/commit/c0ced47ecaf4426f47e5c2e4868677f7144b951a/packages/utils/constants/src/chat.ts) - [`packages/utils/constants/src/controls.ts`](https://gitea.lego-cloud.eu/corp-v1-3darch-legacy/corp-v1-3darch-legacy/src/commit/c0ced47ecaf4426f47e5c2e4868677f7144b951a/packages/utils/constants/src/controls.ts)