# Плагины и обработка для живого звука (macOS + OBS)

Что можно поставить, чтобы голос в трансляции был чище, и что из этого реально заработает
на Apple Silicon. Всё, что помечено «проверено», проверено на этой машине, а не взято из обзоров.

## 1. Главное ограничение: OBS грузит только VST2 и только arm64

Проверено на OBS 32.2.2:

```bash
strings -a /Applications/OBS.app/Contents/PlugIns/obs-vst.plugin/Contents/MacOS/obs-vst | grep -i "Plug-Ins"
#   *.vst
#   .vst
#   /Library/Audio/Plug-Ins/VST/
#   ~/Library/Audio/Plug-ins/VST/

strings -a /Applications/OBS.app/Contents/PlugIns/obs-vst.plugin/Contents/MacOS/obs-vst | grep -ci vst3
#   0        ← упоминаний VST3 в бинаре нет вовсе

lipo -archs /Applications/OBS.app/Contents/MacOS/OBS
#   arm64    ← только arm64
```

Отсюда три следствия, которые отсекают большинство современных плагинов:

| Ограничение | Что это значит на практике |
|---|---|
| Только **VST 2.4** (`*.vst`) | VST3 (`*.vst3`) и AU (`*.component`) OBS не видит. Фильтр так и называется — «VST 2.x Plug-in» |
| OBS — **только arm64** | Плагин x86_64 не загрузится: arm64-бинарь под Rosetta не запускается (Rosetta переводит x86_64 → arm64, не наоборот). Нужна сборка arm64 или universal |
| Пути | `~/Library/Audio/Plug-ins/VST/` (без администратора) или `/Library/Audio/Plug-Ins/VST/` |

**Проверяйте архитектуру любого плагина до установки** — это одна команда:

```bash
lipo -archs "/путь/Plugin.vst/Contents/MacOS/Plugin"
# нужно: arm64   либо   x86_64 arm64
```

## 2. Что уже стоит и чего не хватает в OBS

На источнике `BlackHole 2ch` стоит цепочка **RNNoise → экспандер → компрессор → лимитер**.
Она убирает шум вентилятора и паузы, выравнивает громкость. Задержка RNNoise — один кадр,
480 сэмплов при 48 кГц, то есть **~10 мс** (константы в исходниках OBS: `RNNOISE_FRAME_SIZE 480`).

Встроенными средствами **нельзя**:

| Задача | Почему |
|---|---|
| Убрать гул 50 Гц и рокот | Встроенный эквалайзер OBS делит полосы по **800 и 5000 Гц** (`LOW_FREQ 800.0f`, `HIGH_FREQ 5000.0f` в `eq-filter.c`): его «низ» — это и гул, и тело голоса сразу. Нужен отдельный фильтр высоких частот |
| Убрать эхо и реверберацию | Фильтра для этого в OBS нет вообще |
| Шумоподавление «умнее» RNNoise | Есть только RNNoise и Speex |

## 3. Три способа применять обработку в лайве

| Способ | Что доступно | Цена | Минусы |
|---|---|---|---|
| **Прямо в OBS** | встроенные фильтры + VST2 (arm64) | бесплатно | нет VST3/AU; нет параметрического EQ и de-reverb «из коробки» |
| **Хост рядом с OBS** | любые AU/VST3 (Bertom, Supertone, de-reverb и др.) | [Carla](https://github.com/falkTX/Carla) — бесплатно (universal dmg, проверено по релизам), [Element](https://github.com/kushview/Element) — бесплатно (macOS dmg, проект живой) | нужно второе виртуальное устройство и маршрутизация: BlackHole → хост → виртуальный микрофон → OBS; плюс задержка |
| **Приложение-микрофон** | готовые AI-очистки с виртуальным микрофоном (Krisp и подобные) | подписка | не управляется из OBS, зависимость от сервиса, задержка обычно больше |

## 4. Путь без плагинов вообще: фильтр в нашем тракте

Звук с камкордера проходит через наше приложение (`DVAudioPlayer`) перед BlackHole. Значит обработку
можно поставить прямо там — и это снимает все ограничения OBS разом: наши плагины не обязаны быть VST2
и не зависят от OBS.

Что для этого доступно в системе «из коробки» (проверено `auval -a`):

```
aufx hpas appl  -  Apple: AUHipass            ← фильтр высоких частот (гул, рокот)
aufx lshf appl  -  Apple: AULowShelfFilter    ← полка низких частот
aufx greq appl  -  Apple: AUGraphicEQ         ← графический эквалайзер
aufx dcmp appl  -  Apple: AUDynamicsProcessor ← компрессор/экспандер/гейт
aufx lmtr appl  -  Apple: AUPeakLimiter       ← лимитер
auou vpio appl  -  Apple: AUVoiceProcessor    ← голосовая обработка Apple (шумоподавление + АРУ)
```

Это обычные Audio Units: `AVAudioEngine` умеет их подключать напрямую (`AVAudioUnitEQ`,
`AVAudioUnitEffect`), в том числе **сторонние AU** — то есть в нашем тракте можно использовать
и плагины, которые в OBS не грузятся (VST3/AU), без хост-приложений и без второго виртуального
устройства.

Практический минимум для вашей записи (гул 50 Гц +9.7 дБ, рокот, шум −47.6 dBFS):

1. `AVAudioUnitEQ` — high-pass 80 Гц + узкие вырезы на 50/100/150 Гц;
2. дальше существующая цепочка (денойз/экспандер/компрессор — уже в OBS, либо тоже здесь).

Проверяется тем же способом, что и остальной звук: прогон через `--audio-render-selftest`
и сверка результата с FFmpeg.

## 5. Как проверять кандидатов

1. Скачать сборку **VST2 для macOS** (не VST3 и не AU).
2. `lipo -archs` — убедиться, что там arm64 или universal.
3. Скопировать в `~/Library/Audio/Plug-ins/VST/`.
4. В OBS: фильтр источника → **VST 2.x Plug-in** → в списке должен появиться плагин.
5. Проверить по логу OBS, что он загрузился без ошибок:
   `grep -i vst ~/Library/Application\ Support/obs-studio/logs/$(ls -t ~/Library/Application\ Support/obs-studio/logs | head -1)`

## 6. Задержка и синхронизация

Обработка в лайве добавляет задержку: RNNoise ~10 мс, VST-фильтры — единицы мс, внешние
AI-сервисы и хосты — десятки мс. Для видео это обычно незаметно, но если звук «отстаёт»,
в OBS поправляется **Дополнительно → Смещение синхронизации** (значение в мс, можно отрицательное).
Проверять лучше на хлопке в кадре.

## 7. Что остаётся офлайном

Эхо и реверберацию в реальном времени бесплатно не убрать: это умеют платные плагины
(Zynaptiq UNVEIL, Acon DeVerberate, Accentize DeRoom) через хост, а также офлайн-сервисы
вроде Adobe Podcast Enhance. Если пишете не в прямом эфире, дешевле и качественнее прогнать
дорожку через них после записи — см. [audio-cleanup.md](audio-cleanup.md).
