尋找目前揚聲器音量(訊號強度)

尋找目前揚聲器音量(訊號強度)

我正在嘗試為很棒的 wm 創建一個小部件來控制和監視音量。

在 ALSA 和 PulseAudio 中取得和設定揚聲器音量很容易,但要取得實際訊號強度呢?

我的意思是您聽到的實際噪音,例如,如果沒有聲音播放,則噪音為零。就像您看到的擴大機(VU 監視器)一樣。

通常我可以設法找到一個文件,/proc/其中包含有關正在使用的內容的一些值(例如,/proc/statCPU 使用情況),但這次情況並非如此。

目標實際上是顯示即時音訊顯示(最好是單獨的 L/R 通道),類似於擴大機的增益 VU 監視器。

請注意,問題不在於如何為很棒的 wm 進行編程,而是如何獲得可用於執行此操作的值

答案1

我認為這不是微不足道的,這個問題可能應該轉移到 stackoverflow。

據我所知,沒有sysfsprocfs沒有介面可以存取最終的(ALSA)[音訊]混音;甚至不能保證軟體中存在這樣的事情,因為某些硬體(例如emu10k1)會執行自己的混合,儘管我承認不知道它是如何運作的。

還有同一張卡上的多個音訊輸出(數位(如 SPDIF)、類比、耳機或揚聲器等)和多個揚聲器配置的問題,更不用說多張卡的可能性了。

最好的選擇大概是嘗試利用任何使用的 ALSA 設備(大概hw0如果混合發生在像pulseaudio這樣的聲音子系統中,或者dmix沒有使用聲音子系統),因為這是音頻到達硬體之前的“最後一步” 。話雖這麼說,我不知道這是否可能;可能不會。

如果您可以假設使用者正在使用pulseaudio之類的東西,那麼任務就會變得容易得多。軟體如帕武控制已經實現了這一點,如下所示回放選項卡,以及預最終混合階段輸出裝置。從技術上講,這涉及獲取音訊串流本身,然後將其轉換為頻域(例如,透過執行斯托夫)以便以某種方式將其視覺化;為此,您真正需要的是存取音訊串流,pulseaudio 可以透過接收器提供此功能(就像 pavucontrol 所做的那樣)。

我幫不了什麼忙,不是嗎?如果我是你,只是想在我的桌面上使用這個,並且如果我使用pulseaudio(我自己碰巧使用),我的第一個目標將是嘗試獲得最終的混合流。那些傢伙在這個線程似乎已經找到了一種僅使用pactl和來做到這一點的雄辯方法pacmd,這也可以很容易地以程式設計方式完成。

當您掌握了音訊串流時,只剩下數學了:-)

相關內容