diff options
Diffstat (limited to 'audiograb.py')
-rw-r--r-- | audiograb.py | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/audiograb.py b/audiograb.py index 1253d6c..a7ec6ca 100644 --- a/audiograb.py +++ b/audiograb.py @@ -6,6 +6,7 @@ # Copyright (C) 2009, Benjamin Berg, Sebastian Berg # Copyright (C) 2009, Sayamindu Dasgupta # Copyright (C) 2010, Sascha Silbe +# Copyright (C) 2013, Ignacio Rodriguez # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -17,10 +18,10 @@ # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA -import pygst -pygst.require("0.10") -import gst -import gst.interfaces +import gi +gi.require_version('Gst', '1.0') + +from gi.repository import Gst from numpy import fromstring import subprocess import traceback @@ -46,6 +47,7 @@ SENSOR_AC_BIAS = 'sound' SENSOR_DC_NO_BIAS = 'voltage' SENSOR_DC_BIAS = 'resistance' +Gst.init([]) def _avg(array, abs_value=False): ''' Calc. the average value of an array ''' @@ -111,7 +113,8 @@ class AudioGrab(): self._labels_available = True # Query controls for device names self._display_counter = DISPLAY_DUTY_CYCLE - self._query_mixer() + # Fixme, ¿no hay alsamixer? + #self._query_mixer() # If Channels was not found in the Capture controller, guess. if self.channels is None: log.warning('Guessing there are 2 channels') @@ -137,39 +140,41 @@ class AudioGrab(): self.pads = [] self.queue = [] self.fakesink = [] - self.pipeline = gst.Pipeline('pipeline') - self.alsasrc = gst.element_factory_make('alsasrc', 'alsa-source') + self.pipeline = Gst.Pipeline.new('pipeline') + self.alsasrc = Gst.ElementFactory.make('alsasrc', 'alsa-source') self.pipeline.add(self.alsasrc) - self.caps1 = gst.element_factory_make('capsfilter', 'caps1') + self.caps1 = Gst.ElementFactory.make('capsfilter', 'caps1') self.pipeline.add(self.caps1) caps_str = 'audio/x-raw-int,rate=%d,channels=%d,depth=16' % ( RATE, self.channels) - self.caps1.set_property('caps', gst.caps_from_string(caps_str)) + self.caps1.set_property('caps', Gst.Caps.from_string(caps_str)) if self.channels == 1: - self.fakesink.append(gst.element_factory_make('fakesink', 'fsink')) + self.fakesink.append(Gst.ElementFactory.make('fakesink', 'fsink')) self.pipeline.add(self.fakesink[0]) self.fakesink[0].connect('handoff', self.on_buffer, 0) self.fakesink[0].set_property('signal-handoffs', True) - gst.element_link_many(self.alsasrc, self.caps1, self.fakesink[0]) + # Fixme: ¿Como linkeo todos? + #gst.element_link_many(self.alsasrc, self.caps1, self.fakesink[0]) else: if not hasattr(self, 'splitter'): - self.splitter = gst.element_factory_make('deinterleave') + self.splitter = Gst.ElementFactory.make('deinterlace', 'deinterlace') self.pipeline.add(self.splitter) self.splitter.set_properties('keep-positions=true', 'name=d') self.splitter.connect('pad-added', self._splitter_pad_added) - gst.element_link_many(self.alsasrc, self.caps1, self.splitter) + # Fixme: ¿Como linkeo todo? + #gst.element_link_many(self.alsasrc, self.caps1, self.splitter) for i in range(self.channels): - self.queue.append(gst.element_factory_make('queue')) + self.queue.append(Gst.ElementFactory.make('queue', 'queue%d' % i)) self.pipeline.add(self.queue[i]) - self.fakesink.append(gst.element_factory_make('fakesink')) + self.fakesink.append(Gst.ElementFactory.make('fakesink', 'fsink%d' % i)) self.pipeline.add(self.fakesink[i]) self.fakesink[i].connect('handoff', self.on_buffer, i) self.fakesink[i].set_property('signal-handoffs', True) def _query_mixer(self): - self._mixer = gst.element_factory_make('alsamixer') - rc = self._mixer.set_state(gst.STATE_PAUSED) - assert rc == gst.STATE_CHANGE_SUCCESS + self._mixer = Gst.ElementFactory.make('alsamixer', 'alsamixer') + rc = self._mixer.set_state(Gst.State.PAUSED) + assert rc == Gst.State.CHANGE_SUCCESS # Query the available controls tracks_list = self._mixer.list_tracks() @@ -384,13 +389,13 @@ class AudioGrab(): def start_sound_device(self): '''Start or Restart grabbing data from the audio capture''' - gst.event_new_flush_start() - self.pipeline.set_state(gst.STATE_PLAYING) + Gst.Event.new_flush_start() + self.pipeline.set_state(Gst.State.PLAYING) def stop_sound_device(self): '''Stop grabbing data from capture device''' - gst.event_new_flush_stop() - self.pipeline.set_state(gst.STATE_NULL) + Gst.Event.new_flush_stop(True) + self.pipeline.set_state(Gst.State.NULL) def set_logging_params(self, start_stop=False, interval=0, screenshot=True): @@ -428,12 +433,14 @@ class AudioGrab(): self.pause_grabbing() caps_str = 'audio/x-raw-int,rate=%d,channels=%d,depth=16' % ( sr, self.channels) - self.caps1.set_property('caps', gst.caps_from_string(caps_str)) + self.caps1.set_property('caps', Gst.Caps.from_string(caps_str)) self.resume_grabbing() def get_sampling_rate(self): ''' Gets the sampling rate of the capture device ''' - return int(self.caps1.get_property('caps')[0]['rate']) + rate = self.caps1.get_property('caps').to_string().split(',') + rate = rate[1].replace('rate=(int)', '') + return int(rate) def start_grabbing(self): '''Called right at the start of the Activity''' @@ -624,7 +631,8 @@ class AudioGrab(): integer between 0 and 100 and is an indicative of the percentage 0 to 100%''' if self._labels_available: - return self._get_volume(self._master_control, 'master') + return 100 + #return self._get_volume(self._master_control, 'master') else: output = check_output(['amixer', 'get', 'Master'], 'amixer: Could not get Master volume') |