4 Stimmen

Lautstärkepegel einer Audiositzung abrufen

Weiß jemand, wie man den aktuellen Lautstärkepegel einer Audiositzung* in Vista oder 7 ermitteln kann?

Ich habe die IAudioSessionControl2 und IAudioSessionManager2 Instanzen, die Sie für die Lautstärke benötigen cambia aber es ist schwer, das aktuelle Volumen zu ermitteln.

*Mit Audiositzung meine ich (grob) die anwendungsspezifische Audiokontrolle, nicht die "Master"-Kontrolle.


Beachten Sie, dass (soweit ich das beurteilen kann) IAudioSessionManager2-> GetSimpleVolume() ist hier nicht die richtige Antwort. Das einzige, was eine GUID in IAudioSessionControl2 veröffentlicht, ist die Parameter für die Gruppierung und die Verwendung in GetSimpleVolume erzeugt neue Sitzungen, anstatt Ihnen die Kontrolle für eine bestehende Sitzung zu geben.

GetSimpleVolume() ist das, was ich will, aber woher kommen die Parameter in diesem Setup?

3voto

Larry Osterman Punkte 15976

Eigentlich ist IAudioSessionManager::GetSimpleAudioVolume das, wonach Sie suchen.

Eine Audiositzung wird durch zwei (oder drei) Dinge identifiziert: Die Sitzungs-Guid, die Prozess-ID und das prozessübergreifende Flag (wenn das prozessübergreifende Flag bei der Erstellung des Streams angegeben wird, wird die Prozess-ID ignoriert).

Die einfache Audiolautstärke steuert die Lautstärke aller Streams innerhalb dieser Audiositzung. Es ist ziemlich einfach (die meisten Rendering-Frameworks geben NULL für die Session-GUID an). Wenn Ihre Anwendung eine bestimmte Sitzungs-GUID verwendet, sollten Sie nur die Sitzungs-GUID angeben, die Ihre Anwendung verwendet.

Aber es gibt noch eine andere Wendung. Die Lautstärkeregelung (sndvol.exe) fasst alle Sitzungen mit demselben "Gruppierungsparameter" in der Benutzeroberfläche zusammen - dies ist kein Teil der Lautstärkeregelung, sondern eine Komfortfunktion der Benutzeroberfläche, die nur für Webbrowser wie den IE existiert - sie dient dazu, dass Audio-Frameworks von Drittanbietern (die eine GUID_NULL-Sitzungs-GUID angeben) und das WMP OCX (das eine prozessübergreifende Sitzung mit einer bestimmten Sitzungs-GUID angibt) einen einzigen Schieberegler in der Benutzeroberfläche für die Lautstärke gemeinsam nutzen können.

1voto

Roald Punkte 1712

Ich denke, die ISimpleAudioVolume Schnittstelle sollte das tun, was Sie brauchen.
Es gibt eine Methode namens GetMasterVolume, die die Lautstärke für die Audiositzung zurückgibt.
Um die Schnittstelle zu erhalten, können Sie IAudioSessionManager::GetSimpleAudioVolume aufrufen.

Für den guid-Parameter können Sie denjenigen verwenden, den Sie bei der Erstellung der Audiostreams mit IAudioClient::Initialize angeben. Ich weiß ehrlich gesagt nicht, ob es andere Möglichkeiten gibt, die guid für eine Sitzung zu erhalten.

Der Gruppierungsparameter ist die ID der Gruppe, zu der die Sitzung gehört, und nicht die ID einer Sitzung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X