게임에서 리소스 파일의 크기는 많은 이슈가 됩니다. 비압축 wave 파일의 경우 파일이 너무 커서 잘 사용되지 않고, 이를 대체할만한 것이 mp3 포맷입니다만, 라이센스의 문제가 남아 있습니다. 상용 사운드 엔진을 사용하지 않을 경우 ogg vorbis가 현실적인 대안이라고 할 수 있습니다. 무료라는 점도 좋지만 성능적으로도 대등하거나 앞선다는 평가를 받고 있습니다.

ogg 개발 사이트에서 게임에 사용 가능한 디코딩 루틴을 다운 받을 수 있습니다. Ogg 파일을 플레이하기 위해서 libogg 와 libvorbis 를 다운 받습니다. (여기서 얘기하는 ogg 파일은 손실 ogg vorbis 포맷이며, 성격에 따라 ogg flac, ogg speex 등의 코덱이 개발되고 있습니다.)

libogg 1.1.3 : http://downloads.xiph.org/releases/ogg/libogg-1.1.3.zip
libvorbis 1.1.2 : http://downloads.xiph.org/releases/vorbis/libvorbis-1.1.2.zip

게임과 관련해서 간단하게 관심을 가질 부분은 "ogg 출력하기", "임의의 스트림으로 출력하기" 정도라고 생각됩니다.

ogg 출력하기 위해서는 아래의 함수들의 사용법만 알면 됩니다.

ov_open : OGG 파일 열기
ov_info, ov_pcm_total : OGG 정보얻기 (사운드 버퍼를 만들기 위함)
ov_read : OGG 읽기
ov_clear : 자원해제

아래 간단하게 출력하는 샘플을 첨부합니다. (vc6, vc2003 용 프로젝트를 포함했는데, 라이브러리나 dll 형태로 만들 경우 빌더와 멀티쓰레드모델, 디버그/릴리즈 등에 따라 세팅이 많아져서, 편의상 그냥 소스를 모두 프로젝트에 포함시켰습니다. ogg, vorbis 소스는 위의 링크에서 다운 로드 받은 소스입니다.)


그리고 사용자정의 패키징 파일이나, 메모리등에서 음원 파일을 읽는 경우가 생기는데, 사용하기 편리하게 callback 구조의 인터페이스를 제공하고 있습니다.

_read_func : 현재 포인터에서 특정 바이트 만큼 읽기
_seek_func : 특정 바이트 만큼 이동
_close_func : 닫기
_tell_func : 현재 포인터 위치

위의 4가지 함수만 정의해주면 되며, 샘플코드에서 _USER_FILEIO 전처리 된 부분을 참고하시면 쉽게 사용법을 이해하실 수 있을 것입니다. (스트리밍의 경우에도, 음원 파일의 압축률이 높아서 크기가 아주 크지않기 때문에 메모리에 전부 읽어두고 메모리에서 읽어서 디코딩하면 부담 없이 처리가 가능합니다.)

참고 : vorbis ogg developer site
참고 : Loading OggVorbis Files From Memory

댓글을 달아 주세요

  1. Xine 2007/01/21 04:01  댓글주소  수정/삭제  댓글쓰기

    비압축 wave 파일이 너무 커 잘 사용된다는건 오타아닌가요? :)

  2. jedclub 2007/07/12 13:52  댓글주소  수정/삭제  댓글쓰기

    OGG 디코더가 멀티플렛폼용인지 X86 가속 명령을 지원하지 않네요;; MMX라던가 SSE라던가.... 좀과하게 사용하니 버벅거려요 ㅠㅠ 좋은 방법 없을까요???

    • noerror 2007/07/20 08:45  댓글주소  수정/삭제

      소스는 있으니까 컴파일러 SSE 사용 옵션 켜고 빌드하면 좀 나아지지 않을 까요 ? ^^ 저도 관련 이슈가 있는 지 한번 찾아봐야 겠네요.

  3. burningangel 2007/10/18 01:11  댓글주소  수정/삭제  댓글쓰기

    너는 아주 좋은 보는 위치가 있는다!

  4. local gay chat 2007/10/18 09:23  댓글주소  수정/삭제  댓글쓰기

    그런 경이롭 위치를 위해 많게의 감사!

  5. naked college party 2008/03/13 02:51  댓글주소  수정/삭제  댓글쓰기

    좋은 위치! 너를 감사하십시요.

  6. federal direct consolidation loan 2008/03/13 06:18  댓글주소  수정/삭제  댓글쓰기

    이 위치는 유익한뿐 아니라 재미있는다!

  7. african gay porn 2008/03/13 07:11  댓글주소  수정/삭제  댓글쓰기

    나는 너에 합의한다 이다. 그것은 이렇게 이다.

  8. als archive scan 2008/03/13 07:53  댓글주소  수정/삭제  댓글쓰기

    중대한 위치 축하!경이롭 위치!

  9. best free porn sample 2008/03/13 08:41  댓글주소  수정/삭제  댓글쓰기

    좋은 위치! 너를 감사하십시요.

  10. blonde teen blow 2008/03/14 03:36  댓글주소  수정/삭제  댓글쓰기

    위치에 중대한 일은 그것을 좋아했다!

  11. huge insertion vaginal 2008/03/14 04:30  댓글주소  수정/삭제  댓글쓰기

    우수한과 아주 도움이 되는!

  12. map mexico topo 2008/03/14 05:17  댓글주소  수정/삭제  댓글쓰기

    너는 아름다운 웹사이트가 있는다!