#1 Le 08/09/2007, à 12:43
- mulima
mpd : playlist dynamique
bonjour
J'ai écris un script python qui permet de compléter dynamiquement la liste de lecture courante de mpd
Le principe est d'interroger last.fm (audioscrobbler) sur l'artist en cours et de récupérer les suggestions associées. Ensuite pour chaque suggestion, le script cherche dans les morceaux de la bibliothèque les correspondances et les ajoute a la file d'attente
Ca permet donc d'avoir de la music en continu sur le même genre que ce qui est en cours ...
Recupérer le script :
svn co "http://mumumat.no-ip.com/svn/trunk/mpd_dynamic_playlister" mpd_dynamic_playlister
Installer en plus
sudo apt-get install python-elementtree
L'executer:
cd mpd_dynamic_playlister
python dynamic_playlister.py
je n'ai pas encore reussi a le faire fonctionner en daemon, donc pour le lancer en le decrochant de votre shell (en tache de fond, donc ...)
nohup python dynamic_playlister.py &
Ne connaissant pas encore bien python , tout aide sera la bienvenue pour l'améliorer
Merci pour vos retours :-)
edit : j'ai maj de l'url du checkout .. p'tite erreur
edit2: script mis a jour , verification de la presence de mpc
edit3: suppression des appels bash en utilisant la lib mpdclient2 :-)
edit 4 : le script fonctionne maintenant a distance + un fichier de config est créé
Dernière modification par mulima (Le 09/02/2008, à 08:48)
Hors ligne
#2 Le 08/09/2007, à 12:52
- CasseTaTele
Re : mpd : playlist dynamique
ça plantouille (j'ai essayé avec (p) pour permanant mais ça plante aussi ):
sebastien@sebastien-desktop:~$ svn co "https://mumumat.no-ip.com/trac/browser/trunk/mpd_dynamic_playlister" mpd_dynamic_playlister
Erreur de validation du certificat du serveur pour 'https://mumumat.no-ip.com:443' :
- Le certificat n'est pas signé pas une autorité de confiance.
Valider le certificat manuellement !
Informations du certificat :
- nom d'hôte : mumumat.no-ip.com
- valide de Mon, 28 May 2007 12:07:17 GMT à Tue, 27 May 2008 12:07:17 GMT
- signataire : MULIMA, MULIMA, BORDEAUX, FRANCE, FR
- empreinte : e1:34:39:9d:a4:9f:c1:47:90:d3:95:dc:45:d3:e1:71:0a:57:33:43
(R)ejet, acception (t)emporairement ou (p)ermanente ? t
svn: Échec de la requête PROPFIND sur '/trac/browser/trunk/mpd_dynamic_playlister'
svn: PROPFIND de '/trac/browser/trunk/mpd_dynamic_playlister': 200 OK (https://mumumat.no-ip.com)
Edit:
mais ça marche en copiant/collant cette adresse dans firefox:
https://mumumat.no-ip.com/trac/browser/trunk/mpd_dynamic_playlister ...
....oups non quand je fais enregistrer 'la cible du lien sous' ça m'enregistre une page html et pas du python,
j'aurais bien copier/coller le code mais ya les numéros de ligne et j'ai la flemme pour le moment
Dernière modification par CasseTaTele (Le 08/09/2007, à 12:58)
Hors ligne
#3 Le 08/09/2007, à 13:00
- mulima
Re : mpd : playlist dynamique
ya ce lien qui permet d'obtenir un zip du dossier complet
https://mumumat.no-ip.com/trac/changese … format=zip
Dernière modification par mulima (Le 08/09/2007, à 13:01)
Hors ligne
#4 Le 08/09/2007, à 13:07
- CasseTaTele
Re : mpd : playlist dynamique
euhh... ça marque ça en haut de la console (devenue noire) mais y se passe rien :
Every 60,0s: python dynamic_playlister.py Sat Sep 8 14:05:41 2007
en même temps comment on lit lastfm avec mpd ? faut faire quelquechose avant de lancer le script (pendant,après,...) ?
quand je quitte avec ctrl+c ça met ça (si ça aide) :
Traceback (most recent call last):
File "dynamic_playlister.py", line 13, in <module>
import audioscrobbler
File "/home/sebastien/Desktop/mpd_dynamic_playlister/lib/audioscrobbler.py", line 273, in <module>
sebastien@sebastien-desktop:~/Desktop/mpd_dynamic_playlister$ elementtree.ElementTree import ElementTree
sebastien@sebastien-desktop:~/Desktop/mpd_dynamic_playlister$
Dernière modification par CasseTaTele (Le 08/09/2007, à 13:11)
Hors ligne
#5 Le 08/09/2007, à 13:12
- mulima
Re : mpd : playlist dynamique
as tu installé mpc ?... j'ai oublié de le mentionner :-s
sudo apt-get install mpc
edit : ca n'est plus la peine maintenant
Dernière modification par mulima (Le 09/09/2007, à 10:00)
Hors ligne
#6 Le 08/09/2007, à 13:34
- CasseTaTele
Re : mpd : playlist dynamique
euh.. effectivement je ne l'avais pas installé, par contre ça change rien ... ça marche toujours pas !
mais j'ai jamais écouté lastfm avec mpd avant, alors faut me dire déjà comment on fait ,
à moins que ton script fasse vraiment tout ... mais dans ce cas quelle musique écoute t'il depuis lastfm, je comprend pas ...
Dernière modification par CasseTaTele (Le 08/09/2007, à 13:36)
Hors ligne
#7 Le 08/09/2007, à 13:39
- mulima
Re : mpd : playlist dynamique
y a t il un message d'erreur ...?
le principe s'est de recupere le morceau que mpd est en train de jouer
puis de demander a lastfm une liste d' artists equivalents
et si parmis ces resultats il trouve dans ta bibliotheque des equivalence, il les ajoutes a ta playlist
Dernière modification par mulima (Le 08/09/2007, à 13:43)
Hors ligne
#8 Le 08/09/2007, à 15:52
- CasseTaTele
Re : mpd : playlist dynamique
voila le message d'erreur obtenu:
sebastien@sebastien-desktop:~/Desktop/mpd_dynamic_playlister$ watch -n60 'python dynamic_playlister.py'
Traceback (most recent call last):
File "dynamic_playlister.py", line 13, in <module>
import audioscrobbler
File "/home/sebastien/Desktop/mpd_dynamic_playlister/lib/audioscrobbler.py", line 273, in <module>
from elementtree.ElementTree import ElementTree
ImportError: No module named elementtree.ElementTree
sebastien@sebastien-desktop:~/Desktop/mpd_dynamic_playlister$
j'ai essayé de jouer un morceau sur mpd en utilisant sonata , après j'ai lancé le script mais arrivé à la fin sonata a rejoué le morceaux courant
sinon idem en pilotant depuis la console avec mpc
Hors ligne
#9 Le 08/09/2007, à 18:19
- pmd
Re : mpd : playlist dynamique
En fait, j'ai pas bien compris à quoi ça servait
Ca récupère les chanson sur last.fm ? Ou après, il faut avoir les chanson suggéré par last.fm ?
Hors ligne
#10 Le 08/09/2007, à 18:27
- mulima
Re : mpd : playlist dynamique
un exemple:
tu ecoute un morceau de bob marley
le script va obtenir de lastfm un liste d'artists similaires
donc par exemple
peter tosh
burning spear
steel pulse
etc....
si dans ta bibliotheque tu possedes des titres de ces artistes ils seront ajouté a ta playlist courante
en lancant le script regulierement ta playlist sera completée progressivement en fonction des suggestions et de ce que tu possedes
est ce plus clair comme cela ?
Hors ligne
#11 Le 08/09/2007, à 23:03
- pmd
Re : mpd : playlist dynamique
Ouai, beaucoup plus clair
Donc si j'ai un morceau de rap, il pourra toujours aller chercher sur last.fm, j'écouterai toujours la même chanson. C'est un peu inutile d'après moi.
Par contre, je découverts un fonction de last.fm
Hors ligne
#12 Le 08/09/2007, à 23:24
- mulima
Re : mpd : playlist dynamique
je pige pas ce que tu dis la ...
ya plein de lecteur qui font ca
listen, exaile, amarok
mais mpd n'a pas cette fonctionnalié ... et moi j'aime bien ne pas être obligé de remplir souvent la playlist, donc j'essai (en apprenant le python au passage) de coder ca ...
un (autre) exemple
http://www.lastfm.fr/music/Beastie+Boys/+similar
Hors ligne
#13 Le 09/09/2007, à 09:12
- CasseTaTele
Re : mpd : playlist dynamique
j'ai toujours la meme erreur,
je crois qu'il me manque un truc: "ImportError: No module named elementtree.ElementTree"
Hors ligne
#14 Le 09/09/2007, à 09:57
- mulima
Re : mpd : playlist dynamique
j'ai mis le script a jour
pour cette erreur c'est une dependance manquante, autant pour moi :-)
sudo apt-get install python-elementtree
merci pr tes retours en tout cas ! :-)
Dernière modification par mulima (Le 09/09/2007, à 09:58)
Hors ligne
#15 Le 09/09/2007, à 10:13
- CasseTaTele
Re : mpd : playlist dynamique
j'ai téléchargé la dernière version du script, cette fois ça a marché:
sebastien@sebastien-desktop:~/Desktop/mpd3$ svn co "https://mumumat.no-ip.com/svn/trunk/mpd_dynamic_playlister" mpd_dynamic_playlister
A mpd_dynamic_playlister/dynamic_playlister.py
A mpd_dynamic_playlister/lib
A mpd_dynamic_playlister/lib/audioscrobbler.py
Révision 13 extraite.
par contre ça plante à l'execution:
sebastien@sebastien-desktop:~/Desktop/mpd3/mpd_dynamic_playlister$ python dynamic_playlister.py
Traceback (most recent call last):
File "dynamic_playlister.py", line 17, in <module>
import daemonize
ImportError: No module named daemonize
il manque encore quelquechose ...
EDIT:
j'ai créé un fichier nommé daemonize.py sous la racine et j'ai copier ce texte : http://code.djangoproject.com/browser/d … format=txt
maintenant j'ai cette erreur :
sebastien@sebastien-desktop:~/Desktop/mpd3/mpd_dynamic_playlister$ python dynamic_playlister.py
Traceback (most recent call last):
File "dynamic_playlister.py", line 18, in <module>
import mpdclient2
ImportError: No module named mpdclient2
EDIT2:
j'ai donc téléchargé ça
et maintenant j'ai cette erreur:
sebastien@sebastien-desktop:~/Desktop/mpd3/mpd_dynamic_playlister$ python dynamic_playlister.py
Traceback (most recent call last):
File "dynamic_playlister.py", line 24, in <module>
conn = mpdclient2.connect()
File "/home/sebastien/Desktop/mpd3/mpd_dynamic_playlister/mpdclient2.py", line 335, in connect
conn = mpd_connection(host, port)
File "/home/sebastien/Desktop/mpd3/mpd_dynamic_playlister/mpdclient2.py", line 293, in __init__
self.talker = socket_talker(host, port)
File "/home/sebastien/Desktop/mpd3/mpd_dynamic_playlister/mpdclient2.py", line 22, in __init__
self.sock.connect((host, port))
File "<string>", line 1, in connect
socket.gaierror: (-5, 'No address associated with hostname')
de rien, ça m'intéresse aussi comme script, merci à toi de développer ça
Dernière modification par CasseTaTele (Le 09/09/2007, à 10:21)
Hors ligne
#16 Le 09/09/2007, à 10:32
- mulima
Re : mpd : playlist dynamique
python-mpdclient doit manquer ...
sudo apt-get install python-mpdclient
et je vire le daemonize c pas encore pret ... donc ca sert a rien
on peut p'tet se retrouver sur irc, sur freenode
je suis sur #mpd ...
Dernière modification par mulima (Le 09/09/2007, à 10:35)
Hors ligne
#17 Le 09/09/2007, à 10:38
- CasseTaTele
Re : mpd : playlist dynamique
on peut p'tet se retrouver sur irc, sur freenode
je suis sur #mpd ...
euh peut etre ce soir,
là il faut que je parte, je suis invité
sinon dans le même style que la fonction de similarité de lastfm ya ce site: http://www.music-map.com/
qui ne permet pas d'écouter mais de naviguer d'artiste en artiste par proximité musicale. (par contre je sais pas comment récupérer automatiquement l'info à parti de ce site ...)
Hors ligne
#18 Le 09/09/2007, à 11:09
- mulima
Re : mpd : playlist dynamique
et ca ne marche toujours pas ...? :s
Hors ligne
#19 Le 09/09/2007, à 11:15
- CasseTaTele
Re : mpd : playlist dynamique
Si ça roule !!
sebastien@sebastien-desktop:~/Desktop/mpd14/mpd_dynamic_playlister$ python dynamic_playlister.py
** MPD dynamic playlister *
Playing : 'Joe Henderson'
Suggestion 0 :
'Wes Montgomery'
Added to playlist:
Jazz/Classic Jazz/Guitar/Wes Montgomery (9)/Wes Montgomery - (1992) The Complete Riverside Recordings/Wes Montgomery - (1992) The Complete Riverside Recordings (CD 1)/04. Missile Blues (Take 5).mp3
Suggestion 1 :
'John Coltrane'
Added to playlist:
Jazz/Classic Jazz/Saxophone/John Coltrane (59)/1961 - Complete 1961 Village Vanguard Recordings (4CD)/Disk 1/03-Impressions.mp3
Suggestion 2 :
'Mal Waldron'
Added to playlist:
Jazz/Classic Jazz/Saxophone/Archie Shepp (37)/2002 - Archie Shepp & Mal Waldron - Left Alone Revisited/07-Blues For 52Nd Street.mp3
--> Max suggest reach !
Waiting 40 seconds more before another check
Hors ligne
#20 Le 09/09/2007, à 11:18
- CasseTaTele
Re : mpd : playlist dynamique
oups plantage ...
Waiting 40 seconds more before another check
Playing : 'Nancy Sinatra'
Suggestion 0 :
'Shirley Bassey'
Added to playlist:
Divers/La musique de paris dernière (3)/la musique de paris dernière - volume 2/12. Shirley Bassey And 12 Tree - Light My Fire.mp3
Traceback (most recent call last):
File "dynamic_playlister.py", line 118, in <module>
search_results=search(suggest.text)
File "dynamic_playlister.py", line 45, in search
for item in conn.search('artist',suggest):
File "/var/lib/python-support/python2.5/mpdclient2.py", line 173, in <lambda>
return lambda *args: self.send_n_fetch(cmd, args)
File "/var/lib/python-support/python2.5/mpdclient2.py", line 176, in send_n_fetch
getattr(self.sender, cmd)(*args)
File "/var/lib/python-support/python2.5/mpdclient2.py", line 207, in <lambda>
return lambda *args: send_command(self.talker, cmd, args)
File "/var/lib/python-support/python2.5/mpdclient2.py", line 162, in send_command
args[i] = escape(str(arg))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
sebastien@sebastien-desktop:~/Desktop/mpd14/mpd_dynamic_playlister$
Hors ligne
#21 Le 09/09/2007, à 11:44
- mulima
Re : mpd : playlist dynamique
c'est quand mm une bonne nouvelle !
v lui faire la peau a ce bug ;-)
merci
edit : fixé (un peu sale mais ca crash plus)
Dernière modification par mulima (Le 09/09/2007, à 13:31)
Hors ligne
#22 Le 10/09/2007, à 18:04
- CasseTaTele
Re : mpd : playlist dynamique
j'ai téléchargé et essayé la dernière version (révision 21) ça plante aussi:
Waiting 60 seconds more before another check
Playing : 'Dj Krush'
Suggestion 0 :
'David Holmes'
Added to playlist:
Electronic/Kruder & Dorfmeister (4)/Kruder & Dorfmeister - K&D Sessions/Cd 2/01. David Holmes - Gone.mp3
Suggestion 1 :
'Gus Gus'
Added to playlist:
Trip Hop/Thievery Corporation (5)/Thievery Corporation - Abductions & Reconstructions/10. Polyesterday (Gus Gus).mp3
--> Max suggest reach !
Waiting 120 seconds more before another check
Traceback (most recent call last):
File "dynamic_playlister.py", line 118, in <module>
if check_suggest_needed()==0:
File "dynamic_playlister.py", line 85, in check_suggest_needed
current_song=conn.currentsong()
File "/var/lib/python-support/python2.5/mpdclient2.py", line 173, in <lambda>
return lambda *args: self.send_n_fetch(cmd, args)
File "/var/lib/python-support/python2.5/mpdclient2.py", line 184, in send_n_fetch
return self.fetcher.one_object(keywords, type)
File "/var/lib/python-support/python2.5/mpdclient2.py", line 232, in one_object
self.talker.get_line()
File "/var/lib/python-support/python2.5/mpdclient2.py", line 32, in get_line
raise EOFError
EOFError
sebastien@sebastien-desktop:~/Desktop/mpd15/mpd_dynamic_playlister$
Juste une suggestion, je connais pas le python, mais en c++ tu peux encadrer tes fonction de try / catch pour gérér les erreurs, si par exemple ça plante à cause d'un mp3 mal tagué (cas qui arrivera toujours) et ben il n'a qu'à en choisir un autre plutot que de planter...
Hors ligne
#23 Le 10/09/2007, à 18:36
- CasseTaTele
Re : mpd : playlist dynamique
autre bug ...
sebastien@sebastien-desktop:~/Desktop/mpd15/mpd_dynamic_playlister$ python dynamic_playlister.py
** MPD dynamic playlister *
Playing : 'DJ Krush'
Suggestion 0 :
'Zero 7'
Added to playlist:
Trip Hop/Zero 7/Zero 7 - Simple Things/09 - Out of Town.mp3
Error searching mpd library forRöyksopp
Traceback (most recent call last):
File "dynamic_playlister.py", line 135, in <module>
search_results=search(suggest.text)
File "dynamic_playlister.py", line 57, in search
logit("Error searching mpd library for"+suggest)
File "dynamic_playlister.py", line 102, in logit
fp.write('\n'+str)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf6' in position 33: ordinal not in range(128)
sebastien@sebastien-desktop:~/Desktop/mpd15/mpd_dynamic_playlister$
je suis sous irc: freenode->#mpd si tu veux
Hors ligne
#24 Le 10/09/2007, à 20:09
- mulima
Re : mpd : playlist dynamique
oui j'ai noté ces bugs .. pas eu le temps de les corriger encore :-)
Hors ligne
#25 Le 11/09/2007, à 22:22
- mulima
Re : mpd : playlist dynamique
j'ai apporté quelques corrections ... est ce mieux maintenant ..?
Hors ligne