我正在寻找一种方法来从 shell 开始播放音频文件(mp3、m4a)作为后台任务,然后能够在稍后执行诸如暂停/快进之类的操作。
使用内置命令行选项是否可以:
$ play audio.mp3 &
$ play --pause
或者通过玩家的进程ID?
$ play audio.mp3 & echo $! > pid
$ control_process $(cat pid) --signal pause
(示例仅供说明。)
答案1
如果可以选择使用 VLC 播放器,您可以通过远程应用程序 (GUI) 或使用 dbus 调用的 CLI 来控制正在运行的 VLC 进程。
例如 - 假设安装了 qdbus - 在当前播放的音乐上切换播放/暂停:
$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause
或转到播放列表中的下一首:
$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next
查看所有可用命令:
$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2
答案2
没有通用的解决方案,但至少有 2 个玩家可以做到这一点。
第一个是mplayer
与named pipes
。
首先,创建/tmp/mplayer.fifo
命名管道:
$ mkfifo /tmp/mplayer.fifo
启动mplayer
并将其指向/tmp/mplayer.fifo
:
$ mplayer -novideo -idle -slave -input file=/tmp/mplayer.fifo file.mp3 </dev/null >/dev/null 2>&1 &
现在您可以通过写入以下内容来暂停和恢复播放/tmp/mplayer.fifo
:
$ echo pause > /tmp/mplayer.fifo
随后pause
将恢复播放:
$ echo pause > /tmp/mplayer.fifo
您还可以执行其他操作,例如快进:
$ echo seek +60" > /tmp/mplayer.fifo
或快退播放:
$ echo "seek -60" > /tmp/mplayer.fifo
第二个是mocp
。开始播放:
$ mocp -S; mocp -p file.mp3
暂停/恢复播放:
$ mocp --toggle-pause
答案3
您可能想了解一下MPD,因为它几乎可以做您想做的所有事情(远程控制、添加新曲目等)。它不是作为 shell 中的后台进程运行,而是作为系统服务运行,这意味着它可以轻松地跨多个会话和登录使用。它甚至能够从另一个系统进行远程控制(它广泛用于网络控制的自动点唱机类型设备)。
它还有许多不错的前端,包括可以从控制台使用的前端。