Esempio n. 1
0
    def build_bin(self):
        self.input_gain = Gst.ElementFactory.make('volume', None)
        self.stereo_spread = Gst.ElementFactory.make(
            'calf-sourceforge-net-plugins-MultiSpread', None)

        self.input_level = Gst.ElementFactory.make('level',
                                                   'stereo_spread_input_level')
        self.out_level = Gst.ElementFactory.make('level',
                                                 'stereo_spread_output_level')

        self.bin = GstInsertBin.InsertBin.new('stereo_spread_bin')

        if self.is_installed:
            # There is a bug in gstreaner. Booleans are inverted. For example
            # we have to turn on bypass in order to effects to be applied

            registry = Gst.Registry().get()
            self.use_workaround = not registry\
                .check_feature_version('pulsesrc', 1, 12, 5)

            if self.use_workaround:
                self.stereo_spread.set_property('bypass', True)
            else:
                self.stereo_spread.set_property('bypass', False)

            self.stereo_spread.set_property('level-in', 1.0)

            self.bin.append(self.input_gain, self.on_filter_added, None)
            self.bin.append(self.input_level, self.on_filter_added, None)
            self.bin.append(self.stereo_spread, self.on_filter_added, None)
            self.bin.append(self.out_level, self.on_filter_added, None)
Esempio n. 2
0
    def build_bin(self):
        self.input_gain = Gst.ElementFactory.make('volume', None)
        self.bass_enhancer = Gst.ElementFactory.make(
            'calf-sourceforge-net-plugins-BassEnhancer', None)

        self.input_level = Gst.ElementFactory.make(
            'level', 'bass_enhancer_input_level')
        self.out_level = Gst.ElementFactory.make('level',
                                                 'bass_enhancer_output_level')

        self.bin = GstInsertBin.InsertBin.new('bass_enhancer_bin')

        if self.is_installed:
            # booleans are inverted in GStreamer versions older than 1.12.5

            registry = Gst.Registry().get()
            use_workaround = not registry.check_feature_version(
                'pulsesrc', 1, 12, 5)

            if use_workaround:
                self.bass_enhancer.set_property('bypass', True)
                self.bass_enhancer.set_property('listen', True)
                self.bass_enhancer.set_property('floor-active', False)
            else:
                self.bass_enhancer.set_property('bypass', False)
                self.bass_enhancer.set_property('listen', False)
                self.bass_enhancer.set_property('floor-active', True)

            self.bass_enhancer.set_property('level-in', 1.0)

            self.bin.append(self.input_gain, self.on_filter_added, None)
            self.bin.append(self.input_level, self.on_filter_added, None)
            self.bin.append(self.bass_enhancer, self.on_filter_added, None)
            self.bin.append(self.out_level, self.on_filter_added, None)
Esempio n. 3
0
    def build_bin(self):
        self.delay = Gst.ElementFactory.make(
            'lsp-plug-in-plugins-lv2-comp-delay-x2-stereo', None)

        self.input_level = Gst.ElementFactory.make('level',
                                                   'delay_input_level')
        self.output_level = Gst.ElementFactory.make('level',
                                                    'delay_output_level')

        self.bin = GstInsertBin.InsertBin.new('delay_bin')

        if self.is_installed:
            # There is a bug in gstreaner. Booleans are inverted. For example
            # we have to turn on bypass in order to effects to be applied

            registry = Gst.Registry().get()
            use_workaround = not registry.check_feature_version(
                'pulsesrc', 1, 12, 5)

            if use_workaround:
                self.delay.set_property('bypass', True)
            else:
                self.delay.set_property('bypass', False)

            self.delay.set_property('mode-l', 'Distance')
            self.delay.set_property('mode-r', 'Distance')
            self.delay.set_property('g-out', 1)
            self.delay.set_property('dry-l', 0)
            self.delay.set_property('wet-l', 1)
            self.delay.set_property('dry-r', 0)
            self.delay.set_property('wet-r', 1)

            self.bin.append(self.input_level, self.on_filter_added, None)
            self.bin.append(self.delay, self.on_filter_added, None)
            self.bin.append(self.output_level, self.on_filter_added, None)
Esempio n. 4
0
    def build_bin(self):
        self.gate = Gst.ElementFactory.make(
            'calf-sourceforge-net-plugins-Gate', None)
        self.input_level = Gst.ElementFactory.make('level',
                                                   'gate_input_level')
        self.output_level = Gst.ElementFactory.make('level',
                                                    'gate_output_level')

        self.bin = GstInsertBin.InsertBin.new('gate_bin')

        if self.is_installed:
            # booleans are inverted in GStreamer versions older than 1.12.5

            registry = Gst.Registry().get()
            self.use_workaround = not registry\
                .check_feature_version('pulsesrc', 1, 12, 5)

            if self.use_workaround:
                self.gate.set_property('bypass', True)
            else:
                self.gate.set_property('bypass', False)

            self.bin.append(self.input_level, self.on_filter_added, None)
            self.bin.append(self.gate, self.on_filter_added, None)
            self.bin.append(self.output_level, self.on_filter_added, None)
Esempio n. 5
0
    def __init__(
        self,
        node_name='pipeline_node',
        param_prefix='',
        gst_plugin_paths=[],  # list of strings
        gst_plugin_ros_packages=[],  # list of tuples (package_name,sub_dir)
        gst_plugins_required=[]  # list of strings
    ):
        super().__init__(node_name)
        self.registry = Gst.Registry()
        self.registry.connect('plugin-added', self.plugin_added)
        self.node_name = node_name
        # pull additional info from parameter server
        (paths, packages, plugins) = self.fetch_params(param_prefix)
        self.gst_plugin_paths = gst_plugin_paths + paths
        self.gst_plugin_ros_packages = gst_plugin_ros_packages + packages
        self.gst_plugins_required = gst_plugins_required + plugins

        # unpack ros packages into paths
        for (pack, subdir) in self.gst_plugin_ros_packages:
            plugin_path = os.path.join(get_package_prefix(pack), subdir)
            self.gst_plugin_paths.append(plugin_path)

        self.get_logger().debug('additional gst plugin paths are ' +
                                str(paths))
        self.get_logger().debug('required gst plugins are ' + str(plugins))

        self.add_plugin_paths(self.gst_plugin_paths)
        self.check_plugins(self.gst_plugins_required)

        self.updater = diagnostic_updater.Updater(self)
        self.updater.setHardwareID("Gst1.0")
        self.updater.add("Pipe Status", self.diagnostic_task)

        self.pipe = Gst.Pipeline.new("rospipe")
        self.bus = self.pipe.get_bus()
        self.bus.add_signal_watch()
        self.bus.connect('message::error', self.on_error)
        self.bus.connect('message::state-changed', self.on_status_changed)
        self.bus.connect('message::eos', self.on_eos)
        self.bus.connect('message::info', self.on_info)
        self.updater.force_update()
        self.diagnostic_timer = self.create_timer(0.5, self.updater.update)
Esempio n. 6
0
gst_extra_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),
                              'gst-1.0')

gi.require_version('Gst', '1.0')
gi.require_version('GstVideo', '1.0')
gi.require_version('GstController', '1.0')

from gi.repository import GLib, GObject
from gi.repository import Gst
from gi.repository import GstVideo, GstController

GObject.threads_init()
Gst.init(None)

# add path to our own gst-1.0 plugins
reg = Gst.Registry().get()
res = reg.scan_path(gst_extra_path)

# build a GStreamer pipeline,
#  basic configuration: URL, sources, ...
#  - attach controllers
#    - gain, delay, positions
#  -

# TODO: controllers for gst-1.0
#         -> http://tangopardo.com.ar/2cf7/2013/07/30/


class _dict_with_default(object):
    def __init__(self, data, default=None):
        self.data = data.copy()