MyTetra Share
Делитесь знаниями!
Настройка воспроизведения MIDI в Debian GNU/Linux
Время создания: 01.03.2016 21:34
Текстовые метки: alsa, asfxload, debian, fluidsynth, midi, timidity
Раздел: Компьютер - Linux - Звук и аудио - MIDI
Запись: xintrea/mytetra_syncro/master/base/1456682688h0mhu3wuv8/text.html на raw.github.com

Настройка воспроизведения MIDI в Debian GNU/Linux

С MIDI я разбирался несколько раз. Первый раз я настраивал воспроизведение MIDI для игры Doom (Музыка в PrBoom). Потом я ставил дополнительные сэмплы для того, чтобы улучшить качество воспроизведения музыки в Doom и заставить звучать те инструменты, сэмплы которых не входили в комплект программного секвенсора timidity (Музыка MIDI - улучшаем звук). Потом я купил подержанную звуковую карту Creative SoundBlaster Live 5.1! и настроил аппаратный её секвенсор.

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

Мне же иногда хочется играть в старые игры для DOS, которые запускаются в DosBox в режиме частичной эмуляции. В старых играх мне хочется слышать ту MIDI-музыку, которая была сделана специально для игры и была встроена в неё. Но, поскольку мой компьютер староват, вычислительной мощности процессора иногда не хватает на одновременную частичную эмуляцию среды Dos и синтеза звука программным MIDI-секвенсором. В таких случаях звук начинает заикаться, а игра притормаживать. Выхода три: 1. отказаться эстетствовать и не слушать музыку в старых играх, а то и вовсе в них не играть, 2. купить мощный компьютер, что чревато лишними расходами и дополнительными хлопотами, 3. купить подходящую звуковую карту, а заодно узнать что-то новое о настройке аппаратных MIDI-секвенсоров.

Довелось мне даже испытать работу MIDI-клавиатуры (с интерфейсом USB), которую давал мне друг. Интересно, что она определилась и заработала сходу - мне для этого не понадобилось ставить никаких драйверов, не пришлось делать каких-то настроек. Я просто поставил Rosegarden (аналог Cakewalk для Linux) и клавиатура с ним прекрасно заработала.

Все эти мои эксперементы сопровождались дополнениями вики-страницы, содержимое которой я сейчас и приведу.

1. Список секвенсоров

Узнать список доступных MIDI-секвенсоров можно с помощью следующей команды:

$ aplaymidi -l


У меня эта команда выдаёт следующее:

Port Client name Port name

14:0 Midi Through Midi Through Port-0

16:0 SB Live! 5.1 Dell OEM [SB0228] EMU10K1 MPU-401 (UART)

17:0 Emu10k1 WaveTable Emu10k1 Port 0

17:1 Emu10k1 WaveTable Emu10k1 Port 1

17:2 Emu10k1 WaveTable Emu10k1 Port 2

17:3 Emu10k1 WaveTable Emu10k1 Port 3

20:0 CA0106 CA0106 MPU-401 (UART)


Аппаратному MIDI-секвенсору соответствуют порты 17:0, 17:1, 17:2, 17:3. Дополнительные его характеристики можно узнать с помощью следующей команды:

$ cat /proc/asound/card0/wavetableD1


Которая должна выдать примерно следующую информацию:

Device: Emu10k1

Ports: 4

Addresses: 17:0 17:1 17:2 17:3

Use Counter: 0

Max Voices: 64

Allocated Voices: 0

Memory Size: 134217728

Memory Available: 134213632

Allocated Blocks: 1

SoundFonts: 0

Instruments: 0

Samples: 0

Locked Instruments: 0

Locked Samples: 0



2. Программный секвенсор timidity

При отсутствии аппаратных MIDI-секвенсоров (секвенсоров, имеющихся прямо в звуковой карте) можно установить программный MIDI-секвенсор:

# apt-get install timidity


Вместе с timidity будет установлен набор семплов (иначе называемых Gravis Ultra Sount Patches или коротко - GUS-патчей) freepats.

3. Улучшенные сэмплы в timidity

Набор семплов, устанавливаемый freepats, не полный и не отличается высоким качеством, поэтому можно установить дополнительный набор патчей из состава fluidsynth:

# apt-get install fluid-soundfont-gm fluid-soundfont-gs


В файле /etc/timidity/freepats.cfg добавляем следующие строчки (я добавил в начало):

dir /usr/share/sounds/sf2/

soundfont FluidR3_GM.sf2 order=0

soundfont FluidR3_GS.sf2 order=1


И перезапускаем секвенсор:

# /etc/init.d/timidity restart



4. Программный секвенсор fluidsynth

Имеется альтернативный программный MIDI-секвенсор, который называется fluidsynth. Установить его можно следующей командой:

# apt-get install fluidsynth


Секвенсор fluidsynth не имеет сценария инициализации, поэтому для его запуска необходимо написать простенький сценарий инициализации или запустить его вручную, например так:

$ fluidsynth -a alsa -i /usr/share/sounds/sf2/FluidR3_GM.sf2 -i /usr/share/sounds/sf2/FluidR3_GS.sf2 -m alsa_seq -r 44100 -s



5. Аппаратный секвенсор

Если в вашей звуковой карте имеется аппаратный MIDI-секвенсор, необходимо подгрузить модуль ядра snd-emu10k1-synth:

# modprobe snd-emu10k1-synth


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

Для загрузки семплов в звуковую карту необходимо установить пакет awesfx:

# aptitude install awesfx


Загрузить сэмплы из пакетов fluid-soundfont-gm и fluid-soundfont-gs можно с помощью команд:

$ asfxload /usr/share/sounds/sf2/FluidR3_GM.sf2

$ asfxload -N /usr/share/sounds/sf2/FluidR3_GS.sf2


Первая команда загружает сэмплы вместо имеющихся, а вторая - добавляет сэмплы к имеющимся.


Файл FluidR3_GS.sf2 очень большой, и не каждая звуковая карточка его прожует. Если карточке не хватит памяти для загрузки семплов, будет выдана ошибка:


sfxload: no memory left


В этом случае нужно искать другой набор. Другие наборы MIDI-сэмплов (так называемые патчи) можно взять с сайта проекта ALSA. Поиск через Google или Yandex можно производить по строкам типа "Download 8MBGMSFX SF2". Вот прямая ссылка на подобный патч размером 8Мб, с которым нормально работает Sound Blaster SBLive 5.1:


http://www.alsa-project.org/~james/sound-fonts/8MBGMSFX.SF2


Этот файл можно поместить в тот же каталог, что и файлы семплов пакетов fluid-soundfont-* (/usr/share/sounds/sf2/) после чего его можно подгружать командой:


asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2


Внимание! Для автоматической подгрузки модуля ядра при загрузке системы необходимо добавить модуль snd-emu10k1-synth в файл /etc/modules.



6. Выбор секвенсора по-умолчанию

Для настройка MIDI-секвенсора по умолчанию для определённого пользователя нужно прописать в его файл ~/.bashrc следующие строчки:

ALSA_OUTPUT_PORTS="17:0 17:1 17:2 17:3"

export ALSA_OUTPUT_PORTS


Предполагается, что оболочкой по умолчанию у пользователя назначен bash. Настройки вступают в силу при входе пользователя. Для временного применения настроек по умолчанию (до конца сеанса пользователя) можно выполнить эти команды прямо из командной строки.

7. Воспроизведение музыки

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

# apt-get install pmidi


Воспроизведение музыки:

$ pmidi track.mid



 
MyTetra Share v.0.59
Яндекс индекс цитирования