Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authorWalter Bender <walter.bender@gmail.com>2011-07-01 15:48:23 (GMT)
committer Walter Bender <walter.bender@gmail.com>2011-07-01 15:48:23 (GMT)
commit91487496707a5240d14a0f0922d4a4ed1ac2a006 (patch)
treed03d11eaad609d4e056ee6bdae2d7b217178a100 /utils
parent4d4f0ef4840540bcd1623863bb33a03803fe1177 (diff)
clean up due to renaming
Diffstat (limited to 'utils')
-rw-r--r--utils/play_audio.py191
1 files changed, 5 insertions, 186 deletions
diff --git a/utils/play_audio.py b/utils/play_audio.py
index f5e08b5..2ed445b 100644
--- a/utils/play_audio.py
+++ b/utils/play_audio.py
@@ -23,193 +23,12 @@
# USA
-import logging
-import os
-
-import pygtk
-pygtk.require('2.0')
-
-import gobject
-gobject.threads_init()
-
-import pygst
-import gst
-import gst.interfaces
-import gtk
-
-import urllib
-
+import subprocess
def play_audio_from_file(parent, file_path):
""" Audio media """
- parent.aplay = Aplay()
- parent.aplay.start(file_path)
-
-
-class Aplay():
- UPDATE_INTERVAL = 500
-
- def __init__(self):
-
- self.player = None
- self.uri = None
- self.playlist = []
- self.jobjectlist = []
- self.playpath = None
- self.only_audio = True
- self.got_stream_info = False
- self.currentplaying = 0
-
- self.videowidget = VideoWidget()
- self._want_document = True
-
- def _player_eos_cb(self, widget):
- pass
-
- def _player_error_cb(self, widget, message, detail):
- self.player.stop()
- self.player.set_uri(None)
- logging.debug('Error: %s - %s' % (message, detail))
-
- def _player_stream_info_cb(self, widget, stream_info):
- if not len(stream_info) or self.got_stream_info:
- return
-
- GST_STREAM_TYPE_VIDEO = 2
-
- only_audio = True
- for item in stream_info:
- if item.props.type == GST_STREAM_TYPE_VIDEO:
- only_audio = False
- self.only_audio = only_audio
- self.got_stream_info = True
-
- def start(self, uri=None):
- self._want_document = False
- self.playpath = os.path.dirname(uri)
- if not uri:
- return False
- self.playlist.append('file://' + urllib.quote(os.path.abspath(uri)))
- if not self.player:
- # lazy init the player so that videowidget is realized
- # and has a valid widget allocation
- self.player = GstPlayer(self.videowidget)
- self.player.connect('eos', self._player_eos_cb)
- self.player.connect('error', self._player_error_cb)
- self.player.connect('stream-info', self._player_stream_info_cb)
-
- try:
- if not self.currentplaying:
- logging.info('Playing: ' + self.playlist[0])
- self.player.set_uri(self.playlist[0])
- self.currentplaying = 0
- self.play_toggled()
- self.show_all()
- else:
- pass
- except:
- pass
- return False
-
- def play_toggled(self):
- if self.player.is_playing():
- self.player.pause()
- else:
- if self.player.error:
- pass
- else:
- self.player.play()
-
-
-class GstPlayer(gobject.GObject):
- __gsignals__ = {
- 'error': (gobject.SIGNAL_RUN_FIRST, None, [str, str]),
- 'eos': (gobject.SIGNAL_RUN_FIRST, None, []),
- 'stream-info': (gobject.SIGNAL_RUN_FIRST, None, [object])}
-
- def __init__(self, videowidget):
- gobject.GObject.__init__(self)
-
- self.playing = False
- self.error = False
-
- self.player = gst.element_factory_make('playbin', 'player')
-
- self.videowidget = videowidget
- self._init_video_sink()
-
- bus = self.player.get_bus()
- bus.enable_sync_message_emission()
- bus.add_signal_watch()
- bus.connect('sync-message::element', self.on_sync_message)
- bus.connect('message', self.on_message)
-
- def set_uri(self, uri):
- self.player.set_property('uri', uri)
-
- def on_sync_message(self, bus, message):
- if message.structure is None:
- return
- if message.structure.get_name() == 'prepare-xwindow-id':
- self.videowidget.set_sink(message.src)
- message.src.set_property('force-aspect-ratio', True)
-
- def on_message(self, bus, message):
- t = message.type
- if t == gst.MESSAGE_ERROR:
- err, debug = message.parse_error()
- logging.debug('Error: %s - %s' % (err, debug))
- self.error = True
- self.emit('eos')
- self.playing = False
- self.emit('error', str(err), str(debug))
- elif t == gst.MESSAGE_EOS:
- self.emit('eos')
- self.playing = False
- elif t == gst.MESSAGE_STATE_CHANGED:
- old, new, pen = message.parse_state_changed()
- if old == gst.STATE_READY and new == gst.STATE_PAUSED:
- self.emit('stream-info',
- self.player.props.stream_info_value_array)
-
- def _init_video_sink(self):
- return
-
- def play(self):
- self.player.set_state(gst.STATE_PLAYING)
- self.playing = True
- self.error = False
- # logging.debug('playing player')
-
- def stop(self):
- self.player.set_state(gst.STATE_NULL)
- self.playing = False
- logging.debug('stopped player')
-
- def get_state(self, timeout=1):
- return self.player.get_state(timeout=timeout)
-
- def is_playing(self):
- return self.playing
-
-
-class VideoWidget(gtk.DrawingArea):
-
- def __init__(self):
- gtk.DrawingArea.__init__(self)
- self.set_events(gtk.gdk.EXPOSURE_MASK)
- self.imagesink = None
- self.unset_flags(gtk.DOUBLE_BUFFERED)
- self.set_flags(gtk.APP_PAINTABLE)
-
- def do_expose_event(self, event):
- if self.imagesink:
- self.imagesink.expose()
- return False
- else:
- return True
+ command_line = ['gst-launch', 'filesrc', 'location=' + file_path,
+ '! oggdemux', '! vorbisdec', '! audioconvert',
+ '! alsasink']
+ subprocess.call(command_line)
- def set_sink(self, sink):
- assert self.window.xid
- self.imagesink = sink
- self.imagesink.set_xwindow_id(self.window.xid)