DirectSound DirectSound C/C++ 레퍼런스 DirectSound 의 구조체 DSBUFFERDESC [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
DSBUFFERDESC 구조체는, 새로운 버퍼 개체의 특성을 기술한다. IDirectSound8::CreateSoundBuffer 메서드 및 DirectSoundFullDuplexCreate8 함수로 사용한다.
DirectX 7 이전과의 호환성을 유지하기 위해서(때문에), 이 구조체의 전의 버전인 DSBUFFERDESC1 도 dsound.h 로 유지되고 있다.
구문
typedef struct {
DWORD dwSize;
DWORD dwFlags;
DWORD dwBufferBytes;
DWORD dwReserved;
LPWAVEFORMATEX lpwfxFormat;
GUID guid3DAlgorithm;
} DSBUFFERDESC, *LPDSBUFFERDESC;
typedef const DSBUFFERDESC *LPCDSBUFFERDESC;
멤버
dwSize
구조체의 사이즈 (바이트 단위). 구조체를 사용하기 전에, 이 멤버를 초기화해야 한다.
dwFlags
버퍼의 능력을 나타내는 플래그. 다음의 값이 정의되고 있다.
값 | 설명 |
DSBCAPS_CTRL3D | 버퍼는 3D 컨트롤 능력을 갖추고 있다. DSBCAPS_CTRLPAN 와 조합할 수 없다. 또,lpwfxFormat 로 스테레오 포맷이 지정되고 있는 버퍼에는 설정할 수 없다. |
DSBCAPS_CTRLFREQUENCY | 버퍼는 주파수 컨트롤 능력을 갖추고 있다. |
DSBCAPS_CTRLFX | 버퍼는 이펙트 처리를 지원 하고 있다. lpwfxFormat 의 WAV 포맷은, 2 채널 이하의 8 비트 또는 16 비트의 PCM 포맷이 아니면 안된다. 또, 버퍼에는, 적어도 DSBSIZE_FX_MIN 밀리 세컨드의 데이터를 저장 할 수 있는 사이즈가 필요하다. |
DSBCAPS_CTRLPAN | 버퍼는 팬 컨트롤 능력을 갖추고 있다. DSBCAPS_CTRL3D 와 조합할 수 없다. |
DSBCAPS_CTRLPOSITIONNOTIFY | 버퍼는 위치 통지 능력을 갖추고 있다. 「주의」를 참조할것. |
DSBCAPS_CTRLVOLUME | 버퍼는 음량 조절 능력을 갖추고 있다. |
DSBCAPS_GETCURRENTPOSITION2 | IDirectSoundBuffer8::GetCurrentPosition 메서드에서는, 재생 커서의 새로운 동작을 사용한다. DirectX 1 의 DirectSound 에서는, 에뮬레이트 된 사운드 카드의 재생 커서는 실제의 재생 사운드보다 아득한 앞쪽에 있어, 쓰기 커서의 직후에 놓여져 있었다. 현재는, DSBCAPS_GETCURRENTPOSITION2 플래그를 지정 하면, 애플리케이션은 보다 정확한 재생 커서를 취득할 수 있다. 이 플래그를 지정하고 있지 않는 경우, 호환성을 유지하기 위해서(때문에) 과거의 동작이 유지된다. 이 플래그는, 에뮬레이트 된 사운드 카드에만 영향을 미치는 것에 주의한다. DirectSound 드라이버가 존재하는 경우는, 어느 버전의 DirectX 에서도 DirectSound 의 재생 커서는 정확한 위치를 나타낸다. |
DSBCAPS_GLOBALFOCUS | 버퍼는 글로벌인 사운드 버퍼이다. 이 플래그를 설정 하면, 사용자가 다른 애플리케이션에 포커스를 이동해, 그 새로운 애플리케이션이 DirectSound 를 사용하는 경우에서도, DirectSound 를 사용하고 있는 애플리케이션은 계속해 그 버퍼를 재생할 수 있다. 1 개의 예외는, 협조 레벨로 DSSCL_WRITEPRIMARY 플래그를 설정한 DirectSound 애플리케이션에 포커스를 이동했을 경우이다. 이 경우, 다른 애플리케이션으로부터의 글로벌인 사운드는 들리지 않게 된다. |
DSBCAPS_LOCDEFER | 재생시, 버퍼는 하드웨어 또는 소프트웨어의 리소스에 할당할 수 있다. 음성 관리를 사용하는 버퍼에는, 이 플래그가 설정되지 않으면 안 된다. |
DSBCAPS_LOCHARDWARE | 버퍼는 하드웨어 믹싱을 사용해야 한다. 장치가 하드웨어 믹싱을 지원 하고 있지 않는 경우, 또는 필요한 하드웨어 메모리를 이용할 수 없는 경우는,IDirectSound8::CreateSoundBuffer 메서드의 호출은 실패한다. 애플리케이션은, 이 버퍼가 믹싱 채널을 이용할 수 있는 것을 확인할 필요가 있다. 이 상황은 보증되지 않다. 이 플래그와 DSBCAPS_LOCSOFTWARE 의 어느쪽이나 지정되지 않은 경우에는, 버퍼는, 리소스를 이용할 수 있으면 하드웨어에 배치되어 하드웨어 리소스를 이용할 수 없으면 소프트웨어에 배치된다. |
DSBCAPS_LOCSOFTWARE | DSBCAPS_STATIC 가 지정되고 있어, 하드웨어 리소스가 이용 가능해도, 버퍼를 소프트웨어 메모리에 배치해, 소프트웨어 믹싱을 사용해야 한다. |
DSBCAPS_MUTE3DATMAXDISTANCE | 사운드는, 최대 거리로 무음이 된다. 최대 거리를 넘으면 버퍼의 재생이 정지하므로, 프로세서 시간을 소비하지 않고 끝난다. 소프트웨어 버퍼 에 대해서만 적용된다. |
DSBCAPS_PRIMARYBUFFER | 버퍼는 |
DSBCAPS_STATIC | 온보드 하드웨어 메모리가 이용 가능한 경우, 버퍼는 거기에 놓여진다. 이러한 메모리를 이용할 수 없는 경우에서도, 에러는 발생하지 않는다. PCI 버스를 사용하는 카드로는, 이 플래그는 의미를 가지지 않는다. DSBCAPS_CTRLFX 와 조합할 수 없다. |
DSBCAPS_STICKYFOCUS | 버퍼는 스틱키 포커스를 갖추고 있다. 사용자가 DirectSound 를 사용하지 않은 다른 애플리케이션으로 전환했을 경우, 애플리케이션의 표준 버퍼는 무음이 되지만, 스틱키 포커스 버퍼는 계속해 소리를 낸다. |
dwBufferBytes
새로운 버퍼의 사이즈 (바이트 단위). DSBCAPS_PRIMARYBUFFER 플래그를 지정해 버퍼를 생성 하는 경우는, 이 값은 0 이 아니면 안된다. 2차 버퍼로 허용 되는 최소 사이즈와 최대 사이즈는, dsound.h 로 정의되고 있는 DSBSIZE_MIN 와 DSBSIZE_MAX 이다.
dwReserved
예약이 끝난 상태. 0 이 아니면 안된다.
lpwfxFormat
버퍼의 웨이브 폼 포맷을 지정하는 WAVEFORMATEX 구조체 또는 WAVEFORMATEXTENSIBLE 구조체의 주소. 1차 버퍼에서는, 이 값은 NULL 이어야 한다. 애플리케이션은 IDirectSoundBuffer8::SetFormat 를 사용해, 1차 버퍼의 포맷을 설정할 수 있다.
guid3DAlgorithm
DirectSound3D 의 하드웨어 에뮬레이션이 사용하는 2 스피커 가상화 알고리즘의 일의인 식별자. DSBCAPS_CTRL3D 가 dwFlags 로 설정되지 않은 경우, 이 멤버는 GUID_NULL (DS3DALG_DEFAULT)가 아니면 안된다.
다음의 알고리즘 식별자가 정의되고 있다.
값 | 설명 | 이용 가능성 |
DS3DALG_DEFAULT | DirectSound 는 디폴트의 알고리즘을 사용한다. 보통은, DS3DALG_NO_VIRTUALIZATION 이다. WDM 드라이버에서는, 컨트롤 패널로 환경 사운드의 스피커 구성이 선택되고 있으면 사운드는 이용 가능한 방향의 스피커간에 팬 된다. | 소프트웨어 믹싱에만 적용된다. WDM 드라이버 또는 VxD 드라이버로 이용할 수 있다. |
DS3DALG_NO_VIRTUALIZATION | 3D 출력은, 표준의 좌우 스테레오의 팬에 맵 된다. 왼쪽으로 90о때, 사운드는 왼쪽 스피커만으로부터 들려 오른쪽으로 90о때, 사운드는 오른쪽 스피커만으로부터 들린다. 수직축에서는, 거리에 의해 볼륨이 조절되는 것만으로 있다. 이 버퍼에서는, 도플러시후트와 볼륨 조절은 적용되지만, 3D 필터링은 행해지지 않는다. 이것은 가장 효율적인 소프트웨어의 처리이지만, 가상 3D 오디오 이펙트는 제공하지 않는다. DS3DALG_NO_VIRTUALIZATION 알고리즘을 지정 하면, HRTF 처리는 행해지지 않는다.
DS3DALG_NO_VIRTUALIZATION 는 표준의 스테레오의 팬만을 사용하므로, 이 알고리즘으로 생성 된 버퍼는, 3D 하드웨어 음성의 빈 곳을 이용할 수 없는 경우, 2D 하드웨어 음성에 의해 액셀러레이트 된다. |
소프트웨어 믹싱에만 적용된다. WDM 드라이버 또는 VxD 드라이버로 이용할 수 있다. |
DS3DALG_HRTF_FULL | 3D API 는, 고품질의 3D 오디오 알고리즘으로 처리된다. 이 알고리즘은 최고 품질의 3D 오디오 이펙트를 실현하지만, 보다 많은 CPU 사이클을 사용한다. 「주의」를 참조할것. | 소프트웨어 믹싱에만 적용된다. WDM 드라이버의 사용시에는, Microsoft Windows 98 Second Edition 이후의 operating system로 이용할 수 있다. |
DS3DALG_HRTF_LIGHT | 3D API 는, 효율적인 3D 오디오 알고리즘으로 처리된다. 이 알고리즘은 뛰어난 3D 오디오 이펙트를 실현해, DS3DALG_HRTF_FULL (정도)만큼 CPU 에 부하를 걸지 않는다. | 소프트웨어 믹싱에만 적용된다. WDM 드라이버의 사용시에는, Windows 98 Second Edition 이후의 operating system로 이용할 수 있다. |
주의
1차 버퍼를 생성 할 때는,dwBufferBytes 멤버에 0 을 설정해야 한다. 사용하고 있는 특정의 사운드 장치에 최적인 버퍼의 사이즈는, DirectSound 에 의해 결정된다. 생성 된 1차 버퍼의 사이즈를 얻어오려면,IDirectSoundBuffer8::GetCaps 를 호출한다.
DSBCAPS_CTRLDEFAULT 플래그는 지원하지 않는다. 이 플래그는, DSBCAPS_CTRLPAN | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY 로서 정의되고 있었다. 필요한 플래그만을 지정하는 것으로써, 불필요한 리소스를 줄일 수가 있다.
VXD 드라이버의 경우, DSBCAPS_CTRLPOSITIONNOTIFY 를 사용해 생성 된 사운드 버퍼는 항상 소프트웨어 버퍼이다. 이것은, VXD 드라이버 모델이 통지를 지원 하지 않기 때문이다. WDM 드라이버에서는, 하드웨어 리소스가 이용 가능한 경우는, 통지를 지원 하는 버퍼를 하드웨어에 둘 수가 있다.
DSBCAPS_LOCHARDWARE 플래그와 DSBCAPS_LOCSOFTWARE 플래그는 옵션이며, 서로 배타적이다. DSBCAPS_LOCHARDWARE 는, 강제적으로 버퍼를 하드웨어에 배치한다. 즉, 버퍼는 사운드 카드에 의해 믹싱 된다. DSBCAPS_LOCSOFTWARE 는, 강제적으로 버퍼를 소프트웨어에 배치한다. 이 경우, 버퍼는 CPU 에 의해 믹싱 된다. 이러한 플래그는,DSBCAPS 구조체의 dwFlags 멤버에 대해서도 정의되고 있다.
3D 알고리즘은, 소프트웨어 에뮬레이션 계층만의 선택을 나타낸다. 즉, 가속화용의 하드웨어가 없는 경우에 사용되는 소프트웨어 알고리즘이다. 하드웨어의 이용을 최대로 하기 위해서(때문에), DS3DALG_NO_VIRTUALIZATION 는 특별한 경우로서 다루어진다. 3D 하드웨어 음성의 빈 곳을 이용할 수 없는 경우, 버퍼는 3D 컨트롤과 함께 2D 버퍼로서 다루어진다. 특히, 사운드 버퍼를 DS3DALG_NO_VIRTUALIZATION 로 생성 하는 경우, 또는 DSBPLAY_LOCDEFER 로 생성 된 버퍼를 재생하는 경우는, 다음의 순서에 따른다.
DSSPEAKER_HEADPHONE 또는 DSSPEAKER_STEREO 이외의 스피커 구성이 유효한 경우, 처리는 2 스피커 구성에 대한 처리와 같이 행해진다.
버퍼를 HRTF 알고리즘의 어느쪽이든을 사용해 생성 해, HRTF 알고리즘이 시스템으로 이용 불가능한 경우는 (예를 들어, WDM 시스템이 아닌 경우), 정상 종료의 코드 DS_NO_VIRTUALIZATION 가 반환된다. 생성 된 사운드 버퍼는, 대신에 DS3DALG_NO_VIRTUALIZATION 를 사용한다. 이 때문에, 애플리케이션에서는,CreateSoundBuffer 의 호출시에 명시적으로 DS_OK 를 체크하는 것이 아니라,SUCCEEDED 매크로 또는 FAILED 매크로를 사용할 필요가 있다.
요건
헤더:Dsound.h 로 선언.
참조