DirectPlay DirectPlay C/C++ 레퍼런스 인터페이스 IDirectPlayVoiceClient Create3DSoundBuffer [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
player 또는 그룹용의 3D 사운드 버퍼를 얻어온다. 3D 사운드 버퍼 개체의 메서드를 사용하면 지정한 그룹 또는 player로부터 수신한 음성 전송의 가상 3D 위치를 변경할 수 있다.
구문
HRESULT Create3DSoundBuffer(
DVID dvID, LPDIRECTSOUNDBUFFER lpdsSourceBuffer, DWORD dwPriority, DWORD dwFlags, LPDIRECTSOUND3DBUFFER *lpUserBuffer );
파라미터
- dvID
- [in] 사용자가 버퍼를 보존하는 대상이 되는 player 또는 그룹의 식별 정보를 지정하는 DVID 형의 변수. 또, DVID_REMAINING 를 지정 하면, 사용자 버퍼가 없는 모든 player 또는 그룹에 대해서 3D 사용자 버퍼를 생성 할 수 있다. DVID_REMAINING 를 지정하는 경우, lpdsSourceBuffer 파라미터에 NULL 를 지정해,dwPriority 파라미터와 dwFlags 파라미터를 0 으로 설정할 필요가 있다.
- lpdsSourceBuffer
- [in] Microsoft® DirectPlay® Voice 의 메인 버퍼의 생성에 사용하는,IDirectSoundBuffer 인터페이스의 포인터. NULL, 또는 사용자 생성의 Microsoft DirectSound® 버퍼를 지정할 수 있다. 이 멤버가 NULL 의 경우, DirectPlay Voice 가 버퍼를 생성 한다.
- dwPriority
- [in] 다이레크트파스스르. IDirectSoundBuffer::Play 가 불려 갈 때, 이 값은 dwPriority 파라미터에게 건네진다. 더 자세한 정보는, 「IDirectSoundBuffer8::Play」를 참조할것. lpdsSourceBuffer 가 NULL 의 경우, 이 파라미터는 0 이 아니면 안된다.
- dwFlags
- [in] 다이레크트파스스르. IDirectSoundBuffer::Play 가 불려 갈 때, 이 값은 dwFlags 파라미터에게 건네진다. 더 자세한 정보는, 「IDirectSoundBuffer8::Play」를 참조할것. lpdsSourceBuffer 가 NULL 의 경우, 이 파라미터는 0 이 아니면 안된다.
- lpUserBuffer
- [out] 예약된 버퍼가 놓여지는 메모리의 포인터.
반환값
성공했을 경우는 DV_OK 를 돌려준다. 또는, 다음의 몇개의 에러값을 돌려준다.
DVERR_ALREADYBUFFERED 지정된 ID 에는 이미 사용자 버퍼가 있다. DVERR_INVALIDOBJECT DirectPlay 개체의 포인터는 무효이다. DVERR_INVALIDPARAM 메서드에 건네진 1 개 이상의 파라미터가 무효이다. DVERR_INVALIDPOINTER 지정된 포인터가 무효이다. DVERR_NOTALLOWED 개체에는, 이 처리를 실행하는 권한이 없다. DVERR_NOTCONNECTED DirectPlay Voice 개체가 접속되지 않다. DVERR_NOTINITIALIZED 이 메서드를 호출하기 전에,IDirectPlayVoiceClient::Initialize 메서드 또는 IDirectPlayVoiceServer::Initialize 메서드를 호출할 필요가 있다. DVERR_OUTOFMEMORY 요구된 처리를 실행하려면 , 메모리가 부족하다. DVERR_SESSIONLOST 트랜스포트는 세션에의 접속을 상실했다.
주의
DirectPlay 의 음성 세션이 믹싱 서버 세션의 경우, 이 메서드는 실패해, DVERR_NOTALLOWED 를 돌려준다.
3D 사운드 버퍼 개체의 모든 멤버 함수에 액세스 할 수 있지만, DirectPlay Voice 클라이언트가 버퍼를 사용해 수신 오디오의 스트리밍을 실시하기 (위해)때문에, DirectSound3Dbuffer 개체의 Lock,UnLock, 또는 Play 의 각 메서드는 사용하지 않는 것.
여기서 버퍼를 지정했을 경우, DirectPlay 는 그 버퍼를 player 또는 그룹의 버퍼로서 사용한다. 사용자 생성의 버퍼에는 다음의 제한이 있다.
- 버퍼는, 22 Khz, 16 비트, 단청의 포맷이 아니면 안된다.
- 버퍼의 길이는 1 초 이상이 아니면 안된다.
- 버퍼는, DSBCAPS_GETCURRENTPOSITION2 및 DSBCAPS_CTRL3D 플래그를 사용해 생성되지 않으면 안 된다.
- 버퍼는, 1차 버퍼여서는 안 된다.
- DirectPlay 에 버퍼를 건네줄 때는, 버퍼가 재생중에서 만나서는 안 된다.
버퍼의 형식이 올바르지 않은 경우, 메서드는 DVERR_INVALIDBUFFER 를 돌려준다.
DirectPlay 에 버퍼를 건네줄 때는, 버퍼가 잠금 되고 있어서는 안 된다. 각각의 사용자가 불필요하게 되는지, player가 음성 세션을 떨어지는 경우,IDirectPlayVoiceClient::Delete3DSoundBuffer 를 호출해, 리소스를 릴리즈 할 필요가 있다.
DirectPlay Voice 가 버퍼에 기입하려고 했을 때에 버퍼 또는 버퍼의 일부가 잠금 되고 있는 경우, 메서드는 DVERR_INVALIDBUFFER 를 돌려준다. 메서드가 돌아간 다음에 버퍼를 잠그었을 경우는,DVMSGID_SESSIONLOST 메시지를 받아들인다. 관련지을 수 있는 구조체의 hResult 멤버는 DVERR_LOCKEDBUFFER 로 설정된다. 이 후의 메서드의 호출은,DVERR_NOTCONNECTED 에러 코드를 돌려준다.