Changeset 2006

Show
Ignore:
Timestamp:
11/21/11 04:26:26 (9 years ago)
Author:
jwoithe
Message:

* rme: implement a first cut at the input matrix mixer. This permits inputs to be mixed to outputs directly in the device for latency-free monitoring applications. The playback matrix mixer and output fader controls will follow soon now this initial proof-of-concept is done.
* matrixmixer: added new optional parameter to the this widget's constructor allowing the control maximums to be set. If not given the default is 65536/+12dB as before.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/src/rme/fireface_settings_ctrls.cpp

    r2004 r2006  
    208208{ 
    209209    char buf[64]; 
    210     snprintf(buf, sizeof(buf), "RmeSettingsMatrixCtrl type %d, row %d", m_type, row); 
     210    if (m_parent.getRmeModel() == RME_MODEL_FIREFACE400) { 
     211        if (row >= 10) 
     212            snprintf(buf, sizeof(buf), "ADAT %d", row-9); 
     213        else 
     214        if (row >= 8) 
     215            snprintf(buf, sizeof(buf), "SPDIF %d", row-7); 
     216        else 
     217            snprintf(buf, sizeof(buf), "Ana %d", row+1); 
     218    } else { 
     219        snprintf(buf, sizeof(buf), "row %d", row); 
     220    } 
    211221    return buf; 
    212222} 
     
    215225{ 
    216226    char buf[64]; 
    217     snprintf(buf, sizeof(buf), "RmeSettingsMatrixCtrl type %d, column %d", m_type, col); 
     227    if (m_parent.getRmeModel() == RME_MODEL_FIREFACE400) { 
     228        if (col >= 10) 
     229            snprintf(buf, sizeof(buf), "ADAT %d", col-9); 
     230        else 
     231        if (col >= 8) 
     232            snprintf(buf, sizeof(buf), "SPDIF %d", col-7); 
     233        else 
     234            snprintf(buf, sizeof(buf), "Ana %d", col+1); 
     235    } else { 
     236        snprintf(buf, sizeof(buf), "col %d", col); 
     237    } 
    218238    return buf; 
    219239} 
     
    261281} 
    262282 
    263 static signed int dB_to_mixerval(const double dB)  
    264 { 
    265   /* dB values less than -90 are taken as "mute" */ 
    266   if (dB < -90) 
    267     return 0; 
    268   return 32768 * exp10(dB/20.0); 
    269 } 
    270  
    271283double RmeSettingsMatrixCtrl::setValue(const int row, const int col, const double val)  
    272284{ 
     
    283295            break; 
    284296        case RME_MATRIXCTRL_INPUT_FADER: 
    285           return m_parent.setMixerGain(RME_FF_MM_INPUT, col, row,  
    286                      dB_to_mixerval(val)); 
     297          return m_parent.setMixerGain(RME_FF_MM_INPUT, col, row, val); 
    287298          break; 
    288299        case RME_MATRIXCTRL_PLAYBACK_FADER: 
    289           return m_parent.setMixerGain(RME_FF_MM_PLAYBACK, col, row,  
    290                      dB_to_mixerval(val)); 
     300          return m_parent.setMixerGain(RME_FF_MM_PLAYBACK, col, row, val); 
    291301          break; 
    292302        case RME_MATRIXCTRL_OUTPUT_FADER: 
    293           return m_parent.setMixerGain(RME_FF_MM_OUTPUT, col, row,  
    294                      dB_to_mixerval(val)); 
     303          return m_parent.setMixerGain(RME_FF_MM_OUTPUT, col, row, val); 
    295304          break; 
    296305    } 
    297306 
    298307    return ret; 
    299 } 
    300  
    301 static double mixerval_to_dB(const signed int val)  
    302 { 
    303   /* Map "mute" to -91 dB */ 
    304   if (val == 0)  
    305     return -91.0; 
    306   return 20 * log10(val/32768.0); 
    307308} 
    308309 
     
    315316            break; 
    316317        case RME_MATRIXCTRL_INPUT_FADER: 
    317             val = mixerval_to_dB(m_parent.getMixerGain(RME_FF_MM_INPUT, col, row)); 
     318            val = m_parent.getMixerGain(RME_FF_MM_INPUT, col, row); 
    318319            break; 
    319320        case RME_MATRIXCTRL_PLAYBACK_FADER: 
    320             val = mixerval_to_dB(m_parent.getMixerGain(RME_FF_MM_PLAYBACK, col, row)); 
     321            val = m_parent.getMixerGain(RME_FF_MM_PLAYBACK, col, row); 
    321322            break; 
    322323        case RME_MATRIXCTRL_OUTPUT_FADER: 
    323             val = mixerval_to_dB(m_parent.getMixerGain(RME_FF_MM_OUTPUT, col, row)); 
     324            val = m_parent.getMixerGain(RME_FF_MM_OUTPUT, col, row); 
    324325            break; 
    325326    } 
  • trunk/libffado/support/mixer-qt4/ffado/mixer/rme.py

    r2005 r2006  
    11# 
    2 # Copyright (C) 2009 by Jonathan Woithe 
     2# Copyright (C) 2009, 2011 by Jonathan Woithe 
    33# 
    44# This file is part of FFADO 
     
    124124    def initValues(self): 
    125125 
    126         # Initial experiments with the MatrixMixer widget 
    127126        # print self.hw.servername 
    128127        # print self.hw.basepath 
    129         # self.inputmatrix = MatrixMixer(self.hw.servername, self.hw.basepath+"/Mixer/InputFaders", self) 
    130         # self.mbox = QtGui.QVBoxLayout(self.mixer) 
    131         # self.mbox.addWidget(self.inputmatrix) 
     128        self.inputmatrix = MatrixMixer(self.hw.servername, self.hw.basepath+"/Mixer/InputFaders", self, 0x8000) 
     129        layout = QtGui.QVBoxLayout() 
     130        scrollarea = QtGui.QScrollArea() 
     131        scrollarea.setWidgetResizable(True) 
     132        scrollarea.setWidget(self.inputmatrix) 
     133        layout.addWidget(scrollarea) 
     134        self.mixer.setLayout(layout) 
    132135 
    133136        # Is the device streaming? 
  • trunk/libffado/support/mixer-qt4/ffado/mixer/rme.ui

    r1640 r2006  
    10911091     <widget class="QWidget" name="mixer" > 
    10921092      <attribute name="title" > 
    1093        <string>Mixer</string> 
     1093       <string>Input mixer</string> 
    10941094      </attribute> 
    10951095     </widget> 
  • trunk/libffado/support/mixer-qt4/ffado/widgets/matrixmixer.py

    r1934 r2006  
    5555 
    5656class MixerNode(QtGui.QAbstractSlider): 
    57     def __init__(self, input, output, value, parent): 
     57    def __init__(self, input, output, value, max, parent): 
    5858        QtGui.QAbstractSlider.__init__(self, parent) 
    59         #log.debug("MixerNode.__init__( %i, %i, %i, %s )" % (input, output, value, str(parent)) ) 
     59        #log.debug("MixerNode.__init__( %i, %i, %i, %i, %s )" % (input, output, value, max, str(parent)) ) 
    6060 
    6161        self.pos = QtCore.QPointF(0, 0) 
     
    6363        self.output = output 
    6464        self.setOrientation(Qt.Qt.Vertical) 
    65         self.setRange(0, pow(2, 16)-1) 
     65        if max == -1: 
     66            max = pow(2, 16)-1 
     67        self.setRange(0, max) 
    6668        self.setValue(value) 
    6769        self.connect(self, QtCore.SIGNAL("valueChanged(int)"), self.internalValueChanged) 
     
    199201 
    200202class MatrixMixer(QtGui.QWidget): 
    201     def __init__(self, servername, basepath, parent=None): 
     203    def __init__(self, servername, basepath, parent=None, sliderMaxValue=-1): 
    202204        QtGui.QWidget.__init__(self, parent) 
    203205        self.bus = dbus.SessionBus() 
     
    236238            self.items.append([]) 
    237239            for j in range(cols): 
    238                 node = MixerNode(j, i, self.interface.getValue(i,j), self) 
     240                node = MixerNode(j, i, self.interface.getValue(i,j), sliderMaxValue, self) 
    239241                self.connect(node, QtCore.SIGNAL("valueChanged"), self.valueChanged) 
    240242                layout.addWidget(node, i+1, j+1) 
     
    271273        self.interface.setValue(n[1], n[0], n[2]) 
    272274 
    273  
    274275# 
    275276# vim: et ts=4 sw=4 fileencoding=utf8