web-dev-qa-db-ja.com

conkyで、Deadbeefで再生されているトラックのプログレスバーを表示するにはどうすればよいですか?

Deadbeefオーディオプレーヤー用の簡単なconkyスクリプトがありました。

enter image description here

上記の行に関係する部分はこれです:

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}

曲の進行状況を示すプログレスバーを追加するにはどうすればよいですか?

2
user32012

execbarに続いて、バーの何パーセントが塗りつぶされているかを示す0〜100の数値を返すコマンドを使用して、デフォルトサイズのバーを描画できます。たとえば、PATHに次のシェルスクリプト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}

スクリプトは、デッドビーフから出力された経過時間と合計時間を秒に変換し、最後にパーセンテージに変換するだけです。

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

enter image description here

1
meuh

私もこれを行う方法を探していましたが、すでにconkyファイルにluaスクリプトを使用していたので、これを行うためにlua関数を作成することにしました。これにより、外部のbashスクリプトに依存する必要がなくなりました。

このルートに興味がある人は、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}

これは新しいconky1.10構文を使用しており、luaコードにはlua5.3以降が必要であることに注意してください。

2