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:
45
CONTEXT.md
45
CONTEXT.md
@@ -79,6 +79,51 @@
|
||||
- Производительность: кэширование, асинхронность, lazy loading
|
||||
- **Статус**: PLANNED (документация готова в ROADMAP.md)
|
||||
|
||||
**🎤 PLANNED: Прослушивание голосовых сообщений (Фаза 12)**
|
||||
- **Описание**: Воспроизведение голосовых сообщений прямо из TUI с визуальным feedback
|
||||
- **Технологии**:
|
||||
- rodio 0.17 - Pure Rust аудио библиотека (кроссплатформенная)
|
||||
- TDLib downloadFile API для загрузки OGG файлов
|
||||
- Поддержка платформ: Linux (ALSA/PulseAudio), macOS (CoreAudio), Windows (WASAPI)
|
||||
- Fallback на системный плеер (mpv, ffplay) если rodio не работает
|
||||
- **Архитектура**:
|
||||
- `src/audio/` - новый модуль (player, cache, state)
|
||||
- `AudioPlayer` - управление воспроизведением (play, pause, stop, seek, volume)
|
||||
- `VoiceCache` - LRU кэш загруженных файлов (лимит 100 MB)
|
||||
- `PlaybackState` - текущее состояние (status, position, duration, volume)
|
||||
- Асинхронная загрузка в фоне (не блокирует UI)
|
||||
- **UX фичи**:
|
||||
- Progress bar в сообщении (▶ ████████░░░░░░ 0:08 / 0:15)
|
||||
- Статусы: ▶ (playing), ⏸ (paused), ⏹ (stopped), ⏳ (loading)
|
||||
- Хоткеи: Space (play/pause), s (stop), ←/→ (seek ±5s), ↑/↓ (volume)
|
||||
- Waveform визуализация (опционально, из Telegram API)
|
||||
- Автоматическая остановка при закрытии чата
|
||||
- Индикатор загрузки с процентами
|
||||
- **Конфигурация** (config.toml):
|
||||
- enabled: bool - включить/отключить аудио
|
||||
- default_volume: f32 - громкость (0.0 - 1.0)
|
||||
- seek_step_seconds: i32 - шаг перемотки (5 сек)
|
||||
- autoplay: bool - автовоспроизведение
|
||||
- cache_size_mb: usize - размер кэша
|
||||
- show_waveform: bool - показывать waveform
|
||||
- system_player_fallback: bool - использовать системный плеер
|
||||
- system_player: String - команда плеера (mpv, ffplay)
|
||||
- **План реализации**:
|
||||
- Этап 1: Инфраструктура аудио (модуль audio, AudioPlayer, VoiceCache)
|
||||
- Этап 2: Интеграция с TDLib (VoiceNoteInfo, download_voice_note)
|
||||
- Этап 3: UI для воспроизведения (progress bar, индикаторы, footer)
|
||||
- Этап 4: Хоткеи для управления (play/pause, stop, seek, volume)
|
||||
- Этап 5: Конфигурация и UX (AudioConfig, ticker для обновления)
|
||||
- Этап 6: Обработка ошибок и fallback (системный плеер)
|
||||
- Этап 7: Дополнительные улучшения (префетчинг, анимация)
|
||||
- **Ожидаемый результат**:
|
||||
- Голосовые воспроизводятся с визуальным индикатором прогресса
|
||||
- Полный контроль: play, pause, stop, seek, volume
|
||||
- Кэширование загруженных файлов
|
||||
- Graceful fallback на системный плеер
|
||||
- Кроссплатформенность (Linux, macOS, Windows)
|
||||
- **Статус**: PLANNED (документация готова в ROADMAP.md)
|
||||
|
||||
**🐛 FIX: HashMap keybindings коллизии - дубликаты клавиш**
|
||||
- **Проблема #1**: `KeyCode::Enter` был привязан к 3 командам (OpenChat, SelectMessage, SubmitMessage)
|
||||
- **Проблема #2**: `KeyCode::Up` был привязан к 2 командам (MoveUp, EditMessage)
|
||||
|
||||
Reference in New Issue
Block a user