diff options
author | Walter Bender <walter@walter-laptop.(none)> | 2009-09-30 15:07:06 (GMT) |
---|---|---|
committer | Walter Bender <walter@walter-laptop.(none)> | 2009-09-30 15:07:06 (GMT) |
commit | 49b755a0ed642777d6251098181377d2a6b7fbb7 (patch) | |
tree | 079f9d5fb14fae5a459f14c275a4a2af4b731b8b | |
parent | 5a1e4f982f74299e650cd551781c6d928458ced9 (diff) |
numerous patches to clean up and speed up code by benzea et al.
94 files changed, 326 insertions, 510 deletions
diff --git a/MANIFEST b/MANIFEST deleted file mode 100644 index cff9400..0000000 --- a/MANIFEST +++ /dev/null @@ -1,158 +0,0 @@ -graphs.py -audiograb.py -log3.csv -NEWS -toolbar_top.py -log1.csv -measure.py -journal.py -config.py -SOURCES -logging_ui.py -sheet_ui.py -sheet.py -setup.py -sensor_toolbar.py -textbox.py -drawwaveform.py -toolbar_side.py -README -sound_toolbar.py -locale/de/activity.linfo -locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ig/activity.linfo -locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/am/activity.linfo -locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/pt/activity.linfo -locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/nl/activity.linfo -locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/bg/activity.linfo -locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/yo/activity.linfo -locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/fr/activity.linfo -locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/mk/activity.linfo -locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/th/activity.linfo -locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/es/activity.linfo -locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ne/activity.linfo -locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/qu/activity.linfo -locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/en/activity.linfo -locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ps/activity.linfo -locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/pa/activity.linfo -locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/fa_AF/activity.linfo -locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/rw/activity.linfo -locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/hi/activity.linfo -locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/te/activity.linfo -locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ru/activity.linfo -locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ur/activity.linfo -locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/bn/activity.linfo -locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ja/activity.linfo -locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/el/activity.linfo -locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ml/activity.linfo -locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ro/activity.linfo -locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/pl/activity.linfo -locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ay/activity.linfo -locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/is/activity.linfo -locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ff/activity.linfo -locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/mn/activity.linfo -locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/pt_BR/activity.linfo -locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ha/activity.linfo -locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ca/activity.linfo -locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/bn_IN/activity.linfo -locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/dz/activity.linfo -locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/fa/activity.linfo -locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo -locale/ar/activity.linfo -locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo -activity/activity-measure.svg -activity/activity.info -po/mk.po -po/ml.po -po/ne.po -po/ro.po -po/el.po -po/yo.po -po/rw.po -po/am.po -po/ja.po -po/fa_AF.po -po/te.po -po/bn.po -po/ar.po -po/fa.po -po/bn_IN.po -po/ps.po -po/ay.po -po/es.po -po/pa.po -po/fr.po -po/Measure.pot -po/en.po -po/ha.po -po/bg.po -po/nl.po -po/hi.po -po/is.po -po/ff.po -po/de.po -po/mn.po -po/pt.po -po/th.po -po/pt_BR.po -po/ru.po -po/dz.po -po/ca.po -po/ig.po -po/pl.po -po/ur.po -po/qu.po -icons/bias-on.svg -icons/bias-off2.svg -icons/domain-freq2.svg -icons/bias-off.svg -icons/view-details.svg -icons/freq-high.svg -icons/domain-freq.svg -icons/amp-low.svg -icons/domain-time2.svg -icons/sample_rate.svg -icons/current-dc.svg -icons/amp-high.svg -icons/domain-time.svg -icons/bias-on2.svg -icons/current-ac.svg -icons/invert2.svg -icons/invert.svg -icons/freq-low.svg @@ -1,3 +1,9 @@ +28 +* numerous patches to speed up code by Benjamin and Sebastian Berg + +27 +* added exceot for gconf for old builds + 26 * fixed toolbar display bug * cleaned up sound record code diff --git a/activity/activity.info b/activity/activity.info index 27b3064..0a61a4b 100755 --- a/activity/activity.info +++ b/activity/activity.info @@ -3,7 +3,7 @@ name = Measure service_name = org.laptop.MeasureActivity class = measure.MeasureActivity icon = activity-measure -activity_version = 26 +activity_version = 28 show_launcher = yes license = GPLv2+ update_url = http://wiki.laptop.org/go/Activities/G1G1 diff --git a/activity/activity.info~ b/activity/activity.info~ index 5334e19..27b3064 100755..100644 --- a/activity/activity.info~ +++ b/activity/activity.info~ @@ -3,7 +3,7 @@ name = Measure service_name = org.laptop.MeasureActivity class = measure.MeasureActivity icon = activity-measure -activity_version = 23 +activity_version = 26 show_launcher = yes license = GPLv2+ update_url = http://wiki.laptop.org/go/Activities/G1G1 diff --git a/audiograb.py b/audiograb.py index f9dd512..ef0fcde 100755..100644 --- a/audiograb.py +++ b/audiograb.py @@ -3,6 +3,7 @@ # Author: Arjun Sarwal arjun@laptop.org # Copyright (C) 2007, Arjun Sarwal # Copyright (C) 2009, Walter Bender +# Copyright (C) 2009, Benjamin Berg, Sebastian Berg # # 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 @@ -24,7 +25,7 @@ import gst import gobject import os import subprocess -from struct import unpack +import numpy as np from string import find import config #This has all the golabals @@ -37,7 +38,7 @@ class AudioGrab(): self.ji = journal self.sensor = None - self.temp_buffer = [] + self.temp_buffer = [0] self.picture_buffer = [] self.draw_graph_status = False @@ -86,19 +87,19 @@ class AudioGrab(): """Sets whether the handoff signal would generate an interrupt or not""" self.fakesink.set_property("signal-handoffs",handoff_state) - def _new_buffer(self,buf): + def _new_buffer(self, buf): if self.dont_queue_the_buffer == False: - self.callable1(str(buf)) + self.temp_buffer = buf + self.callable1(buf) else: pass def on_buffer(self, element, buffer, pad): """The function that is called whenever new data is available This is the signal handler for the handoff signal""" - self.temp_buffer = buffer + temp_buffer = np.fromstring(buffer, 'int16') if self.dont_queue_the_buffer == False: - gobject.timeout_add(config.AUDIO_BUFFER_TIMEOUT,\ - self._new_buffer, self.temp_buffer) + self._new_buffer(temp_buffer) else: pass if self.logging_state==True: @@ -108,9 +109,7 @@ class AudioGrab(): self.ji.stop_session() else: if self.counter_buffer == self.buffer_interval_logging: - #gobject.timeout_add(300, self._emit_for_logging, \ - # self.temp_buffer) - self._emit_for_logging(str(self.temp_buffer)) + self._emit_for_logging(temp_buffer) self.counter_buffer=0 self.counter_buffer+=1 # If a record is to be written, thats all for the logging session @@ -141,12 +140,11 @@ class AudioGrab(): self.ji.take_screenshot(self.waveform_id) self.waveform_id+=1 else: - temp_buf = list(unpack( str(int(len(buf))/2)+'h' , buf)) # save value to Journal - self.ji.write_value(temp_buf[0]) + self.ji.write_value(buf[0]) # display value on Sensor toolbar try: - self.sensor.set_sample_value(str(temp_buf[0])) + self.sensor.set_sample_value(str(buf[0])) except: pass @@ -197,9 +195,7 @@ class AudioGrab(): def take_picture(self): """Used to grab and temporarily store the current buffer""" - self.picture_buffer = \ - list(unpack(str(int(len(str(self.temp_buffer)))/2)+'h',\ - str(self.temp_buffer))) + self.picture_buffer = self.temp_buffer.copy() def set_logging_state(self, start_stop=False): """Sets whether buffer is to be emited for logging (True) or not diff --git a/config.py b/config.py index 5c0e810..baedd62 100755..100644 --- a/config.py +++ b/config.py @@ -1,3 +1,22 @@ +# Author: Arjun Sarwal arjun@laptop.org +# Copyright (C) 2007, Arjun Sarwal +# Copyright (C) 2009, Walter Bender +# Copyright (C) 2009, Benjamin Berg, Sebastian Berg +# +# 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + import os import os.path import tempfile @@ -6,12 +25,6 @@ from sugar.activity import activity MEASURE_ROOT = activity.get_bundle_path() ICONS_DIR = MEASURE_ROOT + '/icons' - -#Waveform drawing area dimensions -WINDOW_W=1200.0 -WINDOW_H=700.0 - - #In milliseconds, the delay interval after which the waveform draw function will be queued" REFRESH_TIME = 30 diff --git a/drawwaveform.py b/drawwaveform.py index 8dccd44..bc0a788 100755..100644 --- a/drawwaveform.py +++ b/drawwaveform.py @@ -3,6 +3,7 @@ # Author: Arjun Sarwal arjun@laptop.org # Copyright (C) 2007, Arjun Sarwal # Copyright (C) 2009, Walter Bender +# Copyright (C) 2009, Benjamin Berg, Sebastian Berg # # 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 @@ -18,25 +19,22 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -import pygst -pygst.require("0.10") import pygtk import gtk import cairo import gobject import time -from struct import unpack import pango import os import audioop import math +import numpy as np +from ringbuffer import RingBuffer1d from gtk import gdk try: import gconf except: from sugar import profile -from numpy.oldnumeric import * -from numpy.fft import * from gettext import gettext as _ @@ -45,43 +43,44 @@ import config #This has all the globals class DrawWaveform(gtk.DrawingArea): - def __init__(self): + __gtype_name__ = "MeasureDrawWaveform" + + def __init__(self, input_frequency=48000): gtk.DrawingArea.__init__(self) - self.buffers = [] + self._input_freq = input_frequency + self.stroke_color = None + self.triggering = True + + self.buffers = np.array([]) + self.main_buffers = np.array([]) self.str_buffer='' - self.buffers_temp=[] - self.integer_buffer=[] self.peaks = [] - self.main_buffers = [] self.fftx = [] + self._tick_size = 50 + self.rms='' self.avg='' - self.pp='' + self.pp='' self.count=0 self.invert=False - self.param1= config.WINDOW_H/65536.0 - self.param2= config.WINDOW_H/2.0 self.y_mag = 3.0 - self.g = 1 #Gain (not in dB) introduced by Capture Gain and Mic Boost - self._freq_range = 4 #See comment in sound_toolbar.py re freq_range + self.g = 1 #Gain (not in dB) introduced by Capture Gain and Mic Boost + self._freq_range = 4 #See comment in sound_toolbar.py to see what different ranges are all about self.draw_interval = 10 self.num_of_points = 115 self.details_iter = 50 self.c = 1180 self.m = 0.0238 self.k = 0.0238 - self.c2 = 139240 #c squared - self.t_x = (int)(config.TEXT_X_M*config.WINDOW_W) - self.t_y = (int)(config.TEXT_Y_M*config.WINDOW_H) + self.c2 = 139240 #c squared self.rms = 0 self.avg = 0 self.Rv = 0 - # constant to multiply with self.param2 while scaling values - self.y_mag_bias_multiplier = 1 + # constant to multiply with self.param2 while scaling values self.log_param1 = "" self.log_param2 = "" self.log_param3 = "" @@ -100,9 +99,7 @@ class DrawWaveform(gtk.DrawingArea): self.scaleX = str( 1.04167/self.draw_interval ) + " ms" self.scaleY = "" - - self._line_gc = None - self._back_surf = None + self._back_surf = None self.pango_context = self.create_pango_context() #self.font_desc = pango.FontDescription('Serif 6') self.expose_event_id = self.connect("expose_event", self._expose) @@ -123,15 +120,15 @@ class DrawWaveform(gtk.DrawingArea): self.graph_id = [] for x in range (0, self.MAX_GRAPHS): - self.graph_show_state.append(False) - self.Xstart.append(0) - self.Ystart.append(50) - self.Xend.append(1000) - self.Yend.append(500) - self.type .append(0) - self.color.append([65535,0,0]) - self.source.append(0) - self.graph_id.append(x) + self.graph_show_state.append(False) + self.Xstart.append(0) + self.Ystart.append(50) + self.Xend.append(1000) + self.Yend.append(500) + self.type .append(0) + self.color.append([65535,0,0]) + self.source.append(0) + self.graph_id.append(x) self.graph_show_state[0]=True self.Xstart[0] = 0 @@ -139,7 +136,7 @@ class DrawWaveform(gtk.DrawingArea): self.Xend[0] = 1150 self.Yend[0] = 750 self.type[0] = 0 - self.color[0] = [65535,0,65535] + self.color[0] = self.get_stroke_color_from_sugar() self.source[0] = 0 """ @@ -172,19 +169,30 @@ class DrawWaveform(gtk.DrawingArea): """ self.max_samples = 115 + self.max_samples_fact = 3 + + self.time_div = 1. + self.freq_div = 1. + self.input_step = 1 + + self.ringbuffer = RingBuffer1d(self.max_samples, dtype='int16') self.debug_str="start" self.context = True + + + def set_max_samples(self, num): + if self.max_samples == num: + return + new_buffer = RingBuffer1d(num, dtype='int16') + + new_buffer.append(self.ringbuffer.read()) + self.ringbuffer = new_buffer + self.max_samples = num def new_buffer(self, buf): - buf = str(buf) - self.str_buffer = buf - tmp_val = (self.max_samples - 1) - self.integer_buffer = list(unpack( str(int(len(buf))/2)+'h' , buf)) - if(len(self.main_buffers)>tmp_val): - del self.main_buffers[0:(len(self.main_buffers)-tmp_val)] - self.main_buffers += self.integer_buffer + self.ringbuffer.append(buf) return True def set_context_on(self): @@ -206,25 +214,36 @@ class DrawWaveform(gtk.DrawingArea): consecutive points""" return self.draw_interval - def _init_background(self): - if self._back_surf: - return - - colmap = self.get_colormap() - clr = colmap.alloc_color(0, 65535, 0, False, False) - self._line_gc = self.window.new_gc(foreground = clr) - self._line_gc.set_line_attributes(self._FOREGROUND_LINE_THICKNESS,\ - gdk.LINE_SOLID,\ - gdk.CAP_ROUND, gdk.JOIN_BEVEL) - - self._back_surf = gdk.Pixmap(self.window, int(config.WINDOW_W), \ - int(config.WINDOW_H)) - cr = self._back_surf.cairo_create() - + def do_size_allocate(self, allocation): + gtk.DrawingArea.do_size_allocate(self, allocation) + self._update_mode() + + def do_realize(self): + gtk.DrawingArea.do_realize(self) + + colormap = self.get_colormap() + + self._line_gc = [] + for graph_id in self.graph_id: + r, g, b = self.color[graph_id] + clr = colormap.alloc_color(r, g, b, False, False) + + self._line_gc.append(self.window.new_gc(foreground=clr)) + self._line_gc[graph_id].set_line_attributes( \ + self._FOREGROUND_LINE_THICKNESS, gdk.LINE_SOLID, \ + gdk.CAP_ROUND, gdk.JOIN_BEVEL) + + self._line_gc[graph_id].set_foreground(clr) + + # Background pixmap + clr = colormap.alloc_color(0, 65535, 0, False, False) + + back_surf = gdk.Pixmap(self.window, self._tick_size, self._tick_size) + cr = back_surf.cairo_create() + #background cr.set_source_rgb(0, 0, 0) - cr.rectangle(0, 0, config.WINDOW_W, config.WINDOW_H) - cr.fill() + cr.paint() #grid cr.set_line_width(self._BACKGROUND_LINE_THICKNESS) @@ -233,128 +252,96 @@ class DrawWaveform(gtk.DrawingArea): x = 0 y = 0 - for j in range(1, 25): - cr.move_to(x, y) - cr.rel_line_to(0, config.WINDOW_H) - x = x + 50 + for j in range(0, 2): + cr.move_to(x, y) + cr.rel_line_to(0, self._tick_size) + x = x + self._tick_size - cr.set_line_width(self._BACKGROUND_LINE_THICKNESS) x = 0 y = 0 - for j in range(1, 17): - cr.move_to(x, y) - cr.rel_line_to(config.WINDOW_W, 0) - y = y + 50 + for j in range(0, 2): + cr.move_to(x, y) + cr.rel_line_to(self._tick_size, 0) + y = y + self._tick_size + + cr.set_line_width(self._BACKGROUND_LINE_THICKNESS) + cr.stroke() - cr.stroke() + del cr + self.window.set_back_pixmap(back_surf, False) def _expose(self, widget, event): - """This function is the "expose" event handler and does all the - drawing""" - - ##################### Real time drawing ################### - if(self.context == True): - - #Draw the background - #We could probably make this faster with another pixmap. - self._init_background() - self.window.draw_drawable(self.get_style().bg_gc[0], \ - self._back_surf, 0, 0, 0, 0, \ - config.WINDOW_W, config.WINDOW_H) - #Iterate for each graph - for graph_id in self.graph_id: - if self.graph_show_state[graph_id] == True: - span = self.Xend[graph_id]-self.Xstart[graph_id] - - if self._freq_range == 1: - self.draw_interval = 4 - self.max_samples = span/self.draw_interval - else: - if span>=700: - self.draw_interval = 10 - elif span<700 and span>=500: - self.draw_interval = 7 - elif span<500 and span>=300: - self.draw_interval = 5 + """This function is the "expose" event handler and does all the drawing""" + #######################Real time drawing################################### + if self.context: + + #Iterate for each graph + for graph_id in self.graph_id: + if self.graph_show_state[graph_id] == True: + buf = self.ringbuffer.read(None, self.input_step) + samples = math.ceil(self.allocation.width/self.draw_interval) + if len(buf) == 0: + # We don't have enough data to plot. + return + + x_offset = 0 + + if (self.fft_show==False): + if self.triggering == True: + ints = buf[:-samples-3] <= 0 + ints &= buf[1:-samples-2] > 0 + + ints = np.where(ints)[0] + if len(ints) == 0: + ints = len(buf) - samples + else: + ints = ints[-1] + x_offset = int((float(-buf[ints])/(buf[ints+1]-buf[ints]))*self.draw_interval+0.5) + + data = buf[ints:ints+samples+2].astype(np.float64) else: - self.draw_interval = 3 - self.max_samples = span/self.draw_interval - - if(len(self.main_buffers)>=self.max_samples): - del self.main_buffers[0:(len(self.main_buffers)-\ - (self.max_samples+1))] - - if(self.fft_show==False): - self.y_mag_bias_multiplier = 1 - """ Depending upon the X span of the graph, deciding - the total number of points to take """ + data = buf[-samples:].astype(np.float64) + else: - ############## FFT ############### + ###############FFT################ Fs = 48000 nfft = 65536 - if self.integer_buffer: - self.integer_buffer = self.integer_buffer[0:256] - self.fftx = fft(self.integer_buffer, 256,-1) - self.fftx = self.fftx[0:self.max_samples] - self.main_buffers = [(abs(x) * 0.02) \ - for x in self.fftx] - self.y_mag_bias_multiplier=0.1 + + # Multiply input with the window + np.multiply(buf, self.fft_window, buf) + + # Should be fast enough even without power of 2 stuff. + self.fftx = np.fft.rfft(buf) + self.fftx = abs(self.fftx) + data = np.multiply(self.fftx, 0.02, self.fftx) ################################## - - - ################ Getting data ################# - if self.source[graph_id]==0: - self.buffers=self.main_buffers - else: - pass #write code here that gets data from file - ############################################### - ########### Scaling the values ################ + ################Scaling the values################### if config.CONTEXT == 2: self.y_mag = 1 - self.y_mag_bias_multiplier = 1 - self.param2= (self.Yend[graph_id]-self.Ystart[graph_id])/2.0 - self.param1= self.param2/32768.0 - - val=[] - for i in self.buffers: - # only apply invert to time display - if self.invert is True and self.fft_show is False: - temp_val_float = -(self.param1*i*self.y_mag) +\ - (self.param2*self.y_mag_bias_multiplier) - else: - temp_val_float = (self.param1*i*self.y_mag) +\ - (self.param2*self.y_mag_bias_multiplier) - if(temp_val_float>=self.Yend[graph_id]): - temp_val_float= self.Yend[graph_id] - if(temp_val_float<=self.Ystart[graph_id]): - temp_val_float= self.Ystart[graph_id] - val.append( config.WINDOW_H - temp_val_float ) - - self.peaks=val - ############################################### - - ###### The actual drawing of the graph ######## - """TODO: Improvement : The color setting shouldn't happen - in every drawing loop, should happen only once""" - colmap = self.get_colormap() - r,g,b = self.get_stroke_color_from_sugar() - clr = colmap.alloc_color( r, g, b, False, False) - self._line_gc.set_foreground(clr) - - count = self.Xstart[graph_id] - lines = [] - for peak in self.peaks: - lines.append((count, peak)) - count = count + self.draw_interval + + data *= (-self.allocation.height/32767.0 * self.y_mag) + if self.fft_show: + data += self.allocation.height - 3 + else: + data += (self.allocation.height/2.0) + + ################################################ + + ##########The actual drawing of the graph################## + + lines = (np.arange(len(data), dtype='float32') * self.draw_interval) - x_offset + + # We must make sure its int, or draw_lines will throw warnings + # and these warnings are slow (even though they are filtered)! + lines = zip(lines.astype('int'), data.astype('int')) if self.type[graph_id] ==0: - self.window.draw_lines(self._line_gc, lines) + self.window.draw_lines(self._line_gc[graph_id], lines) else: - self.window.draw_points(self._line_gc, lines) - ############################################### - + self.window.draw_points(self._line_gc[graph_id], lines) + ############################################################ """ ## DISPLAYING FRAMERATE FOR DEBUGGGIN fr = 1.0/( time.time()-self.pr_time) @@ -378,18 +365,16 @@ class DrawWaveform(gtk.DrawingArea): 1 - uses from file""" self.source[graph_id] = source - def set_graph_params(self, graph_id, Xstart, Ystart, Xend, Yend, type,\ - color): - """Sets Xstart, Ystart --> the bottom left co-ordinates - Xend, Yend --> the top right co-ordinates - type --> 0 for a connected graph, 1 for a dotted graph - color --> what color graph to draw""" - self.Xstart[graph_id] = Xstart - self.Ystart[graph_id] = Ystart - self.Xend[graph_id] = Xend - self.Yend[graph_id] = Yend - self.type[graph_id] = type - self.color[graph_id] = color + def set_div(self, time_div=0.0001, freq_div=10): + """Set division + """ + self.time_div = time_div + self.freq_div = freq_div + + self._update_mode() + + def get_ticks(self): + return self.allocation.width/float(self._tick_size) def get_fft_mode(self): """Returns if FFT is ON (True) or OFF (False)""" @@ -398,46 +383,85 @@ class DrawWaveform(gtk.DrawingArea): def set_fft_mode(self, fft_mode=False): """Sets whether FFT mode is ON (True) or OFF (False)""" self.fft_show = fft_mode + self._update_mode() def set_freq_range(self, freq_range=4): """See sound_toolbar to see what all frequency ranges are""" self._freq_range = freq_range + def _update_mode(self): + if self.allocation.width <= 0: + return + + if self.fft_show: + max_freq = (self.freq_div*self.get_ticks()) + wanted_step = 1.0/max_freq/2*self._input_freq + self.input_step = max(math.floor(wanted_step), 1) + + self.draw_interval = 5.0 + + self.set_max_samples(math.ceil(self.allocation.width/float(self.draw_interval)*2)*self.input_step) + + # Create the (blackman) window + self.fft_window = np.blackman(math.ceil(self.allocation.width/float(self.draw_interval)*2)) + + self.draw_interval *= wanted_step/self.input_step + else: + # Factor is just for triggering: + time = (self.time_div*self.get_ticks()) + if time == 0: + return + samples = time * self._input_freq + self.set_max_samples(samples * self.max_samples_fact) + + self.input_step = max(math.ceil(samples/(self.allocation.width/3.0)),1) + self.draw_interval = self.allocation.width/(float(samples)/self.input_step) + + self.fft_window = None + def get_stroke_color_from_sugar(self): """Returns in (r,g,b) format the stroke color from the Sugar profile""" - try: - client = gconf.client_get_default() - color = client.get_string("/desktop/sugar/user/color") - except: - color = profile.get_color().to_string() - stroke,fill = color.split(",") - colorstring = stroke.strip() - if colorstring[0] == '#': - colorstring = colorstring[1:] - r,g,b = colorstring[:2], colorstring[2:4], colorstring[4:] - r+="00" - g+="00" - b+="00" - r,g,b = [int(n, 16) for n in (r,g,b)] - return (r,g,b) - - def get_fill_color_from_sugar(self): - """Returns in (r,g,b) format the fill color from the Sugar profile""" - try: - client = gconf.client_get_default() - color = client.get_string("/desktop/sugar/user/color") - except: - color = profile.get_color().to_string() - stroke,fill = color.split(",") - colorstring = fill.strip() - if colorstring[0] == '#': - colorstring = colorstring[1:] - r,g,b = colorstring[:2], colorstring[2:4], colorstring[4:] - r+="00" - g+="00" - b+="00" - r,g,b = [int(n, 16) for n in (r,g,b)] - return (r,g,b) + # Hitting gconf is a large overhead. + if self.stroke_color is None: + try: + client = gconf.client_get_default() + color = client.get_string("/desktop/sugar/user/color") + except: + color = profile.get_color().to_string() + stroke,fill = color.split(",") + colorstring = stroke.strip() + if colorstring[0] == '#': + colorstring = colorstring[1:] + r,g,b = colorstring[:2], colorstring[2:4], colorstring[4:] + r+=r + g+=g + b+=b + r,g,b = [int(n, 16) for n in (r,g,b)] + self.stroke_color = (r,g,b) + + return self.stroke_color + + #def get_fill_color_from_sugar(self): + # """Returns in (r,g,b) format the fill color from the Sugar profile""" + # # Hitting gconf is a large overhead. + # if self.fill_color is None: + # try: + # client = gconf.client_get_default() + # color = client.get_string("/desktop/sugar/user/color") + # except: + # color = profile.get_color().to_string() + # stroke,fill = color.split(",") + # colorstring = fill.strip() + # if colorstring[0] == '#': + # colorstring = colorstring[1:] + # r,g,b = colorstring[:2], colorstring[2:4], colorstring[4:] + # r+=r + # g+=g + # b+=b + # r,g,b = [int(n, 16) for n in (r,g,b)] + # self.fill_color = (r,g,b) + # + # return self.stroke_color = (r,g,b) def get_mag_params(self): return self.g, self.y_mag @@ -445,3 +469,4 @@ class DrawWaveform(gtk.DrawingArea): def set_mag_params(self, g=1.0, y_mag=3.0): self.g = g self.y_mag = y_mag + diff --git a/journal.py b/journal.py index 8505707..8505707 100755..100644 --- a/journal.py +++ b/journal.py diff --git a/locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/am/activity.linfo b/locale/am/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/am/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index aa9d06e..0000000 --- a/locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ar/activity.linfo b/locale/ar/activity.linfo deleted file mode 100644 index a54992c..0000000 --- a/locale/ar/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = قياس diff --git a/locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ay/activity.linfo b/locale/ay/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/ay/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 988e2b9..0000000 --- a/locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/bg/activity.linfo b/locale/bg/activity.linfo deleted file mode 100644 index 07c0c5e..0000000 --- a/locale/bg/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Осцилоскоп diff --git a/locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index fc6ca89..0000000 --- a/locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/bn/activity.linfo b/locale/bn/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/bn/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 0293ef2..0000000 --- a/locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/bn_IN/activity.linfo b/locale/bn_IN/activity.linfo deleted file mode 100644 index 4f57866..0000000 --- a/locale/bn_IN/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = মেপে নিন diff --git a/locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index b8c78af..0000000 --- a/locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ca/activity.linfo b/locale/ca/activity.linfo deleted file mode 100644 index bb222f0..0000000 --- a/locale/ca/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Mesura diff --git a/locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 95d7078..0000000 --- a/locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/de/activity.linfo b/locale/de/activity.linfo deleted file mode 100644 index e9fd1a0..0000000 --- a/locale/de/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Messen diff --git a/locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/dz/activity.linfo b/locale/dz/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/dz/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index abcd21b..0000000 --- a/locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/el/activity.linfo b/locale/el/activity.linfo deleted file mode 100644 index a4fdba2..0000000 --- a/locale/el/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Μέτρηση diff --git a/locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/en/activity.linfo b/locale/en/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/en/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index b7e6913..0000000 --- a/locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/es/activity.linfo b/locale/es/activity.linfo deleted file mode 100644 index fff5c0f..0000000 --- a/locale/es/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Medir diff --git a/locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 8d86b62..0000000 --- a/locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/fa/activity.linfo b/locale/fa/activity.linfo deleted file mode 100644 index e471dc6..0000000 --- a/locale/fa/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = سنجش diff --git a/locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index ed17fe8..0000000 --- a/locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/fa_AF/activity.linfo b/locale/fa_AF/activity.linfo deleted file mode 100644 index e471dc6..0000000 --- a/locale/fa_AF/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = سنجش diff --git a/locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ff/activity.linfo b/locale/ff/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/ff/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index d851065..0000000 --- a/locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/fr/activity.linfo b/locale/fr/activity.linfo deleted file mode 100644 index 7c3f603..0000000 --- a/locale/fr/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Mesure diff --git a/locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ha/activity.linfo b/locale/ha/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/ha/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 68fc1f3..0000000 --- a/locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/hi/activity.linfo b/locale/hi/activity.linfo deleted file mode 100644 index 9fdd894..0000000 --- a/locale/hi/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = नाप diff --git a/locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ig/activity.linfo b/locale/ig/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/ig/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 622964b..0000000 --- a/locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/is/activity.linfo b/locale/is/activity.linfo deleted file mode 100644 index 7425d9a..0000000 --- a/locale/is/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Mæla diff --git a/locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index de16c53..0000000 --- a/locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ja/activity.linfo b/locale/ja/activity.linfo deleted file mode 100644 index 1efd009..0000000 --- a/locale/ja/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = 計測 diff --git a/locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index dfeecf6..0000000 --- a/locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/mk/activity.linfo b/locale/mk/activity.linfo deleted file mode 100644 index ff1f64b..0000000 --- a/locale/mk/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Мерка diff --git a/locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ml/activity.linfo b/locale/ml/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/ml/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 07785df..0000000 --- a/locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/mn/activity.linfo b/locale/mn/activity.linfo deleted file mode 100644 index 14197e5..0000000 --- a/locale/mn/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Хэмжигч diff --git a/locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 37015ff..0000000 --- a/locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ne/activity.linfo b/locale/ne/activity.linfo deleted file mode 100644 index 9fdd894..0000000 --- a/locale/ne/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = नाप diff --git a/locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 574d6af..0000000 --- a/locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/nl/activity.linfo b/locale/nl/activity.linfo deleted file mode 100644 index e47e1d6..0000000 --- a/locale/nl/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Meten diff --git a/locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/pa/activity.linfo b/locale/pa/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/pa/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/pl/activity.linfo b/locale/pl/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/pl/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c34c167..0000000 --- a/locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ps/activity.linfo b/locale/ps/activity.linfo deleted file mode 100644 index 9d83b52..0000000 --- a/locale/ps/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = اندازه کول diff --git a/locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/pseudo/activity.linfo b/locale/pseudo/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/pseudo/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 9f57ce1..0000000 --- a/locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/pt/activity.linfo b/locale/pt/activity.linfo deleted file mode 100644 index fff5c0f..0000000 --- a/locale/pt/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Medir diff --git a/locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index ac57dcd..0000000 --- a/locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/pt_BR/activity.linfo b/locale/pt_BR/activity.linfo deleted file mode 100644 index fff5c0f..0000000 --- a/locale/pt_BR/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Medir diff --git a/locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/qu/activity.linfo b/locale/qu/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/qu/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 22b8d05..0000000 --- a/locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ro/activity.linfo b/locale/ro/activity.linfo deleted file mode 100644 index be07be2..0000000 --- a/locale/ro/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Măsurători diff --git a/locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 0a2c255..0000000 --- a/locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ru/activity.linfo b/locale/ru/activity.linfo deleted file mode 100644 index 9b9de0d..0000000 --- a/locale/ru/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Измерить diff --git a/locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 141a46b..0000000 --- a/locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/rw/activity.linfo b/locale/rw/activity.linfo deleted file mode 100644 index 7dc1d4e..0000000 --- a/locale/rw/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Gupima diff --git a/locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index f641af6..0000000 --- a/locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/te/activity.linfo b/locale/te/activity.linfo deleted file mode 100644 index bbfba32..0000000 --- a/locale/te/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = కొలువు diff --git a/locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 9ca20f1..0000000 --- a/locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/th/activity.linfo b/locale/th/activity.linfo deleted file mode 100644 index 393013a..0000000 --- a/locale/th/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = วัดค่า diff --git a/locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index 640cb90..0000000 --- a/locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/ur/activity.linfo b/locale/ur/activity.linfo deleted file mode 100644 index 3e160cb..0000000 --- a/locale/ur/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = ناپیں diff --git a/locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo Binary files differdeleted file mode 100644 index c5361e7..0000000 --- a/locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo +++ /dev/null diff --git a/locale/yo/activity.linfo b/locale/yo/activity.linfo deleted file mode 100644 index 041f72c..0000000 --- a/locale/yo/activity.linfo +++ /dev/null @@ -1,2 +0,0 @@ -[Activity] -name = Measure diff --git a/measure.py b/measure.py index 3c52cbe..45c8eff 100755..100644 --- a/measure.py +++ b/measure.py @@ -1,7 +1,9 @@ #!/usr/bin/python # -# Copyright (C) 2007, OLPC # Written by Arjun Sarwal <arjun@laptop.org> +# Copyright (C) 2007, Arjun Sarwal +# Copyright (C) 2009, Walter Bender +# Copyright (C) 2009, Benjamin Berg, Sebastian Berg # # 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 @@ -127,7 +129,7 @@ class MeasureActivity(activity.Activity): def waveform_refresh(self): self.wave.queue_draw() - return self.active_status + return self.active_status def on_quit(self,data=None): self.audiograb.on_activity_quit() @@ -142,9 +144,9 @@ class MeasureActivity(activity.Activity): self.active_status = False elif (self.props.active and not self.ACTIVE): self.audiograb.resume_grabbing() - self.active_status = True + self.active_status = True gobject.timeout_add(config.REFRESH_TIME, \ - self.waveform_refresh) + self.waveform_refresh) self.ACTIVE = self.props.active """ diff --git a/sensor_toolbar.py b/sensor_toolbar.py index db9ae97..3e0beb5 100644 --- a/sensor_toolbar.py +++ b/sensor_toolbar.py @@ -3,6 +3,7 @@ # Author: Arjun Sarwal arjun@laptop.org # Copyright (C) 2007, Arjun Sarwal # Copyright (C) 2009, Walter Bender +# Copyright (C) 2009, Benjamin Berg, Sebastian Berg # # 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 @@ -23,7 +24,7 @@ import gtk import time from gettext import gettext as _ -import config #This has all the globals +import config #This has all the globals from sugar.graphics.toolbutton import ToolButton from sugar.graphics.combobox import ComboBox @@ -172,7 +173,7 @@ class SensorToolbar(gtk.Toolbar): self._record.set_tooltip(_('Stop Recording')) else: if self.logging_status == True: - self.ag.set_logging_params(False) + self.ag.set_logging_params(False) time.sleep(0.2) self.ji.stop_session() config.LOGGING_IN_SESSION = False @@ -258,7 +259,7 @@ class SensorToolbar(gtk.Toolbar): def context_off(self): self.ag.pause_grabbing() - + def context_on(self): self.ag.resume_grabbing() self.ag.set_dc_mode(True) diff --git a/sound_toolbar.py b/sound_toolbar.py index 30b2821..d20156b 100644 --- a/sound_toolbar.py +++ b/sound_toolbar.py @@ -3,6 +3,7 @@ # Author: Arjun Sarwal arjun@laptop.org # Copyright (C) 2007, Arjun Sarwal # Copyright (C) 2009, Walter Bender +# Copyright (C) 2009, Benjamin Berg, Sebastian Berg # # 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 @@ -20,6 +21,7 @@ import pygtk import gtk +import gobject from time import * from gettext import gettext as _ @@ -49,9 +51,13 @@ class SoundToolbar(gtk.Toolbar): self._STR2 = _("Frequency Base ") self._STR3 = _(" Invert ") self._STR_SCALEX = "" - self._STR_XAXIS1 = _("X Axis Scale: 1 division = ") - self._STR_XAXIS2 = _("ms ") - self._STR_XAXIS3 = _("Hz ") + self._STR_XAXIS_TEXT = _("X Axis Scale: 1 division = %(division)s %(unit)s") + # TRANSLATORS: This is milli seconds. + self._ms = _('ms') + # TRANSLATORS: This is Hertz, so 1/second. + self._Hz = _('Hz') + + self._update_page_size_id = None self.string_for_textbox = "" @@ -96,8 +102,7 @@ class SoundToolbar(gtk.Toolbar): ################ frequency control ################# self.adjustmentf = gtk.Adjustment(70, 10, 70 ,20, 20, 0.0) - self.adjustmentf.connect("value_changed", self.cb_page_sizef, \ - self.adjustmentf) + self.adjustmentf.connect("value_changed", self.cb_page_sizef) self._freq_range = gtk.HScale(self.adjustmentf) self._freq_range.set_draw_value(False) self._freq_range.set_update_policy(gtk.UPDATE_CONTINUOUS) @@ -170,6 +175,8 @@ class SoundToolbar(gtk.Toolbar): self._record.connect('clicked', self.record_control) #################################################### + self._update_page_size() + def record_control(self, data=None): """Depending upon the selected interval, does either a logging session, or just logs the current buffer""" @@ -266,41 +273,41 @@ class SoundToolbar(gtk.Toolbar): self._update_string_for_textbox() return False - def cb_page_sizef(self, get, data=None): - if(get.value>=10 and get.value<20): + def cb_page_sizef(self, data=None): + if self._update_page_size_id: + gobject.source_remove(self._update_page_size_id) + self._update_page_size_id = \ + gobject.timeout_add(250, self._update_page_size) + return True + + def _update_page_size(self): + self._update_page_size_id = None + + if(self.adjustmentf.value>=10 and self.adjustmentf.value<20): self._freq_range.set_value(10) - self.ag.set_sampling_rate(4000) - self.wave.set_freq_range(1) - if(get.value>=20 and get.value<46): + freq_div = 1000 + time_div = 0.001 + + if(self.adjustmentf.value>=20 and self.adjustmentf.value<46): self._freq_range.set_value(30) - self.ag.set_sampling_rate(4000) - self.wave.set_freq_range(2) - if(get.value>=46 and get.value<62): + freq_div = 500 + time_div = 0.0005 + + if(self.adjustmentf.value>=46 and self.adjustmentf.value<62): self._freq_range.set_value(50) - self.ag.set_sampling_rate(16000) - self.wave.set_freq_range(3) - if(get.value>=62 and get.value<=70): + freq_div = 250 + time_div = 0.00025 + + if(self.adjustmentf.value>=62 and self.adjustmentf.value<=70): self._freq_range.set_value(70) - self.ag.set_sampling_rate(48000) - self.wave.set_freq_range(4) + freq_div = 25 + time_div = 0.00005 + + self.wave.set_div(time_div, freq_div) + self._update_string_for_textbox() - return True - def calculate_x_axis_scale(self): - sampling_rate = self.ag.get_sampling_rate() - draw_interval = self.wave.get_drawing_interval() - if self.wave.get_fft_mode() == False: - scale = (50000.0/sampling_rate)/draw_interval - #TODO: fix this [:4] bad bad hack! - self._STR_SCALEX = self._STR_XAXIS1 + str(scale)[:4] + \ - self._STR_XAXIS2 - return - else: - #TODO: fix this [:4] bad bad hack! - scale = 1.04167/draw_interval - self._STR_SCALEX = self._STR_XAXIS1 + str(scale)[:4] + \ - self._STR_XAXIS3 - return + return False def context_off(self): """When some other context is switched to and the sound context @@ -323,7 +330,11 @@ class SoundToolbar(gtk.Toolbar): self._update_string_for_textbox() def _update_string_for_textbox(self): - self.calculate_x_axis_scale() + if self.wave.get_fft_mode() == False: + self._STR_SCALEX = self._STR_XAXIS_TEXT % {'unit': self._ms, 'division': self.wave.time_div*1000} + else: + self._STR_SCALEX = self._STR_XAXIS_TEXT % {'unit': self._Hz, 'division': self.wave.freq_div} + self.string_for_textbox = "" self.string_for_textbox += (self._STR_BASIC + "\t") if self.wave.get_fft_mode() == False: diff --git a/toolbar_side.py b/toolbar_side.py index 2766158..2766158 100755..100644 --- a/toolbar_side.py +++ b/toolbar_side.py diff --git a/toolbar_top.py b/toolbar_top.py index 2a65364..2a65364 100755..100644 --- a/toolbar_top.py +++ b/toolbar_top.py |