added Enable Small Network Buffers switch
This commit is contained in:
parent
752b38e4e6
commit
79c0047bb3
7 changed files with 82 additions and 13 deletions
12
ChangeLog
12
ChangeLog
|
@ -6,6 +6,10 @@
|
|||
* added a Mute Stream button to hear your signal and the signal of the other clients but
|
||||
do not transmit your signal to the server so that the other clients cannot hear you
|
||||
|
||||
* added Enable Small Network Buffers switch to enable small sound card buffers in
|
||||
combination with legacy OPUS packets since OPUS packets with 64 samples enable low
|
||||
latency but can increase audio drop outs
|
||||
|
||||
* upgrade OPUS codec library to v1.3.1 by doloopuntil
|
||||
|
||||
* improved auto jitter buffer for 64 samples frame size
|
||||
|
@ -13,10 +17,16 @@
|
|||
* the ping times in the server list are now more stable
|
||||
|
||||
|
||||
TODO we need a switch to enable OPUS64 packets (otherwise it is not possible to use very small sound card buffers with the normal OPUS 128 samples frame size)
|
||||
TODO store Show All Musicians setting in the ini-file
|
||||
|
||||
TODO bug fix: "Start up the new version with the Connection Setup showing. "Show all musicians" is on (as I say). Switch it off before the list is displayed. The
|
||||
checkbox is off - but the list displays all musicians! You need to turn it on and off again to get it to do its thing. (If you wait a little, it's fine -
|
||||
i.e. before it's populated the musicians but after it's displayed the list, turn it off.)", see https://github.com/corrados/jamulus/issues/78
|
||||
|
||||
TODO offer the Jamulus ASIO settingspanel in case of an ASIO ERROR to fix, e.g., incorrect sample rate (https://sourceforge.net/p/llcon/discussion/533517/thread/777663cf94/#035f)
|
||||
|
||||
TODO the server list filter seems not to work if --showallservers is used
|
||||
|
||||
TODO store Central Server jamulus.server start scripts on the Repo (one for Central Server, one for Central Server North America)
|
||||
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ CClient::CClient ( const quint16 iPortNumber,
|
|||
bFraSiFactSafeSupported ( false ),
|
||||
eGUIDesign ( GD_ORIGINAL ),
|
||||
bDisplayChannelLevels ( true ),
|
||||
bEnableOPUS64 ( false ),
|
||||
bJitterBufferOK ( true ),
|
||||
strCentralServerAddress ( "" ),
|
||||
eCentralServerAddressType ( AT_DEFAULT ),
|
||||
|
@ -431,6 +432,26 @@ void CClient::SetSndCrdPrefFrameSizeFactor ( const int iNewFactor )
|
|||
}
|
||||
}
|
||||
|
||||
void CClient::SetEnableOPUS64 ( const bool eNEnableOPUS64 )
|
||||
{
|
||||
// init with new parameter, if client was running then first
|
||||
// stop it and restart again after new initialization
|
||||
const bool bWasRunning = Sound.IsRunning();
|
||||
if ( bWasRunning )
|
||||
{
|
||||
Sound.Stop();
|
||||
}
|
||||
|
||||
// set new parameter
|
||||
bEnableOPUS64 = eNEnableOPUS64;
|
||||
Init();
|
||||
|
||||
if ( bWasRunning )
|
||||
{
|
||||
Sound.Start();
|
||||
}
|
||||
}
|
||||
|
||||
void CClient::SetAudioQuality ( const EAudioQuality eNAudioQuality )
|
||||
{
|
||||
// init with new parameter, if client was running then first
|
||||
|
@ -686,7 +707,7 @@ void CClient::Init()
|
|||
// Calculate the current sound card frame size factor. In case
|
||||
// the current mono block size is not a multiple of the system
|
||||
// frame size, we have to use a sound card conversion buffer.
|
||||
if ( ( iMonoBlockSizeSam == ( SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_PREFERRED ) ) ||
|
||||
if ( ( ( iMonoBlockSizeSam == ( SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_PREFERRED ) ) && bEnableOPUS64 ) ||
|
||||
( iMonoBlockSizeSam == ( SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_DEFAULT ) ) ||
|
||||
( iMonoBlockSizeSam == ( SYSTEM_FRAME_SIZE_SAMPLES * FRAME_SIZE_FACTOR_SAFE ) ) )
|
||||
{
|
||||
|
@ -713,7 +734,7 @@ void CClient::Init()
|
|||
// select the OPUS frame size mode depending on current mono block size samples
|
||||
if ( bSndCrdConversionBufferRequired )
|
||||
{
|
||||
if ( iSndCardMonoBlockSizeSamConvBuff < DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES )
|
||||
if ( ( iSndCardMonoBlockSizeSamConvBuff < DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES ) && bEnableOPUS64 )
|
||||
{
|
||||
iMonoBlockSizeSam = SYSTEM_FRAME_SIZE_SAMPLES;
|
||||
eAudioCompressionType = CT_OPUS64;
|
||||
|
|
|
@ -204,6 +204,9 @@ public:
|
|||
void SetSndCrdPrefFrameSizeFactor ( const int iNewFactor );
|
||||
int GetSndCrdPrefFrameSizeFactor() { return iSndCrdPrefFrameSizeFactor; }
|
||||
|
||||
void SetEnableOPUS64 ( const bool eNEnableOPUS64 );
|
||||
bool GetEnableOPUS64() { return bEnableOPUS64; }
|
||||
|
||||
int GetSndCrdActualMonoBlSize()
|
||||
{
|
||||
// the actual sound card mono block size depends on whether a
|
||||
|
@ -366,6 +369,7 @@ protected:
|
|||
|
||||
EGUIDesign eGUIDesign;
|
||||
bool bDisplayChannelLevels;
|
||||
bool bEnableOPUS64;
|
||||
|
||||
bool bJitterBufferOK;
|
||||
|
||||
|
|
|
@ -121,6 +121,16 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
cbxROutChan->setWhatsThis ( strSndCrdChanMapp );
|
||||
cbxROutChan->setAccessibleName ( tr ( "Right output channel selection combo box" ) );
|
||||
|
||||
// enable OPUS64
|
||||
chbEnableOPUS64->setWhatsThis ( tr ( "<b>Enable Small Network Buffers:</b> If enabled, "
|
||||
"the support for very small network audio packets is activated. Very small "
|
||||
"network packets are only actually used if the sound card buffer delay is smaller than " ) +
|
||||
QString().setNum ( DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES ) + tr ( " samples. The "
|
||||
"smaller the network buffers, the smaller the audio latency. But at the same time "
|
||||
"the network load increases and the probability of audio dropouts also increases." ) );
|
||||
|
||||
chbEnableOPUS64->setAccessibleName ( tr ( "Enable small network buffers check box" ) );
|
||||
|
||||
// sound card buffer delay
|
||||
QString strSndCrdBufDelay = tr ( "<b>Sound Card Buffer Delay:</b> The "
|
||||
"buffer delay setting is a fundamental setting of the " ) +
|
||||
|
@ -345,6 +355,9 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
// update new client fader level edit box
|
||||
edtNewClientLevel->setText ( QString::number ( pClient->iNewClientFaderLevel ) );
|
||||
|
||||
// update enable small network buffers check box
|
||||
chbEnableOPUS64->setCheckState ( pClient->GetEnableOPUS64() ? Qt::Checked : Qt::Unchecked );
|
||||
|
||||
// set text for sound card buffer delay radio buttons
|
||||
rbtBufferDelayPreferred->setText ( GenSndCrdBufferDelayString (
|
||||
FRAME_SIZE_FACTOR_PREFERRED * SYSTEM_FRAME_SIZE_SAMPLES ) );
|
||||
|
@ -386,6 +399,9 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent,
|
|||
QObject::connect ( chbAutoJitBuf, SIGNAL ( stateChanged ( int ) ),
|
||||
this, SLOT ( OnAutoJitBufStateChanged ( int ) ) );
|
||||
|
||||
QObject::connect ( chbEnableOPUS64, SIGNAL ( stateChanged ( int ) ),
|
||||
this, SLOT ( OnEnableOPUS64StateChanged ( int ) ) );
|
||||
|
||||
// line edits
|
||||
QObject::connect ( edtCentralServerAddress, SIGNAL ( editingFinished() ),
|
||||
this, SLOT ( OnCentralServerAddressEditingFinished() ) );
|
||||
|
@ -607,12 +623,6 @@ void CClientSettingsDlg::OnNetBufServerValueChanged ( int value )
|
|||
UpdateJitterBufferFrame();
|
||||
}
|
||||
|
||||
void CClientSettingsDlg::OnSliderSndCrdBufferDelay ( int value )
|
||||
{
|
||||
pClient->SetSndCrdPrefFrameSizeFactor ( value );
|
||||
UpdateDisplay();
|
||||
}
|
||||
|
||||
void CClientSettingsDlg::OnSoundcardActivated ( int iSndDevIdx )
|
||||
{
|
||||
const QString strError = pClient->SetSndCrdDev ( iSndDevIdx );
|
||||
|
@ -684,6 +694,12 @@ void CClientSettingsDlg::OnAutoJitBufStateChanged ( int value )
|
|||
UpdateJitterBufferFrame();
|
||||
}
|
||||
|
||||
void CClientSettingsDlg::OnEnableOPUS64StateChanged ( int value )
|
||||
{
|
||||
pClient->SetEnableOPUS64 ( value == Qt::Checked );
|
||||
UpdateDisplay();
|
||||
}
|
||||
|
||||
void CClientSettingsDlg::OnGUIDesignFancyStateChanged ( int value )
|
||||
{
|
||||
if ( value == Qt::Unchecked )
|
||||
|
|
|
@ -87,10 +87,10 @@ protected:
|
|||
void OnTimerStatus() { UpdateDisplay(); }
|
||||
void OnNetBufValueChanged ( int value );
|
||||
void OnNetBufServerValueChanged ( int value );
|
||||
void OnSliderSndCrdBufferDelay ( int value );
|
||||
void OnAutoJitBufStateChanged ( int value );
|
||||
void OnGUIDesignFancyStateChanged ( int value );
|
||||
void OnDisplayChannelLevelsStateChanged ( int value );
|
||||
void OnEnableOPUS64StateChanged ( int value );
|
||||
void OnCentralServerAddressEditingFinished();
|
||||
void OnNewClientLevelEditingFinished();
|
||||
void OnSndCrdBufferDelayButtonGroupClicked ( QAbstractButton* button );
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>567</width>
|
||||
<height>371</height>
|
||||
<width>575</width>
|
||||
<height>394</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -207,6 +207,13 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="chbEnableOPUS64">
|
||||
<property name="text">
|
||||
<string>Enable Small Network Buffers</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="grbSoundCrdBufDelay">
|
||||
<property name="title">
|
||||
|
@ -715,6 +722,7 @@
|
|||
<tabstop>cbxRInChan</tabstop>
|
||||
<tabstop>cbxLOutChan</tabstop>
|
||||
<tabstop>cbxROutChan</tabstop>
|
||||
<tabstop>chbEnableOPUS64</tabstop>
|
||||
<tabstop>rbtBufferDelayPreferred</tabstop>
|
||||
<tabstop>rbtBufferDelayDefault</tabstop>
|
||||
<tabstop>rbtBufferDelaySafe</tabstop>
|
||||
|
|
|
@ -243,6 +243,12 @@ void CSettings::Load()
|
|||
pClient->SetServerSockBufNumFrames ( iValue );
|
||||
}
|
||||
|
||||
// enable OPUS64 setting
|
||||
if ( GetFlagIniSet ( IniXMLDocument, "client", "enableopussmall", bValue ) )
|
||||
{
|
||||
pClient->SetEnableOPUS64 ( bValue );
|
||||
}
|
||||
|
||||
// GUI design
|
||||
if ( GetNumericIniSet ( IniXMLDocument, "client", "guidesign",
|
||||
0, 1 /* GD_ORIGINAL */, iValue ) )
|
||||
|
@ -531,6 +537,10 @@ void CSettings::Save()
|
|||
SetNumericIniSet ( IniXMLDocument, "client", "jitbufserver",
|
||||
pClient->GetServerSockBufNumFrames() );
|
||||
|
||||
// enable OPUS64 setting
|
||||
SetFlagIniSet ( IniXMLDocument, "client", "enableopussmall",
|
||||
pClient->GetEnableOPUS64() );
|
||||
|
||||
// GUI design
|
||||
SetNumericIniSet ( IniXMLDocument, "client", "guidesign",
|
||||
static_cast<int> ( pClient->GetGUIDesign() ) );
|
||||
|
|
Loading…
Reference in a new issue