7. 미디 장치 설정

미디 장치는 사운드 카드에 포함되거나 별도의 장치로 존재한다. 외부 미디 인터페이스는 시리얼 포트나 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/

7.1. 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;
}


7.2. 지연(Latency)

미디는 실시간 프로토콜로 latency는 심각한 문제가 될 수 있다.

현재 몇몇 개발자들이 이것과 관련되어 리눅스가 미디 플랫폼으로 사용하기 적합하도록 커널 해킹을 하고 있다.

기존의 리눅스 커널도 별 무리없이 사용가능 하지만 low-latency 패치를 적용하는 것이 좋다. 자세한 정보는 다음 링크에서 찾을 수 있다:

http://www.gardena.net/benno/linux/audio/