docs: add Phase 12 - voice message playback
Documented new feature for playing voice messages directly from TUI with full playback controls and visual feedback. Documentation Changes: - ROADMAP.md: Added Phase 12 with 7 stages - Stage 1: Audio infrastructure (audio module, AudioPlayer, VoiceCache) - Stage 2: TDLib integration (VoiceNoteInfo, download_voice_note) - Stage 3: UI for playback (progress bar, status indicators, footer) - Stage 4: Hotkeys (play/pause, stop, seek, volume control) - Stage 5: Configuration and UX (AudioConfig, ticker updates) - Stage 6: Error handling and fallback (system player) - Stage 7: Additional improvements (prefetching, animations) - CONTEXT.md: Added PLANNED section for Phase 12 - Technical stack: rodio 0.17, TDLib downloadFile - Platforms: Linux (ALSA/PulseAudio), macOS (CoreAudio), Windows (WASAPI) - Architecture: src/audio/ module with 3 submodules - LRU cache (100 MB limit) - Async loading, ticker for progress updates - Configuration options in config.toml - Fallback to system players (mpv, ffplay) - HOTKEYS.md: Added new hotkeys - `Space` - play/pause (in voice message selection mode) - `s` / `ы` - stop playback - `←` / `→` - seek -5s/+5s (during playback) - `↑` / `↓` - volume +/-10% (during playback) - Added new "Voice Playback" section - Added new "Voice Playback Mode" section - PROJECT_STRUCTURE.md: Added audio/ module documentation - player.rs - AudioPlayer with rodio - cache.rs - VoiceCache for downloaded OGG files - state.rs - PlaybackState (status, position, duration, volume) - Updated dependencies section (rodio 0.17) - Updated App state with audio fields Technical Details: - rodio 0.17 Pure Rust audio library (cross-platform) - OGG Opus support (Telegram voice message format) - Visual progress bar: ▶ ████████░░░░░░ 0:08 / 0:15 - Status indicators: ▶ (playing), ⏸ (paused), ⏹ (stopped), ⏳ (loading) - Smart caching with size limits - Async non-blocking file download - Ticker for smooth progress updates (100ms) - Graceful fallback to system players New Configuration (config.toml): - enabled: bool - enable/disable audio playback - default_volume: f32 - volume (0.0 - 1.0) - seek_step_seconds: i32 - seek step in seconds (default 5) - autoplay: bool - autoplay on selection - cache_size_mb: usize - cache size limit in MB - show_waveform: bool - show waveform visualization - system_player_fallback: bool - use system player fallback - system_player: String - system player command (mpv, ffplay) Status: PLANNED (documentation complete, implementation pending) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,11 @@ tele-tui/
|
||||
│ │ ├── mod.rs
|
||||
│ │ ├── auth.rs
|
||||
│ │ └── main_input.rs
|
||||
│ ├── audio/ # Прослушивание голосовых (PLANNED)
|
||||
│ │ ├── mod.rs # Экспорт публичных типов
|
||||
│ │ ├── player.rs # AudioPlayer на rodio
|
||||
│ │ ├── cache.rs # VoiceCache для OGG файлов
|
||||
│ │ └── state.rs # PlaybackState
|
||||
│ ├── media/ # Работа с изображениями (PLANNED)
|
||||
│ │ ├── mod.rs # Экспорт публичных типов
|
||||
│ │ ├── image_cache.rs # LRU кэш для загруженных изображений
|
||||
@@ -108,6 +113,34 @@ tele-tui/
|
||||
#### state.rs
|
||||
- `AppScreen` enum — текущий экран (Loading, Auth, Main)
|
||||
|
||||
### audio/ — Прослушивание голосовых сообщений (PLANNED - Фаза 12)
|
||||
|
||||
#### player.rs
|
||||
- `AudioPlayer` — управление воспроизведением голосовых сообщений
|
||||
- Использует rodio для кроссплатформенного аудио
|
||||
- API методы: play(), pause(), resume(), stop(), seek(), set_volume()
|
||||
- Обработка OGG Opus файлов (формат голосовых в Telegram)
|
||||
- Отдельный поток для воспроизведения (через rodio Sink)
|
||||
|
||||
#### cache.rs
|
||||
- `VoiceCache` — LRU кэш для загруженных голосовых файлов
|
||||
- Хранение в ~/.cache/tele-tui/voice/
|
||||
- Лимит по размеру (MB) с автоматической очисткой
|
||||
- MAX_VOICE_CACHE_SIZE = 100 MB (настраивается в config)
|
||||
- Проверка существования файла перед воспроизведением
|
||||
|
||||
#### state.rs
|
||||
- `PlaybackState` — текущее состояние воспроизведения
|
||||
- Поля: message_id, status, position, duration, volume
|
||||
- `PlaybackStatus` enum — Stopped, Playing, Paused, Loading
|
||||
- Ticker для обновления позиции (каждые 100ms)
|
||||
|
||||
#### mod.rs
|
||||
- Экспорт публичных типов
|
||||
- `VoiceNoteInfo` struct — метаданные голосового (file_id, duration, waveform)
|
||||
- `AudioConfig` — конфигурация из config.toml
|
||||
- Fallback на системный плеер (mpv, ffplay)
|
||||
|
||||
### media/ — Работа с изображениями (PLANNED - Фаза 11)
|
||||
|
||||
#### image_cache.rs
|
||||
@@ -320,6 +353,11 @@ App {
|
||||
// Drafts
|
||||
drafts: HashMap<i64, String>,
|
||||
|
||||
// Audio (PLANNED - Фаза 12)
|
||||
audio_player: Option<AudioPlayer>,
|
||||
playback_state: Option<PlaybackState>,
|
||||
voice_cache: VoiceCache,
|
||||
|
||||
// Media (PLANNED - Фаза 11)
|
||||
image_loader: ImageLoader,
|
||||
image_protocol: StatefulProtocol, // Terminal capabilities
|
||||
@@ -351,6 +389,9 @@ App {
|
||||
- `crossterm` 0.28 — terminal control
|
||||
- `ratatui-image` 1.0 — отображение изображений в TUI (PLANNED)
|
||||
|
||||
### Audio (PLANNED)
|
||||
- `rodio` 0.17 — Pure Rust аудио библиотека (кроссплатформенная)
|
||||
|
||||
### Media (PLANNED)
|
||||
- `image` — загрузка и обработка изображений
|
||||
- `ratatui-image` — рендеринг в ratatui с поддержкой Sixel/Kitty/iTerm2
|
||||
|
||||
Reference in New Issue
Block a user