Переклад на російську:
Kirill Pukhlyakov
Використовуємо alsa для програвання midi файлів.
Midi - музичний формат файлів, що не містить власне звуків, але описує способи відтворення звуку. Це можна порівняти з нотним листом, де кожна нота є символічним поданням звуку. Midi - файли невеликі за розміром, в порівнянні наприклад з wav - файлами.
Щоб перетворити midi файл в звук необхідний midi синтезатор. Синтезатор може бути як на рівні пристрою, так і на рівні софта - насправді це набір звуків будь - якого інструменту (наприклад піаніно) для відтворення потрібного. Ці набори звуків більш відомі як "soundfont".
Прочитавши замітку ви дізнаєтеся як використовувати Alsa (advanced linux sound architecture) в якості midi синтезатора.
_________________ _________________ _________________
Для початку.
Всього кілька років тому такі звукові картки як "Gravis UltraSound" або "SoundBlaster Gold" продавалися в будь-якому комп'ютерному магазині. У цих картках був реалізований midi синтезатор. Але на жаль в даний час ці картки вже не купити, але навіть якщо ви їх де - небудь знайдете - вони навряд чи підійдуть до вашого нового комп'ютера, тому що для їх роботи потрібна ISA шина, в той час як в сучасних використовують PCI або навіть звуковий чіп може бути на борту вашої материнської плати. Але навряд чи ці чіпи реалізують midi синтезатор. Подивіться на список звукових карт, підтримуваних alsa. Насправді сьогодні єдина звукова карта, яка реалізує midi синтезатор, яку можна купити в комп'ютерному магазині - це Soundblaster live.
Якщо у вас немає такої карти - вам доведеться емулювати за допомогою софта, про що я вам і розповім.
Що нам треба
В даний час проект Alsa знаходиться в перехідному етапі. Стабільна версія - 0.5, а нова 0.9 - в процесі розробки. Якщо ви хочете використовувати midi - додатки з alsa - вам краще використовувати версію 0.5, тому що зараз ще напевно немає додатків для версії 0.9 і до того ж інтерфейси між версіями 0.5 і 0.9 несумісні (зверніть увагу: говорячи про проблему версії 0.9 я маю на увазі тільки midi, ні wav - файли, ні PCM таких проблем не мають).Для версії 0.5 необхідні наступні пакети.
- alsa-driver-0.5.12a.tar.bz2
- alsa-lib-0.5.10b.tar.bz2
- alsa-utils-0.5.10.tar.bz2
tar jxvf alsa-driver-0.5.12a.tar.bz2
cd alsa-driver-0.5.12a
./ Configure --with-sequencer = yes --with-oss = yes --with-isapnp = no
make
make install
./ snddevices
для драйвера і "./configure;make;make install" для всього іншого.
Після інсталяції ви можете завантажити модулі в ядро. Для soundblaster live (= emu10k1 chip) це треба зробити так.
modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss
Для інших карт просто замініть перші два рядки модулями для вашої карти (наприклад snd-card-via686a для вбудованої карти на базі чіпсета via 686). Mandrake і Suse підтримують alsa і ви можете також розпізнати вашу карту і налаштувати її додатками, що входять в дистрибутив (harddrake і yast2). Якщо ви не знаєте чіпсет вашого комп'ютера ви можете спробувати команду "lspci -v" (lspci входить в пакет pciutils).
Тепер саме час перевірити як працює у вас звук. запустіть програму
alsamixer
і натисніть "m" для розладу master і pcm рівня гучності і потім, використовуючи стрілки змініть рівень. Натисніть Esc щоб завершити роботу alsamixer коли все перевірите.
Щоб зберегти настройки в /etc/asound.conf виконайте команду
і чуємо звук. Якщо звуку немає - зверніть увагу на файли / proc / asound / devices і / proc / asound / oss-devices. Там повинні бути "mixer" і "digital audio" (мої файли).
Це був тест для pcm oss емуляції і звуку. Далі я поясню як це все додати в /etc/modules.conf щоб все це виконувалось автоматично, але зараз нам треба змусити працювати midi.
Гарне ДОДАТОК для тестування - pmidi (див. Посилання). виконайте
pmidi -l
Ви побачите наступне на екрані.
Port Client name Port name
64: 0 External MIDI 0 MIDI 0-0
65: 0 Emu10k1 WaveTable Emu10k1 Port 0
65: 1 Emu10k1 WaveTable Emu10k1 Port 1
65: 2 Emu10k1 WaveTable Emu10k1 Port 2
65: 3 Emu10k1 WaveTable Emu10k1 Port 3
і ви почуєте звук з вашого midi файлу. Cool!
Використовуємо TiMidity як софтового синтезатора
Тепер ви можете додати різні графічні інтерфейси до timidity, але перше, що нам треба - це опція "--enable-alsaseq", тим більше, що це не заважає нам додати і інші опції, зокрема інтерфейси.
/ Configure --enable-ncurses --enable-xaw --enable-spectrogram --enable-xaw = dynamic --enable-audio = oss, alsa --enable-alsaseq --prefix = / usr / local / timidity-2.11 .3
make
make install
Цими маніпуляціями ми встановимо timidity в /usr/local/timidity-2.11.3/bin, залишивши при цьому існуючу інсталяцію недоторканою. Ми повторно інсталювали timidity через те, що до сих пір я не зустрічав жодного дистрибутива Linux, в якому інтерфейс alsaseq був би встановлений за замовчуванням.
Для timidity вам необхідні soundfonts. Зараз їх ще називають інструментальними файлами. Хороший і найбільш повний набір інструментальних файлів досить великого розміру (приблизно 10 Мб). Найпростіше отримати їх - встановивши timidity ++ з вашого дистрибутивного CD і скопіювати звідти ці файли (наприклад timidity ++ - 2.11.3-1.i386.rpm download for redhat 7.3). Щоб скопіювати файли з / usr / share / timidity / instruments в /usr/local/timidity-2.11.3/share/timidity/instruments виконайте.
cd / usr
find share / timidity -print | cpio -dump /usr/local/timidity-2.11.3
Тепер ми готові протестувати timidity root'ом:
/usr/local/timidity-2.11.3/bin/timidity -iA -B2,8 -Os -EFreverb = 0
TiMidity starting in ALSA server mode
set SCHED_FIFO
Opening sequencer port: 128 0 128: 1
і потім pmidi -l:
Port Client name Port name
128: 0 Client-128 TiMidity port 0
128: 1 Client-128 TiMidity port 1
Опс, тепер у нас 2 порту з TiMidity синтезатором.
тепер
і слухаємо midi файл.
/etc/modules.conf
Якщо у вас звукова карта soundblaster live ви можете додати ці рядки в файл /etc/modules.conf для автоматичної настройки і завантаження модулів.
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-emu10k1
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias midi snd-synth-emu10k1
below snd-seq-oss snd-synth-emu10k1
post-install snd-synth-emu10k1 / bin / sfxload /etc/midi/8MBGMSFX.SF2; alsactl restore
# Uncomment to save volume settings at shutdown:
# Pre-remove snd-synth-emu10k1 alsactl store
Для карт без midi синтезатора, наприклад для вбудованої на via686.
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-via686a
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-12 snd-pcm-oss
# Restore original mixer:
post-install snd-card-via686a alsactl restore
# Uncomment to save volume settings at shutdown:
# Pre-remove snd-synth-emu10k1 alsactl store
Для автозавантаження timidiy пропоную додати наступний рядок в файл /etc/init.d/alsasound (цей скрипт інсталюється разом з драйвером, але не активізується). Для активізації використовуйте команду chkconfig
echo "starting timidity"
timidiy = / usr / local / timidity-2.11.3 / bin / timidity # do not forget the "" in the next line:
$ Timidity -iA -B2,8 -Os -EFreverb = 0> / dev / null
Використовуємо alsa і midi
Є такі додатки як timidiy (timidity -ig запускає gtk інтерфейс) або kmidi (не плутайте з kmid), у яких вбудований Софтова синтезатор. В цьому випадку вам не потрібен midi синтезатор ні на рівні пристроїв, ні на рівні ядра. Але взагалі-то краще мати єдиний midi api, ніж окремий в кожному додатку.
В даний час в Alsa відбуваються великі зміни. Як було сказано раніше - версія 0.9 не працює з багатьма додатками, але версія 0.5 також не позбавлена проблем. Зокрема не працює емуляція OSS sequencer (/ dev / sequencer), нормальна робота можлива тільки зі старими звуковими картами awe, які зараз купити досить складно. Можливо щось зміниться з виходом версії 0.9. Ця замітка буде вам корисна в майбутньому - для версії 0.9, необхідно буде звернути увагу на назви модулів - може бути вони поміняються і не будуть такими як у версії 0.5. Але основна ідея буде та ж.