diff --git a/source/carla b/source/carla index dcfbb4237..f1474e0c6 100755 --- a/source/carla +++ b/source/carla @@ -136,6 +136,7 @@ class CarlaMultiW(QTabWidget): def idleFast(self): self.fRack.idleFast() + self.fPatchbay.idleFast() def idleSlow(self): self.fRack.idleSlow() diff --git a/source/carla_patchbay.py b/source/carla_patchbay.py index e2ff48cdb..e3f5c9e07 100644 --- a/source/carla_patchbay.py +++ b/source/carla_patchbay.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- # Carla patchbay widget code -# Copyright (C) 2011-2013 Filipe Coelho +# Copyright (C) 2011-2014 Filipe Coelho # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -20,7 +20,7 @@ # Imports (Global) from PyQt4.QtCore import QPointF, QTimer -from PyQt4.QtGui import QFrame, QGraphicsView, QImage, QPrinter, QPrintDialog, QVBoxLayout +from PyQt4.QtGui import QFrame, QGraphicsView, QGridLayout, QImage, QPrinter, QPrintDialog # ------------------------------------------------------------------------------------------------------------ # Imports (Custom Stuff) @@ -28,6 +28,7 @@ from PyQt4.QtGui import QFrame, QGraphicsView, QImage, QPrinter, QPrintDialog, Q import patchcanvas from carla_widgets import * +from digitalpeakmeter import DigitalPeakMeter from pixmapkeyboard import PixmapKeyboardHArea # ------------------------------------------------------------------------------------------------------------ @@ -52,7 +53,7 @@ class CarlaPatchbayW(QFrame): def __init__(self, parent, doSetup = True, onlyPatchbay = True): QFrame.__init__(self, parent) - self.fLayout = QVBoxLayout(self) + self.fLayout = QGridLayout(self) self.fLayout.setContentsMargins(0, 0, 0, 0) self.fLayout.setSpacing(1) self.setLayout(self.fLayout) @@ -60,8 +61,24 @@ class CarlaPatchbayW(QFrame): self.fView = QGraphicsView(self) self.fKeys = PixmapKeyboardHArea(self) - self.fLayout.addWidget(self.fView) - self.fLayout.addWidget(self.fKeys) + self.fPeaksIn = DigitalPeakMeter(self) + self.fPeaksOut = DigitalPeakMeter(self) + self.fPeaksCleared = True + + self.fPeaksIn.setColor(DigitalPeakMeter.BLUE) + self.fPeaksIn.setChannels(2) + self.fPeaksIn.setOrientation(DigitalPeakMeter.VERTICAL) + self.fPeaksIn.setFixedWidth(25) + + self.fPeaksOut.setColor(DigitalPeakMeter.GREEN) + self.fPeaksOut.setChannels(2) + self.fPeaksOut.setOrientation(DigitalPeakMeter.VERTICAL) + self.fPeaksOut.setFixedWidth(25) + + self.fLayout.addWidget(self.fPeaksIn, 0, 0) + self.fLayout.addWidget(self.fView, 0, 1) + self.fLayout.addWidget(self.fPeaksOut, 0, 2) + self.fLayout.addWidget(self.fKeys, 1, 0, 1, 0) # ------------------------------------------------------------- # Internal stuff @@ -247,7 +264,23 @@ class CarlaPatchbayW(QFrame): # ----------------------------------------------------------------- def idleFast(self): - pass + for pluginId in self.fSelectedPlugins: + self.fPeaksCleared = False + if self.fPeaksIn.isVisible(): + self.fPeaksIn.displayMeter(1, Carla.host.get_input_peak_value(pluginId, True)) + self.fPeaksIn.displayMeter(2, Carla.host.get_input_peak_value(pluginId, False)) + if self.fPeaksOut.isVisible(): + self.fPeaksOut.displayMeter(1, Carla.host.get_output_peak_value(pluginId, True)) + self.fPeaksOut.displayMeter(2, Carla.host.get_output_peak_value(pluginId, False)) + return + if self.fPeaksCleared: + return + + self.fPeaksCleared = True + self.fPeaksIn.displayMeter(1, 0.0, True) + self.fPeaksIn.displayMeter(2, 0.0, True) + self.fPeaksOut.displayMeter(1, 0.0, True) + self.fPeaksOut.displayMeter(2, 0.0, True) def idleSlow(self): for i in range(self.fPluginCount): diff --git a/source/widgets/digitalpeakmeter.py b/source/widgets/digitalpeakmeter.py index dc74e86d7..612f15ee3 100644 --- a/source/widgets/digitalpeakmeter.py +++ b/source/widgets/digitalpeakmeter.py @@ -48,7 +48,7 @@ class DigitalPeakMeter(QWidget): self.setChannels(0) self.setColor(self.GREEN) - def displayMeter(self, meter, level): + def displayMeter(self, meter, level, forced = False): if meter <= 0 or meter > self.fChannels: return qCritical("DigitalPeakMeter::displayMeter(%i, %f) - invalid meter number" % (meter, level)) if not isinstance(level, float): @@ -56,7 +56,7 @@ class DigitalPeakMeter(QWidget): i = meter - 1 - if self.fSmoothMultiplier > 0: + if self.fSmoothMultiplier > 0 and not forced: level = (self.fLastValueData[i] * self.fSmoothMultiplier + level) / float(self.fSmoothMultiplier + 1) if level < 0.001: