안녕하세요...
(이 글 갈무리 안해도 됩니다..포함되어 있습니다.)
윈도우즈로 게임을 제작하는 분들 이 DLL을 알고 계시는지..
요즘 GDK 이야기가 많은데, 정작 쉽게 구할 수 있는 분들은
많지 않을 것입니다. GDK의 다이렉트사운드에는 못 미치지만
표준 API의 sndPlaySound 같은 것 보다는 훨씬 강력한 사운드
라이브러리를 올립니다.
마이크로소프트에서 만들었지만 공식적으로 지원하는 것은
아니라고 하네요. 공개로 알고 있습니다.
이것은 8개의 가상 채널에 비동기적으로 언제든지 개별적인
wav 화일을 재생할 수 있도록하? ? 것입니다. 미리 화일을
메모리에 올리고, 핸들을 얻어놓고, 얼마든지 섞어서 쓸 수
있는 거지요. 예를 들면 비행기 엔진음이 계속 깔리는 가운데
미사일 발사음이나 폭발음이 그 위에 겹쳐져서 날 수 있다는
이야기입니다... 다만 스테레오, 즉 패닝은 지원하는지 아닌지
잘 모르겠습니다.
올리는 화일는, DLL 화일과, DLL의 함수에 대한 정보를 알 수
있는 비베용 모듈, 그리고 DLL용 INI 화일, 그리고 지금 읽고
계시는 이 글의 화일입니다. 원래 비베 모듈에는 함수들을
편하게 쓸 수 있는 다른 고수준 함수들도 있었는데, 저 작권
관계상 구조체와 선언문만 포함시켰습니다.
구조체나 선언문은 마이크로소프트가 공개한 것이니 저작권
문제는 없겠지요.
이 화일들은 성안당의 비주얼베이직 게임 프로그래밍이란 책
에서 얻은 것입니다.
C를 쓰시는 분들도 쉽게 헤더 화일로 변환할 수 있을 것입니다.
자료형중 Integer는 Int로, Long은 Long으로 하면 될꺼고,
String * 1은 char입니다. 또 선언문 맨 끝의 자료형은
(예를 들면 Declare ....... (...) As Integer )
리턴값의 자료형을 뜻합니다. 괄호 안은 인자들이구요.
그리고 ByVal이란 키워드는 함수 호 출시 Call by Value란
뜻이구요.. 비베는 기본적으로는 항상 Call by Reference로
하니까 주의해야 합니다.
단 스트링의 경우 비베는 ByVal로 한다고 해도 항상
Call by Reference로 갑니다.
대신 ByVal로 하면 끝에 Null이 붙는 C 스타일의 스트링이
됩니다. 자세한 변환 방식은 다른 책들을 참고하시고....
간단한 사용법을 설명 하자면,
WaveMixInit (이것은 WaveMix.ini 화일을 참조해서 초기화함
WaveMixConfigureInit로 직접 인자들을 지정해서 초기화할
수도 있다고 함..) 로 DLL을 활성화시키고, WaveMixActivate
로 사운 드 장치를 확보하고,
WaveMixOpenWave로 웨이브 화일을 열고, WaveMixOpenChannel
로 채널을 할당하고, 구조체 MIXPLAYPARAMS를 채워서
WaveMixPlay로 재생하고, WaveMixCloseChannel로 채널들을 닫고,
WaveMixFreeWave로 웨이브 화일들을 메모리에서 내리고,
WaveMixCloseSession으로 웨이브믹스 사용을 끝냅니다...
참, 중간에 재생을 멈추는 것은 WaveMixFlushChannel이군요.
아마 선언문을 보면 짐작하실 수 있을 것입니다.
구조체의 각 멤버 이름들이나 함수 이름들을 보면 말이지요.
(헝가리안 명명법을 지키고 있는것 같습니다 )
저도 아직 사용해보지 않아서 각 인자들의 의미나 상수등을
다 알지는 못하거든요. 책에도 그리 자세히는 안 나와 있는데,
마이크로소프트의 정보를 구할 수 있는 분이 좀 자세한 정보를
주셨으면 좋겠군요.
그리고, 비베로 게임을 만들고자 하는 분들과 교류를 바랍니
다.
그럼