> ## Documentation Index
> Fetch the complete documentation index at: https://docs.miscord.ru/llms.txt
> Use this file to discover all available pages before exploring further.

# MISCORD AUDIO APPROACH

# 🎯 Аудиоархитектура 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:**

```typescript theme={"dark"}
setMuted(muted: boolean) {
  // КРИТИЧНО: Отключаем треки на уровне WebRTC
  // Это останавливает отправку RTP-пакетов
  if (this.localStream) {
    this.localStream.getAudioTracks().forEach(track => {
      track.enabled = !muted;  // ← RTP пакеты НЕ отправляются!
    });
  }
  
  // Также останавливаем отправку через RTCRtpSender
  this.peerConnections.forEach(({ pc }) => {
    const audioSenders = pc.getSenders().filter(s => s.track?.kind === 'audio');
    audioSenders.forEach(sender => {
      if (sender.track) {
        sender.track.enabled = !muted;  // ← Двойная защита!
      }
    });
  });
}
```

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

**Увеличены пороги детекции:**

```typescript theme={"dark"}
// АГРЕССИВНЫЕ пороги для подавления дыхания
const totalThreshold = 10;  // Было 3 → фильтрует дыхание
const midThreshold = 15;    // Было 5 → фильтрует тихие звуки
const maxThreshold = 20;    // Было 8 → фильтрует шорохи
```

**Результат:**

* При молчании: `track.enabled = false` → RTP пакеты НЕ отправляются
* При речи: `track.enabled = true` → RTP пакеты отправляются с шумоподавлением

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

**Google experimental constraints:**

```typescript theme={"dark"}
advanced: [
  { googHighpassFilter: { exact: true } },      // Убирает дыхание!
  { googNoiseSuppression: { exact: true } },    // Агрессивное NS
  { googTypingNoiseDetection: { exact: true } }, // Детекция печати
]
```

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

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

```javascript theme={"dark"}
app.commandLine.appendSwitch('enable-features', 'WebRtcUseEchoCanceller3,WebRtcHybridAgc');
app.commandLine.appendSwitch('enable-webrtc-apm-in-audio-service');
app.commandLine.appendSwitch('agc2-use-adaptive-digital', 'true');
```

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

| Функция                        | Цель | Реализация Miscord | Статус          |
| ------------------------------ | ---- | ------------------ | --------------- |
| Не отправляет аудио при тишине | ✅    | ✅                  | **РЕАЛИЗОВАНО** |
| Voice Activity Detection       | ✅    | ✅                  | **РЕАЛИЗОВАНО** |
| Браузерное шумоподавление      | ✅    | ✅                  | **РЕАЛИЗОВАНО** |
| Нативная WebRTC библиотека     | ✅    | ✅ (Electron)       | **РЕАЛИЗОВАНО** |
| Push-to-Talk                   | ✅    | ⚠️                 | Опционально     |
| Собственный SDP/ICE            | ✅    | ❌                  | Не требуется    |
| Шифрование Salsa20             | ✅    | ❌ (SRTP)           | Не критично     |

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

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

```
VAD детектирует тишину
    ↓
track.enabled = false
    ↓
RTP-пакеты не отправляются
    ↓
Другие пользователи НЕ слышат дыхание/шумы
```

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

```
VAD детектирует речь
    ↓
track.enabled = true
    ↓
Браузерное шумоподавление + Google фильтры
    ↓
RTP пакеты отправляются с обработанным аудио
    ↓
Другие пользователи слышат ЧИСТЫЙ голос
```

## Результат

✅ **Дыхание при молчании:** НЕ передается (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
