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