如何在控制台中读出pulseaudio客户端的音量等级

我想读出几个pulseaudio客户端的audio的音量。

我喜欢解决的问题是:我正在用xmms听音乐,然后暂停,听一首朋友在YouTube上发给我的歌。 一个小时后,我突然发现我没有听任何音乐!

我想到的(非常基本的)解决scheme是一个bash脚本,它只是每秒钟检查除xmms之外的所有应用程序的音量,如果任何应用程序正在发出声音,xmms被暂停,如果没有声音,并且xmms是沉默的, xmms已启用。 (我希望能够做到这一点在app-wise,例如,pidgin应该被忽略)

我只能findgraphics工具来读出音量,比如pavucontrol,它很好地显示它。 我真的不想编写各种C程序来做这么简单的事情,所以:

  1. 我正在朝着正确的方向思考,还是有一个更简单的解决scheme
  2. 如果没有,我该如何读出当前单独的应用程序的音量

也许你可以从输出流中记录一个音频样本,看它是否(接近)0.这个流水线给你一个单一的样本,其形式为-32768到32767(含)之间的数字:

parec --raw --channels=1 --latency=2 2>/dev/null | od -N2 -td2 | head -n1 | cut -d' ' -f2- | tr -d ' ' 

您需要调整parec参数,可能还需要调整PulseAudio配置,才能点击输出流并从中进行记录。

pactl list转储列表…好吧,似乎几乎所有的东西。 用一个运行的mplayer -ao pulse实例,我得到了以下输出:

 Sink Input #2 Driver: protocol-native.c Owner modulee: 8 Client: 10 Sink: 0 Sample Specification: s16le 2ch 44100Hz Channel Map: front-left,front-right Mute: no Volume: 0: 100% 1: 100% 0: 0.00 dB 1: 0.00 dB balance 0.00 ... Properties: media.name = "audio stream" application.name = "MPlayer" native-protocol.peer = "UNIX socket client" .... application.process.binary = "mplayer" ... 

它不会给你当前的监视器级别(当前正在播放的音量),但是,也许它是足够的?

我甚至懒得读这些卷。 我写了一个模块,其中包含一个接收器,检测连接到它的应用程序的音量,并可以执行的动作,以及一个虚拟应用程序,你可以直接到现有的水槽最终音频输出。