From 764ed82ccb5afad5c8454f2fe6f2e4732321c75d Mon Sep 17 00:00:00 2001 From: Tarmo Johannes Date: Sun, 26 Apr 2020 01:55:28 +0300 Subject: [PATCH 1/5] Implemented panning for channels. --- src/audiomixerboard.cpp | 66 ++++++++++++++++++++++++++++++++++++++++- src/audiomixerboard.h | 14 ++++++++- src/channel.cpp | 36 ++++++++++++++++++++++ src/channel.h | 9 ++++++ src/client.h | 3 ++ src/clientdlg.cpp | 3 ++ src/clientdlg.h | 3 ++ src/protocol.cpp | 48 ++++++++++++++++++++++++++++++ src/protocol.h | 6 +++- src/server.cpp | 39 ++++++++++++++++-------- src/server.h | 2 ++ 11 files changed, 213 insertions(+), 16 deletions(-) mode change 100755 => 100644 src/audiomixerboard.cpp mode change 100755 => 100644 src/audiomixerboard.h diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp old mode 100755 new mode 100644 index c1ca9713..af367bb1 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -40,6 +40,8 @@ CChannelFader::CChannelFader ( QWidget* pNW, plbrChannelLevel = new CMultiColorLEDBar ( pLevelsBox ); pFader = new QSlider ( Qt::Vertical, pLevelsBox ); + pPan = new QSlider (Qt::Horizontal, pLevelsBox); + pMuteSoloBox = new QWidget ( pFrame ); pcbMute = new QCheckBox ( "Mute", pMuteSoloBox ); pcbSolo = new QCheckBox ( "Solo", pMuteSoloBox ); @@ -64,6 +66,11 @@ CChannelFader::CChannelFader ( QWidget* pNW, pFader->setRange ( 0, AUD_MIX_FADER_MAX ); pFader->setTickInterval ( AUD_MIX_FADER_MAX / 9 ); + // setup panning slider + pPan->setRange( 0, AUD_MIX_FADER_MAX); + pPan->setValue(AUD_MIX_FADER_MAX/2); + + // setup fader tag label (black bold text which is centered) plblLabel->setTextFormat ( Qt::PlainText ); plblLabel->setAlignment ( Qt::AlignHCenter | Qt::AlignVCenter ); @@ -96,6 +103,8 @@ CChannelFader::CChannelFader ( QWidget* pNW, pMuteSoloGrid->addWidget ( pcbMute, 0, Qt::AlignLeft ); pMuteSoloGrid->addWidget ( pcbSolo, 0, Qt::AlignLeft ); + //TODO: Pan row: "L" slider "R" + pMainGrid->addWidget ( pPan, 0, Qt::AlignCenter ); pMainGrid->addWidget ( pLevelsBox, 0, Qt::AlignHCenter ); pMainGrid->addWidget ( pMuteSoloBox, 0, Qt::AlignHCenter ); pMainGrid->addWidget ( pLabelInstBox ); @@ -119,6 +128,10 @@ CChannelFader::CChannelFader ( QWidget* pNW, pFader->setAccessibleName ( tr ( "Local mix level setting of the current audio " "channel at the server" ) ); + pPan->setWhatsThis ( tr ( "Panning: Sets the panning position from Left to Right of the channel. " + " Works only in stero or preferably mono in/stereo out mode." ) ); + pPan->setAccessibleName ( tr ( "Local panning position of the current audio channel at the server" ) ); + pcbMute->setWhatsThis ( tr ( "Mute: With the Mute checkbox, the " "audio channel can be muted." ) ); pcbMute->setAccessibleName ( tr ( "Mute button" ) ); @@ -145,6 +158,9 @@ CChannelFader::CChannelFader ( QWidget* pNW, QObject::connect ( pFader, SIGNAL ( valueChanged ( int ) ), this, SLOT ( OnLevelValueChanged ( int ) ) ); + QObject::connect ( pPan, SIGNAL ( valueChanged ( int ) ), + this, SLOT ( OnPanValueChanged ( int ) ) ); + QObject::connect ( pcbMute, SIGNAL ( stateChanged ( int ) ), this, SLOT ( OnMuteStateChanged ( int ) ) ); @@ -243,8 +259,9 @@ void CChannelFader::SetupFaderTag ( const ESkillLevel eSkillLevel ) void CChannelFader::Reset() { - // init gain value -> maximum value as definition according to server + // init gain and pan value -> maximum value as definition according to server pFader->setValue ( AUD_MIX_FADER_MAX ); + pPan->setValue ( AUD_MIX_FADER_MAX/2 ); // reset mute/solo check boxes and level meter pcbMute->setChecked ( false ); @@ -281,6 +298,18 @@ void CChannelFader::SetFaderLevel ( const int iLevel ) // server about the change pFader->setValue ( iLevel ); SendFaderLevelToServer ( iLevel ); + } +} + +void CChannelFader::SetPanValue(const int iPan) +{ + // first make a range check + if ( ( iPan >= 0 ) && ( iPan <= AUD_MIX_FADER_MAX ) ) + { + // we set the new fader level in the GUI (slider control) and also tell the + // server about the change + pPan->setValue ( iPan ); + SendPanValueToServer( iPan ); } } @@ -309,6 +338,20 @@ void CChannelFader::SendFaderLevelToServer ( const int iLevel ) } } +void CChannelFader::SendPanValueToServer ( const int iPan ) +{ + + // if mute flag is set or other channel is on solo, do not apply the pan + if ( ( pcbMute->checkState() == Qt::Unchecked ) && + ( !bOtherChannelIsSolo || IsSolo() ) ) + { + // emit signal for new pan value + double dPan = static_cast ( iPan ) / AUD_MIX_FADER_MAX; + emit panValueChanged ( dPan ); + } + +} + void CChannelFader::OnMuteStateChanged ( int value ) { // call muting function @@ -562,6 +605,13 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) : // Connections ------------------------------------------------------------- + + for (int i=0; i< static_cast( vecpChanFader.size() ); i++) { + QObject::connect ( vecpChanFader[i], SIGNAL ( panValueChanged ( double ) ), + this, SLOT ( OnPanValueChanged ( double ) ) ); + } + + #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) connectFaderSignalsToMixerBoardSlots(); @@ -908,6 +958,20 @@ void CAudioMixerBoard::UpdateGainValue ( const int iChannelIdx, emit ChangeChanGain ( iChannelIdx, dValue ); } +void CAudioMixerBoard::OnPanValueChanged ( const double dValue ) +{ + + // get channel index from sender according t, this SHOULD coincide with the chanID. + CChannelFader * channelFader = qobject_cast(sender()); + if (!channelFader) { + return; + } + // a clumsy way to find the index. Why not to use QList or QVector and indexOf? + CVector::iterator it = std::find(vecpChanFader.begin(), vecpChanFader.end(), channelFader); + int iChannelIdx = static_cast( std::distance(vecpChanFader.begin(), it) ); //static_cast(it); + emit ChangeChanPan ( iChannelIdx, dValue ); +} + void CAudioMixerBoard::StoreFaderSettings ( CChannelFader* pChanFader ) { // if the fader was visible and the name is not empty, we store the old gain diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h old mode 100755 new mode 100644 index f5d04393..b73fbbaa --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -61,9 +61,11 @@ public: void UpdateSoloState ( const bool bNewOtherSoloState ); void SetFaderLevel ( const int iLevel ); + void SetPanValue ( const int iPan ); void SetFaderIsSolo ( const bool bIsSolo ); void SetFaderIsMute ( const bool bIsMute ); int GetFaderLevel() { return pFader->value(); } + int GetPanValue() {return pPan->value(); } void Reset(); void SetChannelLevel ( const uint16_t iLevel ); @@ -71,6 +73,7 @@ protected: double CalcFaderGain ( const int value ); void SetMute ( const bool bState ); void SendFaderLevelToServer ( const int iLevel ); + void SendPanValueToServer ( const int iPan ); void SetupFaderTag ( const ESkillLevel eSkillLevel ); QFrame* pFrame; @@ -79,6 +82,7 @@ protected: QWidget* pMuteSoloBox; CMultiColorLEDBar* plbrChannelLevel; QSlider* pFader; + QSlider* pPan; QCheckBox* pcbMute; QCheckBox* pcbSolo; @@ -94,10 +98,12 @@ protected: public slots: void OnLevelValueChanged ( int value ) { SendFaderLevelToServer ( value ); } + void OnPanValueChanged ( int value ) {SendPanValueToServer ( value ); } void OnMuteStateChanged ( int value ); signals: void gainValueChanged ( double value ); + void panValueChanged (double value ); void soloStateChanged ( int value ); }; @@ -160,6 +166,9 @@ protected: void StoreFaderSettings ( CChannelFader* pChanFader ); void UpdateSoloStates(); + void OnGainValueChanged ( const int iChannelIdx, + const double dValue ); + CVector vecpChanFader; QGroupBox* pGroupBox; QHBoxLayout* pMainLayout; @@ -180,8 +189,10 @@ protected: #endif -#if QT_VERSION < 0x50000 // MOC does not expand macros in Qt 4, so we cannot use QT_VERSION_CHECK(5, 0, 0) public slots: + void OnPanValueChanged ( const double dValue ); + +#if QT_VERSION < 0x50000 // MOC does not expand macros in Qt 4, so we cannot use QT_VERSION_CHECK(5, 0, 0) // CODE TAG: MAX_NUM_CHANNELS_TAG // make sure we have MAX_NUM_CHANNELS connections!!! void OnGainValueChangedCh0 ( double dValue ) { UpdateGainValue ( 0, dValue ); } @@ -241,5 +252,6 @@ public slots: signals: void ChangeChanGain ( int iId, double dGain ); + void ChangeChanPan ( int iId, double dPan ); void NumClientsChanged ( int iNewNumClients ); }; diff --git a/src/channel.cpp b/src/channel.cpp index de629a82..19142925 100755 --- a/src/channel.cpp +++ b/src/channel.cpp @@ -28,6 +28,7 @@ // CChannel implementation ***************************************************** CChannel::CChannel ( const bool bNIsServer ) : vecdGains ( MAX_NUM_CHANNELS, 1.0 ), + vecdPannings ( MAX_NUM_CHANNELS, 0.5), bDoAutoSockBufSize ( true ), iFadeInCnt ( 0 ), iFadeInCntMax ( FADE_IN_NUM_FRAMES_DBLE_FRAMESIZE ), @@ -86,6 +87,9 @@ qRegisterMetaType ( "CHostAddress" ); QObject::connect( &Protocol, SIGNAL ( ChangeChanGain ( int, double ) ), this, SLOT ( OnChangeChanGain ( int, double ) ) ); + QObject::connect( &Protocol, SIGNAL ( ChangeChanPan ( int, double ) ), + this, SLOT ( OnChangeChanPan ( int, double ) ) ); + QObject::connect( &Protocol, SIGNAL ( ChangeChanInfo ( CChannelCoreInfo ) ), this, SLOT ( OnChangeChanInfo ( CChannelCoreInfo ) ) ); @@ -269,6 +273,32 @@ double CChannel::GetGain ( const int iChanID ) } } +void CChannel::SetPan(const int iChanID, const double dNewPan) +{ + QMutexLocker locker ( &Mutex ); + + // set value (make sure channel ID is in range) + if ( ( iChanID >= 0 ) && ( iChanID < MAX_NUM_CHANNELS ) ) + { + vecdPannings[iChanID] = dNewPan; + } +} + +double CChannel::GetPan(const int iChanID) +{ + QMutexLocker locker ( &Mutex ); + + // get value (make sure channel ID is in range) + if ( ( iChanID >= 0 ) && ( iChanID < MAX_NUM_CHANNELS ) ) + { + return vecdPannings[iChanID]; + } + else + { + return 0; + } +} + void CChannel::SetChanInfo ( const CChannelCoreInfo& NChanInf ) { // apply value (if different from previous one) @@ -335,6 +365,12 @@ void CChannel::OnChangeChanGain ( int iChanID, SetGain ( iChanID, dNewGain ); } +void CChannel::OnChangeChanPan ( int iChanID, + double dNewPan ) +{ + SetPan( iChanID, dNewPan ); +} + void CChannel::OnChangeChanInfo ( CChannelCoreInfo ChanInfo ) { SetChanInfo ( ChanInfo ); diff --git a/src/channel.h b/src/channel.h index 3369b535..9c34ef01 100755 --- a/src/channel.h +++ b/src/channel.h @@ -110,9 +110,15 @@ public: double GetGain ( const int iChanID ); double GetFadeInGain() { return static_cast ( iFadeInCnt ) / iFadeInCntMax; } + void SetPan ( const int iChanID, const double dNewPan ); + double GetPan ( const int iChanID ); + void SetRemoteChanGain ( const int iId, const double dGain ) { Protocol.CreateChanGainMes ( iId, dGain ); } + void SetRemoteChanPan ( const int iId, const double dPan ) + { Protocol.CreateChanPanMes ( iId, dPan ); } + bool SetSockBufNumFrames ( const int iNewNumFrames, const bool bPreserve = false ); int GetSockBufNumFrames() const { return iCurSockBufNumFrames; } @@ -191,6 +197,8 @@ protected: // mixer and effect settings CVector vecdGains; + CVector vecdPannings; + // network jitter-buffer CNetBufWithStats SockBuf; int iCurSockBufNumFrames; @@ -228,6 +236,7 @@ public slots: void OnSendProtMessage ( CVector vecMessage ); void OnJittBufSizeChange ( int iNewJitBufSize ); void OnChangeChanGain ( int iChanID, double dNewGain ); + void OnChangeChanPan ( int iChanID, double dNewPan ); void OnChangeChanInfo ( CChannelCoreInfo ChanInfo ); void OnNetTranspPropsReceived ( CNetworkTransportProps NetworkTransportProps ); void OnReqNetTranspProps(); diff --git a/src/client.h b/src/client.h index 15837f00..3dbbd0b6 100755 --- a/src/client.h +++ b/src/client.h @@ -244,6 +244,9 @@ public: void SetRemoteChanGain ( const int iId, const double dGain ) { Channel.SetRemoteChanGain ( iId, dGain ); } + void SetRemoteChanPan ( const int iId, const double dPan ) + { Channel.SetRemoteChanPan ( iId, dPan ); } + void SetRemoteInfo() { Channel.SetRemoteInfo ( ChannelInfo ); } void CreateChatTextMes ( const QString& strChatText ) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index fb138d3e..1a5dc9f1 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -520,6 +520,9 @@ CClientDlg::CClientDlg ( CClient* pNCliP, QObject::connect ( MainMixerBoard, SIGNAL ( ChangeChanGain ( int, double ) ), this, SLOT ( OnChangeChanGain ( int, double ) ) ); + QObject::connect ( MainMixerBoard, SIGNAL ( ChangeChanPan ( int, double ) ), + this, SLOT ( OnChangeChanPan ( int, double ) ) ); + QObject::connect ( MainMixerBoard, SIGNAL ( NumClientsChanged ( int ) ), this, SLOT ( OnNumClientsChanged ( int ) ) ); diff --git a/src/clientdlg.h b/src/clientdlg.h index 5d265574..8c870878 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -170,6 +170,9 @@ public slots: void OnChangeChanGain ( int iId, double dGain ) { pClient->SetRemoteChanGain ( iId, dGain ); } + void OnChangeChanPan ( int iId, double dPan ) + { pClient->SetRemoteChanPan ( iId, dPan ); } + void OnNewLocalInputText ( QString strChatText ) { pClient->CreateChatTextMes ( strChatText ); } diff --git a/src/protocol.cpp b/src/protocol.cpp index ed54bf2c..6c915b6e 100755 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -572,6 +572,10 @@ if ( rand() < ( RAND_MAX / 2 ) ) return false; bRet = EvaluateChanGainMes ( vecbyMesBodyData ); break; + case PROTMESSID_CHANNEL_PAN: + bRet = EvaluateChanPanMes ( vecbyMesBodyData ); + break; + case PROTMESSID_CONN_CLIENTS_LIST: bRet = EvaluateConClientListMes ( vecbyMesBodyData ); break; @@ -783,6 +787,23 @@ void CProtocol::CreateChanGainMes ( const int iChanID, const double dGain ) CreateAndSendMessage ( PROTMESSID_CHANNEL_GAIN, vecData ); } +void CProtocol::CreateChanPanMes(const int iChanID, const double dPan) +{ + CVector vecData ( 3 ); // 3 bytes of data + int iPos = 0; // init position pointer + + // build data vector + // channel ID + PutValOnStream ( vecData, iPos, static_cast ( iChanID ), 1 ); + + // actual gain, we convert from double with range 0..1 to integer + const int iCurPan = static_cast ( dPan * ( 1 << 15 ) ); + + PutValOnStream ( vecData, iPos, static_cast ( iCurPan ), 2 ); + + CreateAndSendMessage ( PROTMESSID_CHANNEL_PAN, vecData ); +} + bool CProtocol::EvaluateChanGainMes ( const CVector& vecData ) { int iPos = 0; // init position pointer @@ -810,6 +831,33 @@ bool CProtocol::EvaluateChanGainMes ( const CVector& vecData ) return false; // no error } +bool CProtocol::EvaluateChanPanMes(const CVector &vecData) +{ + int iPos = 0; // init position pointer + + // check size + if ( vecData.Size() != 3 ) + { + return true; // return error code + } + + // channel ID + const int iCurID = + static_cast ( GetValFromStream ( vecData, iPos, 1 ) ); + + // pan (read integer value) + const int iData = + static_cast ( GetValFromStream ( vecData, iPos, 2 ) ); + + // we convert the gain from integer to double with range 0..1 + const double dNewPan = static_cast ( iData ) / ( 1 << 15 ); + + // invoke message action + emit ChangeChanPan ( iCurID, dNewPan ); + + return false; // no error +} + void CProtocol::CreateConClientListMes ( const CVector& vecChanInfo ) { const int iNumClients = vecChanInfo.Size(); diff --git a/src/protocol.h b/src/protocol.h index 027c4284..542cf700 100755 --- a/src/protocol.h +++ b/src/protocol.h @@ -55,6 +55,7 @@ #define PROTMESSID_OPUS_SUPPORTED 26 // tells that OPUS codec is supported #define PROTMESSID_LICENCE_REQUIRED 27 // licence required #define PROTMESSID_REQ_CHANNEL_LEVEL_LIST 28 // request the channel level list +#define PROTMESSID_CHANNEL_PAN 29 // set channel gain for mix // message IDs of connection less messages (CLM) // DEFINITION -> start at 1000, end at 1999, see IsConnectionLessMessageID @@ -96,7 +97,8 @@ public: void CreateJitBufMes ( const int iJitBufSize ); void CreateReqJitBufMes(); void CreateChanGainMes ( const int iChanID, const double dGain ); - void CreateConClientListMes ( const CVector& vecChanInfo ); + void CreateChanPanMes ( const int iChanID, const double dPan ); + void CreateConClientListMes ( const CVector& vecChanInfo ); void CreateReqConnClientsList(); void CreateChanInfoMes ( const CChannelCoreInfo ChanInfo ); void CreateReqChanInfoMes(); @@ -218,6 +220,7 @@ protected: bool EvaluateJitBufMes ( const CVector& vecData ); bool EvaluateReqJitBufMes(); bool EvaluateChanGainMes ( const CVector& vecData ); + bool EvaluateChanPanMes ( const CVector& vecData ); bool EvaluateConClientListMes ( const CVector& vecData ); bool EvaluateReqConnClientsList(); bool EvaluateChanInfoMes ( const CVector& vecData ); @@ -276,6 +279,7 @@ signals: void ReqJittBufSize(); void ChangeNetwBlSiFact ( int iNewNetwBlSiFact ); void ChangeChanGain ( int iChanID, double dNewGain ); + void ChangeChanPan ( int iChanID, double dNewPan ); void ConClientListMesReceived ( CVector vecChanInfo ); void ServerFullMesReceived(); void ReqConnClientsList(); diff --git a/src/server.cpp b/src/server.cpp index d3658c0c..69288057 100755 --- a/src/server.cpp +++ b/src/server.cpp @@ -339,6 +339,7 @@ CServer::CServer ( const int iNewMaxNumChan, // allocate worst case memory for the temporary vectors vecChanIDsCurConChan.Init ( iMaxNumChannels ); vecvecdGains.Init ( iMaxNumChannels ); + vecvecdPannings.Init ( iMaxNumChannels ); vecvecsData.Init ( iMaxNumChannels ); vecNumAudioChannels.Init ( iMaxNumChannels ); vecNumFrameSizeConvBlocks.Init ( iMaxNumChannels ); @@ -349,6 +350,7 @@ CServer::CServer ( const int iNewMaxNumChan, { // init vectors storing information of all channels vecvecdGains[i].Init ( iMaxNumChannels ); + vecvecdPannings[i].Init ( iMaxNumChannels ); // we always use stereo audio buffers (see "vecsSendData") vecvecsData[i].Init ( 2 /* stereo */ * DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES /* worst case buffer size */ ); @@ -1047,9 +1049,11 @@ JitterMeas.Measure(); // "vecChanIDsCurConChan" to query the IDs of the currently // connected channels vecvecdGains[i][j] = vecChannels[iCurChanID].GetGain ( vecChanIDsCurConChan[j] ); - // consider audio fade-in vecvecdGains[i][j] *= vecChannels[vecChanIDsCurConChan[j]].GetFadeInGain(); + + //panning + vecvecdPannings[i][j] = vecChannels[iCurChanID].GetPan( vecChanIDsCurConChan[j] ); //((double)rand() / (double)(RAND_MAX)); //vecChannels[iCurChanID].GetGain ( vecChanIDsCurConChan[j] ); //TODO: GetPanning } // If the server frame size is smaller than the received OPUS frame size, we need a conversion @@ -1177,6 +1181,7 @@ JitterMeas.Measure(); // actual processing of audio data -> mix ProcessData ( vecvecsData, vecvecdGains[i], + vecvecdPannings[i], vecNumAudioChannels, vecsSendData, iCurNumAudChan, @@ -1275,12 +1280,13 @@ opus_custom_encoder_ctl ( CurOpusEncoder, } /// @brief Mix all audio data from all clients together. -void CServer::ProcessData ( const CVector >& vecvecsData, - const CVector& vecdGains, - const CVector& vecNumAudioChannels, - CVector& vecsOutData, - const int iCurNumAudChan, - const int iNumClients ) +void CServer::ProcessData (const CVector >& vecvecsData, + const CVector& vecdGains, + const CVector& vecdPannings, + const CVector& vecNumAudioChannels, + CVector& vecsOutData, + const int iCurNumAudChan, + const int iNumClients ) { int i, j, k; @@ -1352,6 +1358,10 @@ void CServer::ProcessData ( const CVector >& vecvecsData, // get a reference to the audio data and gain of the current client const CVector& vecsData = vecvecsData[j]; const double dGain = vecdGains[j]; + const double dPan = vecdPannings[j]; + const double dPanCoefL = sqrt(1-dPan); // faster: (1-dPan) + const double dPanCoefR = sqrt(dPan); // (dPan) + // see http://write.flossmanuals.net/csound/b-panning-and-spatialization/ for better formula, if needed // if channel gain is 1, avoid multiplication for speed optimization if ( dGain == static_cast ( 1.0 ) ) @@ -1363,11 +1373,11 @@ void CServer::ProcessData ( const CVector >& vecvecsData, { // left channel vecsOutData[k] = Double2Short ( - static_cast ( vecsOutData[k] ) + vecsData[i] ); + static_cast ( vecsOutData[k] ) + vecsData[i] * dPanCoefL); // right channel vecsOutData[k + 1] = Double2Short ( - static_cast ( vecsOutData[k + 1] ) + vecsData[i] ); + static_cast ( vecsOutData[k + 1] ) + vecsData[i] * dPanCoefR); } } else @@ -1375,8 +1385,9 @@ void CServer::ProcessData ( const CVector >& vecvecsData, // stereo for ( i = 0; i < ( 2 * iServerFrameSizeSamples ); i++ ) { + double pan = (i%2==0) ? dPanCoefL : dPanCoefR; vecsOutData[i] = Double2Short ( - static_cast ( vecsOutData[i] ) + vecsData[i] ); + static_cast ( vecsOutData[i] ) + vecsData[i] * pan ); } } } @@ -1389,11 +1400,11 @@ void CServer::ProcessData ( const CVector >& vecvecsData, { // left channel vecsOutData[k] = Double2Short ( - vecsOutData[k] + vecsData[i] * dGain ); + vecsOutData[k] + vecsData[i] * dGain * dPanCoefL); // right channel vecsOutData[k + 1] = Double2Short ( - vecsOutData[k + 1] + vecsData[i] * dGain ); + vecsOutData[k + 1] + vecsData[i] * dGain * dPanCoefR); } } else @@ -1401,8 +1412,10 @@ void CServer::ProcessData ( const CVector >& vecvecsData, // stereo for ( i = 0; i < ( 2 * iServerFrameSizeSamples ); i++ ) { + double pan = (i%2==0) ? dPanCoefL : dPanCoefR; vecsOutData[i] = Double2Short ( - vecsOutData[i] + vecsData[i] * dGain ); + vecsOutData[i] + vecsData[i] * dGain * pan ); + } } } diff --git a/src/server.h b/src/server.h index d56a42c8..6060dd07 100755 --- a/src/server.h +++ b/src/server.h @@ -287,6 +287,7 @@ protected: void ProcessData ( const CVector >& vecvecsData, const CVector& vecdGains, + const CVector& vecdPannings, const CVector& vecNumAudioChannels, CVector& vecsOutData, const int iCurNumAudChan, @@ -328,6 +329,7 @@ protected: CVector vecChanIDsCurConChan; CVector > vecvecdGains; + CVector > vecvecdPannings; CVector > vecvecsData; CVector vecNumAudioChannels; CVector vecNumFrameSizeConvBlocks; From d68ccf40b7fae68d88b902f8ba3f80694f8227d2 Mon Sep 17 00:00:00 2001 From: Tarmo Johannes Date: Wed, 13 May 2020 00:11:06 +0300 Subject: [PATCH 2/5] small corrections --- Jamulus.pro | 4 +++- src/audiomixerboard.cpp | 24 ++++++++---------------- src/global.h | 5 +++++ 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Jamulus.pro b/Jamulus.pro index 80e04633..c1f04052 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -8,7 +8,9 @@ contains(CONFIG, "noupcasename") { CONFIG += qt \ thread \ - release + debug + +CONFIG(debug, debug|release) { CONFIG += qt warn_on rtti exceptions } QT += widgets \ network \ diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index af367bb1..79433433 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -40,7 +40,7 @@ CChannelFader::CChannelFader ( QWidget* pNW, plbrChannelLevel = new CMultiColorLEDBar ( pLevelsBox ); pFader = new QSlider ( Qt::Vertical, pLevelsBox ); - pPan = new QSlider (Qt::Horizontal, pLevelsBox); + pPan = new QSlider (Qt::Horizontal, pLevelsBox); pMuteSoloBox = new QWidget ( pFrame ); pcbMute = new QCheckBox ( "Mute", pMuteSoloBox ); @@ -67,8 +67,8 @@ CChannelFader::CChannelFader ( QWidget* pNW, pFader->setTickInterval ( AUD_MIX_FADER_MAX / 9 ); // setup panning slider - pPan->setRange( 0, AUD_MIX_FADER_MAX); - pPan->setValue(AUD_MIX_FADER_MAX/2); + pPan->setRange( 0, AUD_MIX_PAN_MAX); + pPan->setValue(AUD_MIX_PAN_MAX/2); // setup fader tag label (black bold text which is centered) @@ -261,7 +261,7 @@ void CChannelFader::Reset() { // init gain and pan value -> maximum value as definition according to server pFader->setValue ( AUD_MIX_FADER_MAX ); - pPan->setValue ( AUD_MIX_FADER_MAX/2 ); + pPan->setValue ( AUD_MIX_PAN_MAX/2 ); // reset mute/solo check boxes and level meter pcbMute->setChecked ( false ); @@ -304,7 +304,7 @@ void CChannelFader::SetFaderLevel ( const int iLevel ) void CChannelFader::SetPanValue(const int iPan) { // first make a range check - if ( ( iPan >= 0 ) && ( iPan <= AUD_MIX_FADER_MAX ) ) + if ( ( iPan >= 0 ) && ( iPan <= AUD_MIX_PAN_MAX ) ) { // we set the new fader level in the GUI (slider control) and also tell the // server about the change @@ -339,17 +339,9 @@ void CChannelFader::SendFaderLevelToServer ( const int iLevel ) } void CChannelFader::SendPanValueToServer ( const int iPan ) -{ - - // if mute flag is set or other channel is on solo, do not apply the pan - if ( ( pcbMute->checkState() == Qt::Unchecked ) && - ( !bOtherChannelIsSolo || IsSolo() ) ) - { - // emit signal for new pan value - double dPan = static_cast ( iPan ) / AUD_MIX_FADER_MAX; - emit panValueChanged ( dPan ); - } - +{ + double dPan = static_cast ( iPan ) / AUD_MIX_PAN_MAX; + emit panValueChanged ( dPan ); } void CChannelFader::OnMuteStateChanged ( int value ) diff --git a/src/global.h b/src/global.h index 382f5599..97823ef6 100755 --- a/src/global.h +++ b/src/global.h @@ -149,6 +149,11 @@ LED bar: lbr // audio mixer fader maximum value #define AUD_MIX_FADER_MAX 100 + +// audio mixer panning maximum value +#define AUD_MIX_PAN_MAX 100 + + // maximum number of recognized sound cards installed in the system, // definition for "no device" #define MAX_NUMBER_SOUND_CARDS 129 // e.g. 16 inputs, 8 outputs + default entry (MacOS) From fa85d3d5a7a34fcc443e44f29b182f533fbf5524 Mon Sep 17 00:00:00 2001 From: Tarmo Johannes Date: Sat, 16 May 2020 19:18:58 +0300 Subject: [PATCH 3/5] Description to protocal; made pan connections similar to gain. --- src/audiomixerboard.cpp | 72 ++++++++++++++++++++++++++++++++++++++--- src/audiomixerboard.h | 60 ++++++++++++++++++++++++++++++++++ src/protocol.cpp | 7 ++++ 3 files changed, 135 insertions(+), 4 deletions(-) diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 06b2afc9..1fd09046 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -598,10 +598,10 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) : // Connections ------------------------------------------------------------- - for (int i=0; i< static_cast( vecpChanFader.size() ); i++) { - QObject::connect ( vecpChanFader[i], SIGNAL ( panValueChanged ( double ) ), - this, SLOT ( OnPanValueChanged ( double ) ) ); - } +// for (int i=0; i< static_cast( vecpChanFader.size() ); i++) { +// QObject::connect ( vecpChanFader[i], SIGNAL ( panValueChanged ( double ) ), +// this, SLOT ( OnPanValueChanged ( double ) ) ); +// } #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) @@ -661,6 +661,58 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) : QObject::connect ( vecpChanFader[48], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh48 ( double ) ) ); QObject::connect ( vecpChanFader[49], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh49 ( double ) ) ); +//Pans: ---- + QObject::connect ( vecpChanFader[0], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh0 ( double ) ) ); + QObject::connect ( vecpChanFader[1], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh1 ( double ) ) ); + QObject::connect ( vecpChanFader[2], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh2 ( double ) ) ); + QObject::connect ( vecpChanFader[3], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh3 ( double ) ) ); + QObject::connect ( vecpChanFader[4], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh4 ( double ) ) ); + QObject::connect ( vecpChanFader[5], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh5 ( double ) ) ); + QObject::connect ( vecpChanFader[6], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh6 ( double ) ) ); + QObject::connect ( vecpChanFader[7], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh7 ( double ) ) ); + QObject::connect ( vecpChanFader[8], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh8 ( double ) ) ); + QObject::connect ( vecpChanFader[9], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh9 ( double ) ) ); + QObject::connect ( vecpChanFader[10], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh10 ( double ) ) ); + QObject::connect ( vecpChanFader[11], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh11 ( double ) ) ); + QObject::connect ( vecpChanFader[12], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh12 ( double ) ) ); + QObject::connect ( vecpChanFader[13], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh13 ( double ) ) ); + QObject::connect ( vecpChanFader[14], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh14 ( double ) ) ); + QObject::connect ( vecpChanFader[15], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh15 ( double ) ) ); + QObject::connect ( vecpChanFader[16], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh16 ( double ) ) ); + QObject::connect ( vecpChanFader[17], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh17 ( double ) ) ); + QObject::connect ( vecpChanFader[18], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh18 ( double ) ) ); + QObject::connect ( vecpChanFader[19], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh19 ( double ) ) ); + QObject::connect ( vecpChanFader[20], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh20 ( double ) ) ); + QObject::connect ( vecpChanFader[21], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh21 ( double ) ) ); + QObject::connect ( vecpChanFader[22], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh22 ( double ) ) ); + QObject::connect ( vecpChanFader[23], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh23 ( double ) ) ); + QObject::connect ( vecpChanFader[24], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh24 ( double ) ) ); + QObject::connect ( vecpChanFader[25], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh25 ( double ) ) ); + QObject::connect ( vecpChanFader[26], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh26 ( double ) ) ); + QObject::connect ( vecpChanFader[27], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh27 ( double ) ) ); + QObject::connect ( vecpChanFader[28], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh28 ( double ) ) ); + QObject::connect ( vecpChanFader[29], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh29 ( double ) ) ); + QObject::connect ( vecpChanFader[30], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh30 ( double ) ) ); + QObject::connect ( vecpChanFader[31], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh31 ( double ) ) ); + QObject::connect ( vecpChanFader[32], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh32 ( double ) ) ); + QObject::connect ( vecpChanFader[33], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh33 ( double ) ) ); + QObject::connect ( vecpChanFader[34], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh34 ( double ) ) ); + QObject::connect ( vecpChanFader[35], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh35 ( double ) ) ); + QObject::connect ( vecpChanFader[36], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh36 ( double ) ) ); + QObject::connect ( vecpChanFader[37], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh37 ( double ) ) ); + QObject::connect ( vecpChanFader[38], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh38 ( double ) ) ); + QObject::connect ( vecpChanFader[39], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh39 ( double ) ) ); + QObject::connect ( vecpChanFader[40], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh40 ( double ) ) ); + QObject::connect ( vecpChanFader[41], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh41 ( double ) ) ); + QObject::connect ( vecpChanFader[42], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh42 ( double ) ) ); + QObject::connect ( vecpChanFader[43], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh43 ( double ) ) ); + QObject::connect ( vecpChanFader[44], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh44 ( double ) ) ); + QObject::connect ( vecpChanFader[45], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh45 ( double ) ) ); + QObject::connect ( vecpChanFader[46], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh46 ( double ) ) ); + QObject::connect ( vecpChanFader[47], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh47 ( double ) ) ); + QObject::connect ( vecpChanFader[48], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh48 ( double ) ) ); + QObject::connect ( vecpChanFader[49], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh49 ( double ) ) ); + QObject::connect ( vecpChanFader[0], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); QObject::connect ( vecpChanFader[1], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); QObject::connect ( vecpChanFader[2], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); @@ -724,12 +776,18 @@ inline void CAudioMixerBoard::connectFaderSignalsToMixerBoardSlots() void ( CAudioMixerBoard::* pGainValueChanged )( double ) = &CAudioMixerBoardSlots::OnChGainValueChanged; + void ( CAudioMixerBoard::* pPanValueChanged )( double ) = + &CAudioMixerBoardSlots::OnChPanValueChanged; + QObject::connect ( vecpChanFader[iCurChanID], &CChannelFader::soloStateChanged, this, &CAudioMixerBoard::UpdateSoloStates ); QObject::connect ( vecpChanFader[iCurChanID], &CChannelFader::gainValueChanged, this, pGainValueChanged ); + QObject::connect ( vecpChanFader[iCurChanID], &CChannelFader::panValueChanged, + this, pPanValueChanged ); + connectFaderSignalsToMixerBoardSlots(); }; @@ -944,6 +1002,12 @@ void CAudioMixerBoard::UpdateGainValue ( const int iChannelIdx, emit ChangeChanGain ( iChannelIdx, dValue ); } +void CAudioMixerBoard::UpdatePanValue ( const int iChannelIdx, + const double dValue ) +{ + emit ChangeChanPan ( iChannelIdx, dValue ); +} + void CAudioMixerBoard::OnPanValueChanged ( const double dValue ) { diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index 9cbefc1c..79268819 100644 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -115,10 +115,13 @@ class CAudioMixerBoardSlots : public CAudioMixerBoardSlots public: void OnChGainValueChanged ( double dValue ) { UpdateGainValue ( slotId - 1, dValue ); } + void OnChPanValueChanged ( double dValue ) { UpdatePanValue ( slotId - 1, dValue ); } protected: virtual void UpdateGainValue ( const int iChannelIdx, const double dValue ) = 0; + virtual void UpdatePanValue ( const int iChannelIdx, + const double dValue ) = 0; }; template<> @@ -179,6 +182,8 @@ protected: #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) virtual void UpdateGainValue ( const int iChannelIdx, const double dValue ); + virtual void UpdatePanValue ( const int iChannelIdx, + const double dValue ); template inline void connectFaderSignalsToMixerBoardSlots(); @@ -187,6 +192,10 @@ protected: void UpdateGainValue ( const int iChannelIdx, const double dValue ); + void UpdatePanValue ( const int iChannelIdx, + const double dValue ); + + #endif public slots: @@ -246,6 +255,57 @@ public slots: void OnGainValueChangedCh48 ( double dValue ) { UpdateGainValue ( 48, dValue ); } void OnGainValueChangedCh49 ( double dValue ) { UpdateGainValue ( 49, dValue ); } + void OnpanValueChangedCh0 ( double dValue ) { UpdatePanValue ( 0, dValue ); } + void OnpanValueChangedCh1 ( double dValue ) { UpdatePanValue ( 1, dValue ); } + void OnpanValueChangedCh2 ( double dValue ) { UpdatePanValue ( 2, dValue ); } + void OnpanValueChangedCh3 ( double dValue ) { UpdatePanValue ( 3, dValue ); } + void OnpanValueChangedCh4 ( double dValue ) { UpdatePanValue ( 4, dValue ); } + void OnpanValueChangedCh5 ( double dValue ) { UpdatePanValue ( 5, dValue ); } + void OnpanValueChangedCh6 ( double dValue ) { UpdatePanValue ( 6, dValue ); } + void OnpanValueChangedCh7 ( double dValue ) { UpdatePanValue ( 7, dValue ); } + void OnpanValueChangedCh8 ( double dValue ) { UpdatePanValue ( 8, dValue ); } + void OnpanValueChangedCh9 ( double dValue ) { UpdatePanValue ( 9, dValue ); } + void OnpanValueChangedCh10 ( double dValue ) { UpdatePanValue ( 10, dValue ); } + void OnpanValueChangedCh11 ( double dValue ) { UpdatePanValue ( 11, dValue ); } + void OnpanValueChangedCh12 ( double dValue ) { UpdatePanValue ( 12, dValue ); } + void OnpanValueChangedCh13 ( double dValue ) { UpdatePanValue ( 13, dValue ); } + void OnpanValueChangedCh14 ( double dValue ) { UpdatePanValue ( 14, dValue ); } + void OnpanValueChangedCh15 ( double dValue ) { UpdatePanValue ( 15, dValue ); } + void OnpanValueChangedCh16 ( double dValue ) { UpdatePanValue ( 16, dValue ); } + void OnpanValueChangedCh17 ( double dValue ) { UpdatePanValue ( 17, dValue ); } + void OnpanValueChangedCh18 ( double dValue ) { UpdatePanValue ( 18, dValue ); } + void OnpanValueChangedCh19 ( double dValue ) { UpdatePanValue ( 19, dValue ); } + void OnpanValueChangedCh20 ( double dValue ) { UpdatePanValue ( 20, dValue ); } + void OnpanValueChangedCh21 ( double dValue ) { UpdatePanValue ( 21, dValue ); } + void OnpanValueChangedCh22 ( double dValue ) { UpdatePanValue ( 22, dValue ); } + void OnpanValueChangedCh23 ( double dValue ) { UpdatePanValue ( 23, dValue ); } + void OnpanValueChangedCh24 ( double dValue ) { UpdatePanValue ( 24, dValue ); } + void OnpanValueChangedCh25 ( double dValue ) { UpdatePanValue ( 25, dValue ); } + void OnpanValueChangedCh26 ( double dValue ) { UpdatePanValue ( 26, dValue ); } + void OnpanValueChangedCh27 ( double dValue ) { UpdatePanValue ( 27, dValue ); } + void OnpanValueChangedCh28 ( double dValue ) { UpdatePanValue ( 28, dValue ); } + void OnpanValueChangedCh29 ( double dValue ) { UpdatePanValue ( 29, dValue ); } + void OnpanValueChangedCh30 ( double dValue ) { UpdatePanValue ( 30, dValue ); } + void OnpanValueChangedCh31 ( double dValue ) { UpdatePanValue ( 31, dValue ); } + void OnpanValueChangedCh32 ( double dValue ) { UpdatePanValue ( 32, dValue ); } + void OnpanValueChangedCh33 ( double dValue ) { UpdatePanValue ( 33, dValue ); } + void OnpanValueChangedCh34 ( double dValue ) { UpdatePanValue ( 34, dValue ); } + void OnpanValueChangedCh35 ( double dValue ) { UpdatePanValue ( 35, dValue ); } + void OnpanValueChangedCh36 ( double dValue ) { UpdatePanValue ( 36, dValue ); } + void OnpanValueChangedCh37 ( double dValue ) { UpdatePanValue ( 37, dValue ); } + void OnpanValueChangedCh38 ( double dValue ) { UpdatePanValue ( 38, dValue ); } + void OnpanValueChangedCh39 ( double dValue ) { UpdatePanValue ( 39, dValue ); } + void OnpanValueChangedCh40 ( double dValue ) { UpdatePanValue ( 40, dValue ); } + void OnpanValueChangedCh41 ( double dValue ) { UpdatePanValue ( 41, dValue ); } + void OnpanValueChangedCh42 ( double dValue ) { UpdatePanValue ( 42, dValue ); } + void OnpanValueChangedCh43 ( double dValue ) { UpdatePanValue ( 43, dValue ); } + void OnpanValueChangedCh44 ( double dValue ) { UpdatePanValue ( 44, dValue ); } + void OnpanValueChangedCh45 ( double dValue ) { UpdatePanValue ( 45, dValue ); } + void OnpanValueChangedCh46 ( double dValue ) { UpdatePanValue ( 46, dValue ); } + void OnpanValueChangedCh47 ( double dValue ) { UpdatePanValue ( 47, dValue ); } + void OnpanValueChangedCh48 ( double dValue ) { UpdatePanValue ( 48, dValue ); } + void OnpanValueChangedCh49 ( double dValue ) { UpdatePanValue ( 49, dValue ); } + void OnChSoloStateChanged() { UpdateSoloStates(); } #endif diff --git a/src/protocol.cpp b/src/protocol.cpp index 6c915b6e..a1b6cc59 100755 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -64,6 +64,13 @@ MESSAGES (with connection) +-------------------+--------------+ +- PROTMESSID_CHANNEL_PAN: Gain of channel + + +-------------------+-----------------+ + | 1 byte channel ID | 2 bytes panning | + +-------------------+-----------------+ + + - PROTMESSID_CONN_CLIENTS_LIST: Information about connected clients for each connected client append following data: From 31c3f5567df81c173d694fd868b0d8f987111c14 Mon Sep 17 00:00:00 2001 From: Tarmo Johannes Date: Sat, 16 May 2020 20:11:54 +0300 Subject: [PATCH 4/5] Implemented storing pan values. --- src/audiomixerboard.cpp | 9 +++++++++ src/audiomixerboard.h | 4 +++- src/client.cpp | 1 + src/client.h | 1 + src/clientdlg.cpp | 2 ++ src/settings.cpp | 19 +++++++++++++++++++ 6 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 1fd09046..4be336b0 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -562,6 +562,7 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) : QScrollArea ( parent ), vecStoredFaderTags ( MAX_NUM_STORED_FADER_SETTINGS, "" ), vecStoredFaderLevels ( MAX_NUM_STORED_FADER_SETTINGS, AUD_MIX_FADER_MAX ), + vecStoredPanValues ( MAX_NUM_STORED_FADER_SETTINGS, AUD_MIX_PAN_MAX/2), vecStoredFaderIsSolo ( MAX_NUM_STORED_FADER_SETTINGS, false ), vecStoredFaderIsMute ( MAX_NUM_STORED_FADER_SETTINGS, false ), iNewClientFaderLevel ( 100 ), @@ -913,15 +914,18 @@ void CAudioMixerBoard::ApplyNewConClientList ( CVector& vecChanInf // the text has actually changed, search in the list of // stored settings if we have a matching entry int iStoredFaderLevel; + int iStoredPanValue; bool bStoredFaderIsSolo; bool bStoredFaderIsMute; if ( GetStoredFaderSettings ( vecChanInfo[j], iStoredFaderLevel, + iStoredPanValue, bStoredFaderIsSolo, bStoredFaderIsMute ) ) { vecpChanFader[i]->SetFaderLevel ( iStoredFaderLevel ); + vecpChanFader[i]->SetPanValue ( iStoredPanValue ); vecpChanFader[i]->SetFaderIsSolo ( bStoredFaderIsSolo ); vecpChanFader[i]->SetFaderIsMute ( bStoredFaderIsMute ); } @@ -1029,6 +1033,7 @@ void CAudioMixerBoard::StoreFaderSettings ( CChannelFader* pChanFader ) !pChanFader->GetReceivedName().isEmpty() ) { CVector viOldStoredFaderLevels ( vecStoredFaderLevels ); + CVector viOldStoredPanValues ( vecStoredPanValues ); CVector vbOldStoredFaderIsSolo ( vecStoredFaderIsSolo ); CVector vbOldStoredFaderIsMute ( vecStoredFaderIsMute ); @@ -1042,6 +1047,7 @@ void CAudioMixerBoard::StoreFaderSettings ( CChannelFader* pChanFader ) // current fader level and solo state is at the top of the list vecStoredFaderLevels[0] = pChanFader->GetFaderLevel(); + vecStoredPanValues[0] = pChanFader->GetPanValue(); vecStoredFaderIsSolo[0] = pChanFader->IsSolo(); vecStoredFaderIsMute[0] = pChanFader->IsMute(); iTempListCnt = 1; @@ -1057,6 +1063,7 @@ void CAudioMixerBoard::StoreFaderSettings ( CChannelFader* pChanFader ) if ( iIdx != iOldIdx ) { vecStoredFaderLevels[iTempListCnt] = viOldStoredFaderLevels[iIdx]; + vecStoredPanValues[iTempListCnt] = viOldStoredPanValues[iIdx]; vecStoredFaderIsSolo[iTempListCnt] = vbOldStoredFaderIsSolo[iIdx]; vecStoredFaderIsMute[iTempListCnt] = vbOldStoredFaderIsMute[iIdx]; @@ -1069,6 +1076,7 @@ void CAudioMixerBoard::StoreFaderSettings ( CChannelFader* pChanFader ) bool CAudioMixerBoard::GetStoredFaderSettings ( const CChannelInfo& ChanInfo, int& iStoredFaderLevel, + int& iStoredPanValue, bool& bStoredFaderIsSolo, bool& bStoredFaderIsMute) { @@ -1082,6 +1090,7 @@ bool CAudioMixerBoard::GetStoredFaderSettings ( const CChannelInfo& ChanInfo, { // copy stored settings values iStoredFaderLevel = vecStoredFaderLevels[iIdx]; + iStoredPanValue = vecStoredPanValues[iIdx]; bStoredFaderIsSolo = vecStoredFaderIsSolo[iIdx] != 0; bStoredFaderIsMute = vecStoredFaderIsMute[iIdx] != 0; diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index 79268819..c1bdda38 100644 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -156,13 +156,15 @@ public: // settings CVector vecStoredFaderTags; CVector vecStoredFaderLevels; + CVector vecStoredPanValues; CVector vecStoredFaderIsSolo; CVector vecStoredFaderIsMute; int iNewClientFaderLevel; protected: - bool GetStoredFaderSettings ( const CChannelInfo& ChanInfo, + bool GetStoredFaderSettings (const CChannelInfo& ChanInfo, int& iStoredFaderLevel, + int& iStoredPanValue, bool& bStoredFaderIsSolo, bool& bStoredFaderIsMute ); diff --git a/src/client.cpp b/src/client.cpp index 1259e3ee..d68dc19c 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -35,6 +35,7 @@ CClient::CClient ( const quint16 iPortNumber, ChannelInfo (), vecStoredFaderTags ( MAX_NUM_STORED_FADER_SETTINGS, "" ), vecStoredFaderLevels ( MAX_NUM_STORED_FADER_SETTINGS, AUD_MIX_FADER_MAX ), + vecStoredPanValues ( MAX_NUM_STORED_FADER_SETTINGS, AUD_MIX_PAN_MAX/2 ), vecStoredFaderIsSolo ( MAX_NUM_STORED_FADER_SETTINGS, false ), vecStoredFaderIsMute ( MAX_NUM_STORED_FADER_SETTINGS, false ), iNewClientFaderLevel ( 100 ), diff --git a/src/client.h b/src/client.h index dd2eacb2..48898321 100755 --- a/src/client.h +++ b/src/client.h @@ -282,6 +282,7 @@ public: CChannelCoreInfo ChannelInfo; CVector vecStoredFaderTags; CVector vecStoredFaderLevels; + CVector vecStoredPanValues; CVector vecStoredFaderIsSolo; CVector vecStoredFaderIsMute; int iNewClientFaderLevel; diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 2b30023d..349433d9 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -193,6 +193,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, // restore fader settings MainMixerBoard->vecStoredFaderTags = pClient->vecStoredFaderTags; MainMixerBoard->vecStoredFaderLevels = pClient->vecStoredFaderLevels; + MainMixerBoard->vecStoredPanValues = pClient->vecStoredPanValues; MainMixerBoard->vecStoredFaderIsSolo = pClient->vecStoredFaderIsSolo; MainMixerBoard->vecStoredFaderIsMute = pClient->vecStoredFaderIsMute; MainMixerBoard->iNewClientFaderLevel = pClient->iNewClientFaderLevel; @@ -588,6 +589,7 @@ void CClientDlg::closeEvent ( QCloseEvent* Event ) MainMixerBoard->HideAll(); pClient->vecStoredFaderTags = MainMixerBoard->vecStoredFaderTags; pClient->vecStoredFaderLevels = MainMixerBoard->vecStoredFaderLevels; + pClient->vecStoredPanValues = MainMixerBoard->vecStoredPanValues; pClient->vecStoredFaderIsSolo = MainMixerBoard->vecStoredFaderIsSolo; pClient->vecStoredFaderIsMute = MainMixerBoard->vecStoredFaderIsMute; pClient->iNewClientFaderLevel = MainMixerBoard->iNewClientFaderLevel; diff --git a/src/settings.cpp b/src/settings.cpp index 7ae68c17..5a47a5aa 100755 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -77,6 +77,17 @@ void CSettings::Load() } } + // stored pan values + for ( iIdx = 0; iIdx < MAX_NUM_STORED_FADER_SETTINGS; iIdx++ ) + { + if ( GetNumericIniSet ( IniXMLDocument, "client", + QString ( "storedpanvalue%1" ).arg ( iIdx ), + 0, AUD_MIX_PAN_MAX/2, iValue ) ) + { + pClient->vecStoredPanValues[iIdx] = iValue; + } + } + // stored fader solo state for ( iIdx = 0; iIdx < MAX_NUM_STORED_FADER_SETTINGS; iIdx++ ) { @@ -455,6 +466,14 @@ void CSettings::Save() pClient->vecStoredFaderLevels[iIdx] ); } + // stored pan values + for ( iIdx = 0; iIdx < MAX_NUM_STORED_FADER_SETTINGS; iIdx++ ) + { + SetNumericIniSet ( IniXMLDocument, "client", + QString ( "storedpanvalue%1" ).arg ( iIdx ), + pClient->vecStoredPanValues[iIdx] ); + } + // stored fader solo states for ( iIdx = 0; iIdx < MAX_NUM_STORED_FADER_SETTINGS; iIdx++ ) { From f2cd5348b0e31ecfcbb6c758b1c7a0bb2903e064 Mon Sep 17 00:00:00 2001 From: Tarmo Johannes Date: Sun, 17 May 2020 15:51:01 +0300 Subject: [PATCH 5/5] Cahanges according to pull request comments. --- src/audiomixerboard.cpp | 178 +--------------------------------------- src/audiomixerboard.h | 129 ----------------------------- src/channel.cpp | 2 +- src/protocol.h | 2 +- 4 files changed, 3 insertions(+), 308 deletions(-) diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 9c0a6702..01969ffb 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -103,7 +103,6 @@ CChannelFader::CChannelFader ( QWidget* pNW, pMuteSoloGrid->addWidget ( pcbMute, 0, Qt::AlignLeft ); pMuteSoloGrid->addWidget ( pcbSolo, 0, Qt::AlignLeft ); - //TODO: Pan row: "L" slider "R" pMainGrid->addWidget ( pPan, 0, Qt::AlignCenter ); pMainGrid->addWidget ( pLevelsBox, 0, Qt::AlignHCenter ); pMainGrid->addWidget ( pMuteSoloBox, 0, Qt::AlignHCenter ); @@ -128,7 +127,7 @@ CChannelFader::CChannelFader ( QWidget* pNW, pFader->setAccessibleName ( tr ( "Local mix level setting of the current audio " "channel at the server" ) ); - pPan->setWhatsThis ( tr ( "Panning: Sets the panning position from Left to Right of the channel. " + pPan->setWhatsThis ( "" + tr ( "Panning") + ":" + tr ( "Sets the panning position from Left to Right of the channel. " " Works only in stero or preferably mono in/stereo out mode." ) ); pPan->setAccessibleName ( tr ( "Local panning position of the current audio channel at the server" ) ); @@ -596,169 +595,7 @@ CAudioMixerBoard::CAudioMixerBoard ( QWidget* parent, Qt::WindowFlags ) : // Connections ------------------------------------------------------------- - -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) connectFaderSignalsToMixerBoardSlots(); - -#else - // CODE TAG: MAX_NUM_CHANNELS_TAG - // make sure we have MAX_NUM_CHANNELS connections!!! - QObject::connect ( vecpChanFader[0], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh0 ( double ) ) ); - QObject::connect ( vecpChanFader[1], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh1 ( double ) ) ); - QObject::connect ( vecpChanFader[2], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh2 ( double ) ) ); - QObject::connect ( vecpChanFader[3], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh3 ( double ) ) ); - QObject::connect ( vecpChanFader[4], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh4 ( double ) ) ); - QObject::connect ( vecpChanFader[5], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh5 ( double ) ) ); - QObject::connect ( vecpChanFader[6], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh6 ( double ) ) ); - QObject::connect ( vecpChanFader[7], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh7 ( double ) ) ); - QObject::connect ( vecpChanFader[8], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh8 ( double ) ) ); - QObject::connect ( vecpChanFader[9], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh9 ( double ) ) ); - QObject::connect ( vecpChanFader[10], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh10 ( double ) ) ); - QObject::connect ( vecpChanFader[11], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh11 ( double ) ) ); - QObject::connect ( vecpChanFader[12], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh12 ( double ) ) ); - QObject::connect ( vecpChanFader[13], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh13 ( double ) ) ); - QObject::connect ( vecpChanFader[14], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh14 ( double ) ) ); - QObject::connect ( vecpChanFader[15], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh15 ( double ) ) ); - QObject::connect ( vecpChanFader[16], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh16 ( double ) ) ); - QObject::connect ( vecpChanFader[17], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh17 ( double ) ) ); - QObject::connect ( vecpChanFader[18], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh18 ( double ) ) ); - QObject::connect ( vecpChanFader[19], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh19 ( double ) ) ); - QObject::connect ( vecpChanFader[20], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh20 ( double ) ) ); - QObject::connect ( vecpChanFader[21], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh21 ( double ) ) ); - QObject::connect ( vecpChanFader[22], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh22 ( double ) ) ); - QObject::connect ( vecpChanFader[23], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh23 ( double ) ) ); - QObject::connect ( vecpChanFader[24], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh24 ( double ) ) ); - QObject::connect ( vecpChanFader[25], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh25 ( double ) ) ); - QObject::connect ( vecpChanFader[26], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh26 ( double ) ) ); - QObject::connect ( vecpChanFader[27], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh27 ( double ) ) ); - QObject::connect ( vecpChanFader[28], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh28 ( double ) ) ); - QObject::connect ( vecpChanFader[29], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh29 ( double ) ) ); - QObject::connect ( vecpChanFader[30], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh30 ( double ) ) ); - QObject::connect ( vecpChanFader[31], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh31 ( double ) ) ); - QObject::connect ( vecpChanFader[32], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh32 ( double ) ) ); - QObject::connect ( vecpChanFader[33], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh33 ( double ) ) ); - QObject::connect ( vecpChanFader[34], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh34 ( double ) ) ); - QObject::connect ( vecpChanFader[35], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh35 ( double ) ) ); - QObject::connect ( vecpChanFader[36], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh36 ( double ) ) ); - QObject::connect ( vecpChanFader[37], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh37 ( double ) ) ); - QObject::connect ( vecpChanFader[38], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh38 ( double ) ) ); - QObject::connect ( vecpChanFader[39], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh39 ( double ) ) ); - QObject::connect ( vecpChanFader[40], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh40 ( double ) ) ); - QObject::connect ( vecpChanFader[41], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh41 ( double ) ) ); - QObject::connect ( vecpChanFader[42], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh42 ( double ) ) ); - QObject::connect ( vecpChanFader[43], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh43 ( double ) ) ); - QObject::connect ( vecpChanFader[44], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh44 ( double ) ) ); - QObject::connect ( vecpChanFader[45], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh45 ( double ) ) ); - QObject::connect ( vecpChanFader[46], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh46 ( double ) ) ); - QObject::connect ( vecpChanFader[47], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh47 ( double ) ) ); - QObject::connect ( vecpChanFader[48], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh48 ( double ) ) ); - QObject::connect ( vecpChanFader[49], SIGNAL ( gainValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh49 ( double ) ) ); - -//Pans: ---- - QObject::connect ( vecpChanFader[0], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh0 ( double ) ) ); - QObject::connect ( vecpChanFader[1], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh1 ( double ) ) ); - QObject::connect ( vecpChanFader[2], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh2 ( double ) ) ); - QObject::connect ( vecpChanFader[3], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh3 ( double ) ) ); - QObject::connect ( vecpChanFader[4], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh4 ( double ) ) ); - QObject::connect ( vecpChanFader[5], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh5 ( double ) ) ); - QObject::connect ( vecpChanFader[6], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh6 ( double ) ) ); - QObject::connect ( vecpChanFader[7], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh7 ( double ) ) ); - QObject::connect ( vecpChanFader[8], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh8 ( double ) ) ); - QObject::connect ( vecpChanFader[9], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh9 ( double ) ) ); - QObject::connect ( vecpChanFader[10], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh10 ( double ) ) ); - QObject::connect ( vecpChanFader[11], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh11 ( double ) ) ); - QObject::connect ( vecpChanFader[12], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh12 ( double ) ) ); - QObject::connect ( vecpChanFader[13], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh13 ( double ) ) ); - QObject::connect ( vecpChanFader[14], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh14 ( double ) ) ); - QObject::connect ( vecpChanFader[15], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh15 ( double ) ) ); - QObject::connect ( vecpChanFader[16], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh16 ( double ) ) ); - QObject::connect ( vecpChanFader[17], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh17 ( double ) ) ); - QObject::connect ( vecpChanFader[18], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh18 ( double ) ) ); - QObject::connect ( vecpChanFader[19], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh19 ( double ) ) ); - QObject::connect ( vecpChanFader[20], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh20 ( double ) ) ); - QObject::connect ( vecpChanFader[21], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh21 ( double ) ) ); - QObject::connect ( vecpChanFader[22], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh22 ( double ) ) ); - QObject::connect ( vecpChanFader[23], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh23 ( double ) ) ); - QObject::connect ( vecpChanFader[24], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh24 ( double ) ) ); - QObject::connect ( vecpChanFader[25], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh25 ( double ) ) ); - QObject::connect ( vecpChanFader[26], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh26 ( double ) ) ); - QObject::connect ( vecpChanFader[27], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh27 ( double ) ) ); - QObject::connect ( vecpChanFader[28], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh28 ( double ) ) ); - QObject::connect ( vecpChanFader[29], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh29 ( double ) ) ); - QObject::connect ( vecpChanFader[30], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh30 ( double ) ) ); - QObject::connect ( vecpChanFader[31], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh31 ( double ) ) ); - QObject::connect ( vecpChanFader[32], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh32 ( double ) ) ); - QObject::connect ( vecpChanFader[33], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh33 ( double ) ) ); - QObject::connect ( vecpChanFader[34], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh34 ( double ) ) ); - QObject::connect ( vecpChanFader[35], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh35 ( double ) ) ); - QObject::connect ( vecpChanFader[36], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh36 ( double ) ) ); - QObject::connect ( vecpChanFader[37], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh37 ( double ) ) ); - QObject::connect ( vecpChanFader[38], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh38 ( double ) ) ); - QObject::connect ( vecpChanFader[39], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh39 ( double ) ) ); - QObject::connect ( vecpChanFader[40], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh40 ( double ) ) ); - QObject::connect ( vecpChanFader[41], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh41 ( double ) ) ); - QObject::connect ( vecpChanFader[42], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh42 ( double ) ) ); - QObject::connect ( vecpChanFader[43], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh43 ( double ) ) ); - QObject::connect ( vecpChanFader[44], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh44 ( double ) ) ); - QObject::connect ( vecpChanFader[45], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh45 ( double ) ) ); - QObject::connect ( vecpChanFader[46], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh46 ( double ) ) ); - QObject::connect ( vecpChanFader[47], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh47 ( double ) ) ); - QObject::connect ( vecpChanFader[48], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnpanValueChangedCh48 ( double ) ) ); - QObject::connect ( vecpChanFader[49], SIGNAL ( panValueChanged ( double ) ), this, SLOT ( OnGainValueChangedCh49 ( double ) ) ); - - QObject::connect ( vecpChanFader[0], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[1], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[2], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[3], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[4], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[5], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[6], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[7], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[8], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[9], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[10], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[11], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[12], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[13], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[14], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[15], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[16], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[17], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[18], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[19], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[20], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[21], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[22], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[23], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[24], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[25], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[26], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[27], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[28], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[29], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[30], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[31], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[32], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[33], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[34], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[35], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[36], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[37], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[38], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[39], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[40], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[41], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[42], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[43], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[44], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[45], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[46], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[47], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[48], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - QObject::connect ( vecpChanFader[49], SIGNAL ( soloStateChanged ( int ) ), this, SLOT ( OnChSoloStateChanged() ) ); - -#endif - } template @@ -1002,19 +839,6 @@ void CAudioMixerBoard::UpdatePanValue ( const int iChannelIdx, emit ChangeChanPan ( iChannelIdx, dValue ); } -void CAudioMixerBoard::OnPanValueChanged ( const double dValue ) -{ - - // get channel index from sender according t, this SHOULD coincide with the chanID. - CChannelFader * channelFader = qobject_cast(sender()); - if (!channelFader) { - return; - } - // a clumsy way to find the index. Why not to use QList or QVector and indexOf? - CVector::iterator it = std::find(vecpChanFader.begin(), vecpChanFader.end(), channelFader); - int iChannelIdx = static_cast( std::distance(vecpChanFader.begin(), it) ); //static_cast(it); - emit ChangeChanPan ( iChannelIdx, dValue ); -} void CAudioMixerBoard::StoreFaderSettings ( CChannelFader* pChanFader ) { diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index 8868d15c..e59aeaf4 100644 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -107,7 +107,6 @@ signals: void soloStateChanged ( int value ); }; -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) template class CAudioMixerBoardSlots : public CAudioMixerBoardSlots { @@ -125,11 +124,6 @@ protected: template<> class CAudioMixerBoardSlots<0> {}; -#else -template -class CAudioMixerBoardSlots {}; -#endif - class CAudioMixerBoard : public QScrollArea, @@ -179,7 +173,6 @@ protected: bool bNoFaderVisible; QString strServerName; -#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) virtual void UpdateGainValue ( const int iChannelIdx, const double dValue ); virtual void UpdatePanValue ( const int iChannelIdx, @@ -188,128 +181,6 @@ protected: template inline void connectFaderSignalsToMixerBoardSlots(); -#else - void UpdateGainValue ( const int iChannelIdx, - const double dValue ); - - void UpdatePanValue ( const int iChannelIdx, - const double dValue ); - - -#endif - -public slots: - void OnPanValueChanged ( const double dValue ); - -#if QT_VERSION < 0x50000 // MOC does not expand macros in Qt 4, so we cannot use QT_VERSION_CHECK(5, 0, 0) - // CODE TAG: MAX_NUM_CHANNELS_TAG - // make sure we have MAX_NUM_CHANNELS connections!!! - void OnGainValueChangedCh0 ( double dValue ) { UpdateGainValue ( 0, dValue ); } - void OnGainValueChangedCh1 ( double dValue ) { UpdateGainValue ( 1, dValue ); } - void OnGainValueChangedCh2 ( double dValue ) { UpdateGainValue ( 2, dValue ); } - void OnGainValueChangedCh3 ( double dValue ) { UpdateGainValue ( 3, dValue ); } - void OnGainValueChangedCh4 ( double dValue ) { UpdateGainValue ( 4, dValue ); } - void OnGainValueChangedCh5 ( double dValue ) { UpdateGainValue ( 5, dValue ); } - void OnGainValueChangedCh6 ( double dValue ) { UpdateGainValue ( 6, dValue ); } - void OnGainValueChangedCh7 ( double dValue ) { UpdateGainValue ( 7, dValue ); } - void OnGainValueChangedCh8 ( double dValue ) { UpdateGainValue ( 8, dValue ); } - void OnGainValueChangedCh9 ( double dValue ) { UpdateGainValue ( 9, dValue ); } - void OnGainValueChangedCh10 ( double dValue ) { UpdateGainValue ( 10, dValue ); } - void OnGainValueChangedCh11 ( double dValue ) { UpdateGainValue ( 11, dValue ); } - void OnGainValueChangedCh12 ( double dValue ) { UpdateGainValue ( 12, dValue ); } - void OnGainValueChangedCh13 ( double dValue ) { UpdateGainValue ( 13, dValue ); } - void OnGainValueChangedCh14 ( double dValue ) { UpdateGainValue ( 14, dValue ); } - void OnGainValueChangedCh15 ( double dValue ) { UpdateGainValue ( 15, dValue ); } - void OnGainValueChangedCh16 ( double dValue ) { UpdateGainValue ( 16, dValue ); } - void OnGainValueChangedCh17 ( double dValue ) { UpdateGainValue ( 17, dValue ); } - void OnGainValueChangedCh18 ( double dValue ) { UpdateGainValue ( 18, dValue ); } - void OnGainValueChangedCh19 ( double dValue ) { UpdateGainValue ( 19, dValue ); } - void OnGainValueChangedCh20 ( double dValue ) { UpdateGainValue ( 20, dValue ); } - void OnGainValueChangedCh21 ( double dValue ) { UpdateGainValue ( 21, dValue ); } - void OnGainValueChangedCh22 ( double dValue ) { UpdateGainValue ( 22, dValue ); } - void OnGainValueChangedCh23 ( double dValue ) { UpdateGainValue ( 23, dValue ); } - void OnGainValueChangedCh24 ( double dValue ) { UpdateGainValue ( 24, dValue ); } - void OnGainValueChangedCh25 ( double dValue ) { UpdateGainValue ( 25, dValue ); } - void OnGainValueChangedCh26 ( double dValue ) { UpdateGainValue ( 26, dValue ); } - void OnGainValueChangedCh27 ( double dValue ) { UpdateGainValue ( 27, dValue ); } - void OnGainValueChangedCh28 ( double dValue ) { UpdateGainValue ( 28, dValue ); } - void OnGainValueChangedCh29 ( double dValue ) { UpdateGainValue ( 29, dValue ); } - void OnGainValueChangedCh30 ( double dValue ) { UpdateGainValue ( 30, dValue ); } - void OnGainValueChangedCh31 ( double dValue ) { UpdateGainValue ( 31, dValue ); } - void OnGainValueChangedCh32 ( double dValue ) { UpdateGainValue ( 32, dValue ); } - void OnGainValueChangedCh33 ( double dValue ) { UpdateGainValue ( 33, dValue ); } - void OnGainValueChangedCh34 ( double dValue ) { UpdateGainValue ( 34, dValue ); } - void OnGainValueChangedCh35 ( double dValue ) { UpdateGainValue ( 35, dValue ); } - void OnGainValueChangedCh36 ( double dValue ) { UpdateGainValue ( 36, dValue ); } - void OnGainValueChangedCh37 ( double dValue ) { UpdateGainValue ( 37, dValue ); } - void OnGainValueChangedCh38 ( double dValue ) { UpdateGainValue ( 38, dValue ); } - void OnGainValueChangedCh39 ( double dValue ) { UpdateGainValue ( 39, dValue ); } - void OnGainValueChangedCh40 ( double dValue ) { UpdateGainValue ( 40, dValue ); } - void OnGainValueChangedCh41 ( double dValue ) { UpdateGainValue ( 41, dValue ); } - void OnGainValueChangedCh42 ( double dValue ) { UpdateGainValue ( 42, dValue ); } - void OnGainValueChangedCh43 ( double dValue ) { UpdateGainValue ( 43, dValue ); } - void OnGainValueChangedCh44 ( double dValue ) { UpdateGainValue ( 44, dValue ); } - void OnGainValueChangedCh45 ( double dValue ) { UpdateGainValue ( 45, dValue ); } - void OnGainValueChangedCh46 ( double dValue ) { UpdateGainValue ( 46, dValue ); } - void OnGainValueChangedCh47 ( double dValue ) { UpdateGainValue ( 47, dValue ); } - void OnGainValueChangedCh48 ( double dValue ) { UpdateGainValue ( 48, dValue ); } - void OnGainValueChangedCh49 ( double dValue ) { UpdateGainValue ( 49, dValue ); } - - void OnpanValueChangedCh0 ( double dValue ) { UpdatePanValue ( 0, dValue ); } - void OnpanValueChangedCh1 ( double dValue ) { UpdatePanValue ( 1, dValue ); } - void OnpanValueChangedCh2 ( double dValue ) { UpdatePanValue ( 2, dValue ); } - void OnpanValueChangedCh3 ( double dValue ) { UpdatePanValue ( 3, dValue ); } - void OnpanValueChangedCh4 ( double dValue ) { UpdatePanValue ( 4, dValue ); } - void OnpanValueChangedCh5 ( double dValue ) { UpdatePanValue ( 5, dValue ); } - void OnpanValueChangedCh6 ( double dValue ) { UpdatePanValue ( 6, dValue ); } - void OnpanValueChangedCh7 ( double dValue ) { UpdatePanValue ( 7, dValue ); } - void OnpanValueChangedCh8 ( double dValue ) { UpdatePanValue ( 8, dValue ); } - void OnpanValueChangedCh9 ( double dValue ) { UpdatePanValue ( 9, dValue ); } - void OnpanValueChangedCh10 ( double dValue ) { UpdatePanValue ( 10, dValue ); } - void OnpanValueChangedCh11 ( double dValue ) { UpdatePanValue ( 11, dValue ); } - void OnpanValueChangedCh12 ( double dValue ) { UpdatePanValue ( 12, dValue ); } - void OnpanValueChangedCh13 ( double dValue ) { UpdatePanValue ( 13, dValue ); } - void OnpanValueChangedCh14 ( double dValue ) { UpdatePanValue ( 14, dValue ); } - void OnpanValueChangedCh15 ( double dValue ) { UpdatePanValue ( 15, dValue ); } - void OnpanValueChangedCh16 ( double dValue ) { UpdatePanValue ( 16, dValue ); } - void OnpanValueChangedCh17 ( double dValue ) { UpdatePanValue ( 17, dValue ); } - void OnpanValueChangedCh18 ( double dValue ) { UpdatePanValue ( 18, dValue ); } - void OnpanValueChangedCh19 ( double dValue ) { UpdatePanValue ( 19, dValue ); } - void OnpanValueChangedCh20 ( double dValue ) { UpdatePanValue ( 20, dValue ); } - void OnpanValueChangedCh21 ( double dValue ) { UpdatePanValue ( 21, dValue ); } - void OnpanValueChangedCh22 ( double dValue ) { UpdatePanValue ( 22, dValue ); } - void OnpanValueChangedCh23 ( double dValue ) { UpdatePanValue ( 23, dValue ); } - void OnpanValueChangedCh24 ( double dValue ) { UpdatePanValue ( 24, dValue ); } - void OnpanValueChangedCh25 ( double dValue ) { UpdatePanValue ( 25, dValue ); } - void OnpanValueChangedCh26 ( double dValue ) { UpdatePanValue ( 26, dValue ); } - void OnpanValueChangedCh27 ( double dValue ) { UpdatePanValue ( 27, dValue ); } - void OnpanValueChangedCh28 ( double dValue ) { UpdatePanValue ( 28, dValue ); } - void OnpanValueChangedCh29 ( double dValue ) { UpdatePanValue ( 29, dValue ); } - void OnpanValueChangedCh30 ( double dValue ) { UpdatePanValue ( 30, dValue ); } - void OnpanValueChangedCh31 ( double dValue ) { UpdatePanValue ( 31, dValue ); } - void OnpanValueChangedCh32 ( double dValue ) { UpdatePanValue ( 32, dValue ); } - void OnpanValueChangedCh33 ( double dValue ) { UpdatePanValue ( 33, dValue ); } - void OnpanValueChangedCh34 ( double dValue ) { UpdatePanValue ( 34, dValue ); } - void OnpanValueChangedCh35 ( double dValue ) { UpdatePanValue ( 35, dValue ); } - void OnpanValueChangedCh36 ( double dValue ) { UpdatePanValue ( 36, dValue ); } - void OnpanValueChangedCh37 ( double dValue ) { UpdatePanValue ( 37, dValue ); } - void OnpanValueChangedCh38 ( double dValue ) { UpdatePanValue ( 38, dValue ); } - void OnpanValueChangedCh39 ( double dValue ) { UpdatePanValue ( 39, dValue ); } - void OnpanValueChangedCh40 ( double dValue ) { UpdatePanValue ( 40, dValue ); } - void OnpanValueChangedCh41 ( double dValue ) { UpdatePanValue ( 41, dValue ); } - void OnpanValueChangedCh42 ( double dValue ) { UpdatePanValue ( 42, dValue ); } - void OnpanValueChangedCh43 ( double dValue ) { UpdatePanValue ( 43, dValue ); } - void OnpanValueChangedCh44 ( double dValue ) { UpdatePanValue ( 44, dValue ); } - void OnpanValueChangedCh45 ( double dValue ) { UpdatePanValue ( 45, dValue ); } - void OnpanValueChangedCh46 ( double dValue ) { UpdatePanValue ( 46, dValue ); } - void OnpanValueChangedCh47 ( double dValue ) { UpdatePanValue ( 47, dValue ); } - void OnpanValueChangedCh48 ( double dValue ) { UpdatePanValue ( 48, dValue ); } - void OnpanValueChangedCh49 ( double dValue ) { UpdatePanValue ( 49, dValue ); } - - void OnChSoloStateChanged() { UpdateSoloStates(); } - -#endif - signals: void ChangeChanGain ( int iId, double dGain ); void ChangeChanPan ( int iId, double dPan ); diff --git a/src/channel.cpp b/src/channel.cpp index 19142925..38f05cec 100755 --- a/src/channel.cpp +++ b/src/channel.cpp @@ -28,7 +28,7 @@ // CChannel implementation ***************************************************** CChannel::CChannel ( const bool bNIsServer ) : vecdGains ( MAX_NUM_CHANNELS, 1.0 ), - vecdPannings ( MAX_NUM_CHANNELS, 0.5), + vecdPannings ( MAX_NUM_CHANNELS, 0.5), bDoAutoSockBufSize ( true ), iFadeInCnt ( 0 ), iFadeInCntMax ( FADE_IN_NUM_FRAMES_DBLE_FRAMESIZE ), diff --git a/src/protocol.h b/src/protocol.h index 542cf700..f2b218f4 100755 --- a/src/protocol.h +++ b/src/protocol.h @@ -98,7 +98,7 @@ public: void CreateReqJitBufMes(); void CreateChanGainMes ( const int iChanID, const double dGain ); void CreateChanPanMes ( const int iChanID, const double dPan ); - void CreateConClientListMes ( const CVector& vecChanInfo ); + void CreateConClientListMes ( const CVector& vecChanInfo ); void CreateReqConnClientsList(); void CreateChanInfoMes ( const CChannelCoreInfo ChanInfo ); void CreateReqChanInfoMes();