現在のスピーカーの音量(信号強度)を調べる

現在のスピーカーの音量(信号強度)を調べる

音量を制御および監視する素晴らしい wm 用のウィジェットを作成しようとしています。

ALSA と PulseAudio ではスピーカーの音量を取得して設定するのは簡単ですが、実際の信号強度を取得するにはどうすればよいでしょうか。

ここで私が言っているのは、実際に聞こえるノイズのことです。例えば、音が再生されていない場合は、ノイズはゼロです。アンプ (VU モニター) で見られるのと同じです。

/proc/通常、何が使用されているか (CPU 使用率など) に関する何らかの値を保持するファイルを見つけることができます/proc/statが、今回はそうではありません。

実際の目標は、アンプのゲイン VU モニターに似たリアルタイム オーディオ表示 (できれば個別の L/R チャネル) を表示することです。

質問は、これを素晴らしいWMでプログラムする方法ではなく、それを実行するために使用できる値を取得する方法についてであることに注意してください。

答え1

これは些細なことではないと思うので、この質問はおそらくstackoverflowに移動したほうがよいでしょう。

私の知る限り、最終的な (ALSA) [オーディオ] ミックスにアクセスするためのsysfsprocfsインターフェイスは存在しません。一部のハードウェア (など) は独自のミキシングを実行するため、ソフトウェアにそのようなものが存在するという保証すらありませんemu10k1が、正直なところ、それがどのように機能するかはわかりません。

また、複数のオーディオ出力(デジタル(SPDIF など)、アナログ、ヘッドフォン、スピーカーなど)や、同じカード上の複数のスピーカー構成の問題もあり、複数のカードを使用する可能性もあります。

おそらく最善策は、使用されている ALSA デバイス ( hw0pulseaudio などのサウンド サブシステムでミキシングが行われている場合、またはdmixサウンド サブシステムが使用されていない場合) にアクセスしてみることです。これは、オーディオがハードウェアに到達する前の「最後のステップ」だからです。そうは言っても、これが可能かどうかはわかりません。おそらく不可能でしょう。

ユーザーがpulseaudioのようなものを使っていると仮定できる場合、タスクははるかに簡単になります。パブコントロールすでにこれを実装しており、再生タブ、および最終ミックス前の段階出力デバイス技術的には、オーディオストリーム自体を取得し、それを周波数領域に変換する(例えば、スタンフィート) を使用して、何らかの方法で視覚化します。このために必要なのはオーディオ ストリームへのアクセスだけであり、pulseaudio は (pavucontrol と同様に) シンク経由でこれを提供します。

あまり役に立っていませんね。もし私があなたで、デスクトップ用にこれが欲しいだけなら、そして私がpulseaudio(私自身もたまたま使っています)を使っていたら、私の最初の目標は最終的なミックスストリームを取得することです。このスレッドと のみを使用してそれを実行する巧妙な方法を見つけたようですpactlpacmd、これはプログラムでも非常に簡単に実行できます。

オーディオ ストリームを取得したら、残るのは計算だけです :-)

関連情報