ISpatialAudioClient2-Schnittstelle (spatialaudioclient.h)

Die ISpatialAudioClient2-Schnittstelle erbt von ISpatialAudioClient und fügt Abfragen Methoden zur Unterstützung für das Auslagern großer Audiopuffer hinzu.

Vererbung

Die ISpatialAudioClient2-Schnittstelle erbt von der ISpatialAudioClient-Schnittstelle.

Methoden

Die ISpatialAudioClient2-Schnittstelle verfügt über diese Methoden.

 
ISpatialAudioClient2::GetMaxFrameCountForCategory

Ruft die maximale unterstützte Frameanzahl pro Verarbeitungsdurchlauf ab.
ISpatialAudioClient2::IsOffloadCapable

Fragt ab, ob der Audiorenderingendpunkt, für den ISpatialAudioClient2 erstellt wurde, die Verarbeitung von hardwareausgeladenem Audio unterstützt.

Hinweise

Mit der Audioausladung kann eine App einen großen Audiopuffer (in der Regel 1 bis 2 Sekunden) an den Audiogerätetreiber übermitteln. Ohne Auslagerung enthält ein typischer Audiopuffer nur 10 ms Daten, sodass die App etwa 100 Mal pro Sekunde aktiviert werden muss, um zusätzliche Audiodaten bereitzustellen. Die Verwendung von ausgeladenen großen Puffern kann zu Akkueinsparungen führen, insbesondere für das Szenario, in dem der Benutzer audiohört, wenn der Bildschirm ausgeschaltet ist.

Um dieses Feature verwenden zu können, muss der Treiber für das Audiogerät das Auslagern unterstützen. Fragen Sie die Unterstützung ab, indem Sie IsOffloadCapable aufrufen. Ermitteln Sie die maximale Anzahl von Audioframes, die für die Auslagerung unterstützt werden, indem Sie GetMaxFrameCountForCategory aufrufen.

ISpatialAudioClient2 wurde in Windows 11 (Windows Build 22000) eingeführt, sodass Ihr Code den Fall behandeln sollte, in dem er auf einer älteren Version von Windows ausgeführt wird, die die Schnittstelle nicht enthält. Das folgende Beispiel veranschaulicht das Aufrufen von QueryInterface in ISpatialAudioClient, um zu versuchen, eine instance von ISpatialAudioClient2 abzurufen und zu überprüfen, ob die abgerufene Schnittstelle nicht NULL ist, bevor ihre Methoden aufgerufen werden.

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);
}

Für UWP-Apps, die keinen Zugriff auf IMMDevice haben, sollten Sie eine instance von ISpatialAudioClient erhalten, indem Sie ActivateAudioInterfaceAsync aufrufen. Ein Beispiel finden Sie im WindowsAudioSession-Beispiel.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Build 22000
Kopfzeile spatialaudioclient.h