fix of: when changing a large group of faders, the volume change is very very slow, also the feedback from server, it seems the protocol is overloaded totally
This commit is contained in:
parent
7f037f21e2
commit
2c0b8a6119
3 changed files with 59 additions and 35 deletions
|
@ -21,9 +21,7 @@
|
|||
|
||||
|
||||
TODO grouping does not work as expected:
|
||||
- when changing a large group of faders, the volume change is very very slow, also the feedback from server, it seems the protocol is overloaded totally
|
||||
- vertical space between check boxes should be smaller
|
||||
- get rid of bIsSelected
|
||||
|
||||
TODO minimum height of faders (dependent on style)
|
||||
|
||||
|
|
|
@ -313,7 +313,7 @@ void CChannelFader::Reset()
|
|||
iPreviousFaderLevel = AUD_MIX_FADER_MAX;
|
||||
pPan->setValue ( AUD_MIX_PAN_MAX / 2 );
|
||||
|
||||
// reset mute/solo/select check boxes and level meter
|
||||
// reset mute/solo/group check boxes and level meter
|
||||
pcbMute->setChecked ( false );
|
||||
pcbSolo->setChecked ( false );
|
||||
pcbGroup->setChecked ( false );
|
||||
|
@ -339,15 +339,20 @@ void CChannelFader::Reset()
|
|||
bIsMyOwnFader = false;
|
||||
}
|
||||
|
||||
void CChannelFader::SetFaderLevel ( const int iLevel )
|
||||
void CChannelFader::SetFaderLevel ( const int iLevel,
|
||||
const bool bIsGroupUpdate )
|
||||
{
|
||||
// first make a range check
|
||||
if ( ( iLevel >= 0 ) && ( iLevel <= AUD_MIX_FADER_MAX ) )
|
||||
{
|
||||
// we set the new fader level in the GUI (slider control) and also tell the
|
||||
// server about the change
|
||||
pFader->setValue ( iLevel );
|
||||
SendFaderLevelToServer ( iLevel );
|
||||
// server about the change (block the signal of the fader since we want to
|
||||
// call SendFaderLevelToServer with a special additional parameter)
|
||||
pFader->blockSignals ( true );
|
||||
pFader->setValue ( iLevel );
|
||||
pFader->blockSignals ( false );
|
||||
|
||||
SendFaderLevelToServer ( iLevel, bIsGroupUpdate );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -356,10 +361,9 @@ void CChannelFader::SetPanValue ( const int iPan )
|
|||
// first make a range check
|
||||
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
|
||||
pPan->setValue ( iPan );
|
||||
SendPanValueToServer ( iPan );
|
||||
// we set the new fader level in the GUI (slider control) which then
|
||||
// emits to signal to tell the server about the change (implicitly)
|
||||
pPan->setValue ( iPan );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,7 +397,8 @@ void CChannelFader::SetRemoteFaderIsMute ( const bool bIsMute )
|
|||
}
|
||||
}
|
||||
|
||||
void CChannelFader::SendFaderLevelToServer ( const int iLevel )
|
||||
void CChannelFader::SendFaderLevelToServer ( const int iLevel,
|
||||
const bool bIsGroupUpdate )
|
||||
{
|
||||
// if mute flag is set or other channel is on solo, do not apply the new
|
||||
// fader value (exception: we are on solo, in that case we ignore the
|
||||
|
@ -402,14 +407,17 @@ void CChannelFader::SendFaderLevelToServer ( const int iLevel )
|
|||
( !bOtherChannelIsSolo || IsSolo() ) )
|
||||
{
|
||||
// emit signal for new fader gain value
|
||||
emit gainValueChanged ( CalcFaderGain ( iLevel ), bIsMyOwnFader, iLevel - iPreviousFaderLevel );
|
||||
emit gainValueChanged ( CalcFaderGain ( iLevel ),
|
||||
bIsMyOwnFader,
|
||||
bIsGroupUpdate,
|
||||
iLevel - iPreviousFaderLevel );
|
||||
|
||||
iPreviousFaderLevel = iLevel;
|
||||
}
|
||||
}
|
||||
|
||||
void CChannelFader::SendPanValueToServer ( const int iPan )
|
||||
{
|
||||
{
|
||||
emit panValueChanged ( static_cast<double> ( iPan ) / AUD_MIX_PAN_MAX );
|
||||
}
|
||||
|
||||
|
@ -424,7 +432,7 @@ void CChannelFader::SetMute ( const bool bState )
|
|||
if ( bState )
|
||||
{
|
||||
// mute channel -> send gain of 0
|
||||
emit gainValueChanged ( 0, bIsMyOwnFader, 0 );
|
||||
emit gainValueChanged ( 0, bIsMyOwnFader, false, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -432,7 +440,7 @@ void CChannelFader::SetMute ( const bool bState )
|
|||
if ( !bOtherChannelIsSolo || IsSolo() )
|
||||
{
|
||||
// mute was unchecked, get current fader value and apply
|
||||
emit gainValueChanged ( CalcFaderGain ( GetFaderLevel() ), bIsMyOwnFader, 0 );
|
||||
emit gainValueChanged ( CalcFaderGain ( GetFaderLevel() ), bIsMyOwnFader, false, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -691,7 +699,7 @@ inline void CAudioMixerBoard::connectFaderSignalsToMixerBoardSlots()
|
|||
{
|
||||
int iCurChanID = slotId - 1;
|
||||
|
||||
void ( CAudioMixerBoard::* pGainValueChanged )( double, bool, int ) =
|
||||
void ( CAudioMixerBoard::* pGainValueChanged )( double, bool, bool, int ) =
|
||||
&CAudioMixerBoardSlots<slotId>::OnChGainValueChanged;
|
||||
|
||||
void ( CAudioMixerBoard::* pPanValueChanged )( double ) =
|
||||
|
@ -1023,27 +1031,25 @@ void CAudioMixerBoard::UpdateSoloStates()
|
|||
void CAudioMixerBoard::UpdateGainValue ( const int iChannelIdx,
|
||||
const double dValue,
|
||||
const bool bIsMyOwnFader,
|
||||
const bool bIsGroupUpdate,
|
||||
const int iDiffLevel )
|
||||
{
|
||||
// update current gain
|
||||
emit ChangeChanGain ( iChannelIdx, dValue, bIsMyOwnFader );
|
||||
|
||||
// if this fader is selected, all other selected must be updated as well
|
||||
if ( vecpChanFader[iChannelIdx]->IsSelect() )
|
||||
// if this fader is selected, all other in the group must be updated as
|
||||
// well (note that we do not have to update if this is already a group update
|
||||
// to avoid an infinite loop)
|
||||
if ( vecpChanFader[iChannelIdx]->IsSelect() && !bIsGroupUpdate )
|
||||
{
|
||||
for ( int i = 0; i < MAX_NUM_CHANNELS; i++ )
|
||||
{
|
||||
// update rest of faders selected
|
||||
if ( vecpChanFader[i]->IsVisible() && vecpChanFader[i]->IsSelect() && ( i != iChannelIdx ) )
|
||||
{
|
||||
// temporaly unselect so it does not repeat this again and again...
|
||||
vecpChanFader[i]->SetFaderIsSelect ( false );
|
||||
|
||||
// "move" faders with moving fader level
|
||||
vecpChanFader[i]->SetFaderLevel ( vecpChanFader[i]->GetFaderLevel() + iDiffLevel );
|
||||
|
||||
// back to selected status
|
||||
vecpChanFader[i]->SetFaderIsSelect ( true );
|
||||
// synchronize faders with moving fader level (it is important
|
||||
// to set the group flag to avoid inifinite looping)
|
||||
vecpChanFader[i]->SetFaderLevel ( vecpChanFader[i]->GetFaderLevel() + iDiffLevel, true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,25 +64,28 @@ public:
|
|||
void SetDisplayPans ( const bool eNDP );
|
||||
QFrame* GetMainWidget() { return pFrame; }
|
||||
|
||||
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 );
|
||||
void SetRemoteFaderIsMute ( const bool bIsMute );
|
||||
void SetFaderIsSelect ( const bool bIsMute );
|
||||
void SetFaderLevel ( const int iLevel,
|
||||
const bool bIsGroupUpdate = false );
|
||||
|
||||
int GetFaderLevel() { return pFader->value(); }
|
||||
int GetPanValue() { return pPan->value(); }
|
||||
void Reset();
|
||||
void SetChannelLevel ( const uint16_t iLevel );
|
||||
void SetIsMyOwnFader() { bIsMyOwnFader = true; }
|
||||
void UpdateSoloState ( const bool bNewOtherSoloState );
|
||||
|
||||
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 );
|
||||
void SendPanValueToServer ( const int iPan );
|
||||
void SendFaderLevelToServer ( const int iLevel,
|
||||
const bool bIsGroupUpdate );
|
||||
|
||||
QFrame* pFrame;
|
||||
|
||||
|
@ -112,12 +115,16 @@ protected:
|
|||
int iPreviousFaderLevel;
|
||||
|
||||
public slots:
|
||||
void OnLevelValueChanged ( int value ) { SendFaderLevelToServer ( value ); }
|
||||
void OnLevelValueChanged ( int value ) { SendFaderLevelToServer ( value, false ); }
|
||||
void OnPanValueChanged ( int value ) { SendPanValueToServer ( value ); }
|
||||
void OnMuteStateChanged ( int value );
|
||||
|
||||
signals:
|
||||
void gainValueChanged ( double value, bool bIsMyOwnFader, int iDiffLevel );
|
||||
void gainValueChanged ( double value,
|
||||
bool bIsMyOwnFader,
|
||||
bool bIsGroupUpdate,
|
||||
int iDiffLevel );
|
||||
|
||||
void panValueChanged ( double value );
|
||||
void soloStateChanged ( int value );
|
||||
};
|
||||
|
@ -126,14 +133,24 @@ template<unsigned int slotId>
|
|||
class CAudioMixerBoardSlots : public CAudioMixerBoardSlots<slotId - 1>
|
||||
{
|
||||
public:
|
||||
void OnChGainValueChanged ( double dValue, bool bIsMyOwnFader, int iDiffLevel ) { UpdateGainValue ( slotId - 1, dValue, bIsMyOwnFader, iDiffLevel ); }
|
||||
void OnChGainValueChanged ( double dValue,
|
||||
bool bIsMyOwnFader,
|
||||
bool bIsGroupUpdate,
|
||||
int iDiffLevel ) { UpdateGainValue ( slotId - 1,
|
||||
dValue,
|
||||
bIsMyOwnFader,
|
||||
bIsGroupUpdate,
|
||||
iDiffLevel ); }
|
||||
|
||||
void OnChPanValueChanged ( double dValue ) { UpdatePanValue ( slotId - 1, dValue ); }
|
||||
|
||||
protected:
|
||||
virtual void UpdateGainValue ( const int iChannelIdx,
|
||||
const double dValue,
|
||||
const bool bIsMyOwnFader,
|
||||
const bool bIsGroupUpdate,
|
||||
const int iDiffLevel ) = 0;
|
||||
|
||||
virtual void UpdatePanValue ( const int iChannelIdx,
|
||||
const double dValue ) = 0;
|
||||
};
|
||||
|
@ -149,7 +166,8 @@ class CAudioMixerBoard :
|
|||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CAudioMixerBoard ( QWidget* parent = nullptr, Qt::WindowFlags f = nullptr );
|
||||
CAudioMixerBoard ( QWidget* parent = nullptr,
|
||||
Qt::WindowFlags f = nullptr );
|
||||
|
||||
void HideAll();
|
||||
void ApplyNewConClientList ( CVector<CChannelInfo>& vecChanInfo );
|
||||
|
@ -223,7 +241,9 @@ protected:
|
|||
virtual void UpdateGainValue ( const int iChannelIdx,
|
||||
const double dValue,
|
||||
const bool bIsMyOwnFader,
|
||||
const bool bIsGroupUpdate,
|
||||
const int iDiffLevel );
|
||||
|
||||
virtual void UpdatePanValue ( const int iChannelIdx,
|
||||
const double dValue );
|
||||
|
||||
|
|
Loading…
Reference in a new issue