Ликбез по GNU/Linux

Играем MIDI-файлы в Linux

Несмотря на закат компьютерной MIDI-музыки, на форумах линуксоидов регулярно задаются вопросы о том, как в Linux проигрывать MIDI-файлы. В этой статье рассмотрим программные секвенсоры TiMidity++ и FluidSynth, предназначенные для тех, у кого в компьютере установлена обычная встроенная звуковая карта без поддержки MIDI.


Прелюдия

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

Однако и сейчас MIDI на компьютере не умерло и востребовано. Во-первых, в практических целях. Например, MIDI нужно при разучивании табулатур или проверке на слух набранных нот в нотных редакторах.

Во-вторых, остались ещё истинные меломаны, которые помнят и ценят славное наследие Yamaha XG. Есть те, у которых сохранились ностальгические композиции, например, того же Нобуо Уематсу из ранних "Финалок". Так что MIDI ещё нужен.


Коротко про суть MIDI

MIDI - это такой цифровой интерфейс электронных музыкальных инструментов, позволяющий воспроизводить музыку путем выполнения специальных команд. Но что касается персонального компьютера, то для обычного пользователя MIDI - это, в первую очередь, такой формат файлов, которые можно проигрывать специальными проигрывателями-секвенсорами.

Сам этот файл никаких звуков не содержит, а, грубо говоря, является просто нотной записью. Секвенсор читает эти "ноты" и на их основании синтезирует звук. Основной способ синтеза сейчас - уже готовые сэмплы музыкальных инструментов, которые расфасованы по специальным банкам. Секвенсор последовательно читает информацию о звуках из MIDI-файла и соответственно этой информации подставляет соответствующий сэмпл из банка готовых музыкальных звуков.

Секвенсоры бывают встроенными в аудиокарту. Но в обычных современных аудиокартах поддержки MIDI нет, и поэтому используются программные секвенсоры. О программных секвенсорах для Linux и поговорим.


TiMidity++

Самым популярным секвенсором для Linux на данный момент является TiMidity++. Кстати, программа является кроссплатформенной, есть версии для Windows.

TiMidity++ обычно не устанавливается по умолчанию в системе, и этот секвенсор нужно устанавливать отдельно из репозитория дистрибутива. Также нужно установить банк звуков, потому как сам по себе секвенсор никаких сэмплов не содержит. Обычно в дистрибутивах содержится свободный набор сэмплов под названием freepats. Данный наборчик сэмплов, по правде говоря, довольно поганенький, и в дальнейшем мы его поменяем на что-нибудь более приличное.

Установив из репозитория TiMidity++, пробуем проиграть какой-нибудь MIDI-файл. Это секвенсор является консольной программой и запускается из командной строки:

$ timidity файл.mid

Запускать программу в командном режиме многим может показаться не очень интересным, и для этого секвенсора предусмотрены различные фронтенды, в том числе и с графическим интерфейсом. Например, в Debian Lenny нужно установить пакет timidity-interfaces-extra.

Однако скажу, что TiMidity++ является старой программой, и поэтому эти фронтенды тоже могут показаться недостаточно удобными.

Но TiMidity++ может работать как сервер для других приложений, например, для плеера караоке Kmid. Чтобы запустить секвенсор в этом режиме, нужно выполнить следующую команду:

$ timidity -iA

В результате должно появиться подобное сообщение:

TiMidity starting in ALSA server mode

Opening sequencer port: 128:0 128:1 128:2 128:3

То есть мы получили четыре MIDI-порта - 128:0 128:1 128:2 128:3 - в системе, к которым можно из других программ обращаться, установив их как MIDI-устройства в настройках программы. Например, для плеера Kmid настройка MIDI-порта осуществляется в меню "Settings - MIDI Setups".

Правда, есть одно "но". Чтобы TiMidity++ работал в режиме сервера, он должен быть собран с этой опцией. Однако про эту опцию сборщики пакетов часто забывают, и TiMidity++ может тогда работать только как обычный секвенсор.

Как уже было сказано выше, звучание сэмплов freepats вряд ли устроит привередливого меломана. Поэтому лучше скачать другие банки музыкальных инструментов. TiMidity++, в первую очередь, работает с банками звуков в формате GUS. На мой изысканный слух наиболее шикарным банком в этом формате является саундфонт eawpats. Даю прямую ссылку, размер около 30 мегабайт: gd.tuwien.ac.at/opsys/linux/gentoo/distfiles/eawpats12_full.tar.gz

Этот банк инструментов следует распаковать в любую директорию и для его активации отредактировать конфигурационный файл timidity.cfg. Данный файл в Debian находится в директории /etc/timidity. Однако в других дистрибутивах он может находиться в других местах.

В этом конфигурационном файле нужно сначала закомментировать или удалить ссылку на предыдущие инструменты:

# source /etc/timidity/freepats.cfg

А затем добавить ссылки на инструменты eawpats. Например, если eawpats находится в каталоге /home/me/ eawpats, то запись в конфигурационном файле будет такой:

dir /home/me/eawpats/
source gravis.cfg
source gsdrums.cfg
source gssfx.cfg
source xgmap2.cfg

Вот и всё. Но TiMidity++ может работать с банками звуков и в распространённом формате SF2 (SoundFonts 2). Звуковых библиотек в этом формате в Сети много. Подключается файл SF2 в конфигурационном файле timidity.cfg так:

soundfont /home/me/банк.sf2 order=0

TiMidity++ - мощный секвенсор с большим количеством дополнительных функций, которые можно изучить через help. Например, TiMidity++ проигрывает не только MIDI, но и MOD-файлы. Этот секвенсор может сохранять MIDI-файл в другие звуковые форматы - Ogg, WAV. Секвенсор поддерживает спецэффекты хорус, реверб. Однако следует помнить, что TiMidity++ - это софтовый секвенсор, и многие функции потребуют дополнительной вычислительной мощности процессора.


FluidSynth

FluidSynth - это тоже программный секвенсор-синтезатор, который может использоваться при отсутствии звуковой карты с собственным MIDI-секвенсором. Для синтеза использует исключительно банки звуков в формате SF2. Работает FluidSynth как демон и предназначен для обслуживания внешних программ - Kmid, Resengarden и др.

Чтобы не мучиться с параметрами командной строки этого демона, существует отдельный графический интерфейс Qsynth. Собственно, для работы с FluidSynth достаточно установить из репозитория Qsynth. В Debian Lenny пакет присутствует.

FluidSynth - более современная программа, чем TiMidity++, рассчитана на работу в связке с аудиосервером Jack с низкими задержками. Однако если стоит задача просто послушать MIDI в каком-нибудь Kmid, то можно обойтись и без аудиосервера Jack. Особенно это актуально для новичков, которых пугает зоопарк разнообразных аудиосерверов в Linux.

После запуска Qsynth появится сообщение, что не удалось найти Jack-сервер. Следует зайти в меню "Setup" и во вкладке "Audio" в качестве аудиодрайвера поставить Alsa, а не Jack. После этого во вкладке "Soundfont" выбрать нужные файлы SF2. Если их несколько, определить их иерархию. FluidSynth позволяет загрузить сколько угодно банков SF2, лишь бы памяти в компьютере хватило.

После настройки останется только нажать в Qsynth кнопку "Start" и в системе появится программный виртуальный MIDI-сервер, к которому уже можно обратиться из других программ, работающих с MIDI-файлами.


Гранд финале

Как видите, система MIDI в Linux является навороченной и местами может быть сложной. Однако и результаты можно получить хорошие, даже не имея карты с аппаратной поддержкой MIDI. Для прослушивания своей коллекции MIDI я использую TiMidity++ и саундфонд eawpats и не сожалею об отсутствии эмулятора Yamaha. Хотя следует сказать, что с оригинальным MIDI стареньких карт Yamaha ничто сравниться не может. Не всегда новое лучше, чем старое.

Михаил АСТАПЧИК

Версия для печатиВерсия для печати

Номер: 

08 за 2010 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!