The Linux MIDI-HOWTO
Phil
Kerr
phil (at) plus24.com
ÁÖ¼º
¼Û
venal (at) hanmail.net
˼ˍ
ÀÓ
eunjea (at) kldp.org
v1.10, 2002 4¿ù
v1.1
2002³â 4¿ù 24ÀÏ
venal
1.1 ¾÷µ¥ÀÌÆ®
v1.0
2002³â 2¿ù 1ÀÏ
eunjea
1.0 ¹ø¿ª
ÀÌ ¹®¼´Â ¸®´ª½º¿¡¼ ¹Ìµð(MIDI)¸¦ »ç¿ëÇϴµ¥ ÇÊ¿äÇÑ ¼ÒÇÁÆ®¿þ¾î¿Í Çϵå¿þ¾î, ±×¸®°í ±× ÀýÂ÷µî¿¡ ´ëÇØ¼ ¼³¸íÇÏ¿´½À´Ï´Ù.
¼Ò°³
ÀÌ ¹®¼´Â ´ÙÀ½ÀÇ ³»¿ëÀ» °¡Áö°í ÀÖ´Ù:
¹Ìµð ÀÎÅÍÆäÀ̽º ¼³Á¤
¹Ìµð ÆÄÀÏ ¿¬ÁÖ
½ÃÄö½Ì (Sequencing)
¿ÜºÎ ¹Ìµð Àåºñ Á¶ÀÛ
¼ÒÇÁÆ®¿þ¾î »ç¿îµå ½Åµð»çÀÌÀú¿Í ¹Ìµð
¹Ìµð ¼ÀÇà ÄÚµå
¹®¼ÀÇ ¸ñÇ¥
ÀÌ ¹®¼ÀÇ ÃÊÁ¡Àº ¹Ìµð ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÑ ¿ÜºÎ ¹Ìµð ±â±âÀÇ »ç¿ëÀÌ´Ù.
¹®¼ÀÇ ÀúÀÛ±Ç
This HOWTO is copyrighted 2002 Phil Kerr.
This document is distributed under the terms of the GNU Free Documentation License. You should have received a copy along with it. If not, it is available from:
ÀÌ ¹®¼ÀÇ ÀúÀÛ±ÇÀº GNU ÀÚÀ¯ ¹®¼ GNU Free Documentation License¸¦ µû¸¥´Ù.
http://www.fsf.org/licenses/fdl.html.
Ãֽй®¼
ÀÌ ¹®¼ÀÇ °ø½Ä ¹öÀüÀº Linux Documentation Project <http://www.linuxdoc.org/>¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù.
°¡Àå ÃÖ½ÅÀÇ ¹®¼´Â <http://www.midi-howto.com>¿¡ ÀÖ´Ù.
ÀÌ ¹®¼ÀÇ ¸¶Áö¸· ¹ø¿ªº»Àº <http://kldp.org/~eunjea/>¿¡ ÀÖ´Ù.
°¨»çÀÇ ±Û
ÀÌ HOWTO´Â Hideki Saito°¡ ¾´ MIDI-SB mini-HOWTO¸¦ ±âÃÊ·Î ÇÏ¿´´Ù.
¹®¼¸¦ ¸®´ª½º Ä¿¹Â´ÏƼ¿¡ °ø°³ÇÑ ±×¿¡°Ô °¨»çµå¸°´Ù.
ÀÌ ¹®¼¿¡ Æ÷ÇÔµÈ ¼ÀÇà ÄÚµåµéÀº Linux Audio Developers (LAD) ¸ÞÀϸµ ¸®½ºÆ®¿¡ ±âÃÊÇÏ¿´´Ù.
¼Ò½º¸¦ »ç¿ëÇÏ°Ô ÇØ ÁØ ±×µé¿¡°Ô °¨»çµå¸°´Ù.
Ã¥ÀÓÀÇ ÇѰè
ÀÌ ¹®¼ÀÇ Á¤º¸¸¦ ÀÌ¿ëÇÔÀ¸·Î½á »ý±æ ¼ö ÀÖ´Â À§ÇèÀº ¿©·¯ºÐ ½º½º·Î°¡ Ã¥ÀÓÁ®¾ß ÇÑ´Ù.
º» ÀúÀÚ´Â ¹®¼ÀÇ ³»¿ëÀÌ ¾ß±âÇÒ ¼ö ÀÖ´Â ¾î¶°ÇÑ °á°ú¿¡ ´ëÇØ¼µµ Ã¥ÀÓÀ» ÁöÁö ¾Ê´Â´Ù.
ÀÌ ¹®¼ÀÇ °³³ä, ¿¹Á¦, Á¤º¸µéÀ» ÀÌ¿ëÇÔÀ¸·Î½á »ý±â´Â À§ÇèÀº ÀüÀûÀ¸·Î ¿©·¯ºÐ ÀÚ½ÅÀÌ Ã¥ÀÓ Á®¾ß ÇÑ´Ù.
Ưº°È÷ ¸í½ÃÇÏÁö ¾ÊÀº ÀÌ»ó ¸ðµç ÀúÀÛ±ÇÀº ±×°ÍÀÇ ¼ÒÀ¯ÀÚ°¡ °¡Áö°í ÀÖ´Ù.
ÀÌ ¹®¼¿¡¼ »ç¿ëÇÑ ¿ë¾î´Â »óÇ¥±Ç¿¡ ´ëÇÑ Æ¯º°ÇÑ Çã°¡¸¦ ¹ÞÁö ¾Ê¾Ò´Ù.
´Ü¼øÈ÷ »óǰÀ̳ª »óÇ¥ÀÇ À̸§À» ºÎ¸£±â À§ÇØ »ç¿ëÇÒ ¶§´Â ½ÂÀÎÀ» ¹ÞÀ» Çʿ䰡 ¾øÀ» °Í °°¾Æ¼ÀÌ´Ù.
½Ã½ºÅÛ¿¡ ¼³Ä¡ Çϱâ Àü¿¡, ±×¸®°í ÀûÀýÇÑ °£°ÝÀ¸·Î ½Ã½ºÅÛÀ» ¹é¾÷ÇÒ °ÍÀ» °·ÂÈ÷ ±ÇÇÏ´Â ¹ÙÀÌ´Ù.
¹ÌµðÀÇ ¹è°æ(±âÃÊ)
¹Ìµð´Â Çϵå¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾îÀÇ ÇÁ·ÎÅäÄÝ·Î ÀüÀÚ ¾Ç±âÀÇ Åë½Å¿¡ »ç¿ëµÈ´Ù.
1982³â°æ¿¡ ù¹øÂ° ¸±¸®Áî°¡ ÀÖ¾úÀ¸¸ç, »ç½Ç»ó ÀüÀÚ ¾Ç±âÀÇ Ç¥ÁØÀÌ µÇ¾ú´Ù.
ÀÌ ÇÁ·ÎÅäÄÝÀº ÄÉÀ̺í°ú ¾Ç±â¸¦ À§ÇÑ ¹°¸®ÀûÀÎ Çϵå¿þ¾î º¯¼ö¸¦ Á¤ÀÇÇϰí, À½¾Ç, ŸÀÌ¹Ö Á¤º¸ µ¥ÀÌÅ͸¦ ±³È¯ÇÏ´Â Åë½Å ÇÁ·ÎÅäÄݵéÀ» Á¦°øÇÑ´Ù.
¹Ìµð ÀÌÀü¿¡´Â ¾Æ³¯·Î±×(ÈÄ¿¡´Â ±âÃÊÀûÀÎ µðÁöÅÐ ¹æ½Ä) Åë½Å ÇÁ·ÎÅäÄÝÀÌ »ç¿ëµÇ¾ú´Ù.
1974³â ÀÌÀü¿¡´Â Àü¼±À» ÅëÇÑ Àü±âÀûÀÎ ½ÅÈ£·Î °Ç¹ÝµéÀ» ¿¬°áÇß´Ù.
1980 - 1981³â ÀÌÈÄ, ·Ñ·£µå°¡ DCB¶ó´Â ±âº» µðÁöÅÐ ÇÁ·ÎÅäÄÝÀ» ¸¸µé¾ú´Ù.
MIDI Manufacturers Association (MMA)ÀÌ Ç¥ÁØ ÇÁ·ÎÅäÄݰú ¹°¸®ÀûÀÎ ¿¬°áÀ» Á¤ÀÇÇÔÀ¸·Î½á ±ÔÁ¤¿¡ µû¸£´Â ¸ðµç ¹Ìµð ±â±âµéÀÇ ¿¬°áÀÌ °¡´ÉÇÏ°Ô µÇ¾ú´Ù.
1985³â°æ ºÎÅÍ ¹Ìµð ÀÎÅÍÆäÀ̽º°¡ °¡Á¤¿ë ÄÄÇ»ÅÍ¿ëÀ¸·Î ³ª¿Ô°í °ð ½ÃÄö½Ì ÇÁ·Î±×·¥µéµµ µîÀåÇß´Ù.
¹Ìµð ÀåÄ¡ ¼³Á¤
¹Ìµð ÀåÄ¡´Â »ç¿îµå Ä«µå¿¡ Æ÷ÇԵǰųª º°µµÀÇ ÀåÄ¡·Î Á¸ÀçÇÑ´Ù. ¿ÜºÎ ¹Ìµð ÀÎÅÍÆäÀ̽º´Â ½Ã¸®¾ó Æ÷Æ®³ª USB Æ÷Æ®¿¡ ¿¬°áµÇ±âµµ ÇÑ´Ù.
ù¹øÂ° °¡Àå Áß¿äÇѰÍÀº ´ç½ÅÀÇ Ä«µå°¡ Áö¿øµÇ´Â °ÍÀÎÁö È®ÀÎÇÏ´Â °ÍÀÌ´Ù!
http://www.alsa-project.org/soundcards.php3
http://www.4front-tech.com/osshw.html
¸®´ª½º ¹èÆ÷º»ÀÇ ¼³Á¤À» º¯°æÇÏ¿© ¹Ìµð ÀåÄ¡µéÀ» ¼³Ä¡ÇÑ´Ù.
°£´ÜÇϰÔ, ¸®´ª½º¸¦ Àß Áö¿øÇÏ´Â Ä«µåµéÀº OS¸¦ ¼³Ä¡ÇÒ ¶§ ¼³Á¤ÀÌ µÉ °ÍÀÌ´Ù.
¸®´ª½º Ä¿³ÎÀº OSS µå¶óÀ̹ö¿Í 2.5 ¹öÀü¿¡¼´Â ALSA µå¶óÀ̹ö¸¦ °¡Áö°í ÀÖ´Ù.
´ëºÎºÐÀÇ ¹èÆ÷º»µéÀº »ç¿îµå Ä«µå ¼³Á¤À» À§ÇÑ ÅøÀ» Á¦°øÇϴµ¥, »ç¿îµå Ä«µåÀÇ ¹Ìµð Æ÷Æ®¸¦ »ç¿ëÇÑ´Ù¸é À̰͵µ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
·¹µåÇòÀº sndconfig, ¼ö¼¼´Â yast, ¸Çµå·¹ÀÌÅ©´Â DrakConf¸¦ »ç¿ëÇÑ´Ù.
¸¸¾à ÀÌ·± ÅøµéÀÌ ¹Ìµð ÀÎÅÍÆäÀ̽º¸¦ ¼³Á¤ÇÒ ¼ö ¾ø°Å³ª ¹®Á¦°¡ ÀÖ´Ù¸é ´ÙÀ½ ´Ü°è¸¦ µû¸¥´Ù:
lsmodÀÇ Ãâ·Â °á°ú°¡ ¹Ìµð °ü·Ã ¸ðµâÀ» Æ÷ÇÔÇϰí Àִ°¡? ´ÙÀ½Àº OSS ±â¹Ý ½Ã½ºÅÛ¿¡¼ÀÇ ÀüÇüÀûÀÎ Ãâ·Â ¿¹ÀÌ´Ù.
[root@beatbox]# lsmod
Module Size Used by
lockd 32208 1 (autoclean)
sunrpc 54640 1 (autoclean) [lockd]
autofs 9456 2 (autoclean)
usb-ohci 12624 0 (unused)
usbcore 43632 1 [usb-ohci]
hisax 470096 0 (autoclean) (unused)
isdn 104208 0 (autoclean) [hisax]
slhc 4544 0 (autoclean) [isdn]
eepro100 16144 1 (autoclean)
#---- »ç¿îµå Ä«µå °ü·Ã ¸ðµâ
opl3 11376 2
mad16 7968 1
ad1848 16848 1 [mad16]
sb 34752 1 [mad16]
uart401 6384 1 [mad16 sb]
sound 58368 0 [opl3 mad16 ad1848 sb uart401]
soundlow 464 0 [sound]
soundcore 2800 6 [sb sound]
nls_cp437 3952 2 (autoclean)
vfat 9408 1 (autoclean)
fat 30432 1 (autoclean) [vfat]
ide-scsi 7664 0
mpu401, olp3, uart401, oss¸¦ º¸¶ó.
USB ÀåÄ¡¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é USB ¸ðµâÀ» È®ÀÎÇÏ´Â °ÍÀ» ÀØÁö ¸»¶ó.
sndstat ÆÄÀÏÀ» È®ÀÎÇØ º»´Ù:
[root@beatbox]# cat /dev/sndstat
OSS/Free:3.8s2++-971130
Load type: Driver loaded as a module
Kernel: Linux mega 2.2.17-21mdk #1 Thu Oct 5 13:16:08 CEST 2000 i686
Config options: 0
Installed drivers:
Card config:
Audio devices:
0: MAD16 WSS (82C930) (DUPLEX)
Synth devices:
0: Yamaha OPL3
Midi devices:
0: Mad16/Mozart
Timers:
0: System clock
Mixers:
0: MAD16 WSS (82C930)
¿©±â¼ mad16ÀÌ ¹Ìµð ÀåÄ¡¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¸ç À̰ÍÀº À§ÀÇ lsmod Ãâ·Â¿¡¼µµ º¼ ¼ö ÀÖ¾ú´Ù.
¸¸¾à ¹Ìµð¿Í °ü·ÃµÈ °ÍÀÌ ¾Æ¹«°Íµµ Ãâ·ÂµÇÁö ¾Ê´Â´Ù¸é /etc/modules.conf ÆÄÀÏÀ» È®ÀÎÇØº»´Ù.
[root@beatbox]# cat /etc/modules.conf
alias net-pf-4 ipx
pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
alias usb-interface usb-ohci
alias parport_lowlevel parport_pc
alias block-major-11 scsi_hostadapter
pre-install plip modprobe parport_pc ; echo 7 > /proc/parport/0/irq
alias scsi_hostadapter ide-scsi
alias eth0 eepro100
alias eth1 hisax
#---- »ç¿îµå Ä«µå
alias sound-slot-0 mad16
options sound dmabuf=1
alias midi opl3
options opl3 io=0x388
options sb support=1
options mad16 io=0x530 irq=5 dma=0 dma16=1 mpu_io=0x300 mpu_irq=7 joystick=1
´ÙÀ½Àº ¹Ìµð ¸ðµâÀÌ ·ÎµåµÇ¾úÀ»¶§ /proc/modules À» È®ÀÎÇÑ °á°úÀÌ´Ù.
[root@mega /proc]# cat modules
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial(auto)
#---- ¹Ìµð ÀåÄ¡
0300-0303 : MPU-401 UART
0376-0376 : ide1
0388-038b : Yamaha OPL3
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
0530-0533 : MAD16 WSS config
0534-0537 : MAD16 WSS
de00-de1f : Intel Speedo3 Ethernet
f000-f007 : ide0
f008-f00f : ide1
À§¿Í ºñ½ÁÇÑ °á°ú°¡ È®ÀεǾî¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê´Ù¸é ¹Ìµð µå¶óÀ̹ö¸¦ ¼³Ä¡ÇؾßÇÒ Çʿ䰡 ÀÖ´Ù.
¸¸¾à ALSA 0.5x µå¶óÀ̹ö¸¦ »ç¿ëÇÒ °Í À̶ó¸é Valentijn Sessink°¡ ¾´ Alsa-sound-mini-HOWTO ¹®¼¸¦ Âü°íÇÑ´Ù:
http://www.linuxdoc.org/HOWTO/mini/Alsa-sound.html
ALSA µå¶óÀ̹ö 0.9x ÀÌÈÄ ¹öÀüÀº Madhu MaddyÀÇ ALSA-HOWTO ¹®¼¸¦ Àо¶ó.
http://www.alsa-project.org/alsa-doc/alsa-howto/
ALSA 0.9 ºü¸¥ ¼³Ä¡
¾Æ·¡´Â ALSA 0.9 µå¶óÀ̹ö¿Í ´ëºÎºÐÀÇ ¹Ìµð ÇÁ·Î±×·¥ÀÇ ¼³Ä¡¸¦ À§ÇØ ÇÊ¿äÇÑ ¶óÀ̺귯¸®µéÀ» ¼³Ä¡Çϱâ À§ÇÑ ¿¹½ÃÀÌ´Ù.
[root@beatbox] # tar jxvf alsa-driver....tar.bz2
[root@beatbox] # cd alsa-driver.....
[root@beatbox] # ./configure
messages - no errors
[root@beatbox] # make
messages - no errors
[root@beatbox] # make install
messages - no errors
[root@beatbox] # ./snddevices
ÀÌÁ¦ /etc/modules.conf ÆÄÀÏÀ» ÆíÁýÇϴµ¥, ´Ù¸¥ ¹èÆ÷º»¿¡¼´Â ´Ù¸¥ µð·ºÅ丮¿¡ ÀÖÀ» ¼ö ÀÖ´Â ALSA ÆÄÀÏÀ» ÆíÁýÇÑ´Ù.
ÆÄÀÏ¿¡´Â ¹Ìµð°¡ ¾Æ´Ñ ´Ù¸¥ ÀåÄ¡µéÀ» À§ÇÑ Á¤º¸µéµµ ÀÖÀ¸´Ï ÁÖÀÇÇØ¼ ´Ù·ç±â ¹Ù¶õ´Ù.
ÀϹÝÀûÀ¸·Î ¼³Á¤ ÆÄÀÏ¿¡´Â ALSA³ª OSS¸¦ À§ÇÑ ¿¹Àü ¼³Á¤µéÀÌ ÀûÇô ÀÖÀ» °ÍÀ̹ǷÎ, Áö¿ìµçÁö Ä¿¸ÇÆ® 󸮸¦ ÇϵçÁö ÇØ¾ß ÇÑ´Ù.
¾Æ·¡´Â OSS ±â¹ÝÀÇ ALSA ¼³Á¤À» À§ÇÑ ÀüÇüÀûÀÎ modules.conf ÆÄÀÏÀÌ´Ù.
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 (MIDI/Sound card)
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-12 snd-pcm-oss
(MIDI/Sound card) ºÎºÐ¿¡ ÀûÇÕÇÑ Ä«µå À̸§À» Àû´Â´Ù. ÀÌ Á¤º¸´Â ALSA À¥»çÀÌÆ®¿¡¼ ãÀ» ¼ö ÀÖ´Ù.
ÀÌÁ¦ ALSA ±â¹Ý ÇÁ·Î±×·¥µéÀ» ÀÌ¿ëÇϱâ À§ÇÑ ¶óÀ̺귯¸® ÆÄÀϵéÀ» ¼³Ä¡ÇؾßÇÑ´Ù. ÀÌ ÆÄÀϵéÀº alsa-libs ÆÐŰÁö¿¡ ÀÖ´Ù.
alsa-drivers ¿Í alsa-libs ÀÇ ½ÖÀ¸·Î ¸ÅÄ¡µÇ´Â °ÍÀ» È®ÀÎÇ϶ó!
[root@beatbox] # tar jxvf alsa-libs....tar.bz2
[root@beatbox] # cd alsa-libs.....
[root@beatbox] # ./configure
messages - no errors
[root@beatbox] # make
messages - no errors
[root@beatbox] # make install
ÀÌÁ¦ ¼³Á¤ÀÌ ³¡³µ´Ù :)
°£´ÜÇÑ C ÇÁ·Î±×·¥À¸·Î Ã¼Å©ÇØ º¼ ¼ö ÀÖ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ ÄÄÆÄÀÏµÇ°í ½ÇÇàµÇ¸é ½Ã½ºÅÛ ¼³Á¤ÀÌ Á¦´ë·Î µÈ °ÍÀÌ´Ù.
// ÀÌ·¸°Ô ÄÄÆÄÀÏÇ϶ó: gcc alsatest.c -o alsatest -lasound
#include <stdio.h>
#include <alsa/asoundlib.h>
int main (int argc, char *argv[])
{
snd_seq_t *seq_handle;
if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
fprintf(stderr, "Error opening ALSA sequencer.\n");
exit(1);
}
printf("The ALSA libraries are installed.\n");
return 0;
}
Áö¿¬(Latency)
¹Ìµð´Â ½Ç½Ã°£ ÇÁ·ÎÅäÄÝ·Î latency´Â ½É°¢ÇÑ ¹®Á¦°¡ µÉ ¼ö ÀÖ´Ù.
ÇöÀç ¸î¸î °³¹ßÀÚµéÀÌ À̰Ͱú °ü·ÃµÇ¾î ¸®´ª½º°¡ ¹Ìµð Ç÷§ÆûÀ¸·Î »ç¿ëÇϱâ ÀûÇÕÇϵµ·Ï Ä¿³Î ÇØÅ·À» Çϰí ÀÖ´Ù.
±âÁ¸ÀÇ ¸®´ª½º Ä¿³Îµµ º° ¹«¸®¾øÀÌ »ç¿ë°¡´É ÇÏÁö¸¸ low-latency ÆÐÄ¡¸¦ Àû¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â ´ÙÀ½ ¸µÅ©¿¡¼ ãÀ» ¼ö ÀÖ´Ù:
http://www.gardena.net/benno/linux/audio/
¼ÒÇÁÆ®¿þ¾î
¸®´ª½º »ó¿¡¼ ¹Ìµð¿¡ ´ëÇÑ °ü½ÉÀÌ ³ô¾ÆÁ® °¨¿¡ µû¶ó ¸¹Àº ¼ÒÇÁÆ®¿þ¾îµéÀÌ °³¹ßµÇ°í ÀÖÀ¸¹Ç·Î, ¿©±â¿¡¼ ¸ðµç ¹Ìµð ¼ÒÇÁÆ®¿þ¾î¸¦ ´Ù·çÁö´Â ¸øÇÒ °ÍÀÌ´Ù. ÇÏÁö¸¸, ÀûÇÕÇÑ ¾îÇø®ÄÉÀ̼ÇÀ» °í¸£´Âµ¥ µµ¿òÀÌ µÉ°Í ÀÌ´Ù.
¸¸¾à ¿©±â¿¡ ³ª¿µÇÁö ¾ÊÀº ¹Ìµð ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÁßÀ̰ųª ¾Ë°í ÀÖ´Ù¸é ÀúÀÚ¿¡°Ô ¾Ë·Á Áֱ⠹ٶõ´Ù.
µå¶óÀ̹ö
Alsa µå¶óÀ̹ö
Alsa (Advanced Linux Sound Architecture)´Â ¸î°¡Áö ºÎºÐÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù.
±× ù¹øÂ°´Â ¿ÏÀüÈ÷ ¸ðµâÈµÈ »ç¿îµå µå¶óÀ̹ö·Î ¸ðµâÀÇ ÀÚµ¿ ·Îµù, devfs, isapnp ¼³Á¤°ú ¾Æ³¯·Î±×/µðÁöÅÐ ¿Àµð¿À Á¢±Ù, ¹Í¼, ½Åµð»çÀÌÀú, DSP, MIDI ¿Í ¿Àµð¿À Çϵå¿þ¾îÀÇ Å¸ÀÌ¹Ö ÄÜÆ®·Ñ·¯µîÀÌ´Ù. ¶ÇÇÑ À̰ÍÀº Ä¿³Î ¼öÁØÀÇ ½ÃÄö¼¸¦ Æ÷ÇÔÇϰí ÀÖÀ¸¸ç, OSS/Free ¾îÇø®ÄÉÀ̼ǰú ȣȯµÇ°í, ¾îÇø®ÄÉÀÌ¼Ç (Ŭ¶óÀ̾ðÆ®/¼¹ö, Ç÷¯±×ÀÎ, PCM °øÀ¯/¸ÖƼ Ç÷¢½Ì, PCM meteringµî)À» °´Ã¼ÁöÇâ C ¶óÀ̺귯¸®¿Í ALSA Ä¿³Î µå¶óÀ̹öÀÇ ±â´Éµé·Î Áö¿øÇÑ´Ù.
http://www.alsa-project.org/
OSS
OSS »ç¿îµå Ä«µå µå¶óÀ̹ö´Â ´ëºÎºÐÀÇ À¯¸íÇÑ »ç¿îµå Ä«µå¸¦ ¸®´ª½º¿Í FreeBSD¿¡¼ Áö¿øÇÑ´Ù. ÀÌ µå¶óÀ̹ö´Â µðÁöÅÐ ¿Àµð¿À, ¹Ìµð, ½Åµð»çÀÌÀú, ¹Í¼µéÀ» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç, Open Sound System API¸¦ µû¸¥´Ù. OSS´Â »ç¿ëÀÚ ÆíÀÇÀÇ GUI¸¦ Á¦°øÇÏ¿© Æí¸®ÇÏ°Ô ¼³Ä¡¿Í ¼³Á¤À» ÇÒ ¼ö ÀÖ´Ù. À̰ÍÀº 200 °¡Áö ÀÌ»óÀÇ »ç¿îµå Ä«µå¸¦ Áö¿øÇϰí ÀÚµ¿À¸·Î ÀνÄÇÑ´Ù. ¶ÇÇÑ Plug-n-Play¸¦ Áö¿øÇϰí PCI »ç¿îµå Ä«µå¿Í full duplex ¿Àµð¿À¸¦ Áö¿øÇÑ´Ù.
http://www.opensound.com/
Notemidi
Notemidi´Â ³ëÆ®ºÏ/·¦Å¾ ÄÄÇ»ÅÍÀÇ RS-232 ½Ã¸®¾ó Æ÷Æ®¸¦ »ç¿ëÇÑ ¹Ìµð Ãâ·Â µå¶óÀ̹öÀÌ´Ù. ³ëÆ®¹Ìµð´Â MIDIator MS-124W, ·Î·£µå »ç¿îµå ĵ¹ö½º ¸ðµâ, ¾ß¸¶ÇÏ MU-x ½Ã¸®Áî »ç¿îµå ¸ðµâ°ú »ç¿ë ÇÒ ¼ö ÀÖ´Ù.
http://www.michaelminn.com/linux/notemidi
¹Ìµð ÆÄÀÏ ¿¬ÁÖ±â
KMid
KMid´Â ¸®´ª½º¿Í FreeBSD¸¦ À§ÇÑ X11 / KDE ±â¹ÝÀÇ ¹Ìµð ¿¬ÁÖ±âÀÌ´Ù. À̰ÍÀº °¡¶ó¿ÀÄÉ ÆÄÀÏÀÇ ÅØ½ºÆ®¸¦ Ç¥½ÃÇÏ°í »ö»óÀ» º¯È½ÃÄÑ ½±°Ô µû¶ó ºÎ¸¦ ¼ö ÀÖ´Â ±â´Éµµ °¡Áö°í ÀÖ´Ù. KMid´Â /dev/sequencer¸¦ Ãâ·Â ÀåÄ¡·Î Áö¿øÇÏ¿© ½Åµð, AWE, FM, GUS Ä«µå¸¦ Áö¿øÇÑ´Ù.
http://perso.wanadoo.es/antlarr/kmid.html
Pmidi
Pmidi´Â °£´ÜÇÑ ¸í·ÉÇà ÇÁ·Î±×·¥À¸·Î ALSA ½ÃÄö¼¸¦ ÅëÇØ ¹Ìµð ÆÄÀÏÀ» ¿¬ÁÖÇÑ´Ù.
http://www.parabola.demon.co.uk/alsa/pmidi.html
TiMidity++
TiMidity´Â ¹Ìµð - WAVE º¯È¯±â·Î, Gravis Ultrasound(*)-ȣȯ ÆÐÄ¡ ÆÄÀÏÀ» »ç¿ëÇÏ¿© ÀϹÝÀûÀÎ ¹Ìµð ÆÄÀÏÀ» µðÁöÅÐ ¿Àµð¿À µ¥ÀÌÅÍ·Î º¯È¯ÇØÁØ´Ù.
¿Àµð¿À µ¥ÀÌÅÍ´Â ¾î¶°ÇÑ ¼Ò¸® ÀåÄ¡¸¦ ÅëÇØ¼µµ ¿¬ÁÖµÉ ¼ö ÀÖÀ¸¸ç, µð½ºÅ©¿¡ ÀúÀåÇÒ ¼öµµ ÀÖ´Ù. ºü¸¥ ÄÄÇ»ÅÍ¿¡¼´Â ½Ç½Ã°£À¸·Î ¿¬ÁÖ°¡ °¡´ÉÇÏ´Ù.
http://www.goice.co.jp/member/mo/timidity/
Sequencers
Brahms
Brahms´Â ½ÃÄö¼¿Í À½¾Ç ±âº¸ ÇÁ·Î±×·¥À¸·Î ¾Çº¸-, ÇǾƳë·Ñ-, µå·³-, ¸¶½ºÅÍ Æ®·¢ ÆíÁý±â µîÀÇ ÆíÁý ¸ðµå¸¦ Á¦°øÇÑ´Ù. ¹ÌµðÀÇ ¼ö/ÃâÀÔ ¶ÇÇÑ Áö¿øÇϸç aRts-0.3.4 ¿Í »ç¿ëÇÏ¿© ¿þÀÌºê ÆÄÀÏÀ» ¿¬ÁÖÇÏ°í ¼ÒÇÁÆ®¿þ¾î ½Åµð»çÀÌÀú·ÎÀÇ ¹Ìµð¹ö½º¸¦ »ç¿ëÇÑ ¹Ìµð À̺¥Æ® Ãâ·Âµµ °¡´ÉÇÏ´Ù.
KooBase·Îµµ ¾Ë·ÁÁ® ÀÖ´Ù.
http://brahms.sourceforge.net/
Anthem
AnthemÀº Áøº¸ÀûÀÎ ¿ÀÇ ¼Ò½º ¹Ìµð ½ÃÄö¼ÀÌ´Ù. AnthemÀº ¼¼·ÃµÇ°í °´Ã¼ ÁöÇâÀûÀÎ ³ë·¡ ±â¹ýÀ» »ç¿ëÇÑ ³ìÀ½, ÆíÁý, ¿¬ÁÖµîÀÌ °¡´ÉÇÏ´Ù.
http://anthem.sourceforge.net/
Jazz++
JAZZ++´Â ¸®´ª½º¿Í À©µµ¿ì¸¦ À§ÇÑ ¹Ìµð ½ÃÄö¼ÀÌ´Ù.
http://www.jazzware.com/cgi-bin/Zope.cgi/jazzware/
Linux Ultimate Music Editor
UltiMusE-LX (the Ultimate Music Editor)´Â ÀÛ°î ÇÁ·Î±×·¥À¸·Î ´ç½ÅÀÌ À½¾ÇÀ» ¾²´Âµ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ´ç½ÅÀº ¸¶¿ì½º/Űº¸µå·Î ¾Çº¸¸¦ ±×¸± ¼ö ÀÖÀ¸¸ç, ´ëºÎºÐÀÇ Ç¥ÁØ ±âº¸¹ýÀ» Áö¿øÇϰí, ¹Ìµð Àåºñ ÆÐÄ¡ º¯È¯, À̺¥Æ®, ¸®¾óŸÀÓ Å¬·°µîÀ» Áö¿øÇÑ´Ù.
http://hometown.aol.com/knudsenmj/myhomepage/umuselx.htm
Melys
Melys´Â Advanced Linux Sound Architecture (ALSA)¸¦ À§ÇÑ ¹Ìµð ½ÃÄö¼ ¾îÇø®ÄÉÀ̼ÇÀÌ´Ù. Melys´Â ALSAÀÇ ½ÃÄö¼ Áö¿øÀ» »ç¿ëÇϸç GNOME ȯ°æ¿¡¼ ÀÛµ¿ÇÑ´Ù.
http://www.parabola.demon.co.uk/melys/
MidiMountain Sequencer
MidiMountainÀº Ç¥ÁØ ¹Ìµð ÆÄÀÏ ÆíÁý±âÀÌ´Ù. »ç¿ëÇϱ⠽¬¿î ÀÎÅÍÆäÀ̽º·Î ¹Ìµð ÆÄÀÏÀ» Ãʺ¸ÀÚµµ ½±°Ô ÆíÁýÇÏ°í ¸¸µé¼ö ÀÖÀ¸¸ç, ÇÇ¾Æ³ë ·Ñ¿¡¼ ºÎÅÍ ¹ÙÀ̳ʸ® exclusive ¸Þ¼¼Áö±îÁö ¸ðµç Ç¥ÁØ ¹Ìµð ÇÁ·ÎÅäÄÝÀÇ ÆíÁýÀÌ °¡´ÉÇÏ´Ù.
http://www.midimountain.com/
MusE
MusE´Â Qt 2.1 ±â¹ÝÀÇ ¹Ìµð ½ÃÄö¼·Î ³ìÀ½°ú ÆíÁýÀÌ °¡´ÉÇÏ´Ù. ½ÃÄö¼°¡ ¿¬ÁÖÁß¿¡ À̺¥Æ®¸¦ ÇǾƳë·Ñ°ú ¾Çº¸ ÆíÁý±â¿¡¼ ½Ç½Ã°£À¸·Î ¼öÁ¤ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ³ìÀ½µÈ ¹Ìµð À̺¥Æ®´Â ±×·ì°ú ºÎºÐÀ¸·Î Æí°î ¼öÁ¤±â¿¡¼ ´Ù·ê ¼ö ÀÖ´Ù.
http://muse.seh.de/
Rosegarden
·ÎÁî°¡µçÀº ¹Ìµð ½ÃÄö¼¿Í ¾Çº¸ ÆíÁý±âÀÌ´Ù.
http://www.all-day-breakfast.com/rosegarden/
MIDI Trackers
tektracker
ttrk (tektracker)´Â Æ®·¢Ä¿ÇüÀÇ ÆíÁý±â¸¦ °¡Áö°í ÀÖ´Â ÄÜ¼Ö¿ë ¹Ìµð ½ÃÄö¼ÀÌ´Ù.
¹ÂÆ® ´ÜÃß¿Í ·çÇÁ Á¦¾î°¡ °¡´ÉÇÑ ¿¬Áֱ⸦ ³»ÀåÇϰí ÀÖ´Ù.
ttrk´Â ¹Ìµð Ŭ·° ÆÞ½º¸¦ º¸³»´Â °Í°ú ½ÌÅ©°¡ °¡´ÉÇÏ´Ù.
http://div8.net/ttrk/
ShakeTracker
ShakeTracker´Â Æ®·¢Ä¿ ÀÎÅÍÆäÀ̽º¿Í ¿ÏÀüÇÑ ±â´ÉÀÇ ¹Ìµð ½ÃÄö¼¸¦ ÁöÇâÇÑ´Ù.
À̰ÍÀº ´ëºÎºÐÀÇ Æ®·¢Ä¿ È¿°ú¸¦ Àß Áö¿øÇϸç Impulse Æ®·¢Ä¿¸¦ »ç¿ëÇÏ´ø »ç¿ëÀÚµéÀº ½±°Ô ÀûÀÀÇÒ °ÍÀÌ´Ù.
http://reduz.com.ar/shaketracker/
µå·³ ÆíÁý±â
DrumPatterns
µå·³ÆÐÅÏÀº ¿ÀÇ ¼Ò½º·Î À¥ ÁöÇâÀûÀÎ µå·³ ÆÐÅÏ »ý¼º±âÀÌ´Ù. À̰ÍÀº µå·³ ÆÐÅϰú Áøº¸ÀûÀÎ ¸®µëÀÇ ±âÃʵîÀ» °¡¸£Ä¡´Â ¸ñÀûÀ¸·Î »ç¿ëµÉ ¼ö ÀÖ´Ù.
¾Çº¸, ¹Ìµð·ÎÀÇ Ãâ·ÂÀÌ °¡´ÉÇÏ¸ç ¸î½Ã°£ ºÐ·®ÀÇ ¿¹Á¦¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.
http://www.linux-france.org/prj/drumpatterns/index-en.html
ÆÐÄ¡ ÆíÁý±â
JSynthLib
JSynthLib´Â ÀÚ¹Ù·Î ¾º¿©Áø ¿ÀÇ ¼Ò½º ½Åµð»çÀÌÀú ÆÐÄ¡ ÆíÁý±â / ¶óÀ̺귯¸®¾ÈÀÌ´Ù.
¼ÒÇÁÆ®¿þ¾î ½Åµð
Spiral Synth´Â Æú¸®Æ÷´Ð ¾Æ³¯·Î±× ½Åµð»çÀÌÀú¸¦ ¸ðµ¨·Î ÇÏ¿©, ¾Æ³¯·Î±× ½Åµð»çÀÌÀúÀÇ ¼Ò¸®³ª ÀâÀ½À» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. ¶ÇÇÑ ´ç½ÅÀº À̰ÍÀ» »ç¿ëÇÏ¿© ÀÌ»óÇÑ ¼Ò¸®¸¦ ¸¸µé¾î ³¾ ¼öµµ ÀÖ´Ù. ¹Ìµð¸¦ Áö¿øÇϰí Ç¥ÁØ OSS/Free ¼Ò¸® Ãâ·Â (/dev/dsp)¸¦ »ç¿ëÇÑ´Ù.
http://www.pawfal.org/SpiralSynth/
UltraMaster Juno-6
UltraMaster Juno-6´Â Roland Juno-6 Æú¸®Æ÷´Ð ½Åµð»çÀÌÀú¸¦ ÀçÇöÇÑ ¼ÒÇÁÆ®¿þ¾îÀÌ´Ù.
80³â´ë ÃÊ ½ºÅ¸ÀÏÀÇ arpeggiator, ÄÚ·¯½º¸¦ ½Ç½Ã°£ 64ºñÆ® ³»Àå ULTRANALOG ¿þÀ̺ê ÇÕ¼ºÀ½À¸·Î Áö¿øÇϸç, 100°³ ÀÌ»óÀÇ ÀڽŸ¸ÀÇ ÆÐÄ¡¸¦ ÀúÀåÇÒ ¼ö ÀÖ´Ù.
¸ðµç º¯¼öµéÀº GUI¿Í ¿ÜºÎ ¹Ìµð ÄÜÆ®·Ñ·¯¸¦ ÅëÇØ ½Ç½Ã°£À¸·Î Á¶Àý °¡´ÉÇÏ´Ù.
http://www.ultramaster.com/juno6/index.html
Ç÷¯±×ÀÎ
xmms-midi
x11amp¸¦ À§ÇÑ ¹Ìµð ÆÄÀÏ Áö¿ø (timidity »ç¿ë). ¼³Á¤ ´Ùµð¾ó·Î±× âÀ» ÅëÇØ Çã¼úÇÑ ¹Í¼ ÀÎÅÍÆäÀ̽º°¡ Á¦°øµÈ´Ù.
http://ban.joh.cam.ac.uk/~cr212/xmms-midi/
°³¹ß
sfront
Sfont´Â ´É·üÀûÀÎ C ÇÁ·Î±×·¥À¸·Î MPEG 4 ±¸Á¶¸¦ °¡Áö´Â ¿Àµð¿À (MP4-SA) ºñÆ®½ºÆ®¸²À» Áö¿øÇÑ´Ù. MP4-SA´Â algorithmic »ç¿îµåÀÇ Ç¥ÁØÀ¸·Î ¿Àµð¿À ½Ã±×³Î ÇÁ·Î¼¼½Ì ¾ð¾î (SAOL)°ú ¾Çº¸ ¾ð¾î(SASL°ú ÀüÅëÀûÀÎ ¹Ìµð ÆÄÀÏ Æ÷¸Ë)·Î ÀÌ·ç¾îÁø´Ù. sfont´Â ¸®´ª½º »ó¿¡¼ ½Ç½Ã°£, low-latency ¿Àµð¿À ÀÔ/Ãâ·Â, »ç¿îµå Ä«µå·Î ºÎÅÍ ·ÎÄà ¹Ìµð ÀԷ°ú RTP ¿Í SIP¸¦ »ç¿ëÇÑ ³×Æ®¿öÅ©»óÀÇ ¹Ìµð ÀÔ·ÂÀ» Áö¿øÇÑ´Ù.
MP4-SA¿¡ °üÇÑ ¹®¼¸¦ À¥ »çÀÌÆ®¿¡¼ ÀÐÀ» ¼ö ÀÖ´Ù.
http://www.cs.berkeley.edu/~lazzaro/sa/index.html
jMax
jMax´Â dataflow circuitÀ» µðÀÚÀÎÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
±âº» µ¥ÀÌÅÍ Çü½ÄÀº integers, symbols, listsµîÀÌ »ç¿ëµÉ ¼ö ÀÖÀ¸¸ç, À̰ÍÀº À̺¥Æ®-µå¶óÀÌºì ½Ã½ºÅÛÀ¸·Î ¹Ìµð 󸮿¡ »ç¿ë µÈ´Ù.
µÎ¹øÂ° ½Ã½ºÅÛ ºÎºÐ(DSP)´Â circuitÀÇ ½Ã±×³Î È帧À» Áö¼ÓÇÏ°Ô ÇØÁÖ¸ç, À̰ÍÀº PCM »ç¿îµå(¿¹: ¸¶ÀÌÅ©·ÎÆù, ¼Ò¸® ÆÄÀϵî)¿¡¼ ¸Å¿ì À¯¿ëÇÏ´Ù.
½Ã½ºÅÛÀº µ¿Àû ¶óÀ̺귯¸®¿¡ ÀÇÇØ È®ÀåÀÌ °¡´ÉÇϰí, ´ç½ÅÀº µ¥ÀÌÅÍ ÇÁ·Î¼¼¼, µ¥ÀÌÅÍ Çü, GUI ¿ä¼Ò, µð¹ÙÀ̽º Çü½ÄµîÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. µ¥ÀÌÅÍ ÇÁ·Î¼¼¼´Â circuit¿¡ µû¶ó µðÀÚÀεǰí Àç »ç¿ëÇÒ ¼ö ÀÖ´Ù.
http://www.ircam.fr/equipes/temps-reel/jmax/
TSE3
TSE3´Â C++·Î ¾º¿©Áø °·ÂÇÑ ¿ÀÇ ¼Ò½º ½ÃÄö¼ ¿£ÁøÀÌ´Ù.
À̰ÍÀÌ '½ÃÄö¼ ¿£Áø'ÀÎ ÀÌÀ¯´Â À¯Àú ÀÎÅÍÆäÀ̽º°¡ ¾ø±â ¶§¹®ÀÌ´Ù. ½ÃÄö¼ ¾îÇø®ÄÉÀÌ¼Ç ¶Ç´Â ¸ÖƼ¹Ìµð¾î ÆÐŰÁö´Â TSE3 ¶óÀ̺귯¸®¿Í ¿¬°áµÇ¾î »ç¿ëÀÚ¿¡°Ô ¹Ìµð ½ÃÄö½Ì ±â´ÉÀ» Á¦°øÇÒ ¼ö ÀÖ´Ù.
http://TSE3.sourceforge.net/
KeyKit
KeyKitÀº ´ÙÁß Ã³¸® ÇÁ·Î±×·¡¹Ö ¾ð¾î 󸮱â (awk¿¡¼ ¿µ°¨À» ¾òÀº)·Î ½Ç½Ã°£, algorithmic ¹Ìµð Á¶ÀÛ¿¡ ¾²ÀÏ ¼ö ÀÖ´Ù. KeyKitÀÇ GUI´Â ÀÌ·¯ÇÑ algorithmic À½¾Ç ½ÇÇèÀ» À§ÇÑ µµ±¸¸¦ Á¦°øÇϸç, ´ÙÁß Æ®·¢ ½ÃÄö¼¿Í µå·³ ÆÐÅÏ ÆíÁý±â¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.
GUI¿Í µµ±¸µéÀº ¸ðµÎ KeyKit ¾ð¾î ÀÚü·Î ¾º¿©Á® ÀÖ´Ù. À̰ÍÀº »ç¿ëÀÚ°¡ Á÷Á¢ »õ·Î¿î µµ±¸¸¦ Ãß°¡ ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
http://nosuch.com/keykit/
¹Ìµð °³¹ß
¹Ìµð ¾îÇø®ÄÉÀÌ¼Ç °³¹ßÀ» À§Çؼ± ÁÁÀº ¿¹Á¦µéÀÌ Á¾Á¾ ÇÊ¿äÇÏ´Ù.
For those looking to develop MIDI applications, good examples are often needed to get you started.
´ÙÀ½ÀÇ ¿¹Á¦µéÀº LAD ¸ÞÀϸµ ¸®½ºÆ®¿¡ ¿¹Á¦³ª ¹®¼/Âü°íÀÚ·á·Î Æ÷½ºÆÃ µÆ´ø °ÍµéÀÌ´Ù.
The following examples were posted to the LAD mailing list in a thread about
examples and documentation/tutorials.
¾Æ·¡´Â Dr. Matthias NagorniÀÇ ALSA 0.9 ½ÃÄö¼ Ŭ¶óÀÌ¾ðÆ® ¼ÀÇÃÀÌ´Ù.
À̰ÍÀº ÀÔ·Â °¡´ÉÇÑ(writeable) ½ÃÄö¼ Ŭ¶óÀÌ¾ðÆ®¸¦ ¸¸µé°í, Pitchbender-, 7-Bit Controller-, Note-event µéÀ» stderr¸¦ ÅëÇØ Ãâ·ÂÇÑ´Ù.
´õ ¸¹Àº ¿¹Á¦µéÀ» ÀÌ ¹®¼ÀÇ ¸µÅ© ¼½¼Ç¿¡ ÀÖ´Â MatthiasÀÇ »çÀÌÆ®¸¦ ÅëÇØ ÀÔ¼öÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÇ϶ó:
[phil@beatbox] $ gcc seqdemo.c -o seqdemo -lasound
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <alsa/asoundlib.h>
snd_seq_t *open_seq();
void midi_action(snd_seq_t *seq_handle);
snd_seq_t *open_seq() {
snd_seq_t *seq_handle;
int portid;
if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
fprintf(stderr, "Error opening ALSA sequencer.\n");
exit(1);
}
snd_seq_set_client_name(seq_handle, "ALSA Sequencer Demo");
if ((portid = snd_seq_create_simple_port(seq_handle, "ALSA Sequencer Demo",
SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
fprintf(stderr, "Error creating sequencer port.\n");
exit(1);
}
return(seq_handle);
}
void midi_action(snd_seq_t *seq_handle) {
snd_seq_event_t *ev;
do {
snd_seq_event_input(seq_handle, &ev);
switch (ev->type) {
case SND_SEQ_EVENT_CONTROLLER:
fprintf(stderr, "Control event on Channel %2d: %5d \r",
ev->data.control.channel, ev->data.control.value);
break;
case SND_SEQ_EVENT_PITCHBEND:
fprintf(stderr, "Pitchbender event on Channel %2d: %5d \r",
ev->data.control.channel, ev->data.control.value);
break;
case SND_SEQ_EVENT_NOTEON:
fprintf(stderr, "Note On event on Channel %2d: %5d \r",
ev->data.control.channel, ev->data.note.note);
break;
case SND_SEQ_EVENT_NOTEOFF:
fprintf(stderr, "Note Off event on Channel %2d: %5d \r",
ev->data.control.channel, ev->data.note.note);
break;
}
snd_seq_free_event(ev);
} while (snd_seq_event_input_pending(seq_handle, 0) > 0);
}
int main(int argc, char *argv[]) {
snd_seq_t *seq_handle;
int npfd;
struct pollfd *pfd;
seq_handle = open_seq();
npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN);
pfd = (struct pollfd *)alloca(npfd * sizeof(struct pollfd));
snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN);
while (1) {
if (poll(pfd, npfd, 100000) > 0) {
midi_action(seq_handle);
}
}
}
¾Æ·¡´Â Nick Dowell °¡ ¸¸µç ALSA 0.9 MIDI ¸®´ÙÀÌ·ºÅÍ(redirector) ÀÌ´Ù.
/* ALSA Sequencer MIDI redirector.
ÀÎDzÀ» ¹Ìµð ä³ÎÀ» ÅëÇØ ¼³Á¤µÈ ¾Æ¿ôDzÀ¸·Î ¸®´ÙÀÌ·ºÆ®ÇÑ´Ù.
(Linux-Audio-Dev ¿¡¼ Nathaniel Virgo ¿¡°Ô¼ ¿äû¹ÞÀº °ÍÀÓ ;-)
Dr. Matthias Nagorni ÀÇ ALSA seq ¿¹Á¦¸¦ ±âÃÊ·Î ÇßÀ½
Nick Dowell <nixx@nixx.org.uk>
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <alsa/asoundlib.h>
int
main()
{
snd_seq_t *seq_handle;
snd_seq_event_t *ev;
int i;
int portid; /* input port */
int oportid[16]; /* output ports */
int npfd;
struct pollfd *pfd;
char txt[20];
if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
fprintf(stderr, "Error opening ALSA sequencer.\n");
exit(1);
}
snd_seq_set_client_name(seq_handle, "MIDI Redirect");
/* open one input port */
if ((portid = snd_seq_create_simple_port
(seq_handle, "Input",
SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE,
SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
fprintf(stderr, "fatal error: could not open input port.\n");
exit(1);
}
/* open 16 output ports for the MIDI channels */
for (i=0; i<16; i++){
sprintf( txt, "MIDI Channel %d", i );
if ((oportid[i] = snd_seq_create_simple_port
(seq_handle, txt,
SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ,
SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
fprintf(stderr, "fatal error: could not open output port.\n");
exit(1);
}
}
npfd = snd_seq_poll_descriptors_count(seq_handle, POLLIN);
pfd = (struct pollfd *)alloca(npfd * sizeof(struct pollfd));
snd_seq_poll_descriptors(seq_handle, pfd, npfd, POLLIN);
while (1) /* main loop */
if (poll(pfd, npfd, 1000000) > 0){
do {
snd_seq_event_input(seq_handle, &ev);
snd_seq_ev_set_source( ev, oportid[ev->data.control.channel] );
snd_seq_ev_set_subs( ev );
snd_seq_ev_set_direct( ev );
snd_seq_event_output_direct( seq_handle, ev );
snd_seq_free_event(ev);
} while (snd_seq_event_input_pending(seq_handle, 0) > 0);
}
return 0;
}
¾Æ·¡´Â Craig Stuart SappÀÌ ÀÛ¼ºÇÑ, OSSÀÇ /dev/midi ÀÎÅÍÆäÀ̽º¿¡ µ¥ÀÌÅ͸¦ º¸³»´Â ¿¹Á¦ÀÌ´Ù.
´õ ¸¹Àº ¿¹Á¦µéÀ» ÀÌ ¹®¼ÀÇ ¸µÅ© ¼½¼Ç¿¡ ³ª¿Í ÀÖ´Â Craig ÀÇ »çÀÌÆ®¿¡¼ ±¸ÇÒ ¼ö ÀÖ´Ù.
//
// Programmer: Craig Stuart Sapp [craig@ccrma.stanford.edu]
// Creation Date: Mon Dec 21 18:00:42 PST 1998
// Last Modified: Mon Dec 21 18:00:42 PST 1998
// Filename: ...linuxmidi/output/method1.c
// Syntax: C
// $Smake: gcc -O -o devmidiout devmidiout.c && strip devmidiout
//
#include <linux/soundcard.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main(void) {
char* device = "/dev/midi" ;
unsigned char data[3] = {0x90, 60, 127};
// step 1: open the OSS device for writing
int fd = open(device, O_WRONLY, 0);
if (fd < 0) {
printf("Error: cannot open %s\n", device);
exit(1);
}
// step 2: write the MIDI information to the OSS device
write(fd, data, sizeof(data));
// step 3: (optional) close the OSS device
close(fd);
return 0;
}
À¯¿ëÇÑ ¸µÅ©
´ÙÀ½Àº ¸®´ª½º¿Í ¹Ìµð¿Í °ü·ÃµÈ ¸µÅ©µéÀÌ´Ù.
http://www.bright.net/~dlphilp/linuxsound/ ¸®´ª½º¿ë »ç¿îµå & ¹Ìµð ¼ÒÇÁÆ®¿þ¾î.
¹Ìµð¿Í ¿Àµð¿À °ü·Ã Á¤º¸°¡ dzºÎÇÏ´Ù.
http://www.linuxdj.com/audio/lad/
¸®´ª½º ¿Àµð¿À °³¹ßÀÚ ¸ÞÀϸµ ¸®½ºÆ®. °³¹ß¿¡ °üÇÑ ³íÀǵéÀÌ ÀÖÀ½.
http://www.linuxdj.com/audio/quality
¸®´ª½º ¿Àµð¿À À½Áú HOWTO. ¹Ìµð Ä«µå¿Í ¸®´ª½º ¿Àµð¿À ½ºÆ©µð¿À¸¦ ¸¸µå´Âµ¥ µµ¿òÀÌ µÈ´Ù.
http://www.alsa-project.org/ Alsa ÇÁ·ÎÁ§Æ® - Audio/MIDI Driver
http://www.4front-tech.com/ OSS - Audio/MIDI Driver
http://www.gardena.net/benno/linux/audio/ Low Latancy ÆÐÄ¡
http://ccrma-www.stanford.edu/~craig/articles/linuxmidi/
¸®´ª½º¿¡¼ÀÇ ¹Ìµð ÇÁ·Î±×·¡¹Ö ¼Ò°³. Craig Stuart Sapp´Â OSS µå¶óÀ̹ö¸¦ À§ÇØ C/C++¸¦ »ç¿ëÇÑ ±âÃÊÀûÀÎ ¹Ìµð À¯Æ¿¸®Æ¼µé¿¡ ´ëÇØ Á¤º¸¸¦ Á¦°øÇϰí ÀÖ´Ù.
http://www.suse.de/~mana
Dr. Matthias NagorniÀÇ ALSA 0.9 ¹Ìµð¿Í PCM ¿¡ °üÇÑ C ÇÁ·Î±×·¥ ¿¹Á¦¸ðÀ½.
Çǵå¹é
ÀÌ HOWTO´Â °è¼Ó ÁøÇàÁßÀÌ´Ù. ¸®´ª½º»ó¿¡¼ÀÇ »õ·Î¿î ¶Ç´Â °³¹ßÁßÀÎ ¹Ìµð °ü·Ã ¾îÇø®ÄÉÀ̼ǿ¡ °üÇÑ Á¤º¸´Â ȯ¿µÇÑ´Ù.
¹Ìµð Ä«µå´Â ¸Å¿ì ´Ù¾çÇϸç, ¾î¶² °æ¿ì¿¡´Â ¼³Á¤¿¡ ¾î·Á¿òÀÌ ÀÖÀ» ¼ö ÀÖ´Ù.
Á¤º¸¸¦ ã¾Æ º¼ ¼ö ÀÖ´Â °¡Àå ÁÁÀº °÷Àº ´º½º ±×·ì°ú ¸®´ª½º ¿Àµð¿À ¸ÞÀϸµ ¸®½ºÆ®ÀÌ´Ù.
¿ªÀÚ Ãß°¡
¿ªÀÚ´Â MPU-401 ÀÎÅÍÆäÀ̽º¿Í ½Åµð»çÀÌÀú »ç¿îµå ¸ðµâµé, ±âŸ ÇÁ·Î¼¼¼µîÀ» °¡Áö°í Àִµ¥ ¾ó¸¶ Àü±îÁö¸¸ ÇØµµ ¸®´ª½º¿¡¼´Â ¾µ¸¸ÇÑ ÇÁ·Î±×·¥ÀÌ ¾ø¾î¼ À©µµ¿ì¿¡¼ ÄÉÀÌÅ© ¿öÅ©³ª Å¥º£À̽º¸¦ »ç¿ëÇß¾ú½À´Ï´Ù. ÇÏÁö¸¸, Áö±ÝÀº ¿ÀÇ ¼Ò½ºÀÇ ºü¸¥ ¹ßÀüÀ¸·Î ÀÌ ¸ðµç°ÍÀÌ ¸ðµÎ ¸®´ª½º¿¡¼µµ °¡´ÉÇÏ°Ô µÇ¾ú½À´Ï´Ù. :)
Çѱ۷Π¹ø¿ªÇÏÁö ¾Ê°í ±×´ë·Î ¿µ¹®À» ¿Å°Ü ¾´ ºÎºÐÀº ±×°ÍÀÌ ´õ ÀÌÇØÇϱ⠽¬¿ï °ÍÀ̶ó°í »ý°¢Ç߱⠶§¹®ÀÔ´Ï´Ù. ¹Ìµð¿Í °ü·Ã Àåºñ¸¦ ´Ù·ç¾î º¸½Å ºÐµéÀº ´Ù ÀÌÇØÇÏ½Ç °ÍÀ̶ó°í »ý°¢ÇÕ´Ï´Ù. ;)
ÀÌ ¹®¼ÀÇ ¸¶Áö¸· ¹ø¿ªº»Àº http://kldp.org/~eunjea/¿¡ ÀÖÀ¸¸ç ¿À·ù/¼öÁ¤ »çÇ×Àº eunjea (at) kldp.org·Î ¾Ë·Á ÁÖ¼¼¿ä.
MIDI : Musical Instrument Digital Interface