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スクリプトを使用しているため、外部bashスクリプトに頼る必要がないように、これを行うためのlua関数を作成することにしました。 。

誰かがこのパスに従うことに興味がある場合は、conkyrcのconky.configセクションにluaファイルを含める必要があります。

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の数字を返す必要があります。たとえば、myscriptPATHに次のシェルスクリプトがあるとします。

#!/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 の経過時間と合計時間出力を秒に変換し、最後にパーセントに変換します。

結果は次のとおりです。

ここに画像の説明を入力してください。

関連情報