Gapless playback

# [SNIPPET_NAME: Gapless playback]
# [SNIPPET_CATEGORIES: GStreamer]
# [SNIPPET_DESCRIPTION: Shows how to use gstreamer to play music without any gap between tracks ]
# [SNIPPET_AUTHOR: Simon Vermeersch <[email protected]>]
# [SNIPPET_LICENSE: GPL]

#!/usr/bin/python
import pygst
pygst.require("0.10")
import gst
import sys
import gobject

class Player:
    def __init__(self, filename):
        self.filename = filename
        
        #this only works with playbin2
        self.player = gst.element_factory_make("playbin2", "player")
        self.player.set_property("uri", filename)
        self.player.connect("about-to-finish", self.on_about_to_finish)

    def run(self):
        self.player.set_state(gst.STATE_PLAYING)
        loop = gobject.MainLoop()
        loop.run()

    def on_about_to_finish(self, player):
        #The current song is about to finish, if we want to play another
        #song after this, we have to do that now

        #we'll just repeat the song here as an example
        player.set_property("uri", self.filename)

if __name__ == "__main__":
    gobject.threads_init()
    player = Player("file:///usr/share/example-content/Ubuntu_Free_Culture_Showcase/InTheCircle.oga")
    player.run()