В далёком 2001 году я впервые увидел Linux и понял, что это моё. Шли годы, менялись дистрибутивы и мои требования к ним, но вот недавно я решил закрыть гештальт и научиться играть на электрогитаре.
Покопавшись в интернете, наткнулся на кучу обзоров гитарных процессоров, комбиков и программ-эмуляций. Как это часто бывает, крутые коммерческие продукты есть под Windows и Mac, а вот про Linux как-то снова забыли.
В принципе, это нормально — иметь две системы под разные нужды. Но иногда очень не хочется перезагружаться, и я решил попробовать настроить свой Manjaro под работу со звуком. Мои первые эксперименты с JACK во времена 4 рубля за мегабайт закончились неудачей, а вот сейчас и знаний, и терпения хватило.
Моя система: Manjaro Linux, KDE, Wayland. Аудиоинтерфейс Motu M2.
Первые шаги: Guitarix и AIDA-X
Для начала я решил попробовать Guitarix и AIDA-X. Тут я узнал, что случилось чудо — JACK больше не нужен, так как в системе уже используется PipeWire, который успешно его имитирует.
Правда, AIDA-X не очень дружит с Wayland, поэтому в систему вернулись X11, а для настройки соединений добавился qpwgraph. Зачем он понадобился?
Ответ прост: в системе ещё две звуковые карты и вебкамера, причём последняя регулярно пытается изображать из себя гитарный вход.
Запуск через pw-jack AIDA-X
pw-jack — это команда, которая заставляет программу "думать", что JACK-сервер запущен, и перенаправляет её вызовы в PipeWire.
При отрисовке интерфейса у меня возникли проблемы. Я решил их настройками окна приложения в KDE, задав минимальный и максимальный размер. Кстати, это и на Wayland помогло, так что проблема оказалась не в нём.
Вот как примерно должна выглядеть правильная схема соединений в qpwgraph:M Series Mic In 1L → AIDA-X → M Series Headphone + Monitor
NAM и NeuralRack
Пока я искал слепки для AIDA-X, узнал о ещё двух замечательных изобретениях человечества — NAM и NeuralRack.
NAM (Neural Amp Modeler) — это плагин, который использует нейросети, чтобы с идеальной точностью копировать звук комбоусилителей и педалей эффектов.
NeuralRack — это графическая оболочка для Linux, созданная, чтобы удобно запускать эти модели NAM в реальном времени без задержек, как будто у вас в компьютере стоит настоящий гитарный процессор. NeuralRack можно установить и как плагин, и как самостоятельное приложение.
А слепки усилителей и импульсы кабинетов можно найти на Tone3000. тут
Звук отличный — просто то, что я хотел. Из плюсов: нет сложного стэка из педалек, голов, эквалайзеров, кабинетов. Но это же и минус, если вам хочется покрутить много интересных ручек.
Для этого можно поставить в систему Carla — она позволяет собрать сложную цепочку из NeuralRack, ревербераций и задержек, а затем «подсунуть» этот стек в DAW как один виртуальный эффект.
Reaper и проблема соединений
Но хочется же поиграть под бэк или записать свою игру. Установил Reaper — благо есть нативный под Linux.
Reaper для Linux прекрасно работает с нативными LV2-плагинами, может и с VST, но об этом чуть позже.
Тут я снова столкнулся с проблемой: мне пришлось каждый раз настраивать соединения в qpwgraph. Камера постоянно подключалась вместо гитары.
Ну так программисты мы или где? Админить скриптами — наше всё.
Написал скрипт (о нём позже), который:
загружает программы с задержкой
подгружает конфиги
ищет звуковые устройства
что-то отключает, а что-то подключает
И вуаля — получаем запуск Reaper через родной ярлык, но под капотом скрипт. И всё работает сразу.
И, казалось бы, на этом пора успокоиться. Можно настроить отличный звук с гибкой системой плагинов и эффектов.
Главная боль: Windows VST на Linux
Но на Windows остались замечательные коммерческие решения — Neural DSP Archetype, Mercuriall Ampbox и другие.
И вроде бы есть простое решение — Wine. Но тут всё оказывается совсем не так просто: отрисовка интерфейсов большинства гитарных программ под Wine глючит, да и сами VST не очень хотят грузиться.
Но решение есть: Yabridge + Wine 9.21.
Yabridge — это мост (bridge), который позволяет запускать в Linux плагины Windows форматов VST2, VST3 и CLAP так, будто они родные для Linux.
Проблемы с GUI у плагинов возникли начиная с Wine 9.22, увы далеко не все репозитории всё ещё хранят старую версию.
Для тех кто пользуется Ubuntu/Debian есть замечательный скрипт, написанный Simo Erkinheimo.
Раз у меня Manjaro (Arch), пришлось выкручиваться. Я принял решение установить Wine 9.21 локально в домашнюю папку. К сожалению про manjaro-downgrade я узнал позже, поэтому скачал deb пакеты с нужной версией распаковал их себе.
Получилось так:
~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine --version
wine-9.21Так как winetricks тянет за собой новый Wine, то ставлю его командой
sudo pacman -S --asdeps --assume-installed wine winetricksДля удобства создал пару скриптов. что бы подружить Yabridge и мою Wine 9.21
#!/bin/zsh
export WINEPREFIX="$HOME/.wine-yb"
export PATH="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin:$PATH"
exec winetricks "$@"
#!/bin/zsh
export WINEPREFIX="$HOME/.wine-yb"
export WINEDLLOVERRIDES="winemenubuilder.exe=d"
export LD_LIBRARY_PATH="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/lib:$HOME/.local/share/wine-staging-9.21/opt/wine-staging/lib/wine:$LD_LIBRARY_PATH"
export PATH="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin:$PATH"
exec wine "$@"
$HOME/.wine-yb - это мой префикс(папка) куда Wine 9.21 будет всё ставить.WINEARCH="win64" для корректной работы плагинов
Для корректной работы плагинов добавил через скрипт для winetricks полезные библиотеки.
yb-winetricks -q corefonts
yb-winetricks -q vcrun2019
yb-winetricks -q dxvk
yb-winetricks -q gdiplusПри установке виндовых плагинов возникли проблемы на старой версии Wine, хотя в новой их не было. Поэтому я просто скопировал нужные папки из Windows в $HOME/.wine-yb
Увы Yabridge не увидел мой Wine. Поэтому я сделал сиволичекскую ссылку
# Создаём папку bin в домашней директории (если ещё нет)
mkdir -p ~/bin
# Создаём символические ссылки на ваш локальный Wine
ln -sf ~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine ~/bin/wine
ln -sf ~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine64 ~/bin/wine64
ln -sf ~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wineserver ~/bin/wineserver
echo 'export WINE="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine"' >> ~/.zshrc
source ~/.zshrc
# Добавляем ~/bin в PATH (если ещё не добавлено)
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Проверяем, что wine теперь виден
which wine
Чтобы добавить путь к плагинам выполнил:
yabridgectl add "$HOME/.wine-yb/drive_c/Program Files/Common Files/VST3"А для проверки статуса yabridgectl status
Плагины появились, но теперь Reaper не видит Wine и выдаёт ошибку при попытке инициализировать плагин, странно ведь ссылка есть.

И появилась ещё одна ошибка.

Это предупреждение говорит о том, что система не разрешает Yabridge блокировать память для аудио-буферов. Может вызывать щелчки и вылеты. Эту то как раз поправить не сложно:
# Проверьте, есть ли вы в группе audio
groups $USER
# Если нет audio, добавьте себя
sudo usermod -a -G audio $USERПоправил /etc/security/limits.conf
sudo nano /etc/security/limits.confДописал в конец файла:
$USER soft memlock unlimited
$USER hard memlock unlimited
$USER soft rtprio 95
$USER hard rtprio 95
$USER soft nice -15
$USER hard nice -15Срабатывает после перезагрузки!!!
Главный скрипт: всё в одном
А вот пути к Wine я добавил в свой главный скрипт который мне автоматом пытается настроить соединения.
#!/bin/bash
# Настраивем переменные окружения для Wine 9.21 и Yabridge
export WINEPREFIX="$HOME/.wine-yb"
export WINE="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine"
export WINEDLLOVERRIDES="winemenubuilder.exe=d"
export LD_LIBRARY_PATH="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/lib:$HOME/.local/share/wine-staging-9.21/opt/wine-staging/lib/wine:$LD_LIBRARY_PATH"
export PATH="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin:$PATH"
# Проверяем memlock limit
MEMLOCK=$(ulimit -l)
if [ "$MEMLOCK" = "unlimited" ] || [ "$MEMLOCK" -gt 8388608 ]; then
echo "Memlock limit: $MEMLOCK (OK)"
else
echo "Memlock limit: $MEMLOCK (низкий!)"
echo " Добавьте в /etc/security/limits.conf:"
echo " $USER soft memlock unlimited"
echo " $USER hard memlock unlimited"
fi
# Запускаем qpwgraph и даём ему загрузить сессию
echo "1. Запускаю qpwgraph с сессией"
qpwgraph -a -m ~/путь к файлу/название_сессии.qpwgraph &
echo "2. Ждём 4 секунды пока qpwgraph загрузит все соединения..."
sleep 4
# Запускаем Reaper с переменными окружения
echo "3. Запускаю Reaper"
PIPEWIRE_LATENCY=256/48000 pw-jack reaper &
echo "4. Ждём появления портов Reaper"
sleep 2
# 5. Активируем MOTU и чистим Brio
echo "5. Активируем MOTU и отключаем Brio..."
MOTU_ID=$(wpctl status | grep -oP '^\s*\K\d+(?=\.\s+M Series Headphone)' | head -n1)
if [ -n "$MOTU_ID" ]; then
wpctl set-default $MOTU_ID
echo "✅ MOTU активирован"
fi
pw-link -d "*Brio 500*" 2>/dev/null || true
pw-link -d "*Brio*" "*capture*" 2>/dev/null || true
# Выставляем частоту дискретизации и количество семплов
pw-metadata -n settings 0 clock.force-quantum 256
pw-metadata -n settings 0 clock.force-rate 48000
echo "=== Запуск завершён! ==="
notify-send -u normal -t 8000 "Reaper" "Запущен" 2>/dev/null
Думаю, тут надо немного пояснить. В qpwgraph после запуска Reaper я настроил все подключения и сохранил сессию в файл. А чтобы не запускать руками каждый раз две программы, добавил запуск в скрипт.
Reaper почему-то наглым образом отказывается видеть мой интерфейс, пока ему не установишь соединения в qpwgraph. А ещё добавил отсоединение связей с камерой — а то при запуске Reaper гул поднимается.
Ну и выставил частоту дискретизации и количество семплов, чтобы наверняка. Иначе по умолчанию pw-jack ставит 1024 семпла.



В итоге:
Reaper запускается скриптом
не нужно каждый раз настраивать подключения
показывает задержку всего 8 мс, что вполне комфортно для игры
интерфейс Windows плагинов не глючит

Linux — отличная платформа для гитары. Без танцев с бубном не обошлось, просто нужно знать пару обходных путей. Но как говорят: "У самурая нет цели - только путь!"
Upd:
В Asio-драйвере на Windows задержка была меньше и количество семплов я использовал 64. Почему же у меня сейчас возникают звуковые артефакты?
Для начала я попробовал изменить настройки буферов в скрипте запуска Reaper:
pw-metadata -n settings 0 clock.force-quantum 64
pw-metadata -n settings 0 clock.force-rate 48000
pw-metadata -n settings 0 clock.min-quantum 64
pw-metadata -n settings 0 clock.max-quantum 64Затем добавил в скрипт повышение приоритета процессов, чтобы браузер или уведомления в мессенджерах не влияли на звук в Reaper:
sudo renice -n -15 -p $(pgrep pipewire)
sudo renice -n -15 -p $(pgrep pipewire-pulse)
sudo renice -n -15 -p $(pgrep wireplumber)
PIPEWIRE_LATENCY=128/48000 pw-jack reaper &
REAPER_PID=$!
sudo renice -n -10 -p $REAPER_PIDИ напоследок проверил настройки CPU governor:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governorУ меня выдало powersave (энергосбережение), а не performance (производительность). Для стабильной работы звуковой обработки в реальном времени powersave не подходит.
Для изменения настроек производительности процессора я использовал cpupower:
sudo cpupower frequency-set -g performanceСделал настройку постоянной. Отредактировал конфиг cpupower /etc/default/cpupower , добавил в него строчку:
governor='performance'После перезагрузки получил заветные 2 мс без артефактов. А это уже на уровне профессиональных hardware-процессоров (Fractal Audio, Kemper, Neural DSP Quad Cortex, которые заявляют около 2-4 мс).

Надеюсь, мой опыт кому-нибудь пригодится или просто покажется интересным. Поверьте, Linux гораздо дружелюбнее, чем кажется, и для домашней гитарной станции подходит прекрасно.
Желаю вам успехов в музыке и наслаждения от игры на любимом инструменте!🎸





















