From 8e868894cbcaf421c263f3555af4d29bef653420 Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 5 Sep 2026 19:35:21 +0200 Subject: feat: piper now not a subprocess, cache system for TTS --- AGENTS.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'AGENTS.md') diff --git a/AGENTS.md b/AGENTS.md index a074a43..8352e0e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -23,7 +23,7 @@ src/ ├── events/mod.rs — handle_ready, handle_voice_state_update, handle_message ├── openrouter/mod.rs — OpenRouterClient (chat, chat_with_history) ├── tasks/mod.rs — cron_scheduler_loop (30s polling, stub exec bodies) -├── tts.rs — synthesize(): Piper subprocess → Google TTS fallback +├── tts.rs — TtsState (piper-rs in-process, DashMap cache, pre-gen, resampler, WAV encoder) └── voice/mod.rs — VoiceManager (connect, disconnect, get_call), mp3_to_input ``` @@ -35,6 +35,10 @@ src/ - **Shared state**: `Data` struct in `main.rs` — passed as poise `user_data` - **Commands**: each submodule exports `pub fn commands() -> Vec>` - **Temp path**: always use `crate::config::TEMP_PATH` (resolves to `/tmp/senator_sperma`) +- **TTS**: piper-rs in-process (no subprocess). `TtsState` in `Data` holds `OnceLock>` + `DashMap` cache. Synthesize via `data.tts.synthesize(text)`. Pre-generates 6 event phrases per user on first voice event. No Google TTS fallback. + +## Build +- `build.rs` — compiles C stubs for espeak-rs-sys missing sonic/audio_object symbols ## Stubs to Fill (see COMPARISON.md) - `commands/music.rs` — `/play` is placeholder -- cgit v1.2.3