我想读出当前为pulseaudio的几个客户播放的音频音量。
我想解决的问题如下: 我正在用xmms听音乐,然后我把它暂停,听一个朋友在youtube上发给我的一首歌。一个小时后,我突然发现我没有听任何音乐!
我想到的(非常基本的)解决方案是一个bash脚本,它只检查除xmms以外的所有应用程序的音量,如果有任何应用程序发出声音,xmms暂停,如果没有声音,和xmms是静默的,xmms已启用。 (我确实希望能够以app的方式执行此操作,例如,应该忽略pidgin)
我只能找到读取音量的图形工具,比如pavucontrol,它可以很好地显示它。我真的不想编写各种C程序来做这么简单的事情,所以:
答案 0 :(得分:7)
也许您可以从输出流中录制一个音频样本,看看它是否(接近)0。此管道为您提供单个样本,数字形式介于-32768和32767(含)之间:< / p>
parec --raw --channels=1 --latency=2 2>/dev/null | od -N2 -td2 | head -n1 | cut -d' ' -f2- | tr -d ' '
您需要调整parec
参数,可能还需要调整PulseAudio配置,以便接入输出流并从中进行记录。
答案 1 :(得分:2)
pactl list
转储一个列表...好吧,它似乎几乎所有东西。使用正在运行的mplayer -ao pulse
实例,我在输出中得到以下内容:
Sink Input #2
Driver: protocol-native.c
Owner Module: 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"
...
虽然它没有提供当前的显示器级别(当前正在播放的音频的音量),但也许它已经足够了?
答案 2 :(得分:0)
我甚至不愿意阅读这些卷。我写了一个模块,其中包含一个接收器,可以检测连接到它的应用程序的数量,并可以执行基于此的操作,以及可以指向现有接收器以进行最终音频输出的虚拟应用程序。