一天中的好时光!目前正在开发诸如“智能家居”之类的东西,我需要以不同的音量级别启动不同的音频流。例如,我想听到原始音量 20% 的背景音乐,但如果有人按门铃,我想听到 100% 音量的铃声。目前,我正在使用mpg123
Python 脚本。 Python 脚本pexpect
运行 mpg123 并进行所需的设置,例如
mpg123 -vC <filename>
当前的方法's'
在玩家开始后立即发送暂停信号。然后我将所需的数量('-'
例如将音量减少 2)发送给播放器并恢复播放。嗯...它有效,但实现很丑陋,并且播放器启动和音量减小之间存在一些差距。至少在 python 脚本实际暂停播放器并降低音量之前我听到了一些第一个“数据包”。
有什么办法可以通过某些命令来减小音量吗?有什么办法可以让mpg123暂停吗?至少要消除这个差距
谢谢!
答案1
我对智能家居中的蓝牙音频管理做了同样的事情,并使用以下内容
mpg123 -f -2000 test.mp3
幅度的最大值为100%,对应于32768,我使用的值为2000,约为6.1%,更多详细信息请参阅手册man mpg123
我不建议使用pulse,只需在mpg123内部使用alsa
玩得开心
答案2
Pulseaudio 的选项:
mpg123
1) 将into的输出流式传输paplay
,例如使用类似的内容
mpg123 --stdout ... | paplay --rate=44100 --format=s16le --channels=2 --stream-name=Music --client-name=Musicplayer --volume=65536
您可以如上所述在命令行上设置卷,也可以pavucontrol
通过客户端名称设置一次卷,下次同一应用程序启动时它将记住该卷。因此,如果您使用不同的客户端名称,例如Musicplayer
和Bellringer
,您可以一劳永逸地预设音量,而无需从 Python 进行更改。
2) 使用其他一些程序来播放使用 Pulseaudio 的 MP3 文件,并且可以设置客户端名称,或者具有可识别的客户端名称,或者具有设置音量的选项。例如
mplayer -volume=... ...
然后你有与上面相同的选项。
3) 使用pamcd
或pactl
设置正在播放的流的音量,例如
pacmd set-sink-input-volume 42 50%
你可以使用类似的东西
pacmd list-sink-inputs | egrep '(index)|(name)'
查找给定流或客户端名称的索引号。或者用 Python 解析完整的输出。
4) 使用Python中的Pulseaudio的DBUS接口。这将需要一些编程。
我不建议使用 Python 来pexpect
通过 UI 以某种方式改变音量,这看起来像是一个可怕的拼凑,而且并不是真正的“更高级别”。