Aktuelle Lautsprecherlautstärke (Signalstärke) ermitteln

Aktuelle Lautsprecherlautstärke (Signalstärke) ermitteln

Ich versuche, ein Widget für Awesome WM zu erstellen, das die Lautstärke steuert und überwacht.

Das Abrufen und Einstellen der Lautsprecherlautstärke ist in ALSA und PulseAudio einfach, aber wie sieht es mit der Ermittlung der tatsächlichen Signalstärke aus?

Damit meine ich das tatsächliche Geräusch, das Sie hören. Wenn beispielsweise kein Ton abgespielt wird, ist es Null. Genau wie Sie es von einem Verstärker (dem VU-Monitor) hören würden.

Normalerweise gelingt es mir, eine Datei zu finden, /proc/die einen gewissen Wert hinsichtlich der Nutzung enthält (z. B. /proc/statzur CPU-Auslastung), aber diesmal ist das nicht der Fall.

Das Ziel besteht darin, eine Audioanzeige in Echtzeit anzuzeigen (vorzugsweise separate L/R-Kanäle), die dem Gain-VU-Monitor eines Verstärkers ähnelt.

Beachten Sie, dass die Frage nicht lautet, wie man dies für Awesome WM programmiert, sondern wie man die Werte erhält, die dafür verwendet werden können

Antwort1

Ich glaube nicht, dass das trivial ist, und diese Frage sollte wahrscheinlich zu Stackoverflow verschoben werden.

Soweit mir bekannt ist, gibt es keine sysfsSchnittstelle procfsfür den Zugriff auf den endgültigen (ALSA-)[Audio-]Mix. Es gibt nicht einmal eine Garantie dafür, dass so etwas in der Software vorhanden ist, da manche Hardware (wie z. B. emu10k1) ihren eigenen Mix durchführt, obwohl ich zugegebenermaßen keine Ahnung habe, wie das funktioniert.

Außerdem gibt es mehrere Audioausgänge (digital (wie SPDIF), analog, Kopfhörer oder Lautsprecher usw.) und mehrere Lautsprecherkonfigurationen auf derselben Karte, ganz zu schweigen von der Möglichkeit mehrerer Karten.

Am besten ist es vermutlich, zu versuchen, das verwendete ALSA-Gerät anzuzapfen (vermutlich, hw0wenn das Mischen in einem Soundsubsystem wie Pulseaudio erfolgt oder dmixwenn kein Soundsubsystem verwendet wird), da dies der „letzte Schritt“ ist, bevor das Audio die Hardware erreicht. Allerdings habe ich keine Ahnung, ob das möglich ist; wahrscheinlich nicht.

Wenn Sie davon ausgehen können, dass der Benutzer etwas wie Pulseaudio verwendet, wird die Aufgabe viel einfacher. Software wieAbonnierensetzt dies bereits um, wie unter demWiedergabeRegisterkarte, sowie Pre-Final-Mix-Phasen unterAusgabegeräte. Technisch gesehen geht es dabei darum, den Audiostream selbst abzurufen und ihn dann in den Frequenzbereich umzuwandeln (z. B. durchStFt), um es irgendwie zu visualisieren; alles, was Sie hierfür wirklich benötigen, ist Zugriff auf den Audiostream, und pulseaudio kann diesen (wie pavucontrol) über einen Sink bereitstellen.

Ich bin keine große Hilfe, oder? Wenn ich Sie wäre und dies nur für meinen Desktop wollte und Pulseaudio verwenden würde (was ich zufällig selbst benutze), wäre mein erstes Ziel, den endgültigen Mix-Stream zu erhalten. Die Jungs indieser Threadscheint eine elegante Methode dafür gefunden zu haben, bei der nur pactlund verwendet werden pacmd, was auch ganz einfach programmgesteuert möglich wäre.

Wenn Sie den Audiostream haben, bleibt nur noch die Mathematik :-)

verwandte Informationen