Add audio capture engine template system with multi-backend support
Introduces an engine+template abstraction for audio capture, mirroring the existing screen capture engine pattern. This enables multiple audio backends (WASAPI for Windows, sounddevice for cross-platform) with per-source engine configuration via reusable templates. Backend: - AudioCaptureEngine ABC with WasapiEngine and SounddeviceEngine implementations - AudioEngineRegistry for engine discovery and factory creation - AudioAnalyzer class decouples FFT/RMS/beat analysis from engine-specific capture - ManagedAudioStream wraps engine stream + analyzer in background thread - AudioCaptureTemplate model and AudioTemplateStore with JSON CRUD - AudioCaptureManager keyed by (engine_type, device_index, is_loopback) - Auto-migration: default template created on startup, assigned to existing sources - Full REST API: CRUD for audio templates + engine listing with availability flags - audio_template_id added to MultichannelAudioSource model and API schemas Frontend: - Audio template cards in Streams > Audio tab with engine badge and config details - Audio template editor modal with engine selector and dynamic config fields - Audio template dropdown in multichannel audio source editor - Template name crosslink badge on multichannel audio source cards - Confirm modal z-index fix (always stacks above editor modals) - i18n keys for EN and RU Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -789,6 +789,30 @@
|
||||
"audio_source.deleted": "Аудиоисточник удалён",
|
||||
"audio_source.delete.confirm": "Удалить этот аудиоисточник?",
|
||||
"audio_source.error.name_required": "Введите название",
|
||||
"audio_source.audio_template": "Аудиошаблон:",
|
||||
"audio_source.audio_template.hint": "Шаблон аудиозахвата определяет, какой движок и настройки использовать для этого устройства",
|
||||
|
||||
"audio_template.title": "🎵 Аудиошаблоны",
|
||||
"audio_template.add": "Добавить аудиошаблон",
|
||||
"audio_template.edit": "Редактировать аудиошаблон",
|
||||
"audio_template.name": "Название шаблона:",
|
||||
"audio_template.name.placeholder": "Мой аудиошаблон",
|
||||
"audio_template.description.label": "Описание (необязательно):",
|
||||
"audio_template.description.placeholder": "Опишите этот шаблон...",
|
||||
"audio_template.engine": "Аудиодвижок:",
|
||||
"audio_template.engine.hint": "Выберите движок аудиозахвата. WASAPI — только Windows с поддержкой loopback. Sounddevice — кроссплатформенный.",
|
||||
"audio_template.engine.unavailable": "Недоступен",
|
||||
"audio_template.engine.unavailable.hint": "Этот движок недоступен в вашей системе",
|
||||
"audio_template.config": "Конфигурация",
|
||||
"audio_template.config.show": "Показать конфигурацию",
|
||||
"audio_template.created": "Аудиошаблон создан",
|
||||
"audio_template.updated": "Аудиошаблон обновлён",
|
||||
"audio_template.deleted": "Аудиошаблон удалён",
|
||||
"audio_template.delete.confirm": "Удалить этот аудиошаблон?",
|
||||
"audio_template.error.load": "Не удалось загрузить аудиошаблоны",
|
||||
"audio_template.error.engines": "Не удалось загрузить аудиодвижки",
|
||||
"audio_template.error.required": "Пожалуйста, заполните все обязательные поля",
|
||||
"audio_template.error.delete": "Не удалось удалить аудиошаблон",
|
||||
|
||||
"streams.group.value": "Источники значений",
|
||||
"value_source.group.title": "🔢 Источники значений",
|
||||
|
||||
Reference in New Issue
Block a user