Привет всем. Я создаю программу с 3d-эффектами в DirectSound. Проблема в том, что не удается создать интерфейс IDirectSound3DListener и IDirectSound3DBuffer. Вот код:
| Код | IDirectSound *DS; IDirectSoundBuffer *DSBuffer; IDirectSound3DBuffer *DS3DBuffer; IDirectSound3DListener *DS3DListener; IDirectSoundNotify *DSNotify; WAVEFORMATEX wfx; DSBUFFERDESC desc; DSBPOSITIONNOTIFY dsp[1]; void *ptr; DWORD size; DWORD readed; wfx.wFormatTag = WAVE_FORMAT_PCM; wfx.nChannels = 1; wfx.nSamplesPerSec = 11025; wfx.nBlockAlign = 1; wfx.nAvgBytesPerSec = 11025; wfx.wBitsPerSample = 8; wfx.cbSize = 0; DirectSoundCreate(Guid, &DS, NULL); DS->SetCooperativeLevel(Handle, CLevel); desc.dwSize = sizeof(desc); desc.dwFlags = DSBCAPS_CTRL3D | DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLDEFAULT | DSBCAPS_CTRLPOSITIONNOTIFY | DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC; desc.dwBufferBytes = BufferBytes; desc.lpwfxFormat = &wfx; desc.dwReserved = 0; DS->CreateSoundBuffer(&desc, &DSBuffer, NULL); if(FAILED(DSBuffer->QueryInterface(IID_IDirectSound3DBuffer, (void**) &DS3DBuffer))) MessageBoxA(NULL, "Не удается создать IDirectSound3DBuffer", "Ошибка", MB_OK + MB_ICONERROR); if(FAILED(DSBuffer->QueryInterface(IID_IDirectSound3DListener, (void**) &DS3DListener)))MessageBoxA(NULL, "Не удается создать IDirectSound3DListener", "Ошибка", MB_OK + MB_ICONERROR); if(FAILED(DSBuffer->QueryInterface(IID_IDirectSoundNotify, (void**) &DSNotify))) MessageBoxA(NULL, "Не удается создать IDirectSoundNotify", "Ошибка", MB_OK + MB_ICONERROR);
|
если химичить с WAVEFORMATEX, то иногда удается создать интерфейс IDirectSound3DBuffer, но с IDirectSound3DListener - глухо. Пробовал устанавливать значения структуры WAVEFORMATEX и до объявления в DSBUFFERDESC и после, одно и то же, при создании IDirectSound3DBuffer возвращает ошибку "Неверный параметр". Что надо сделать, чтобы параметр был верным? Компилятор использую BCB6. |