fix: Web Client — правильное масштабирование RMS

Проблема:
- При RMS=0 столбики 30% (слишком много)
- При RMS=0.3 столбики 2% (слишком мало)

Решение:
- Масштаб: RMS 0 → 10%, RMS 0.15 → 100%
- Формула: avg = 10 + (RMS / 0.15) * 90
- Clamp 10-100
- Симуляция тишины: 10 + random*5 (маленькие колебания)

Теперь:
- Тишина (RMS=0) → 10% высоты
- Говор (RMS=0.1) → ~70% высоты
- Крик (RMS=0.15+) → 100% высоты
This commit is contained in:
2026-05-21 19:47:20 +03:00
parent 6b9c7376b9
commit c17743d829
+7 -7
View File
@@ -600,18 +600,18 @@
return;
}
// Берём RMS от satellite вместо локального микрофона
let avg = currentRms * 100; // Конвертируем 0.0-1.0 в 0-100
// Масштабирование RMS: 0 → 10%, 0.15 → 100%
// Формула: avg = 10 + (RMS / 0.15) * 90
let avg = 10 + (currentRms / 0.15) * 90;
avg = Math.min(100, Math.max(10, avg)); // Clamp 10-100
// Сглаживание как в оригинале
rmsSmoothed = rmsSmoothed * 0.7 + avg * 0.3;
avg = rmsSmoothed;
// Если satellite RMS недоступен – делаем «живую» симуляцию
if(avg < 1) {
avg = 12 + Math.random() * 25;
if(stateText.innerText.includes('LISTEN') || stateText.innerText.includes('SPEAK'))
avg = 45 + Math.random() * 55;
// Если satellite RMS недоступен (совсем тихо) – симуляция
if(currentRms < 0.001) {
avg = 10 + Math.random() * 5; // Маленькие колебания на базовом уровне
}
// Отрисовка 42 неоновых столбцов (баров)