[Assorted-commits] SF.net SVN: assorted:[1143] music-labeler/trunk
Brought to you by:
yangzhang
From: <yan...@us...> - 2009-01-25 09:24:24
|
Revision: 1143 http://assorted.svn.sourceforge.net/assorted/?rev=1143&view=rev Author: yangzhang Date: 2009-01-25 09:24:15 +0000 (Sun, 25 Jan 2009) Log Message: ----------- added music playback and control using GST! Modified Paths: -------------- music-labeler/trunk/README music-labeler/trunk/src/ml.py Modified: music-labeler/trunk/README =================================================================== --- music-labeler/trunk/README 2009-01-25 06:26:15 UTC (rev 1142) +++ music-labeler/trunk/README 2009-01-25 09:24:15 UTC (rev 1143) @@ -10,14 +10,11 @@ Requirements: - [pygtk] 2.13 -- [Mutagen] 1.14 - -Requirements for [Quodlibet] frontend: - +- [GST] 0.10 - [Quodlibet] 1.0 [pygtk]: http://www.pygtk.org/ -[Mutagen]: http://code.google.com/p/quodlibet/wiki/Development/Mutagen +[GST]: http://gstreamer.freedesktop.org/modules/gst-python.html [Quodlibet]: http://code.google.com/p/quodlibet/ Related Modified: music-labeler/trunk/src/ml.py =================================================================== --- music-labeler/trunk/src/ml.py 2009-01-25 06:26:15 UTC (rev 1142) +++ music-labeler/trunk/src/ml.py 2009-01-25 09:24:15 UTC (rev 1143) @@ -4,7 +4,7 @@ from gtk import * from cgi import escape from cStringIO import StringIO -import itertools +import itertools, gst, urllib import gtk.keysyms as k, gtk.gdk as gdk from os.path import expanduser from path import path @@ -50,6 +50,9 @@ def labeler(pls, labels, track_paths): sep = ';' + player = gst.element_factory_make('playbin') + timefmt = gst.Format(gst.FORMAT_TIME) + w = Window() w.set_title('Music Labeler') w.connect('delete-event', lambda *args: False) @@ -192,6 +195,20 @@ sel.select_path(pos) t.scroll_to_cell(pos, None, True, .5, .5) return True + elif ev.keyval in [k._1, k._2, k._3, k._4, k._5] and \ + ev.state & gdk.CONTROL_MASK: + # Seek to 0%, 25%, 50%, 75%, or 100% positions. + pos = float(ev.keyval - k._1) / 4 * player.query_duration(timefmt)[0] + player.seek_simple(timefmt, gst.SEEK_FLAG_FLUSH, pos) + return True + elif ev.keyval in [k.period, k.comma] and \ + ev.state & gdk.CONTROL_MASK: + # Seek forward/backward 5 seconds. + pos = player.query_position(timefmt)[0] + dir = 1 if ev.keyval == k.comma else 1 + debug('seek from', pos / 1e9, 'to', pos + dir * 5e9) + player.seek_simple(timefmt, gst.SEEK_FLAG_FLUSH, pos + dir * 5e9) + return True elif ev.keyval in [k.Tab]: # Tab completes. complete() @@ -234,6 +251,14 @@ @connecting_after(e, 'focus-in-event') # TODO hack; too early on resizes def show_popup(*args): + # Play the track if not already playing. + uri = 'file://' + urllib.quote(track_path) + if player.get_property('uri') != uri: + player.set_state(gst.STATE_NULL) + player.set_property('uri', uri) + player.set_state(gst.STATE_PLAYING) + + # Show the popup. tw.show_all() win = e.get_window() _,_,ew,eh,_ = win.get_geometry() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |