在 conky 中,如何显示 Deadbeef 中播放的曲目的进度条?

在 conky 中,如何显示 Deadbeef 中播放的曲目的进度条?

我为 Deadbeef 音频播放器编写了一个简单的 conky 脚本:

在此输入图像描述

与上面几行有关的部分是这样的:

TEXT
${color 3399FF}${alignr}db audio is playing: 
#${alignr}
${color FFFFFF}${alignr} ${exec deadbeef --nowplaying "%a"} 
${color FFFFFF} ${alignr}${exec deadbeef --nowplaying "%t"}
${color FFFFFF}${alignr}${exec deadbeef --nowplaying "%b"} 
${color FFFFFF}
${alignr}${color 3399FF}${exec deadbeef --nowplaying "%e"}${offset 2}${alignr} / ${exec deadbeef --nowplaying "%l"} 
${alignr}${image ./logo.png -p 0,-1 -s 25x25}${color 3399FF}

如何添加进度条以显示歌曲的进度?

答案1

我也在寻找一种方法来执行此操作,并且由于我已经在 conky 文件中使用了 lua 脚本,因此我决定创建一个 lua 函数来执行此操作,这样我就不必依赖外部 bash 脚本。

如果有人有兴趣走这条路,您需要将您的 lua 文件包含在 conkyrc 的 conky.config 部分中:

conky.config = {
   ...other config options...,    
   lua_load         = '/path/to/file.lua'
}

然后在您的 lua 文件中,您需要以下函数(请注意,这是使用 deadbeef 0.7.0 附带的 deadbeef 的新 foobar 格式语法,它不仅在旧语法已被弃用时更具未来性,而且简化了计算)[修复了我刚刚注意到的一个愚蠢的拼写错误]:

function conky_song_progress()
   local song_progress = "deadbeef --nowplaying-tf '(100*%playback_time_seconds%)//%length_seconds_fp%' 2>/dev/null"
   local get_progress = assert(io.popen(song_progress))
   local progress     = math.tointeger(assert(loadstring("return " .. get_progress:read('*all')))())
   get_progress:close()
   return progress
end

然后添加到您的 conky.text 部分:

${lua_bar song_progress}

另请注意,这是使用新的 conky 1.10 语法,并且 lua 代码需要 lua 5.3+。

答案2

您可以使用后跟命令来绘制默认大小的条形,execbar该命令应返回 0 到 100 之间的数字,给出条形填充的百分比。例如,如果您myscript的 PATH 中有以下 shell 脚本:

#!/bin/bash
deadbeef --nowplaying "%e %l" |
awk '
{ n = split("::" $1,t,":")
  elapsed = (t[n-2]*60+t[n-1])*60+t[n]
  n = split("::" $2,t,":")
  total = (t[n-2]*60+t[n-1])*60+t[n]
  printf "%d\n",elapsed*100/total
}'

那么你可以使用 conky 线:

${execbar myscript}

该脚本只是将 deadbeef 输出的经过时间和总时间转换为秒,最后转换为百分比。

结果如下:

在此输入图像描述

相关内容