rhythmbox-client --print-playing
は、実際に再生されているかどうかに関係なく、曲の名前を教えてくれます。私は単に、現在rhythmboxによってサウンドが生成されているかどうかを知る必要があります(そのため、一時停止して後で一時停止を解除するかどうかを知ることができます)。
更新:
Oneい候補者の答え:
Rhythmboxには、この基本的なインターフェイスが実際にはないのではないかと思います。
しかし、pacmd list-sink-inputs
私が収集したものは、ミキサーにフィードの内容を問い合わせます。still再生中かどうかに関係なくrhythmboxをリストします。ただし、出力には「状態」行があり、音楽が一時停止されているかどうかに応じて「実行中」または「破損」になります。
pacmd list-sink-inputs
は実行中のすべてのプレーヤーのリストを提供するので、事前に探しているプレーヤーを知る必要はなく、どのプレーヤーがプレイ/一時停止しているかなども教えてくれます。 awkまたはbashでより良い仕事をする、私は確信しています:
import commands,re
def linux_musicplayer_check_whether_playing():
"""
Report which applications are currently sending
sound to the mixer, based on the output of the command:
pacmd list-sink-inputs
Also list those which are running/connected,
but not currently sending sound.
Returns a dict listing applications and a boolean playing state.
This is very GNU/Linux specific! At least, it works on Ubuntu.
On other platforms, there may be direct ways for each application.
For instance, under Ubuntu, you can ask banshee:
'playing' in commands.getstatusoutput("banshee --query-current-state")[1])
but there's nothing like this for rhythmbox.
"""
found={}
for cl in commands.getstatusoutput("pacmd list-sink-inputs |grep -e index: -e state: -e client:")[1].split('index:')[1:]:
found[ re.findall('<(.*?)>', cl.split(':')[2])[0].lower() ] =
'RUNNING' in cl.split(':')[1]
return(found)
MPRIS2 DBus interface を使用できます。これは確立された標準であり、ほぼすべてのプレーヤーによって実装されています。
プレーヤーを検出、表示、制御するためにUbuntu Unityサウンドインジケーターで使用されるものと同じ標準。したがって、スクリプトは汎用的であり、好きなプレーヤーで動作します。
ヒント:D-Feet
を使用して探索します。d-feetはDBusモニターであり、DBusインターフェイスと直接対話できます。
gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.mpris.MediaPlayer2.Player.Pause
gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.mpris.MediaPlayer2.Player.PlayPause
~$ gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.freedesktop.DBus.Properties.Get \
org.mpris.MediaPlayer2.Player PlaybackStatus
(<'Playing'>,)
~$ gdbus call \
--session \
--dest org.mpris.MediaPlayer2.rhythmbox \
--object-path /org/mpris/MediaPlayer2 \
--method org.freedesktop.DBus.Properties.Get \
org.mpris.MediaPlayer2.Player PlaybackStatus
(<'Stopped'>,)