app
Adom TTS: Text to Speech
Public Made by Adomby adom
Adom's shared voice service. Reads your AI's answers back to you while you drive, and renders perfectly-timed voiceover tracks for your demo videos, so you never record your own voice.
← Commit history
v1.9.45 — completes #3: status no longer claims playback is human-only (names 'adom-tts control play'), UNCONFIRMED distinguishes PAUSED from buffering, and the user skill teaches control in the canonical hands-free pattern
5 files changed
+9−25
Cargo.lock+1−1@@ -4,7 +4,7 @@ version = 4 [[package]] name = "adom-tts"-version = "1.9.44"+version = "1.9.45" dependencies = [ "anyhow", "base64",
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-tts"-version = "1.9.44"+version = "1.9.45" edition = "2021" license = "AGPL-3.0-or-later" repository = "https://github.com/adom-inc/adom-tts"
VERSION+1−1@@ -1 +1 @@-1.9.44+1.9.45
page.json−21@@ -12,7 +12,6 @@ "audio", "demo", "accessibility",- "cli", "open-source", "mit" ],@@ -65,25 +64,5 @@ ], "install": { "binary_name": "adom-tts"- },- "description": "Adom's shared text-to-speech CLI + Playground. Reads your AI answers back to you while driving, and renders perfectly-timed voiceover tracks for demo videos.",- "dependencies": {},- "scripts": {- "install": "./install.sh",- "uninstall": "./uninstall.sh"- },- "needs_sudo": false,- "files": [- "package.json",- "install.sh",- "uninstall.sh",- "bin/adom-tts",- "skills/**",- "completions/**"- ],- "org": "adom",- "author": {- "name": "John Lauer",- "email": "[email protected]" } }
src/play.rs+6−1@@ -247,7 +247,7 @@ pub fn show_status() -> Result<()> { // The HUMAN paused — say so loudly; "now playing" here misled // a reporting thread into thinking its clip vanished. playing_line = format!(- " ⏸ PAUSED BY THE HUMAN{what} at {reached:.0}s / {dur:.0}s — the WHOLE queue is holding.\n # hint: nothing plays until the human presses play (or the player reopens). Do NOT\n # re-send your clip — it is safely queued and will play, in order, on resume.");+ " ⏸ PAUSED{what} at {reached:.0}s / {dur:.0}s — the WHOLE queue is holding.\n # hint: YOU can resume it yourself, no human needed: `adom-tts control play`\n # (also `control pause|replay|toggle`). Do NOT re-send your clip — it is safely\n # queued and will play, in order, on resume. A human pressing play works too."); } else if clip.is_empty() { playing_line = format!(" player up on :{port}; no clip active (starting the next one, or idle)"); } else {@@ -558,6 +558,11 @@ pub fn confirm_playback(clip: &str, since_ms: u64, timeout_secs: u64) -> Result< Some((v, r, d)) => { eprintln!("✗ UNCONFIRMED: \"{clip}\" not confirmed within {timeout_secs}s (latest attempt: verdict={v}, reached {r:.0}s of {d:.0}s; a retry may still be pending)"); }+ None if player_is_paused() => {+ // Never call a human-paused queue "buffered": that reading sent a+ // thread into a 226s wait when one command would have cleared it.+ eprintln!("⏸ UNCONFIRMED: \"{clip}\" has not played because the player is PAUSED (not buffering).");+ } None => { eprintln!("✗ UNCONFIRMED: no playback attempt for \"{clip}\" within {timeout_secs}s (still queued/buffered)."); }