IDirectSound8 :: CreateSoundBuffer возвращает DSERR_BUFFERLOST - PullRequest
0 голосов
/ 14 апреля 2019

Что означает IDirectSound8 :: CreateSoundBuffer, возвращающий DSERR_BUFFERLOST?

Согласно документации DSERR_BUFFERLOST не является допустимым кодом возврата от CreateSoundBuffer.

У двух наших пользователей есть сообщения об ошибках, когда CreateSoundBuffer возвращает DSERR_BUFFERLOST (из сотен). Мы отправили продукты с этим кодом тысячам пользователей без каких-либо проблем. Оба пользователя сообщают о наличии последних звуковых драйверов. Один сообщает, что у него ноутбук Alienware 17 R4, а другой - ноутбук MSI.

Один пользователь Windows-10 сообщил, что в режиме совместимости с Windows-8 эта проблема решена.

Другие интернет-ссылки включают эту ссылку . Один пользователь попытался перезапустить службу Windows Audio, но это не дало никаких результатов Эта ссылка , похоже, описывает аналогичную проблему в другой игре.

Вот остальные настройки для этого вызова:

WAVEFORMATEX w = {};
w.wFormatTag = WAVE_FORMAT_PCM;
w.nSamplesPerSec = pSoundData->sampleRate;
w.wBitsPerSample = (WORD)pSoundData->bitsPerSample;
w.nChannels = (WORD)pSoundData->numChannels;

w.nBlockAlign = w.nChannels * w.wBitsPerSample / 8;
w.nAvgBytesPerSec = w.nSamplesPerSec * w.nBlockAlign;
w.cbSize = 0;

int bufferSize = pSoundData->decodedSize;


int bufferFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLVOLUME | DSBCAPS_CTRLFREQUENCY | DSBCAPS_CTRLPAN | DSBCAPS_GLOBALFOCUS;

DSBUFFERDESC bufferDesc = { sizeof(DSBUFFERDESC), (DWORD)bufferFlags, (DWORD)bufferSize, 0, &w, DS3DALG_DEFAULT };


LPDIRECTSOUNDBUFFER pBuffer;
HRESULT hr = pSoundInterface->mDevice->CreateSoundBuffer(&bufferDesc, &pBuffer, NULL);

1 Ответ

1 голос
/ 16 апреля 2019

Документы DirectSound не редактировались веками, но я могу вам сказать, что DSERR_BUFFERLOST является допустимой ошибкой из ряда методов: GetCurrentPosition, Play, Stop, Lock, Unlock и Restore.

DirectSound во всех версиях Windows, поскольку Windows Vista вообще не является «прямой».Для вывода используется Windows Core Audio (WASAPI).Основная причина получения DSERR_BUFFERLOST - всякий раз, когда вы получаете «критическую ошибку» от WASAPI.Обычно это происходит только в том случае, если вы теряете текущее воспроизводящее устройство, но оно обрабатывается внутренне для переключения устройств, поэтому на самом деле это не так.

Если вы можете воспроизвести эту проблему, попробуйте включитьСобытия DirectSound ETW для поиска кода ошибки, происходящего здесь.

8a93b54b-c75a-49b5-a5be-9060715b1a33    Microsoft-Windows-DirectSound
ae4bd3be-f36f-45b6-8d21-bdd6fb832853    Microsoft-Windows-Audio

В противном случае это может быть ошибка драйвера или оборудования при воспроизведении.

...