=================================
=================================
=================================
출처: http://www.gpgstudy.com/forum/viewtopic.php?t=20662
OGG 재생 어떻게들 하시나요?
지금 만들고 있는 제품에 OGG 재생 기능을 넣으려고 합니다.
(MP3 는 라이센스 문제로 사용이 곤란하고요.)
처음엔 간단하게 OGG 재생기능을 지원하는 모듈이 있으면 가져다 쓰려고 했는데,
FMOD, BASS 같은 유료 모듈밖에 보이지 않더군요.
설마 없겠어... 하고 아무리 찾아봐도 VC/C++ 로 사용할 수 있는 모듈을 찾지는 못했습니다.
여기 GPGSTUDY 에도 몇번 글이 올라오기는 했는데, 대부분 쉽게 만들 수 있다는
이야기만 있더군요 ㅠ.ㅠ
그래서 지금 직접 만들고 있는데, 가능하다면 오픈소스 형태로 공개할 생각으로 만들고
있습니다.
그런데, 혹시 제가 찾기 못한 더 좋은 OGG 재생 모듈 이 있다면 굳이 공개를
목적으로 작업할 필요가 없기 때문에 (코딩보다 부수적인 작업이 시간이 많이 걸리죠.)
여기 계신 고수분들께 문의합니다.
혹시 이미
무료 + 오픈소스 + C++ + WIN32 + VC 에서 바로 컴파일해서 사용 가능
조건을 만족시키는(혹은 일부라도) 음악 재생 모듈이 있다면 알려주시면 감사하겠습니다. ^^
(공짜 OGG 재생모듈따위는 필요없어.... 라는 분들이 많다면 그건 그거대로 절망이군요.)
PS) 지금 개발중인 모듈은 멀티 쓰레드 형태로 작동하며, 아래처럼 쓸 수 있습니다.
// 멤버로 선언
COgg m_ogg;
// 재생 시작
m_ogg.Play("test.ogg");
// 이것저것 다른짓 한 후 음악 중지
m_ogg.Stop();
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
여기 자료를 한번 보세요..
http://www.gamecode...org/tt/entry/oggplay
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
답변감사합니다. 해당 소스를 보니, ogg 파일 전체를 디코딩해서 dsound 버퍼에 넣고 재생하도록 되어 있네요.
이런 경우는 각각의 경우 장단점이 있을듯 합니다.
배경음을 이런식으로 사용할 경우 초기 디코딩 시간이 오래 걸리고, (큰 bgm 파일의 경우 몇초..)
메모리 사용량이 너무 많아진다는 단점(큰 bgm 파일의 경우 수십mb)이 있는 대신,
게임 중간에 ogg 디코딩 때문에 발생하는 부하를 최소한으로 막을수는 있을듯 하네요.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ogg 공식 홈페이지 가면..
인코딩/디코딩 라이브러리에다가 라이브러리 문서까지 모두 잘 되어 있습니다.
streaming 도 할수 있게 되어 있으니.. 보시고 잘 만드셔서 쓰시면 되겠네요ㅎ
ogg 홈피는 여깁니다.
http://www.vorbis.com/
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ogg 공식 홈페이지 가면..
인코딩/디코딩 라이브러리에다가 라이브러리 문서까지 모두 잘 되어 있습니다.
streaming 도 할수 있게 되어 있으니.. 보시고 잘 만드셔서 쓰시면 되겠네요ㅎ
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
네, 제가 말씀드린건 ogg 디코딩을 어떻게 하느냐가 아니라, ogg 를 디코딩해서
배경음악까지 재생해주는 모듈이 있는가에 대해서 질문드린겁니다.
즉, FMOD 나 BASS 같이 DLL 형태로 바로 배경음악이 재생 가능하면서도, 공짜인 라이브러리가
혹시 있느냐 하는것이 질문의 요지입니다. ㅠ.ㅠ
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
제가 찾아봤는데 , 멀티 쓰레드로 스트림 지원하는 공짜는 없습니다.......
직접 만드시던가 하셔야 할겁니다
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://www.scitech.co.kr/details.html?h_code=h_2&book_num=492
사이텍미디어 출판사의 절판된 번역서 'Game Audio Programming' 링크입니다..
(압축된 sdk소스엔 암호가 걸려있지만, 링크된 곳에 알려져 있습니다.)
소스 SDK에는 디코드된 ogg를 멀티쓰레드 스트리밍 처리하는 내용이 포함되어있습니다.
참고할만하다 여겨집니다....그럼...
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2d 만 되어도 된다면
http://audiere.sourceforge.net/home.php
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://www.scitech.co.kr/details.html?h_code=h_2&book_num=492 사이텍미디어 출판사의 절판된 번역서 'Game Audio Programming' 링크입니다.. (압축된 sdk소스엔 암호가 걸려있지만, 링크된 곳에 알려져 있습니다.) 소스 SDK에는 디코드된 ogg를 멀티쓰레드 스트리밍 처리하는 내용이 포함되어있습니다. 참고할만하다 여겨집니다....그럼... |
멀티 쓰레드로 스트림을 처리해주는 라이브러리가 있다는게 , 다소 충격적인데요
예전에 몇일동안 찾아봐도 없었던건데.... , 이렇게 있었다니 ... 놀랐습니다
이거 써보신분 경험담 없으신가요?
사용후기 라든가.... 버그가 있다던가.....
6년이 전 소스인 만큼 꽤나 오래 된건데 ... 수정해서 써야 할부분이 있을거 같거든요
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://www.scitech.co.kr/details.html?h_code=h_2&book_num=492 이거 써보신분 경험담 없으신가요? 사용후기 라든가.... 버그가 있다던가..... 6년이 전 소스인 만큼 꽤나 오래 된건데 ... 수정해서 써야 할부분이 있을거 같거든요 |
음 제 기억이 맞다면, ogg를 직접 스트리밍 하는 것은 아니었고, wav를 스트리밍 하는 챕터가 있던 것으로 기억 됩니다. 당시에 저 책을 참고해서 wav대신 ogg를 스트리밍 하는 라이브러리를 만들어서 게임에 붙였던 기억이 나네요.
사용하면서 특별한 문제는 없었던 것 같습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
이 책의 SDK에서는 WMA,MP3,OGG의 실제 플레이 처리가 모두 동일합니다....
모두 죄금씩 실시간으로 소량씩 디코드해서, 디코드된만큼 플레이를 겁니다...
대체로 이렇게 처리하는 것이 일반적인 것으로 압니다만...(조금씩 압축을 풀고, 조금씩 플레이)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
bool Sound::Init(const SoundInit& init)
{
FN("Sound::Init()");
if(m_bInitialized)
return Error::Handle("Sound object is already initialized");
// Set the audio definition
m_Init = init;
// Extract the extension - decide on a loader based on extension name
string sExt = m_Init.m_sFileName.substr(m_Init.m_sFileName.size() - 3);
// Use the Wave loader
if(stricmp(sExt.c_str(), "wav") == 0)
m_pLoader = Wave::CreateObject();
// Use the Vorbis loader
#ifdef USE_VORBIS
else if(stricmp(sExt.c_str(), "ogg") == 0)
m_pLoader = Vorbis::CreateObject();
#endif // USE_VORBIS
#ifdef USE_WMA
else if(stricmp(sExt.c_str(), "wma") == 0)
m_pLoader = WMA::CreateObject();
else if(stricmp(sExt.c_str(), "mp3") == 0)
m_pLoader = WMA::CreateObject();
#endif // USE_WMA
else
return Error::Handle("Unsupported file type");
m_bInitialized = true;
return true;
}
소스 코드를 보니 wav ogg wma mp3 를 지원하네요
사실 WAV 자체는 stream 처리할 필요가 없지 않나 싶은데요;;;
다른분들도 써봐서 문제없이 쓰고 계신지 ....
사운드 라이브러리가 생각보다 많이 비싸다는 느낌을 받고 있어서 공자를 저도 찾고 있었습니다
책으로도 나왔으니 어느정도 검증은 됐겠지만, 버그라는게 항시 존재하다보니까..... 불안한 마음은 있네요
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
openal 도 유명한 무료 사운드 라이브러리 인데 이것은 원하시는게 아닌가요?
ogg는 vobris 라이브러리 이용해서 재생해줍니다
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
제경우도 딱히 찾는게 안보여서..
제일위의 링크처럼 간단하게 ogg압축 풀어서 wav로 플레이하는 예제랑
DXSDK에 WAV스트리밍예제 두개 합쳐서 작성했었습니다.
그외에 수정한거라면 리소스 로딩스레드가 별도로 돌고 있는데 고작 OGG때문에 하드접근하면
기존 로딩스레드에 스위칭 비용을 키우는듯해서(하드의 헤드는 하나이므로.. ) OGG파일을 메모리로
올려서 스트리밍한정도였던것 같습니다. ( OGG파일만 놓고보면 2-3메가쯤이니 용량부담은 그리 안되고,
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
아직 시험판입니다만.
http://tiyagame.kr/...EGLSoundTrial100.zip
원하시는 것이면 좋겠습니다.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://cafe.naver.com/jzsdn/5609
http://cafe.naver.com/jzsdn/5899
개인적으로 두번째 링크의 코드를 추천합니다
=================================
=================================
=================================
'프로그래밍 관련 > 사운드' 카테고리의 다른 글
D3Direct Sound 관련 (0) | 2020.09.17 |
---|---|
DSound 사용시 1차 버퍼를 그대로 사용하면 안됩니다.|작성자 제프 Direct Sound 동시 사운드 (동시 믹싱 예상) (0) | 2020.09.17 |
[일리히트] 간단한 사운드 재생 | Irrlicht 3D engine (0) | 2020.09.17 |
GPG DIRECT SOUND 다중 사운드 출력 관련 질문 답변 (0) | 2020.09.13 |
[DSound] 15장 Filling and Playing Static Buffers (0) | 2020.09.13 |