Резюме:
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
После инсталляции вы можете загрузить модули в ядро. Для 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
Теперь самое время проверить как работает у вас звук. Запустите программу
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
./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 вам необходимы 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
/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
Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1
Теперь
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
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
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)