Linux Audio

Linux의 audio 계층은 다른 OS에 비해 많이 노출되어있는 편이다. 접근 방법도 워낙 다양해서 ALSA, JACK, PULSEAUDIO, LAPSD(?) 등등 다양하다. 다른 OS들과 비교하면 MacOS처럼 오디오 계층이 깔끔한 경우가 있는가 하면, 여전히 ASIO와 이런 저런 오디오 계층이 공존하는 윈도우즈도 있다.

사실 오디오와 멀티미디어 계층은 OS 제작사에서 깔끔하게 정리를 해주어야 맞다. Linux의 경우는 개발 주체가 하나가 되지 못하다보니 다양한 방법이 난립할 수 밖에 없다고 할 수 있고. 따라서 마소는 도무지 OS 사업을 무슨 생각으로 하고 있는지 한심하기 그지 없는데 어쩃거나 진작에 실망하고 MacOS로 넘어온지 근 10년이 다 되고 있으니 별로 언급하고 싶은 생각도 없다.

MacOS로 처음 넘어와서 단일화된 오디오 디바이스 드라이버와 그 성능을 느껴보고 나서는 왜 사람들이 Mac, Mac하는지 알 수 있었다. 난 정식 애플 하드웨어를 사용하던 입장도 아니고, 윈도우 세계에서도 사실 홀대받는 물건들을 사용하고 있었으니 여러 가지로 계속 놀라울 뿐이었다.

본론으로 돌아와서 리눅스의 오디오는 사실 가장 하위 레벨과 가까운 것이 ALSA이고 여기서 약간 층을 올려가면 JACK이 나온다. ALSA는 audio와 MIDI 모두 대응하고 있지만 사용하는 방법이 생각보다 깔끔하지 못하다.

초심자의 입장에서는 ALSA가 보다 바닥 레벨과 가까우니까 보다 더 low latency로 쓸 수 있고 미세한 콘트롤이 가능하겠지 하겠지만 정작 내가 해야 할 일이 audio interface와 가까운 쪽이 아닌 이상 이런 골치 아픈 일로 시간을 빼앗기면 내가 하고자 했던 일들은 저멀리 안드로메다로 가버리게 되니 의미 없는 짓이라 할 수 있다.

그래서 그 다음으로 생각할 수 있는 것이 jack인데 alsa보다는 많이 친절하고 해야 할 일도 많이 줄어든다. 그렇다고 이게 정말 쓰기 좋냐면 ‘아직 그렇지는 않다’라고 할 수 있다. 그렇지만 low latency의 응용 프로그램을 만들어야 하는 경우, 그렇지만 ALSA에서의 온갖 뒤치닥거리를 하고 싶지는 않다면 이게 정답이다.

관련 자료를 찾고 이렇게 저렇게 응용해보면 apple에서 제공하는 그 다양한 예제와 문서들이 얼마나 많은 노력에 의해서 만들어진 것인지 알게 되고, (돈이 없어 어쩔 수 없이) 리눅스 월드에 머물러야 하는 것이 답답해지기도 한다.

내 경우는 라스베리파이 위에 실시간 프로세서를 얹고자 하는 프로젝트라 더 이상의 선택권은 없다.

애플에서 ARM버전용 MacOS/iOS 커널을 이미 풀어놓았다. 그러나 아직 ARM을 위한 걸출한 제3세계 프로젝트가 나타나지 못하고 있는 것을 보면 다소 신기한 일이다.