DirectSound DirectSound C/C++ 레퍼런스 DirectSound 의 구조체 DSBUFFERDESC   [목차열람] [주소복사] [슬롯비우기]
DSBUFFERDESC
 
Microsoft DirectX 9.0

DSBUFFERDESC

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 버퍼는1차 버퍼 이다. 이 값을 지정하지 않는 경우는, 2차 사운드 버퍼가 생성 된다. DSBCAPS_CTRLFX 와 조합할 수 없다.
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 로 생성 된 버퍼를 재생하는 경우는, 다음의 순서에 따른다.

  1. 이용 가능한 3D 하드웨어 음성이 있는 경우는, 그 3D 하드웨어 음성을 사용한다.
  2. 이용할 수 있는 3D 하드웨어 음성에 빈 곳이 없고, 2D 하드웨어 음성을 이용할 수 있는 경우는, 그 2D 하드웨어 음성을 사용한다. 이것이 가능한 것은, DS3DALG_NO_VIRTUALIZATION 알고리즘이 단순한 스테레오 팬 알고리즘이니까이다.
  3. 이용할 수 있는 2D 또는 3D 하드웨어 음성에 빈 곳이 없는 경우는, 음성은 DS3DALG_NO_VIRTUALIZATION 알고리즘을 사용해 소프트웨어로 재생된다.

DSSPEAKER_HEADPHONE 또는 DSSPEAKER_STEREO 이외의 스피커 구성이 유효한 경우, 처리는 2 스피커 구성에 대한 처리와 같이 행해진다.

버퍼를 HRTF 알고리즘의 어느쪽이든을 사용해 생성 해, HRTF 알고리즘이 시스템으로 이용 불가능한 경우는 (예를 들어, WDM 시스템이 아닌 경우), 정상 종료의 코드 DS_NO_VIRTUALIZATION 가 반환된다. 생성 된 사운드 버퍼는, 대신에 DS3DALG_NO_VIRTUALIZATION 를 사용한다. 이 때문에, 애플리케이션에서는,CreateSoundBuffer 의 호출시에 명시적으로 DS_OK 를 체크하는 것이 아니라,SUCCEEDED 매크로 또는 FAILED 매크로를 사용할 필요가 있다.

요건

  헤더:Dsound.h 로 선언.

참조

↑TOP