Amarok – XChat
Oft sieht man im IRC diese schönen “now playing”-Nachrichten, und letzt hab ich mir gedacht “Kaba, hol dir auch eins”.
Da ich eigentlich nur noch (ok, außer zum Zocken) im Linux bin, also XChat und amaroK nutz, wurde nach “amarok xchat” in Google gesucht – wer hätts gedacht…
Natürlich hab ich auch was gefunden, aber die Ausgabe beim Befehl /amarok hat mir einfach nicht gepasst… hier die Form:
Kabarakh is listening to Band – Album – Titel
Hat mir gar nicht gefallen, also hab ich gleich die Datei geöffnet und geschaut, ob ich das ändern kann. Nach anfänglichen Schwierigkeiten (Python hat keine {}-Anweisungsblöcke, sondern Einrückungen – hab ich spät gemerkt) kam dann ein umgeordnetes Script raus.
Aber auch damit war ich nicht zufrieden, also ab in die Datei, schauen, über welche Befehle Amarok angesprochen wird und versuchen, diese nachzuahmen… heraus kommen nun Ausgaben in folgender Form:
Kabarakh is listening to title[Titel] artist[Artist] album[Album] duration[derzeitige Zeit/Gesamtzeit]
Außerdem wird bei Pause und bei ausgeschaltetem Amarok angezeigt, dass nichts gespielt wird…
Meine Vorlage war übrigens consistencies.net, eine Lizensierung stand nicht dabei, aber Python und die XChat-Scripts sind ja Quelloffen… also denke ich dass es nichts macht, wenn ich meine Version hier zum Download reinstelle und wahrscheinlich zwischendurch mit neuen Funktionen versorge… meldet euch bei Fehlern! (Der Befehl ist übrigens immer noch /amarok)
Edit: Nun ist auch ein Fortschrittsbalken implementiert, den man durch ändern einer Variable im Script (siehe Kommentare) ändern kann.
Außerdem habe ich (sry Chimera) die “based on”-Hinweise gelöscht, da in dem Script außer dem befehl “me is listening to” und den dcop-Kommandos, welche nicht anders gehen, kein Urpsrungscode mehr enthalten ist…
Edit: Und wieder eine neue Version, diesesmal wird auch erkannt, wenn Amarok nicht gestartet ist und ausgegeben, dass kein Lied läuft (also wie bei Pause)
Edit (mal wieder): Neue Version, jetzt kann man zwischen 3 Varianten des Fortschrittsbalken wählen, indem mal in der Zeile
bar = bar3(percent)
die Zahl vor (percent) ändert. Sie unterscheiden sich nur in der Anzahl der Felder und darin, wann eine Raute und wann ein Minus erscheint. Hier die 3 Varianten:
- 0-10% = keine Raute, ab 10% eine Raute pro 10%, somit bei 90-99% 10 Rauten –> Maximum
- 0-4% = keine Raute, ab 5% eine Raute pro 10%, somit 95-99% 10 Rauten –> Maximum
- 0-4% = keine Raute, ab 5% eine Raute pro 5%, somit 95-99% 20 Rauten –> Maximum
edit once again: nun wurde das design von der Progressbar leicht geändert (nachdem die Raute jeder hat…) – jetzt erscheinen anstelle der Raute fette Doppelpunkte, macht sich besser find ich…
Außerdem hab ich gemeinerweise den Befehl /amaversion erstellt, mit dem man Werbung machen kann
ruhig oft verwenden ^^

27 Oktober 2007 um 01:25
Hi, klar kannst du das Skript weiterverwenden. IIRC gibt es entweder auf der Seite von Amarok oder X-Chat noch eine sehr nette Version davon, die den Songtitel in zufällige und ganz lustige Ausprüche verpackt.
Gruss
27 Oktober 2007 um 14:11
höhö….python is cool…
ich nutz derzeit ne abgewandelte Version eines “Now Playing” scripts für XChat und Exaile…
dank dem programm kann ich exaile nun über Strg+F1/F2/F3 steuern
28 Oktober 2007 um 13:27
jo steuerungsscripts gehen dank dcop auch bei amarok leicht
aber da man generell auf super+(z,x,c,v,b) die globalen tastenkombis hat, macht das bei amarok weniger sinn… ich überleg grad eh wie ich das script ver(schlimm)bessern kann
06 November 2007 um 22:29
Servusm, Kabarakh!
Ich hab’ mir Dein Skript gesaugt und folgendermaßen modifiziert. Ich hoffe, Du hast nixhts dagegen.
# amarok_np.py 0.1
# by Diogenes von Wien http://members.chello.at/diogenes
# announces song played by amarok
# based on *amarok_xchat_variant* by christian herberger (aka kabarakh)
# which you can find at http://kabarakh.pytalhost.de/blog/2007/10/26/amarok-xchat/
# installation: just copy this file to /xchat2 or whatever your xchat config directory is
# use : command /ap
__module_name__ = “amarok_np”
__module_version__ = “0.1″
__module_description__ = “python module for xchat to display facts about songs played”
import xchat
import commands
def amarok_send(word, word_eol, userdata):
if ( commands.getoutput(‘dcop amarok’) == “No such application: ‘amarok’” ) or ( commands.getoutput(‘dcop amarok’) == “ERROR: Couldn’t attach to DCOP server!” ):
xchat.command(‘me isn\’t playing any song…’)
else:
if (commands.getoutput(‘dcop amarok player isPlaying’)==”true”):
percent = (int)((float)(commands.getoutput(‘dcop amarok player trackCurrentTime’))/(float)(commands.getoutput(‘dcop amarok player trackTotalTime’)) * 100)
if commands.getoutput(‘dcop amarok player album’) != ”:
xchat.command(‘me l\xe4\xdft amarok 02′ + commands.getoutput(‘dcop amarok player title’) + “02 von 02″ + commands.getoutput(‘dcop amarok player artist’) + “02 auf 02″ + commands.getoutput(‘dcop amarok player album’) + “02 spielen.”)
else:
xchat.command(‘me l\xe4\xdft amarok 02′ + commands.getoutput(‘dcop amarok player title’) + “02 von 02″ + commands.getoutput(‘dcop amarok player artist’) + “02 spielen.”)
else:
xchat.command(‘me isn\’t playing any song…’)
return xchat.EAT_ALL
xchat.hook_command(‘ap’, amarok_send)
xchat.prnt(‘amarok_np 0.1 loaded..’)
06 November 2007 um 22:58
Ich schau mirs mal morgen an
aber klar ist das in ordnung
07 März 2009 um 18:38
Hi!
mittlerweile Platz 1 glaub ich.
Hab das Script auch über google “amarok xchat” gefunden
ich habs auch gleich ausprobiert, doch bei mir zeigt der immer an, dass ich nichts höre. Ich habe herausgefunden, dass dcop mein amarok nicht findet (?), also habe ich so gut wie es ging das Script für (q)dbus umgeschrieben.
war auch gleich das erste mal, dass ich python programmiert habe …
def amarok_send(word, word_eol, userdata):
global bar, switch, bar_mod
if (commands.getoutput(‘qdbus org.kde.amarok /Player GetMetadata’)==”Service ‘org.kde.amarok’ does not exist.”):
xchat.command(‘me isn\’t playing any song…’)
else:
if (commands.getoutput(‘qdbus org.kde.amarok /Player GetMetadata’)!=”"):
if switch == True:
percent = (int)((float)(commands.getoutput(‘qdbus org.kde.amarok /Player PositionGet’))/(float)(commands.getoutput(‘qdbus org.kde.amarok /Player GetMetadata | grep mtime:’).replace(‘mtime: ‘,”)) * 100)
if bar_mode == 1:
bar1(percent)
elif bar_mode == 2:
bar2(percent)
else:
bar3(percent)
xchat.command(‘me is listening to title[02' + commands.getoutput('qdbus org.kde.amarok /Player GetMetadata | grep title:').replace('title: ','') + "02] artist[02" + commands.getoutput('qdbus org.kde.amarok /Player GetMetadata | grep artist:').replace('artist: ','') + "02] duration[02"+ str((int)((float)(commands.getoutput('qdbus org.kde.amarok /Player PositionGet')))/1000) + "s / " + str((int)((float)(commands.getoutput('qdbus org.kde.amarok /Player GetMetadata | grep mtime:').replace('mtime: ','')))/1000) + "s02]” + bar)
bar = “”
else:
xchat.command(‘me isn\’t playing any song…’)
return xchat.EAT_ALL
—
ist nur der def amarok_send block, wenn jemand also mit dem script probleme hat kann er das mal ausprobieren.
08 März 2009 um 14:01
joa danke, ich selbst nutze immer noch nen uralt-amarok und hab deswegen noch keine änderung gebraucht… hmm schade, die einrückungen sind weg bei deinem kommentar…
mit deiner erlaubnis werd ich das script nehmen und als neue version hier veröffentlichen… ich korrigier auch die leerzeichen
09 März 2009 um 11:06
klar darfst du das, dafür habe ich das ja auch als kommentar gepostet
ich habe nur keine funktion “isPlaying” oder dergleichen gefunden, daher erkennt das script nicht, ob amarok Spielt oder Pause ist, aber das ist eigentlich auch egal, denn wenn man Stop drückt gibt der qdbus befehl einen leeren string wieder.
aber ausführlich getestet hab ich das nocht nicht.