
Source (link to git-repo or to original if based on someone elses unmodified work): Add the source-code for this project on opencode.net
This screenlet downloads and display synchronized lyrics of music files playing in the audio player.
Version 0.7.0 allows to create and upload lyrics to the database (for some time it will be used for testing, but I'll try not to delete anything :P)
Steps to create synchronized lyrics:
find unsynchronized lyrics (later will be implemented by the screenlet itself)
drag&drop text or file with lyrics to screenlet
during playing song, use Space key to insert time info
save or upload lyrics before screenlet switch to another song :)
Requires:
python-numpy can be needed on Ubuntu and possibly some other distributions in the case of crashing when you move cursor over control buttons
python-chardet for better dealing with different lyrics encoding, but it's optional
Set lyrics offset:
by 0.1s: Shift+Up/Down key
by 0.5s: Up/Down key
Supported players:
Rhythmbox
Exaile
Banshee
Audacious
Amarok
Music Player Daemon based players
Quodlibet - need to install plugin in package
Listen 0.6 and higher
Gmusicbrowser
Xmms - need to install pyxmms
Any other that support MPRIS API (direct or with plugin) - vlc, Songbird ...
Supported lyrics sources: ALSong, minilyrics, lrcdb
9 years ago
0.7.2
- fixed bug in saving/restoring cairo state in LyricsPanel visible on default theme
- searching lyrics on disk with ignoring case and accent and some bug fixes
- support of "offset" metadata in lyrics files
- added settings option - format of filename for saving/loading lyrics with automatic
conversion between them
- properties window works with newer screenlets package version
0.7.1
- fixed accessing of the song info metadata - doesn't crash on missing metadata
- works with a new gtk version (deprecation warning turned into TypeError)
- fixed bug in saving/restoring cairo context (in Widget and LyricsPanel classes)
0.7.0
- added possibility to upload lyrics to the database and using this database for searching
- reporting a missing lyrics to the database
- creating synchronized lyrics works again
0.6.9
-lyrics align settings: left, center, right
-lyrics translation on/off switch in menu
-update translation settings immediately
-safe minimizing (use when screenlet itself moves on desktop)
-works in gnome 2.30 (bug is in pycairo, not screenlet!)
0.6.8
- lyrics searching bug fix, now it should really works, I promise :D
0.6.7
- update of lyrics engine: ALSong now work again (it stopped to work at all after they changed ip address), minilyrics has better encoding handling
- theme update
older logs in changelog file
9 years ago
0.7.2
- fixed bug in saving/restoring cairo state in LyricsPanel visible on default theme
- searching lyrics on disk with ignoring case and accent and some bug fixes
- support of "offset" metadata in lyrics files
- added settings option - format of filename for saving/loading lyrics with automatic
conversion between them
- properties window works with newer screenlets package version
0.7.1
- fixed accessing of the song info metadata - doesn't crash on missing metadata
- works with a new gtk version (deprecation warning turned into TypeError)
- fixed bug in saving/restoring cairo context (in Widget and LyricsPanel classes)
0.7.0
- added possibility to upload lyrics to the database and using this database for searching
- reporting a missing lyrics to the database
- creating synchronized lyrics works again
0.6.9
-lyrics align settings: left, center, right
-lyrics translation on/off switch in menu
-update translation settings immediately
-safe minimizing (use when screenlet itself moves on desktop)
-works in gnome 2.30 (bug is in pycairo, not screenlet!)
0.6.8
- lyrics searching bug fix, now it should really works, I promise :D
0.6.7
- update of lyrics engine: ALSong now work again (it stopped to work at all after they changed ip address), minilyrics has better encoding handling
- theme update
older logs in changelog file
waltergallegog
6 years ago
First that all I wanna thank you for this great app.
Now, my problem that the screenlet has no background in the dark or transparent theme.
The lyrics are displayed correctly, and even the color adaptation works fine.
In the transparent theme there is no background at all (As it should be), but in the dark theme, at the end of the song, when the lyrics are finishing, the background appears, but only at the bottom, just like if the background were part of the lyrics.
This images explain better what I mean:
At the start or middle of the song
http://s2.subirimagenes.com/imagen/previo/thump_8912754screenshot-from-2014.png
At the end
http://s2.subirimagenes.com/imagen/previo/thump_8912757screenshot-from-2014.png
Well, thats it, I hope you can help me.
OS: Linux Mint 16 with cinnamon.
Report
imamulmqn
6 years ago
http://imamul-mqn.blogspot.com/2014/01/Software-Point-of-Sales-Online-Omega-POS-Cloud.html
http://seo-mqn.blogspot.com/2014/02/Software-Point-Sales-Online-omega-cloud.html
http://seo-mqn.blogspot.com
Report
saeednm
7 years ago
No module RSVG , graphics will not be so good
....
.
.
.
and it is solved by installing python-rsvg package !
but as "pchaubal89" said in the comments lyrics screenlet doesn't work anymore since lrcdb.org (the place where it got the lyrics from) has shutdown.
Report
frznn
8 years ago
**************************
iconify
Restored instances from session 'default' ...
NEW MPRIS PLAYER <players.mpris.MprisApiPlayer instance at 0x8be4d6c>
connect
signals
is_playing
Traceback (most recent call last):
File "LyricsScreenlet.py", line 1546, in doColorAdaptation
difference = abs(self.lyricsPanel.color_highlight[0] - textColor[0]) + abs(self.lyricsPanel.color_highlight[1] - textColor[1]) + abs(self.lyricsPanel.color_highlight[2] - textColor[2])
UnboundLocalError: local variable 'textColor' referenced before assignment
NEW MPRIS PLAYER <players.mpris.MprisApiPlayer instance at 0x967b9cc>
connect
signals
is_playing
NEW MPRIS PLAYER <players.mpris.MprisApiPlayer instance at 0x968b3ac>
connect
signals
is_playing
Traceback (most recent call last):
File "LyricsScreenlet.py", line 1546, in doColorAdaptation
difference = abs(self.lyricsPanel.color_highlight[0] - textColor[0]) + abs(self.lyricsPanel.color_highlight[1] - textColor[1]) + abs(self.lyricsPanel.color_highlight[2] - textColor[2])
UnboundLocalError: local variable 'textColor' referenced before assignment
get elapsed
Can't get elapsed time information from MPRIS API: org.freedesktop.DBus.Error.UnknownMethod: Interfaccia "org.freedesktop.MediaPlayer" inesistente sull'oggetto nel percorso /Player
NEW MPRIS PLAYER <players.mpris.MprisApiPlayer instance at 0x968b60c>
connect
signals
is_playing
get elapsed
Can't get elapsed time information from MPRIS API: org.freedesktop.DBus.Error.UnknownMethod: Interfaccia "org.freedesktop.MediaPlayer" inesistente sull'oggetto nel percorso /Player
get elapsed
Can't get elapsed time information from MPRIS API: org.freedesktop.DBus.Error.UnknownMethod: Interfaccia "org.freedesktop.MediaPlayer" inesistente sull'oggetto nel percorso /Player
get elapsed
and so on...(looping)
Effects: i can see the screenlet, it just don't work.
Report
pchaubal89
7 years ago
Lets hope someone has something similar with an open api.
Report
hadnet
9 years ago
first, congrats for you screenlet, is awesome, but I've a problem to save my lyrics. The Save button is desactived,
ex. when the music has no lyrics, I use the drag&drop and use the SPACE to set info time, etc, but I cant save it cause the save (harddisk) button doesn't work. Because of this , everytime I want hear that music, I've to drag&drop, set the time info with space again. Can help me?
ps: sorry, my english is horrible
Report
dencer
9 years ago
Report
hadnet
9 years ago
I've installed the 0.72 version
Report
dencer
8 years ago
save_lyrics=True
Report
hadnet
8 years ago
Report
hadnet
8 years ago
Report
hadnet
8 years ago
Report
asun200
9 years ago
Wondering about add deadbeef player ^__^
Report
dencer
9 years ago
Report
torturedutopian
9 years ago
Just a question : is it possible to make it more discreet ? Indeed, when lyrics are not found or my audio player is not started, there is still a big icon on my desktop.
Also, for some reason, I cannot access the settings windows (tried the latest version too)
Thanks again !
Report
dencer
9 years ago
But I think this should be already fixed in some version, probably at https://launchpad.net/~indiv-screenlets-dev. I will try to merge both versions and keep it up to date here.
Report
thecurseddevil
9 years ago
Report
thecurseddevil
9 years ago
Report
stratok
9 years ago
Report
KrakenHimoto
8 years ago
Report
venkatanaresh
9 years ago
Report
marcocolombini
9 years ago
tried the new version with the same accented two songs and both lyrics are now found. Hope this ends the accent bug.
What's bothering me now is the exception error I mentioned in my previous messages. It seems to appear more often than before (or perhaps it is just me!). After the exception the screenlet behaves strangely: the "lyrics engine finished!" message is not displayed anymore if song are changed (even if I think I've seen a new lyrics saved to disk, but I may be wrong) and sometimes the "searching" stamp is displayed forever. When I see it, I usually stop/start and searching on the net starts again with no timeout or conn problems.
Best
Marco
Report
marcocolombini
9 years ago
This is another thing you can look at later, anyway.
Bye
Marco
Report
marcocolombini
9 years ago
INFO:LyricsScreenlet:lyrics engine finished!
Exception in thread Thread-533:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 530, in __bootstrap_inner
self.run()
File "/usr/share/screenlets/Lyrics/lyricsengine/engine.py", line 29, in run
self.finishCallback()
File "/usr/share/screenlets/Lyrics/lyricsengine/engine.py", line 167, in onDownloaderFinish
self.finishCallback()
File "/usr/share/screenlets/Lyrics/LyricsScreenlet.py", line 572, in onEngineFinish
self.lyricsEngine.reportMissingLyrics(self.songInfo)
File "/usr/share/screenlets/Lyrics/lyricsengine/engine.py", line 214, in reportMissingLyrics
response = urllib2.urlopen(req)
File "/usr/lib64/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib64/python2.7/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib64/python2.7/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib64/python2.7/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib64/python2.7/urllib2.py", line 1173, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib64/python2.7/urllib2.py", line 1148, in do_open
raise URLError(err)
URLError: <urlopen error [Errno 111] Connection refused>
DEBUG:LyricsScreenlet:MINIMIZING minimalizing screenlet
**************************
DEBUG:LyricsScreenlet:######## Song Changed: /d1/users/col/IPOD/Paolo Conte/Una faccia in prestito/17_-_L'incantatrice.mp3
DEBUG:LyricsScreenlet:searching lyrics on disk
DEBUG:LyricsScreenlet:lyrics should be here: None
DEBUG:LyricsScreenlet:set elapsed: 0.699
DEBUG:LyricsScreenlet:redraw in onElapsed
DEBUG:LyricsScreenlet:######## Song Changed: /d1/users/col/IPOD/Zucchero/Snack Bar Budapest/08_-_Sei di mattino.mp3
Report
marcocolombini
9 years ago
checked the offset, works nicely. Only minor bug: at the beginning, for some time (the offset!) the last lyric in the file is displayed. The title etc (with timestamp 0:00) are displayed after the offset. Could you eliminate this and (possibly) do not offset any 0:00 field?
The accented problem isn't completely fixed: when I played an accented song (lyrics on disk found by your screenlet some time ago) it is not found on the net and, worse, is not found on disk, too. Looks like the same slash missing in the file path as before. Strangely enough, the one i tested previously is correctly found on disk.
I include the debug for the two songs below.
I have not seen any improvement yet, for the search on the net with wildcards. Would it be possible to have some debug output on the fields that are actually searched? Without it I can't see if lyrics are not found because they are not there or because of the accents.
Thanx a lot
>>>> SONG FOUND ON DISK
DEBUG:LyricsScreenlet:######## Song Changed: /d1/users/col/IPOD/Fabrizio De Andre/In Direzione Ostinata E Contraria/01_-_Amore Che Vieni Amore Che Vai.mp3
Start TimeLine
is_playing
CHANGE LYRICS
STOP ANIMATION
SET TIME 200.000000
STOP ANIMATION
Song Info:
{'album': dbus.String(u'In Direzione Ostinata E Contraria', variant_level=1), 'artist': dbus.String(u'Fabrizio De Andr\xe9', variant_level=1), 'file': '/d1/users/col/IPOD/Fabrizio De Andre/In Direzione Ostinata E Contraria/01_-_Amore Che Vieni Amore Che Vai.mp3', 'title': dbus.String(u'Amore Che Vieni Amore Che Vai', variant_level=1)}
Fabrizio De André/In Direzione Ostinata E Contraria/Amore Che Vieni Amore Che Vai.lrc
{'album': dbus.String(u'In Direzione Ostinata E Contraria', variant_level=1), 'artist': dbus.String(u'Fabrizio De Andr\xe9', variant_level=1), 'file': '/d1/users/col/IPOD/Fabrizio De Andre/In Direzione Ostinata E Contraria/01_-_Amore Che Vieni Amore Che Vai.mp3', 'title': dbus.String(u'Amore Che Vieni Amore Che Vai', variant_level=1)}
DEBUG:LyricsScreenlet:searching lyrics on disk
....... searching on disk
/d1/users/col/LYRICS Fabrizio De André/In Direzione Ostinata E Contraria/Amore Che Vieni Amore Che Vai.lrc
matching_folders: ['/d1/users/col/LYRICS/Fabrizio De Andr\xc3\xa9/In Direzione Ostinata E Contraria']
amore che vieni amore che vai.lrc
DEBUG:LyricsScreenlet:lyrics should be here: /d1/users/col/LYRICS/Fabrizio De André/In Direzione Ostinata E Contraria/Amore Che Vieni Amore Che Vai.lrc
lyrics from file: /d1/users/col/LYRICS/Fabrizio De André/In Direzione Ostinata E Contraria/Amore Che Vieni Amore Che Vai.lrc
TAGS {}
>>>>>>>>>SONG NOT FOUND ON DISK
DEBUG:LyricsScreenlet:######## Song Changed: /d1/users/col/IPOD/Fabrizio De Andre/In Direzione Ostinata E Contraria/10_-_Khorakhane (A Forza Di Essere Vento).mp3
Start TimeLine
is_playing
get elapsed
CHANGE LYRICS
STOP ANIMATION
SET TIME 200.000000
STOP ANIMATION
Song Info:
{'album': dbus.String(u'In Direzione Ostinata E Contraria', variant_level=1), 'artist': dbus.String(u'Fabrizio De Andr\xe9', variant_level=1), 'file': '/d1/users/col/IPOD/Fabrizio De Andre/In Direzione Ostinata E Contraria/10_-_Khorakhane (A Forza Di Essere Vento).mp3', 'title': dbus.String(u'Khorakhan\xe9 (A Forza Di Essere Vento)', variant_level=1)}
Fabrizio De André/In Direzione Ostinata E Contraria/Khorakhané (A Forza Di Essere Vento).lrc
{'album': dbus.String(u'In Direzione Ostinata E Contraria', variant_level=1), 'artist': dbus.String(u'Fabrizio De Andr\xe9', variant_level=1), 'file': '/d1/users/col/IPOD/Fabrizio De Andre/In Direzione Ostinata E Contraria/10_-_Khorakhane (A Forza Di Essere Vento).mp3', 'title': dbus.String(u'Khorakhan\xe9 (A Forza Di Essere Vento)', variant_level=1)}
DEBUG:LyricsScreenlet:searching lyrics on disk
....... searching on disk
/d1/users/col/LYRICS Fabrizio De André/In Direzione Ostinata E Contraria/Khorakhané (A Forza Di Essere Vento).lrc
matching_folders: ['/d1/users/col/LYRICS/Fabrizio De Andr\xc3\xa9/In Direzione Ostinata E Contraria']
khorakhané (a forza di essere vento).lrc
DEBUG:LyricsScreenlet:lyrics should be here: None
Nothing on disk
1636089108a3cb96db6213c250ec046a
search on net
>>>>>>>>>> HERE IS THE SEARCH RESULT
(I have removed some "get elapsed"
############ Elapsed Event
ELAPSED 1 fading = False
DEBUG:LyricsScreenlet:set elapsed: 1.366
SET TIME 1366.000000
STOP ANIMATION
DEBUG:LyricsScreenlet:redraw in onElapsed
ALSong Server2 Lyrics Count: 0
start alsong
start minilyrics
minilyrics
start lrcdb
start lyricsscreenlet
not well-formed (invalid token): line 1, column 0
Minilyrics Lyrics Count: 0
end of response
ALSong Server1 Lyrics Count: 0
end of response
ALSong Server2 Lyrics Count: 0
INFO:LyricsScreenlet:lyrics engine finished!
>>>>>>> Is it the "not well-formed" ok?
Report