Skip to main content

🎯 Аудиоархитектура Miscord: шумоподавление

Принципы реализации

Ключевые принципы:

  1. Не отправляет аудио в периоды тишины
    • Экономия пропускной способности
    • Полное устранение фоновых шумов при молчании
    • Уменьшение нагрузки на CPU
  2. Собственная реализация WebRTC
    • Обход SDP, ICE, DTLS для нативных приложений
    • Прямое использование webrtc::Call API
    • Минимальный обмен данными (~1000 байт)
  3. Шифрование Salsa20 вместо SRTP
    • Более быстрое шифрование
    • Меньше overhead
  4. Обработка исходных аудиоданных
    • Voice Activity Detection (VAD)
    • Push-to-Talk режим
    • Приоритетные пакеты

Что мы реализовали в Miscord

✅ 1. Не отправляем аудио при молчании

Реализовано в voiceService.ts:

✅ 2. Агрессивный VAD для автоматического заглушения

Увеличены пороги детекции:
Результат:
  • При молчании: track.enabled = false → RTP пакеты НЕ отправляются
  • При речи: track.enabled = true → RTP пакеты отправляются с шумоподавлением

✅ 3. Максимальное браузерное шумоподавление

Google experimental constraints:

✅ 4. Electron с APM3 для desktop-клиента

Chromium флаги для максимального качества:

Матрица реализации

Как это работает в Miscord

Сценарий 1: Пользователь молчит

Сценарий 2: Пользователь говорит

Результат

Дыхание при молчании: НЕ передается (track.enabled = false)
Дыхание при речи: Подавляется браузерным NS + googHighpassFilter
Щелчки/шорохи: Фильтруются агрессивным VAD
Экономия трафика: нет пакетов при тишине ✅ Качество в Electron: APM3 + Hybrid AGC в desktop-клиенте

Преимущества нашего подхода

  1. Совместимость с WebRTC - используем стандартные API
  2. Работает в браузере И Electron - единая кодовая база
  3. Минимальная задержка - нет серверной обработки
  4. Низкая нагрузка на CPU - браузерное NS аппаратно ускорено
  5. Экономия трафика — не отправляем аудио при тишине

Что можно улучшить (опционально)

1. Push-to-Talk режим

Добавить режим “рации” (зажать кнопку для разговора):
  • Полный контроль пользователя
  • Гарантированное отсутствие фоновых шумов
  • Экономия трафика

2. Индикаторы приоритета

Передавать дополнительную информацию с RTP-пакетами:
  • Приоритет в чате
  • Качество соединения
  • Статус пользователя

3. Адаптивное качество на основе RTCP

Использовать RTCP отчеты для динамической настройки битрейта:
  • Автоматическое снижение качества при плохом соединении
  • Повышение качества при хорошем соединении

Выводы

🎉 В Miscord реализован ключевой принцип: “Не отправлять аудио в периоды тишины” Это решает проблему дыхания и фоновых шумов на фундаментальном уровне! В сочетании с:
  • Браузерным шумоподавлением
  • Google experimental фильтрами
  • Electron APM3
  • Агрессивным VAD
Получаем стабильную передачу чистого голоса с низкой задержкой. 🚀
Дата: 30 сентября 2025
Статус: PRODUCTION READY
Подход: WebRTC + VAD architecture