반디 오디오 라이브러리Bandi Audio Library
반디 오디오 라이브러리는 게임상에서 손쉽게 OGG 파일을 재생하기 위해 개발된 라이브러리 입니다.
C++, WIN32/WIN64 에 최적화 되어 있으며 C++/COM 인터페이스를 사용하기 때문에 C를 사용하는 타 오디오 라이브러리에 비해서 손쉽게 사용이 가능합니다.
라이브러리는 Visual Studio 2008 에서 바로 컴파일 가능하며 소스내에 OggVorbis라이브러리가 포함되어 있어 별도의 추가 라이브러리 설치없이 손쉽게 컴파일 가능합니다.
장점 Features
- (게임에 한하여) 무료입니다.
- 무료 오디오 포맷인 OGG를 사용합니다.
- 사용에 제약이 있기는 하지만, 소스가 공개됩니다.
- COM 인터페이스를 사용해서 매우 손쉽게 사용이 가능합니다. 기존 소스에 단 10줄만 추가해도 OGG를 재생할 수 있습니다.
- 별도의 쓰레드 상에서 OGG를 재생하므로 메인 쓰레드에서 배경음악 재생에 신경을 쓸 필요가 없습니다.
- WIN32 뿐만 아니라 WIN64에서도 작동합니다.
- MBCS 및 UNICODE 인터페이스를 지원합니다.
- COM 인터페이스로 설계하였기 때문에 확장성이 뛰어납니다.
예제 프로그램 다운로드 Demo program download
다운로드: bandiaudiotest_bin.zip(4.0MB)
예제 프로그램을 압축해제후 실행시키면 아래와 같은 화면을 보실 수 있습니다.
동시에 3개의 사운드 재생 Object 재생후 각각의 Object 에서 OGG파일을 재생/중지/볼륨제어/상태확인을 하는 모습을 보실 수 있습니다. 반복재생도 지원하며, 곡 재생이 끝날경우 EOF NOTIFY 를 받아서 다음 곡을 재생하거나 하는 처리를 할 수도 있습니다.

샘플로 사용된 곡의 출처는 다음과 같습니다.
- Dream Factory, http://www.freebgm.net/v3/freebgm/47675
- 비오는 날 도착한 편지, http://www.freebgm.net/v3/freebgm/36015
- 사랑03, http://www.freebgm.net/v3/freebgm/40303
MP3파일을 OGG로 변환할때는 http://koyotstar.free.fr/indexEn.html 에서 제공하는 프로그램을 사용하였습니다.
간단한 사용방법 Quick start
반디 오디오 라이브러리는 별도의 LIB파일을 제공하지 않으며, 하나의 DLL파일과 하나의 H 파일이 제공됩니다. 헤더파일에는 DLL파일에서 익스포트된 함수를 손쉽게 사용할 수 있는 유틸리티 클래스와 오디오 재생에 관계된 인터페이스 정의가 포함되어 있습니다.
사용 방법
먼저 헤더파일을 include 하고, 클래스 팩토리와 오디오 재생 인터페이스를 헤더파일에 선언합니다.
#include "BandiAudio.h"
CBandiAudioFactory m_baFactory;
IBaCon* m_pBaCon1;
DLL을 로드하고, 오디오 재생 인터페이스의 인스턴스를 생성하고 초기화 합니다.
m_baFactory.Create(BANDIAUDIO_RELEASE_DLL_FILE_NAME);
m_pBaCon1 = m_baFactory.CreateBaCon();
m_pBaCon1->Create(::AfxGetInstanceHandle(), m_hWnd);
오디오를 재생합니다.
m_pBaCon1->Play(_T("sample01.ogg"));
종료할 때에는 생성된 인스턴스와 팩토리 클래스를 해제해 줍니다.
if(m_pBaCon1) m_pBaCon1->Release();
m_pBaCon1 = NULL;
m_baFactory.Destory();
기타 볼륨조절, 재생상태 구하기, EOF 처리하기는 아래 설명을 참고하시기 바랍니다.
상세 설명 Library Manual
IBaCon 인터페이스에 대한 설명
HRESULT Create(HINSTANCE hInstance, HWND hWndParent);
인스턴스를 초기화 합니다. 두 파라메터는 NULL이면 안되며, hWndParent 는 EOF메시지를 받을때 사용되기도 합니다.
HRESULT Release();
인스턴스를 삭제하고 자원을 반납합니다. 인스턴스를 delete 로 삭제하면 안되며 종료시에는 반드시 Release()로 인스턴스를 삭제해 주어야만 합니다.
HRESULT Play(LPCWSTR szPathName); HRESULT Play(LPCSTR szPathName);
파일을 열고 재생을 시작합니다.
HRESULT Stop() PURE;
재생을 중지합니다.
HRESULT SetVolume256(int nVolume);
볼륨을 조절합니다. 입력 값의 범위는 0 부터 255까지입니다.
HRESULT SetOption(DWORD dwOption);
재생 옵션을 설정합니다. 입력값으로 BAOPT_LOOP 를 사용할 경우 반복적으로 곡을 재생합니다. 옵션을 사용하고 싶지 않은 경우 BAOPT_NONE 을 파라메터로 사용하면 됩니다.
HRESULT GetStatus(BASTATUS* pStatus);
현재 재생 상태를 가져옵니다. 재생중일 경우는 BASTATUS_PLAY 가 리턴되며, 중지 상태일 경우는 BASTATUS_STOP 이 리턴 됩니다. 폴링방식으로 곡의 재생 상태를 구할때 사용합니다.
HRESULT GetID(DWORD* pID);
현재 인스턴스의 Uniq ID를 가져옵니다. 각각의 인스턴스는 서로를 구분하기 위해서 각각의 ID를 가지고 있으며, 이 ID로 EOF메시지를 처리합니다.
LPCSTR GetName();
라이브러리의 이름과 컴파일한 날짜를 가져옵니다.
HRESULT GetLibraryVersion(DWORD* pVersion);
라이브러리의 인터페이스 버전을 가져옵니다. 이 버전 정보는 BANDI_AUDIO_LIBRARY_DLL_VERSION 라는 이름으로 정의되어 있습니다.
이벤트 메시지
UINT WM_BANOTIFY_EOF;
곡의 재생이 끝났음을 알리는 메시지 입니다. Create() 함수에 파라메터로 전달된 윈도우로 메시지가 보내지며, 상수가 아닌 RegisterWindowMessage() 함수에서 리턴된 값을 사용합니다.
따라서, MFC 에서는 ON_MESSAGE() 매크로가 아닌 ON_REGISTERED_MESSAGE() 매크로를 사용하여서 처리해야 하며, WIN API를 이용할 경우도 switch() 구문에서는 사용이 불가능하여 if문을 사용해서 메시지를 처리해야 합니다.
WPARAM 값에는 인스턴스의 ID값이 들어 있으며, 이는 IBaCon::GetID()로 리턴된 값과 동일합니다. LPARAM 은 사용하지 않습니다.
DOXYGEN
반디 오디오 라이브러리 및 샘플파일 소스 다운로드 License agreement and download
Bandi Audio Library 라이선스
Copyright(C) 2008 Bandisoft.com, All rights reserved.
이 소프트웨어는 어떠한 명시적 또는 묵시적 보증도 없이 "있는 그대로" 제공됩니다. 그
어떤 경우에도 작성자는 이 소프트웨어의 사용으로 인한 손해에 대해 책임을 지지 않습니다.
다음 제한 규정을 준수하는 경우에 한하여 이 소프트웨어를 무료로 사용할 권한이 부여됩니다.
1. 이 소프트웨어는 게임 소프트웨어에서만 사용이 가능하며, 이 경우 상업적 용도이어도
상관없습니다. 게임 소프트웨어 이외의 다른 응용 프로그램에는 사용이 불가능 하며, 만일
사용을 원할경우 저작권자에게 서면 허락을 받아야만 합니다.
2. 이 소프트웨어의 소스 및 바이너리 파일을 반디소프트 홈페이지 이외의 외부 사이트 및
오프라인을 통해서 재배포 하는것을 금지합니다. 단, 게임 소프트웨어 패키지에 바이너리
파일이 포함되는것은 허용합니다.
3. 이 소프트웨어의 소스 및 바이너리를 수정후 온라인 및 오프라인을 통해서 재배포 하는
것도 금지합니다. 이 소프트웨어를 수정후 배포하지 않고, 자신의 게임 소프트웨어에
사용하는것은 문제되지 않습니다.
4. 이 소프트웨어의 출처를 잘못 표시하거나 원래 소프트웨어를 자신이 작성했다고 주장해서는
안 됩니다. 제품에 이 소프트웨어를 사용하는 경우 요구 사항은 아니지만 제품 설명서나
라이선스 정보에 인정 조항을 넣어 주시면 감사하겠습니다.
5. 위 조항 이외의 사용 용도나 궁금한 점에 대해서는 www.Bandisoft.com 을 통해서 문의
하여 주시기 바랍니다.
위 라이선스에 동의할 경우에만 아래 파일을 다운로드 받으시기 바랍니다.
- 라이브러리(DLL,H): bandiaudio_library_20080823.zip(0.3MB) (64비트 버전포함)
- 라이브러리 및 테스트 프로그램 소스: bandiaudio_source_20080823.zip(3.6MB)
- 컴파일 환경: Visual Studio 2008
- 이 소스에 포함된 libogg(1.1.3), libvorbis(1.2.0) 는 http://xiph.org 에서 배포한 라이브러리 입니다.
변경사항 History
- 2008/08/23: 몇가지 버그 수정. CPU 부하 테스트 추가
- 2008/08/12: 최초 공개