Partilhar via


Recuperando-se de um erro de dispositivo inválido (som espacial)

Muitos dos métodos da API de áudio espacial da Microsoft, como ISpatialAudioClient, ISpatialAudioObjectRenderStream e ISpatialAudioObject, retornam códigos de erro se o dispositivo de ponto de extremidade de áudio que o aplicativo cliente está usando se tornar inválido ou o formato de renderização de áudio espacial for alterado no ponto de extremidade. Esses códigos de erro indicam que o dispositivo de ponto de extremidade foi desconectado ou que o hardware de áudio ou os recursos de hardware associados foram reconfigurados, desabilitados, removidos, o modo de áudio espacial foi alterado ou indisponível para uso. Frequentemente, o aplicativo pode se recuperar desse erro.

Os códigos de erro que indicam um erro de dispositivo inválido incluem o seguinte:

  • SPTLAUDCLNT_E_DESTROYED
  • AUDCLNT_E_DEVICE_INVALIDATED
  • AUDCLNT_E_RESOURCES_INVALIDATED
  • AUDCLNT_E_UNSUPPORTED_FORMAT
  • SPTLAUDCLNT_E_INTERNAL

Estratégias para lidar com erros de dispositivo inválido

A estratégia recomendada para a recuperação de um erro de dispositivo inválido depende se o aplicativo seleciona automaticamente um dispositivo específico com base em requisitos internos ou se permite que o usuário selecione explicitamente um dispositivo de uma lista de dispositivos disponíveis.

Dispositivo de áudio padrão

Se o aplicativo selecionar automaticamente o dispositivo padrão, use as etapas a seguir para recuperar.

  1. Libere a interface ISpatialAudioObjectRenderStream e ISpatialAudioClient e quaisquer outras interfaces de áudio espacial usadas para renderização.
  2. Chame IMMDeviceEnumerator::GetDefaultAudioEndpoint para obter o dispositivo de áudio padrão atual.
  3. Tente ativar ISpatialAudioClient no dispositivo de áudio.
  4. Ative ISpatialAudioObjectRenderStream.

Dispositivo de áudio especificamente selecionado

Se o aplicativo selecionar um dispositivo de áudio específico, use as etapas a seguir para recuperar.

  1. Solte a interface ISpatialAudioObjectRenderStream e quaisquer outras interfaces de áudio espacial usadas para renderização, mas não libere ISpatialAudioClient.
  2. Use a instância ISpatialAudioClient atual para ativar ISpatialAudioObjectRenderStream.

Observe que, para ambas as estratégias listadas acima, as mesmas etapas podem ser aplicadas a aplicativos que usam as interfaces ISpatialAudioObjectRenderStreamForMetadata ou ISpatialAudioObjectRenderStreamForHrtf . Basta substituir ISpatialAudioObjectRenderStream nas etapas acima pelos metadados ou interfaces Hrtf.

[Recuperando-se de um erro de dispositivo inválido] (recovering-from-an-invalid-device-error.md) [Gerenciamento de fluxo] (stream-management.md)