2012년 1월 9일
아… 근데 이 글 써 놓고 보니까 원래 내가 하고 싶은 얘기는 앙골모아 2.0 얘기가 아니라 2.0 작업 과정에서 알게 된 내용이었던 것 같다….
앙골모아는 옛날도 그렇고 지금도 그렇고 SDL에 크게 의존하고 있다. 그런데 SDL은 1.2.x가 나온 뒤로 기능 추가가 매우 느렸고, 심지어 명백한 버그도 잘 안 고쳐졌다. 앙골모아에서 발견할 수 있는 버그 중에서 실제로는 SDL 버그이거나 기능 부족으로 구현이 골때린 케이스는 다음 몇 가지가 있다:
- 샘플링 레이트가 44100/2k Hz 꼴이 아닌 WAV 파일들은 pitch가 어긋난다. 7년 전에 확인해 봤을 때 SDL의 오디오 서브시스템이 이 경우에 대해서 리샘플링을 안 해서 그런 거라는 결론을 내렸는데, 1.3.x 개발 버전에서는 드디어 고쳐졌지만 1.2.x에서는 얄짤 없다. 아니, 얄짤 없는 수준이 아니라 코드는 있는데 활성화가 안 되어 있다.1
- 알파 채널이 없거나 있어도 지원이 잘 안 되는 BMP의 특성상 rgb(0,0,0)이 투명색 대용으로 쓰여 왔는데, 일부 BMS가 이 색깔 말고 rgb(4,0,4) 같이 비디오 오버레이에서 사용하는 색깔을 투명색으로 쓰는 경우가 있었다. 투명색이 한 종류라면 SDL의 colorkey 기능을 사용해서 바로잡을 수 있지만, 두 종류면 역시 방법이 없다. 근데 1.3.x에서 colorkey를 없앨 것 같기 때문에 어차피 새로 구현해야 할 수도 있다.
- 맥 오에스 텐 옛날 버전에서 입력 latency가 ~50ms까지 치솟는 매우 심각한 문제가 있었다.2 그런데 똑같은 1.2.x대여도 최신 맥 오에스 텐에서 돌리면 큰 문제 없이 돌아 가는 것으로 보아 SDL 문제가 아니라 맥 오에스 텐 문제 같기도 하다.
- 비슷한 이유로, SDL_mixer는 생각보다 latency가 큰 편이다. 가장 큰 이유는 크로스플랫폼이라서 자체 믹서가 없는 백엔드에서도 믹싱을 지원해야 하기 때문에 자체 믹서가 있는 백엔드에서도 그 믹서를 사용하지 않기 때문이다.3 상황에 따라 키음 수십 개가 함께 재생될 경우 수십 ms 정도의 latency를 직접 들을 수도 있다. 개발이 (이제서야) 활발히 진행되고 있는 SDL과는 달리 SDL_mixer는 기능 추가가 거의 중단된 터라 이 구조가 바뀌길 기대하기도 어렵다.
이런 이유로 SDL 1.3이 나온다면 (그 땐 SDL 2.0이 되겠지만) 앙골모아도 고칠 부분이 꽤 있을 것 같다. 이게 문제 해결에 도움이 된다면 얼마나 좋으련만.
-
리샘플링을 하기는 하는데, 리샘플링된 오디오 데이터를 별도의 중간 버퍼를 쓰지 않고 출력으로 그대로 보내 버리는 코드이다. 오디오 드라이버에 따라서 이게 허용이 되지 않는 경우도 있는 모양이다(하지만 내가 알기로 윈도에서 쓰는 DirectSound 백엔드는 허용을 했기 때문에 그냥 주석 없애고 그대로 썼었다). 1.3에서는 어떻게 잘 해결한 듯. ↩
-
이 문제는 theseit에서도 똑같이 겪었고, 그래서 맥 오에스 텐에서는 아예 그냥 SDL 무시하고 운영체제 API를 가지고 low latency 입력을 구현하려고 했지만… 다 아시듯이 망했어요. ↩
-
이 문제는 theseit에서도 똑같이 겪었고, (후략) ↩
