IDirectSound3DBuffer
Вопрос. Должен создаваться звуковой 3Д буфер, но не получается. Просьба объяснить почему:
//Структура хранящая инфо о звуке и буфере
typedef struct pcm_sound_typ
{
LPDIRECTSOUNDBUFFER8 lpDSBuf8;
LPDIRECTSOUND3DBUFFER8 lpDS3DBUf8;
........
} pcm_sound, *ptr_pcm_sound;
int DSoundLoadWav(char *szWav, DWORD dwFlags = DSBCAPS_CTRL3D |
DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_LOCSOFTWARE
)
{
LPDIRECTSOUNDBUFFER lpBtmp;
DSBUFFERDESC db;
//Загрузка вавки
.................
.................
//Подготовка параметров для создания звукового буфера вывода
memset(&pcmwf, 0, sizeof(WAVEFORMATEX));
pcmwf.wFormatTag = WAVE_FORMAT_PCM;
pcmwf.nChannels = 1;
pcmwf.nSamplesPerSec = 11025;
pcmwf.nBlockAlign = 1;
pcmwf.nAvgBytesPerSec = pcmwf.nSamplesPerSec * pcmwf.nBlockAlign;
pcmwf.wBitsPerSample = 8;
pcmwf.cbSize = 0;
memset(&db, 0, sizeof(DSBUFFERDESC));
db.dwSize = sizeof(DSBUFFERDESC);
db.dwFlags = dwFlags ;
db.dwBufferBytes = child.cksize;
db.lpwfxFormat = &pcmwf;
//Созание буфера вывода звука
if(FAILED(app.lpDS->CreateSoundBuffer(&db, &lpBtmp, NULL)))
{
delete[] snd_buffer;
return (-1);
}
else
{
HRESULT hr = lpBtmp->QueryInterface(IID_IDirectSoundBuffer8, (LPVOID*) &sound_fx[sound_id].lpDSBuf8);
if(FAILED(hr))
{
MessageBox(NULL, "Cant create DS8 Buffer", "DSError", MB_OK);
return (-1);
}
else
{
//!!!!!!!!!!!!!Вот тут он и не хочет нифига создавать.... :(
HRESULT hr = lpBtmp->QueryInterface(IID_IDirectSound3DBuffer8, (LPVOID*) &sound_fx[sound_id].lpDS3DBUf8);
if(FAILED(hr))
{
MessageBox(NULL, "Cant create DS8 3D Buffer", "DSerror", MB_OK);
return (-1);
}
else
{
lpBtmp->Release();
}
}
}
// Блоктрование звукового буфера
if(sound_fx[sound_id].lpDSBuf8->Lock(0, child.cksize, (void**)&audio_ptr1, &audio_length1, (void**)&audio_ptr2, &audio_length2, DSBLOCK_FROMWRITECURSOR) != DS_OK)
return (0);
//Запись данных в буфер
memcpy(audio_ptr1, snd_buffer, audio_length1);
memcpy(audio_ptr2, (snd_buffer +audio_length1), audio_length2);
//Освобождение буфера
if(sound_fx[sound_id].lpDSBuf8->Unlock(audio_ptr1, audio_length1, audio_ptr2, audio_length2)!= DS_OK)
return (0);
delete[] snd_buffer;
return (sound_id);
}
Буду очень благодарен за помощь!
Я думаю , что всё дело во флагах DSBCAPS_