4

我知道这是关于一个特定的程序(mplayer 后端);但是它将用于对前端进行编程,所以我希望它仍然被认为是 Stack Overflow 上的主题。

我想运行两个 mplayer 从属实例,它们将用于在不同的音频流之间淡入淡出(webradio;平滑地改变频道)。为此,我设置了 mplayer 的“软件音量”,这样它就不会影响声卡的 PCM 输出通道,而是插入了一个软件音量混合器来调节音量。

但是,我遇到以下问题。

我使用以下命令启动 mplayer(可以在命令行上测试):

mplayer -slave -idle -softvol

并向 mplayer 发送以下命令:

loadfile <url>
set volume 0

它开始(短时间)以 100% 的音量播放文件,然后跳到 0% 的音量。如果我交换这两个命令,mplayer 会告诉我无法调节音量:

Failed to set property 'volume' to '0'.
ANS_ERROR=PROPERTY_UNAVAILABLE

显然,尚未加载音频过滤器/尚未设置音频输出或类似的东西,因此 mplayer 无法更改不存在的音频输出的音量。

我可以强制 mplayer 提前初始化所有内容,以便我可以将音量设置为 0%,加载文件,然后增加音量以淡入播放吗?

我已经检查了我是否可以在播放某些文件(例如静音虚拟文件)后设置音量;mplayer 抱怨同样的错误。目前,我能想到的唯一选择是启动这样一个虚拟文件,调整音量,停止虚拟文件,加载正确的文件来播放,它会以刚刚设置的音量开始。但我不敢相信这是最好的选择。

4

2 回答 2

6

我自己解决了这个问题:虽然我尝试遵循本指南-af volume=0但没有帮助。但是,还有一个-volume 0命令行选项对我有用:

mplayer -slave -idle -softvol -volume 0
于 2013-01-21T17:30:01.550 回答
3

我发现这很完美@我的家庭播放器

重要的是,音量设置:'echo "volume $i 1"' 中的 1 否则 vol 没有变化。

mkfifo /tmp/mi1 和 /tmp/mi2 并在此之前将 $url1 和 $url2 设置为您的 radiostreamurls

mplayer -softvol -slave -input file=/tmp/mi1 $url1 &>/dev/null &  mplayer -softvol -slave -input file=/tmp/mi2 $url2 &  for ((i=1; i<=100; i+=1)); do sleep 0.25; echo "volume $(( 100 - $i )) 1 ">/tmp/mi1; sleep 0.25 ; echo "volume $i 1 ">/tmp/mi2  ; done ;  (sleep 5 ; echo quit >/tmp/mi1 ;echo quit >/tmp/mi2)& 

快乐聆听

于 2014-12-14T05:09:06.670 回答