Зміст

MIDI

Програвання MIDI-файлів

FluidSynth

fluidsynth -a alsa SoundFont-file.sf2 MIDI-file.midi

TiMidity++

timidity MIDI-file.midi

MIDI-інструменти

Під'єднання до комп'ютера

MIDI-порт

FIXME

USB-порт

Потрібно увімкнути підтримку USB MIDI пристроїв у ядрі Linux:

Symbol: SND_USB_AUDIO [=m]
Type  : tristate
Prompt: USB Audio/MIDI driver
  Location:
     -> Device Drivers
       -> Sound card support (SOUND [=m])
         -> Advanced Linux Sound Architecture (SND [=m])
           -> USB sound devices (SND_USB [=y])

Якщо обрати цей параметр у режимі модуля, то назва модуля буде “snd-usb-audio”.

За наявності підтримки MIDI пристрою в ядрі, під час під'єднання його до USB-порту в системних логах можна побачити приблизно такі повідомлення:

Jun 27 09:06:49 Hostname kernel: usb 2-3: new full-speed USB device number 3 using ohci-pci
Jun 27 09:06:49 Hostname kernel: usb 2-3: New USB device found, idVendor=0a4d, idProduct=0091
Jun 27 09:06:49 Hostname kernel: usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jun 27 09:06:49 Hostname kernel: usb 2-3: Product: USB Keystation 61es
Jun 27 09:06:49 Hostname kernel: usb 2-3: Manufacturer: Evolution Electronics Ltd.
Jun 27 09:06:49 Hostname kernel: usbcore: registered new interface driver snd-usb-audio

Це означає, що обладнання визначено правильно і для нього завантажено модуль “snd-usb-audio”. Більш-менш нові системи GNU/Linux автоматично завантажують потрібні модулі для відповідного обладнання. На старих системах, можливо, потрібно завантажити модулі власноруч (наприклад, sudo modprobe snd-usb-audio).

Модуль “snd-usb-audio” не єдиний, що використовується для роботи MIDI-пристроїв. Після під'єднання інструменту до USB порту можна побачити серед завантажених модулів такі:

snd_usb_audio
snd_hwdep
snd_usbmidi_lib
snd_rawmidi
snd_seq_device

Перевірка з'єднання

Якщо усе під'єднано правильно та необхідні модулі завантажені, в системі має бути зареєстровано новий MIDI-порт. Список їх можна отримати командою

$ aseqdump -l
Port    Client name                      Port name
20:0    USB Keystation 61es              USB Keystation 61es MIDI 1

В наведеному прикладі ми бачимо MIDI-клавіатуру “Keystation 61es” з номером порта 20:0. Тепер можна перевірити, чи цей пристрій здатен передавати MIDI-сигнали програмам. Для цього знову запускаємо програму aseqdump, вказавши їй потрібний порт нашого пристрою та натискаємо будь-які клавіші на MIDI-інструменті (або крутимо будь-які ручки на ньому). Якщо сигнали проходять, вивід має бути приблизно таким:

$ aseqdump -p 20:0
Waiting for data. Press Ctrl+C to end.
Source  Event                  Ch  Data
 20:0   Note on                 0, note 48, velocity 47
 20:0   Note off                0, note 48
 20:0   Note on                 0, note 50, velocity 63
 20:0   Note off                0, note 50
 20:0   Note on                 0, note 52, velocity 76
 20:0   Note off                0, note 52
 20:0   Note on                 0, note 53, velocity 51
 20:0   Note off                0, note 53

Тобто бачимо, що програма отримує від інструмента сигнали про натискання клавіш.

Під'єднання до програм

Для того, щоб грати на MIDI-інструменті через якусь програму (наприклад, програмний синтезатор звуків), потрібно спочатку з'єднати програмний вихід інструмента з програмнтим входом відповідної програми. Дізнатися, які програмні виходи зареєстровані в системі можна за допомогою команди

$ aconnect -i
client 20: 'USB Keystation 61es' [type=kernel,card=1]
    0 'USB Keystation 61es MIDI 1'

програмні входи:

$ aconnect -o
client 20: 'USB Keystation 61es' [type=kernel,card=1]
    0 'USB Keystation 61es MIDI 1'
client 128: 'FLUID Synth (6351)' [type=user,pid=6351]
    0 'Synth input port (6351:0)'

В наведеному прикладі бачимо, що в системі зареєстровано один програмний “вихід” – це вихід MIDI-інструмента “Keystation 61es”, а також два програмні “входи”: інструмент “Keystation 61es” та програма FluidSynth. В цих списках будуть показані усі програмні входи та виходи усіх зареєстрованих інструментів та програм.

Для того, щоб програма FluidSynth “слухала” MIDI-сигнали на своєму програмному вході, її потрібно запустити аналогічно до того, як це робилося раніше, але не вказуючи .midi-файл:

fluidsynth -a alsa SoundFont-file.sf2

Щойно ми знайшли потрібні нам “входи” та “виходи”, ми можемо з'єднати їх за допомогою команди

aconnect 20:0 128:0

Якщо з'єднання встановлено, ми побачимо його у списку наявних з'єднань:

$ aconnect -l
client 20: 'USB Keystation 61es' [type=kernel,card=1]
    0 'USB Keystation 61es MIDI 1'
	Connecting To: 128:0
client 128: 'FLUID Synth (7923)' [type=user,pid=7923]
    0 'Synth input port (7923:0)'
	Connected From: 20:0

Написи “Connecting To” та “Connected From” свідчать про те, що з'єднання встановлено. Тепер MIDI-сигнали, що їх генерує MIDI-інструмент “Keystation 61es”, потраплятимуть на вхід програми FluidSynth, і вона генеруватиме звуки.

Затримка звуку

Для того, щоб затримка між MIDI-подіями та появою звуку була якомога меншою, потрібно зменшити параметр period_size в налаштуваннях ALSA. Це можна зробити у файлі .asoundrc. Наприклад, програма FluidSynth під час запуску запитує в системи значення period_size 64. Це значення можна використати як орієнтовне.

Часто трапляється, що за дуже малої довжини періоду з'являються тріск та клацання. Тоді можна збільшити параметр periods, наприклад, до значення 1024.

Посилання

http://alsa.opensrc.org/PlayingMIDIFiles#Using_a_wavetable_synth_on_your_soundcard

http://renesd.blogspot.com/2009/09/alsa-midi-timidity-fluidsynth-and-jack.html

http://wiki.allegro.cc/index.php?title=Using_TiMidity%2B%2B_with_ALSA_raw_MIDI

Офіційний сайт FluidSynth – Синтезатор звуків музичних інструментів на основі “звукових шрифтів” (SoundFont)

amsynth – Синтезатор звуків

Інші програми, що працюють з MIDI

QSynth – просто графічний інтерфейс до FluidSynth.

LMMS – програма з класу так званих “DAW” – Digital Audio Workstation (цифрова аудіостанція)

Ardour – також DAW.

Rosegarden – Програма для створення та редагування музики

MidiEditor – Графічна програма для запису, редагування та програвання MIDI-файлів

MusE – MIDI/Аудіо-секвенсор з можливостями запису та редагування

Swami – редактор звуків музичних інструментів

PianoBooster – Програма для акомпонування та навчанні грі на фортепіано

Denemo – Нотний редактор

MuseScore – Нотний редактор