PC-FI를 하는 분들 중에 리눅스를 쓰는 분들은 그리 많지 않을 것 같은데,
리눅스를 쓰는 분들 중에서도 1394 오디오 인터페이스를 쓰는 분들은 더욱 적을 것입니다.
먼저 리눅스에서 1394 오디오 인터페이스를 쓰려면 아셔야 할 것들이 있습니다.
시판중인 1394 제품은 여러 종류가 있지만 사실 제조업체에서 리눅스 드라이버를 지원하는 곳은 없습니다.
현재 리눅스 배포판에서 사용되는 드라이버는 프로그래머들의 노력으로 만들어진 것입니다.
그 처음 시작은 BeBoB 플랫폼으로 만들어진 제품의 드라이버 개발로 거슬러 올라갑니다.
BeBoB 플랫폼은 BridgeCo사의 1394 칩셋을 사용해서 만들어진 것입니다.
기본적으로 BridgeCo 칩셋을 사용한 제품이라면 리눅스에서 사용할 수 있을 가능성이 높습니다만, 모든 비밥 제품들이 다 지원되는 것은 아닙니다.
여기에 다른 칩셋을 쓰는 제품들의 지원이 추가되어 드라이버가 개발되었는데 이 프로젝트가 FreeBoB 입니다.
이 프리밥이 FFADO 로 계승되어서 조금씩 지원기기가 늘어나면서 발전하고 있습니다.
리눅스에서 1394를 쓰려면 먼저 이 FFADO에서 기기를 지원하는지부터 확인하셔야 합니다.
http://www.ffado.org/?q=devicesupport/list
리눅스에서 1394 장비를 잡으려면 FFADO를 먼저 설치해야 하는데,
위 사이트에서 소스를 다운받아 컴파일해서 쓰시거나.. 우분투 같은 배포판에는 이미 바이너리 설치 패키지가 만들어져 있어서 우분투 소프트웨어센터에서 ffado를 검색해서 다운받아 쓰시면 됩니다.
FFADO는 그자체로 완전한 사운드 API가 아니고 단순한 디바이스 드라이버이기 때문에,
FFADO 설치만으로는 아무것도 할 수가 없습니다.
FFADO 드라이버와 실제 사운드 어플리케이션 사이에서 둘을 중계해줄 API가 있어야 합니다.
그것이 바로 JACK 입니다.
윈도우즈로 말하자면 JACK이 ASIO 같은 역할을 하는 것입니다.
(실제로 Jack은 스튜디오 작업에 적합한 목적으로 만들어진 API 입니다)
그렇기 때문에 리눅스에서 1394 장비를 쓰시려면 FFADO와 JACK 을 모두 "정상적으로" 설치해야 합니다.
바꿔말해 리눅스 프로그램이 Jack 출력을 지원하지 않으면 기본적으로 사용이 불가능하다는 얘기입니다.
(출력을 우회해주는 플러그인이 만들어져 있어서 다양하게 사용이 가능하긴 합니다)
다행히 리눅스에서 Jack을 네이티브로 지원하는 프로그램은 꽤 종류가 많습니다.
가령 VLC 같은 대표적인 미디어 플레이어에 Jack 플러그인이 준비되어 있고, Audacity도 Jack을 지원합니다.
그리고 물론 MPD에서도 Jack을 직접 지원합니다.
JACK은 데몬형태(jackd)로 터미널에서 명령어를 내려서 사용하게 되어있으나,
다행히 사용하기 편하게 그래픽 인터페이스로 컨트롤할 수 있는 QJackctl 이 만들어져 있습니다.
잭이나 QT Jack Control 모두 설치 패키지가 있으니 설치 자체는 쉽게 됩니다.
그런데 설치한 다음 셋팅이 더 중요합니다.
잭은 리눅스의 리얼타임 스케쥴링을 사용하도록 만들어져 있는데 배포판에 따라서 설정이 조금 달라집니다.
리얼타임 스케쥴링을 사용하게 되면 CPU가 시간을 쪼개서 태스크를 처리할 때 높은 우선권을 유지한 채로 CPU 자원을 계속 붙들기 때문에 다른 태스크에 의한 간섭을 최소화하게 됩니다. 요기서 중요한 것은 이 리얼타임 스케쥴링은 리얼타임 커널이 필요하지 않다는 것입니다.
이 기능은 모든 리눅스 배포판에 이미 포함되어 있습니다. 그러니까 Jack을 쓰기 위해서 구태여 리얼타임 커널을 올릴 필요가 없습니다.
Qjackctl 에서 리얼타임 스케쥴링을 체크하고 실행시켜보면 아마 처음에는 뭔가 에러가 발생할 겁니다.
이를 해결하기 위해서는 2가지를 손봐줘야 합니다.
하나는 리얼타임 스케쥴링 셋팅이고 나머지 하나는 권한 설정입니다.
리얼타임 스케쥴링 셋팅은 Jack 홈페이지의 FAQ를 읽어보시고 /etc/security/limits.conf를 수정하시면 됩니다. (사용하는 환경에 따라 다를 수 있습니다)
(http://jackaudio.org/faq 에서 How do I configure my Linux system to allow realtime scheduling? 참조)
그리고 권한설정은 /etc/udev/rules.d/40-permissions.rules 를 설정해주셔야 합니다.
(파일이 없으면 터미널에서 루트 권한으로 들어가서 만드세요)
실제로 해보면 우분투의 경우 리얼타임 스케쥴링이 audio 그룹으로 지정이 되는데
앞의 리얼타임 스케쥴링 셋팅을 하면서 그룹 이름을 잘 확인하셨다가 맞춰서 해주시면 됩니다.
아무튼 40-permissions.rules 에 이 내용을 집어넣으시고 저장하세요.
KERNEL=="raw1394", GROUP="audio"
KERNEL=="dv1394*", GROUP="audio"
KERNEL=="video1394*", GROUP="audio"
만약 그룹이 audio가 아니고 다른 이름이면 그것에 맞춰서 바꿔주시면 되고,
마지막으로 "관리-사용자와 그룹" 설정에서 audio 그룹(혹 다른 이름으로 셋팅했다면 그 이름의 그룹)이 있는지 보시고 없으면 만드세요.
그리고 audio 그룹에 로그인 아이디를 추가해 넣으시면 됩니다.
여기까지 잘 하셨다면 Qjackctl 에서 정상적으로 Start 가 될 겁니다.
Setup에서 Server Path는 jackd 로 driver는 firewire로 맞추시면 되고
frames/period 와 period/buffer를 조절하시면 레이턴시가 바뀝니다.
적당히 자신의 환경에 맞춰서 틱틱 거리지 않을 정도로 맞춰서 쓰시면 됩니다.
그 다음 MPD를 셋팅하시면 되는데 /etc/mpd.conf 를 열어서 다음을 추가합니다.
audio_output
type "jack"
name "my jack device"
※ 와싸다 게시판 특성상 중괄호가 빠져있으니 그대로 paste 하면 안됩니다.
그리고 여기서 한 가지 더 살펴보셔야 할 것은 mpd.conf에서 디폴트로 사용자가 mpd로 맞춰져 있습니다.
그러니까 이 부분...
user "mpd"
요렇게 되어 있을 겁니다. 이부분의 사용자 이름을 위에서 사용자/그룹 설정할 때의 사용자 이름과 일치를 시켜주셔야 합니다
그러니까 앞의 예에서 audio 그룹에 사용자를 추가해 넣었을 때의 그 이름으로 맞춰주셔야 합니다.
다 바꾸셨으면 리부팅을 하셔서 실제로 mpd에서 정상적으로 jack으로 출력이 되는지 확인하시면 됩니다.
다시 천천히 해야할 작업을 살펴보면
1) FFADO 설치하기
2) JACK 설치하기
3) QJACKCTL 설치하기
4) 리얼타임 스케쥴링 셋팅하기 (/etc/security/)
5) raw1394 커널 모듈 셋팅하기 (/etc/udev/rules.d/40-permissions.rules)
6) 사용자/그룹 확인
7) mpd 사용자 일치 및 Jack 출력 추가하기
마지막으로 실제 사용은 Qjackctl 에서 Start 를 하신 상태에서 정상적으로 실행이 되는지 보시고, MPD 클라이언트를 불러서 재생을 해보세요.
Qjackctl 의 Connect 를 눌러 보시면 왼쪽창과 오른쪽창이 보이는데 왼쪽창에 아이콘이 생겨날 겁니다. 요놈을 우측의 출력으로 connect를 해주시면 소리가 납니다.
(사운드 어플리케이션의 출력을 실제 하드웨어 아웃풋으로 라우팅해주는 과정임)
우분투에서 MPD로 JTest 시그널을 돌려보니 FFT 구간을 잡는 부분에 따라서 미세하게 차이가 나는 정도인데 세심하게 관찰해본 결과 역시나 OS 커널이나 혹은 재생 소프트웨어가 사운드디바이스에 영향을 주지 않는다고 볼 수 있습니다.
<우분투 10.04 2.6.32-33 커널 - mpd / gmpc>
<비스타 푸바(asio)>
참고로 예전 비스타 vs OSX 보다는 전원 노이즈 특성이 약간 안좋게 나왔는데 그건 테스트할 때마다 변동이 있는 부분이니 무시하시면 됩니다.
해외포럼에서는 리얼타임 커널 사용을 출력품질 향상을 위해 시도하는 방법이 아니라 녹음 작업에서 레이턴시를 최적화하기 위한 튜닝으로 보고 있습니다.