{'heading': 'How Length, Guide, and Sound controls work in Practice Details', 'summary': "Before tapping `Begin` on any guided practice (`PracticeEntryView`), you can customize three settings: `Length` (session duration), `Guide` (`Guided voice` vs. `No voice`), and `Sound` (bundled ambient track or `No ambience`). To prevent a timer from cutting off spoken instructions mid-sentence, the app calculates `computedRuntimeSeconds` from the script's word count, speaking pace (`wordsPerMinute`), and `holdSeconds`, automatically hiding any duration option shorter than the full script.", 'bullets': ['Script-safe duration filter: `availableDurationOptions` keeps only durations `>= computedRuntimeSeconds`; when shorter options are hidden, a note explains *"Options shorter than the spoken practice were hidden."*', 'Extra silent holds on longer durations: Choosing a longer `Length` button gives you more spacious quiet intervals between spoken cues.', 'Voice toggle (`Guide`): Switch between `Guided voice` (recorded narration) and `No voice` (visual cues and timer only).', "Bundled ambience (`Sound`): Keep the practice's default ambient track, switch to another bundled track, or select `No ambience` for pure silence."]}
Before tapping `Begin` on any guided practice (`PracticeEntryView`), you can customize three settings: `Length` (session duration), `Guide` (`Guided voice` vs. `No voice`), and `Sound` (bundled ambient track or `No ambience`). To prevent a timer from cutting off spoken instructions mid-sentence, the app calculates `computedRuntimeSeconds` from the script's word count, speaking pace (`wordsPerMinute`), and `holdSeconds`, automatically hiding any duration option shorter than the full script.
Script-safe duration filter: `availableDurationOptions` keeps only durations `>= computedRuntimeSeconds`; when shorter options are hidden, a note explains *"Options shorter than the spoken practice were hidden."*
Extra silent holds on longer durations: Choosing a longer `Length` button gives you more spacious quiet intervals between spoken cues.
Voice toggle (`Guide`): Switch between `Guided voice` (recorded narration) and `No voice` (visual cues and timer only).
Bundled ambience (`Sound`): Keep the practice's default ambient track, switch to another bundled track, or select `No ambience` for pure silence.
Switching Between "Guided Voice" and "No Voice"
Right below `Length`, the `Guide — Voice guidance` section lets you choose how the script is delivered. When `PracticeAudioAssetResolver.hasCompleteRecordedNarration(practiceSlug:cueCount:)` confirms that all recorded narration cues are bundled for that practice, two buttons appear: `Guided voice` (`.recorded`) and `No voice` (`.off`).
Using `Guided voice` is ideal when learning a new breathing ratio, body scan, or visualization so your eyes can stay closed while spoken cues mark each transition. Once you know the technique by heart—or when you want quiet self-paced concentration—tapping `No voice` silences spoken narration while still running the player timer, cue progression, and your chosen ambient sound.
- `Guided voice`: Plays the recorded human voice cues synchronized to each `PracticeCue` in the script.
- `No voice`: Mutes spoken narration so you can practice silently with the timer and optional ambient sound.
- Offline reliability: All voice assets and script cues are bundled inside the app for offline playback.
Frequently Asked Questions
Why does a practice show "Options shorter than the spoken practice were hidden" under Length?
That message appears whenever `practice.computedRuntimeSeconds > practice.durationSeconds`, meaning the spoken script plus authored holds is longer than a shorter preset duration, so the app hides the too-short button to prevent cutting off the instructions.
Does choosing a longer Length make the narrator speak more slowly?
No. Recorded voice cues play at their natural recorded cadence; choosing a longer `Length` extends the quiet holding intervals between spoken cues.
Can I use a practice as a silent timer and still have it recorded in Practice History?
Yes. Set `Guide` to `No voice` and `Sound` to `No ambience`, choose your `Length`, and tap `Begin`—your session will run silently and log to `Practice History` when finished.





