DirectSound DirectSound 입문 DirectSound 프로그래밍의 제 일보   [목차열람] [주소복사] [슬롯비우기]
DirectSound 프로그래밍의 제 일보
 
Microsoft DirectX 9.0

DirectSound 프로그래밍의 제 일보

여기에서는, DirectSound API 를 사용해 사운드를 재생하기 위해서, 실행해야 하는 순서의 개요에 대해 설명한다. 상세한 것에 대하여는, 「DirectSound 의 사용법」을 참조할것.

짧은 사운드를 재생하려면 , 이하의 순서가 필요하다.

1. 장치 개체를 생성 한다

DirectSoundCreate8 를 호출해,IDirectSound8 인터페이스를 지원 하는 개체를 생성 한다. 이 개체는, 보통, 디폴트의 재생 장치를 나타낸다. 옵션으로서 최초로 이용 가능한 장치를 열거해, 사용하는 장치의 GUID 를 취득해 DirectSoundCreate8 에 건네주어도 상관없다.

주  DirectSound 는 Component Object Model (COM)에 근거하고 있다. 다만, 이펙트 DMO 를 사용하므로 없는 한, COM 를 명시적으로 초기화할 필요는 없다.

2. 2차 버퍼를 생성 한다

IDirectSound8::CreateSoundBuffer 를 사용해, 사운드 데이터를 보관 유지하는 버퍼 개체를 생성 한다. 이러한 버퍼는, 모든 사운드를 믹싱 하는 개체인 1차 버퍼와 구별하기 위해(때문에), 2차 버퍼라고 부른다.

3. PCM 데이터를 얻어온다.

WAV 파일 또는 리소스로부터 Private 버퍼에 데이터를 읽어낸다. DirectX SDK 에는, 이 처리를 위해서(때문에) 사용할 수 있는 샘플 코드가 포함되어 있다.

4. 데이터를 버퍼에 저장 한다

IDirectSoundBuffer8::Lock 를 호출해, 쓰기 조작용으로 2차 버퍼를 준비한다. 보통, 이 메서드는 1 개의 메모리 주소를 돌려준다. Private 버퍼로부터 그 주소에 데이터를 복사 한 후,IDirectSoundBuffer8::Unlock 를 호출한다.

5. 버퍼를 재생한다

IDirectSoundBuffer8::Play 를 호출해 사운드를 재생한다. 버퍼에 대해서는, 마지막에 달한 시점에서 정지하는지, 또는 IDirectSoundBuffer8::Stop 를 호출할 때까지 반복 재생을 계속하는지를 지시할 수 있다. 버퍼의 시작과 정지를 반복해 가도 상관없다. 다만, 같은 데이터를 보관 유지하는 버퍼를 별로 생성 하지 않는 한, 한 번에 연주할 수 있는 사운드의 인스턴스는 1 개 뿐이다. 임의의 수의 버퍼를 한 번에 재생할 수 있어 믹싱은 자동적으로 행해진다.

앞에서 본 순서는, 생각되는 가장 단순한 시나리오에 적용된다. 즉, 적당한 사이즈의 버퍼에 들어가는 짧은 사운드이다. 보통, 몇 초 이상 계속되는 사운드는 스트리밍 된다. 즉, 이미 재생되고 있는 데이터는 정기적으로 새로운 데이터로 옮겨진다.

SDK 에 부속되는 샘플 코드에서는, DirectSound 를 사용해 많은 공통되는 처리를 실행할 방법이 나타나고 있다. 상세한 것에 대하여는, 「DirectSound C++ 샘플」을 참조할것.

↑TOP