Condividi tramite


Interfaccia ISpatialAudioClient2 (spatialaudioclient.h)

L'interfaccia ISpatialAudioClient2 eredita da ISpatialAudioClient e aggiunge metodi per eseguire query per il supporto per l'offload di buffer audio di grandi dimensioni.

Ereditarietà

L'interfaccia ISpatialAudioClient2 eredita dall'interfaccia ISpatialAudioClient.

Metodi

L'interfaccia ISpatialAudioClient2 include questi metodi.

 
ISpatialAudioClient2::GetMaxFrameCountForCategory

Ottiene il numero massimo di fotogrammi supportati per ogni passaggio di elaborazione.
ISpatialAudioClient2::IsOffloadCapable

Esegue una query sul fatto che l'endpoint di rendering audio creato da ISpatialAudioClient2 in supporta l'elaborazione audio caricata dall'hardware.

Commenti

L'offload audio consente a un'app di inviare un buffer audio di grandi dimensioni (in genere da 1 a 2 secondi) al driver del dispositivo audio. Senza offload, un tipico buffer audio contiene solo 10ms di dati, richiedendo che l'app venga svegliata circa 100 volte al secondo per fornire dati audio aggiuntivi. L'uso di buffer di grandi dimensioni caricato può offrire risparmi sulla batteria, in particolare per lo scenario in cui l'utente è in ascolto dell'audio con lo schermo disattivato.

Per usare questa funzionalità, il driver per il dispositivo audio deve supportare l'offload. Eseguire una query per il supporto chiamando IsOffloadCapable. Determinare il numero massimo di fotogrammi audio supportati per l'offload chiamando GetMaxFrameCountForCategory.

ISpatialAudioClient2 è stato introdotto in Windows 11 (Windows Build 22000), quindi il codice deve gestire il caso in cui è in esecuzione in una versione precedente di Windows che non include l'interfaccia. Nell'esempio seguente viene illustrato l'uso della chiamata a QueryInterface in ISpatialAudioClient per provare a ottenere un'istanza di ISpatialAudioClient2 e verificare che l'interfaccia recuperata non sia null prima di chiamare i relativi metodi.

HRESULT hr;
Microsoft::WRL::ComPtr<IMMDeviceEnumerator> deviceEnum;
Microsoft::WRL::ComPtr<IMMDevice> defaultDevice;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnum);
hr = deviceEnum->GetDefaultAudioEndpoint(EDataFlow::eRender, eMultimedia, &defaultDevice);

Microsoft::WRL::ComPtr<ISpatialAudioClient> spatialAudioClient;
hr = defaultDevice->Activate(__uuidof(ISpatialAudioClient), CLSCTX_INPROC_SERVER, nullptr, (void**)&spatialAudioClient);

Microsoft::WRL::ComPtr<ISpatialAudioClient2> spatialAudioClient2;
hr = spatialAudioClient->QueryInterface(__uuidof(ISpatialAudioClient2), (void**)&spatialAudioClient2);

if (spatialAudioClient2 != nullptr)
{
    BOOL offloadCapable = false;

    // AudioCategory_Media is just for example purposes.
    // Specify the same audio category that you intend specify in the call toISpatialAudioClient::ActivateSpatialAudioStream
    hr = spatialAudioClient2->IsOffloadCapable(AudioCategory_Media, &offloadCapable);
}

Per le app UWP che non hanno accesso a IMMDevice, è necessario ottenere un'istanza di ISpatialAudioClient chiamando ActivateAudioInterfaceAsync. Per un esempio, vedere l'esempio WindowsAudioSession.

Requisiti

Requisito Valore
Client minimo supportato Windows Build 22000
Intestazione spatialaudioclient.h