В далёком 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/zshexport WINEPREFIX="$HOME/.wine-yb"export PATH="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin:$PATH"exec winetricks "$@"
#!/bin/zshexport 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 corefontsyb-winetricks -q vcrun2019yb-winetricks -q dxvkyb-winetricks -q gdiplus
При установке виндовых плагинов возникли проблемы на старой версии Wine, хотя в новой их не было. Поэтому я просто скопировал нужные папки из Windows в $HOME/.wine-yb
Увы Yabridge не увидел мой Wine. Поэтому я сделал сиволичекскую ссылку
# Создаём папку bin в домашней директории (если ещё нет)mkdir -p ~/bin# Создаём символические ссылки на ваш локальный Wineln -sf ~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine ~/bin/wineln -sf ~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine64 ~/bin/wine64ln -sf ~/.local/share/wine-staging-9.21/opt/wine-staging/bin/wineserver ~/bin/wineserverecho 'export WINE="$HOME/.local/share/wine-staging-9.21/opt/wine-staging/bin/wine"' >> ~/.zshrcsource ~/.zshrc# Добавляем ~/bin в PATH (если ещё не добавлено)echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrcsource ~/.zshrc# Проверяем, что wine теперь виденwhich wine
Чтобы добавить путь к плагинам выполнил:
yabridgectl add "$HOME/.wine-yb/drive_c/Program Files/Common Files/VST3"
А для проверки статуса yabridgectl status
Плагины появились, но теперь Reaper не видит Wine и выдаёт ошибку при попытке инициализировать плагин, странно ведь ссылка есть.

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

Это предупреждение говорит о том, что система не разрешает Yabridge блокировать память для аудио-буферов. Может вызывать щелчки и вылеты. Эту то как раз поправить не сложно:
# Проверьте, есть ли вы в группе audiogroups $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 и Yabridgeexport 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 limitMEMLOCK=$(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 и чистим Brioecho "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 активирован"fipw-link -d "*Brio 500*" 2>/dev/null || truepw-link -d "*Brio*" "*capture*" 2>/dev/null || true# Выставляем частоту дискретизации и количество семпловpw-metadata -n settings 0 clock.force-quantum 256pw-metadata -n settings 0 clock.force-rate 48000echo "=== Запуск завершён! ==="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 64pw-metadata -n settings 0 clock.force-rate 48000pw-metadata -n settings 0 clock.min-quantum 64pw-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 гораздо дружелюбнее, чем кажется, и для домашней гитарной станции подходит прекрасно.
Желаю вам успехов в музыке и наслаждения от игры на любимом инструменте!🎸
ссылка на оригинал статьи https://habr.com/ru/articles/1029056/