summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul W. Frields <stickster@gmail.com>2012-12-07 10:50:08 -0500
committerPaul W. Frields <stickster@gmail.com>2012-12-07 10:50:08 -0500
commitb12435a17e770276ed47fdf791ab2d12db4eda3d (patch)
tree1e8f945e7e22fbc41b0686f4e3cfc6b1384f102c
parent7669f07c0fa26d3992394f8e673f9c6a72b2841e (diff)
downloadpulsecaster-b12435a17e770276ed47fdf791ab2d12db4eda3d.tar.gz
pulsecaster-b12435a17e770276ed47fdf791ab2d12db4eda3d.tar.xz
pulsecaster-b12435a17e770276ed47fdf791ab2d12db4eda3d.zip
Moving toward 100% GI usage
-rw-r--r--pulsecaster/source.py36
-rw-r--r--pulsecaster/ui.py66
2 files changed, 57 insertions, 45 deletions
diff --git a/pulsecaster/source.py b/pulsecaster/source.py
index daabff8..cc8902f 100644
--- a/pulsecaster/source.py
+++ b/pulsecaster/source.py
@@ -18,10 +18,7 @@
# Author: Paul W. Frields <stickster@gmail.com>
from config import *
-from gi.repository import Gtk, GObject
-import pygst
-pygst.require('0.10')
-import gst
+from gi.repository import Gtk, GObject, Gst
from pulseaudio.PulseObj import PulseObj
class PulseCasterSource:
@@ -65,21 +62,27 @@ class PulseCasterSource:
def create_level_pipeline(self, *args):
'''Make a GStreamer pipeline that allows level checking'''
print 'in create_level_pipeline'
- pl = 'pulsesrc device=%s' % (self.pulsesrc)
- pl += ' ! level message=true interval=100000000 ! fakesink'
- print pl
- self.pipeline = gst.parse_launch(pl)
- self.pipeline.get_bus().add_signal_watch()
- self.conn = self.pipeline.get_bus().connect('message::element', self.update_level)
- self.pipeline.set_state(gst.STATE_PLAYING)
+ self.pipeline = Gst.Pipeline()
+ self.src = Gst.ElementFactory.make('pulsesrc', None)
+ self.lvl = Gst.ElementFactory.make('level', None)
+ self.lvl.set_property('message', True)
+ self.snk = Gst.ElementFactory.make('fakesink', None)
+ for e in (self.src, self.lvl, self.snk):
+ self.pipeline.add(e)
+ #self.pipeline = Gst.parse_launch(pl)
+ self.bus = self.pipeline.get_bus()
+ self.bus.add_signal_watch()
+ self.conn = self.bus.connect('message::element', self.update_level)
+ self.pipeline.set_state(Gst.State.PLAYING)
print 'out of create_level_pipeline'
def remove_level_pipeline(self, *args):
'''Tear down the GStreamer pipeline attached to this object'''
print 'in remove_level_pipeline'
- self.pipeline.set_state(gst.STATE_NULL)
- self.pipeline.get_bus().remove_signal_watch()
- self.pipeline.get_bus().disconnect(self.conn)
+ self.pipeline.set_state(Gst.State.NULL)
+ self.bus = self.pipeline.get_bus()
+ self.bus.remove_signal_watch()
+ self.bus.disconnect(self.conn)
self.conn = None
self.pipeline = None
print 'out of remove_level_pipeline'
@@ -98,9 +101,10 @@ class PulseCasterSource:
def update_level(self, bus, message, *args):
'''Update this object's GtkProgressBar to reflect current level'''
- if message.structure.get_name() == 'level':
+ structure = message.get_structure()
+ if structure.get_name() == 'level':
# stick with left channel in stereo setups
- peak = message.structure['peak'][0]
+ peak = structure.get_value('peak')[0]
self.pbar.set_fraction(self.iec_scale(peak)/100)
self.pbar.queue_draw()
return True
diff --git a/pulsecaster/ui.py b/pulsecaster/ui.py
index 47166fc..db65a1b 100644
--- a/pulsecaster/ui.py
+++ b/pulsecaster/ui.py
@@ -20,17 +20,20 @@
from config import *
+import gi
+gi.require_version('Gst', '0.10')
+del gi
+
+from gi.repository import Gtk, GObject, Gst
+Gst.init(None)
+
import gconfig
from pulseaudio.PulseObj import PulseObj
from listener import *
from source import *
-from gi.repository import Gtk, GObject
import os
import sys
import tempfile
-import pygst
-pygst.require('0.10')
-import gst
from datetime import datetime
import gettext
@@ -237,13 +240,13 @@ class PulseCasterUI:
self.close.set_sensitive(False)
self.adv_button.set_sensitive(False)
- self.combiner = gst.Pipeline('PulseCasterCombinePipe')
- self.lsource = gst.element_factory_make('pulsesrc', 'lsrc')
+ self.combiner = Gst.Pipeline()
+ self.lsource = Gst.ElementFactory.make('pulsesrc', 'lsrc')
self.lsource.set_property('device', self.user_vox.pulsesrc)
- self.rsource = gst.element_factory_make('pulsesrc', 'rsrc')
+ self.rsource = Gst.ElementFactory.make('pulsesrc', 'rsrc')
self.rsource.set_property('device', self.subject_vox.pulsesrc)
- self.adder = gst.element_factory_make('adder', 'mix')
+ self.adder = Gst.ElementFactory.make('adder', 'mix')
if self.gconfig.expert is not True:
# Create temporary file
@@ -251,29 +254,30 @@ class PulseCasterUI:
% (NAME))
self.tempfile = os.fdopen(self.tempfd)
_debugPrint('tempfile: %s (fd %s)' % (self.temppath, self.tempfd))
- self.encoder = gst.element_factory_make(self.gconfig.codec +
+ self.encoder = Gst.ElementFactory.make(self.gconfig.codec +
'enc', 'enc')
if self.gconfig.codec == 'vorbis':
- self.muxer = gst.element_factory_make('oggmux', 'mux')
- self.filesink = gst.element_factory_make('filesink', 'fsink')
+ self.muxer = Gst.ElementFactory.make('oggmux', 'mux')
+ self.filesink = Gst.ElementFactory.make('filesink', 'fsink')
self.filesink.set_property('location', self.temppath)
- self.combiner.add(self.lsource,
- self.rsource,
- self.adder,
- self.encoder,
- self.filesink)
+ for e in (self.lsource,
+ self.rsource,
+ self.adder,
+ self.encoder,
+ self.filesink):
+ self.combiner.add(e)
+
if self.gconfig.codec == 'vorbis':
self.combiner.add(self.muxer)
- gst.element_link_many(self.lsource,
- self.adder,
- self.encoder)
+ self.lsource.link(self.adder)
+ self.adder.link(self.encoder)
if self.gconfig.codec == 'vorbis':
self.encoder.link(self.muxer)
self.muxer.link(self.filesink)
else: # flac
self.encoder.link(self.filesink)
- gst.element_link_many(self.rsource, self.adder)
+ self.rsource.link(self.adder)
else:
# Create temporary file
(self.tempfd1, self.temppath1) = tempfile.mkstemp(prefix='%s-1-tmp.'
@@ -287,11 +291,11 @@ class PulseCasterUI:
self.temppath2))
# We're in expert mode
# Disregard vorbis, use WAV
- self.encoder1 = gst.element_factory_make('wavenc', 'enc1')
- self.encoder2 = gst.element_factory_make('wavenc', 'enc2')
- self.filesink1 = gst.element_factory_make('filesink', 'fsink1')
+ self.encoder1 = Gst.ElementFactory.make('wavenc', 'enc1')
+ self.encoder2 = Gst.ElementFactory.make('wavenc', 'enc2')
+ self.filesink1 = Gst.ElementFactory.make('filesink', 'fsink1')
self.filesink1.set_property('location', self.temppath1)
- self.filesink2 = gst.element_factory_make('filesink', 'fsink2')
+ self.filesink2 = Gst.ElementFactory.make('filesink', 'fsink2')
self.filesink2.set_property('location', self.temppath2)
self.combiner.add(self.lsource,
self.rsource,
@@ -299,15 +303,17 @@ class PulseCasterUI:
self.encoder2,
self.filesink1,
self.filesink2)
- gst.element_link_many(self.lsource, self.encoder1, self.filesink1)
- gst.element_link_many(self.rsource, self.encoder2, self.filesink2)
+ self.lsource.link(self.encoder1)
+ self.encoder1.link(self.filesink1)
+ self.rsource.link(self.encoder2)
+ self.encoder2.link(self.filesink2)
# FIXME: Dim elements other than the 'record' widget
self.record.set_label(Gtk.STOCK_MEDIA_STOP)
self.record.disconnect(self.record_id)
self.stop_id = self.record.connect('clicked', self.on_stop)
self.record.show()
- self.combiner.set_state(gst.STATE_PLAYING)
+ self.combiner.set_state(Gst.State.PLAYING)
# Start timer
self.starttime = datetime.now()
self._update_time()
@@ -316,7 +322,7 @@ class PulseCasterUI:
self.trayicon.set_visible(True)
def on_stop(self, *args):
- self.combiner.set_state(gst.STATE_NULL)
+ self.combiner.set_state(Gst.State.NULL)
self.showFileChooser()
self.record.set_label(Gtk.STOCK_MEDIA_RECORD)
self.record.disconnect(self.stop_id)
@@ -441,7 +447,9 @@ class PulseCasterUI:
self.record.set_sensitive(True)
def _update_time(self, *args):
- if self.combiner.get_state()[1] == gst.STATE_NULL:
+ _state = Gst.State(Gst.State.NULL)
+ self.combiner.get_state(_state)
+ if _state == Gst.State.NULL:
self.trayicon.set_tooltip_text('')
self.trayicon.set_visible(False)
return False