LINUX.ORG.RU

MIDI в Linux: диагностируем отсутствие звука

 , , ,


1

1

Руководство затрагивает проблему с отсутствующим звуком в музыкальных программах типа Power Tab Editor в linux. Подходит для систем с PipeWire или PulseAudio. Ниже описана настройка MIDI и звука для Power Tab Editor.

Часть 1: Установка и проверка FluidSynth

1. Установка необходимых пакетов

Для начала нам понадобятся:

  • fluidsynth — программный MIDI-синтезатор.

  • alsa-utils — содержит команду aconnect для управления MIDI-соединениями.

  • soundfont-fluid — набор звуков (SoundFont) в формате .sf2.

sudo pacman -S fluidsynth alsa-utils soundfont-fluid

или

sudo apt install fluidsynth alsa-utils soundfont-fluid

Зависит от вашего менеджера пакетов.

2. Проверка наличия SoundFont-файла

После установки убедитесь, что SoundFont-файл на месте:

ls -la /usr/share/soundfonts/FluidR3_GM.sf2

Вывод должен выглядеть примерно так:

-rw-r--r-- 1 root root 148398306 июл  6  2024 /usr/share/soundfonts/FluidR3_GM.sf2

3. Ручной запуск FluidSynth (проверка работы)

Запустите FluidSynth с PulseAudio-драйвером:

fluidsynth -a pulseaudio -g 1.0 /usr/share/soundfonts/FluidR3_GM.sf2

Пояснение параметров:

  • a pulseaudio — использовать звуковой драйвер PulseAudio (совместим с PipeWire).

  • g 1.0 — громкость (значение от 0 до 1).

  • /usr/share/soundfonts/FluidR3_GM.sf2 - путь к SoundFont — указывает на файл с инструментами.

Ожидаемый результат:

  • Терминал переходит в интерактивный режим (появляется приглашение >).

  • Появляются предупреждения ALSA (например, unable to open slave). Игнорируйте их — это нормально для систем с PipeWire.

FluidSynth успешно запущен и ждёт MIDI-соединений.

Чтобы проверить, виден ли синтезатор в системе: Откройте второй терминал и выполните:

aconnect -o

Вы должны увидеть строку с FLUID Synth:

client 128: 'FLUID Synth' [type=user,pid=3678]
    0 'Synth input port (3678:0)'

4. Тест MIDI-соединения (опционально)

Если нужно вручную соединить MIDI-устройства:

aconnect -a

Эта команда соединяет все доступные MIDI-выходы со всеми MIDI-входами.

Проверьте работу звука в своей программе, как пример Power Tab Editor (версия из Flathub).

  • Откройте Tools → Settings → MIDI.

  • В выпадающем списке MIDI Output выберите FLUID Synth.

  • Убедитесь, что опция Enable MIDI Output активна.

  • Закройте окно настроек.

Если звук работает, FluidSynth можно пока отключить Ctrl+C в терминале с «>» и переходить к части 2.

Часть 2: Установка и настройка Qsynth

Qsynth — это удобная GUI-обёртка для FluidSynth, которая решает проблемы с переменными окружения и позволяет запускать синтезатор в фоне.

1. Запуск Qsynth и настройка звукового драйвера (вкладка «Звук»)

  • Запустите Qsynth

  • Откройте Setup → вкладка Sound.

Установите следующие параметры: Параметр Значение Audio Driver pulseaudio Audio Device Оставьте по умолчанию Формат выборок 16bits Звуковых каналов 2 Частота дискретизации 44100 Размер буфера 64 или 128 Полифония 256 Число буферов 2

Не обязательно, но почему pulseaudio? Есть теория, что в системах с PipeWire этот драйвер не конфликтует с другими приложениями. Я эту теорию не проверял.

2. Настройка MIDI (вкладка «MIDI»)

  • Перейдите на вкладку MIDI.
  • Параметр Значение
  • MIDI Driver alsa_seq

3. Загрузка SoundFont-файла (вкладка «Файлы SF2»)

  • Перейдите на вкладку «Файлы SF2».

  • Нажмите на кнопку «Открыть» (значок папки).

  • Выберите файл: /usr/share/soundfonts/FluidR3_GM.sf2

  • После загрузки название файла появится в списке.

4. Запуск синтезатора

  • Нажмите кнопку «Вкл» (Power On) в основном окне Qsynth.

  • Индикатор должен загореться зелёным.

  • Qsynth теперь работает в фоне и готов принимать MIDI-сигналы.

Часть 5: Настройка Power Tab Editor

  • Запустите Power Tab Editor (у меня версия из Flathub).

  • Откройте Tools → Settings → MIDI.

  • В выпадающем списке MIDI Output выберите FLUID Synth.

  • Убедитесь, что опция Enable MIDI Output активна.

  • Закройте окно настроек.

Теперь при нажатии Play звук должен воспроизводиться через Qsynth.

Я не напрашиваюсь, но если у вас получилось настроить звук в другой программе, можете оставить её название в комментариях, чтобы людям было проще решить проблему через поисковик.



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 4)

Ты, говоря о Power Tab Editor, имеешь в виду этот проект? Потому, что там в Readme есть ещё отсылка на некий original Power Tab Editor, но у того сейчас даже сайт не открывается.

P.S. Слегка конкретизировал заголовок темы, а то «MIDI в Linux», вообще-то, довольно широкая тема.

P.P.S. Нашёл упоминание про флатхаб, хотел посмотреть, на что он ссылается, но на самом флатхабе сейчас чегой-то 500 ошибка выскакавает. Отложил.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от hobbit

Автор не откликнулся, но флатхаб ожил. Действительно, это тот проект. Подтвердил, ссылку на гитхаб добавил.

Сайт оригинального, кстати, тоже пытается открыться. С большими тормозами, но загрузившегося уже достаточно, чтобы понять, что это была программа на дотнете для Windows. Скорее всего, closed-source, хотя это не точно.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)

Давайте попросим оператора по доставке нейрослопа найти и показать нам кнопку «Вкл» (Power On) в основном окне Qsynth, чисто посмеяться перед забаном.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от thesis

Бгг, стал искать эту кнопку и нашел баг в интерфейсе QSynth! Птичка «Вкл» в поле для реверберации, подписана «включение эффекта ХОРА». Надо зарепортить, но пока лень

James_Holden ★★★★★
()
Ответ на: комментарий от James_Holden

Так переводить постоянно лезут дятлы, не владеющие ни языками, ни предметной областью, всегда так было. В английском гуе все как положено.

Кстати, насчет aconnect -a тоже дичь написана. Да и в целом сразу видно, что дичь, но зарепортить успеем, надо же сначала похихикать.

thesis ★★★★★
()
Ответ на: комментарий от hobbit

да, по названию статьи вообще не понятно о чём речь, а внутри вроде и полезно

z0idator
()
Ответ на: комментарий от kott

18 лет назад, какая милота. Первые шаги и все такое.

А в остальных местах - «реверберация» везде.

thesis ★★★★★
()
Ответ на: комментарий от kott

То, что переводил Прокудин, наверное, давно ушло. Достаточно небольших изменений и файл перевода приходит в негодность. Да, это легко поправить, но для этого надо потратить время восстанавливая связи, и если переводчика нет, то делается это криво авторами или вообще на стороннем сервисе. Так и появляется бред в переводах. А сейчас в большинстве проектов автоматический перевод. Откуда они его берут не знаю, но весь тот бред которым вы недовольны оттуда.

Извините за некропостинг.

PcheloBiaka
()
Последнее исправление: PcheloBiaka (всего исправлений: 1)
Ответ на: комментарий от PcheloBiaka

Надо просто закоммитить им фикс, он элементраный, но… но… Что я за человек такой вообще. Ничего не могу сделать. Как же выбраться. Есть софтина, заменяющая EasyEffects (по которой статьи я писал), готова на 95% уже сколько, год… не могу зарелизить. По KPP плагинам, пуллреквестов накидали, не могу принять.

Сейчас опять занимаюсь новой задачей - делаю… метроном! Метроном простой! Оказывается, под линукс нет нормального метронома! Вообще нету. Все метрономы имеют фатальный недостаток - сам алгоритм, который кликает - он вообще неправильный! В итоге, все метрономы стучат криво, и пропускают щелчки под малейшей нагрузкой. Я не знаю, как люди этого не видят, может у них железо посильнее, или никто не использует метрономы в линупсе (что скорее всего). Проблема достигла катастрофического масштаба - невозможно заниматься на гитаре!

И вот, я решил разработать метроном, который работает. Он практически готов. Уж это то я постараюсь скоро зарелизить!

Была бы еще софтина, которая отрубает весь интернет в квартире, пока не доделал дело. Но тут проблема - как делать без интернета. Замкнутый круг, нет пока решения.

James_Holden ★★★★★
()

А можно я сокращу и дополню статью?

  • Устанавливаем pipewire-jack. Если мы лезем в мир аудио и миди - полезно его иметь. Да и пакетный менеджер позже не придумает установить сам jackd, если ты захочешь устанавливать эффекты, секвенсоры и пр.
  • Устанавливаем qsynth и soundfont-fluid пакетным менеджером вашего дистрибутива (fluidsynth подтянется по зависимостям)
  • Запускаем Qsynth и (если хочется быть дотошным) читаем, есть ли ошибки в его консоли нажав кнопочку «Сообщения»
  • Загружаем установленный банк звуков (или любой свой любимый) нажав «Настройки» -> «Файлы SF2» -> «Открыть» (alsa_seq, частота и всё остальное - это вообще излишне. Оно так по умолчанию)
  • Подключаем ваш MIDI-секвенсор к Qsynth через окно настройки этого приложения
  • профит.

aconnect стоило бы использовать только в скриптах всяких на «безголовом» сервере. А на десктопе полезными были бы qpwgraph, в котором удобно соединять даже те программы, которые в настройках ничего не показывают.

PcheloBiaka
()
Ответ на: комментарий от James_Holden

Я тоже постоянно думаю «сейчас, соберусь и сделаю. Завтра». Своего ассистента пописываю, да оставляю в таком состоянии, что ни то что работало не работает, ни вспомнить не могу что я делал. Сношу, заново начинаю писать и… бросаю. И вообще, я прямо сейчас должен был ехать работать, меня люди ждут. Но я сижу дома и ничего не делаю.

Рассеянность внимания, мелкодисперсное распыление на все интересы и очень сложная/активная работа. Ну и не молодеем мы. Держись. :))

PcheloBiaka
()
Ответ на: комментарий от beefdeadbeef

В принципе это не сложно импортировать, а в чем там цель? Они выравнивают АЧХ всех наушников… во что? Какую-то стандартную характеристику?

James_Holden ★★★★★
()
Ответ на: комментарий от James_Holden

видимо основная цель – застолбить место и формат представления этих самых ‘correctional curves’ – что уже неплохо, как по мне.

beefdeadbeef
()
Ответ на: комментарий от James_Holden

Все метрономы имеют фатальный недостаток - сам алгоритм, который кликает - он вообще неправильный! В итоге, все метрономы стучат криво, и пропускают щелчки под малейшей нагрузкой.

Этот пробовал?

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Смотри, вот на примере этого!

connect(playBtn, &QPushButton::clicked ,timer, &Timer::start);
    connect(stopBtn, &QPushButton::clicked ,timer, &Timer::stop);

Вот что они делают! Это же бред!

Они вешают клик на таймер! Все они! Никто не умеет программировать!

Таймер в не-риалтаймовой ОС не дает никаких гарантий! У нас тут не жесткая RTOS же! Ну это же дети должны знать. Кто их учил программировать.

В итоге, все эти метрономы не работают - кликают криво, могут кликнуть миллисекунд на 20 позже внезапно, а то и на 40, пропускают клики! И они не могут работать, QTimer просто по своей природе не может обеспечить нужных требований точности клика! Этого никто не понимает…

Я разработал метроном, который работает. Он уже работает. Еще немного функций добавлю, и буду релизить. Он кликает надежно как асфальтовый каток, любое препятствие закатывающий в асфальт. Там другой подход, никакой таймер не используется вообще! Точность клика обеспечивается до 22 микросекунд. Микро, а не милли!

James_Holden ★★★★★
()
Последнее исправление: James_Holden (всего исправлений: 2)
Ответ на: комментарий от James_Holden

Там другой подход, никакой таймер не используется вообще!

Даже системный setitimer()? (Он, кстати, довольно точный, хотя жёсткого РВ и не даёт.)

А как тогда интервалы отсчитываешь?

hobbit ★★★★★
()
Ответ на: комментарий от James_Holden

То есть твой метроном напрямую со звуковой картой взаимодействует?

Ну, интересно, как это в программе реализовано.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Там все элементарно, это день работы заняло. Ну и сама задача метронома очень проста. Когда буду выкладывать, опишу ещё подробности.

James_Holden ★★★★★
()
Ответ на: комментарий от James_Holden

Была бы еще софтина, которая отрубает весь интернет в квартире, пока не доделал дело. Но тут проблема - как делать без интернета.

Локальный белый список?

hobbit ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.