在 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 輸出的經過時間和總時間轉換為秒,最後轉換為百分比。

結果如下:

在此輸入影像描述

相關內容