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:
@@ -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 неоновых столбцов (баров)
|
||||
|
||||
Reference in New Issue
Block a user