# Подавление шума в LiveKit

## Можно ли сделать активное подавление лишних шумов?

**Да.** Есть два уровня:

### 1. Встроенное в браузер (уже включено)

В `LiveKitRoomContent` в `options.audioCaptureDefaults` задано:

- **noiseSuppression: true** — штатное подавление шума через WebRTC (getUserMedia).
- **echoCancellation: true** — подавление эха.

**Плюсы:** без доп. библиотек, почти не нагружает CPU, поддерживается всеми современными браузерами.  
**Минусы:** качество среднее, в шумных условиях может быть недостаточно.

---

### 2. Krisp (AI-шумоподавление)

LiveKit поддерживает **Krisp** через пакет `@livekit/krisp-noise-filter` и хук `useKrispNoiseFilter` из `@livekit/components-react/krisp`.

**Особенности:**

- Работает **только с LiveKit Cloud** (не с self-hosted сервером без интеграции Krisp).
- Обработка на **клиенте** (в браузере), в отдельном потоке (Worker), аудио на внешние серверы не отправляется.
- Подгрузка пакета по требованию (dynamic import при включении фильтра).

**Оценка по производительности (по данным Krisp / LiveKit):**

| Параметр            | Оценка                          |
|---------------------|---------------------------------|
| Размер пакета       | ~12 MB                          |
| Память (RAM)        | ~100 MB                         |
| Обработка кадра     | ~1.5–2 ms на кадр (10 ms аудио) |
| CPU                 | Выше, чем у встроенного в браузер |
| Задержка            | Несколько миллисекунд, обычно незаметна |
| Основной поток      | Не блокируется (Worker/WASM)    |

**Итог по производительности:**

- **Слабые устройства / много вкладок:** возможна дополнительная нагрузка на CPU и память; на средних и сильных ПК обычно приемлемо.
- **Ноутбуки/мобильные:** возможен больший расход батареи при длительном звонке с включённым Krisp.
- **Латентность:** влияние минимально, т.к. обработка на клиенте и в воркере.

---

## Рекомендация

1. **Сейчас:** оставить включённые **noiseSuppression** и **echoCancellation** в `audioCaptureDefaults` — это уже даёт базовое подавление шума без влияния на производительность.
2. **Krisp:** подключать только если:
   - используется **LiveKit Cloud** (или есть договорённость по Krisp для self-hosted);
   - нужен сильный шумоподавитель (фоновые разговоры, улица, офис);
   - готовы к увеличению потребления RAM/CPU и размера загружаемого кода при первом включении фильтра.
3. **Опционально:** сделать Krisp **включаемым по кнопке** (как в примере с `useKrispNoiseFilter`), чтобы пользователь сам решал, когда использовать тяжёлый режим.

Если нужно, могу расписать пошаговое подключение Krisp в нашем проекте (установка пакета, хук, кнопка в UI и проверка поддержки LiveKit Cloud).
