본문 바로가기

Programming/DirectX

[DirectSound] 10. 재생 관련 추가 기능

반응형

DirectSound로 재생할 때 추가적으로 사용이 가능한 기능입니다.

재생 도중 버퍼의 정보를 가져올 수 있는 메소드는 다음과 같습니다.

IDirectSoundBuffer8::GetVolume()
IDirectSoundBuffer8::GetFrequency()
IDirectSoundBuffer8::GetPan()

먼저 GetVolume()은 재생되는 소리나 음원의 크기를 가져올 수 있습니다.

이 값이 작아질수록 원래 크기에서 음소거(Mute)로 변경됩니다.

GetFrequency()는 소리의 속도를 가져옵니다.

Frequency를 조절하면 실제 소리보다 빠르게, 혹은 느리게 재생이 가능합니다.

Pan은 소리의 위치를 지정합니다.

2채널 스피커를 기준으로 Pan 값이 가운데면 양쪽 스피커, 오른쪽이나 왼쪽이면 해당 스피커에서만 소리가 납니다.

이 값들을 각각 변경할 수 있는 다음 메소드들도 존재합니다.

IDirectSoundBuffer8::SetVolume()
IDirectSoundBuffer8::SetFrequency()
IDirectSoundBuffer8::SetPan()

Get이 전부 Set으로 변경되었습니다.

DirectSound가 기존의 WaveOut 재생과 차별화된 점은 3D 사운드의 지원과 재생 도중 값 변경이 가능한 점입니다.

각각의 값들을 조절하기 위한 Min, Max값은 다음과 같이 정해져 있습니다.

Min Value

Max Value 

Volume

DSBVOLUME_MIN

DSBVOLUME_MAX

Frequency

DSBFREQUENCY_MIN

DSBFREQUENCY_MAX

Pan 값의 경우 각각 좌우와 양쪽을 위한 다음과 같은 값이 정의되어 있습니다.

Left : DSBPAN_LEFT

Center : DSBPAN_CENTER

Right : DSBPAN_RIGHT

그리고 가장 중요한 점은 버퍼 생성할 때 해당 값을 조절할 수 있도록 플래그를 설정하는 것입니다.

DSBUFFERDESC의 dwFlags에 각각을 위한 플래그를 설정해야 합니다.

DSBCAPS_CTRLVOLUME, DSBCAPS_CTRLFREQUENCY, DSBCAPS_CTRLPAN를 추가하면 됩니다.

추가할 때는 or연산자(|)를 사용해서 추가하면 됩니다.

값 변경을 위해서 슬라이더 컨트롤 등을 사용해서 구현하는 것이 가능합니다.

해당 플래그가 설정되면 재생이 진행중일때도 값을 변경하는 것이 가능합니다.


반응형