메아리 저널

theseit: 사운드 시스템 #2

theseit: 사운드 시스템 #1

다른 대안으로 ogg 파일 포맷을 만든 Xiph.org("시프"라고 읽던가? 잘 모르겠다.)에서 만든 libao가 있다. 괜찮아 보이긴 했지만, 안타깝게도 윈도우를 지원하지 않는다. -,.- 윈도우가 싫다 해도 아직 데스크탑 시장에서 90%는 차지하는 플랫폼을 지원하지 않는 건 꽤나 치명적이다.

PortAudio 얘기도 꽤 나오던데, 윈도우, 매킨토시(클래식, OS X 둘 다), OSS를 사용하는 유닉스 계열 운영체제를 지원하지만 결정적으로 믹싱을 안 해 준다. 이래서야 SDL과 별 다를 게 없으니 이것도 후보에서 빠졌다. OpenML도 살짝 눈에 띄었지만 이건 너무 과하게 큰 라이브러리라서 -_-; 역시 빠졌다.

물론 fmod 얘기도 나왔었다. fmod도 꽤 많은 플랫폼을 지원하는 만능 사운드 시스템이긴 한데, 두 가지 문제가 걸렸다. 첫번째는 이 놈이 소스가 공개되거나 한 게 아니라서 좀 찝찝하고, 두번째는 그렇게 많은 기능이 필요한 것도 아닌데 그 자체로 상당한 크기를 차지해서 좀 껄끄러웠다. (fmodex.so 같은 놈의 크기를 보면 이게 얼마나 큼지막한 지 알 수 있다. 그렇다고 소스가 공개된 것도 아니니 별도로 필요한 놈만 컴파일할 수 있는 것도 아니고.... -_-)

보통 이런 종류의 검색어에 대한 구글 검색 결과는 한 페이지를 넘기면 비슷한 내용이 반복되는 경향이 있다. 예를 들어서 libao가 그래도 좀 쓰이긴 하니까 libao의 펄 바인딩 따위가 나온다던지... 그래서 더 이상 구글 검색에 의존하지 않고 다른 방법을 찾은 끝에, 이번 삽질의 하이라이트인 JUCE를 찾을 수 있었다. (이걸 찾은 것도 상당히 큰 수확이었다.) C++ 기반의 거대한 라이브러리인데, 거의 작은 Qt라고 할 수 있을 정도의 수준이다. 자체적인 문자열 클래스(주장하기로는 "World's best string class")부터 시작해서 XML, zlib/bzip2, GUI(이게 네이티브 GUI가 아니라 완전히 밑바닥부터 새로 짠 놈이다 -_-;;), 벡터 그래픽, 이미지 조작, 오디오(애초에 만든 사람이 그 쪽이니까), 네트워크 등등... 까진 좋았는데, 이번에도 믹싱 기능이 없다. 젠장 orz

그래서 현재 작업하고 있는 것은 윈도우에서는 DirectSound, 리눅스에서는 ALSA, 그 외에 작업할 여력이 없는 다른 플랫폼에서는 SDL_mixer를 쓰는 쪽으로 가고 있다. (누군가가 도와 준다면 OSS나 esd를 지원해 볼 지도 모르겠다.) 현재로서는 네이티브 믹싱을 지원하면서 충분한 성능을 보장받으려면 이 방법 밖에 없는 것 같다. 나는 윈도우를 사용하고 있기 때문에 DirectSound를 테스트해 보고 있고, (SDL과 JUCE 소스 코드를 많이 참고해서) 현재 여러 개의 소리를 한꺼번에 재생하는 프로그램을 간단하게 만든 상태이다. 혹시 위에 제시되지 않은 라이브러리 중에 적어도 윈도우, 리눅스, 매킨토시를 지원하고 가능하다면 네이티브 믹싱을 사용하는 라이브러리를 알고 계시다면 이 불쌍한 삽질대마왕을 위해 알려 주시면 감사하겠다. OTL

(쓰다 보니 이거 재밌다. 앞으로 종종 theseit 얘기나 해 봐야 겠다.)

이 글은 본래 http://tokigun.net/blog/entry.php?blogid=98에 썼던 것을 옮겨 온 것입니다.


(rev 553c824afb91)