控制mpg123音量

控制mpg123音量

一天中的好时光!目前正在开发诸如“智能家居”之类的东西,我需要以不同的音量级别启动不同的音频流。例如,我想听到原始音量 20% 的背景音乐,但如果有人按门铃,我想听到 100% 音量的铃声。目前,我正在使用mpg123Python 脚本。 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 的选项:

mpg1231) 将into的输出流式传输paplay,例如使用类似的内容

mpg123 --stdout ... | paplay --rate=44100 --format=s16le --channels=2 --stream-name=Music --client-name=Musicplayer --volume=65536

您可以如上所述在命令行上设置卷,也可以pavucontrol通过客户端名称设置一次卷,下次同一应用程序启动时它将记住该卷。因此,如果您使用不同的客户端名称,例如MusicplayerBellringer,您可以一劳永逸地预设音量,而无需从 Python 进行更改。

2) 使用其他一些程序来播放使用 Pulseaudio 的 MP3 文件,并且可以设置客户端名称,或者具有可识别的客户端名称,或者具有设置音量的选项。例如

mplayer -volume=... ...

然后你有与上面相同的选项。

3) 使用pamcdpactl设置正在播放的流的音量,例如

pacmd set-sink-input-volume 42 50%

你可以使用类似的东西

pacmd list-sink-inputs | egrep '(index)|(name)'

查找给定流或客户端名称的索引号。或者用 Python 解析完整的输出。

4) 使用Python中的Pulseaudio的DBUS接口。这将需要一些编程。

我不建议使用 Python 来pexpect通过 UI 以某种方式改变音量,这看起来像是一个可怕的拼凑,而且并不是真正的“更高级别”。

相关内容