Add value source test modal, auto-gain, brightness always-show, shared value streams

- Add real-time value source test: WebSocket endpoint streams get_value() at
  ~20Hz, frontend renders scrolling time-series chart with min/max/current stats
- Add auto-gain for audio value sources: rolling peak normalization with slow
  decay, sensitivity range increased to 0.1-20.0
- Always show brightness overlay on LED preview when brightness source is set
- Refactor ValueStreamManager to shared ref-counted streams (value streams
  produce scalars, not LED-count-dependent, so sharing is correct)
- Simplify acquire/release API: remove consumer_id parameter since streams
  are no longer consumer-dependent

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-26 15:48:45 +03:00
parent a164abe774
commit 88b3ecd5e1
18 changed files with 477 additions and 56 deletions

View File

@@ -862,6 +862,9 @@
"value_source.mode.rms": "RMS (Volume)",
"value_source.mode.peak": "Peak",
"value_source.mode.beat": "Beat",
"value_source.auto_gain": "Auto Gain:",
"value_source.auto_gain.hint": "Automatically normalize audio levels so output uses the full range, regardless of input volume",
"value_source.auto_gain.enable": "Enable auto-gain",
"value_source.sensitivity": "Sensitivity:",
"value_source.sensitivity.hint": "Gain multiplier for the audio signal (higher = more reactive)",
"value_source.smoothing": "Smoothing:",
@@ -893,6 +896,13 @@
"value_source.deleted": "Value source deleted",
"value_source.delete.confirm": "Are you sure you want to delete this value source?",
"value_source.error.name_required": "Please enter a name",
"value_source.test": "Test",
"value_source.test.title": "Test Value Source",
"value_source.test.connecting": "Connecting...",
"value_source.test.error": "Failed to connect",
"value_source.test.current": "Current",
"value_source.test.min": "Min",
"value_source.test.max": "Max",
"targets.brightness_vs": "Brightness Source:",
"targets.brightness_vs.hint": "Optional value source that dynamically controls brightness each frame (overrides device brightness)",
"targets.brightness_vs.none": "None (device brightness)",

View File

@@ -862,6 +862,9 @@
"value_source.mode.rms": "RMS (Громкость)",
"value_source.mode.peak": "Пик",
"value_source.mode.beat": "Бит",
"value_source.auto_gain": "Авто-усиление:",
"value_source.auto_gain.hint": "Автоматически нормализует уровни звука, чтобы выходное значение использовало полный диапазон независимо от громкости входного сигнала",
"value_source.auto_gain.enable": "Включить авто-усиление",
"value_source.sensitivity": "Чувствительность:",
"value_source.sensitivity.hint": "Множитель усиления аудиосигнала (выше = более реактивный)",
"value_source.smoothing": "Сглаживание:",
@@ -893,6 +896,13 @@
"value_source.deleted": "Источник значений удалён",
"value_source.delete.confirm": "Удалить этот источник значений?",
"value_source.error.name_required": "Введите название",
"value_source.test": "Тест",
"value_source.test.title": "Тест источника значений",
"value_source.test.connecting": "Подключение...",
"value_source.test.error": "Не удалось подключиться",
"value_source.test.current": "Текущее",
"value_source.test.min": "Мин",
"value_source.test.max": "Макс",
"targets.brightness_vs": "Источник яркости:",
"targets.brightness_vs.hint": "Необязательный источник значений для динамического управления яркостью каждый кадр (переопределяет яркость устройства)",
"targets.brightness_vs.none": "Нет (яркость устройства)",

View File

@@ -862,6 +862,9 @@
"value_source.mode.rms": "RMS音量",
"value_source.mode.peak": "峰值",
"value_source.mode.beat": "节拍",
"value_source.auto_gain": "自动增益:",
"value_source.auto_gain.hint": "自动归一化音频电平,使输出使用完整范围,无论输入音量大小",
"value_source.auto_gain.enable": "启用自动增益",
"value_source.sensitivity": "灵敏度:",
"value_source.sensitivity.hint": "音频信号的增益倍数(越高反应越灵敏)",
"value_source.smoothing": "平滑:",
@@ -893,6 +896,13 @@
"value_source.deleted": "值源已删除",
"value_source.delete.confirm": "确定要删除此值源吗?",
"value_source.error.name_required": "请输入名称",
"value_source.test": "测试",
"value_source.test.title": "测试值源",
"value_source.test.connecting": "连接中...",
"value_source.test.error": "连接失败",
"value_source.test.current": "当前",
"value_source.test.min": "最小",
"value_source.test.max": "最大",
"targets.brightness_vs": "亮度源:",
"targets.brightness_vs.hint": "可选的值源,每帧动态控制亮度(覆盖设备亮度)",
"targets.brightness_vs.none": "无(设备亮度)",