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.
- Libere a interface ISpatialAudioObjectRenderStream e ISpatialAudioClient e quaisquer outras interfaces de áudio espacial usadas para renderização.
- Chame IMMDeviceEnumerator::GetDefaultAudioEndpoint para obter o dispositivo de áudio padrão atual.
- Tente ativar ISpatialAudioClient no dispositivo de áudio.
- Ative ISpatialAudioObjectRenderStream.
Dispositivo de áudio especificamente selecionado
Se o aplicativo selecionar um dispositivo de áudio específico, use as etapas a seguir para recuperar.
- Solte a interface ISpatialAudioObjectRenderStream e quaisquer outras interfaces de áudio espacial usadas para renderização, mas não libere ISpatialAudioClient.
- 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.
Tópicos relacionados
- [Recuperando-se de um erro de dispositivo inválido] (recovering-from-an-invalid-device-error.md) [Gerenciamento de fluxo] (stream-management.md)