반디 오디오 라이브러리Bandi Audio Library

반디 오디오 라이브러리는 게임상에서 손쉽게 OGG 파일을 재생하기 위해 개발된 라이브러리 입니다.
C++, WIN32/WIN64 에 최적화 되어 있으며 C++/COM 인터페이스를 사용하기 때문에 C를 사용하는 타 오디오 라이브러리에 비해서 손쉽게 사용이 가능합니다.

라이브러리는 Visual Studio 2008 에서 바로 컴파일 가능하며 소스내에 OggVorbis라이브러리가 포함되어 있어 별도의 추가 라이브러리 설치없이 손쉽게 컴파일 가능합니다.

장점 Features

예제 프로그램 다운로드 Demo program download

다운로드: bandiaudiotest_bin.zip(4.0MB)

예제 프로그램을 압축해제후 실행시키면 아래와 같은 화면을 보실 수 있습니다.

동시에 3개의 사운드 재생 Object 재생후 각각의 Object 에서 OGG파일을 재생/중지/볼륨제어/상태확인을 하는 모습을 보실 수 있습니다. 반복재생도 지원하며, 곡 재생이 끝날경우 EOF NOTIFY 를 받아서 다음 곡을 재생하거나 하는 처리를 할 수도 있습니다.

 

샘플로 사용된 곡의 출처는 다음과 같습니다.

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 을 통해서 문의

하여 주시기 바랍니다.

위 라이선스에 동의할 경우에만 아래 파일을 다운로드 받으시기 바랍니다.

변경사항 History