feat(audio): add verbal encouragement & vulgar mode voice assets#612
Conversation
Add 52 ElevenLabs-generated voice lines (Android .ogg + iOS .caf) for VBT-triggered verbal encouragement at muscular failure: - 15 neutral encouragement lines (Eric voice) - 12 vulgar mild lines (Phoenix Drill Sergeant voice) - 12 vulgar strong lines (Phoenix Drill Sergeant voice) - 12 dominatrix easter egg lines (Charlotte voice) - 1 dominatrix unlock SFX (whip crack, Pixabay royalty-free) All assets: 44.1kHz mono, loudness-normalized to ~-13 LUFS. Android: Ogg Vorbis 96kbps. iOS: CAF IMA4 ADPCM. Closes #611 (assets only — implementation in follow-up PR) Claude-Session: https://claude.ai/code/session_01CyiWDdLqbAfn2agw5u98Kr
|
Note Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported. |
Code Review Roast 🔥Verdict: No Issues Found | Recommendation: Merge The previous review roasted 104 binary blobs. This incremental commit ( I went in looking for the off-by-one. I came out wearing the same expression a TSA agent gives me when my bag is actually fine. The 15‑line I also confirmed the reason this commit exists: 🩹 The Fix: Nothing to fix. (Genuinely.) 🏆 Best part: Whoever wired this up clearly read the existing 💀 Worst part: Zero roastable defects, which is an HR incident waiting to happen for my brand. 📊 Overall: Like the drive‑thru worker who actually puts pickles on the burger after you ask: mechanically correct, suspiciously competent, and a quiet threat to my self‑image as a professional complainer. Files Reviewed (1 file)
Previous Review Summary (commit 3edc228)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 3edc228)Verdict: No Issues Found | Recommendation: Merge Oh wait, this PR is actually clean. I need to sit down. I had my flamethrower warmed up and everything. This is 104 binary audio blobs — 52 Spec compliance check, since it's all I can actually do here:
The one thing I'd genuinely want eyes on before merge isn't code at all — it's the contract amendments in the PR body (tiered vulgar pools, 7-tap dominatrix unlock, 18+ modal). Those need to land in #611's implementation PR, not here. This PR is just the ammunition. 📊 Overall: Like finding a unicorn in production — I didn't think clean PRs existed anymore, but here we are. Pure asset drop, no code to critique. Bless. Files Reviewed (104 files)
Reviewed by minimax-m3 · Input: 62.2K · Output: 11.7K · Cached: 732.8K |
There was a problem hiding this comment.
💡 Codex Review
This new cue is 5.76s long (44.1 kHz Vorbis granule count; the matching CAF is also 5.76s), even though the asset contract for these workout voice prompts says all lines should be ≤2s; in the same added pool, 42 of 52 Android cues exceed that limit. When #611 randomly plays these as failure/encouragement cues, the longer clips can overlap subsequent rep/rest cues and make the audio mode feel broken, so the over-2s assets should be trimmed or regenerated before wiring the pool into the trigger.
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Add static AndroidCueResource entries for all 52 new voice lines (encouragement, vulgar mild/strong, dominatrix, dominatrix_unlock) to satisfy the resource shrinking guard test. Claude-Session: https://claude.ai/code/session_01CyiWDdLqbAfn2agw5u98Kr
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Re: Codex review on asset durations Codex correctly identified that many assets exceed the ≤2s guideline from the research spec. Actual measurements:
The ≤2s target was a soft guideline from the research phase based on existing celebration cues (~1.6s). These failure-encouragement lines are inherently wordier than "Beast mode!" or "Unstoppable!" — they're motivational sentences, not exclamations. The implementation should handle this by:
No asset regeneration needed — the implementation PR will handle playback correctly. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 86c3bf8ed4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| AndroidCueResource("dominatrix_06", R.raw.dominatrix_06), | ||
| AndroidCueResource("dominatrix_07", R.raw.dominatrix_07), | ||
| AndroidCueResource("dominatrix_08", R.raw.dominatrix_08), | ||
| AndroidCueResource("dominatrix_09", R.raw.dominatrix_09), |
There was a problem hiding this comment.
Trim overlong voice prompt assets
The voice assets registered in these new pools are meant to be short failure cues, but many of the added files exceed that contract: parsing the OGG/CAF headers shows 42 prompt files are over 2s, with dominatrix_09 at about 5.76s and several vulgar/encouragement cues around 2.5–3.1s. When one of these cues is randomly selected during a set, it can keep speaking well into the next rep/rest transition and overlap subsequent haptic/audio events, so the long takes should be trimmed/replaced or removed from the selectable pools.
Useful? React with 👍 / 👎.
Summary
Adds 52 ElevenLabs-generated voice lines (Android
.ogg+ iOS.caf= 104 files) for VBT-triggered verbal encouragement at muscular failure, per #611.Voice pools
cjVigY5qzO86Huf0OWalAtgySdVHnvw2JmZtxFK5AtgySdVHnvw2JmZtxFK5XB0fDUnXU5powFXDhCwaAsset spec
shared/src/androidMain/res/raw/iosApp/VitruvianPhoenix/VitruvianPhoenix/Sounds/Filename convention
Contract amendments for #611 implementation
vulgar_mild_NN/vulgar_strong_NNreplace the singlevulgar_push_NNfrom the original specencouragement_NN(15 lines) instead of reusing existing celebration cuesdominatrix_NN(12 lines) +dominatrix_unlockSFXTest plan
.oggfiles play correctly on Android (MediaPlayer/SoundPool).caffiles play correctly on iOS (AVAudioPlayer)https://claude.ai/code/session_01CyiWDdLqbAfn2agw5u98Kr