78 lines
1.7 KiB
Python
78 lines
1.7 KiB
Python
import pygst,sys,time,gobject
|
|
pygst.require("0.10")
|
|
import gst
|
|
import gst
|
|
|
|
from duration import Duration
|
|
|
|
class Song():
|
|
def __init__(self,file):
|
|
# initialize player pipeline
|
|
self.player = gst.Pipeline("player")
|
|
bin = gst.element_factory_make("playbin",None)
|
|
bin.set_property("uri","file://"+file)
|
|
self.player.add(bin)
|
|
|
|
# initialize bus
|
|
bus = self.player.get_bus()
|
|
bus.add_signal_watch()
|
|
bus.connect("message",self.onMessage)
|
|
|
|
# Pause song
|
|
self.pause()
|
|
|
|
# Initialize stuff for finding duration
|
|
self.time_format = gst.Format(gst.FORMAT_TIME)
|
|
self.length = None
|
|
|
|
# Start mainloop
|
|
gobject.threads_init()
|
|
|
|
|
|
# Called on bus messages
|
|
def onMessage(self,bus,message):
|
|
t = message.type
|
|
if t == gst.MESSAGE_EOS:
|
|
print "End of stream"
|
|
sys.exit(0)
|
|
elif t == gst.MESSAGE_ERROR:
|
|
print "Error"
|
|
sys.exit(0)
|
|
elif t == gst.MESSAGE_TAG:
|
|
print "Tags:"
|
|
# Probably should convert this to some other data structure
|
|
# For easier use later
|
|
taglist = message.parse_tag()
|
|
for key in taglist.keys():
|
|
print key,taglist[key]
|
|
return
|
|
|
|
|
|
# Change state to "playing"
|
|
def play(self):
|
|
self.player.set_state(gst.STATE_PLAYING)
|
|
# Start main loop and find duration
|
|
# If this hasn't been done yet
|
|
if self.length == None:
|
|
time.sleep(0.2)
|
|
self.duration()
|
|
|
|
|
|
# Change state to "paused"
|
|
def pause(self):
|
|
self.player.set_state(gst.STATE_PAUSED)
|
|
|
|
|
|
# Find the duration of the pipeline
|
|
def duration(self):
|
|
self.length = Duration()
|
|
length = self.player.query_duration(self.time_format,None)[0]
|
|
self.length.setTime(length)
|
|
self.length.disp()
|
|
|
|
|
|
# Print out current running time
|
|
def curTime(self):
|
|
length = self.player.query_position(self.time_format,None)[0]
|
|
return Duration().setTime(length)
|