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
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()