diff --git a/src/client.cpp b/src/client.cpp index 396105ae..5f192b81 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -59,6 +59,9 @@ CClient::CClient ( const quint16 iPortNumber ) : QObject::connect ( &Channel, SIGNAL ( PingReceived ( int ) ), this, SLOT ( OnReceivePingMessage ( int ) ) ); + + QObject::connect ( &Sound, SIGNAL ( ReinitRequest() ), + this, SLOT ( OnSndCrdReinitRequest() ) ); } void CClient::OnSendProtMessage ( CVector vecMessage ) @@ -205,6 +208,27 @@ QString CClient::SetSndCrdDev ( const int iNewDev ) return strReturn; } +void CClient::OnSndCrdReinitRequest() +{ + // if client was running then first + // stop it and restart again after new initialization + const bool bWasRunning = Sound.IsRunning(); + if ( bWasRunning ) + { + Sound.Stop(); + } + + // reinit the driver (we use the currently selected driver) and + // init client object, too + Sound.SetDev ( Sound.GetDev() ); + Init ( iSndCrdPreferredMonoBlSizeIndex ); + + if ( bWasRunning ) + { + Sound.Start(); + } +} + void CClient::Start() { // init object diff --git a/src/client.h b/src/client.h index 05334c59..51ab535a 100755 --- a/src/client.h +++ b/src/client.h @@ -210,6 +210,7 @@ public slots: void OnReqJittBufSize(); void OnNewConnection(); void OnReceivePingMessage ( int iMs ); + void OnSndCrdReinitRequest(); signals: void ConClientListMesReceived ( CVector vecChanInfo );