메아리 저널

theseit: 사운드 시스템 #1

theseit 프로젝트를 하면서 다양한 삽질을 하고 있다. 요즘은 사운드 시스템에 손을 대고 있다. (그럼 현재 소리 나고 하는 건 어떻게 하냐고? SDL_mixer를 임시로 쓰고 있다.)

옛날에 만들었던 angolmois(사실 이게 theseit 프로토타입... -_-;)의 경우 SDL_mixer의 영향으로 소리가 좀 지연되어 나오거나 하는 문제가 있었다. SDL_mixer는 정확하게 말하면 SDL의 사운드 서브시스템을 사용하되 ogg, mp3 등의 기타 파일 포맷을 지원하도록 감싸 놓은 유틸리티 라이브러리에 지나지 않으므로 SDL 사운드 서브시스템 얘기를 해야 할 듯 하다. SDL은 자체적으로 SDL_MixAudio라는 믹싱 함수를 지원하는데, 여기서 알 수 있듯이 SDL의 오디오 시스템은 운영체제의 자체적인 믹싱 기능을 이용하지 않고 따로 믹싱을 자체적으로 구현해 버렸다. 물론 운영체제 자체 믹싱 기능 따위 없는 플랫폼에서야 당연히 필요한 기능이지만, 윈도우 같이 운영체제 차원에서 믹싱을 지원하는 환경에서는 엄청나게 쓸데 없는(-_-) 짓이다. 그 외에 SDL_mixer는 음원을 좀 더 세밀하게 조정할 수 있는 기능이 적다는 문제도 있었다. (음향 효과 문제가 아니라, 음원을 자르거나 일부분만 재생하거나 하는 게 드럽게 골때린다. API 찾아 보면 알겠지만, 이게 가능하긴 한데 한 개의 음원에 대해서만 가능하다. -,.-)

그래서 가급적이면 운영체제 자체의 믹싱 기능을 사용하는 다른 크로스플랫폼 오디오 라이브러리를 찾아 보려 했다. 구글에 cross platform audio library라고 하면 여러 가지 글들이 나오는데, OpenAL은 처음에 우리가 찾던 대안에 거의 가까워 보였다. 하지만 엄청나게 막강한 문제가 있었으니 배포가 존내 귀찮다는 것이었다. 이건 물론 윈도우 얘긴데, 처음엔 그냥 dll만 복사해서 배포해도 되는 줄 알았더니 openal32.dll은 별 기능 안 하고 실제 구현 dll이 따로 있기 때문에 파일 단위로 배포할 수 없게 된 것이었다. 친절하게도 이 사람들은 OpenAL 설치본에서 GUI를 안 보여 주고 아무 군 소리 없이 설치해 주는 /s 옵션을 만들어서 설치본 배포가 가능하게 만들긴 했으나, 쓸데 없이 설치본 따위 만들기 싫은 나 같은 사람한테는 별 소용이 없는 일이었다.

(#2에서 이어짐)

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


(rev 553c824afb91)