#!/usr/bin/env python # -*- coding: utf-8 -*- import gobject import pygst import gst import threading import Queue class Playbin: def play(self,playlist,vol): gobject.threads_init() self.playloop = gobject.MainLoop() self.bin = gst.element_factory_make("playbin2") self.bin.set_property('volume', (int(vol) / 100.0)) self.queue = Queue.Queue() for playfile in playlist: self.queue.put(playfile) playthread = threading.Thread(target=self.really_play, args=(self.queue,)) playthread.start() def on_eos(self,bus,msg): self.bin.set_state(gst.STATE_NULL) self.playloop.quit() def really_play(self): playfile = self.queue.get() self.bin.set_property("uri", "file://" + playfile) print "Playing: " + playfile self.bin.set_state(gst.STATE_PLAYING) bus = self.bin.get_bus() bus.add_signal_watch() bus.connect('message::eos', self.on_eos) self.playloop.run() self.queue.task_done() self.queue.join()
Импортирую его и все прекрасно играет:
import playbin player = playbin.Playbin() player.play(['/path/to/file1.mp3','/path/to/file2.mp3/','/path/to/file3.mp3'], 50)
#!/usr/bin/env python # -*- coding: utf-8 -*- import gobject import dbus import dbus.service from dbus.mainloop.glib import DBusGMainLoop import playbin gobject.threads_init() class MyDBusService(dbus.service.Object): interface = "my.interface" def __init__(self): self.service_name = "com.my.app" bus_name = dbus.service.BusName(self.service_name, bus=dbus.SessionBus()) dbus.service.Object.__init__(self, bus_name, "/com/my/app") @dbus.service.method(interface) def Play_Sound(self): player = playbin.Playbin() player.play(['/path/to/file1.mp3','/path/to/file2.mp3/','/path/to/file3.mp3'], 50) DBusGMainLoop(set_as_default=True) mainloop = gobject.MainLoop() myservice = MyDBusService() mainloop.run()