我在 Firefox 中观看 NHL 季后赛,但在广告期间,我正在测试我正在开发的音乐播放器。我在广告期间“取消暂停”我的音乐播放器,因此 pulseaudio 中有两个声源在播放。我希望我的音乐播放器(python 名称mserve
)比 Firefox 具有“声源优先级”。
目前,当 mserve 正在播放时,pulseaudio 似乎已经将 Firefox 的声音调暗了一点。声音调暗大概是 20% 到 40%?我怎样才能增加这个值,使 pulseaudio 将 Firefox 的声音调暗 60% 到 80%?
如果有软件可以自动识别广告何时开始,例如声音增益增加或人耳听不到的商业追踪软件激活后,我就不用在广告开始时单击“播放”或在曲棍球比赛恢复时单击“暂停”。
笔记:我认为它是pulseaudio
,并且不会alsa
在双输入流声音混合器中承担繁重的工作。我不是在寻找 GUI 声音混合器,而是寻找 bash 或 python 解决方案。
答案1
简短答案
在 Unix & Linux 网站上我发现了这个问答:
首先获取接收器的简短列表:
$ pactl list short sink-inputs
1545 0 1083 protocol-native.c float32le 2ch 48000Hz
1556 0 1083 protocol-native.c float32le 2ch 48000Hz
1688 0 1083 protocol-native.c float32le 2ch 44100Hz
1698 0 1455 protocol-native.c s16le 2ch 44100Hz
从上面的命令中删除short
以确认 Firefox(在我的情况下)实际上是1688
。我的音乐播放器刚刚加载并且是最后输入:1698
。当我在音乐播放器上按下播放键时,我将 Firefox 音量设置为 40%:
$ pactl set-sink-input-volume 1688 40%
当按下音乐播放器上的暂停键时,我使用以下命令将 Firefox 音量重置为 100%:
$ pactl set-sink-input-volume 1688 100%
长答案
40%
音量不够柔和所以25%
被使用。
声源可能存在多个实例,Firefox
因此需要将它们全部静音。
最终的代码如下:
def hockey_commercial(self):
'''
Commercial button plays music for 90 seconds then pauses.
'''
if self.play_hockey_active is True:
return # Already running, don't restart
self.play_hockey_active = True
self.play_hockey_secs = 90
self.play_hockey_remaining = self.play_hockey_secs
self.play_soften_firefox() # Soften volume of commercials
self.play_hockey_tstart = time.time()
if self.pp_state is "Paused":
self.pp_toggle() # Play music during commercials
def play_soften_firefox(self):
result = []
self.play_firefox_indices = []
result = os.popen('pactl list short sink-inputs') \
.read().strip().splitlines()
count = len(result)
if count < 2:
print('result missing firefox:',result)
return
# Firefox may have multiple entries
for line in result:
sink = line.split('\t')[0]
app = os.popen('pactl list sink-inputs | grep "Sink Input #' + \
sink + '" -A20 | grep application.name').read()
if "Firefox" in app:
self.play_firefox_indices.append(sink)
result = os.popen('pactl set-sink-input-volume ' + \
sink + ' 25%') \
.read().strip().splitlines()
如果你好奇它在运行时是什么样子的(请谅解我的第二个程序):
- 观看曲棍球比赛时音乐播放器暂停
- 当广告开始时,点击带有曲棍球棒角色的广告按钮
- 按钮文字变为剩余时间倒计时
- Firefox 的音量被削减至 25%,几乎听不见
- 音乐开始以正常音量播放
- 当倒计时归零时,音乐暂停,Firefox 音量恢复
- 您仍然可以在倒计时期间按暂停/播放