Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.




Используем 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
Информацию о том как скомпилировать alsa вы найдете в alsa howto (см. ссылки). В общем случае необхдимо выполнить следующую команду :

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 выполните команду

/usr/sbin/alsactl store

Теперь запускаем

play flute.wav

и слышим звук. Если звука нет - обратите внимание на файлы /proc/asound/devices и /proc/asound/oss-devices. Там должны быть "mixer" и "digital audio" (мои файлы).

Это был тест для pcm oss эмуляции и звука. Дальше я объясню как это все добавить в /etc/modules.conf чтобы все это выполнялось автоматически, но сейчас нам надо заставить работать midi.

 

midi

Если у вас звуковая карта со встроенным midi синтезатором (например sound blaster live) - все что вам нужно это загрузить "soundfont". Если у вас нет такой карты - вам необходимо установить timidity (ищите url для загрузки в ссылках) и использовать в качестве alsa midi синтезатора. Приложения использующие alsa не заметят никакой разницы.

Загружаем soundfont

Убедитесь, что у вас установлено приложение sfxload (/bin/sfxload). Если его нет в вашей системе - установите его, оно входит в пакет awesfx (поищите его на вашем CD с дистрибутивом Linux или http://mitglied.lycos.de/iwai/awedrv.html). Дальше, скопируйте файл 8MBGMSFX.SF2 с CD от Soundblaster Live (/mnt/cdrom/AUDIO/Common/SFBANK/8MBGMSFX.SF2) в /etc/midi/8MBGMSFX.SF2. Чтобы загрузить soundfont выполните команду :

/bin/sfxload /etc/midi/8MBGMSFX.SF2

Хорошее приложеие для тестирования - 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

Теперь запустите

pmidi -p 65:0 test.mid

и вы услышите звук из вашего midi файла. Cool!

Используем TiMidity в качестве софтового синтезатора

Закачайте пакет TiMidity++-2.11.3.tar.gz (см. ссылки), распакуйте его (tar zxvf TiMidity++-2.11.3.tar.gz) и отредактируйте файл common.makefile.in. Необходимо раскомментировать строку CFLAGS для pentium gcc:

CFLAGS = -O3 -mpentium -march=pentium -fomit-frame-pointer \
-funroll-all-loops -malign-double -ffast-math

Теперь вы можете добавить различные графические интерфейсы к 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 синтезатором.
Теперь

pmidi -p 128:0 test.mid

и слушаем 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

Вы уже попробовали проигрывать midi файлы программой pmidi. В состав KDE входит отличный плейер kmid ( не путайте с kmidi ). Вы можете скомпилировать Kmid как с поддержкой alsa, так и без нее. Redhat использует OSS, а Mandrake и Suse - Alsa. Вы можете использовать в Redhat бинарники Mandrake.
Эта заметка также предназначена объяснить инсталляцию alsa, что будет нам полезно при изучении других программ, о которых мы поговорим в следующих заметках. Например заметка про Jazz - mide sequencer и редактор 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. Но основная идея будет та же.  

Ссылки

  • Alsa howto: www.amelek.gda.pl/avr/
  • Проект Alsa: http://www.alsa-project.org/
  • Закачайте TiMidity++-2.11.3.tar.gz с этого сервера:TiMidity++-2.11.3.tar.gz
  • Софтовый midi синтезатор Timidity:http://www.goice.co.jp/member/mo/timidity/dist/
  • Midi-howto: http://www.midi-howto.com/
  • pmidi midi плейер: pmidi-1.4.2.tar.gz
    (с http://download.sourceforge.net/pmidi/ или http://www.parabola.demon.co.uk/alsa/pmidi.html )
  • Маленький и большой midi файлы для тестирования: test.mid bigstar.mid
  • страница ресурсов этой заметки
  • Midi приложения для Linux http://www.linuxsound.at/midi.html
  • Sound & MIDI софт для Linux http://linux-sound.org/one-page.html (или http://www.linuxsound.at)
 
Обсудить данную тему на нашем форуме "Все о Linux"