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 関数を作成することにしました。

この方法に興味がある場合は、conky.config セクションの conkyrc に 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

に続いて、バーの何パーセントが埋められているかを示す 0 から 100 までの数値を返すコマンドを使用すると、デフォルト サイズのバーを描画できます。たとえば、 PATH にexecbar次のシェル スクリプトがあるとします。myscript

#!/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 からの経過時間と合計時間の出力を秒数に変換し、最終的にパーセンテージに変換するだけです。

結果は次のようになります。

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

関連情報