diff --git a/src/client.cpp b/src/client.cpp index a877af2c..8487ee07 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -31,7 +31,7 @@ CClient::CClient ( const quint16 iPortNumber ) : bRun ( false ), iSndCrdStereoBlockSizeSam ( 2 * MIN_SND_CRD_BLOCK_SIZE_SAMPLES ), Sound ( MIN_SND_CRD_BLOCK_SIZE_SAMPLES * 2 /* stereo */ ), Socket ( &Channel, iPortNumber ), - iAudioInFader ( AUD_FADER_IN_MAX / 2 ), + iAudioInFader ( AUD_FADER_IN_MIDDLE ), iReverbLevel ( 0 ), bReverbOnLeftChan ( false ), iNetwBufSizeFactIn ( DEF_NET_BLOCK_SIZE_FACTOR ), @@ -298,27 +298,40 @@ void CClient::run() } } - // mix both signals depending on the fading setting - const double dAttFact = - (double) ( AUD_FADER_IN_MIDDLE - abs ( AUD_FADER_IN_MIDDLE - iAudioInFader ) ) / - AUD_FADER_IN_MIDDLE; - - if ( iAudioInFader > AUD_FADER_IN_MIDDLE ) + // mix both signals depending on the fading setting, convert + // from double to short + if ( iAudioInFader == AUD_FADER_IN_MIDDLE ) { + // just mix channels together for ( i = 0, j = 0; i < iMonoBlockSizeSam; i++, j += 2 ) { - // attenuation on right channel vecsNetwork[i] = - Double2Short ( vecdAudioStereo[j] + dAttFact * vecdAudioStereo[j + 1] ); + Double2Short ( vecdAudioStereo[j] + vecdAudioStereo[j + 1] ); } } else { - for ( i = 0, j = 0; i < iMonoBlockSizeSam; i++, j += 2 ) + const double dAttFact = + (double) ( AUD_FADER_IN_MIDDLE - abs ( AUD_FADER_IN_MIDDLE - iAudioInFader ) ) / + AUD_FADER_IN_MIDDLE; + + if ( iAudioInFader > AUD_FADER_IN_MIDDLE ) { - // attenuation on left channel - vecsNetwork[i] = - Double2Short ( vecdAudioStereo[j + 1] + dAttFact * vecdAudioStereo[j] ); + for ( i = 0, j = 0; i < iMonoBlockSizeSam; i++, j += 2 ) + { + // attenuation on right channel + vecsNetwork[i] = + Double2Short ( vecdAudioStereo[j] + dAttFact * vecdAudioStereo[j + 1] ); + } + } + else + { + for ( i = 0, j = 0; i < iMonoBlockSizeSam; i++, j += 2 ) + { + // attenuation on left channel + vecsNetwork[i] = + Double2Short ( vecdAudioStereo[j + 1] + dAttFact * vecdAudioStereo[j] ); + } } } diff --git a/src/llconclientdlg.cpp b/src/llconclientdlg.cpp index 1edd53df..49925d8b 100755 --- a/src/llconclientdlg.cpp +++ b/src/llconclientdlg.cpp @@ -116,9 +116,8 @@ CLlconClientDlg::CLlconClientDlg ( CClient* pNCliP, QWidget* parent, // init slider controls --- // audio in fader SliderAudInFader->setRange ( AUD_FADER_IN_MIN, AUD_FADER_IN_MAX ); - const int iCurAudInFader = pClient->GetAudioInFader(); - SliderAudInFader->setValue ( iCurAudInFader ); SliderAudInFader->setTickInterval ( AUD_FADER_IN_MAX / 9 ); + UpdateAudioFaderSlider(); // audio reverberation SliderAudReverb->setRange ( 0, AUD_REVERB_MAX ); @@ -230,6 +229,41 @@ void CLlconClientDlg::closeEvent ( QCloseEvent * Event ) Event->accept(); } +void CLlconClientDlg::UpdateAudioFaderSlider() +{ + // update slider and label of audio fader + const int iCurAudInFader = pClient->GetAudioInFader(); + SliderAudInFader->setValue ( iCurAudInFader ); + + // show in label the center position and what channel is + // attenuated + if ( iCurAudInFader == AUD_FADER_IN_MIDDLE ) + { + TextLabelAudFader->setText ( "Center" ); + } + else + { + if ( iCurAudInFader > AUD_FADER_IN_MIDDLE ) + { + // attenuation on right channel + TextLabelAudFader->setText ( "R -" + + QString().setNum ( iCurAudInFader - AUD_FADER_IN_MIDDLE ) ); + } + else + { + // attenuation on left channel + TextLabelAudFader->setText ( "L -" + + QString().setNum ( AUD_FADER_IN_MIDDLE - iCurAudInFader ) ); + } + } +} + +void CLlconClientDlg::OnSliderAudInFader ( int value ) +{ + pClient->SetAudioInFader ( value ); + UpdateAudioFaderSlider(); +} + void CLlconClientDlg::OnConnectDisconBut() { // start/stop client, set button text diff --git a/src/llconclientdlg.h b/src/llconclientdlg.h index f007511e..1953bab8 100755 --- a/src/llconclientdlg.h +++ b/src/llconclientdlg.h @@ -75,6 +75,7 @@ public: protected: void ShowChatWindow(); + void UpdateAudioFaderSlider(); CClient* pClient; bool bConnected; @@ -97,7 +98,7 @@ public slots: void OnTimerStatus() { UpdateDisplay(); } void OnOpenGeneralSettings(); void OnOpenChatDialog() { ShowChatWindow(); } - void OnSliderAudInFader ( int value ) { pClient->SetAudioInFader ( value ); } + void OnSliderAudInFader ( int value ); void OnSliderAudReverb ( int value ) { pClient->SetReverbLevel ( value ); } void OnRevSelL() { pClient->SetReverbOnLeftChan ( true ); } void OnRevSelR() { pClient->SetReverbOnLeftChan ( false ); } diff --git a/src/llconclientdlgbase.ui b/src/llconclientdlgbase.ui index 6ba8d552..61287050 100755 --- a/src/llconclientdlgbase.ui +++ b/src/llconclientdlgbase.ui @@ -19,12 +19,6 @@ true - - 9 - - - 6 - @@ -34,18 +28,25 @@ QFrame::Raised - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + - - 5 - 5 + 0 0 @@ -66,26 +67,42 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + - + 0 - + + 0 + + + 0 + + + 0 + + 0 - - 1 - 3 + 0 0 @@ -101,9 +118,7 @@ - - 1 - 3 + 0 0 @@ -120,18 +135,25 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + - - 7 - 3 + 0 0 @@ -147,9 +169,7 @@ - - 7 - 3 + 0 0 @@ -168,12 +188,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -191,12 +220,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -218,12 +256,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -254,18 +301,25 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + - - 7 - 1 + 0 0 @@ -287,9 +341,7 @@ - - 0 - 0 + 0 0 @@ -319,20 +371,38 @@ Reverb - - 9 - 6 + + 9 + + + 9 + + + 9 + + + 9 + - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -348,12 +418,21 @@ - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -439,28 +518,44 @@ Audio Mixer - - 9 - - - 6 - - - 0 - - - 6 - + + + + + 50 + 0 + + + + Level + + + Qt::AlignCenter + + + false + + + - - 0 - 6 + + 0 + + + 0 + + + 0 + + + 0 + @@ -527,9 +622,7 @@ Fader - - 7 - 5 + 0 0 diff --git a/src/settings.cpp b/src/settings.cpp index 8cc6e5d0..8be4cbfc 100755 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -61,7 +61,7 @@ void CSettings::ReadIniFile ( const QString& sFileName ) pClient->strName = GetIniSetting ( IniXMLDocument, "client", "name" ); // audio fader - if ( GetNumericIniSet ( IniXMLDocument, "client", "audfad", 0, AUD_FADER_IN_MAX, iValue ) ) + if ( GetNumericIniSet ( IniXMLDocument, "client", "audfad", AUD_FADER_IN_MIN, AUD_FADER_IN_MAX, iValue ) ) { pClient->SetAudioInFader ( iValue ); }