Поделиться через


Восстановление из ошибки Invalid-Device (пространственный звук)

Многие методы API пространственного звука Microsoft, такие как ISpatialAudioClient, ISpatialAudioObjectRenderStreamи ISpatialAudioObject, возвращают коды ошибок, если звуковая конечная точка, используемая клиентским приложением, становится недействительной или если формат отрисовки пространственного звука изменяется на этой конечной точке. Эти коды ошибок указывают на то, что устройство конечной точки было отключено или что звуковое оборудование или связанные аппаратные ресурсы были перенастроены, отключены, удалены, пространственный звуковой режим изменен или недоступен для использования. Часто приложение может восстановиться после этой ошибки.

Коды ошибок, указывающие на ошибку недопустимого устройства, включают следующее:

  • SPTLAUDCLNT_E_DESTROYED
  • AUDCLNT_E_DEVICE_INVALIDATED
  • AUDCLNT_E_RESOURCES_INVALIDATED
  • AUDCLNT_E_UNSUPPORTED_FORMAT
  • SPTLAUDCLNT_E_INTERNAL

Стратегии обработки ошибок неисправного устройства

Рекомендуемая стратегия устранения ошибки некорректного устройства зависит от того, выбирает ли приложение конкретное устройство на основе внутренних требований или же позволяет пользователю явно выбрать устройство из списка доступных.

Звуковое устройство по умолчанию

Если приложение автоматически выбирает устройство по умолчанию, выполните следующие действия для восстановления.

  1. Освободите интерфейс ISpatialAudioObjectRenderStream и интерфейс ISpatialAudioClient, а также любые другие пространственные аудиоинтерфейсы, используемые для рендеринга.
  2. Вызовите IMMDeviceEnumerator::GetDefaultAudioEndpoint, чтобы получить текущее звуковое устройство по умолчанию.
  3. Попытка активировать ISpatialAudioClient на звуковом устройстве.
  4. Активируйте ISpatialAudioObjectRenderStream.

Специально выбранное звуковое устройство

Если приложение выбирает определенное звуковое устройство, выполните следующие действия для восстановления.

  1. Освободите интерфейс ISpatialAudioObjectRenderStream и любые другие пространственные звуковые интерфейсы, используемые для рендеринга, но не освобождайте ISpatialAudioClient.
  2. Используйте текущий экземпляр ISpatialAudioClient для активации ISpatialAudioObjectRenderStream.

Обратите внимание, что для обеих стратегий, перечисленных выше, применяются к приложениям, использующим интерфейсы ISpatialAudioObjectRenderStreamForMetadata или ISpatialAudioObjectRenderStreamForHrtf. Просто замените ISpatialAudioObjectRenderStream на приведенных выше шагах с помощью метаданных или интерфейсов Hrtf.

[Восстановление после ошибки Invalid-Device](recovering-from-an-invalid-device-error.md) [Управление потоками](stream-management.md)