Exemplo n.º 1
0
    def __init__(self, parent=None, logger=PrintLogger()):
        super().__init__(parent)
        self.setObjectName("LongLevels_Widget")

        self.logger = logger

        self.setObjectName("Scope_Widget")
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneUp = TimePlot(self, self.logger)
        self.PlotZoneUp.setObjectName("PlotZoneUp")
        self.PlotZoneUp.setverticaltitle("Level (dB FS RMS)")
        self.PlotZoneUp.sethorizontaltitle("Time (min)")
        self.PlotZoneUp.setTrackerFormatter(lambda x, y: "%.3g min, %.3g" % (x, y))

        self.level_min = DEFAULT_LEVEL_MIN
        self.level_max = DEFAULT_LEVEL_MAX
        self.PlotZoneUp.setverticalrange(self.level_min, self.level_max)

        self.gridLayout.addWidget(self.PlotZoneUp, 0, 0, 1, 1)

        self.logger = logger
        self.audiobuffer = None

        # initialize the settings dialog
        self.settings_dialog = LongLevels_Settings_Dialog(self, self.logger)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        self.level = None # 1e-30
        self.level_rms = -200.

        self.two_channels = False

        self.i = 0

        self.old_index = 0

        #self.response_time = 60. # 1 minute
        self.response_time = 20.

        # how many times we should decimate to end up with 100 points in the kernel
        self.Ndec = int(max(0, np.floor((np.log2(self.response_time * SAMPLING_RATE/100.)))))

        Ngauss = 4
        self.b = np.array(gauss(10*Ngauss+1, 2.*Ngauss))
        self.a = np.zeros(self.b.shape)
        self.a[0] = 1.
        self.zf = np.zeros(max(len(self.b), len(self.a)) - 1)

        self.subsampled_sampling_rate = SAMPLING_RATE / 2 ** (self.Ndec)
        self.subsampler = Subsampler(self.Ndec)

        self.length_seconds = 60.*10
        # actually this should be linked to the pixel width of the plot area
        self.length_samples = self.length_seconds * self.subsampled_sampling_rate

        # ringbuffer for the subsampled data
        self.ringbuffer = RingBuffer(self.logger)
Exemplo n.º 2
0
	def __init__(self, parent, logger = None):
		QtGui.QWidget.__init__(self, parent)

		# store the logger instance
		if logger is None:
		    self.logger = parent.parent().logger
		else:
		    self.logger = logger
		
		self.parent = parent

		self.setObjectName("Spectrogram_Widget")
		self.gridLayout = QtGui.QGridLayout(self)
		self.gridLayout.setObjectName("gridLayout")
		self.PlotZoneImage = ImagePlot(self, self.logger)
		self.PlotZoneImage.setObjectName("PlotZoneImage")
		self.gridLayout.addWidget(self.PlotZoneImage, 0, 1, 1, 1)

		self.audiobuffer = None
		
		# initialize the class instance that will do the fft
		self.proc = audioproc(self.logger)

		self.maxfreq = DEFAULT_MAXFREQ
		self.minfreq = DEFAULT_MINFREQ
		self.fft_size = 2**DEFAULT_FFT_SIZE*32
		self.spec_min = DEFAULT_SPEC_MIN
		self.spec_max = DEFAULT_SPEC_MAX
		self.weighting = DEFAULT_WEIGHTING
		
		self.spectrogram_timer_time = 0.
		
		self.timerange_s = DEFAULT_TIMERANGE
		self.canvas_width = 100.
		
		self.PlotZoneImage.setlog10freqscale() #DEFAULT_FREQ_SCALE = 1 #log10
		self.PlotZoneImage.setfreqrange(self.minfreq, self.maxfreq)
		self.PlotZoneImage.setspecrange(self.spec_min, self.spec_max)
		self.PlotZoneImage.setweighting(self.weighting)
		self.PlotZoneImage.settimerange(self.timerange_s)
		
		# this timer is used to update the spectrogram widget, whose update period
		# is fixed by the time scale and the width of the widget canvas
		self.timer = QtCore.QTimer()
		self.period_ms = SMOOTH_DISPLAY_TIMER_PERIOD_MS
		self.timer.setInterval(self.period_ms) # variable timing
		
		# initialize the settings dialog
		self.settings_dialog = Spectrogram_Settings_Dialog(self, self.logger)
		
		# timer ticks
		self.connect(self.timer, QtCore.SIGNAL('timeout()'), self.timer_slot)
		
		# window resize
		self.connect(self.PlotZoneImage.plotImage.canvasscaledspectrogram, QtCore.SIGNAL("canvasWidthChanged"), self.canvasWidthChanged)

		# we do not use the display timer since we have a special one
		# tell the caller by setting this variable as None
		self.update = None
Exemplo n.º 3
0
    def __init__(self, parent, audiobackend, logger=PrintLogger()):
        super().__init__(parent)

        self.logger = logger

        self.setObjectName("Spectrogram_Widget")
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneImage = ImagePlot(self, self.logger, audiobackend)
        self.PlotZoneImage.setObjectName("PlotZoneImage")
        self.gridLayout.addWidget(self.PlotZoneImage, 0, 1, 1, 1)

        self.audiobuffer = None
        self.audiobackend = audiobackend

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        self.maxfreq = DEFAULT_MAXFREQ
        self.proc.set_maxfreq(self.maxfreq)
        self.minfreq = DEFAULT_MINFREQ
        self.fft_size = 2 ** DEFAULT_FFT_SIZE * 32
        self.proc.set_fftsize(self.fft_size)
        self.spec_min = DEFAULT_SPEC_MIN
        self.spec_max = DEFAULT_SPEC_MAX
        self.weighting = DEFAULT_WEIGHTING

        self.update_weighting()
        self.freq = self.proc.get_freq_scale()

        self.timerange_s = DEFAULT_TIMERANGE
        self.canvas_width = 100.

        self.old_index = 0
        self.overlap = 3. / 4.
        self.overlap_frac = Fraction(3, 4)
        self.dT_s = self.fft_size * (1. - self.overlap) / float(SAMPLING_RATE)

        self.PlotZoneImage.setlog10freqscale()  # DEFAULT_FREQ_SCALE = 1 #log10
        self.PlotZoneImage.setfreqrange(self.minfreq, self.maxfreq)
        self.PlotZoneImage.setspecrange(self.spec_min, self.spec_max)
        self.PlotZoneImage.setweighting(self.weighting)
        self.PlotZoneImage.settimerange(self.timerange_s, self.dT_s)
        self.update_jitter()

        sfft_rate_frac = Fraction(SAMPLING_RATE, self.fft_size) / (Fraction(1) - self.overlap_frac) / 1000
        self.PlotZoneImage.set_sfft_rate(sfft_rate_frac)

        # initialize the settings dialog
        self.settings_dialog = Spectrogram_Settings_Dialog(self, self.logger)

        self.audiobackend.underflow.connect(self.PlotZoneImage.plotImage.canvasscaledspectrogram.syncOffsets)

        self.last_data_time = 0.

        self.mustRestart = False
Exemplo n.º 4
0
    def __init__(self, parent, audiobackend, logger = None):
        QtGui.QWidget.__init__(self, parent)

        # store the logger instance
        if logger is None:
            self.logger = parent.parent().logger
        else:
            self.logger = logger
        			
        self.parent = parent

        self.setObjectName("Spectrogram_Widget")
        self.gridLayout = QtGui.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneImage = ImagePlot(self, self.logger, audiobackend)
        #self.PlotZoneImage = GLRollingCanvasWidget(self, self.logger)
        self.PlotZoneImage.setObjectName("PlotZoneImage")
        self.gridLayout.addWidget(self.PlotZoneImage, 0, 1, 1, 1)

        self.audiobuffer = None
        self.audiobackend = audiobackend
        
        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        self.maxfreq = DEFAULT_MAXFREQ
        self.proc.set_maxfreq(self.maxfreq)
        self.minfreq = DEFAULT_MINFREQ
        self.fft_size = 2**DEFAULT_FFT_SIZE*32
        self.proc.set_fftsize(self.fft_size)
        self.spec_min = DEFAULT_SPEC_MIN
        self.spec_max = DEFAULT_SPEC_MAX
        self.weighting = DEFAULT_WEIGHTING
        
        self.update_weighting()
        self.freq = self.proc.get_freq_scale()
              
        self.timerange_s = DEFAULT_TIMERANGE
        self.canvas_width = 100.
        
        self.old_index = 0        
        self.overlap = 3./4.
        self.overlap_frac = Fraction(3, 4)
        self.dT_s = self.fft_size*(1. - self.overlap)/float(SAMPLING_RATE)
        
        self.PlotZoneImage.setlog10freqscale() #DEFAULT_FREQ_SCALE = 1 #log10
        self.PlotZoneImage.setfreqrange(self.minfreq, self.maxfreq)
        self.PlotZoneImage.setspecrange(self.spec_min, self.spec_max)
        self.PlotZoneImage.setweighting(self.weighting)
        self.PlotZoneImage.settimerange(self.timerange_s, self.dT_s)

        sfft_rate_frac = Fraction(SAMPLING_RATE, self.fft_size)/(Fraction(1) - self.overlap_frac)/1000
        self.PlotZoneImage.set_sfft_rate(sfft_rate_frac)
        
        # initialize the settings dialog
        self.settings_dialog = Spectrogram_Settings_Dialog(self, self.logger)
Exemplo n.º 5
0
    def __init__(self, parent, logger=PrintLogger()):
        super().__init__(parent)

        self.logger = logger

        self.setObjectName(self.name)
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneSpect = SpectrumPlotWidget(self, self.logger)
        self.PlotZoneSpect.setObjectName("PlotZoneSpect")
        self.gridLayout.addWidget(self.PlotZoneSpect, 0, 0, 1, 1)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        self.maxfreq = DEFAULT_MAXFREQ
        self.proc.set_maxfreq(self.maxfreq)
        self.minfreq = DEFAULT_MINFREQ
        self.fft_size = 2 ** DEFAULT_FFT_SIZE * 32

        self.proc.set_fftsize(self.fft_size)
        self.spec_min = DEFAULT_SPEC_MIN
        self.spec_max = DEFAULT_SPEC_MAX
        self.weighting = DEFAULT_WEIGHTING
        self.dual_channels = False
        self.response_time = DEFAULT_RESPONSE_TIME
        self.spectrum_type = "Power"  # DEFAULT_SPECTRUM_TYPE = 2
        self.is_dB = True  # DEFAULT_INTENSITY_SCALE = 0

        self.update_weighting()
        self.freq = self.proc.get_freq_scale()

        self.overlap = 3. / 4.
        self.data_buffer = RingBuffer(1, 4 * self.fft_size)
        self.smoothing_buffer = RingBuffer(1, self.fft_size*self.overlap)


        self.update_display_buffers()

        # set kernel and parameters for the smoothing filter
        self.setresponsetime(self.response_time)

        self.PlotZoneSpect.setlogfreqscale()  # DEFAULT_FREQ_SCALE = 1 #log10
        self.PlotZoneSpect.setfreqrange(self.minfreq, self.maxfreq)
        self.PlotZoneSpect.setspecrange(self.spec_min, self.spec_max)
        self.PlotZoneSpect.setweighting(self.weighting)
        self.PlotZoneSpect.set_peaks_enabled(False)
        self.PlotZoneSpect.set_baseline_displayUnits(0.)
        self.PlotZoneSpect.setShowFreqLabel(DEFAULT_SHOW_FREQ_LABELS)

        # initialize the settings dialog
        self.settings_dialog = Spectrum_Settings_Dialog(self, self.logger)
Exemplo n.º 6
0
	def __init__(self, parent, sharedGLWidget, logger = PrintLogger()):
		QtGui.QWidget.__init__(self, parent)

		self.logger = logger
		self.audiobuffer = None

		self.setObjectName("Spectrum_Widget")
		self.gridLayout = QtGui.QGridLayout(self)
		self.gridLayout.setObjectName("gridLayout")
		#self.PlotZoneSpect = SpectPlot(self, self.logger)
		self.PlotZoneSpect = GLPlotWidget(self, sharedGLWidget, self.logger)
		self.PlotZoneSpect.setObjectName("PlotZoneSpect")
		self.gridLayout.addWidget(self.PlotZoneSpect, 0, 0, 1, 1)

		self.setStyleSheet(STYLESHEET)
		
		# initialize the class instance that will do the fft
		self.proc = audioproc(self.logger)
		
		self.maxfreq = DEFAULT_MAXFREQ
		self.proc.set_maxfreq(self.maxfreq)
		self.minfreq = DEFAULT_MINFREQ
		self.fft_size = 2**DEFAULT_FFT_SIZE*32
		self.proc.set_fftsize(self.fft_size)
		self.spec_min = DEFAULT_SPEC_MIN
		self.spec_max = DEFAULT_SPEC_MAX
		self.weighting = DEFAULT_WEIGHTING
		self.dual_channels = False
		self.response_time = DEFAULT_RESPONSE_TIME

		self.update_weighting()
		self.freq = self.proc.get_freq_scale()

		self.old_index = 0        
		self.overlap = 3./4.

		self.update_display_buffers()

		# set kernel and parameters for the smoothing filter
		self.setresponsetime(self.response_time)

		self.PlotZoneSpect.setlogfreqscale() #DEFAULT_FREQ_SCALE = 1 #log10
		self.PlotZoneSpect.setfreqrange(self.minfreq, self.maxfreq)
		self.PlotZoneSpect.setspecrange(self.spec_min, self.spec_max)
		self.PlotZoneSpect.setweighting(self.weighting)
		self.PlotZoneSpect.set_peaks_enabled(True)
		self.PlotZoneSpect.set_baseline_displayUnits(0.)
		self.PlotZoneSpect.setShowFreqLabel(DEFAULT_SHOW_FREQ_LABELS)
		
		# initialize the settings dialog
		self.settings_dialog = Spectrum_Settings_Dialog(self, self.logger)
Exemplo n.º 7
0
    def __init__(self, parent, sharedGLWidget, logger=PrintLogger()):
        super().__init__(parent)

        self.logger = logger
        self.audiobuffer = None

        self.setObjectName("Spectrum_Widget")
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneSpect = SpectrumPlotWidget(self, sharedGLWidget,
                                                self.logger)
        self.PlotZoneSpect.setObjectName("PlotZoneSpect")
        self.gridLayout.addWidget(self.PlotZoneSpect, 0, 0, 1, 1)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        self.maxfreq = DEFAULT_MAXFREQ
        self.proc.set_maxfreq(self.maxfreq)
        self.minfreq = DEFAULT_MINFREQ
        self.fft_size = 2**DEFAULT_FFT_SIZE * 32
        self.proc.set_fftsize(self.fft_size)
        self.spec_min = DEFAULT_SPEC_MIN
        self.spec_max = DEFAULT_SPEC_MAX
        self.weighting = DEFAULT_WEIGHTING
        self.dual_channels = False
        self.response_time = DEFAULT_RESPONSE_TIME

        self.update_weighting()
        self.freq = self.proc.get_freq_scale()

        self.old_index = 0
        self.overlap = 3. / 4.

        self.update_display_buffers()

        # set kernel and parameters for the smoothing filter
        self.setresponsetime(self.response_time)

        self.PlotZoneSpect.setlogfreqscale()  #DEFAULT_FREQ_SCALE = 1 #log10
        self.PlotZoneSpect.setfreqrange(self.minfreq, self.maxfreq)
        self.PlotZoneSpect.setspecrange(self.spec_min, self.spec_max)
        self.PlotZoneSpect.setweighting(self.weighting)
        self.PlotZoneSpect.set_peaks_enabled(True)
        self.PlotZoneSpect.set_baseline_displayUnits(0.)
        self.PlotZoneSpect.setShowFreqLabel(DEFAULT_SHOW_FREQ_LABELS)

        # initialize the settings dialog
        self.settings_dialog = Spectrum_Settings_Dialog(self, self.logger)
Exemplo n.º 8
0
	def __init__(self, parent, logger = None):
		QtGui.QWidget.__init__(self, parent)

		# store the logger instance
		if logger is None:
		    self.logger = parent.parent.logger
		else:
		    self.logger = logger

		self.audiobuffer = None

		self.setObjectName("Spectrum_Widget")
		self.gridLayout = QtGui.QGridLayout(self)
		self.gridLayout.setObjectName("gridLayout")
		#self.PlotZoneSpect = SpectPlot(self, self.logger)
  		self.PlotZoneSpect = GLPlotWidget(self, self.logger)
		self.PlotZoneSpect.setObjectName("PlotZoneSpect")
		self.gridLayout.addWidget(self.PlotZoneSpect, 0, 0, 1, 1)

		self.setStyleSheet(STYLESHEET)
		
		# initialize the class instance that will do the fft
		self.proc = audioproc(self.logger)
		
		self.maxfreq = DEFAULT_MAXFREQ
		self.proc.set_maxfreq(self.maxfreq)
		self.minfreq = DEFAULT_MINFREQ
		self.fft_size = 2**DEFAULT_FFT_SIZE*32
		self.proc.set_fftsize(self.fft_size)
		self.spec_min = DEFAULT_SPEC_MIN
		self.spec_max = DEFAULT_SPEC_MAX
		self.weighting = DEFAULT_WEIGHTING
		self.dual_channels = False
		
		self.PlotZoneSpect.setlogfreqscale() #DEFAULT_FREQ_SCALE = 1 #log10
		self.PlotZoneSpect.setfreqrange(self.minfreq, self.maxfreq)
		self.PlotZoneSpect.setspecrange(self.spec_min, self.spec_max)
		self.PlotZoneSpect.setweighting(self.weighting)
		self.PlotZoneSpect.set_peaks_enabled(True)
		self.PlotZoneSpect.set_baseline_displayUnits(0.)
		self.PlotZoneSpect.setShowFreqLabel(DEFAULT_SHOW_FREQ_LABELS)
		
		# initialize the settings dialog
		self.settings_dialog = Spectrum_Settings_Dialog(self, self.logger)
Exemplo n.º 9
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setObjectName("LongLevels_Widget")

        self.setObjectName("Scope_Widget")
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneUp = TimePlot(self)
        self.PlotZoneUp.setObjectName("PlotZoneUp")
        self.PlotZoneUp.setverticaltitle("Level (dB FS RMS)")
        self.PlotZoneUp.sethorizontaltitle("Time (sec)")
        self.PlotZoneUp.setTrackerFormatter(lambda x, y: "%.3g sec, %.3g" % (x, y))

        self.level_min = DEFAULT_LEVEL_MIN
        self.level_max = DEFAULT_LEVEL_MAX
        self.PlotZoneUp.setverticalrange(self.level_min, self.level_max)

        self.gridLayout.addWidget(self.PlotZoneUp, 0, 0, 1, 1)

        self.audiobuffer = None

        # initialize the settings dialog
        self.settings_dialog = LongLevels_Settings_Dialog(self)

        # initialize the class instance that will do the fft
        self.proc = audioproc()

        self.level = None  # 1e-30
        self.level_rms = -200.

        self.two_channels = False

        self.i = 0

        self.old_index = 0

        #Set the initial timespan and response time
        self.length_seconds = DEFAULT_MAXTIME
        self.setresptime(DEFAULT_RESPONSE_TIME)

        # ringbuffer for the subsampled data
        self.ringbuffer = RingBuffer()
Exemplo n.º 10
0
    def __init__(self, parent, logger=None):
        QtGui.QWidget.__init__(self, parent)

        # store the logger instance
        if logger is None:
            self.logger = parent.parent.logger
        else:
            self.logger = logger

        self.audiobuffer = None

        self.setObjectName("Spectrum_Widget")
        self.gridLayout = QtGui.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        #self.PlotZoneSpect = SpectPlot(self, self.logger)
        self.PlotZoneSpect = GLPlotWidget(self, self.logger)
        self.PlotZoneSpect.setObjectName("PlotZoneSpect")
        self.gridLayout.addWidget(self.PlotZoneSpect, 0, 0, 1, 1)

        self.setStyleSheet(STYLESHEET)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        self.maxfreq = DEFAULT_MAXFREQ
        self.minfreq = DEFAULT_MINFREQ
        self.fft_size = 2**DEFAULT_FFT_SIZE * 32
        self.spec_min = DEFAULT_SPEC_MIN
        self.spec_max = DEFAULT_SPEC_MAX
        self.weighting = DEFAULT_WEIGHTING
        self.dual_channels = False

        self.PlotZoneSpect.setlogfreqscale()  #DEFAULT_FREQ_SCALE = 1 #log10
        self.PlotZoneSpect.setfreqrange(self.minfreq, self.maxfreq)
        self.PlotZoneSpect.setspecrange(self.spec_min, self.spec_max)
        self.PlotZoneSpect.setweighting(self.weighting)
        self.PlotZoneSpect.set_peaks_enabled(True)
        self.PlotZoneSpect.set_baseline_displayUnits(0.)

        # initialize the settings dialog
        self.settings_dialog = Spectrum_Settings_Dialog(self, self.logger)
Exemplo n.º 11
0
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setObjectName("Levels_Widget")

        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")

        font = QtGui.QFont()
        font.setPointSize(14)
        font.setWeight(75)
        font.setBold(True)

        self.label_peak = QtWidgets.QLabel(self)
        self.label_peak.setFont(font)
        # QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft
        self.label_peak.setAlignment(QtCore.Qt.AlignBottom
                                     | QtCore.Qt.AlignRight)
        self.label_peak.setObjectName("label_peak")

        self.label_peak_legend = QtWidgets.QLabel(self)
        self.label_peak_legend.setAlignment(QtCore.Qt.AlignTop
                                            | QtCore.Qt.AlignRight)
        self.label_peak_legend.setObjectName("label_peak_legend")

        self.label_rms = QtWidgets.QLabel(self)
        self.label_rms.setFont(font)
        self.label_rms.setAlignment(QtCore.Qt.AlignBottom
                                    | QtCore.Qt.AlignRight)
        self.label_rms.setObjectName("label_rms")

        self.label_rms_legend = QtWidgets.QLabel(self)
        self.label_rms_legend.setAlignment(QtCore.Qt.AlignTop
                                           | QtCore.Qt.AlignRight)
        self.label_rms_legend.setObjectName("label_rms_legend")

        self.meter = qsynthMeter(self)
        self.meter.setStyleSheet(STYLESHEET)
        self.meter.setObjectName("meter")

        self.gridLayout.addWidget(self.label_peak, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.label_peak_legend, 1, 0, 1, 1)
        self.gridLayout.addWidget(self.label_rms, 2, 0, 1, 1)
        self.gridLayout.addWidget(self.label_rms_legend, 3, 0, 1, 1)

        self.gridLayout.addWidget(self.meter, 4, 0, 1, 1)

        self.label_rms.setText("+00.0")
        self.label_peak.setText("+00.0")
        self.label_rms_legend.setText("dB FS\n RMS")
        self.label_peak_legend.setText("dB FS\n Peak")
        self.label_rms.setTextFormat(QtCore.Qt.PlainText)
        self.label_peak.setTextFormat(QtCore.Qt.PlainText)
        # self.label_rms.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding))
        # self.label_rms_legend.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding))
        # self.label_peak.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding))
        # self.label_peak_legend.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding))

        self.audiobuffer = None

        # initialize the settings dialog
        self.settings_dialog = Levels_Settings_Dialog(self)

        # initialize the class instance that will do the fft
        self.proc = audioproc()

        # time = SMOOTH_DISPLAY_TIMER_PERIOD_MS/1000. #DISPLAY
        # time = 0.025 #IMPULSE setting for a sound level meter
        # time = 0.125 #FAST setting for a sound level meter
        # time = 1. #SLOW setting for a sound level meter
        self.response_time = 0.300  # 300ms is a common value for VU meters
        # an exponential smoothing filter is a simple IIR filter
        # s_i = alpha*x_i + (1-alpha)*s_{i-1}
        # we compute alpha so that the n most recent samples represent 100*w percent of the output
        w = 0.65
        n = self.response_time * SAMPLING_RATE
        N = 5 * n
        self.alpha = 1. - (1. - w)**(1. / (n + 1))
        self.kernel = (1. - self.alpha)**(np.arange(0, N)[::-1])
        # first channel
        self.level_rms = -30.
        self.level_max = -30.
        self.old_rms = 1e-30
        self.old_max = 1e-30
        # second channel
        self.level_rms_2 = -30.
        self.level_max_2 = -30.
        self.old_rms_2 = 1e-30
        self.old_max_2 = 1e-30

        response_time_peaks = 0.025  # 25ms for instantaneous peaks
        n2 = response_time_peaks / (SMOOTH_DISPLAY_TIMER_PERIOD_MS / 1000.)
        self.alpha2 = 1. - (1. - w)**(1. / (n2 + 1))

        self.two_channels = False

        self.i = 0
Exemplo n.º 12
0
	def __init__(self, parent = None, logger = PrintLogger()):
		QtGui.QWidget.__init__(self, parent)
		self.setObjectName("Levels_Widget")
		
		self.gridLayout = QtGui.QGridLayout(self)
		self.gridLayout.setObjectName("gridLayout")

		font = QtGui.QFont()
		font.setPointSize(14)
		font.setWeight(75)
		font.setBold(True)

		self.label_peak = QtGui.QLabel(self)
		self.label_peak.setFont(font)
		#QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft
		self.label_peak.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight)
		self.label_peak.setObjectName("label_peak")

		self.label_peak_legend = QtGui.QLabel(self)
		self.label_peak_legend.setAlignment(QtCore.Qt.AlignTop|QtCore.Qt.AlignRight)
		self.label_peak_legend.setObjectName("label_peak_legend")

		self.label_rms = QtGui.QLabel(self)
		self.label_rms.setFont(font)
		self.label_rms.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignRight)
		self.label_rms.setObjectName("label_rms")

		self.label_rms_legend = QtGui.QLabel(self)
		self.label_rms_legend.setAlignment(QtCore.Qt.AlignTop|QtCore.Qt.AlignRight)
		self.label_rms_legend.setObjectName("label_rms_legend")

		self.meter = qsynthMeter(self)
		self.meter.setStyleSheet(STYLESHEET)
		self.meter.setObjectName("meter")

		self.gridLayout.addWidget(self.label_peak, 0, 0, 1, 1)
		self.gridLayout.addWidget(self.label_peak_legend, 1, 0, 1, 1)
		self.gridLayout.addWidget(self.label_rms, 2, 0, 1, 1)
		self.gridLayout.addWidget(self.label_rms_legend, 3, 0, 1, 1)

		self.gridLayout.addWidget(self.meter, 0, 1, 4, 1)

		self.label_rms.setText("-100.0")
		self.label_peak.setText("-100.0")
		self.label_rms_legend.setText("dB FS\n RMS")
		self.label_peak_legend.setText("dB FS\n Peak")
		#self.label_rms.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
		#self.label_rms_legend.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
		#self.label_peak.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
		#self.label_peak_legend.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
		
		self.logger = logger
		self.audiobuffer = None
		
		# initialize the settings dialog
		self.settings_dialog = Levels_Settings_Dialog(self, self.logger)
		
		# initialize the class instance that will do the fft
		self.proc = audioproc(self.logger)
		
		#time = SMOOTH_DISPLAY_TIMER_PERIOD_MS/1000. #DISPLAY
		#time = 0.025 #IMPULSE setting for a sound level meter
		#time = 0.125 #FAST setting for a sound level meter
		#time = 1. #SLOW setting for a sound level meter
		self.response_time = 0.300 #300ms is a common value for VU meters
		# an exponential smoothing filter is a simple IIR filter
		# s_i = alpha*x_i + (1-alpha)*s_{i-1}
		#we compute alpha so that the n most recent samples represent 100*w percent of the output
		w = 0.65
		n = self.response_time*SAMPLING_RATE
		N = 4096
		self.alpha = 1. - (1.-w)**(1./(n+1))
		self.kernel = (1. - self.alpha)**(arange(0, N)[::-1])
		# first channel
		self.old_rms = 1e-30
		self.old_max = 1e-30
		# second channel
		self.old_rms_2 = 1e-30
		self.old_max_2 = 1e-30
		
		response_time_peaks = 0.025 # 25ms for instantaneous peaks
		n2 = response_time_peaks/(SMOOTH_DISPLAY_TIMER_PERIOD_MS/1000.)
		self.alpha2 = 1. - (1.-w)**(1./(n2+1))
  
		self.two_channels = False

		self.i = 0
Exemplo n.º 13
0
	def __init__(self, parent, logger = None):
		QtGui.QWidget.__init__(self, parent)

		# store the logger instance
		if logger is None:
		    self.logger = parent.parent().logger
		else:
		    self.logger = logger
		
		self.parent = parent

		self.setObjectName("Spectrogram_Widget")
		self.gridLayout = QtGui.QGridLayout(self)
		self.gridLayout.setObjectName("gridLayout")
		self.PlotZoneImage = ImagePlot(self, self.logger)
		self.PlotZoneImage.setObjectName("PlotZoneImage")
		self.gridLayout.addWidget(self.PlotZoneImage, 0, 1, 1, 1)

		self.audiobuffer = None
		
		# initialize the class instance that will do the fft
		self.proc = audioproc(self.logger)

		self.maxfreq = DEFAULT_MAXFREQ
		self.minfreq = DEFAULT_MINFREQ
		self.fft_size = 2**DEFAULT_FFT_SIZE*32
		self.spec_min = DEFAULT_SPEC_MIN
		self.spec_max = DEFAULT_SPEC_MAX
		self.weighting = DEFAULT_WEIGHTING
		
		self.spectrogram_timer_time = 0.
		
		self.timerange_s = DEFAULT_TIMERANGE
		self.canvas_width = 100.
		
		self.PlotZoneImage.setlog10freqscale() #DEFAULT_FREQ_SCALE = 1 #log10
		self.PlotZoneImage.setfreqrange(self.minfreq, self.maxfreq)
		self.PlotZoneImage.setspecrange(self.spec_min, self.spec_max)
		self.PlotZoneImage.setweighting(self.weighting)
		self.PlotZoneImage.settimerange(self.timerange_s)
		
		# this timer is used to update the spectrogram widget, whose update period
		# is fixed by the time scale and the width of the widget canvas
		self.timer = QtCore.QTimer()
		self.period_ms = SMOOTH_DISPLAY_TIMER_PERIOD_MS
		self.timer.setInterval(self.period_ms) # variable timing
		
		# initialize the settings dialog
		self.settings_dialog = Spectrogram_Settings_Dialog(self, self.logger)
		
		# timer ticks
		self.connect(self.timer, QtCore.SIGNAL('timeout()'), self.timer_slot)
		
		# window resize
		self.connect(self.PlotZoneImage.plotImage.canvasscaledspectrogram, QtCore.SIGNAL("canvasWidthChanged"), self.canvasWidthChanged)

		# we do not use the display timer since we have a special one
		# tell the caller by setting this variable as None
		self.update = None
  
		self.timer_time = QtCore.QTime()
Exemplo n.º 14
0
    def __init__(self, parent=None, logger=None):
        QtGui.QWidget.__init__(self, parent)
        self.setObjectName("Levels_Widget")

        self.gridLayout = QtGui.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.label_rms = QtGui.QLabel(self)
        font = QtGui.QFont()
        font.setPointSize(14)
        font.setWeight(75)
        font.setBold(True)
        self.label_rms.setFont(font)
        self.label_rms.setAlignment(QtCore.Qt.AlignBottom
                                    | QtCore.Qt.AlignRight
                                    | QtCore.Qt.AlignTrailing)
        self.label_rms.setObjectName("label_rms")
        self.gridLayout.addWidget(self.label_rms, 0, 0, 1, 1)
        self.meter = qsynthMeter(self)
        self.meter.setStyleSheet(STYLESHEET)
        self.meter.setObjectName("meter")
        self.gridLayout.addWidget(self.meter, 0, 1, 2, 1)
        self.label_peak = QtGui.QLabel(self)
        self.label_peak.setFont(font)
        self.label_peak.setAlignment(QtCore.Qt.AlignBottom
                                     | QtCore.Qt.AlignLeading
                                     | QtCore.Qt.AlignLeft)
        self.label_peak.setObjectName("label_peak")
        self.gridLayout.addWidget(self.label_peak, 0, 2, 1, 1)
        self.label_rms_legend = QtGui.QLabel(self)
        self.label_rms_legend.setAlignment(QtCore.Qt.AlignRight
                                           | QtCore.Qt.AlignTop
                                           | QtCore.Qt.AlignTrailing)
        self.label_rms_legend.setObjectName("label_rms_legend")
        self.gridLayout.addWidget(self.label_rms_legend, 1, 0, 1, 1)
        self.label_peak_legend = QtGui.QLabel(self)
        self.label_peak_legend.setAlignment(QtCore.Qt.AlignLeading
                                            | QtCore.Qt.AlignLeft
                                            | QtCore.Qt.AlignTop)
        self.label_peak_legend.setObjectName("label_peak_legend")
        self.gridLayout.addWidget(self.label_peak_legend, 1, 2, 1, 1)

        self.label_rms.setText("-100.0")
        self.label_peak.setText("-100.0")
        self.label_rms_legend.setText("dBFS\n RMS")
        self.label_peak_legend.setText("dBFS\n peak")
        #self.label_rms.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
        #self.label_rms_legend.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
        #self.label_peak.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))
        #self.label_peak_legend.setSizePolicy(QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding))

        # store the logger instance
        if logger is None:
            self.logger = parent.parent.logger
        else:
            self.logger = logger

        self.audiobuffer = None

        # initialize the settings dialog
        self.settings_dialog = Levels_Settings_Dialog(self, self.logger)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        #time = SMOOTH_DISPLAY_TIMER_PERIOD_MS/1000. #DISPLAY
        #time = 0.025 #IMPULSE setting for a sound level meter
        #time = 0.125 #FAST setting for a sound level meter
        #time = 1. #SLOW setting for a sound level meter
        self.response_time = 0.125
        # an exponential smoothing filter is a simple IIR filter
        # s_i = alpha*x_i + (1-alpha)*s_{i-1}
        #we compute alpha so that the n most recent samples represent 100*w percent of the output
        w = 0.65
        n = self.response_time * SAMPLING_RATE
        N = 4096
        self.alpha = 1. - (1. - w)**(1. / (n + 1))
        self.kernel = (1. - self.alpha)**(arange(0, N)[::-1])
        # first channel
        self.old_rms = 1e-30
        self.old_max = 1e-30
        # second channel
        self.old_rms_2 = 1e-30
        self.old_max_2 = 1e-30

        n2 = self.response_time / (SMOOTH_DISPLAY_TIMER_PERIOD_MS / 1000.)
        self.alpha2 = 1. - (1. - w)**(1. / (n2 + 1))

        self.two_channels = False
Exemplo n.º 15
0
    def __init__(self, parent=None, logger=PrintLogger()):
        super().__init__(parent)
        self.setObjectName("LongLevels_Widget")

        self.logger = logger

        self.setObjectName("Scope_Widget")
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneUp = TimePlot(self, self.logger)
        self.PlotZoneUp.setObjectName("PlotZoneUp")
        self.PlotZoneUp.setverticaltitle("Level (dB FS RMS)")
        self.PlotZoneUp.sethorizontaltitle("Time (min)")
        self.PlotZoneUp.setTrackerFormatter(lambda x, y: "%.3g min, %.3g" % (x, y))

        self.level_min = DEFAULT_LEVEL_MIN
        self.level_max = DEFAULT_LEVEL_MAX
        self.PlotZoneUp.setverticalrange(self.level_min, self.level_max)

        self.gridLayout.addWidget(self.PlotZoneUp, 0, 0, 1, 1)

        self.logger = logger
        self.audiobuffer = None

        # initialize the settings dialog
        self.settings_dialog = LongLevels_Settings_Dialog(self, self.logger)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        #self.response_time = 60. # 1 minute
        self.response_time = 1.

        # an exponential smoothing filter is a simple IIR filter
        # s_i = alpha*x_i + (1-alpha)*s_{i-1}
        # we compute alpha so that the n most recent samples represent 100*w percent of the output
        w = 0.65

        # how many times we should decimate to end up with 100 points in the kernel
        self.Ndec = int(max(0, np.floor((np.log2(self.response_time * SAMPLING_RATE/100.)))))

        n = self.response_time * SAMPLING_RATE / 2**self.Ndec
        N = int(5*n)
        self.alpha = 1. - (1. - w) ** (1. / (n + 1))
        self.kernel = (1. - self.alpha) ** (np.arange(0, N)[::-1])

        self.level = None # 1e-30
        self.level_rms = -200.

        self.two_channels = False

        self.i = 0

        self.subsampled_sampling_rate = SAMPLING_RATE / 2 ** (self.Ndec)
        self.subsampler = Subsampler(self.Ndec)

        self.old_index = 0

        self.length_seconds = 60.*10
        # actually this should be linked to the pixel width of the plot area
        self.length_samples = self.length_seconds * self.subsampled_sampling_rate

        # ringbuffer for the subsampled data
        self.ringbuffer = RingBuffer(self.logger)
Exemplo n.º 16
0
    def __init__(self, parent=None, logger=PrintLogger()):
        super().__init__(parent)
        self.setObjectName("LongLevels_Widget")

        self.logger = logger

        self.setObjectName("Scope_Widget")
        self.gridLayout = QtWidgets.QGridLayout(self)
        self.gridLayout.setObjectName("gridLayout")
        self.PlotZoneUp = TimePlot(self, self.logger)
        self.PlotZoneUp.setObjectName("PlotZoneUp")
        self.PlotZoneUp.setverticaltitle("Level (dB FS RMS)")
        self.PlotZoneUp.sethorizontaltitle("Time (min)")
        self.PlotZoneUp.setTrackerFormatter(lambda x, y: "%.3g min, %.3g" %
                                            (x, y))

        self.level_min = DEFAULT_LEVEL_MIN
        self.level_max = DEFAULT_LEVEL_MAX
        self.PlotZoneUp.setverticalrange(self.level_min, self.level_max)

        self.gridLayout.addWidget(self.PlotZoneUp, 0, 0, 1, 1)

        self.logger = logger
        self.audiobuffer = None

        # initialize the settings dialog
        self.settings_dialog = LongLevels_Settings_Dialog(self, self.logger)

        # initialize the class instance that will do the fft
        self.proc = audioproc(self.logger)

        #self.response_time = 60. # 1 minute
        self.response_time = 1.

        # an exponential smoothing filter is a simple IIR filter
        # s_i = alpha*x_i + (1-alpha)*s_{i-1}
        # we compute alpha so that the n most recent samples represent 100*w percent of the output
        w = 0.65

        # how many times we should decimate to end up with 100 points in the kernel
        self.Ndec = int(
            max(0,
                np.floor(
                    (np.log2(self.response_time * SAMPLING_RATE / 100.)))))

        n = self.response_time * SAMPLING_RATE / 2**self.Ndec
        N = int(5 * n)
        self.alpha = 1. - (1. - w)**(1. / (n + 1))
        self.kernel = (1. - self.alpha)**(np.arange(0, N)[::-1])

        self.level = None  # 1e-30
        self.level_rms = -200.

        self.two_channels = False

        self.i = 0

        self.subsampled_sampling_rate = SAMPLING_RATE / 2**(self.Ndec)
        self.subsampler = Subsampler(self.Ndec)

        self.old_index = 0

        self.length_seconds = 60. * 10
        # actually this should be linked to the pixel width of the plot area
        self.length_samples = self.length_seconds * self.subsampled_sampling_rate

        # ringbuffer for the subsampled data
        self.ringbuffer = RingBuffer(self.logger)