1 (03.12.2010 07:25 отредактировано alcoholismus)

Тема: Conky, как в коньках вывести обложку проигрываемого в MOCP альбома?

Решил немного порыться в дефолтных кранчевских коньках и добавил туда отображение текущего трека.

PLAYLIST:
${hr}
Artist$alignr$moc_artist 
Song$alignr$moc_song
Bitrate$alignr$moc_bitrate

http://static.itmages.com/i/10/1202/s_1291312242_3e5c45b169.png

Подскажите, как вывести ниже обложку альбома.

P.S.
через некоторое время, во время проигрывания информация исчезает-
http://static.itmages.com/i/10/1202/s_1291319706_0ee92bfc01.png
Как с этим справится ?

2 (25.12.2010 19:03 отредактировано alcoholismus)

Re: Conky, как в коньках вывести обложку проигрываемого в MOCP альбома?

Прошерстил гугл и на англоязычном кранчбанг форуме нашел скрипт, написанный на python. Скрипт, который как я понял выводит обложку проигрываемого альбома. Обложку скрипт берет на сайте albumart. Написан для MOCP и Rhytmbox. Собственно, вот и сам скрипт:

#!/usr/bin/python

import os, commands, urllib, Image, sys, types, shutil
from optparse import OptionParser

def get_info(player):
    check_running = commands.getoutput("ps aux")
    check_running = check_running.split("\n")
    if player == "moc":
        for line in check_running:
            if "mocp" in line:
                return commands.getoutput("mocp -Q %artist"),commands.getoutput("mocp -Q %album"),commands.getoutput("mocp -Q %song")
        return "","",""
    if player == "rhythmbox":     
        for line in check_running:
            if "/usr/bin/rhythmbox" in line:
                return commands.getoutput("rhythmbox-client --print-playing-format %ta"),commands.getoutput("rhythmbox-client --print-playing-format %at"),commands.getoutput("rhythmbox-client --print-playing-format %tt")
        return "","",""

def size_image(width, height):
    image = Image.open(home + "/.album")
    image = image.resize((width, height))
    image.save(home + "/.album", "png")
    
def reflect(width, height):
    image = Image.open(home + "/.album")
    flipped_image = image.transpose(Image.FLIP_TOP_BOTTOM)
    final_image = Image.new('RGBA', (width, (height * 2) + 1) , (0, 0, 0, 0))
    gradient = Image.new('L', (1,255))
    for y in range(255, 0, -1):
        if y < 128:
            gradient.putpixel((0,y),255 - (y * 2))
        else:
            gradient.putpixel((0,255-y),0)
    alpha = gradient.resize(flipped_image.size)
    flipped_image.putalpha(alpha)
    final_image.paste(image, (0, 0))
    final_image.paste(flipped_image, (0, height + 1))
    final_image.save(home + "/.album", "png")
                                        
parser = OptionParser()
parser.add_option("-p", "--player", dest="player", default="moc", help="media player")
parser.add_option("-s", "--size", dest="size", default="80x80", help="image size")
parser.add_option("-r", "--reflect", action="store_true", dest="reflect", default=False, help="image reflection")
(options, args) = parser.parse_args()

try:
    width,height = options.size.split("x")
    width = int(width)
    height = int(height)
except:
    parser.error("please specify size in WIDTHxHEIGHT format")
    
if options.player in ["moc", "rhythmbox"]:
    artist, album, title = get_info(options.player)
else:
    parser.error("player not supported")
    
home = os.getenv("HOME")
if artist == "" and album == "":
    if os.path.exists(home + "/.album"):
        os.remove(home + "/.album")
    if os.path.exists("/tmp/trackinfo"):
        os.remove("/tmp/trackinfo")
elif os.path.exists("/tmp/trackinfo") and open("/tmp/trackinfo").read() == artist + album:
    pass
else:
    url = "http://www.albumart.org/index.php?srchkey=" + urllib.quote_plus(artist) + "+" + urllib.quote_plus(album) + "&itempage=1&newsearch=1&searchindex=Music"
    albumart = urllib.urlopen(url).read()
    image = ""
    for line in albumart.split("\n"):
        if "http://www.albumart.org/images/zoom-icon.jpg" in line:
            image = line.partition('src="')[2].partition('"')[0]
            break
    if image:
        urllib.urlretrieve(image, home + "/.album")
        open("/tmp/trackinfo","w").write(artist + album)
    else:
        open("/tmp/trackinfo","w").write("album_not_found")
        shutil.copy(home + "/.noalbum", home + "/.album")
    size_image(width, height)
    if options.reflect:
        reflect(width, height)

Скрипт сохраняем под названием conkymusic.py и разрешаем запуск этого файла как программы.


В конфигурационном файле conky пишем:

${execi 10 /home/USER/.conky/conkymusic.py -g -s 75x75}
${image /home/USER/.album -p 170,10 -s 75x75}

(USER естественно заменяем на свой юзернейм)


Почти работает, но есть одна проблема, обложка меняется, только если перезапустить коньки.
Выглядит сейчас все так:
http://storage1.static.itmages.ru/i/10/1225/s_1293289380_7070a9661f.png

3

Re: Conky, как в коньках вывести обложку проигрываемого в MOCP альбома?

alcoholismus пишет:

через некоторое время, во время проигрывания информация исчезает

Решение:
Вместо  этого:

Artist$alignr$moc_artist 
Song$alignr$moc_song
Bitrate$alignr$moc_bitrate

Вписываем в конфиг коньков  это:

Artist:$alignr${execi 10 mocp -Q %artist}
Album:$alignr${execi 10 mocp -Q %album}
Track:$alignr${execi 10 mocp -Q %song}
Time:$alignr${execi 1 mocp -Q %ct}   ${execi 1 mocp -Q %tt}

В результате коньки будут обращаться к MOCp раз в десять секунд.
http://storage7.static.itmages.ru/i/11/0114/s_1294985707_8f25548ca6.png