今天在用手机听歌的时候,发现当播放其他软件时,音乐会暂停,当视频关掉时,音乐会继续播放。
我想知道在windows上是否也有类似软件,比如我打开网易云音乐在听歌,当我用浏览器打开B站播放视频的时候,网易云音乐会自动暂停,当视频停止播放时,网易云音乐会自动继续播放。
初步想法是获取所有打开的软件,判断软件是否有播放声音,同时接管网易云音乐播放暂停的快捷键,发现其他软件发出声音的时候,就按下快捷键暂停音乐,但其他软件没发出声音了,就播放网易云音乐。
如果能再高级一点更好,比如QQ的滴滴滴声音不会暂停音乐,但是QQ的语音通话会自动暂停音乐。
虽然自己手动按下播放器快捷键也可以很快的暂停和播放,但人总是想偷懒的,能自动化是最好的。
估计没人做吧。这玩意按照我的理解得上过滤驱动了。你把音频想象成一个文件。文件有独占和共享。独占就是自己使用此文件不让他人用。共享就是大家都可以用这个文件。写个过滤驱动。控制谁能访问,谁不能访问,定好策略就好了。
CCR
4
静音简单,但是音乐暂停是真没想到怎么做,这种网易云、qq音乐之类允许命令行启动暂停吗……
去网上找了一圈,暂时没看到相关的接口之类的东西
可能的思路:
至少以administrator权限启动自己制作的程序
然后通过实时读取其它软件的音量大小以及播放时间(比如2s内一个软件持续有声音,将该软件标记为播放状态),再设置最多允许一个软件存在播放状态,如果其它软件也是播放状态则强行暂停(或者说)之前的程序
但是这有一个很大的问题,暂停以后程序就被“冻结”了,冻结也就意味着没法接受后台的消息。请试想一个场景,如果你打着qq电话,微信又来电话了,那程序一运行,按照上面的逻辑,qq又会被暂停,也就是说你的qq电话会被强行终止……
故此,综上所述,以鄙人愚见,在这些软件没有提供官方的api或者cli命令等方式自己让自己暂时静音的话,想实现此功能几乎相当于天方夜谭

至少以我个人的思路是想不出来静音以及暂停程序之外的第三条路了,尤其是多个高优先级的东西同时发生的时候(微信电话加个腾讯会议),不手动设置谁知道该以什么逻辑设置静音啊……
L11
(漢故征西將軍曺侯)
5
实际上还是有办法的。首先通过 IAudioSessionEnumerator 接口获取所有播放音频的进程(系统的音量合成器实现的原理),然后向要暂停的进程发送一个虚拟的暂停键消息。当然成功率就不保证了,依赖于程序是否正确响应多媒体按键消息。
yazii
(Yazii!)
6
如果你使用浏览器播放音乐就没有这个问题了
因为我搓过这么一个浏览器扩展:
另外其实现在edge提供了播放器快速控制还蛮好用的

其实Windows是有提供播放器的标准控制接口的,但是软件不见得实现了,所以桌面软件没法保证体验
对,我也差不多是这个想法,系统的音量合成器在某个进程有声音时,它是有波动的。可以预设一个指定进程作为音乐播放器进程,利用多媒体按钮或者全局快捷键等方式来实现暂停与播放,再设置几个监控进程,比如监控浏览器进程,当浏览器持续3秒以上发出声音,就暂停音乐播放器,当浏览器静音超过5秒以上,就继续播放音乐。这个只要及时暂停,慢慢恢复就行。
不知道有没有大佬能手搓一个 
不一定需要冻结进程,可以借助多媒体的播放/暂停按键或者播放器自身的全局快捷键来实现
CCR
9
这倒是我的疏忽了,因为一直用笔记本电脑,没有这些控制键,所以完全没意识到(
我使用C#开发获得播放声音的应用列表,然后让ahk2控制音乐播放器的快捷键,实现的自动暂停音乐.
Niceb
(Niceb)
11
手机上是因为音频设备是独占(?)的,所以同一时间只有一个程序或媒体可以发声。
windows上可以考虑使用媒体键来控制,虽然各大音乐软件都没有通用的api,但是可以通过媒体键或设置通用的暂时/播放快捷键来实现控制。
给系统发消息就好了
手机端好像是因为权限的问题,首次遇到的时候应该会有提示,是否覆盖其他应用