Для разработки плагина, который может встраивать свой интерфейс (Embedded UI) в панели микшера (MCP) или трека (TCP) в REAPER, вам понадобятся официальные спецификации расширений от Cockos и правильные инструменты.
Основная спецификация для VST-плагинов находится здесь:
REAPER Extensions to VST SDK [1]
Как это устроено технически
REAPER расширяет стандартный протокол VST2/VST3 через вендор-колы (effVendorSpecific / audioMasterCallback). Чтобы заявить хосту, что ваш плагин поддерживает расширенные функции REAPER, плагин должен отвечать на запрос effCanDo со строкой "hasCockosExtensions" и возвращать магическое число 0xbeef0000. [1, 2]
Для реализации Embedded UI (отображения мини-интерфейса прямо в окне микшера) используются специфические хаки контекста:
- Получение контекста трека: Вы запрашиваете указатель на трек через audioMasterCallback хоста, передавая скрытые опкоды 0xdeadbeef и 0xdeadf00e.
- Отрисовка: На macOS для этого используется расширение hasCockosViewAsConfig, позволяющее плагину передавать хосту чистый NSView (Cocoa) вместо создания стандартного отдельного окна. [1, 2, 3]
Готовые решения и фреймворки (Рекомендуется)
Писать интеграцию с нуля на чистом C++ VST SDK сложно, поэтому разработчики чаще используют готовые обертки:
- JUCE (C++): В популярном фреймворке JUCE есть встроенная поддержка встраиваемых окон REAPER. Вы можете изучить класс ReaperEmbeddedViewPluginDemo внутри репозитория JUCE — это готовый пример кода, показывающий, как получить контекст родительского трека (MediaTrack*) и встроить туда графику. [4]
- IPlug2 (C++): Еще один аудио-фреймворк с открытым исходным кодом, который активно дорабатывается комьюнити под специфические фичи REAPER (включая CLAP/VST3 эмбеддинг).
Альтернатива: JSFX плагины
Если вам не принципиально использовать тяжелый C++, REAPER позволяет создавать плагины со встроенным интерфейсом на внутреннем скриптовом языке JSFX. Они работают на полную мощность GUI REAPER без C++ компиляции: [5]
- Ознакомьтесь с JSFX Programming Guide.
- В JSFX для отрисовки в TCP/MCP достаточно использовать аннотации вроде @Init и специальные методы отрисовки gfx_*. Посмотреть примеры можно прямо внутри REAPER, открыв встроенный плагин ReaEQ или ReaComp в режиме редактирования кода.
Если вы планируете писать плагин на C++, уточните, какой аудио-фреймворк (JUCE, IPlug2 или чистый VST3/CLAP SDK) вы хотите использовать? Я смогу подсказать, где искать нужные файлы в их репозиториях.
[1]
https://www.reaper.fm
[2]
https://www.reaper.fm
[3]
https://forum.juce.com
[4]
https://forum.juce.com
[5]
https://forum.cockos.com