Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/audiograb.py
diff options
context:
space:
mode:
Diffstat (limited to 'audiograb.py')
-rw-r--r--audiograb.py58
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')