From f34ce36e0d34dc3bfa473c92bae7668776b4d341 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 16:47:31 +0100 Subject: [PATCH 01/92] added new function GetAvailableInOutDevices() --- mac/sound.cpp | 43 ++++++++++++++++++++++++------------------- mac/sound.h | 1 + 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 0b19ba23cf..1ed51db0d0 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -54,7 +54,31 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData sizeof ( CFRunLoopRef ), &theRunLoop ); + // initial query for available input/output sound devices in the system + GetAvailableInOutDevices(); + + // Optional MIDI initialization -------------------------------------------- + if ( iCtrlMIDIChannel != INVALID_MIDI_CH ) + { + // create client and ports + MIDIClientRef midiClient = static_cast ( NULL ); + MIDIClientCreate ( CFSTR ( APP_NAME ), NULL, NULL, &midiClient ); + MIDIInputPortCreate ( midiClient, CFSTR ( "Input port" ), callbackMIDI, this, &midiInPortRef ); + + // open connections from all sources + const int iNMIDISources = MIDIGetNumberOfSources(); + + for ( int i = 0; i < iNMIDISources; i++ ) + { + MIDIEndpointRef src = MIDIGetSource ( i ); + MIDIPortConnectSource ( midiInPortRef, src, NULL ) ; + } + } +} + +void CSound::GetAvailableInOutDevices() +{ // Get available input/output devices -------------------------------------- UInt32 iPropertySize = 0; AudioObjectPropertyAddress stPropertyAddress; @@ -173,25 +197,6 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData iSelInputRightChannel = 0; iSelOutputLeftChannel = 0; iSelOutputRightChannel = 0; - - - // Optional MIDI initialization -------------------------------------------- - if ( iCtrlMIDIChannel != INVALID_MIDI_CH ) - { - // create client and ports - MIDIClientRef midiClient = static_cast ( NULL ); - MIDIClientCreate ( CFSTR ( APP_NAME ), NULL, NULL, &midiClient ); - MIDIInputPortCreate ( midiClient, CFSTR ( "Input port" ), callbackMIDI, this, &midiInPortRef ); - - // open connections from all sources - const int iNMIDISources = MIDIGetNumberOfSources(); - - for ( int i = 0; i < iNMIDISources; i++ ) - { - MIDIEndpointRef src = MIDIGetSource ( i ); - MIDIPortConnectSource ( midiInPortRef, src, NULL ) ; - } - } } void CSound::GetAudioDeviceInfos ( const AudioDeviceID DeviceID, diff --git a/mac/sound.h b/mac/sound.h index 48336aef1e..8c455a117f 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -94,6 +94,7 @@ class CSound : public CSoundBase protected: virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); + void GetAvailableInOutDevices(); QString CheckDeviceCapabilities ( const int iDriverIdx ); void UpdateChSelection(); From a0afa22799ce5341bcacc73ca184c4a755acf203 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 16:57:26 +0100 Subject: [PATCH 02/92] initiate a reload of sound devices on a system notification --- mac/sound.cpp | 7 ++++++- mac/sound.h | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 1ed51db0d0..36e5911b66 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -79,7 +79,9 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData void CSound::GetAvailableInOutDevices() { - // Get available input/output devices -------------------------------------- + // secure lNumDevs/strDriverNames access + QMutexLocker locker ( &pSound->Mutex ); + UInt32 iPropertySize = 0; AudioObjectPropertyAddress stPropertyAddress; @@ -926,6 +928,9 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, if ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) { + // reload the driver list of available sound devices + pSound->GetAvailableInOutDevices(); + // if any property of the device has changed, do a full reload pSound->EmitReinitRequestSignal ( RS_RELOAD_RESTART_AND_INIT ); } diff --git a/mac/sound.h b/mac/sound.h index 8c455a117f..2f5d788617 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -61,8 +61,9 @@ class CSound : public CSoundBase virtual int GetLeftOutputChannel() { return iSelOutputLeftChannel; } virtual int GetRightOutputChannel() { return iSelOutputRightChannel; } - // these variables should be protected but cannot since we want + // these variables/functions should be protected but cannot since we want // to access them from the callback function + void GetAvailableInOutDevices(); CVector vecsTmpAudioSndCrdStereo; int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; @@ -94,7 +95,6 @@ class CSound : public CSoundBase protected: virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); - void GetAvailableInOutDevices(); QString CheckDeviceCapabilities ( const int iDriverIdx ); void UpdateChSelection(); From af47befe9a24e826cc5c46cfeef810409ed7f1d5 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 16:58:40 +0100 Subject: [PATCH 03/92] compile fix --- mac/sound.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 36e5911b66..9d42e619b9 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -80,7 +80,7 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData void CSound::GetAvailableInOutDevices() { // secure lNumDevs/strDriverNames access - QMutexLocker locker ( &pSound->Mutex ); + QMutexLocker locker ( &Mutex ); UInt32 iPropertySize = 0; AudioObjectPropertyAddress stPropertyAddress; From ec17e48e1b5383039ede74bbdcbff7694ea0569b Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 17:13:02 +0100 Subject: [PATCH 04/92] move callback registration/unregistration --- mac/sound.cpp | 137 ++++++++++++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 67 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 9d42e619b9..b206ca4be3 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -336,11 +336,81 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // check if device is capable if ( strStat.isEmpty() ) { + AudioObjectPropertyAddress stPropertyAddress; + + // unregister callbacks if previous device was valid + if ( lCurDev != INVALID_INDEX ) + { + // unregister the callback function for input and output + AudioDeviceDestroyIOProcID ( audioInputDevice[lCurDev], audioInputProcID ); + AudioDeviceDestroyIOProcID ( audioOutputDevice[lCurDev], audioOutputProcID ); + + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + + // unregister callback functions for device property changes + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + // unregister the callback function for xruns + stPropertyAddress.mSelector = kAudioDeviceProcessorOverload; + + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + } + // store ID of selected driver if initialization was successful lCurDev = iDriverIdx; CurrentAudioInputDeviceID = audioInputDevice[iDriverIdx]; CurrentAudioOutputDeviceID = audioOutputDevice[iDriverIdx]; + // register callbacks + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + + // setup callback for xruns (only for input is enough) + stPropertyAddress.mSelector = kAudioDeviceProcessorOverload; + + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + // setup callbacks for device property changes + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + // register the callback function for input and output + AudioDeviceCreateIOProcID ( audioInputDevice[lCurDev], + callbackIO, + this, + &audioInputProcID ); + + AudioDeviceCreateIOProcID ( audioOutputDevice[lCurDev], + callbackIO, + this, + &audioOutputProcID ); + // only reset the channel mapping if a new device was selected if ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) { @@ -744,43 +814,6 @@ void CSound::SetRightOutputChannel ( const int iNewChan ) void CSound::Start() { - AudioObjectPropertyAddress stPropertyAddress; - - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - - // setup callback for xruns (only for input is enough) - stPropertyAddress.mSelector = kAudioDeviceProcessorOverload; - - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - // setup callbacks for device property changes - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - // register the callback function for input and output - AudioDeviceCreateIOProcID ( audioInputDevice[lCurDev], - callbackIO, - this, - &audioInputProcID ); - - AudioDeviceCreateIOProcID ( audioOutputDevice[lCurDev], - callbackIO, - this, - &audioOutputProcID ); - // start the audio stream AudioDeviceStart ( audioInputDevice[lCurDev], audioInputProcID ); AudioDeviceStart ( audioOutputDevice[lCurDev], audioOutputProcID ); @@ -795,36 +828,6 @@ void CSound::Stop() AudioDeviceStop ( audioInputDevice[lCurDev], audioInputProcID ); AudioDeviceStop ( audioOutputDevice[lCurDev], audioOutputProcID ); - // unregister the callback function for input and output - AudioDeviceDestroyIOProcID ( audioInputDevice[lCurDev], audioInputProcID ); - AudioDeviceDestroyIOProcID ( audioOutputDevice[lCurDev], audioOutputProcID ); - - AudioObjectPropertyAddress stPropertyAddress; - - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - - // unregister callback functions for device property changes - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - // unregister the callback function for xruns - stPropertyAddress.mSelector = kAudioDeviceProcessorOverload; - - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - // call base class CSoundBase::Stop(); } From 9fe33757835d45caff7a09529256199eeb87cc97 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 17:36:49 +0100 Subject: [PATCH 05/92] added kAudioDevicePropertyDeviceIsAlive notification --- mac/sound.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index b206ca4be3..61c89a2304 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -351,6 +351,18 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // unregister callback functions for device property changes stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -390,6 +402,18 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // setup callbacks for device property changes stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -929,7 +953,8 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, { CSound* pSound = static_cast ( inRefCon ); - if ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) + if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || + ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) ) { // reload the driver list of available sound devices pSound->GetAvailableInOutDevices(); From 9da94f9c234226ecfc37b5f7a6c38811986ff844 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 17:39:52 +0100 Subject: [PATCH 06/92] added debug data --- mac/sound.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mac/sound.cpp b/mac/sound.cpp index 61c89a2304..702f548bab 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -953,6 +953,8 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, { CSound* pSound = static_cast ( inRefCon ); +qDebug() << "deviceNotification received"; + if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) ) { From 25adeb91b7be4343ca699307430267c9c320448d Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 20:10:22 +0100 Subject: [PATCH 07/92] add check for audio device still available or not --- mac/sound.cpp | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 702f548bab..cbd6f8994f 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -469,12 +469,15 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) stPropertyAddress.mSelector = kAudioDevicePropertyNominalSampleRate; iPropertySize = sizeof ( Float64 ); - AudioObjectGetPropertyData ( audioInputDevice[iDriverIdx], - &stPropertyAddress, - 0, - NULL, - &iPropertySize, - &inputSampleRate ); + if ( AudioObjectGetPropertyData ( audioInputDevice[iDriverIdx], + &stPropertyAddress, + 0, + NULL, + &iPropertySize, + &inputSampleRate ) ) + { + return QString ( tr ( "Current audio input device is no longer available." ) ); + } if ( inputSampleRate != fSystemSampleRate ) { @@ -496,12 +499,15 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) // check output device sample rate iPropertySize = sizeof ( Float64 ); - AudioObjectGetPropertyData ( audioOutputDevice[iDriverIdx], - &stPropertyAddress, - 0, - NULL, - &iPropertySize, - &outputSampleRate ); + if ( AudioObjectGetPropertyData ( audioOutputDevice[iDriverIdx], + &stPropertyAddress, + 0, + NULL, + &iPropertySize, + &outputSampleRate ) ) + { + return QString ( tr ( "Current audio output device is no longer available." ) ); + } if ( outputSampleRate != fSystemSampleRate ) { From 90d9ecd92610e2fd54d65fccaea2f6afb9fca730 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 20:18:29 +0100 Subject: [PATCH 08/92] on audio device load error, update driver list --- mac/sound.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/mac/sound.cpp b/mac/sound.cpp index cbd6f8994f..8bd3db2a0c 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -449,6 +449,11 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) strCurDevName = strDriverNames[iDriverIdx]; } } + else + { + // an error occurred, reload system driver list + GetAvailableInOutDevices(); + } return strStat; } From 6d1528a5603ca4754b85e1a7386e8d72dabc5fca Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 20:35:07 +0100 Subject: [PATCH 09/92] add listener for system audio default device changes --- mac/sound.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/mac/sound.cpp b/mac/sound.cpp index 8bd3db2a0c..de20ad7dd2 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -349,6 +349,20 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; // unregister callback functions for device property changes + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], @@ -424,6 +438,20 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + // register the callback function for input and output AudioDeviceCreateIOProcID ( audioInputDevice[lCurDev], callbackIO, From 49e57ffbb461ca78fdaad36b46989f1bb9fa45a1 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 23 Nov 2020 20:37:09 +0100 Subject: [PATCH 10/92] small fix for device notifications handling --- mac/sound.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index de20ad7dd2..c5d27d1e1b 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -992,10 +992,10 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, { CSound* pSound = static_cast ( inRefCon ); -qDebug() << "deviceNotification received"; - if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || - ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) ) + ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) || + ( inAddresses->mSelector == kAudioHardwarePropertyDefaultOutputDevice ) || + ( inAddresses->mSelector == kAudioHardwarePropertyDefaultInputDevice ) ) { // reload the driver list of available sound devices pSound->GetAvailableInOutDevices(); From 270310d043e605b7ce85ff1834b7d32276e0bc04 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 24 Nov 2020 20:08:54 +0100 Subject: [PATCH 11/92] show warning message is previous driver is no longer available --- mac/sound.cpp | 12 ++++++++++-- mac/sound.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index c5d27d1e1b..4e76c02af0 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -320,16 +320,24 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { // find and load driver - int iDriverIdx = 0; // if the name was not found, use first driver + int iDriverIdx = 0; // if the name was not found, use first driver + bool bDriverFound = false; for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) { if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) { - iDriverIdx = i; + iDriverIdx = i; + bDriverFound = true; } } + if ( !strDriverName.isEmpty() && !bDriverFound ) + { + QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previous selected driver " + "is no longer available. The system default driver will be selected instead." ) ); + } + // check device capabilities if it fulfills our requirements const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); diff --git a/mac/sound.h b/mac/sound.h index 2f5d788617..646a2ef969 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -28,6 +28,7 @@ #include #include #include +#include #include "soundbase.h" #include "global.h" From a68b91eb918354feca3c28a6730747740318414f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 24 Nov 2020 20:23:20 +0100 Subject: [PATCH 12/92] move audio callback register/unregister back in start/stop functions --- mac/sound.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 4e76c02af0..3441d442b2 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -334,8 +334,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) if ( !strDriverName.isEmpty() && !bDriverFound ) { - QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previous selected driver " - "is no longer available. The system default driver will be selected instead." ) ); + QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " + "is no longer available. The system default audio device will be selected instead." ) ); } // check device capabilities if it fulfills our requirements @@ -349,10 +349,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // unregister callbacks if previous device was valid if ( lCurDev != INVALID_INDEX ) { - // unregister the callback function for input and output - AudioDeviceDestroyIOProcID ( audioInputDevice[lCurDev], audioInputProcID ); - AudioDeviceDestroyIOProcID ( audioOutputDevice[lCurDev], audioOutputProcID ); - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; @@ -460,17 +456,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); - // register the callback function for input and output - AudioDeviceCreateIOProcID ( audioInputDevice[lCurDev], - callbackIO, - this, - &audioInputProcID ); - - AudioDeviceCreateIOProcID ( audioOutputDevice[lCurDev], - callbackIO, - this, - &audioOutputProcID ); - // only reset the channel mapping if a new device was selected if ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) { @@ -885,6 +870,17 @@ void CSound::SetRightOutputChannel ( const int iNewChan ) void CSound::Start() { + // register the callback function for input and output + AudioDeviceCreateIOProcID ( audioInputDevice[lCurDev], + callbackIO, + this, + &audioInputProcID ); + + AudioDeviceCreateIOProcID ( audioOutputDevice[lCurDev], + callbackIO, + this, + &audioOutputProcID ); + // start the audio stream AudioDeviceStart ( audioInputDevice[lCurDev], audioInputProcID ); AudioDeviceStart ( audioOutputDevice[lCurDev], audioOutputProcID ); @@ -899,6 +895,10 @@ void CSound::Stop() AudioDeviceStop ( audioInputDevice[lCurDev], audioInputProcID ); AudioDeviceStop ( audioOutputDevice[lCurDev], audioOutputProcID ); + // unregister the callback function for input and output + AudioDeviceDestroyIOProcID ( audioInputDevice[lCurDev], audioInputProcID ); + AudioDeviceDestroyIOProcID ( audioOutputDevice[lCurDev], audioOutputProcID ); + // call base class CSoundBase::Stop(); } From 4119aee98e34916b0fe4f8a8d296d52a9d6d8304 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 24 Nov 2020 20:35:51 +0100 Subject: [PATCH 13/92] bug fix --- mac/sound.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 3441d442b2..5225abe0fe 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -319,6 +319,9 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { + // secure lNumDevs/strDriverNames access + QMutexLocker locker ( &Mutex ); + // find and load driver int iDriverIdx = 0; // if the name was not found, use first driver bool bDriverFound = false; @@ -470,11 +473,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) strCurDevName = strDriverNames[iDriverIdx]; } } - else - { - // an error occurred, reload system driver list - GetAvailableInOutDevices(); - } return strStat; } From 08c57a91bbef2be516dc5d0d518c60d744c9c66e Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Wed, 25 Nov 2020 13:13:41 +0000 Subject: [PATCH 14/92] Cope with large logs --- tools/jamulus-historytool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/jamulus-historytool b/tools/jamulus-historytool index 4d974e871a..fbe07542e1 160000 --- a/tools/jamulus-historytool +++ b/tools/jamulus-historytool @@ -1 +1 @@ -Subproject commit 4d974e871a0059089881453bbac42b4f64f8bd48 +Subproject commit fbe07542e1d2824b1290cb6f760704b9d826f680 From c586627f88350aedbf46e20d743343d0b02864e0 Mon Sep 17 00:00:00 2001 From: geheimerEichkater <67019343+geheimerEichkater@users.noreply.github.com> Date: Wed, 25 Nov 2020 18:25:10 +0100 Subject: [PATCH 15/92] Server Icons for OS X and WIN --- mac/jamulus-server-icon-2020.icns | Bin 0 -> 203447 bytes windows/jamulus-server-icon-2020.ico | Bin 0 -> 117805 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mac/jamulus-server-icon-2020.icns create mode 100644 windows/jamulus-server-icon-2020.ico diff --git a/mac/jamulus-server-icon-2020.icns b/mac/jamulus-server-icon-2020.icns new file mode 100644 index 0000000000000000000000000000000000000000..598621076867f576fcb79acb92c09051bab38084 GIT binary patch literal 203447 zcmb@tWmFtp6eZeC|As&tF|+{yph6%3 z1lqh?|Nm9I5cEIy{~IW)E?Ex%pvNdkOK5om7YvZxQy1`hQbeLp?Xl(cEYwlu zk0rz*z5odt(n`H%Z^Rf}SP?}D{c;h{2HbLy#&UT)O9A<)#P1U6)R@Ya45KQar6N`eep@pX>DYywP?3dfxNibN|m^nD*V|H|ByZhCA#I*cyxw zY`6v5;=eH2658U#r2m5?k*;92@gcOTxIj9U3)`E}2Jk!8Eb$9zB62R=I8YmHnKBD< zB96V4Fid$V2AH53<(g*Wk+Jg_Zw^6aGJ?;<`%6F!11l*)dBd8BmiZX!vzioyaKVj< zet3fdn+vw?h&9h9xKy$Ne1_Zurs8Rj6tE(fVZ8AtokeGHE@ZgR+JMShbWzF0(Kg*K--X#S^AyzFu;a?(w zRT4gIeJ&(7E<&+?vAH;?zPda7C8b;-YUHq7FOkRZB5BkcXtZ+Xx$iERHn6QWG&FR4 zwLf9ERBL4S>$?o2fWV4ws8-=in7EjDn@V@!9vPr!wovcoFCbsiDl@%s-U*9+zB*qn zk-XBfaOh=1UpxH-C@&KVAk4+ngIC!}W^hxdtHN zeYwPbYhZi{?JII@T?kPx24V$v56X-xfX^qe@Adh9Ny}QvM}LCE>F4&uhxLuBg@GEB z5*s8PB7RzK_)lgOY`|&@qWc3z3EoxfPQ%^dxP?Z`31++shrJ|fx!+(Q$bUg0;hq@Q zuPB)t$w>a7S3LVsrjNLpw6`;Mj6&9532bCq$~qAI^?ajy!&gU(-cR-iqwz~Eqt83F zw#!aQ+b1wbSXh|d&R~?4(T%mhu?Dj94`NU|R+<6mkjOnBRHCBgNM|};U+3a%0PieJ zH3c*2zR+T?>+y7B%f>^hTUU`Y^P_w{{Y*<`o)FZ5WTbUzvZ+A`?A`-KZ9yK#nd;g% zjIces4G~dy>F!_dqtL3T z3&a^zt+%VRVa@~5u&NZrj1SUiW)XS&zailWlLR+OwG6(!qShnNqIj!MbVw+5!S}SJ z4?lV(WK9bMthG9%-`4W`{?s^Hj&DolBZ0wBy0>Z6xO1KO87z&DhgT6n?km3(oGvI| zRb`Tn?*h+`(vIANHjC#RV07UG6m00q^!a_d(iE`R^3}X^+?M>HMwkSs^fhuYM*@5)QzNL@L6EdXx7@C z_+)k=v#Q(Kh59>N4-BTQl+Pk^np}p68*@#?la<<4FM%Hqrg9jaAf{<+f_)Rn{H(Zd zf4u^)5wbHgGRg!!Pi+>nW>CSMaMFJ$(=ZOhPeLlGdNU%mw*mu1#Q& z>&OJX#4!4M#JlDSottb>dtB}e`GVHL#vEYPo!MuqLTioPkpx`=R>KQ=!AQ#7!k0bu zaD>b?M&o_7K*=u(HlGuBcWAU5{lms7fRC+tOd`YZQ`&v)3h7rpAH2>tY9u8k-2>ns zh(R{QF<@Lsp==!SSbrFb<>_*Rl~zqY-X>{kv=h3iY&>RcI<~;EHM|pkWps4O%gG-z z)#p#+z2msnciIguov0WDYh+%C+*sPv#zg!yA3q}AihJ>J4L#d|O{7B5<0Kqbo0D4X zmymVzp~o$-wAYkLOOHkqm9+U(DH?%E-_Ez~*siWU8S>)rt5)ZDIAS=LAS!jb!+8G5U8p@5Bwu{4e@nTh^~y z>Kw+nj7681*rIz_QKTG({l0xdGPx@IYhH?v@v-BM>V_ZGQ)uOFM$kLuAurJ7{K%JK z&B)qm>U#Q205p#$74>hgt7yKvbhc7l`cc`RVWMqmTfkT*hS4}#dley8;aV?R*yb&A z3EUqYNA5&FIy&mafXL)kQFM5Qaj2EE7_`E^CU;KiJt<_{7Y&kq-wAVCs(kp|WOalF z(Ps9lM(an^e7x;)Kf<16tkvN`qHMy+$??I!P`|nAv|tRd;j^hOZ}K zkxMWm?v^>SSOFkuL!@FYtNVVRBq&E4XS0T-nBa~aImvt()9<_q7@))S>-hGkfF7$@ zcCk`cDT5VHB~*J*vz}#70HqnB{enaG)$hDJx`MbWP(8tK@IZG9} zVO*lu9h9BF$V>H}2pHtJxdO)>Hg7Ajg>cQ(Qg+b-t=d&OX~9o#Vbm5e@z`kvY&UqZ z0h0Xk+ZeYgk$WSdwP>v)meaWcA%7T}P$zpE2T|*RvYEje-k-AziHz7(pAZOpP?eko z6r2t64yF~35SYGI4VWU1I5+xSTZx=RAhz>LuK=W`v>XZY1U<%47td2-C{)crhSSO4 zKf8Sly1+4e_pd7Zw#kle0;gHPDm8MT>I+K(S!jNN5%N5poj-}=6PDHo({Z4qVG(bt zNSgUDV-Z48go2`C^!iVq`ALZA1-A20>{bezc#89{;W!dFw;xP~PM^MwtN?L!odcv+ zThid2dTG3B9?NA>3Tc$m5z%FCjtM?&aRzV&qg})iZCx)nn1>WIi&PqWv&O{befb%8 z5)gP>K892JCZ9{_akaCuvOKJS!d(Ybs@E_1x)$3*3!fi-CAh4oZ+=JQ7m-|g z4{MGx#VTtK1xS%*njVp_vrdhr(8W!}>9h%#eaia2)TQFBmu|PxSX#zPC*qK`-2$0+ zoZ6vFOiZMNLP9?A`5|}n+}=yvaHFss%=QB&0RaKmzmr5OZB7Li78Zo6j+zGQusY#6 zybf14d)3mQ_}#3(<7rHwkDc9JynhHp#jL%~CyOu6Y;x)EpoNQ-@w}&J$Lz7d&04(@mwjN ztJ`H1G0(L~q8hV9z)VkHt}bP&UM3q)dQ_L6`}p)=5BTAt_VSAb=)vBJLlW{%L(kUM zBRn>QamN+g)sIHPds8Mn&kBeWMvxfv!7@0aE^N{rPrwX*CzL;!&Vw_LG5y;28jTq2 zG5UCY0LK-RJAkhbZiaDXc(cf%PI^{23C0okVDS|yoj)Q$d?>k-7eLix7^ES@ zic^`e(TnTbgXQcJfD_;paiT4z1o9v>*R|j*@ChfpH}?5e5Ypk5$JESL%%{ez*t<_K zy(TCI4c%CePAtK3zpxHO+!jcQoin{cJyU)2Z>mDhyctfNJ{tHx@5BF;ML))PqVYZ7s##g}}>4FJyGEr~C zA53nqV-NTT{#jX`i8B4cWyk@{^z-}jUT0PP!_hm!1)IlO8&#srPgV?oz^YeEjNBO( zg<|3zpSCn1=)d_c%^;ePncxC|GQh;097zbA22nAQY;zMHDd>ZsK!D(Macc+RSppkW z*iY{u>OlHdq-js;|LCcLjEZ!vq-lt)IXfQ!Kq>!!Aj)9qF!28%$^)WbCZL`FD?}Om zzYyjBW&p^?!+HS#6qWxkQ9d(5$i$Or74_njPtGm=C?f+*LPc(m#@-A5{yijfmWP>j z#>mJJtEs>CGY4e|P!}H-?v~+~jA1OjgtYh=Omddt`MclWc&{fCVD>chhv=K^j*HgubVHRMH3BI$w&A?0pvtcAw!((J1LEtUA?}u5W(bkkA5lSwsv|=a(jOUPHeW&>6 zgED>gWeVif3=G$UHwwF~{12E8Y=ikq*ifQqDvFzl_5#0*XIlO8kUkBP1)P5QIp+`w zsohY1L#JAIu0tC9;E%(;PqLMI#Dh4`2TxQE$`67c-DJSHyx9c5tfO(muFtZ=j)Q*g zU9$IkxeN#shMR8!w(w0!orz}AF9h*FL`zIvbm2Sa*ji;88FH7?X4ZpOcH5PEKlZDG zb76mj+y|{!U>?RO_7mO7b_@O7422QY^f>7H|M_Bx7Y(3TQeK!rCTEWF2Vg8=dsCw$ zNjLdmRBUOI-)BbIOoY>OvK+&uKKk$+tK8$8!2X>9d9tu)76omY2`A#X*FRE#dMkL} zJdK_Dt~I&<#Jx>hZ!bqg)`egVn*A(psIZiTlees z$HIEh_@*AzP73$4xwZ_;cquaksbp)%Ex}*v8Y0|+%IS7l5YFxeB$bqWHD-0i~>{AY2^OnYF<*lXN%Jt&sLaCb5S1zt^l;1t|ENI8z5%v!Er&_+r8Vz+0E=)SPGFV{09aa1fUQ`#Gn`C;ASeBgo5rS_ujUMYXx5;J#NwQN?b}M0uiEN}l~CrQGgIZZ zmSBCes+8l?z{k1>Qk&HSWrBP=&SM?~i4if_epdI3R+t+f28z5H;e852#`~SgVIJEi zl8twqL9hpBK3btulfB?J((e%7!MxT_g%bI(0m)_scWi!J$JUA?K|11wUKJePk zNl)bpaABQ@Fsq*TJlEPm*?q}vQA{uT{!mM(*>4iBPDIB)CiKG`FMs0@=N{l(s=}JM ze|X0~LYF=B>G7ao09i1JEb#SK*E}=2aI$)whTw&N3Zt0UIm#Vzt9c?`urFnvs47;V zBd*Q#MVHPvcTVK#usC|YVNUVC2$9C5>&ZyL_x4E7R!gR*A!sPT<2)cw@FRofU?;wI zZ?G>m4j*swumZYffG&}kg%u`X$EL4OeQ}1Tq>g>(taPC`? z^PvpR2mi)Z^x2S%G@yHR=|}gfL0QGBW>e9sW>wPaT6^j0W>>G^-OV-Q`z)0*-q3~* zRB|}}t*PpvY4y9!neo%YJq*~+eB3l%3q%zNyZ+G(-7Sjx9%g7jG2?}ST?K|Q>wy;{ zV$dY;`rWVGegS$LpZCbRx-I;QpwRUr$uGJ4ZBu@?=;Ua4y&)coZ-c4)J0Ity>h+aP zqr-lw0g+?%`yL0lzl7xwPur$?upV!bT0egF|THfx7*N-wEu-u6dShuTWP>* zKSW9|&h_U3;0v~R<^+Ea@o<@PJYa^zZ-kY_A7FPyh6NfD%@6T4+cN3ax|<{;X7L>S z331GK@{yNWGiu7{s86bt)R(TejTt^ll_?DX|B{LZaVsAkinFSom6m4WPU9 zcI%fVjQ=pSl`S?4BaNotqUG=uakfvCRi81=<5j63KHx@AjkbJ zS%Kvk9wwMsTQKsfo?>vwV!x<}V)LzID+Fb4TId`V?fjTnL#+C!oZwOg$W4qGn%wJE za6hUZ>oUc&GNUSJ^AS79kUXvEy|zBh+o&W`4ITKxDF92X}uD9dL7 zbMQvrL{-+#IwxgrLR!AAXqfJqjW}})Gey8hHUrgQdzey-jGym-EdLsN zxZD*PYCt9}*U{#5B&BAg8yPn^PfufEC~Hl*`66}mMRD{X-M}#kNA)+llFivLdBXQ~ znN`5(p@XS0)(F2LDk;C3DTF93l~dN3_J{xjJ513-<}0%{;{;N|r)2Ro#@g?LT$oc! zY~42+T_5GbePxS*d!bY#zO@vCVNf1R(CuzIU+}HsBkJ>+PrnJ70AujeZON6=jN!(E=mfWUJPl4WIn$I&hL*l;uw;vA0pL8h`i z&ummO!Qaa6x?irm-Wd^|&>{ZhPqh~F&k)6#NzU~YyQSo2ls8H|MN*cXm+)92ZQ@5e#TL!d0)9R#( zoCl0;_87t7eL}JJ@k!Qdi?@jF&`&P3mbVSccA=>9mrh|rRkR$8#PUQl1Cx9)z8hh<02RDiPnr;DOwjyvBb-HLXx z^Pkrx$QHPc+D(-4Cb{@;#BY1}MMnHBl9>d+rEAWfqhi@OPR1UI(BvbH4*bM>G%bw3 zLzIj@mD(xIMNxG7UF9g$h+z_U-wXV&qO@^!0{ym%ZMea2rZ?ELn9e1&MqT4)ZJVt1 zQv`%x1;Z08!PR_LUyw6N7C{$hswbPe$p)>F`d5Ztqo13luXvq;VJgB(jJ$hb8MET@ zzNhE*MY@820A~xHvLZCx{_q42xHL#Sb*zoLP{kpxS# z*!b(6&{+O`{vPv#+Ew5>{jx11@Y94OoHB3hBwc=5bjrWWjK~^RwueLd{sS0084>B68N&9=xVbhbKQ6}PV;JC=kQwZw8*t8qd2aTYQ zyf>2XWzh-5WGK9; zWb&Fmm<}MHe4ad|xA~6c%^}0p{w zs_K60ecd93RDU$0e%U`?rxBnC`0&~7K;d5{n+%!Y*R`QFt5l^i2Lq)i%hr?oR_1kI zjTk#Ak3YQNV^dDD@*;Ct;CUS11|}mVc2=X+6z`{w{?5a%)fagS>KcMX{SB9h$IBdJ zMh%ViF($}yR9z1ry^MY;Q#mtq^eZooSaL)~^O77N{{YrkdBgB)k3S(dEv& zNWhQAt@MD)sp)sm-5e|E`OEX*6D0mL00mX3C3F<}AJX$}`Ztlif4iJ`y|S0`Zpuy} z$tr1$9Vf1Y#zrJ6W+oi#5d{EmFp;hyZQ7>4b|q^jlfvz>{9DgvzmM~31bJz{1AQHT zcGBgGq);OX46F2DQRir$kQYAb&%$dJ{`+daP1bVu>&Ci_TuB9sQBXai;+b!2iIhp= zYMW}3V8+DwNPb|S>u8}-Fc$gcj=~7#=<2MM5vVZmMidNVN~m5B5%7`>jhhpH6!KKO zL!elRpISYDkVv~V04##{cxzCLF{d|ER2^~f_m{cY#EF`j43P%gdR=K^U-`m@qFM%^ zX{OWU2k9k1tvK`aGfPyAU|B(6XQ{~tK@GNo-huCC?pc-u1!!wx$Pu?Eip0ZbH&h^+ z{nP2yEb)yeijOB#L7$PmNEta<$!N#Q^1mx_Sp5?!{N7rWrh^8qyDe}}5_CVLY!+rw zPQ89)L<~yL`+PY9dCA3_Y2(35%M*Q&biX`kZ-f;L4J{oNezu3o+20VI?r0{{bZ9FnbZ-eO^j^To z-_UhUGxLP5oKIsE7>9&j-X(OSKVxLK|0S3L3zzFlCHh+CbO4=K6ou4Wp4H#qn&0V- zq???~nfNxGztV6n0%N-Ynf)|Rxwi|7gm*usP{l*c{42os$mjTx zXh|atJ7|39`adGs`OTK8_0Kw>bD$wb8M>)E8&EIu? z^#-C+8bx=?Bh&f60}pq;9G_*l;h4Z8F5t?)K!)*L50dAmq|L=CndK>KG@xRj!80^gi0W#kPrI ztcqP%ePb|pJ<&-Pb(LPf=#P>Z#|#z&9d`#8;22?}OQalyp}}2P^MN^rno4g5zzd1Y z?`kFFIxNtOwS6aKCd*o$*dihMgB?KZ?ZLcjPpsJ521Hnm66fX#H&S)-GeODA4&O~T zh`>=Jey-5lsD3L&-OMtyE_ZavB&bHIU_99AkmxHQ_t`*SVy-_Thj;ww9$Rhp)>`!a zdudHU!`6ILS4rN|`8^_y^X-P;`IvfUwQZ!67(R2L6QIV$K|sCK(iSSd61L_dD^Xsj z9VNG2mW41_+Ek>@hN#-$d&kZEAsiO4x=(z5>^m{Vm?c6__Y8yz-F?GEl?d@5NjR$> z!2vy<-y#lgtq%S0nDQ9s8y#CIzJWmsXNxifBCP)k0`9W>FNX*^o9_m82MVq0fqI_r zsK2Xp>r9s$-xDmia%m>^w!#P|l3cv-fA0S%oA$qxF*l<6O2@GoczVMS1xKNYzn^8D z&*2Mf^4k`n8K{vE;|26Qru(Y?8)s3D5$%hJ-V;L#ulbGLNXO5=WhUUeDOG-v2d|_L z(0t&U>`;zU+s_eoPjqpO9Am0&%YB~7;u>L{Ix5Ql4blQJds**nS(-Zq+I-^-GP1#x z#BuUCOe{Kt$})1CwG`AHCIQrsdd4l>3n*0mSohHv8s|MqukmfCRZ%Ss%FV=!ur%(BrV~?HL3A^*lT7 zUbkcq1_eLcTZxSWZl~h=o}X@8jQc1p&o}uEM%H0&62`i};nlC_Xho3Oj{S-y;xZ-=8?KyzXvCV#xE8r9QflfuFq^?nLM_edB;&CXLvju(k_j!axJz1{* zPBq00`}FE?T7U}4A<4@vFHlI59%#9clp|Tq@_{s;Q1PSrvG+qg>GOf6YvBw9s!_-S zs|A8eZ8rh49_9UpU!Bpzzy&D+1a~|edU@aKY-0wp8+jcoZnwB+ZOtS93=j=dRV>@A zN@%POxC&w$^B!%P&%2(rEGhD)=Q~6i^)?)rp$x#AG99^SA9;U=A%b*c>S^(E(}?+g zN;ZA@eAGc#a&?pOao@eh-w1bV1}?%fkj8>!k>+b8-aQ6M&_E2DX_isp{zS$^I*Y++ zNGc0-Wym-6S%LG*sRlh&lR*eVK?uXupO%?6T}H?nEyl3BxD%;%t5^j*gAYgGO(&ud z(0Z z%TV|gw%hOCQ}Hh;tT(Z#h=E2ukhI|j&1Fwzi#guIGSAzclmxJGWj07Ajd|rAZn|%) zSvseg5~oZt)IWF`ZlaVU;@9fj6c4&&pE2bwv5D>%K91L~MkYGjpbooD@mTJ(hXs`0gsDtC)c_6(@Drv??b8mi>% z;*a%sLg1bE?2?T3K8WRtl(BQsYlrRfHa$LLl;>)jw4>!aZ(B|0Ry-uH{@&lLCI)Cz z#C-h_#v!~L%XP7`E`p>B*eB9Zxq{4;AAGlFrB- z50&YHrB%tbxz8(=m3MMxpPDV*0y+PLFU%`s>d&NJ4;`)xx_AM*D#l`iNllq|*G|z& zJTG|M99Kw~;rcuM==ey{YtSh~4L6=?)sVI#y~D_iIy;4<1s&jUHL&Z|@J>mt9r*=nv!qzNbx=FMuE;4 z#rV!HHAK>SYu`G(&TBV<-e145R8CHQ3d`e(9%retF5*VRss1+At36z={i)9wa^)kL z?}A&~!i^-Vf-3xI{z=2_U^)!RC|x^$_up{s+k&o%HZ=F{>W`iqAFsVV*?#cLDdcPY z>=eIbGmn~4JJo6&_=R0YJ%vtHhuz`s*&l1jpxd`4oBc~jKixtua(SlMe#o5o zGE2!rV@G*cH=?j)HOg%SA04ck7>pjPrG90%K zmBGp9w888>Z@E97b_La>C!TIkE)^)`m~2Nz3Rj_|?yb$mxz&6N8xb;4^f+Z2(H$Zq z;5HAi(SKop9DP}jjE*H{Z>ZI+%XiKZyj}ZwFv7^+wm-Hnj7qfI=t9b; zFZ9yXHFODEdh!`}0GYPuOt_Z%2Jot&RdC6}?wrDI+TH0tqKaW(NUKsd7knGHAVt-* zn=4Ux&@v5-Y5_4rDkMVTA6Ygx^6e;s=K=mc9Y3+Yr30rmSg~684xY+#U86V0%Q}0J zwz6zKU5IY+ZF3S~aN)}=Fpcc!;ow*Nh6+;ws@5ncjy!LgKoc#r1{+BoS|+aKgX3St z5&hg8w5uw)DH7*{7Yr{_My^LbZ%bz6=a zkr)Y$LX$KDn@u5 z#?b$%LwK=BWgM9g<_gvYm#+|qWE8w)?tTRo$N{ch`O=K+i&Mh|rjpwa@-eP?0sI}s zUl8#Xew2lOl+xVm0y}-!BT@+TUjBu>i zmzhAP5MjW!#Q~0^T7(M#*fN9Okedbsy?%e=)Z9$~?lp(Ahs>e8?iE__CpM8IoBWD^5M!k;Y^W#sWM$RJ-Js#${{rgio#=`p$N0MjG@wyc8#X4crx@rwB_))v7q zjTxL#GRr|!7*o6Iq@>7;o&KghWV%Dtnl!oaw?urPoM1hzTCy3Zq`%ITwSz~?ZUF6{ zI$67^yYFCD$fYzcX2te8s$QBB_aD7WKA2o=Iq4)sl$s=0u`N`vrf|>Y30M`p<&Kmw zLZ-e!1QQFGhPR={LfbK0FayIJN`jvfA{mn5FfS{g_BEiN0lhk4GT3fovsg)@n zB*PBr0tHi>(Fvf=qGDi`o3VtD4WkT>2bA9V0;1A{2u#DAfV`kJFe#8I+#or#y{l==?~a%6=M3P@=3(aFD0!nk{+LpAE|73X_>@_*7Q%6yCpU!shY zOf9+@O+;jHRrV5nKfhmpo}alTnO?DeQ1%O8?%foz#;~v3Tsf)kzSFlai-Mm5p7X20 zDK9aONL?s=h53r|6{#9S7?lv&b9-lI|3S>372yqiUE}SMPBe-}94(quUbDKa$`&2g zZHw}yFKQjxTl&#j)892j6QBjM0{jUPv58CxVoH=WV(z!X));ATR!Edk{#N_acDJnai2zLTalE(jtzQ4XSl51nQF@`jfUJj<#V?K%^lWvttSz zWc=96x|9wCFb6<|E;4e>hi*h+>~aY=2o^&5v z52gyR3nv(yC?H<;G9g9c1uTwNW&=vk^_33<=LP!C8>vJR}aQ`WPwnCEB)mceR03l0Xn4R5qy!B3SH_RA8?*749b1R zxb|DuzW+5WG(dgFckqCt#dgknBy}d4WfA>oFT~v+0RKXgn4P>fOM*5>yN&S9A3yGh zL7B8l-NXm{W5wH+5&jWC-5EMuA>K>Q-}Xp)a@SttEilVcb8gx^#Me}?+llk)10V5y ze>XT3JPwxt7|sdOL%p$ksrbzr7oGvkvxB`K z-nw576Rm*jf_IpmV}Y7~dO=bmh+4&gpg>eo&{yCMPQ0Y`sTi(!#mLZ`mt$s5w>eEoN-2h2Wd27!)_$lHR$`ao48}Q58C>$ zJ|gPP*)3h0!Lg4>IsMsEUqFvhJNKpU&(46P1c)_j-6>>>o|I|B<&CFR>MK;kdf4SH zBsu1$q2z(VLyERb2RA=W9lq;*pL~@(vT>zPlpH|0HD}}*> zE_7NSpw}B1Pz+6@%BC@Dqoyl?FP&pDd!N5RY{Ydp;2?VOCzXIC+h8_)QIf*R7;)nH zbyz{u*>=g`En02~^Yyke&4dDRKXKhHFHuj$xKnad6N=~9WjxwC(+^6}EJ}$&3hi9| z7pcCF8G;_ih_v0L?z0m8oS9q6DJj&pwm~A%P&J?XDX>RGF%;o`wGC@1>=AXpTc2$^;m&dmc&fnBxD6c(+qLd;#|1d zz^_iF^;4V&g)dYP2}lj^i7aCvlH-%eqXI_Ia#b+(L&Qj8++9b)i>fJF!ZY%ke;hGS ziO==lxt;*OquHX+W`{K$=#;cj!wV0c&vG=nlN$fmmBt}lc&LFkZ77BSMNGHOn5E0h z&Er^zTRLF|gaB}Ytp(`7P8aE^1kSmAOq?)RO1?J5eStr08JDD{igE>27A6&djps>g z1CTlE9Dx3bqfO4--ky1te$djGxCZkP;{WJK;M=2haeMo6Bm(%aX|-X;T&A#3qstJU zE+N#$!PVH1A_#KCGgMh z#RV!&jpvAK&ZzKhwHZ9&7+uD2 z+XP#gu0vUaEVLp>xhtf=U&=%?_%|xd1%FTbT^GMil_t1QzCeo1y^wPh`({ZD8#>YJ znsujC+$~W|^D4t|DYlo1hT^pZ1HyZGGK?0j=obpMEk7mb-hO&q9|K7KJ`1tm zQ*M7V>7$Hs&xyx*D{L?9&Ij_j=I>za=A#A=kngs7f=D%eRd}=4>--zg`j*U?9 z!wMeMw;he)9QdGt|46%Jcnvn5wJcL!rDT+&UAX%5g?{YSK=_TPsQ*NeF2;MOD-m0=A8@j_#Ecez3+3zH5cli!;%fZ@rqzmy15!O(H58?U4wy zzlyMHbp;x)!4j7@3IYGkt%GhR^MlX$&3~7x4?}C9a6H~RW$!n-{o%Yi6?H{(hwP-4&^b)?&15zoWB$4T48mR>yb5*u{vYd%n={$WQUYs9YR_xOKyQ zQ9)3phgj_OCdD3y{xk8;)mBa0hN6|k1y4Q`@xwrWP5bUGY}DeL_Lqtn|IqA#@BD>9 zA~xkjS-L3FG8i&kz3oCC)JN%<9liXU18qa#6!{7P>4ij&Gc@W(yP|Sn~%s z$b4&a;ad#NCrs)e<=cz_J@tan7$-8R)n-!mb$bI}W1$XGKOU3h)<00=)NWA(IcGZ_ zF~UrmCUN_`=LdFX=RZedph(X%%y(NoKi@@k8H+?RoHBBd^&t@UeY0f&!Jat}Y(oH^qh@ z@4h+T+;Ywd_>O)ctRMa=j)U6Ip15T+igQ+)tVx``;%~1@SKr}&B z;!>qHgW(-BkWvTnHk*bu6{;suMpTC)Rk^WDF%4`$f{+ME3Hx}#7F>=YB{@YL1Dq3 zu2EU~#v9N?$E})wZ8c98=xwz)1n|5?p z8oU?3_I1;r5x8tW5n0CU%!YN8w*DDua6a2);%0a@vW&ciF>P;H>kRxQLqG(ri@HCz zT@ne~huj>^$4Q|J3@)A@EV^NSCmW_P1T~{|t5c_k*4sgJjF5RfkY^iYx6RWBzx!Wix5$pw^%9o~c@k27I4zNHA=wOkuKD#tnM5qV zO+G-a>s0e?GVHZ5n-sZn`vckM?6A(G0iGVRqxi|F6ZqMNu{ic!`R3U}eq6%1zh!EF zDUygAT@#L)^8=r3`_?uUUF0kajpctWp_Dva*Ofd(;AuRa&~kX52ZzB)O--gYuNx}J zJ=Mjw%E{}r)g~{r#FUU3uBjJ98E4r}yuID`PONvhy^@cgA71!u4M1vs31ZLz^v=;K zcaP11y5Hw7Sv@A3O${^nyehiYrhdl9P=mXq{-AaaTTYov1Th6zs&qqNb_$z40cpnu zHCj&-@MA%b+6?~o>8Z8vGN^mUN)w}yH+XjXhyp@ytZnjhCErd9Zegv)=i9X0A_7I( z7`<+(>iD@X*9*$j?SY61s8RmNh|ZGbdoy%P`ih;e`;% zmFIPoWU)6mhCj`p=UnSK1{Iv}=uwf8KfWePmCTh6l+LAPDCqASR<)#58Ui1j_tSL8 zq2++C#ivP(+u)J{wLOR7Z80uT_@f@uE!Y!C5<_M4;TGMB z8;~8C`!<`|gh6|}N*`@vbJmjzFI9>7AFU@dsYXZ2)@7TcX}ssp-$rc43NAR&CE1vB zUc9T;U{X~lLfUKtgK?)`KSdMxQ)i8MCg12Itk}^KA)D)pV}^dAWix6Xy)>VC6oeZk zn0|(WG55^kRScdfDtKMi5aosV!T6Ex{4<>5iBL5@x;FZnV#sON&i)?Tqix)&@cRdbM<0=m zC#~FdIMAxJZ?~_;YYP%PeydB{C9Eyl_K@pQX~y_q6i%MTPjs|g!1`e`6%!0NfE3Li zWjQj)8&#_e0min&3&vktLnegPjwHPhe(EImMF?z&UI9@km!>ND`LE8nyVF)$5NaON zernSiS?0^y&P5FLG1Hb`>z|c9EB)sovYsS>H zdEZ)^SJnUqmeFZABO!PMbOOifd!tbF8~A{n7>`cJx+3)H*A^l!Ax@3jx92GrC-HC3NsgDg zS@;#;AwR9>HGO81#^r$fKXeEAevYGljz-LHRt(sP}&C((Lq4*LzP-gwb3Oz&2tk@JJ}Ja<)(cB+KXK0%|6?3iFfPRW2R zy*7|xxCHtV2zdbZDJWHbwF!$p30}`@L{p(V6})*szks7$>Y{+@1q7m%ghTAL!OCF9 zS(r2(n2wivWNNhw;i@pER6n>NoIHq_de$%zjm=z1RL7F4lUN&s7N#)DpyR zUy!uy%wYkvHmS9mVG%!f!lZq)^)ct3bgpJxjqv%z+xA=z^hRG!9v8YcWH4?f6fpD0 z2auAc1BoKq(vQyv9`qPSuD6HX5Z1{_*-gPeuhBP4$1h0jjIG*QjYzFg0X}iMLwsb~6EF#Bc>VTU5ak`Dnc*VXcHAN~xCwYbhJ^T{yo9Cu?oj+{YQ%QT(Dv@31gmb(oU zms}nzi=bHNY7j@2a!=AnTZJc{t?-l3`i&C6Su9Vrt+KQj`*;H*wxmi!+#R73BB}Mg zAe2!pf($`x$9gK82hMsvO9`M2bGpd%=PHL#O~f4OwD+cM(@a6q@HVd5%xWtU^xe1c zpMd8vlSsX%AR?m>%4QkdtHb?CRJpUuH$`ffne-bJyAvXRHsq(Zf4anEwq z*z)uX+O@C=&6%JZR!x*B0jf(W0QOJ*Ta0$N;tDel>Hmkl_YQ|E>i&4o6r;E3T_U1I z3kgCHz4xfW2!cclB1D@Zh!!nM^h7605?wGNh~AI-Rj?_%sxC z2|F_86i}#rUE}HVb}ebvbok#%XK8OGaeJb*ot?0cFjby>-=un1;z3V>Lg`qAk0~KB zdsMa9g47J>?+8`Q!n??C=F@7qWJZ2UA{PAaiiK+oJxz$%K%H- zVc(dnsb^vi+aLCO>FwTSkBQiO>Uk6Rbzi(q==?$f>@zbH8&t}^NDq*SDH5A;k$r~X z#e{tqR%m@zGlHjL`8aXr5c`BZiD(WLgl0jn8-<02vUnz!83y#%ve|$O<15`0`J3n} zOP?y7Y?JSqov4Fj{WD$z``-nzkt|&fpGdNGM1+)o-21e@9pcn;8l|n{@#$a||NZ>@ z8Gg(&@!phh9 zfn`FwqkUUs$a7YIlPr%zYyHj+?>LSLc~F`O$-7zSLSzA(^uZyE(&n+RT}OXG_ma1I zQm(%CPQSEbl*DbX!L?LxxHqFc3^1MhkC=fCguy4RabY`h?s z-uf+)_zRWgn}-WYmPI6~{$gCPrI2D~byAe5 zCcGD~4QlVV>$f|!tlYHah4P^P@D)GP`swyTJS(h2?pxn-F;^2_-rU<)L$p~n)-5MJ zNsh*ED*lux>lnNP$ChT5t)d z#$(Ar%fNa>3ER7kiGjgN;8;T(8o%;ds^J3Wt665I?B>$=(6u5-&@52NDt6vNM(s|@ zUDB8=nQT{7vmBVC|4xs0ePgvognM$zivq~mU}b->8^<`ivB8G)?9D>!Is6n7(bvYN z&}Ft|JctY8RL-68Sm;NF!Xl|$%Q;-7PdkZ*EtLu)glnqs{VowCe1%VBm-HC_NXHc=o%X#`Mf+UUp@%=jl6O zluL%y)Vj~2L!!9J!0%A?Bk@}6!%1F zf5vubjCR|wfU9SBI0c4J6uh%1W=wXzZgG~$j3gNFP-eQ&B#+b&;sxareLiJ8U%-HA ztqaT9(TNYnOui86jK0}f>Vh83z96K?iYf|sfuaPGKpKTm-%R!r4b0O`N}N+nsK)E$ zcG~?Zsbawrx6+q!$A^6#iR*j#W@Xvxb!`yVTXIhOL)u3}izOAAQF2r07yN*mEW3PG z^6*c0`>DFhe=7H0=`+Wf)6R#6hJ6k%>w^Yms#Iqrx5h2cIAl5Z#<`eH3TpQ3Dw~pky0$T+Hrn1_c_|+ZwV!*W3AT=GUt^W@WCa- z9WXgcF4A-6<|$it_fo60vK9YG_VyyFG*lw~0~dfSM}CPvm{kRI?g+CsF%a%S?bF%r z*u0IT7nXZ>f0bLXP9^Q$mqkIZ3(~Y9yP@82r^d(@Mm59fzhNRHH*?;b zE;D|Dy4&AIwt7(lN$A8-^dpt`6FOj6)qT*?t%Flb+ww(fMRH}kb#nxr;1|E!^wk$% z`>kbLz+reM@jn8SUZj4iDi9b{X`uWO5 zgaqIKUjGz^30(@CK2EaquMLy(R&23k#*Sp_#*iOO=k1VpaV}E4HR8T_8Bgses!a4Z zg|k(C$Ma1*75Q||z#SH|>V!+rjCpo?9)3cS?+;$@3q@1wAM?LcWEmoh$l1P%P+Xi`j{2?4hFQZ;k61lftG79 zmcD=XZE~zZIlSrAl;|m#q^~U_7~z0YcV`^=byjunIy@)YBD^1|wZ;D^(^q`PJRS_A zI&B*AIO5+~;;cl?8uLTQ9xlbBN(FB^Ox9lo}lL4pV82#A4;lW#tg7xi&u|?W4t1i41 zu(xiW=np|FVRarWdiA7t9|qT9qQGZ%#eNf+$IFmGk!Y$+eBPWvL)K$^;$=(=CR0>g zavVxeI%IY)>2ti#Ska>A%%Em!E(Ndu^*6>lpIlmhO*pi%xGMixO}5A9PTr}qA(zts zde$!?AdIdDM4$2z07|yHcmLWC!Pk>@*FEm_4|nu!NZrz8zVA_xajxtCX;!fDeH@!% zvhHi$@Xc4L5NQcm@B0dR#}AA?M`{CU+P0&^qu1>Vo7NkhKU4c1ax$AzdMM!Es{axB z2c^r4=NhQyk)@n_o|KviOP7iWnPUbriewwCfRL9P3T>WvyO~|<7~q1pU3s2 zoP7Ro!f}lb34$k-y#C%dD8&rU?JH80<13wc9EPt=kbb{Ik`ig~hyr+t$xg8#0;+oa zE-wfCN%)RF(D{L|r^Tw!gx$LCOJ?pjrkZ`?6RR?xaovo!6X>%Sn7xQ}2ikRZtXc(4 zw>3W~K@TztTL#@$au%s%TYgE{p|sPzCp7hK()Cb`1#^W!4He6|Il3HHlooJ#vfC}v zr$XwNcne&nP_aU;1uI4Z-I+Y6j?lzxB#{sCt?gGV2CE^0+{1}LP&qZ&*&SGV4NNAt$(@}vq z??^mlDtn^IuOii(i|ozIr=(vV?ZAS{jtRSD$T>S$qN)R~ZLouhyImSa?O9x@{cSy* zzyS~Ah3VMMCrz^+F7vN5h0hq%+_T=Uid7A-XSB6^gZ5MhD0#I!?kLJcHj@_|^L6Wo z^t|-D{pg(F_FUo5Zo{;3p4vMM1NYjJ^5ooNI3}q99DIw#ud>m=%OC#Ax&r_ODz-+#ZXG^_shGD+jf(FY9=M?-!?jDxzXy# zSg+C7beXTtI2oXcVz+`)wvD+Hmw8+WN+EzQBIl`rWM&+uGN8AWPE~2ma7X*ICXvL+ z3VS}5bU7Rlhwn?1c2}t$`M0{%Z``Y0OnH7-pNDg80|P7DXLguK7E(Y&l4XfSXg$dv zrf9HZ*TC1>)ij+y%VGXigt+XR)p!|c)GZeLs(B0lu!}lEouIC#L=e1!)ewZM%zfv= z{*y*tFc_Yz1K7Jp!+h2EoOjaPrp$vB|8F;USVE zeJq!+R9(CZ_ziEWS%owWA+n&)Dlb=89DP|%M>7wb(!t=NPOr!~h~bQuv6If<4VcSbyhZZNGUEe)!W&&+zx9=5|W(8-FDyW8^KBnHYLf)i?;8V-pC5SJ{a`~=`rbpE1oE1D60S2;I*w>W&1%7cm!1p9{or~? zSC?SZ?U$=Uw;l$iG9!NpT2Flu^7v-r@`u-G$Kg>oDm-JjIMjxG*@ac=8ikw&{6}`z zhO_OR7@lu_X6|c!OtVx?j~+o>p&|Z-tJ}3tXFM%Cmllm|k?&tWZL@Ur84s{jav1BG zFxdIfLT=_h&gCgGNBUK3<@(C6d1jJHKWrjL!?le-w0;C%)b|@7sr-!@+^;(_pPZZ+ zhO_D@DFWM-Zsa;A2Xf>xtox#S2Odi08l z`4pFAn=8a}J(M&2<}CN~hSlK3$10Cw$G=Is5zDp8Y>pMg*Aa9)442Mes(j4-gJevY zcVIz`GV$R@1aj_=1%ZkpDKg$1qQm6DBYAF6W-%r83&j&DTGI!a>y!Cnha>xY+1dHQ zN8w?Em>)%XZt_$~u}$Vn#2uoe_xp9UPSVCV*8SECzgl-WnO?5!rcRyNbZmOZ`OJmQ zCGN(oE9%0GZH)k-`}u{uf?(dI9cy!mspV)yH~I&;bmBF~q;bO}4zcGK0%WB86W{vY zN4A)$dQK1BtPhasu(w{!toTc&mU41QsYx#cH!UTJ%D#=Yv(dvlS75|>)>tPYy>o%C zbplk|GVu6OkVV7mj$g5z!^8JAb4|Sf`}26w%)Of_y#BEto=URV2|d+sZJ)@9eN!Y2 z@BUp61|-!QuRq0*%O#8GFE8&#F^LsPuRPx%KQPhy5I~47j*E zxS?`XWkv&N_IH-6@GI7dz23JkIaPiVLwppTbepg1#g?rr*)95SaN%ZUrQ$@DLPZ*! zM~D4rTQKGOyUlNIoZ!4II>N$SaFbR6Vo7YJliT^A>zd<4&lvRO2^CiYr(h-DuX6a4 z)vszs-1Yg!Spw1#jv$;exIDd}q9+_E2o02f^cu;MF=|A0Im!5a0p)Fz6j0t5vn8TKs29cQ&*P5FKm8C6H z?>sKZCo66OHCtuxJwDs@Wt@(cs>q-tjtW8~t1k6h?dDmkKtJE!b8DzO%%$kqnJ7tU zt{2xw{FFV;spp9$hMaBqH*^!={sY*Hk5OsD3PR-6?$fkTxilOY`WfeI_gOE-Zp5q> zWmEedR5p}+L(()^uykztLvKA`eyN2D-^y-M>gas5C=e3YB`BJpmJ}UR@kg!LAk+W4 zOWg^mfVBn1m%LGBwz>9DRQ|&%9ftb}mc&V>(uCQ)FQzR_!q3JW zWn0^C=3}#7S&S5Nsh@uAUR#w}_j}@N@>;n5d4PsLQB&Gp??L9W`0`FDo4?Kh#8`Eg zgAhPiSmxbPay}AH7t{B7z8wuS*{&&e!%clX%L_=_AYgaz^S@s4kXM@gw0qSroZ(IU zc%!*S`qOYazX(*OiJCh7Ey24m|DwFSS1WOx>IQ7(Y$n2S0CLqJ7d8V*>N)mLMzJ#Z zZXs!W44SE(f0fz9$YH{sn+VG7ch-@(=1R`9H*=gm*bi~R+C#3(GGS*&ZwWs$Zp-^9 z()v=kVV#nTw!xI#A`+Givp}z%Ur^M{>sUB^jSV0<7_Pk_Lq?R*-KqD8dlqkbPh@#p z#g!GE?x~}xFvY?uLL8KmFbNTW5SrbpR`0h&!_k zYORw29qNHP)zvfi#co}e>2uju9VjZb@Yhd!Hm^uA>&yT72#R4lNI!z|I&I1F<&l-B zhVnbKjns@C4y|+Is|@Zp~$r<>v!wugl7Ceu894?0CL(bA{f-BSfgGGqd} zx&U)nYE&Sx@k#Go7??}u5|ILfkO^VA*c`eXB`>ldrz8e-j&E{W zQiX?SKG2};Vv%;NRGX!m(FH3a`z9F%e6;39(+Db{JoIjy~r>;&$dthT8!Eq3Pll%I79wG z>n=Q(`AMwxk%R8l#QnzOnx4wZj)B5-> zImooRnA!Giyy|-AZ>QdzGukS$4hFssT&?e*#k!vGcFSE)4Dibive7(vu4)f;) zTJX4ni|Hr;sjV`#8o8NLHoyIW`}<ujRpFFw>?Z~INA&boQ!vjmM~q3gf-`9`Zg=_m|eX9sHF<#^zO z9HdL9j1^@QbFt&w!wB*r2K4V%W+QUtn)jYMx+5WlbVr!sB50Ssci zX_g5W!aKO9Sk%P{cu1W=WI;$rOdUbb@0dyEtnf_30R)A^FACZ`cAeyNsXlg?U_x3% zsM6|n+fBcVgV9|uWu)+35^c-Q0IxpKk2hAuli4hz0sVBnLjoxebL}J)!7lAayu^^x zn~+#}b@5lLKs@ECt?sX0P?QMZ$)>wS8hSRJfm5fyTP_#Mac(F%X_1z*W?^i;6BGQL z}zB~i^nKbwkIIKHAxe3E9JmBD%nJ+k~Yxy8RNG$GHa_(^GIN6K%K6Xj)(pj$Y zO~A#PWq^4(ZiCd|i-!$GfJrW}R`lqlP2$Bg=gu?N3zyeBcxR9rDU!W6nVVBL?fPYt z%(S`}#ZSZ>$FkJEFI3A&W&!2tz3%l*%L7Fa8JqEY*b7fDWk~;^R)k+&lMd#m4+J+s~5hGW|w6GGs#A_b#~sM+hEj z(BHzsBIBPf($KEX73zjU%lJy35uyuPN}9Sd>NgdC&&bZ0K-*aVRL7Ci3Owc(`|Fh* zk7g+FC3X#+QsM^OHVld08%d>b>zD`Jg5qm%WN9W;BN9Zf!E0V@Vf-5r>BoC6^Olmr}9EXZ;mg`|szFajcQRjqgP7Veb>0X``nm!IB7Wmuf|zOHoCNWHU#_X3Ug{(y42=Qa%^{ai(?tRE53 z{_H0xWD5?Il?QL-M!^5!iMxTrSg@Yo2veN<%*kcV4IimSaM^eF_gdBlH$N`fxr_ z?M=&ya_mkP*1B_skTGuA#y9sjkL`4{5$UIV|3gml#jJv|({ksFZb%l39=K&DfWq-nJ7Y zwC6tJ8*Nh)#PFr-s6a5rUCa4WrppV#bQUpA6Up(i@^@aamxTK;qH6Oq6F6%*1d|wD zny!z-`ZR7CDzbEeBq|3Yh<_cNJUjie$VnG)-L3yhg1v^#O|sC-RUC~lBCGibVc!mZ ze(~AaJoogsQO@oLF0mpgVNkb?FX{FWNaI)cUP^!Uh7nDSs_5C3DlbtpqXrCcEcKjt z_XB3bxF)}PB2s>53NNB+1&m(SE@VhQ_8KCSHZGd%N$JmT9^>wo=l5Y*ChYKTQ8Mw7 z<$^rIJJxL^E1)#8)r>dbm0T|Vh9L<7ipG;qiC5bt|DRW^N9iYs7LP&50H$C0<=I{H zHz@UJ5RJUrQny#4%)j}Y-Qu7m8hP`4?{}fTEhrFjj`1O6JV{LtfkLs$k_n#@ra*7t zd>VIQS@Go5|C1{_i~)T+ur@!sWI7g)%1O1S*hEKbmsF2sscRG z%0D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%0AVGr( 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 literal 0 HcmV?d00001 diff --git a/windows/jamulus-server-icon-2020.ico b/windows/jamulus-server-icon-2020.ico new file mode 100644 index 0000000000000000000000000000000000000000..11127554fbdc83ea558fe14554a424914cd17aa9 GIT binary patch literal 117805 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 literal 0 HcmV?d00001 From 370019317a786b7f4b7ba95378e618ffde844ff3 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 25 Nov 2020 18:54:41 +0100 Subject: [PATCH 16/92] fix server icon for Windows installer (#737) --- windows/installer.nsi | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/windows/installer.nsi b/windows/installer.nsi index 7040e06659..48d8877fb8 100755 --- a/windows/installer.nsi +++ b/windows/installer.nsi @@ -75,6 +75,9 @@ Section File "${BINARY_PATH}x86\${APP_EXE}" ${EndIf} + ; icons + File "jamulus-server-icon-2020.ico" + ; QT dlls ${If} ${RunningX64} File "$%QTDIR64%\bin\Qt5Core.dll" @@ -114,7 +117,7 @@ Section CreateDirectory "$SMPROGRAMS\${APP_NAME}" CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME}.lnk" "$INSTDIR\${APP_EXE}" - CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME} Server.lnk" "$INSTDIR\${APP_EXE}" "-s" + CreateShortCut "$SMPROGRAMS\${APP_NAME}\${APP_NAME} Server.lnk" "$INSTDIR\${APP_EXE}" "-s" "$INSTDIR\jamulus-server-icon-2020.ico" CreateShortCut "$SMPROGRAMS\${APP_NAME}\${UNINSTALL_EXE}.lnk" "$INSTDIR\${UNINSTALL_EXE}" ; cleanup: remove temporary Microsoft Visual Studio redistributable executable @@ -182,6 +185,7 @@ RMDIR "$SMPROGRAMS\${APP_NAME}" Delete $INSTDIR\${UNINSTALL_EXE} Delete $INSTDIR\${APP_EXE} +Delete $INSTDIR\jamulus-server-icon-2020.ico Delete $INSTDIR\Qt5Core.dll Delete $INSTDIR\Qt5Gui.dll Delete $INSTDIR\Qt5Widgets.dll From 872035ee70d8737040e5413088d6bd022e9ef92c Mon Sep 17 00:00:00 2001 From: SeeLook Date: Wed, 25 Nov 2020 20:36:51 +0100 Subject: [PATCH 17/92] Updated Polish translation - added full translator name as well --- src/res/translation/translation_pl_PL.qm | Bin 102061 -> 102358 bytes src/res/translation/translation_pl_PL.ts | 88 +++++++++++------------ src/util.cpp | 2 +- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/res/translation/translation_pl_PL.qm b/src/res/translation/translation_pl_PL.qm index f8ae55cf2026ce922fb71ef06648e60907291ebb..6087f15912b0a3fc4dfe9a9dad39b58e8f29fbc5 100755 GIT binary patch delta 4462 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 Q@oiURFF2LGfQgp>2iEpVzyJUM delta 4217 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 - + L L @@ -713,7 +713,7 @@ - + C&onnect &Połącz @@ -814,46 +814,46 @@ Use &Two Rows Mixer Panel - + Używaj &dwurzędowego panelu miksera &Clear All Stored Solo and Mute Settings - + Wy&czyść wszystkie ustawienia solo/wycissz - + Center Środek - + R P - + Central Server Serwer centralny - - + + Select Channel Setup File Wybierz plik ustawień kanału - + user użytkownik - + users użytkownicy - + D&isconnect &Rozłącz @@ -1084,12 +1084,12 @@ Przycisk ustawień ASIO - + Fancy Fantazyjna - + Compact Kompaktowa @@ -1185,19 +1185,19 @@ - + Mono Mono - + Mono-in/Stereo-out Mono-in/Stereo-out - + Stereo Stereo @@ -1337,18 +1337,18 @@ Całkowite opóźnienie jest obliczane na podstawie bieżącego czasu ping i opóźnienia wprowadzonego przez bieżące ustawienia bufora. - + Low Niska - - + + Normal Standardowa - + High Wysoka @@ -1383,38 +1383,38 @@ Domyślny - + preferred preferowany - - + + Size: Rozmiar: - + Buffer Delay Opóźnienie bufora - + Buffer Delay: Opóźnienie bufora: - + The selected audio device could not be used because of the following error: Wybrane urządzenie audio nie mogło być użyte z powodu następującego błędu: - + The previous driver will be selected. Został wybrany poprzedni sterownik. - + Ok Ok @@ -2710,27 +2710,27 @@ CoreAudio wywołanie wyjścia AudioHardwareGetProperty nie powiodło się. Wydaje się, że karta dźwiękowa nie jest dostępna w systemie. - + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Aktualna systemowa częstotliwość próbkowania urządzenia wejściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Aktualna systemowa częstotliwość próbkowania urządzenia wyjściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Format strumienia wejściowego audio dla tego urządzenia audio nie jest kompatybilny z tym oprogramowaniem. - + The audio output stream format for this audio device is not compatible with this software. Format strumienia wyjściowego audio dla tego urządzenia audio nie jest kompatybilny z tym oprogramowaniem. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Rozmiary bufora bieżącego wejściowego i wyjściowego urządzenia audio nie mogą być ustawione na wspólną wartość. Proszę wybrać inne wejściowe/wyjściowe urządzenia audio w ustawieniach systemowych. @@ -2740,48 +2740,48 @@ Sterownik audio nie może zostać zainicjalizowany. - + The audio device does not support the required sample rate. The required sample rate is: Urządzenie audio nie obsługuje wymaganej częstotliwości próbkowania. Wymagana częstotliwość próbkowania wynosi: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Urządzenie audio nie obsługuje ustawiania wymaganej częstotliwości próbkowania. Błąd ten może się zdarzyć, jeśli posiadasz interfejs audio taki jak Roland UA-25EX, w którym ustawiasz częstotliwość próbkowania za pomocą przełącznika sprzętowego na urządzeniu audio. W takim przypadku należy zmienić częstotliwość próbkowania na - + Hz on the device and restart the Hz na urządzeniu i ponownie uruchom program - + software. program. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Urządzenie audio nie obsługuje wymaganej liczby kanałów. Wymagana liczba kanałów dla wejścia i wyjścia wynosi: - - + + Required audio sample format not available. Wymagany format próbkowania audio nie jest dostępny. - + No ASIO audio device (driver) found. Urządzenie (sterownik) ASIO nie został znaleziony. - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. program wymaga do poprawnego działania interfejsu audio ASIO o niskim opóźnieniu. Nie jest to standardowy interfejs systemu Windows i dlatego wymagany jest specjalny sterownik audio. Albo twoja karta dźwiękowa posiada natywny sterownik ASIO (co jest zalecane) lub możesz użyć alternatywnych sterowników, takich jak ASIO4All. - + The diff --git a/src/util.cpp b/src/util.cpp index 3474d49aa1..f39e2eef19 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -495,7 +495,7 @@ CAboutDlg::CAboutDlg ( QWidget* parent ) : QDialog ( parent ) "

Volker Fischer (corrados)

" "

" + tr ( "Polish" ) + "

" "

Martyna Danysz (Martyna27)

" - "

SeeLook (SeeLook)

" + "

Tomasz Bojczuk (SeeLook)

" "

" + tr ( "Swedish" ) + "

" "

Daniel (genesisproject2020)

" "

" + tr ( "Slovak" ) + "

" From 9582b92df084f33fe62c8ad9d20d4f77f09f974f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 26 Nov 2020 16:40:28 +0100 Subject: [PATCH 18/92] update --- ChangeLog | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ChangeLog b/ChangeLog index 8e18c77a74..ab8ac4ce5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,14 @@ +TODO sliders move by themselves in 3.5.11 (#611) -> maybe the cause are the groupings of faders, see https://www.facebook.com/groups/619274602254947/permalink/803001740548898/?comment_id=803602367155502&reply_comment_id=803624437153295 + +TODO use new server icon on Mac server bundle (#737) (on Windows the setup is already fixed) + +TODO add Github Issues for the MacOS audio interface changes done on the branch + + + From 39428dd88e823d7cb19bbfa5e682d4a65f226190 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 26 Nov 2020 18:11:42 +0100 Subject: [PATCH 19/92] bug fix: sliders move by themselves if fader groups are used on reconnect (#611) --- ChangeLog | 4 ++-- src/audiomixerboard.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab8ac4ce5e..8a73f71efd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,8 @@ - added possibility to set MIDI offset for fader control to --ctrlmidich (#95) +- bug fix: sliders move by themselves if fader groups are used on reconnect (#611) + - bug fix: do not reset sound card channel selection on a device property change - bug fix: compiling Jamulus 3.6.1 is failing on Debian 9 Linode (#736) @@ -20,8 +22,6 @@ -TODO sliders move by themselves in 3.5.11 (#611) -> maybe the cause are the groupings of faders, see https://www.facebook.com/groups/619274602254947/permalink/803001740548898/?comment_id=803602367155502&reply_comment_id=803624437153295 - TODO use new server icon on Mac server bundle (#737) (on Windows the setup is already fixed) TODO add Github Issues for the MacOS audio interface changes done on the branch diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 38d694cdee..36af8f4e72 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -361,6 +361,9 @@ void CChannelFader::SetupFaderTag ( const ESkillLevel eSkillLevel ) void CChannelFader::Reset() { + // it is important to reset the group index first (#611) + iGroupID = INVALID_INDEX; + // general initializations SetRemoteFaderIsMute ( false ); @@ -396,7 +399,6 @@ void CChannelFader::Reset() bIsMutedAtServer = false; iRunningNewClientCnt = 0; - iGroupID = INVALID_INDEX; UpdateGroupIDDependencies(); } @@ -1189,7 +1191,7 @@ void CAudioMixerBoard::ApplyNewConClientList ( CVector& vecChanInf bStoredFaderIsMute, iGroupID ) ) { - vecpChanFader[i]->SetFaderLevel ( iStoredFaderLevel ); + vecpChanFader[i]->SetFaderLevel ( iStoredFaderLevel, true ); // suppress group update vecpChanFader[i]->SetPanValue ( iStoredPanValue ); vecpChanFader[i]->SetFaderIsSolo ( bStoredFaderIsSolo ); vecpChanFader[i]->SetFaderIsMute ( bStoredFaderIsMute ); @@ -1290,7 +1292,7 @@ void CAudioMixerBoard::LoadAllFaderSettings() bStoredFaderIsMute, iGroupID ) ) { - vecpChanFader[i]->SetFaderLevel ( iStoredFaderLevel ); + vecpChanFader[i]->SetFaderLevel ( iStoredFaderLevel, true ); // suppress group update vecpChanFader[i]->SetPanValue ( iStoredPanValue ); vecpChanFader[i]->SetFaderIsSolo ( bStoredFaderIsSolo ); vecpChanFader[i]->SetFaderIsMute ( bStoredFaderIsMute ); From eb7a670c98dc04d6b35b7ae46d1fccb38bfe1298 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 27 Nov 2020 18:01:41 +0100 Subject: [PATCH 20/92] try to use new server icon for Mac installer --- Jamulus.pro | 6 +++++- mac/Info-make.plist | 2 +- mac/Info-xcode.plist | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Jamulus.pro b/Jamulus.pro index e9958a1474..333260665f 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -97,6 +97,11 @@ win32 { DEFINES += SERVER_BUNDLE TARGET = $${TARGET}Server + MACOSX_BUNDLE_ICON_FILE = jamulus-server-icon-2020.icns + RC_FILE = mac/jamulus-server-icon-2020.icns + } else { + MACOSX_BUNDLE_ICON_FILE = mainicon.icns + RC_FILE = mac/mainicon.icns } QT += macextras @@ -104,7 +109,6 @@ win32 { SOURCES += mac/sound.cpp HEADERS += mac/activity.h OBJECTIVE_SOURCES += mac/activity.mm - RC_FILE = mac/mainicon.icns CONFIG += x86 QMAKE_TARGET_BUNDLE_PREFIX = net.sourceforge.llcon QMAKE_APPLICATION_BUNDLE_NAME. = $$TARGET diff --git a/mac/Info-make.plist b/mac/Info-make.plist index 9f750fada6..503eb9141a 100644 --- a/mac/Info-make.plist +++ b/mac/Info-make.plist @@ -17,7 +17,7 @@ CFBundleDevelopmentRegion en CFBundleIconFile - mainicon.icns + @ICON@ CFBundleGetInfoString Created by Qt/QMake diff --git a/mac/Info-xcode.plist b/mac/Info-xcode.plist index ad59ccfcc4..31b543d5ea 100644 --- a/mac/Info-xcode.plist +++ b/mac/Info-xcode.plist @@ -17,7 +17,7 @@ CFBundleDevelopmentRegion en CFBundleIconFile - mainicon.icns + ${ASSETCATALOG_COMPILER_APPICON_NAME} CFBundleGetInfoString Created by Qt/QMake From 85b677e7a70592df320f16ce7d65b6b465beb377 Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Fri, 27 Nov 2020 17:20:39 +0000 Subject: [PATCH 21/92] Update help message to be more helpful --- tools/jamulus-jamexporter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/jamulus-jamexporter b/tools/jamulus-jamexporter index 7f66fe6815..e437078788 160000 --- a/tools/jamulus-jamexporter +++ b/tools/jamulus-jamexporter @@ -1 +1 @@ -Subproject commit 7f66fe6815854baab3bc0bf2264d67102e8ee46a +Subproject commit e4370787888ced855eadddc155fa791418b8644d From 97c4956c129950418088f422051efa6679fffd46 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 27 Nov 2020 18:37:17 +0100 Subject: [PATCH 22/92] update --- ChangeLog | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8a73f71efd..470270714d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,12 +20,9 @@ - bug fix: on MacOS Jamulus does not always select the previous sound card (#680) +- bug fix: use new server icon on Mac server bundle and Windows installer (#737) -TODO use new server icon on Mac server bundle (#737) (on Windows the setup is already fixed) - -TODO add Github Issues for the MacOS audio interface changes done on the branch - From 90d4d3fea3055ab0970ad33e5189d7128f0a0b6f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 08:21:30 +0100 Subject: [PATCH 23/92] remove Core Audio notifier for xrun because we do not make use of it anyway --- mac/sound.cpp | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 5225abe0fe..68547d11cc 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -393,14 +393,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) &stPropertyAddress, deviceNotification, this ); - - // unregister the callback function for xruns - stPropertyAddress.mSelector = kAudioDeviceProcessorOverload; - - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); } // store ID of selected driver if initialization was successful @@ -412,14 +404,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - // setup callback for xruns (only for input is enough) - stPropertyAddress.mSelector = kAudioDeviceProcessorOverload; - - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - // setup callbacks for device property changes stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; @@ -1010,16 +994,6 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, pSound->EmitReinitRequestSignal ( RS_RELOAD_RESTART_AND_INIT ); } -/* NOTE that this code does not solve the crackling sound issue - if ( inAddresses->mSelector == kAudioDeviceProcessorOverload ) - { - // xrun handling (it is important to act on xruns under CoreAudio - // since it seems that the xrun situation stays stable for a - // while and would give you a long time bad audio) - pSound->EmitReinitRequestSignal ( RS_ONLY_RESTART ); - } -*/ - return noErr; } From 5f9f48174ed9ccb7d59386c1c710ebec7bf8ae3b Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 09:17:44 +0100 Subject: [PATCH 24/92] bug fix: detect if no audio Device is selected before trying to connect a server (#129) --- ChangeLog | 3 +-- src/client.h | 1 + src/clientdlg.cpp | 27 ++++++++++++++++++++++++--- src/clientdlg.h | 3 +++ src/soundbase.cpp | 4 +++- src/soundbase.h | 5 ++++- 6 files changed, 36 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 470270714d..ac5147963f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,8 +22,7 @@ - bug fix: use new server icon on Mac server bundle and Windows installer (#737) - - +- bug fix: detect if no audio Device is selected before trying to connect a server (#129) diff --git a/src/client.h b/src/client.h index 02c195ffae..2387fc90a4 100755 --- a/src/client.h +++ b/src/client.h @@ -116,6 +116,7 @@ class CClient : public QObject void Start(); void Stop(); bool IsRunning() { return Sound.IsRunning(); } + bool IsCallbackEntered() const { return Sound.IsCallbackEntered(); } bool SetServerAddr ( QString strNAddr ); double GetLevelForMeterdBLeft() { return SignalLevelMeter.GetLevelForMeterdBLeftOrMono(); } diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index b7881b8a08..8f4a96ba68 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -226,6 +226,9 @@ CClientDlg::CClientDlg ( CClient* pNCliP, tr ( "software upgrade available" ) + "
" ); lblUpdateCheck->hide(); + // setup timers + TimerCheckAudioDeviceOk.setSingleShot ( true ); // only check once after connection + // Connect on startup ------------------------------------------------------ if ( !strConnOnStartupAddress.isEmpty() ) @@ -421,6 +424,9 @@ CClientDlg::CClientDlg ( CClient* pNCliP, QObject::connect ( &TimerPing, &QTimer::timeout, this, &CClientDlg::OnTimerPing ); + QObject::connect ( &TimerCheckAudioDeviceOk, &QTimer::timeout, + this, &CClientDlg::OnTimerCheckAudioDeviceOk ); + // sliders QObject::connect ( sldAudioPan, &QSlider::valueChanged, this, &CClientDlg::OnAudioPanValueChanged ); @@ -1113,6 +1119,19 @@ void CClientDlg::OnPingTimeResult ( int iPingTime ) ledDelay->SetLight ( eOverallDelayLEDColor ); } +void CClientDlg::OnTimerCheckAudioDeviceOk() +{ + // check if the audio device entered the audio callback after a pre-defined + // timeout to check if a valid device is selected and if we do not have + // fundamental settings errors (in which case the GUI would only show that + // it is trying to connect the server which does not help to solve the problem (#129)) + if ( !pClient->IsCallbackEntered() ) + { + QMessageBox::warning ( this, APP_NAME, tr ( "The soundcard device does not " + "work correctly. Please check the device selection and the driver settings." ) ); + } +} + void CClientDlg::OnCLPingTimeWithNumClientsReceived ( CHostAddress InetAddr, int iPingTime, int iNumClients ) @@ -1153,9 +1172,10 @@ void CClientDlg::Connect ( const QString& strSelectedAddress, MainMixerBoard->SetServerName ( strMixerBoardLabel ); // start timer for level meter bar and ping time measurement - TimerSigMet.start ( LEVELMETER_UPDATE_TIME_MS ); - TimerBuffersLED.start ( BUFFER_LED_UPDATE_TIME_MS ); - TimerPing.start ( PING_UPDATE_TIME_MS ); + TimerSigMet.start ( LEVELMETER_UPDATE_TIME_MS ); + TimerBuffersLED.start ( BUFFER_LED_UPDATE_TIME_MS ); + TimerPing.start ( PING_UPDATE_TIME_MS ); + TimerCheckAudioDeviceOk.start ( CHECK_AUDIO_DEV_OK_TIME_MS ); // is single shot timer } } @@ -1184,6 +1204,7 @@ void CClientDlg::Disconnect() // stop other timers TimerBuffersLED.stop(); TimerPing.stop(); + TimerCheckAudioDeviceOk.stop(); // TODO is this still required??? diff --git a/src/clientdlg.h b/src/clientdlg.h index 91f0247101..ccb2240460 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -62,6 +62,7 @@ #define LEVELMETER_UPDATE_TIME_MS 100 // ms #define BUFFER_LED_UPDATE_TIME_MS 300 // ms #define LED_BAR_UPDATE_TIME_MS 1000 // ms +#define CHECK_AUDIO_DEV_OK_TIME_MS 5000 // ms // number of ping times > upper bound until error message is shown #define NUM_HIGH_PINGS_UNTIL_ERROR 5 @@ -108,6 +109,7 @@ class CClientDlg : public QDialog, private Ui_CClientDlgBase QTimer TimerBuffersLED; QTimer TimerStatus; QTimer TimerPing; + QTimer TimerCheckAudioDeviceOk; virtual void closeEvent ( QCloseEvent* Event ); virtual void dragEnterEvent ( QDragEnterEvent* Event ) { ManageDragNDrop ( Event, true ); } @@ -124,6 +126,7 @@ public slots: void OnConnectDisconBut(); void OnTimerSigMet(); void OnTimerBuffersLED(); + void OnTimerCheckAudioDeviceOk(); void OnTimerStatus() { UpdateDisplay(); } diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 03052835a3..6e9626b386 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -31,7 +31,9 @@ CSoundBase::CSoundBase ( const QString& strNewSystemDriverTechniqueName, void* pParg, const QString& strMIDISetup ) : fpProcessCallback ( fpNewProcessCallback ), - pProcessCallbackArg ( pParg ), bRun ( false ), + pProcessCallbackArg ( pParg ), + bRun ( false ), + bCallbackEntered ( false ), strSystemDriverTechniqueName ( strNewSystemDriverTechniqueName ), iCtrlMIDIChannel ( INVALID_MIDI_CH ), iMIDIOffsetFader ( 70 ) // Behringer X-TOUCH: offset of 0x46 diff --git a/src/soundbase.h b/src/soundbase.h index 0b7da628d1..6ff064f922 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -56,7 +56,7 @@ class CSoundBase : public QThread const QString& strMIDISetup ); virtual int Init ( const int iNewPrefMonoBufferSize ) { return iNewPrefMonoBufferSize; } - virtual void Start() { bRun = true; } + virtual void Start() { bRun = true; bCallbackEntered = false; } virtual void Stop(); // device selection @@ -84,6 +84,7 @@ class CSoundBase : public QThread virtual void OpenDriverSetup() {} bool IsRunning() const { return bRun; } + bool IsCallbackEntered() const { return bCallbackEntered; } // TODO this should be protected but since it is used // in a callback function it has to be public -> better solution @@ -125,12 +126,14 @@ class CSoundBase : public QThread // callback function call for derived classes void ProcessCallback ( CVector& psData ) { + bCallbackEntered = true; (*fpProcessCallback) ( psData, pProcessCallbackArg ); } void ParseMIDIMessage ( const CVector& vMIDIPaketBytes ); bool bRun; + bool bCallbackEntered; QMutex MutexAudioProcessCallback; QString strSystemDriverTechniqueName; From 92741b148bb13ab6a2ec1ebaaa4b358f54f51e28 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 09:20:00 +0100 Subject: [PATCH 25/92] update translations --- src/res/translation/translation_de_DE.ts | 196 +++++++++++++---------- src/res/translation/translation_es_ES.ts | 196 +++++++++++++---------- src/res/translation/translation_fr_FR.ts | 196 +++++++++++++---------- src/res/translation/translation_it_IT.ts | 196 +++++++++++++---------- src/res/translation/translation_nl_NL.ts | 196 +++++++++++++---------- src/res/translation/translation_pl_PL.ts | 142 +++++++++------- src/res/translation/translation_pt_BR.ts | 196 +++++++++++++---------- src/res/translation/translation_pt_PT.ts | 196 +++++++++++++---------- src/res/translation/translation_sk_SK.ts | 196 +++++++++++++---------- src/res/translation/translation_sv_SE.ts | 196 +++++++++++++---------- 10 files changed, 1053 insertions(+), 853 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 323904bada..cde01a2c58 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -194,32 +194,32 @@ CAudioMixerBoard - + Personal Mix at the Server Eigener Mix am Server - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Wenn man mit einem Server verbunden ist, dann kann man hier den eigenen Mix verstellen ohne dass man etwas daran verändert, was die anderen von mir hören. Der Titel zeigt den Servernamen an und falls bekannt den Aufnahmestatus des Servers. - + Server - + T R Y I N G T O C O N N E C T V E R B I N D U N G S A U F B A U - + RECORDING ACTIVE AUFNAHME AKTIV - + Personal Mix at: Eigener Mix am Server: @@ -429,49 +429,49 @@ G - + Alias/Name - + Instrument - + Location Standort - - - + + + Skill Level Spielstärke - + Alias Alias - + Beginner Anfänger - + Intermediate Mittlere Spielstärke - + Expert Experte - + Musician Profile Profil des Musikers @@ -809,7 +809,7 @@ - + C&onnect &Verbinden @@ -819,57 +819,57 @@ Softwareupdate verfügbar - + &File &Datei - + &View &Ansicht - + &Connection Setup... &Verbinden... - + My &Profile... Mein &Profil... - + C&hat... C&hat... - + &Settings... &Einstellungen... - + &Analyzer Console... - + Use &Two Rows Mixer Panel Benu&tze zwei Zeilen für das Mischpult - + &Clear All Stored Solo and Mute Settings &Lösche alle gespeicherten Solo- und Mute-Einstellungen - + E&xit &Beenden - + &Edit B&earbeiten @@ -882,18 +882,18 @@ Keine - + Center Mitte - + R - + L @@ -968,37 +968,37 @@ Die CPU des Computers ist voll ausgelastet. - + &Load Mixer Channels Setup... &Laden der Konfiguration der Mixerkanäle... - + &Save Mixer Channels Setup... &Speichern der Konfiguration der Mixerkanäle... - + N&o Channel Sorting Keine Kanals&ortierung - + Sort Channel Users by &Name Sortiere die Kanäle nach dem &Namen - + Sort Channel Users by &Instrument Sortiere die Kanäle nach dem &Instrument - + Sort Channel Users by &Group Sortiere die Kanäle nach der &Gruppe - + Sort Channel Users by &City Sortiere die Kanäle nach der &Stadt @@ -1007,33 +1007,38 @@ &Lösche alle gespeicherten Solo-Einstellungen - + Set All Faders to New Client &Level Setze alle Lautstärken auf den &Pegel für neuen Teilnehmer - + Central Server Zentralserver - - + + Select Channel Setup File Auswählen der Datei für die Konfiguration der Mixerkanäle - + user Musiker - + users Musiker - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect &Trennen @@ -1279,12 +1284,12 @@ Zentralserveradresse Combo-Box - + Fancy Schick - + Compact Kompakt @@ -1500,7 +1505,7 @@ - + Mono @@ -1510,14 +1515,14 @@ Modus ist die Übertragungsrate etwas höher. Man muss sicher stellen, dass die Internetverbindung die höhere Rate übertragen kann. - + Mono-in/Stereo-out Mono-In/Stereo-Out - + Stereo @@ -1661,18 +1666,18 @@ Die Upload-Rate hängt von der Soundkartenpuffergröße und die Audiokomprimierung ab. Man muss sicher stellen, dass die Upload-Rate immer kleiner ist als die Rate, die die Internetverbindung zur Verfügung stellt (man kann die Upload-Rate des Internetproviders z.B. mit speedtest.net überprüfen). - + Low Niedrig - - + + Normal Normal - + High Hoch @@ -1719,23 +1724,23 @@ Standard (Nordamerika) - + preferred bevorzugt - - + + Size: Größe: - + Buffer Delay Puffergröße - + Buffer Delay: Puffergröße: @@ -1744,17 +1749,17 @@ Vordefinierte Adresse - + The selected audio device could not be used because of the following error: Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: - + The previous driver will be selected. Der vorherige Treiber wird wieder ausgewählt. - + Ok @@ -3245,37 +3250,52 @@ Der Jack-Server wurde gestoppt. Diese Software benötigt aber einen aktiven Jack-Server um zu funktionieren. Versuche die Software neu zu starten um das Problem zu lösen. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio Eingang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint als wäre keine Soundkarte im System vorhanden. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio Ausgang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint, dass keine Soundkarte ist im System verfügbar. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Die aktuelle Eingangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Die aktuelle Ausgangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. - + The audio input stream format for this audio device is not compatible with this software. Das Audioeingangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. - + The audio output stream format for this audio device is not compatible with this software. Das Audioausgangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Die Puffergrößen vom aktuellen Eingangs- und Ausgangsaudiogerät kann nicht auf einen gemeinsamen Wert eingestellt werden. Bitte wähle ein anderes Eingangs-/Ausgangsgerät aus der Geräteliste aus. @@ -3285,48 +3305,48 @@ Der Audiotreiber konnte nicht initialisiert werden. - + The audio device does not support the required sample rate. The required sample rate is: Das Audiogerät unterstützt nicht die benötigte Samplerate. Die benötigte Samplerate ist: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Das Audiogerät unterstützt nicht die benötigte Samplerate. Dieser Fehler kann auftreten, wenn ein Audiogerät wie das Roland UA-25EX verwendet wird, bei dem die Samplerate per Schalter am Gerät verstellt werden muss. Falls das der Fall sein sollte, dann stelle bitte den Schalter auf - + Hz on the device and restart the Hz am Gerät und starte die - + software. Software neu. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Das Audiogerät unterstützt nicht die benötigte Anzahl an Kanälen. Die benötigte Anzahl an Kanälen für den Eingang und den Ausgang ist: - - + + Required audio sample format not available. Das benötigte Audio Sampleformat ist nicht verfügbar. - + No ASIO audio device (driver) found. Kein ASIO-Gerätetreiber wurde gefunden. - + The Die - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. Software benötigt aber ein ASIO Audiointerface um zu funktionieren. Dies ist keine Standard-Windowsschnittstelle und benötigt deshalb einen speziellen Treiber. Entweder die Soundkarte liefert einen nativen ASIO-Treiber mit (was empfohlen wird) oder man versucht es mit dem ASIO4All-Universaltreiber. @@ -3343,42 +3363,42 @@ Ungültige Geräteauswahl. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: Die Audiotreibereigenschaften haben sich geändert. Die neuen Einstellungen sind nicht mehr kompatibel zu dieser Software. Das ausgewählte Audiogerät konnte nicht benutzt werden wegen folgendem Fehler: - + Please restart the software. Bitte starte die Software neu. - + Close - + No usable Kein benutzbares - + audio device (driver) found. Audiogerät (Treiber) konnte gefunden werden. - + In the following there is a list of all available drivers with the associated error message: Im folgenden wird eine Liste aller gefundenen Audiogeräte mit entsprechender Fehlermeldung angezeigt: - + Do you want to open the ASIO driver setups? Willst du die ASIO-Treibereinstellungen öffnen? - + could not be started because of audio interface issues. konnte nicht gestartet werden wegen Problemen mit dem Audiogerät. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 65614a1ec7..ca6d55d5de 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -206,32 +206,32 @@ CAudioMixerBoard - + Personal Mix at the Server Mezcla personal en el Servidor - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Estando conectado a un servidor, estos controles te permiten hacer tu mezcla personal sin afectar lo que otros escuchan de tí. El título muestra el nombre del servidor y, cuando se conoce, si está activamente grabando. - + Server Servidor - + T R Y I N G T O C O N N E C T I N T E N T A N D O C O N E C T A R - + RECORDING ACTIVE GRABACIÓN ACTIVA - + Personal Mix at: Mezcla Personal en el Servidor: @@ -441,49 +441,49 @@ G - + Alias/Name Alias/Nombre - + Instrument Instrumento - + Location Ubicación - - - + + + Skill Level Nivel Habilidad - + Alias Alias - + Beginner Principiante - + Intermediate Intermedio - + Expert Experto - + Musician Profile Perfil Músico @@ -829,7 +829,7 @@ - + C&onnect C&onectar @@ -839,62 +839,62 @@ Actualización de software disponible - + &File &Archivo - + &View &Ver - + &Connection Setup... &Configuración de Conexión... - + My &Profile... Mi &Perfil... - + C&hat... C&hat... - + &Settings... &Configuración... - + &Analyzer Console... &Analyzer Console... - + Use &Two Rows Mixer Panel Usar Dos Filas Para Ven&tana Mezclador - + &Clear All Stored Solo and Mute Settings - + E&xit S&alir - + &Edit &Editar - + Sort Channel Users by &Group Ordenar Usuarios de Canal por &Grupo @@ -903,18 +903,18 @@ Ninguno - + Center Centro - + R R - + L L @@ -989,32 +989,32 @@ El procesador del cliente o del servidor está al 100%. - + &Load Mixer Channels Setup... &Cargar Configuración Canales Mezclador... - + &Save Mixer Channels Setup... &Guardar Configuración Canales Mezclador... - + N&o Channel Sorting N&o Ordenar Canales - + Sort Channel Users by &Name Ordenar Canales por &Nombre - + Sort Channel Users by &Instrument Ordenar Canales por &Instrumento - + Sort Channel Users by &City Ordenar Canales por &Ciudad @@ -1023,33 +1023,38 @@ Eliminar &Configuraciones Guardadas de Solo - + Set All Faders to New Client &Level Todos los Faders al Nivel C&liente Nuevo - + Central Server Servidor Central - - + + Select Channel Setup File Seleccionar Archivo Configuración Canales - + user usuario - + users usuarios - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect D&esconectar @@ -1295,12 +1300,12 @@ Campo para dirección servidor central - + Fancy Oscuro - + Compact Compacto @@ -1516,7 +1521,7 @@ - + Mono Mono @@ -1526,14 +1531,14 @@ aumentará la tasa de datos. Asegúrate de que tu tasa de subida no excede el valor de subida disponible con tu ancho de banda de Internet. - + Mono-in/Stereo-out Entrada mono/Salida estéreo - + Stereo Estéreo @@ -1677,18 +1682,18 @@ La Tasa de Subida de Audio depende del tamaño actual de paquetes de audio y la configuración de compresión de audio. Asegúrate de que la tasa de subida no es mayor que la velocidad de subida disponible (comprueba la tasa de subida de tu conexión a internet, por ej. con speedtest.net). - + Low Baja - - + + Normal Normal - + High Alta @@ -1735,23 +1740,23 @@ Por defecto (Norteamérica) - + preferred aconsejado - - + + Size: Tamaño: - + Buffer Delay Retardo Buffer - + Buffer Delay: Retardo Buffer: @@ -1760,17 +1765,17 @@ Dirección Preestablecida - + The selected audio device could not be used because of the following error: El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: - + The previous driver will be selected. Se utilizará el driver anterior. - + Ok Ok @@ -3269,37 +3274,52 @@ El servidor Jack se ha cerrado. Este software necesita el servidor Jack para funcionar. Intenta reiniciar el software para solucionar este problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio input AudioHardwareGetProperty call failed. Parece ser que el sistema no tiene una tarjeta de sonido disponible. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio output AudioHardwareGetProperty call failed. Parece ser que el sistema no tiene una tarjeta de sonido disponible. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. La tasa de muestreo actual del dispositivo de audio de entrada de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. La tasa de muestreo actual del dispositivo de audio de salida de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. El formato de transmisión de audio de entrada para este dispositivo de audio no es compatible con este software. - + The audio output stream format for this audio device is not compatible with this software. El formato de transmisión de audio de salida para este dispositivo de audio no es compatible con este software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Los tamaños de buffer del dispositivo actual de entrada/salida de audio no pueden establecerse en un valor común. Por favor, selecciona otros dispositivos de entrada/salida de audio en la configuración del sistema. @@ -3309,48 +3329,48 @@ No se pudo iniciar el driver de audio. - + The audio device does not support the required sample rate. The required sample rate is: El dispositivo de audio no soporta la tasa de muestreo requerida. La tasa de muestreo requerida es de: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to El dispositivo de audio no permite establecer la tasa de muestreo requerida. Este error puede suceder si tienes un dispositivo de audio como el Roland UA-25EX en el que se configura mediante un interruptor físico en el dispositivo. Si es este el caso, por favor cambia la tasa de muestreo a - + Hz on the device and restart the Hz en el dispositivo y reinicie el software - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: El dispositivo de audio no soporta el número de canales requerido. El número de canales requerido es de: - - + + Required audio sample format not available. Formato de muestras de audio requerido no disponible. - + No ASIO audio device (driver) found. No se ha encontrado un dispositivo ASIO (driver). - + The El software - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. requiere la interfaz de audio de baja latencia ASIO para funcionar correctamente. No es una interfaz estándar de Windows y por tanto se requiere un driver de audio especial. Tu tarjeta de audio podría tener un driver ASIO nativo (lo recomendado) o quizá quieras probar un driver alternativo como ASIO4All. @@ -3367,42 +3387,42 @@ Selección de dispositivo no válida. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: Las propiedades del driver de audio han cambiado a un estado que es incompatible con este software. El dispositivo de audio seleccionado no se pudo utilizar a causa del siguiente error: - + Please restart the software. Por favor reinicie el software. - + Close Cerrar - + No usable Ningún driver - + audio device (driver) found. de audio utilizable encontrado. - + In the following there is a list of all available drivers with the associated error message: A continuación hay una lista de todos los drivers disponibles con el error asociado: - + Do you want to open the ASIO driver setups? ¿Quieres abrir la configuración del driver ASIO? - + could not be started because of audio interface issues. no pudo arrancar debido a problemas con el dispositivo de audio. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 5723c038e7..cce7449324 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -214,32 +214,32 @@ CAudioMixerBoard - + Personal Mix at the Server Mixage personnel au serveur - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Lorsque vous êtes connecté à un serveur, les contrôles vous permettent de régler votre mixage local sans affecter ce que les autres entendent de vous. Le titre indique le nom du serveur et, lorsqu'il est connu, s'il est en train d'enregistrer. - + Server Serveur - + T R Y I N G T O C O N N E C T T E N T A T I V E D E C O N N E X I O N - + RECORDING ACTIVE ENREGISTREMENT ACTIF - + Personal Mix at: Mixage personnel à : @@ -449,49 +449,49 @@ G - + Alias/Name Pseudo/nom - + Instrument Instrument - + Location Localisation - - - + + + Skill Level Niveau de compétence - + Alias Alias - + Beginner Débutant - + Intermediate Intermédiaire - + Expert Expert - + Musician Profile Profil de musicien @@ -825,7 +825,7 @@ - + C&onnect Se c&onnecter @@ -835,57 +835,57 @@ mise à jour du logiciel disponible - + &File &Fichier - + &View &Vue - + &Connection Setup... Paramètres de &connexion... - + My &Profile... Mon &profil - + C&hat... Tc&hate... - + &Settings... Paramètre&s... - + &Analyzer Console... Console d'&analyse - + Use &Two Rows Mixer Panel U&tiliser un panneau de mixage à deux rangées - + &Clear All Stored Solo and Mute Settings - + E&xit &Quitter - + &Edit Édit&er @@ -898,18 +898,18 @@ Aucun - + Center Centre - + R D - + L G @@ -984,37 +984,37 @@ Le processeur du client ou du serveur est à 100%. - + &Load Mixer Channels Setup... &Charger la configuration des canaux du mixeur... - + &Save Mixer Channels Setup... &Sauvegarder la configuration des canaux du mixeur... - + N&o Channel Sorting Pas de tri des canaux (&o) - + Sort Channel Users by &Name Trier les utilisateurs du canal par &nom - + Sort Channel Users by &Instrument Trier les utilisateurs du canal par &instrument - + Sort Channel Users by &Group Trier les utilisateurs des canaux par &groupe - + Sort Channel Users by &City Trier les utilisateurs du &canal par ville @@ -1023,33 +1023,38 @@ Effa&cer tous les paramètres de solo enregistrés - + Set All Faders to New Client &Level Régler tous &les charriots sur le niveau d'un nouveau client - + Central Server Serveur central - - + + Select Channel Setup File Sélectionnez le fichier de configuration des canaux - + user utilisateur - + users utilisateurs - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect Dé&connecter @@ -1509,7 +1514,7 @@ - + Mono Mono @@ -1519,14 +1524,14 @@ mode augmentera le débit de données de votre flux. Assurez-vous que votre débit montant ne dépasse pas la vitesse de téléchargement disponible de votre connexion internet. - + Mono-in/Stereo-out Mono-entrée/stéréo-sortie - + Stereo Stéréo @@ -1671,28 +1676,28 @@ Le débit montant audio dépend de la taille actuelle des paquets audio et du réglage de la compression. Assurez-vous que le débit montant n'est pas supérieur à votre vitesse de téléchargement Internet disponible (vérifiez cela avec un service tel que speedtest.net). - + Low Basse - - + + Normal Normale - + High Haute - + Fancy Fantaisie - + Compact Compact @@ -1739,23 +1744,23 @@ Défaut (Amérique du Nord) - + preferred préféré - - + + Size: Taille : - + Buffer Delay Délai de temporisation - + Buffer Delay: Délai de temporisation : @@ -1764,17 +1769,17 @@ Adresse prédéfinie - + The selected audio device could not be used because of the following error: Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : - + The previous driver will be selected. Le pilote précédent sera sélectionné. - + Ok Ok @@ -3261,37 +3266,52 @@ Le serveur Jack a été fermé. Ce logiciel nécessite un serveur Jack pour fonctionner. Essayez de redémarrer le logiciel pour résoudre le problème. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. L'appel d'entrée AudioHardwareGetProperty CoreAudio a échoué failed. Il semble qu'aucune carte son ne soit disponible dans le système. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. L'appel de sortie AudioHardwareGetProperty CoreAudio a échoué failed. Il semble qu'aucune carte son ne soit disponible dans le système. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Le taux d'échantillonnage de %1 Hz du périphérique d'entrée audio du système actuel n'est pas pris en charge. Veuillez ouvrir la configuration Audio-MIDI dans Applications->Utilitaires et essayer de définir un taux d'échantillonnage de %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Le taux d'échantillonnage de %1 Hz du périphérique de sortie audio du système actuel n'est pas pris en charge. Veuillez ouvrir la configuration Audio-MIDI dans Applications->Utilitaires et essayer de définir un taux d'échantillonnage de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Le format du flux d'entrée audio pour ce périphérique audio n'est pas compatible avec ce logiciel. - + The audio output stream format for this audio device is not compatible with this software. Le format du flux de sortie audio pour ce périphérique audio n'est pas compatible avec ce logiciel. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Les tailles de tampon du périphérique audio d'entrée et de sortie actuel ne peuvent pas être réglées à une valeur commune. Veuillez choisir d'autres périphériques audio d'entrée/sortie dans les paramètres de votre système. @@ -3301,48 +3321,48 @@ Le pilote audio n'a pas pu être initialisé. - + The audio device does not support the required sample rate. The required sample rate is: Le périphérique audio ne prend pas en charge la fréquence d'échantillonnage requise. La fréquence d'échantillonnage requise est : - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Le périphérique audio ne permet pas de régler la fréquence d'échantillonnage requise. Cette erreur peut se produire si vous avez une interface audio comme le Roland UA-25EX où vous réglez la fréquence d'échantillonnage avec un commutateur matériel sur le périphérique audio. Si c'est le cas, veuillez changer la fréquence d'échantillonnage à - + Hz on the device and restart the Hz sur le péripéhrique et redémarrer le logiciel - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: Le périphérique audio ne prend pas en charge le nombre de canaux requis. Le nombre de canaux requis pour l'entrée et la sortie est : - - + + Required audio sample format not available. Le format de l'échantillon audio requis n'est pas disponible. - + No ASIO audio device (driver) found. Aucun périphérique audio ASIO (pilote) trouvé. - + The Le logiciel - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. nécessite l'interface audio à faible latence ASIO pour fonctionner correctement. Il ne s'agit pas d'une interface audio Windows standard et un pilote audio spécial est donc nécessaire. Soit votre carte son dispose d'un pilote ASIO natif (ce qui est recommandé), soit vous pouvez utiliser d'autres pilotes comme le pilote ASIO4All. @@ -3359,42 +3379,42 @@ Sélection de périphérique invalide. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: Les propriétés du pilote audio ont changé et sont devenues incompatibles avec ce logiciel. Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : - + Please restart the software. Veuillez redémarrer le logiciel - + Close Fermer - + No usable Pas de périphérique audio (pilote) - + audio device (driver) found. utilisable trouvé - + In the following there is a list of all available drivers with the associated error message: Vous trouverez ci-dessous une liste de tous les pilotes disponibles avec le message d'erreur associé : - + Do you want to open the ASIO driver setups? Voulez-vous ouvrir les configurations des pilotes ASIO ? - + could not be started because of audio interface issues. n'a pas pu être lancé en raison de problèmes d'interface audio. diff --git a/src/res/translation/translation_it_IT.ts b/src/res/translation/translation_it_IT.ts index 4aff604b15..475ed18977 100644 --- a/src/res/translation/translation_it_IT.ts +++ b/src/res/translation/translation_it_IT.ts @@ -198,32 +198,32 @@ CAudioMixerBoard - + Personal Mix at the Server Mixer personale sul Server - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Quando connessi i fader permettono di regolare i volumi in locale senza influenzare l'ascolto degli altri utenti. L'intestazione mostra il nome de server, se valorizzato, e le informazioni sullo stato della sessione di registrazione se attiva. - + Server Server - + T R Y I N G T O C O N N E C T I N A T T E S A D I C O N N E S S I O N E - + RECORDING ACTIVE Sessione con Registrazione Attiva - + Personal Mix at: Mixer personale sul Server: @@ -454,49 +454,49 @@ G - + Alias/Name Identificativo/Nome - + Instrument Strumento - + Location Località - - - + + + Skill Level Livello di Preparazione - + Alias Alias - + Beginner Principiante - + Intermediate Livello Intermedio - + Expert Esperto - + Musician Profile Profilo del Musicista @@ -659,7 +659,7 @@ - + L L @@ -881,7 +881,7 @@ - + C&onnect C&onnetti @@ -891,57 +891,57 @@ Nuova versione disponibile - + &File &File - + &View &Vista - + &Connection Setup... Setup &Connessione... - + My &Profile... &Profilo Personale... - + C&hat... C&hat... - + &Settings... &Settaggi... - + &Analyzer Console... &Analizzatore... - + N&o Channel Sorting N&on Riordinare i Canali - + Sort Channel Users by &City Ordina i Canali per &Città di provenienza - + Use &Two Rows Mixer Panel Abilita &Vista su due Righe - + &Clear All Stored Solo and Mute Settings &Riprisitna tutti gli stati salvati di SOLO e MUTE @@ -950,42 +950,42 @@ &Ripristina i canali settati in "Solo" - + Set All Faders to New Client &Level Setta &Livelli del Mixer al valore impostato per i Nuovi Utenti - + E&xit &Uscita - + &Load Mixer Channels Setup... &Carica Setup Mixer... - + &Save Mixer Channels Setup... &Salva Setup Mixer... - + &Edit &Modifica - + Sort Channel Users by &Name Ordina canali per &Nome - + Sort Channel Users by &Instrument Ordina canali per &Strumento - + Sort Channel Users by &Group Ordina Canali per Nome &Utente @@ -998,38 +998,43 @@ Nullo - + Center Centro - + R R - + Central Server Server Centrale - - + + Select Channel Setup File Selezione File di Setup dei Canali - + user utente - + users utenti - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect D&isconnetti @@ -1477,7 +1482,7 @@ - + Mono Mono @@ -1487,14 +1492,14 @@ modalità che aumenterà la velocità dei dati del tuo stream. Assicurati che la tua velocità di upload non superi la velocità di upload disponibile per la tua connessione Internet. - + Mono-in/Stereo-out Mono-in/Stereo-out - + Stereo Stereo @@ -1639,49 +1644,49 @@ L'Upstream audio dipende dalle dimensioni del pacchetto audio e dalle impostazioni di compressione correnti. Assicurati che la velocità di upstream non sia superiore alla velocità della tua connessione (controlla questo con un servizio come speedtest.net). - + Low Low - - + + Normal Normal - + High High - + Fancy Fantasia - + Compact Compatto - + preferred consigliato - - + + Size: Livello: - + Buffer Delay Buffer Delay - + Buffer Delay: Buffer Delay: @@ -1690,17 +1695,17 @@ Indirizzo Preferito - + The selected audio device could not be used because of the following error: La scheda audio selezionata non può essere usata per i seguenti motivi: - + The previous driver will be selected. Sarà ripristinato il driver precedentemente usato. - + Ok Ok @@ -3214,37 +3219,52 @@ Il server Jack non è attivo. Questo software necessita del server Jack per funzionare. Prova a riavviare il software per risolvere questo problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. Ingresso CoreAudio Chiamata AudioHardwareGetProperty non riuscita. Sembra che il sistema non abbia una scheda audio disponibile. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. Uscita CoreAudio Chiamata AudioHardwareGetProperty non riuscita. Sembra che il sistema non abbia una scheda audio disponibile. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. La frequenza di campionamento corrente del dispositivo audio in ingresso di %1 Hz non è supportata. Apri Impostazioni-Audio-MIDI in Applicazioni-> Utilità e prova a impostare una frequenza di campionamento di %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. La frequenza di campionamento corrente del dispositivo audio in uscita %1 Hz non è supportata. Apri Impostazioni-Audio-MIDI in Applicazioni-> Utilità e prova a impostare una frequenza di campionamento di %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Il formato di trasmissione audio in ingresso per questo dispositivo audio non è supportato da questo software. - + The audio output stream format for this audio device is not compatible with this software. Il formato di trasmissione audio in uscita per questo dispositivo audio non è supportato da questo software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Le dimensioni del buffer dell'attuale dispositivo di input / output audio non possono essere impostate su un valore comune. Seleziona altri dispositivi di input / output audio nelle impostazioni di sistema. @@ -3254,48 +3274,48 @@ Il driver audio non può essere inizializzato. - + The audio device does not support the required sample rate. The required sample rate is: Il dispositivo audio non supporta la frequenza di campionamento richiesta. La frequenza di campionamento richiesta è: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Il dispositivo audio non consente di impostare la frequenza di campionamento richiesta. Questo errore può verificarsi se si dispone di un dispositivo audio come il Roland UA-25EX in cui è configurato mediante un interruttore fisico sul dispositivo. In tal caso, modificare la frequenza di campionamento a - + Hz on the device and restart the Hz sul dispositivo e riavviare il programma - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: Il dispositivo audio non supporta il numero richiesto di canali. Il numero di canali richiesti è: - - + + Required audio sample format not available. Formato di campionamento audio richiesto non disponibile. - + No ASIO audio device (driver) found. Non è stato trovato un dispositivo ASIO (driver). - + The Il programma - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. richiede che l'interfaccia audio ASIO a bassa latenza funzioni correttamente. Non è un'interfaccia standard di Windows e quindi è necessario un driver audio speciale. La tua scheda audio potrebbe avere un driver ASIO nativo (consigliato) o potresti provare un driver alternativo come ASIO4All. @@ -3307,42 +3327,42 @@ Device Selezionato non valido. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: I settaggi del driver audio sono stati cambiati con parametri incompatibili con questo programma. La scheda audio selezionata non può essere usata a causa dei seguenti errori: - + Please restart the software. Perfavore riavvia il programma. - + Close Chiudi - + No usable Device Non utilizzabile - + audio device (driver) found. driver non trovati. - + In the following there is a list of all available drivers with the associated error message: Di seguito è riportato un elenco di tutti i driver disponibili con errore associato: - + Do you want to open the ASIO driver setups? Vuoi aprire il setup dei Driver Audio ASIO? - + could not be started because of audio interface issues. Impossibile avviare a causa di problemi con il dispositivo audio. diff --git a/src/res/translation/translation_nl_NL.ts b/src/res/translation/translation_nl_NL.ts index 9a79eb9fa9..6bf35307de 100644 --- a/src/res/translation/translation_nl_NL.ts +++ b/src/res/translation/translation_nl_NL.ts @@ -198,32 +198,32 @@ CAudioMixerBoard - + Personal Mix at the Server Eigen mix op de Server - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Indien verbonden met de server kan hier de lokale mix ingesteld worden zonder dat hetgeen anderen van je horen wordt beïnvloed. De titel toont de servernaam en indien bekend of er audio wordt opgenomen. - + Server Server - + T R Y I N G T O C O N N E C T A A N H E T V E R B I N D E N - + RECORDING ACTIVE GELUIDSOPNAME ACTIEF - + Personal Mix at: Eigen mix op: @@ -446,49 +446,49 @@ G - + Alias/Name Alias/Naam - + Instrument Instrument - + Location Locatie - - - + + + Skill Level Vaardigheidssniveau - + Alias Alias - + Beginner Beginner - + Intermediate Gemiddeld - + Expert Gevorderd - + Musician Profile Muzikantenprofiel @@ -651,7 +651,7 @@ - + L L @@ -873,7 +873,7 @@ - + C&onnect C&onnect @@ -883,57 +883,57 @@ software-update beschikbaar - + &File &Bestand - + &View &Bekijken - + &Connection Setup... &Verbindingsinstellingen... - + My &Profile... Mijn &Profiel... - + C&hat... C&hat... - + &Settings... &Settings... - + &Analyzer Console... &Analyzer Console... - + N&o Channel Sorting Kanalen Niet S&orteren - + Sort Channel Users by &City Sorteer muzikanten op &Stad - + Use &Two Rows Mixer Panel Gebruik &Twee-rijen-mengpaneel - + &Clear All Stored Solo and Mute Settings @@ -942,42 +942,42 @@ &Wis Alle Opgeslagen Solo-instellingen - + Set All Faders to New Client &Level Zet Alle Faders op Nieuwe-Client-&Niveau - + E&xit E&xit - + &Load Mixer Channels Setup... &Laad Mengkanaalinstellingen... - + &Save Mixer Channels Setup... Mixerkanaalinstellingen &Opslaan... - + &Edit &Bewerken - + Sort Channel Users by &Name Sorteer muzikanten op &Naam - + Sort Channel Users by &Instrument Sorteer muzikanten op &Instrument - + Sort Channel Users by &Group Sorteer muzikanten op &Groep @@ -986,38 +986,43 @@ Geen - + Center Centrum - + R R - + Central Server Centrale Server - - + + Select Channel Setup File Selecteer bestand met Kanaalinstellingen - + user gebruiker - + users gebruikers - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect &Afmelden @@ -1465,7 +1470,7 @@ - + Mono Mono @@ -1475,14 +1480,14 @@ modus verhoogt de bandbreedte van de audiostream. Zorg ervoor dat deze niet hoger staat dan de beschikbare bandbreedte van uw internetverbinding. - + Mono-in/Stereo-out Mono-in/Stereo-out - + Stereo Stereo @@ -1627,28 +1632,28 @@ De upstreamsnelheid is afhankelijk van de huidige grootte van het audiopakket en de instelling van de audiocompressie. Zorg ervoor dat de upstreamsnelheid niet hoger is dan de beschikbare snelheid (controleer de upstreammogelijkheden van uw internetverbinding door bijvoorbeeld speedtest.net te gebruiken). - + Low Laag - - + + Normal Normaal - + High Hoog - + Fancy Fancy - + Compact Compact @@ -1691,38 +1696,38 @@ Standaard (Noord-Amerika) - + preferred gewenst - - + + Size: Size: - + Buffer Delay Buffervertraging - + Buffer Delay: Buffervertraging: - + The selected audio device could not be used because of the following error: Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: - + The previous driver will be selected. Het vorige stuurprogramma wordt geselecteerd. - + Ok Ok @@ -3218,37 +3223,52 @@ De Jack-server werd afgesloten. Voor deze software is een Jack-server nodig om te kunnen draaien. Probeer de software te herstarten om het probleem op te lossen. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio-ingang AudioHardwareGetProperty-oproep mislukt. Het lijkt erop dat er geen geluidskaart beschikbaar is in het systeem. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio uitgang AudioHardwareGetProperty call mislukt. Het lijkt erop dat er geen geluidskaart beschikbaar is in het systeem. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Een sample rate van %1 Hz voor het audio-ingangsapparaat van het huidige systeem wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. De sample rate van %1 Hz van het huidige systeem audiouitgangsapparaat wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. - + The audio input stream format for this audio device is not compatible with this software. Het audio input stream-formaat voor dit audioapparaat is niet compatibel met deze software. - + The audio output stream format for this audio device is not compatible with this software. Het formaat van de audio-uitgangsstroom voor dit audioapparaat is niet compatibel met deze software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. De buffergrootte van het huidige in- en uitgaande audioapparaat kan niet op een gemeenschappelijke waarde worden ingesteld. Kies andere in-/uitgangsaudioapparaten in uw systeeminstellingen. @@ -3258,48 +3278,48 @@ De audiodriver kon niet worden geïnitialiseerd. - + The audio device does not support the required sample rate. The required sample rate is: Het audioapparaat ondersteunt niet de vereiste samplefrequentie. De vereiste samplefrequentie wel: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Het audioapparaat biedt geen ondersteuning voor het instellen van de vereiste bemonsteringsfrequentie. Deze fout kan zich voordoen als u een audio-interface heeft zoals de Roland UA-25EX waarbij u de samplefrequentie instelt met een hardwareschakelaar op het audioapparaat. Als dit het geval is, verander dan de samplefrequentie in - + Hz on the device and restart the Hz op het apparaat en start de - + software. software. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Het audioapparaat ondersteunt niet het vereiste aantal kanalen. Het vereiste aantal kanalen voor in- en uitvoer is: - - + + Required audio sample format not available. Vereist audiosampleformaat niet beschikbaar. - + No ASIO audio device (driver) found. Geen ASIO-audioapparaat (stuurprogramma) gevonden. - + The De - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. software vereist de lage-latency audio-interface ASIO om goed te kunnen werken. Dit is geen standaard Windows audio-interface en daarom is een speciale audio-stuurprogramma vereist. Ofwel heeft uw geluidskaart een native ASIO driver (die wordt aanbevolen), ofwel wilt u alternatieve drivers gebruiken zoals de ASIO4All driver. @@ -3311,42 +3331,42 @@ Ongeldige apparaatkeuze. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: De eigenschappen van de audiodriver zijn veranderd in een toestand die niet compatibel is met deze software. Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: - + Please restart the software. Start de software opnieuw op. - + Close Sluiten - + No usable Niet bruikbaar - + audio device (driver) found. audioapparaat (stuurprogramma) gevonden. - + In the following there is a list of all available drivers with the associated error message: Hieronder vindt u een lijst van alle beschikbare drivers met de bijbehorende foutmelding: - + Do you want to open the ASIO driver setups? Wilt u de ASIO-stuurprogramma's openen? - + could not be started because of audio interface issues. kon niet worden gestart vanwege problemen met de audio-interface. diff --git a/src/res/translation/translation_pl_PL.ts b/src/res/translation/translation_pl_PL.ts index b5e02f5458..9319700d0d 100644 --- a/src/res/translation/translation_pl_PL.ts +++ b/src/res/translation/translation_pl_PL.ts @@ -158,32 +158,32 @@ CAudioMixerBoard - + Personal Mix at the Server Własny miks na serwerze - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Podczas połączenia z serwerem, znajdujące się tutaj opcje pozwalają ustawić własny miks bez wpływu na to jak inni ciebie słyszą. W tytule zawarta jest nazwa serwera oraz to, czy nagrywanie jest aktywne. - + Server Serwer - + T R Y I N G T O C O N N E C T P R Ó B U J Ę S I Ę P O Ł Ą C Z Y Ć - + RECORDING ACTIVE NAGRYWANIE AKTYWNE - + Personal Mix at: Własny miks na: @@ -305,7 +305,7 @@ Etykieta suwaka - + Alias Nazwa @@ -395,44 +395,44 @@ Gr - + Alias/Name Nick/Nazwa - + Instrument Instrument - + Location Lokalizacja - - - + + + Skill Level Poziom umiejętności - + Beginner Początkujący - + Intermediate Średniozaawansowany - + Expert Ekspert - + Musician Profile Profil muzyka @@ -547,7 +547,7 @@ - + L L @@ -713,7 +713,7 @@ - + C&onnect &Połącz @@ -723,72 +723,72 @@ dostępna aktualizacja oprogramowania - + &File &Plik - + &Load Mixer Channels Setup... Wczytaj ustawienia kanałów &miksera... - + &Save Mixer Channels Setup... Zapi&sz ustawienia kanałów miksera... - + &View &Widok - + &Connection Setup... &Konfiguracja połączenia... - + My &Profile... Mój &profil... - + C&hat... &Czat... - + &Settings... &Ustawienia... - + &Analyzer Console... &Konsola analizatora... - + N&o Channel Sorting &Bez sortowania kanałów - + Sort Channel Users by &Name Sortuj kanały według &nazwy - + Sort Channel Users by &Instrument Sortuj kanały według &instrumentu - + Sort Channel Users by &Group Sortuj kanały według &grupy - + Sort Channel Users by &City Sortuj kanały według &miasta @@ -797,63 +797,68 @@ Wy&czyść wszystkie zachowane ustawienia użytkowników - + Set All Faders to New Client &Level Ustaw suwaki do określonego w ustawieniach &poziomu - + E&xit &Wyjdź - + &Edit &Edytuj - + Use &Two Rows Mixer Panel Używaj &dwurzędowego panelu miksera - + &Clear All Stored Solo and Mute Settings Wy&czyść wszystkie ustawienia solo/wycissz - + Center Środek - + R P - + Central Server Serwer centralny - - + + Select Channel Setup File Wybierz plik ustawień kanału - + user użytkownik - + users użytkownicy - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect &Rozłącz @@ -2700,37 +2705,52 @@ Serwer Jack został wyłączony. Ten program wymaga serwera Jack'a do uruchomienia. Spróbuj zrestartować oprogramowanie, aby rozwiązać problem. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio wywołanie wejścia AudioHardwareGetProperty nie powiodło się. Wydaje się, że karta dźwiękowa nie jest dostępna w systemie. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio wywołanie wyjścia AudioHardwareGetProperty nie powiodło się. Wydaje się, że karta dźwiękowa nie jest dostępna w systemie. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Aktualna systemowa częstotliwość próbkowania urządzenia wejściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Aktualna systemowa częstotliwość próbkowania urządzenia wyjściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Format strumienia wejściowego audio dla tego urządzenia audio nie jest kompatybilny z tym oprogramowaniem. - + The audio output stream format for this audio device is not compatible with this software. Format strumienia wyjściowego audio dla tego urządzenia audio nie jest kompatybilny z tym oprogramowaniem. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Rozmiary bufora bieżącego wejściowego i wyjściowego urządzenia audio nie mogą być ustawione na wspólną wartość. Proszę wybrać inne wejściowe/wyjściowe urządzenia audio w ustawieniach systemowych. @@ -2798,42 +2818,42 @@ Wybrano niepoprawne urządzenie. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: Właściwości sterownika audio zmieniły i są niekompatybilne z Jamulus-em. Wybrane urządzenie audio nie mogło zostać użyte z powodu następującego błędu: - + Please restart the software. Uruchom program ponownie. - + Close Zamknij - + No usable Nieużywany - + audio device (driver) found. znaleziono urządzenie dźwiękowe (sterownik). - + In the following there is a list of all available drivers with the associated error message: Poniżej znajduje się lista wszystkich dostępnych sterowników wraz z powiązanymi komunikatami błędów: - + Do you want to open the ASIO driver setups? Czy chcesz otworzyć konfigurację sterownika ASIO? - + could not be started because of audio interface issues. nie mógł być uruchomiony z powodu problemów z interfejsem audio. diff --git a/src/res/translation/translation_pt_BR.ts b/src/res/translation/translation_pt_BR.ts index 4727227d36..2e9e27b224 100644 --- a/src/res/translation/translation_pt_BR.ts +++ b/src/res/translation/translation_pt_BR.ts @@ -215,32 +215,32 @@ CAudioMixerBoard - + Personal Mix at the Server Mixagem Pessoal no Servidor - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Quando conectado a um servidor, estes controles permite definir sua mixagem local sem afetar o que os outros ouvem de você. O título exibe o nome do servidor e, quando conhecido, se está ativamente gravando. - + Server Servidor - + T R Y I N G T O C O N N E C T T E N T A N D O C O N E C T A R - + RECORDING ACTIVE GRAVAÇÃO ATIVA - + Personal Mix at: Mixagem Pessoal em: @@ -450,49 +450,49 @@ G - + Alias/Name Apelido/Nome - + Instrument Instrumento - + Location Localização - - - + + + Skill Level Nível de Habilidade - + Alias Apelido - + Beginner Principiante - + Intermediate Intermediário - + Expert Avançado - + Musician Profile Perfil do músico @@ -823,7 +823,7 @@ - + C&onnect C&onectar @@ -833,57 +833,57 @@ atualização de software disponível - + &File &Arquivo - + &View &Ver - + &Connection Setup... &Conectar a Servidor... - + My &Profile... Meu &Perfil... - + C&hat... &Mensagens... - + &Settings... &Definições... - + &Analyzer Console... Console de &Análise... - + Use &Two Rows Mixer Panel Usar Duas Fileiras para &Painel do Mixer - + &Clear All Stored Solo and Mute Settings - + E&xit &Sair - + &Edit &Editar @@ -896,18 +896,18 @@ Nenhum - + Center Centro - + R R - + L L @@ -982,37 +982,37 @@ O CPU do cliente ou servidor está em 100%. - + &Load Mixer Channels Setup... &Carregar Configuração de Canais do Mixer... - + &Save Mixer Channels Setup... &Salvar Configuração de Canais do Mixer... - + N&o Channel Sorting S&em Ordenação de Canais - + Sort Channel Users by &Name Ordenar os Canais por &Nome - + Sort Channel Users by &Instrument Ordenar os Canais por &Instrumento - + Sort Channel Users by &Group Ordenar os Canais por &Grupo - + Sort Channel Users by &City Ordenar os Canais por &Cidade @@ -1021,33 +1021,38 @@ &Limpar Todos Ajustes de Solo Armazenados - + Set All Faders to New Client &Level Todos os Faders para Nível de Novo C&liente - + Central Server Servidor Central - - + + Select Channel Setup File Selecione Arquivo de Configuraçao de Canal - + user usuário - + users usuários - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect Opted by Desligar instead of Desconectar to keep same keyboard shortcut Desl&igar @@ -1496,7 +1501,7 @@ - + Mono Mono @@ -1511,14 +1516,14 @@ A taxa de transmissão do áudio depende do tamanho do pacote de áudio e da configuração de compactação de áudio. Verifique se a taxa de transmissão não é maior que a taxa disponível (verifique a taxa de upload da sua conexão à Internet usando, por exemplo, o speedtest.net). - + Mono-in/Stereo-out Entrada Mono/Saída Estéreo - + Stereo Estéreo @@ -1658,28 +1663,28 @@ A latência geral é calculada a partir da latência da conexão atual e do atraso introduzido pelas configurações de buffer. - + Low Baixa - - + + Normal Normal - + High Alta - + Fancy Sofisticada - + Compact Compacta @@ -1726,38 +1731,38 @@ Servidor Padrão (America do Norte) - + preferred preferido - - + + Size: Tamanho: - + Buffer Delay Atraso do buffer - + Buffer Delay: Atraso do buffer: - + The selected audio device could not be used because of the following error: O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - + The previous driver will be selected. O driver anterior será selecionado. - + Ok Ok @@ -3244,37 +3249,52 @@ O servidor Jack foi desligado. Este programa requer um servidor Jack para ser executado. Tente reiniciar o programa para resolver o problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A entrada do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A saída do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. A taxa de amostragem (sample rate) de %1 Hz do dispositivo de entrada de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Aplicativos-> Utilitários e tente definir uma taxa de amostragem de %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. A taxa de amostragem (sample rate) de %1 Hz do dispositivo de saída de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Aplicativos-> Utilitários e tente definir uma taxa de amostragem de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. O formato do fluxo de entrada de áudio para este dispositivo de áudio não é compatível com este programa. - + The audio output stream format for this audio device is not compatible with this software. O formato do fluxo de saída de áudio para este dispositivo de áudio não é compatível com este programa. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Os tamanhos de buffer do dispositivo de áudio de entrada e saída atual não podem ser definidos para um valor comum. Por favor, escolha outros dispositivos de áudio de entrada/saída nas configurações do seu sistema. @@ -3284,48 +3304,48 @@ O driver de áudio não pôde ser inicializado. - + The audio device does not support the required sample rate. The required sample rate is: O dispositivo de áudio não suporta a taxa de amostragem (sample rate) necessária. A taxa de amostragem necessária é: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to O dispositivo de áudio não suporta definir a taxa de amostragem (sample rate) necessária. Este erro pode ocorrer se você tiver uma interface de áudio como o Roland UA-25EX, onde se define a taxa de amostragem através de um interruptor de hardware no dispositivo de áudio. Se for esse o caso, altere a taxa de amostragem para - + Hz on the device and restart the Hz no dispositivo e reinicie o cliente - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: O dispositivo de áudio não suporta o número necessário de canais. O número necessário de canais para entrada e saída é: - - + + Required audio sample format not available. Formato de amostra de áudio necessário não disponível. - + No ASIO audio device (driver) found. Nenhum dispositivo de áudio ASIO (driver) encontrado. - + The O programa - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. requer que a interface de áudio de baixa latência ASIO funcione corretamente. Esta não é uma interface de áudio padrão do Windows e, portanto, é necessário um driver de áudio especial. Ou a sua placa de som possui um driver ASIO nativo (recomendado), ou pode usar drivers alternativos, como o driver ASIO4All. @@ -3342,42 +3362,42 @@ Seleção de dispositivo inválida. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: As propriedades do driver de áudio foram alteradas para um estado incompatível com este programa. O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - + Please restart the software. Por favor reinicie o programa. - + Close Fechar - + No usable Nenhum dispositivo de áudio (driver) - + audio device (driver) found. utilizável encontrado. - + In the following there is a list of all available drivers with the associated error message: Abaixo uma lista de todos os drivers disponíveis com a mensagem de erro associada: - + Do you want to open the ASIO driver setups? Deseja abrir as configurações do driver ASIO? - + could not be started because of audio interface issues. não pôde ser iniciado devido a problemas na interface de áudio. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 98bd5d8b60..4aed4ffb49 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -214,32 +214,32 @@ CAudioMixerBoard - + Personal Mix at the Server Mistura Pessoal no Servidor - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Quando ligado a um servidor, estes controles permitem que defina a sua mistura local sem afectar o que os outros ouvem. O título mostra o nome do servidor e, quando conhecido, se está gravando activamente. - + Server Servidor - + T R Y I N G T O C O N N E C T T E N T A N D O L I G A R - + RECORDING ACTIVE GRAVAÇÃO ACTIVA - + Personal Mix at: Mistura Pessoal no Servidor: @@ -449,49 +449,49 @@ G - + Alias/Name Nome/Alcunha - + Instrument Instrumento - + Location Localização - - - + + + Skill Level Nível de Habilidade - + Alias - + Beginner Principiante - + Intermediate Intermediário - + Expert Avançado - + Musician Profile Perfil do músico @@ -821,7 +821,7 @@ - + C&onnect &Ligar @@ -831,57 +831,57 @@ - + &File &Ficheiro - + &View &Ver - + &Connection Setup... &Ligar a Servidor... - + My &Profile... Meu &Perfil... - + C&hat... &Mensagens... - + &Settings... &Definições... - + &Analyzer Console... Consola de &Análise... - + Use &Two Rows Mixer Panel - + &Clear All Stored Solo and Mute Settings - + E&xit &Sair - + &Edit &Editar @@ -894,18 +894,18 @@ Nenhum - + Center Centro - + R R - + L L @@ -980,68 +980,73 @@ O CPU do cliente ou servidor está a 100%. - + &Load Mixer Channels Setup... A&brir configuração da mistura... - + &Save Mixer Channels Setup... Salvar &configuração da mistura... - + N&o Channel Sorting - + Sort Channel Users by &Name Ordenar Utilizadores por &Nome - + Sort Channel Users by &Instrument Ordenar canais por &Instrumento - + Sort Channel Users by &Group Ordenar canais por &Grupo - + Sort Channel Users by &City - + Set All Faders to New Client &Level - + Central Server Servidor Central - - + + Select Channel Setup File Selecione o ficheiro de configuração da mistura - + user utilizador - + users utilizadores - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect Desl&igar @@ -1489,7 +1494,7 @@ - + Mono Mono @@ -1504,14 +1509,14 @@ A taxa de transmissão do áudio depende do tamanho do pacote de áudio e da configuração da compactação de áudio. Verifique se a taxa de transmissão não é maior que a sua taxa de upload disponível (verifique isto com um serviço como o speedtest.net). - + Mono-in/Stereo-out Entrada Mono/Saída Estéreo - + Stereo Estéreo @@ -1651,28 +1656,28 @@ A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer. - + Low Baixa - - + + Normal Normal - + High Alta - + Fancy Sofisticado - + Compact Compacto @@ -1719,38 +1724,38 @@ Servidor Padrão (America do Norte) - + preferred preferido - - + + Size: Tamanho: - + Buffer Delay Atraso do buffer - + Buffer Delay: Atraso do buffer: - + The selected audio device could not be used because of the following error: O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - + The previous driver will be selected. O driver anterior será selecionado. - + Ok Ok @@ -3237,37 +3242,52 @@ O servidor Jack foi desligado. Este programa requer um servidor Jack para ser executado. Tente reiniciar o programa para resolver o problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A entrada do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A saída do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. A taxa de amostragem (sample rate) de %1 Hz do dispositivo de entrada de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Applications-> Utilities e tente definir uma taxa de amostragem de %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. A taxa de amostragem (sample rate) de %1 Hz do dispositivo de saída de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Applications-> Utilities e tente definir uma taxa de amostragem de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. O formato do fluxo de entrada de áudio para este dispositivo de áudio não é compatível com este programa. - + The audio output stream format for this audio device is not compatible with this software. O formato do fluxo de saída de áudio para este dispositivo de áudio não é compatível com este programa. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Os tamanhos de buffer do dispositivo de áudio de entrada e saída atual não podem ser definidos para um valor comum. Por favor, escolha outros dispositivos de áudio de entrada/saída nas configurações do seu sistema. @@ -3277,48 +3297,48 @@ O driver de áudio não pôde ser inicializado. - + The audio device does not support the required sample rate. The required sample rate is: O dispositivo de áudio não suporta a taxa de amostragem (sample rate) necessária. A taxa de amostragem necessária é: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to O dispositivo de áudio não suporta definir a taxa de amostragem (sample rate) necessária. Este erro pode ocorrer se você tiver uma interface de áudio como o Roland UA-25EX, onde se define a taxa de amostragem através de um interruptor de hardware no dispositivo de áudio. Se for esse o caso, altere a taxa de amostragem para - + Hz on the device and restart the Hz no dispositivo e reinicie o cliente - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: O dispositivo de áudio não suporta o número necessário de canais. O número necessário de canais para entrada e saída é: - - + + Required audio sample format not available. Formato de amostra de áudio necessário não disponível. - + No ASIO audio device (driver) found. Nenhum dispositivo de áudio ASIO (driver) encontrado. - + The O programa - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. requer que a interface de áudio de baixa latência ASIO funcione corretamente. Esta não é uma interface de áudio padrão do Windows e, portanto, é necessário um driver de áudio especial. Ou a sua placa de som possui um driver ASIO nativo (recomendado), ou pode usar drivers alternativos, como o driver ASIO4All. @@ -3335,42 +3355,42 @@ Seleção de dispositivo inválida. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: As propriedades do driver de áudio foram alteradas para um estado incompatível com este programa. O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - + Please restart the software. Por favor reinicie o programa. - + Close Fechar - + No usable Nenhum dispositivo de áudio (driver) - + audio device (driver) found. utilizável encontrado. - + In the following there is a list of all available drivers with the associated error message: De seguida verá uma lista de todos os drivers disponíveis com a mensagem de erro associada: - + Do you want to open the ASIO driver setups? Deseja abrir as configurações do driver ASIO? - + could not be started because of audio interface issues. não pôde ser iniciado devido a problemas na interface de áudio. diff --git a/src/res/translation/translation_sk_SK.ts b/src/res/translation/translation_sk_SK.ts index ffb0f4451f..c673941a96 100644 --- a/src/res/translation/translation_sk_SK.ts +++ b/src/res/translation/translation_sk_SK.ts @@ -158,32 +158,32 @@ CAudioMixerBoard - + Personal Mix at the Server Osobný mix servera - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. Po pripojení sa na server vám tieto ovládacie prvky umožnia lokálne mixovať zvuk bez toho, aby ste tým ovplyvnili to, čo od vás budú počuť ostatní. Nadpis okna zobrazuje názov servera a, ak je táto informácia k dispozícii, či je aktívne nahrávanie. - + Server Server - + T R Y I N G T O C O N N E C T P O K U S O P R I P O J E N I E - + RECORDING ACTIVE NAHRÁVANIE AKTÍVNE - + Personal Mix at: Osobný mix na: @@ -390,49 +390,49 @@ Skp - + Alias/Name Prez/Meno - + Instrument Hud. nástroj - + Location Miesto - - - + + + Skill Level Úroveň hrania - + Alias Prezývka - + Beginner Začiatočník - + Intermediate Pokročilý - + Expert Expert - + Musician Profile Profil hudobníka @@ -547,7 +547,7 @@ - + L Ľ @@ -713,7 +713,7 @@ - + C&onnect &Pripojiť @@ -723,97 +723,97 @@ dostupná aktualizácia softvéru - + &File &Súbor - + &View Pohľ&ad - + &Connection Setup... &Nastavenie pripojenia... - + My &Profile... Môj &profil... - + C&hat... &Chat... - + &Settings... &Nastavenia... - + &Analyzer Console... &Konzola analyzátora... - + N&o Channel Sorting - + Sort Channel Users by &City - + Use &Two Rows Mixer Panel - + &Clear All Stored Solo and Mute Settings - + Set All Faders to New Client &Level - + E&xit U&končiť - + &Load Mixer Channels Setup... &Načítať nastavenia kanálov mixéra... - + &Save Mixer Channels Setup... &Uložiť nastavenia kanálov mixéra... - + &Edit Ú&pravy - + Sort Channel Users by &Name Triediť používateľov kanálov podľa &mena - + Sort Channel Users by &Instrument Triediť používateľov kanálov podľa &nástroja - + Sort Channel Users by &Group Triediť používateľov kanálov podľa &skupiny @@ -822,38 +822,43 @@ Żaden - + Center Stred - + R P - + Central Server Centrálny server - - + + Select Channel Setup File Vyberte súbor s nastavením kanálov - + user používateľ - + users používatelia - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect O&dpojiť @@ -1089,12 +1094,12 @@ - + Fancy Efektný - + Compact Kompaktný @@ -1194,19 +1199,19 @@ - + Mono - + Mono-in/Stereo-out Mono-dnu/Stereo-von - + Stereo Stereo @@ -1341,18 +1346,18 @@ - + Low Nízka - - + + Normal Normálna - + High Vysoká @@ -1387,38 +1392,38 @@ Predvolený - + preferred preferované - - + + Size: Veľkosť: - + Buffer Delay Oneskorenie buffera - + Buffer Delay: Oneskorenie buffera: - + The selected audio device could not be used because of the following error: Vybrané audio zariadenie nie je možné použiť kvôli nasledujúcej chybe: - + The previous driver will be selected. Bude vybraný predchádzajúci ovládač. - + Ok Ok @@ -2738,37 +2743,52 @@ Server Jack bol vypnutý. Tento program vyžaduje, aby bol server Jack spustený. Pokúste sa reštartovať tento program a vyriešiť tak tento problém. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. - + The audio output stream format for this audio device is not compatible with this software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. @@ -2778,48 +2798,48 @@ Audio ovládač sa nepodarilo inicializovať. - + The audio device does not support the required sample rate. The required sample rate is: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to - + Hz on the device and restart the - + software. - + The audio device does not support the required number of channels. The required number of channels for input and output is: - - + + Required audio sample format not available. - + No ASIO audio device (driver) found. - + The - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. @@ -2831,42 +2851,42 @@ Neplatný výber zariadenia. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - + Please restart the software. Prosím, reštartujte tento program. - + Close Zavrieť - + No usable Nebolo nájdené - + audio device (driver) found. žiadne zvukové zariadenie (ovládač). - + In the following there is a list of all available drivers with the associated error message: - + Do you want to open the ASIO driver setups? - + could not be started because of audio interface issues. diff --git a/src/res/translation/translation_sv_SE.ts b/src/res/translation/translation_sv_SE.ts index 7f6a60bb22..083c020a82 100644 --- a/src/res/translation/translation_sv_SE.ts +++ b/src/res/translation/translation_sv_SE.ts @@ -159,32 +159,32 @@ CAudioMixerBoard - + Personal Mix at the Server Personlig mix på servern - + When connected to a server, the controls here allow you to set your local mix without affecting what others hear from you. The title shows the server name and, when known, whether it is actively recording. När du är ansluten till en server låter kontrollerna här ställa in din lokala mix utan att påverka vad andra hör från dig. Titeln visar servernamnet och, om det är känt, om den aktivt spelar in. - + Server Server - + T R Y I N G T O C O N N E C T F Ö R S Ö K E R A N S L U T A - + RECORDING ACTIVE INSPELNING AKTIV - + Personal Mix at: Personlig mix på: @@ -391,49 +391,49 @@ Grp - + Alias/Name Alias/Namn - + Instrument Instrument - + Location Plats - - - + + + Skill Level Skicklighetsnivå - + Alias Alias - + Beginner Nybörjare - + Intermediate Mellannivå - + Expert Expert - + Musician Profile Musikprofil @@ -585,7 +585,7 @@ - + L V @@ -726,7 +726,7 @@ - + C&onnect &Anslut @@ -736,57 +736,57 @@ mjukvaruuppdatering tillgänglig - + &File &Fil - + &View &Vy - + &Connection Setup... Anslutnings&inställningar... - + My &Profile... Min &profil... - + C&hat... &Chatt... - + &Settings... &Inställningar... - + &Analyzer Console... &Analyskonsol... - + N&o Channel Sorting I&ngen kanalstortering - + Sort Channel Users by &City Sortera Användarna efter S&taden - + Use &Two Rows Mixer Panel - + &Clear All Stored Solo and Mute Settings @@ -795,42 +795,42 @@ &Rensa alla lagrade soloinställningar - + Set All Faders to New Client &Level - + E&xit &Avsluta - + &Load Mixer Channels Setup... &Ladda in mixerkanalinställningarna... - + &Save Mixer Channels Setup... &Spara mixerkanalinställningarna... - + &Edit &Redigera - + Sort Channel Users by &Name Sortera kanalanvändare efter &Namn - + Sort Channel Users by &Instrument Sortera kanalanvändare efter &Instrument - + Sort Channel Users by &Group Sortera kanalanvändare efter &Grupp @@ -839,38 +839,43 @@ Ingen - + Center Mitten - + R H - + Central Server Central server - - + + Select Channel Setup File Välj kanalinställningsfil - + user användare - + users användare - + + The soundcard device does not work correctly. Please check the device selection and the driver settings. + + + + D&isconnect Koppla &ner @@ -1228,7 +1233,7 @@ - + Mono Mono @@ -1240,7 +1245,7 @@ - + Stereo Stereo @@ -1359,69 +1364,69 @@ Inställningar för ASIO - + Mono-in/Stereo-out Mono-in/Stereo-ut - + Low Låg - - + + Normal Normal - + High Hög - + Fancy Fancy - + Compact Kompakt - + preferred föredraget - - + + Size: Storlek: - + Buffer Delay Buffertfördröjning - + Buffer Delay: Buffertfördröjning: - + The selected audio device could not be used because of the following error: Den valda ljudenheten kunde inte användas på grund av följande fel: - + The previous driver will be selected. Den föregående drivrutinen kommer att väljas. - + Ok Okej @@ -2855,37 +2860,52 @@ Jack-servern stängdes av. Denna programvara kräver att en Jack-server körs. Försök starta om programvaran för att lösa problemet. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio-ingång AudioHardwareGetProperty misslyckades. Det verkar som om det inte finns något ljudkort i systemet. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio-utgång AudioHardwareGetProperty misslyckades. Det verkar som om det inte finns något ljudkort i systemet. - + + The previously selected audio device is no longer available. The system default audio device will be selected instead. + + + + + Current audio input device is no longer available. + + + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Nuvarande systemljudingångsenhetens samplingsfrekvens för %1 Hz stöds inte. Öppna Audio-MIDI-installationen i Applications->Utilities och försök att ställa in en samplingsfrekvens på %2 Hz. - + + Current audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Nuvarande systemljudutgångsenhetens samplingsfrekvens för %1 Hz stöds inte. Öppna Audio-MIDI-installationen i Applications->Utilities och försök att ställa in en samplingshastighet på %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Ljudingångsströmformatet för denna ljudenhet är inte kompatibelt med den här programvaran. - + The audio output stream format for this audio device is not compatible with this software. Ljudutmatningsströmformatet för denna ljudenhet är inte kompatibelt med den här programvaran. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Buffertstorlekarna för den aktuella ingångs- och utgångsljudenheten kan inte ställas in på ett gemensamt värde. Välj andra input/output-ljudenheter i systeminställningarna. @@ -2895,48 +2915,48 @@ Ljuddrivrutinen kunde inte initialiseras. - + The audio device does not support the required sample rate. The required sample rate is: Ljudenheten stöder inte den valda samplingsfrekvensen. Den valda provhastigheten är: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Ljudenheten stöder inte inställning av önskad samplingsfrekvens. Det här felet kan hända om du har ett ljudgränssnitt som Roland UA-25EX där du ställer in samtalstakten med en hårdvaruskontakt på ljudenheten. Om detta är fallet, ändra provhastigheten till - + Hz on the device and restart the Hz på enheten och starta om - + software. applikationen. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Ljudenheten stöder inte det valda antalet kanaler. Det valda antalet kanaler för in- och utmatning är: - - + + Required audio sample format not available. Nödvändigt ljudformat är inte tillgängligt. - + No ASIO audio device (driver) found. Ingen ASIO-ljudenhet (drivrutin) hittades. - + The Programvaran - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. kräver det låga latentljudgränssnittet ASIO för att fungera korrekt. Detta är inte ett vanligt Windows ljudgränssnitt och därför krävs en speciell ljuddrivrutin. Antingen har ditt ljudkort en inbyggd ASIO-drivrutin (som rekommenderas) eller så kanske du vill använda alternativa drivrutiner som ASIO4All-drivrutinen. @@ -2948,42 +2968,42 @@ Ogiltigt enhetsval. - + The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: Ljuddrivrutinens egenskaper har ändrats till ett tillstånd som inte är kompatibelt med den här programvaran. Den valda ljudenheten kunde inte användas på grund av följande fel: - + Please restart the software. Starta om programvaran. - + Close Stäng - + No usable Ingen användbar - + audio device (driver) found. ljudenhet (drivrutin) hittades. - + In the following there is a list of all available drivers with the associated error message: I det följande finns en lista över alla tillgängliga drivrutiner med tillhörande felmeddelande: - + Do you want to open the ASIO driver setups? Vill du öppna ASIO-drivrutinens inställningar? - + could not be started because of audio interface issues. kunde inte startas på grund av problem med ljudgränssnittet. From 785e1c8dfdd066b01711368d15b8be6747010ea6 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 12:56:14 +0100 Subject: [PATCH 26/92] update German translation --- src/res/translation/translation_de_DE.qm | Bin 105208 -> 106461 bytes src/res/translation/translation_de_DE.ts | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index 3f2d7f4f2cc672328396fd69f5a37d1c1fc4e266..788aef0ab21c6dbafa1e58e4d2ba243b54ff450a 100644 GIT binary patch delta 4740 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 delta 4033 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 The soundcard device does not work correctly. Please check the device selection and the driver settings. - + Die Soundkarte funktioniert nicht ordnungsgemäß. Bitte überprüfe die Soundkartenauswahl und die Einstellungen der Soundkarte. @@ -3262,12 +3262,12 @@ The previously selected audio device is no longer available. The system default audio device will be selected instead. - + Die vorher ausgewählte Soundkarte ist nicht mehr im System verfügbar. Die System-Standardsoundkarte wird nun stattdessen ausgewählt. Current audio input device is no longer available. - + Das aktuelle Audiogerät für den Toneingang ist nicht mehr verfügbar. @@ -3277,7 +3277,7 @@ Current audio output device is no longer available. - + Das aktuelle Audiogerät für den Tonausgang ist nicht mehr verfügbar. From b32e5f9ed6d4c08ab0b89b3bdcce83def0995948 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:03:24 +0100 Subject: [PATCH 27/92] added qDebug() messages --- mac/sound.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mac/sound.cpp b/mac/sound.cpp index 68547d11cc..b554c8679b 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -349,6 +349,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { AudioObjectPropertyAddress stPropertyAddress; +qDebug() << "1"; + // unregister callbacks if previous device was valid if ( lCurDev != INVALID_INDEX ) { @@ -363,6 +365,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); +qDebug() << "2"; + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; AudioObjectRemovePropertyListener( kAudioObjectSystemObject, @@ -370,6 +374,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); +qDebug() << "3"; + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], @@ -377,11 +383,15 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); +qDebug() << "4"; + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); +qDebug() << "5"; + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], @@ -389,6 +399,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); +qDebug() << "6"; + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -407,11 +419,15 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // setup callbacks for device property changes stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; +qDebug() << "7"; + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); +qDebug() << "8"; + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -419,11 +435,15 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; +qDebug() << "9"; + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); +qDebug() << "10"; + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -431,6 +451,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; +qDebug() << "11"; + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, &stPropertyAddress, deviceNotification, @@ -438,6 +460,8 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; +qDebug() << "12"; + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, &stPropertyAddress, deviceNotification, From 6256850654ff5e447ca4bed693166c6876c5f025 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:05:56 +0100 Subject: [PATCH 28/92] test commit --- mac/sound.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mac/sound.cpp b/mac/sound.cpp index b554c8679b..1b2254983e 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -335,11 +335,13 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) } } +/* if ( !strDriverName.isEmpty() && !bDriverFound ) { QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " "is no longer available. The system default audio device will be selected instead." ) ); } +*/ // check device capabilities if it fulfills our requirements const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); From fea4dfe67d877a25065faefe9dca6147ca3f2bd6 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:14:14 +0100 Subject: [PATCH 29/92] QMessageBox should not be in the mutex lock --- mac/sound.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 1b2254983e..5be6a38ef6 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -319,29 +319,32 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { - // secure lNumDevs/strDriverNames access - QMutexLocker locker ( &Mutex ); - // find and load driver int iDriverIdx = 0; // if the name was not found, use first driver bool bDriverFound = false; - for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) + // secure strDriverNames access + Mutex.lock(); { - if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) + for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) { - iDriverIdx = i; - bDriverFound = true; + if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) + { + iDriverIdx = i; + bDriverFound = true; + } } } + Mutex.unlock(); -/* if ( !strDriverName.isEmpty() && !bDriverFound ) { QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " "is no longer available. The system default audio device will be selected instead." ) ); } -*/ + + // secure lNumDevs/strDriverNames access + QMutexLocker locker ( &Mutex ); // check device capabilities if it fulfills our requirements const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); From f667feab0c83cf73ef5c077973a5affd9f7490c2 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:18:44 +0100 Subject: [PATCH 30/92] use a different Mutex for IO access --- mac/sound.cpp | 2 +- mac/sound.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 5be6a38ef6..2d00f45d1c 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -1037,7 +1037,7 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, CSound* pSound = static_cast ( inRefCon ); // both, the input and output device use the same callback function - QMutexLocker locker ( &pSound->Mutex ); + QMutexLocker locker ( &pSound->IOMutex ); const int iCoreAudioBufferSizeMono = pSound->iCoreAudioBufferSizeMono; const int iSelInBufferLeft = pSound->iSelInBufferLeft; diff --git a/mac/sound.h b/mac/sound.h index 646a2ef969..6b17c25024 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -142,4 +142,5 @@ class CSound : public CSoundBase QString sChannelNamesOutput[MAX_NUM_IN_OUT_CHANNELS]; QMutex Mutex; + QMutex IOMutex; }; From 74cc0f6a29b5421068424e6992254c0f4328c2ee Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:25:13 +0100 Subject: [PATCH 31/92] remove debug calls --- mac/sound.cpp | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 2d00f45d1c..cdac8ab415 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -354,8 +354,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { AudioObjectPropertyAddress stPropertyAddress; -qDebug() << "1"; - // unregister callbacks if previous device was valid if ( lCurDev != INVALID_INDEX ) { @@ -370,8 +368,6 @@ qDebug() << "1"; deviceNotification, this ); -qDebug() << "2"; - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; AudioObjectRemovePropertyListener( kAudioObjectSystemObject, @@ -379,8 +375,6 @@ qDebug() << "2"; deviceNotification, this ); -qDebug() << "3"; - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], @@ -388,15 +382,11 @@ qDebug() << "3"; deviceNotification, this ); -qDebug() << "4"; - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); -qDebug() << "5"; - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], @@ -404,8 +394,6 @@ qDebug() << "5"; deviceNotification, this ); -qDebug() << "6"; - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -424,15 +412,11 @@ qDebug() << "6"; // setup callbacks for device property changes stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; -qDebug() << "7"; - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); -qDebug() << "8"; - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -440,15 +424,11 @@ qDebug() << "8"; stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; -qDebug() << "9"; - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); -qDebug() << "10"; - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -456,8 +436,6 @@ qDebug() << "10"; stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; -qDebug() << "11"; - AudioObjectAddPropertyListener ( kAudioObjectSystemObject, &stPropertyAddress, deviceNotification, @@ -465,8 +443,6 @@ qDebug() << "11"; stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; -qDebug() << "12"; - AudioObjectAddPropertyListener ( kAudioObjectSystemObject, &stPropertyAddress, deviceNotification, From 7ac8e2b797892459239ee85346871ae2637a4299 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:26:29 +0100 Subject: [PATCH 32/92] try out if now the previous mutex lock works fine --- mac/sound.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index cdac8ab415..2aaa64cfb4 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -319,23 +319,21 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { + // secure lNumDevs/strDriverNames access + QMutexLocker locker ( &Mutex ); + // find and load driver int iDriverIdx = 0; // if the name was not found, use first driver bool bDriverFound = false; - // secure strDriverNames access - Mutex.lock(); + for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) { - for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) + if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) { - if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) - { - iDriverIdx = i; - bDriverFound = true; - } + iDriverIdx = i; + bDriverFound = true; } } - Mutex.unlock(); if ( !strDriverName.isEmpty() && !bDriverFound ) { @@ -343,9 +341,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) "is no longer available. The system default audio device will be selected instead." ) ); } - // secure lNumDevs/strDriverNames access - QMutexLocker locker ( &Mutex ); - // check device capabilities if it fulfills our requirements const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); From 598abd897658a27ef454a995ed0c1289d106a1db Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:28:19 +0100 Subject: [PATCH 33/92] revert back the change -> it is necessary that QMessageBox is not in mutexed region --- mac/sound.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 2aaa64cfb4..cdac8ab415 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -319,21 +319,23 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { - // secure lNumDevs/strDriverNames access - QMutexLocker locker ( &Mutex ); - // find and load driver int iDriverIdx = 0; // if the name was not found, use first driver bool bDriverFound = false; - for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) + // secure strDriverNames access + Mutex.lock(); { - if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) + for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) { - iDriverIdx = i; - bDriverFound = true; + if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) + { + iDriverIdx = i; + bDriverFound = true; + } } } + Mutex.unlock(); if ( !strDriverName.isEmpty() && !bDriverFound ) { @@ -341,6 +343,9 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) "is no longer available. The system default audio device will be selected instead." ) ); } + // secure lNumDevs/strDriverNames access + QMutexLocker locker ( &Mutex ); + // check device capabilities if it fulfills our requirements const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); From fddc3723f829a146bf90c5d8ce714a81d24a0fe4 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:52:23 +0100 Subject: [PATCH 34/92] do not reload audio device list if only the device property has changed --- mac/sound.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index cdac8ab415..a6f01602f1 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -992,8 +992,11 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, ( inAddresses->mSelector == kAudioHardwarePropertyDefaultOutputDevice ) || ( inAddresses->mSelector == kAudioHardwarePropertyDefaultInputDevice ) ) { - // reload the driver list of available sound devices - pSound->GetAvailableInOutDevices(); + // reload the driver list of available sound devices if necessary + if ( inAddresses->mSelector != kAudioDevicePropertyDeviceHasChanged ) + { + pSound->GetAvailableInOutDevices(); + } // if any property of the device has changed, do a full reload pSound->EmitReinitRequestSignal ( RS_RELOAD_RESTART_AND_INIT ); From 5221fcdfa0e61c2de981576731286f8dd3e09b62 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 28 Nov 2020 14:54:33 +0100 Subject: [PATCH 35/92] undo latest change since it did not fix the issue --- mac/sound.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index a6f01602f1..cdac8ab415 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -992,11 +992,8 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, ( inAddresses->mSelector == kAudioHardwarePropertyDefaultOutputDevice ) || ( inAddresses->mSelector == kAudioHardwarePropertyDefaultInputDevice ) ) { - // reload the driver list of available sound devices if necessary - if ( inAddresses->mSelector != kAudioDevicePropertyDeviceHasChanged ) - { - pSound->GetAvailableInOutDevices(); - } + // reload the driver list of available sound devices + pSound->GetAvailableInOutDevices(); // if any property of the device has changed, do a full reload pSound->EmitReinitRequestSignal ( RS_RELOAD_RESTART_AND_INIT ); From 17fb16685ca091df4214b6a8ede048b6f27c9326 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 29 Nov 2020 11:15:18 +0100 Subject: [PATCH 36/92] removed ENABLE_CLIENT_VERSION_AND_OS_DEBUGGING since this should be done with the Jamulus Explorer instead --- src/clientdlg.cpp | 11 ++--------- src/clientdlg.h | 4 ++-- src/connectdlg.cpp | 29 ----------------------------- src/connectdlg.h | 6 ------ src/global.h | 5 ----- 5 files changed, 4 insertions(+), 51 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 8f4a96ba68..5fa11702d5 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -827,8 +827,8 @@ void CClientDlg::OnVersionAndOSReceived ( COSUtil::EOpSystemType , #endif } -void CClientDlg::OnCLVersionAndOSReceived ( CHostAddress InetAddr, - COSUtil::EOpSystemType eOSType, +void CClientDlg::OnCLVersionAndOSReceived ( CHostAddress , + COSUtil::EOpSystemType , QString strVersion ) { // update check @@ -840,13 +840,6 @@ void CClientDlg::OnCLVersionAndOSReceived ( CHostAddress InetAddr, QTimer::singleShot ( 60000, [this]() { lblUpdateCheck->hide(); } ); } #endif - -#ifdef ENABLE_CLIENT_VERSION_AND_OS_DEBUGGING - ConnectDlg.SetVersionAndOSType ( InetAddr, eOSType, strVersion ); -#else - Q_UNUSED ( InetAddr ) // avoid compiler warnings - Q_UNUSED ( eOSType ) // avoid compiler warnings -#endif } void CClientDlg::OnChatTextReceived ( QString strChatText ) diff --git a/src/clientdlg.h b/src/clientdlg.h index ccb2240460..63bd577056 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -143,8 +143,8 @@ public slots: void OnVersionAndOSReceived ( COSUtil::EOpSystemType , QString strVersion ); - void OnCLVersionAndOSReceived ( CHostAddress InetAddr, - COSUtil::EOpSystemType eOSType, + void OnCLVersionAndOSReceived ( CHostAddress , + COSUtil::EOpSystemType , QString strVersion ); void OnLoadChannelSetup(); diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index 73df6f69d9..e3ea9d5370 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -709,11 +709,7 @@ void CConnectDlg::OnTimerPing() CurServerAddress ) ) { // if address is valid, send ping or the version and OS request -#ifdef ENABLE_CLIENT_VERSION_AND_OS_DEBUGGING - emit CreateCLServerListReqVerAndOSMes ( CurServerAddress ); -#else emit CreateCLServerListPingMes ( CurServerAddress ); -#endif } } } @@ -902,28 +898,3 @@ void CConnectDlg::DeleteAllListViewItemChilds ( QTreeWidgetItem* pItem ) delete pCurChildItem; } } - -#ifdef ENABLE_CLIENT_VERSION_AND_OS_DEBUGGING -void CConnectDlg::SetVersionAndOSType ( CHostAddress InetAddr, - COSUtil::EOpSystemType eOSType, - QString strVersion ) -{ - // apply the received version and OS type to the correct server list entry - QTreeWidgetItem* pCurListViewItem = FindListViewItem ( InetAddr ); - - if ( pCurListViewItem ) - { -// TEST since this is just a debug info, we just reuse the ping column (note -// the we have to replace the ping message emit with the version and OS request -// so that this works, see above code) -pCurListViewItem-> - setText ( 1, strVersion + "/" + COSUtil::GetOperatingSystemString ( eOSType ) ); - -// a version and OS type was received, set item to visible -if ( pCurListViewItem->isHidden() ) -{ - pCurListViewItem->setHidden ( false ); -} - } -} -#endif diff --git a/src/connectdlg.h b/src/connectdlg.h index 1face83590..c2886ab11b 100755 --- a/src/connectdlg.h +++ b/src/connectdlg.h @@ -66,12 +66,6 @@ class CConnectDlg : public QDialog, private Ui_CConnectDlgBase const int iPingTime, const int iNumClients ); -#ifdef ENABLE_CLIENT_VERSION_AND_OS_DEBUGGING - void SetVersionAndOSType ( CHostAddress InetAddr, - COSUtil::EOpSystemType eOSType, - QString strVersion ); -#endif - bool GetServerListItemWasChosen() const { return bServerListItemWasChosen; } QString GetSelectedAddress() const { return strSelectedAddress; } QString GetSelectedServerName() const { return strSelectedServerName; } diff --git a/src/global.h b/src/global.h index 18819f04d7..1ff6dc2b23 100755 --- a/src/global.h +++ b/src/global.h @@ -72,11 +72,6 @@ LED bar: lbr //#define _DEBUG_ #undef _DEBUG_ -// define this macro if the version and operating system debugging shall -// be enabled in the client (the ping time column in the connect dialog then -// shows the requested information instead of the ping time) -#undef ENABLE_CLIENT_VERSION_AND_OS_DEBUGGING - // version and application name (use version from qt prject file) #undef VERSION #define VERSION APP_VERSION From 4310fe571ba9b0a32a6e9d2c5c29ee56b3e19fdc Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 29 Nov 2020 12:09:13 +0100 Subject: [PATCH 37/92] bug fix: ping times of servers which are further down the server list are too high (#49) --- ChangeLog | 1 + src/connectdlg.cpp | 18 ++++++++++++++++-- src/connectdlg.h | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index ac5147963f..87e53f87fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24,6 +24,7 @@ - bug fix: detect if no audio Device is selected before trying to connect a server (#129) +- bug fix: ping times of servers which are further down the server list are too high (#49) diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index e3ea9d5370..d50f79dab7 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -708,12 +708,26 @@ void CConnectDlg::OnTimerPing() data ( 0, Qt::UserRole ).toString(), CurServerAddress ) ) { - // if address is valid, send ping or the version and OS request - emit CreateCLServerListPingMes ( CurServerAddress ); + // if address is valid, send ping message using a new thread + QtConcurrent::run ( this, + &CConnectDlg::EmitCLServerListPingMes, + CurServerAddress ); } } } +void CConnectDlg::EmitCLServerListPingMes ( const CHostAddress& CurServerAddress ) +{ + // The ping time messages for all servers should not be sent all in a very + // short time since it showed that this leads to errors in the ping time + // measurement (#49). We therefore introduce a short delay for each server + // (since we are doing this in a separate thread for each server, we do not + // block the GUI). + QThread::msleep ( 1 ); + + emit CreateCLServerListPingMes ( CurServerAddress ); +} + void CConnectDlg::SetPingTimeAndNumClientsResult ( const CHostAddress& InetAddr, const int iPingTime, const int iNumClients ) diff --git a/src/connectdlg.h b/src/connectdlg.h index c2886ab11b..ab6f95fe8b 100755 --- a/src/connectdlg.h +++ b/src/connectdlg.h @@ -30,6 +30,7 @@ #include #include #include +#include #include "global.h" #include "settings.h" #include "multicolorled.h" @@ -80,6 +81,7 @@ class CConnectDlg : public QDialog, private Ui_CConnectDlgBase void UpdateListFilter(); void ShowAllMusicians ( const bool bState ); void RequestServerList(); + void EmitCLServerListPingMes ( const CHostAddress& CurServerAddress ); CClientSettings* pSettings; From 28d731757f0fb4c750e13fbd60142ac6d64a626d Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 29 Nov 2020 12:43:06 +0100 Subject: [PATCH 38/92] for Linux we need a higher value compared to Windows (I guess the timer resolution is higher on Linux) --- src/connectdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index d50f79dab7..bf9e304c34 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -723,7 +723,7 @@ void CConnectDlg::EmitCLServerListPingMes ( const CHostAddress& CurServerAddress // measurement (#49). We therefore introduce a short delay for each server // (since we are doing this in a separate thread for each server, we do not // block the GUI). - QThread::msleep ( 1 ); + QThread::msleep ( 11 ); emit CreateCLServerListPingMes ( CurServerAddress ); } From afd73d768e63aa6e2e3b66381c46fd711a90437c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 29 Nov 2020 20:37:07 +0100 Subject: [PATCH 39/92] fix for the size of the text label above the jitter buffer sliders --- src/clientsettingsdlgbase.ui | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/src/clientsettingsdlgbase.ui b/src/clientsettingsdlgbase.ui index cb711c8272..a6d81c8482 100755 --- a/src/clientsettingsdlgbase.ui +++ b/src/clientsettingsdlgbase.ui @@ -274,12 +274,6 @@ - - - 50 - 0 - - Local @@ -293,12 +287,6 @@ - - - 50 - 0 - - Server @@ -316,12 +304,6 @@ - - - 50 - 0 - - Size @@ -335,12 +317,6 @@ - - - 50 - 0 - - Size From cb32a71072c68595bf5db702463fdcb8cf6841fd Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 29 Nov 2020 21:27:22 +0100 Subject: [PATCH 40/92] try to fix problem that error message appears three times on Mac OS audio issue --- mac/sound.cpp | 199 +++++++++++++++++++++++++------------------------- 1 file changed, 98 insertions(+), 101 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index cdac8ab415..dfaf73c986 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -323,7 +323,7 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) int iDriverIdx = 0; // if the name was not found, use first driver bool bDriverFound = false; - // secure strDriverNames access + // secure lNumDevs/strDriverNames access Mutex.lock(); { for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) @@ -334,134 +334,131 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) bDriverFound = true; } } - } - Mutex.unlock(); - - if ( !strDriverName.isEmpty() && !bDriverFound ) - { - QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " - "is no longer available. The system default audio device will be selected instead." ) ); - } - - // secure lNumDevs/strDriverNames access - QMutexLocker locker ( &Mutex ); - // check device capabilities if it fulfills our requirements - const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); + // check device capabilities if it fulfills our requirements + const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); - // check if device is capable - if ( strStat.isEmpty() ) - { - AudioObjectPropertyAddress stPropertyAddress; - - // unregister callbacks if previous device was valid - if ( lCurDev != INVALID_INDEX ) + // check if device is capable + if ( strStat.isEmpty() ) { - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + AudioObjectPropertyAddress stPropertyAddress; - // unregister callback functions for device property changes - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + // unregister callbacks if previous device was valid + if ( lCurDev != INVALID_INDEX ) + { + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + // unregister callback functions for device property changes + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - } + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - // store ID of selected driver if initialization was successful - lCurDev = iDriverIdx; - CurrentAudioInputDeviceID = audioInputDevice[iDriverIdx]; - CurrentAudioOutputDeviceID = audioOutputDevice[iDriverIdx]; + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + } - // register callbacks - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + // store ID of selected driver if initialization was successful + lCurDev = iDriverIdx; + CurrentAudioInputDeviceID = audioInputDevice[iDriverIdx]; + CurrentAudioOutputDeviceID = audioOutputDevice[iDriverIdx]; - // setup callbacks for device property changes - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + // register callbacks + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + // setup callbacks for device property changes + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectAddPropertyListener ( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectAddPropertyListener ( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; - // only reset the channel mapping if a new device was selected - if ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) - { - // the device has changed, per definition we reset the channel - // mapping to the defaults (first two available channels) - SetLeftInputChannel ( 0 ); - SetRightInputChannel ( 1 ); - SetLeftOutputChannel ( 0 ); - SetRightOutputChannel ( 1 ); - - // store the current name of the driver - strCurDevName = strDriverNames[iDriverIdx]; + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + + // only reset the channel mapping if a new device was selected + if ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) + { + // the device has changed, per definition we reset the channel + // mapping to the defaults (first two available channels) + SetLeftInputChannel ( 0 ); + SetRightInputChannel ( 1 ); + SetLeftOutputChannel ( 0 ); + SetRightOutputChannel ( 1 ); + + // store the current name of the driver + strCurDevName = strDriverNames[iDriverIdx]; + } } } + Mutex.unlock(); + + if ( !strDriverName.isEmpty() && !bDriverFound ) + { + QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " + "is no longer available. The system default audio device will be selected instead." ) ); + } return strStat; } From 44631cb2fcabfdaafe75b37fd6b5b0ccd75a1f28 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 29 Nov 2020 21:29:22 +0100 Subject: [PATCH 41/92] fix compile error --- mac/sound.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index dfaf73c986..c16c7ba7a6 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -320,8 +320,9 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { // find and load driver - int iDriverIdx = 0; // if the name was not found, use first driver - bool bDriverFound = false; + QString strStat = ""; + int iDriverIdx = 0; // if the name was not found, use first driver + bool bDriverFound = false; // secure lNumDevs/strDriverNames access Mutex.lock(); @@ -336,7 +337,7 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) } // check device capabilities if it fulfills our requirements - const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); + strStat = CheckDeviceCapabilities ( iDriverIdx ); // check if device is capable if ( strStat.isEmpty() ) From 0e745614cf568041881cc20bb8b4a1200e2bc69f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 30 Nov 2020 17:05:13 +0100 Subject: [PATCH 42/92] on the initial time of about 2s after server list query, the list is sorted by ping even if the mouse is over the list --- src/connectdlg.cpp | 9 +++++++-- src/connectdlg.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index bf9e304c34..3f418015dc 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -145,6 +145,9 @@ CConnectDlg::CConnectDlg ( CClientSettings* pNSetP, // set a placeholder text to explain how to filter occupied servers (#397) edtFilter->setPlaceholderText ( tr ( "Type # for occupied servers" ) ); + // setup timers + TimerInitialSort.setSingleShot ( true ); // only once after list request + #ifdef ANDROID // for the android version maximize the window setWindowState ( Qt::WindowMaximized ); @@ -243,6 +246,7 @@ void CConnectDlg::RequestServerList() // start timer, if this message did not get any respond to retransmit // the server list request message TimerReRequestServList.start ( SERV_LIST_REQ_UPDATE_TIME_MS ); + TimerInitialSort.start ( SERV_LIST_REQ_UPDATE_TIME_MS ); // reuse the time value } } @@ -831,8 +835,9 @@ void CConnectDlg::SetPingTimeAndNumClientsResult ( const CHostAddress& InetAddr, // current item since the topLevelItem(iIdx) is then no longer valid. // To avoid that the list is sorted shortly before a double click (which // could lead to connecting an incorrect server) the sorting is disabled - // as long as the mouse is over the list (#293). - if ( bDoSorting && !bShowCompleteRegList && !lvwServers->underMouse() ) // do not sort if "show all servers" + // as long as the mouse is over the list (but it is not disabled for the + // initial timer of about 2s, see TimerInitialSort) (#293). + if ( bDoSorting && !bShowCompleteRegList && (TimerInitialSort.isActive() || !lvwServers->underMouse()) ) // do not sort if "show all servers" { lvwServers->sortByColumn ( 4, Qt::AscendingOrder ); } diff --git a/src/connectdlg.h b/src/connectdlg.h index ab6f95fe8b..5c15f3011a 100755 --- a/src/connectdlg.h +++ b/src/connectdlg.h @@ -87,6 +87,7 @@ class CConnectDlg : public QDialog, private Ui_CConnectDlgBase QTimer TimerPing; QTimer TimerReRequestServList; + QTimer TimerInitialSort; CHostAddress CentralServerAddress; QString strSelectedAddress; QString strSelectedServerName; From 4f9d146037e35a53238f7ab37b38ae69ea3fcb56 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 18:33:12 +0100 Subject: [PATCH 43/92] improved audio device management --- mac/sound.cpp | 218 +++++++++++++++++++++++----------------------- mac/sound.h | 3 + src/soundbase.cpp | 88 +++++++++---------- windows/sound.cpp | 8 +- 4 files changed, 160 insertions(+), 157 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index c16c7ba7a6..74a3ad75bb 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -319,149 +319,145 @@ int CSound::CountChannels ( AudioDeviceID devID, QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) { - // find and load driver - QString strStat = ""; - int iDriverIdx = 0; // if the name was not found, use first driver - bool bDriverFound = false; - // secure lNumDevs/strDriverNames access - Mutex.lock(); + QMutexLocker locker ( &Mutex ); + + // find driver index from given driver name + int iDriverIdx = INVALID_INDEX; // initialize with an invalid index + + for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) { - for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) + if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) { - if ( strDriverName.compare ( strDriverNames[i] ) == 0 ) - { - iDriverIdx = i; - bDriverFound = true; - } + iDriverIdx = i; } + } - // check device capabilities if it fulfills our requirements - strStat = CheckDeviceCapabilities ( iDriverIdx ); + // if the selected driver was not found, return an error message + if ( iDriverIdx == INVALID_INDEX ) + { + return tr ( "The current selected audio device is no longer present in the system." ); + } - // check if device is capable - if ( strStat.isEmpty() ) - { - AudioObjectPropertyAddress stPropertyAddress; + // check device capabilities if it fulfills our requirements + const QString strStat = CheckDeviceCapabilities ( iDriverIdx ); - // unregister callbacks if previous device was valid - if ( lCurDev != INVALID_INDEX ) - { - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + // check if device is capable and if not the same device is used + if ( strStat.isEmpty() && ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) ) + { + // store ID of selected driver if initialization was successful + lCurDev = iDriverIdx; + CurrentAudioInputDeviceID = audioInputDevice[iDriverIdx]; + CurrentAudioOutputDeviceID = audioOutputDevice[iDriverIdx]; - // unregister callback functions for device property changes - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + // register callbacks + AudioObjectPropertyAddress stPropertyAddress; - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + // setup callbacks for device property changes + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - } + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - // store ID of selected driver if initialization was successful - lCurDev = iDriverIdx; - CurrentAudioInputDeviceID = audioInputDevice[iDriverIdx]; - CurrentAudioOutputDeviceID = audioOutputDevice[iDriverIdx]; + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; - // register callbacks - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + AudioObjectAddPropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - // setup callbacks for device property changes - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + // the device has changed, per definition we reset the channel + // mapping to the defaults (first two available channels) + SetLeftInputChannel ( 0 ); + SetRightInputChannel ( 1 ); + SetLeftOutputChannel ( 0 ); + SetRightOutputChannel ( 1 ); - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + // store the current name of the driver + strCurDevName = strDriverNames[iDriverIdx]; + } - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + return strStat; +} - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; +void CSound::UnloadCurrentDriver() +{ + AudioObjectPropertyAddress stPropertyAddress; - AudioObjectAddPropertyListener ( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + // unregister callbacks if previous device was valid + if ( lCurDev != INVALID_INDEX ) + { + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + // unregister callback functions for device property changes + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectAddPropertyListener ( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectAddPropertyListener ( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - // only reset the channel mapping if a new device was selected - if ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) - { - // the device has changed, per definition we reset the channel - // mapping to the defaults (first two available channels) - SetLeftInputChannel ( 0 ); - SetRightInputChannel ( 1 ); - SetLeftOutputChannel ( 0 ); - SetRightOutputChannel ( 1 ); - - // store the current name of the driver - strCurDevName = strDriverNames[iDriverIdx]; - } - } - } - Mutex.unlock(); + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - if ( !strDriverName.isEmpty() && !bDriverFound ) - { - QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " - "is no longer available. The system default audio device will be selected instead." ) ); - } + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - return strStat; + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + } } QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) diff --git a/mac/sound.h b/mac/sound.h index 6b17c25024..ec5eabf75e 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -43,6 +43,8 @@ class CSound : public CSoundBase const bool , const QString& ); + virtual ~CSound() { UnloadCurrentDriver(); } + virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); @@ -95,6 +97,7 @@ class CSound : public CSoundBase protected: virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); + virtual void UnloadCurrentDriver(); QString CheckDeviceCapabilities ( const int iDriverIdx ); void UpdateChSelection(); diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 6e9626b386..849a0dc984 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -67,6 +67,9 @@ QString CSoundBase::SetDev ( const QString strDevName ) // init return parameter with "no error" QString strReturn = ""; + // init flag for "load any driver" + bool bTryLoadAnyDriver = false; + // check if an ASIO driver was already initialized if ( !strCurDevName.isEmpty() ) { @@ -86,21 +89,9 @@ QString CSoundBase::SetDev ( const QString strDevName ) } else { - // the same driver is used but the driver properties seems to - // have changed so that they are not compatible to our - // software anymore -#ifndef HEADLESS - QMessageBox::critical ( - nullptr, APP_NAME, QString ( tr ( "The audio driver properties " - "have changed to a state which is incompatible with this " - "software. The selected audio device could not be used " - "because of the following error:" ) + " " ) + - strErrorMessage + - QString ( "

" + tr ( "Please restart the software." ) ), - tr ( "Close" ), nullptr ); -#endif - - _exit ( 0 ); + // loading and initializing the current driver failed, try to find + // at least one usable driver + bTryLoadAnyDriver = true; } // store error return message @@ -109,9 +100,6 @@ QString CSoundBase::SetDev ( const QString strDevName ) } else { - // init flag for "load any driver" - bool bTryLoadAnyDriver = false; - if ( !strDevName.isEmpty() ) { // This is the first time a driver is to be initialized, we first @@ -131,43 +119,53 @@ QString CSoundBase::SetDev ( const QString strDevName ) // try to find one usable driver (select the first valid driver) bTryLoadAnyDriver = true; } + } - if ( bTryLoadAnyDriver ) + if ( bTryLoadAnyDriver ) + { + // if a driver was previously selected, show a warning message + if ( !strDevName.isEmpty() ) { - // try to load and initialize any valid driver - QVector vsErrorList = LoadAndInitializeFirstValidDriver(); + QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " + "is no longer available or the audio driver properties have changed to a state which " + "is incompatible with this software. We now try to find a valid audio device. This new " + "audio device might cause audio feedback. So, before connecting to a server, please " + "check the audio device setting." ) ); + } - if ( !vsErrorList.isEmpty() ) + // try to load and initialize any valid driver + QVector vsErrorList = LoadAndInitializeFirstValidDriver(); + + if ( !vsErrorList.isEmpty() ) + { + // create error message with all details + QString sErrorMessage = "" + tr ( "No usable " ) + + strSystemDriverTechniqueName + tr ( " audio device " + "(driver) found." ) + "

" + tr ( + "In the following there is a list of all available drivers " + "with the associated error message:" ) + "
    "; + + for ( int i = 0; i < lNumDevs; i++ ) { - // create error message with all details - QString sErrorMessage = "" + tr ( "No usable " ) + - strSystemDriverTechniqueName + tr ( " audio device " - "(driver) found." ) + "

    " + tr ( - "In the following there is a list of all available drivers " - "with the associated error message:" ) + "
      "; - - for ( int i = 0; i < lNumDevs; i++ ) - { - sErrorMessage += "
    • " + GetDeviceName ( i ) + ": " + vsErrorList[i] + "
    • "; - } - sErrorMessage += "
    "; + sErrorMessage += "
  • " + GetDeviceName ( i ) + ": " + vsErrorList[i] + "
  • "; + } + sErrorMessage += "
"; #ifdef _WIN32 - // to be able to access the ASIO driver setup for changing, e.g., the sample rate, we - // offer the user under Windows that we open the driver setups of all registered - // ASIO drivers - sErrorMessage = sErrorMessage + "
" + tr ( "Do you want to open the ASIO driver setups?" ); + // to be able to access the ASIO driver setup for changing, e.g., the sample rate, we + // offer the user under Windows that we open the driver setups of all registered + // ASIO drivers + sErrorMessage = sErrorMessage + "
" + tr ( "Do you want to open the ASIO driver setups?" ); - if ( QMessageBox::Yes == QMessageBox::information ( nullptr, APP_NAME, sErrorMessage, QMessageBox::Yes|QMessageBox::No ) ) - { - LoadAndInitializeFirstValidDriver ( true ); - } + if ( QMessageBox::Yes == QMessageBox::information ( nullptr, APP_NAME, sErrorMessage, QMessageBox::Yes|QMessageBox::No ) ) + { + LoadAndInitializeFirstValidDriver ( true ); + } - sErrorMessage = APP_NAME + tr ( " could not be started because of audio interface issues." ); + sErrorMessage = APP_NAME + tr ( " could not be started because of audio interface issues." ); #endif - throw CGenErr ( sErrorMessage ); - } + throw CGenErr ( sErrorMessage ); } } diff --git a/windows/sound.cpp b/windows/sound.cpp index 69860bad0f..c112eb52c1 100755 --- a/windows/sound.cpp +++ b/windows/sound.cpp @@ -44,7 +44,7 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool bOpenDriverSetup ) { // find and load driver - int iDriverIdx = 0; // if the name was not found, use first driver + int iDriverIdx = INVALID_INDEX; // initialize with an invalid index for ( int i = 0; i < MAX_NUMBER_SOUND_CARDS; i++ ) { @@ -54,6 +54,12 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, } } + // if the selected driver was not found, return an error message + if ( iDriverIdx == INVALID_INDEX ) + { + return tr ( "The current selected audio device is no longer present in the system." ); + } + loadAsioDriver ( cDriverNames[iDriverIdx] ); if ( ASIOInit ( &driverInfo ) != ASE_OK ) From 01d1b31a56b713e9116d2f3f9063e21d95c7fc5c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 18:58:58 +0100 Subject: [PATCH 44/92] some minor fixes --- mac/sound.cpp | 8 ++++---- src/client.cpp | 2 ++ src/client.h | 3 +++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 74a3ad75bb..07ee13df9f 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -411,11 +411,11 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) void CSound::UnloadCurrentDriver() { - AudioObjectPropertyAddress stPropertyAddress; - // unregister callbacks if previous device was valid if ( lCurDev != INVALID_INDEX ) { + AudioObjectPropertyAddress stPropertyAddress; + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; @@ -483,7 +483,7 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) &iPropertySize, &inputSampleRate ) ) { - return QString ( tr ( "Current audio input device is no longer available." ) ); + return QString ( tr ( "The audio input device is no longer available." ) ); } if ( inputSampleRate != fSystemSampleRate ) @@ -513,7 +513,7 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) &iPropertySize, &outputSampleRate ) ) { - return QString ( tr ( "Current audio output device is no longer available." ) ); + return QString ( tr ( "The audio output device is no longer available." ) ); } if ( outputSampleRate != fSystemSampleRate ) diff --git a/src/client.cpp b/src/client.cpp index 7c31b7ee19..11ad580e28 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -606,6 +606,8 @@ void CClient::SetSndCrdRightOutputChannel ( const int iNewChan ) void CClient::OnSndCrdReinitRequest ( int iSndCrdResetType ) { + QMutexLocker locker ( &MutexAudiReinit ); + // in older QT versions, enums cannot easily be used in signals without // registering them -> workaroud: we use the int type and cast to the enum const ESndCrdResetType eSndCrdResetType = diff --git a/src/client.h b/src/client.h index 2387fc90a4..cee26e5525 100755 --- a/src/client.h +++ b/src/client.h @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef USE_OPUS_SHARED_LIB # include "opus/opus_custom.h" #else @@ -354,6 +355,8 @@ class CClient : public QObject bool bJitterBufferOK; bool bNuteMeInPersonalMix; + QMutex MutexAudiReinit; + // server settings int iServerSockBufNumFrames; From 62325bd10784246ad51bf84e9e56bce3a0c27176 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 19:02:32 +0100 Subject: [PATCH 45/92] we cannot use a message box in a mutexed region, otherwise we get a lock up when using Jamulus on a Mac --- src/client.cpp | 2 -- src/client.h | 3 --- 2 files changed, 5 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index 11ad580e28..7c31b7ee19 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -606,8 +606,6 @@ void CClient::SetSndCrdRightOutputChannel ( const int iNewChan ) void CClient::OnSndCrdReinitRequest ( int iSndCrdResetType ) { - QMutexLocker locker ( &MutexAudiReinit ); - // in older QT versions, enums cannot easily be used in signals without // registering them -> workaroud: we use the int type and cast to the enum const ESndCrdResetType eSndCrdResetType = diff --git a/src/client.h b/src/client.h index cee26e5525..2387fc90a4 100755 --- a/src/client.h +++ b/src/client.h @@ -28,7 +28,6 @@ #include #include #include -#include #ifdef USE_OPUS_SHARED_LIB # include "opus/opus_custom.h" #else @@ -355,8 +354,6 @@ class CClient : public QObject bool bJitterBufferOK; bool bNuteMeInPersonalMix; - QMutex MutexAudiReinit; - // server settings int iServerSockBufNumFrames; From ac44adfe3d57916f96fad0595473b025db9ab18c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 19:13:36 +0100 Subject: [PATCH 46/92] we should not unregister Coreaudio callbacks on class destructor --- mac/sound.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/mac/sound.h b/mac/sound.h index ec5eabf75e..b5f269567a 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -43,8 +43,6 @@ class CSound : public CSoundBase const bool , const QString& ); - virtual ~CSound() { UnloadCurrentDriver(); } - virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); virtual void Stop(); From f62d96cb509a5847bba29fc391d9a44f1f55221f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 19:49:44 +0100 Subject: [PATCH 47/92] try to fix the multiple warning messages --- src/client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client.cpp b/src/client.cpp index 7c31b7ee19..74e7818182 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -179,7 +179,7 @@ CClient::CClient ( const quint16 iPortNumber, // other QObject::connect ( &Sound, &CSound::ReinitRequest, - this, &CClient::OnSndCrdReinitRequest ); + this, &CClient::OnSndCrdReinitRequest, Qt::BlockingQueuedConnection ); QObject::connect ( &Sound, &CSound::ControllerInFaderLevel, this, &CClient::OnControllerInFaderLevel ); From 842a0fcdb1b3fae1c18b37701eaa722b4fbbf8ba Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 19:59:23 +0100 Subject: [PATCH 48/92] do only unregister Coreaudio callbacks if a new driver is actually setup --- mac/sound.cpp | 101 ++++++++++++++++++++++++-------------------------- mac/sound.h | 1 - 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 07ee13df9f..8524299cfd 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -345,14 +345,60 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // check if device is capable and if not the same device is used if ( strStat.isEmpty() && ( strCurDevName.compare ( strDriverNames[iDriverIdx] ) != 0 ) ) { + AudioObjectPropertyAddress stPropertyAddress; + + // unregister callbacks if previous device was valid + if ( lCurDev != INVALID_INDEX ) + { + stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; + stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; + + // unregister callback functions for device property changes + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; + + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; + + AudioObjectRemovePropertyListener( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; + + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; + + AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + + AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); + } + // store ID of selected driver if initialization was successful lCurDev = iDriverIdx; CurrentAudioInputDeviceID = audioInputDevice[iDriverIdx]; CurrentAudioOutputDeviceID = audioOutputDevice[iDriverIdx]; // register callbacks - AudioObjectPropertyAddress stPropertyAddress; - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; @@ -409,57 +455,6 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) return strStat; } -void CSound::UnloadCurrentDriver() -{ - // unregister callbacks if previous device was valid - if ( lCurDev != INVALID_INDEX ) - { - AudioObjectPropertyAddress stPropertyAddress; - - stPropertyAddress.mElement = kAudioObjectPropertyElementMaster; - stPropertyAddress.mScope = kAudioObjectPropertyScopeGlobal; - - // unregister callback functions for device property changes - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; - - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); - - stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; - - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); - - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; - - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); - } -} - QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) { UInt32 iPropertySize; diff --git a/mac/sound.h b/mac/sound.h index b5f269567a..a8de13b40a 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -98,7 +98,6 @@ class CSound : public CSoundBase virtual void UnloadCurrentDriver(); QString CheckDeviceCapabilities ( const int iDriverIdx ); - void UpdateChSelection(); int CountChannels ( AudioDeviceID devID, bool isInput ); From 10c356c916640eb2fffaca743e1aa247c5f8cbe5 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 20:00:56 +0100 Subject: [PATCH 49/92] bug fix --- mac/sound.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mac/sound.h b/mac/sound.h index a8de13b40a..6b17c25024 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -95,9 +95,9 @@ class CSound : public CSoundBase protected: virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); - virtual void UnloadCurrentDriver(); QString CheckDeviceCapabilities ( const int iDriverIdx ); + void UpdateChSelection(); int CountChannels ( AudioDeviceID devID, bool isInput ); From 6d1c7c2e2320498926159dabc744478fb7a6f861 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 20:09:26 +0100 Subject: [PATCH 50/92] make sure we only have one device notification per time --- mac/sound.cpp | 2 ++ mac/sound.h | 1 + 2 files changed, 3 insertions(+) diff --git a/mac/sound.cpp b/mac/sound.cpp index 8524299cfd..fd29255d9e 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -976,6 +976,8 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, { CSound* pSound = static_cast ( inRefCon ); + QMutexLocker locker ( &pSound->MutexDeviceNotification ); + if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) || ( inAddresses->mSelector == kAudioHardwarePropertyDefaultOutputDevice ) || diff --git a/mac/sound.h b/mac/sound.h index 6b17c25024..59bdc14d1d 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -92,6 +92,7 @@ class CSound : public CSoundBase int iSelOutInterlChRight; CVector vecNumInBufChan; CVector vecNumOutBufChan; + QMutex MutexDeviceNotification; protected: virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); From 2118bd695dca4cd9c21d41aec404e97e614f7b49 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Tue, 1 Dec 2020 20:13:24 +0100 Subject: [PATCH 51/92] revert recent changes since they did not work --- mac/sound.cpp | 2 -- mac/sound.h | 1 - src/client.cpp | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index fd29255d9e..8524299cfd 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -976,8 +976,6 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, { CSound* pSound = static_cast ( inRefCon ); - QMutexLocker locker ( &pSound->MutexDeviceNotification ); - if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) || ( inAddresses->mSelector == kAudioHardwarePropertyDefaultOutputDevice ) || diff --git a/mac/sound.h b/mac/sound.h index 59bdc14d1d..6b17c25024 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -92,7 +92,6 @@ class CSound : public CSoundBase int iSelOutInterlChRight; CVector vecNumInBufChan; CVector vecNumOutBufChan; - QMutex MutexDeviceNotification; protected: virtual QString LoadAndInitializeDriver ( QString strDriverName, bool ); diff --git a/src/client.cpp b/src/client.cpp index 74e7818182..7c31b7ee19 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -179,7 +179,7 @@ CClient::CClient ( const quint16 iPortNumber, // other QObject::connect ( &Sound, &CSound::ReinitRequest, - this, &CClient::OnSndCrdReinitRequest, Qt::BlockingQueuedConnection ); + this, &CClient::OnSndCrdReinitRequest ); QObject::connect ( &Sound, &CSound::ControllerInFaderLevel, this, &CClient::OnControllerInFaderLevel ); From c003861bba019361662f6237e17077b0a4876fa9 Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Wed, 2 Dec 2020 18:37:59 +0100 Subject: [PATCH 52/92] French translation fix --- src/res/translation/translation_fr_FR.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index cce7449324..a2418a5498 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -852,7 +852,7 @@ My &Profile... - Mon &profil + Mon &profil... From bc32ee7318b4f2450399869b8d31be4073de487d Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Wed, 2 Dec 2020 22:17:46 +0100 Subject: [PATCH 53/92] French translation fixes --- src/res/translation/translation_fr_FR.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index a2418a5498..bf6708911e 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -263,7 +263,7 @@ Mixer Fader - Charriot du mixeur + Chariot du mixeur Adjusts the audio level of this channel. All connected clients at the server will be assigned an audio fader at each client, adjusting the local mix. @@ -1025,7 +1025,7 @@ Set All Faders to New Client &Level - Régler tous &les charriots sur le niveau d'un nouveau client + Régler tous &les chariots sur le niveau d'un nouveau client From d1a630bf883c325360e45f99176c7227c5d0b843 Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Fri, 4 Dec 2020 16:12:28 +0100 Subject: [PATCH 54/92] French translation fixe --- src/res/translation/translation_fr_FR.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index bf6708911e..45e548308a 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -1011,7 +1011,7 @@ Sort Channel Users by &Group - Trier les utilisateurs des canaux par &groupe + Trier les utilisateurs du canal par &groupe From 07f35be52c551ac736468521c28827fb3f05cef3 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:28:28 +0100 Subject: [PATCH 55/92] only do a full reload of the driver if the driver actually has changed --- mac/sound.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 8524299cfd..1b1ee5ced0 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -984,8 +984,18 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, // reload the driver list of available sound devices pSound->GetAvailableInOutDevices(); - // if any property of the device has changed, do a full reload - pSound->EmitReinitRequestSignal ( RS_RELOAD_RESTART_AND_INIT ); + if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || + ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) ) + { + // if any property of the device has changed, do a full reload + pSound->EmitReinitRequestSignal ( RS_RELOAD_RESTART_AND_INIT ); + } + else + { + // for any other change in audio devices, just initiate a restart which + // triggers an update of the sound device selection combo box + pSound->EmitReinitRequestSignal ( RS_ONLY_RESTART ); + } } return noErr; From 2ff6e9ac5a83f69aeadb6d14da9c5a67379b241f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:33:24 +0100 Subject: [PATCH 56/92] code style change --- mac/sound.cpp | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 1b1ee5ced0..31dc7e1140 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -356,41 +356,41 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // unregister callback functions for device property changes stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultInputDevice; - AudioObjectRemovePropertyListener( kAudioObjectSystemObject, - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener ( kAudioObjectSystemObject, + &stPropertyAddress, + deviceNotification, + this ); stPropertyAddress.mSelector = kAudioDevicePropertyDeviceHasChanged; - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; - AudioObjectRemovePropertyListener( audioOutputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener ( audioOutputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); - AudioObjectRemovePropertyListener( audioInputDevice[lCurDev], - &stPropertyAddress, - deviceNotification, - this ); + AudioObjectRemovePropertyListener ( audioInputDevice[lCurDev], + &stPropertyAddress, + deviceNotification, + this ); } // store ID of selected driver if initialization was successful From 65e3206df2fa47dc916da867a7f8e95310142c9e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:36:39 +0100 Subject: [PATCH 57/92] workaround for problem with multiple warning messages on device unplug --- mac/sound.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 31dc7e1140..96954bf00d 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -382,11 +382,14 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; +// TODO we only check the alive for the input to avoid that we get the warning message +// twice since the OnSndCrdReinitRequest() function is not thread safe +/* AudioObjectRemovePropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); - +*/ AudioObjectRemovePropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -422,10 +425,13 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); +// TODO see comment above +/* AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); +*/ stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; From 35c0d67d38e6ac4c01f0f34680597cb7f3cc1201 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:42:37 +0100 Subject: [PATCH 58/92] use mutex from sound base for coreaudio io routine --- mac/sound.cpp | 2 +- mac/sound.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 96954bf00d..4c972a6d7d 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -1018,7 +1018,7 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, CSound* pSound = static_cast ( inRefCon ); // both, the input and output device use the same callback function - QMutexLocker locker ( &pSound->IOMutex ); + QMutexLocker locker ( &pSound->MutexAudioProcessCallback ); const int iCoreAudioBufferSizeMono = pSound->iCoreAudioBufferSizeMono; const int iSelInBufferLeft = pSound->iSelInBufferLeft; diff --git a/mac/sound.h b/mac/sound.h index 6b17c25024..646a2ef969 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -142,5 +142,4 @@ class CSound : public CSoundBase QString sChannelNamesOutput[MAX_NUM_IN_OUT_CHANNELS]; QMutex Mutex; - QMutex IOMutex; }; From be4e4da3fa9c3941760678f6161a9769c04b7a1f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:43:37 +0100 Subject: [PATCH 59/92] bug fix --- src/soundbase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/soundbase.h b/src/soundbase.h index 6ff064f922..a8784a7287 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -88,6 +88,7 @@ class CSoundBase : public QThread // TODO this should be protected but since it is used // in a callback function it has to be public -> better solution + QMutex MutexAudioProcessCallback; void EmitReinitRequestSignal ( const ESndCrdResetType eSndCrdResetType ) { emit ReinitRequest ( eSndCrdResetType ); } @@ -134,7 +135,6 @@ class CSoundBase : public QThread bool bRun; bool bCallbackEntered; - QMutex MutexAudioProcessCallback; QString strSystemDriverTechniqueName; int iCtrlMIDIChannel; From 351ef12881b591207ccc9483b7148edd11ed93b9 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:48:53 +0100 Subject: [PATCH 60/92] no need to make mutex variable public --- src/soundbase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/soundbase.h b/src/soundbase.h index a8784a7287..6ff064f922 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -88,7 +88,6 @@ class CSoundBase : public QThread // TODO this should be protected but since it is used // in a callback function it has to be public -> better solution - QMutex MutexAudioProcessCallback; void EmitReinitRequestSignal ( const ESndCrdResetType eSndCrdResetType ) { emit ReinitRequest ( eSndCrdResetType ); } @@ -135,6 +134,7 @@ class CSoundBase : public QThread bool bRun; bool bCallbackEntered; + QMutex MutexAudioProcessCallback; QString strSystemDriverTechniqueName; int iCtrlMIDIChannel; From 81529d6bda81b837d3d5fe01a75267a2109e07ea Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 18:52:48 +0100 Subject: [PATCH 61/92] do not reset everything on a call to GetAvailableInOutDevices() since this function is called on device notification --- mac/sound.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 4c972a6d7d..356ccf8c23 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -57,6 +57,18 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData // initial query for available input/output sound devices in the system GetAvailableInOutDevices(); + // init device index as not initialized (invalid) + lCurDev = INVALID_INDEX; + CurrentAudioInputDeviceID = 0; + CurrentAudioOutputDeviceID = 0; + iNumInChan = 0; + iNumInChanPlusAddChan = 0; + iNumOutChan = 0; + iSelInputLeftChannel = 0; + iSelInputRightChannel = 0; + iSelOutputLeftChannel = 0; + iSelOutputRightChannel = 0; + // Optional MIDI initialization -------------------------------------------- if ( iCtrlMIDIChannel != INVALID_MIDI_CH ) @@ -187,18 +199,6 @@ void CSound::GetAvailableInOutDevices() } } } - - // init device index as not initialized (invalid) - lCurDev = INVALID_INDEX; - CurrentAudioInputDeviceID = 0; - CurrentAudioOutputDeviceID = 0; - iNumInChan = 0; - iNumInChanPlusAddChan = 0; - iNumOutChan = 0; - iSelInputLeftChannel = 0; - iSelInputRightChannel = 0; - iSelOutputLeftChannel = 0; - iSelOutputRightChannel = 0; } void CSound::GetAudioDeviceInfos ( const AudioDeviceID DeviceID, From 26a09e04a9485c5c3613121bf2c64123b287de02 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 19:12:35 +0100 Subject: [PATCH 62/92] stop sound device on client shutdown --- src/client.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/client.cpp b/src/client.cpp index 7c31b7ee19..a1b354e529 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -207,6 +207,12 @@ CClient::CClient ( const quint16 iPortNumber, CClient::~CClient() { + // if we were running, stop sound device + if ( Sound.IsRunning() ) + { + Sound.Stop(); + } + // free audio encoders and decoders opus_custom_encoder_destroy ( OpusEncoderMono ); opus_custom_decoder_destroy ( OpusDecoderMono ); From 9d20c69edc4edaa1252247b733685e4d5bdb5344 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 19:43:41 +0100 Subject: [PATCH 63/92] if the audio device changes, the audio driver check might not work correctly --- src/clientdlg.cpp | 14 +++++++++++++- src/clientdlg.h | 1 + src/clientsettingsdlg.cpp | 14 +++++++------- src/clientsettingsdlg.h | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 5fa11702d5..0536b890b8 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -495,7 +495,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, this, &CClientDlg::OnCLVersionAndOSReceived ); QObject::connect ( pClient, &CClient::SoundDeviceChanged, - &ClientSettingsDlg, &CClientSettingsDlg::OnUpdateSoundDeviceChannelSelectionFrame ); + this, &CClientDlg::OnSoundDeviceChanged ); QObject::connect ( &ClientSettingsDlg, &CClientSettingsDlg::GUIDesignChanged, this, &CClientDlg::OnGUIDesignChanged ); @@ -1125,6 +1125,18 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() } } +void CClientDlg::OnSoundDeviceChanged() +{ + // if the check audio device timer is running, it must be restarted on a device change + if ( TimerCheckAudioDeviceOk.isActive() ) + { + TimerCheckAudioDeviceOk.start ( CHECK_AUDIO_DEV_OK_TIME_MS ); + } + + // update the settings dialog + ClientSettingsDlg.UpdateSoundDeviceChannelSelectionFrame(); +} + void CClientDlg::OnCLPingTimeWithNumClientsReceived ( CHostAddress InetAddr, int iPingTime, int iNumClients ) diff --git a/src/clientdlg.h b/src/clientdlg.h index 63bd577056..7e230fd6df 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -181,6 +181,7 @@ public slots: void OnConClientListMesReceived ( CVector vecChanInfo ); void OnChatTextReceived ( QString strChatText ); void OnLicenceRequired ( ELicenceType eLicenceType ); + void OnSoundDeviceChanged(); void OnChangeChanGain ( int iId, float fGain, bool bIsMyOwnFader ) { pClient->SetRemoteChanGain ( iId, fGain, bIsMyOwnFader ); } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 871dd11dd3..47c1bed4e5 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -302,7 +302,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, UpdateJitterBufferFrame(); // init sound card channel selection frame - OnUpdateSoundDeviceChannelSelectionFrame(); + UpdateSoundDeviceChannelSelectionFrame(); // Audio Channels combo box cbxAudioChannels->clear(); @@ -511,7 +511,7 @@ void CClientSettingsDlg::UpdateSoundCardFrame() } } -void CClientSettingsDlg::OnUpdateSoundDeviceChannelSelectionFrame() +void CClientSettingsDlg::UpdateSoundDeviceChannelSelectionFrame() { // update combo box containing all available sound cards in the system cbxSoundcard->clear(); @@ -603,32 +603,32 @@ void CClientSettingsDlg::OnSoundcardActivated ( int iSndDevIdx ) QString ( tr ( " The previous driver will be selected." ) ), tr ( "Ok" ), nullptr ); } - OnUpdateSoundDeviceChannelSelectionFrame(); + UpdateSoundDeviceChannelSelectionFrame(); UpdateDisplay(); } void CClientSettingsDlg::OnLInChanActivated ( int iChanIdx ) { pClient->SetSndCrdLeftInputChannel ( iChanIdx ); - OnUpdateSoundDeviceChannelSelectionFrame(); + UpdateSoundDeviceChannelSelectionFrame(); } void CClientSettingsDlg::OnRInChanActivated ( int iChanIdx ) { pClient->SetSndCrdRightInputChannel ( iChanIdx ); - OnUpdateSoundDeviceChannelSelectionFrame(); + UpdateSoundDeviceChannelSelectionFrame(); } void CClientSettingsDlg::OnLOutChanActivated ( int iChanIdx ) { pClient->SetSndCrdLeftOutputChannel ( iChanIdx ); - OnUpdateSoundDeviceChannelSelectionFrame(); + UpdateSoundDeviceChannelSelectionFrame(); } void CClientSettingsDlg::OnROutChanActivated ( int iChanIdx ) { pClient->SetSndCrdRightOutputChannel ( iChanIdx ); - OnUpdateSoundDeviceChannelSelectionFrame(); + UpdateSoundDeviceChannelSelectionFrame(); } void CClientSettingsDlg::OnAudioChannelsActivated ( int iChanIdx ) diff --git a/src/clientsettingsdlg.h b/src/clientsettingsdlg.h index fbb55d08c1..78f17b80ed 100755 --- a/src/clientsettingsdlg.h +++ b/src/clientsettingsdlg.h @@ -72,6 +72,7 @@ class CClientSettingsDlg : public QDialog, private Ui_CClientSettingsDlgBase const CMultiColorLED::ELightColor eOverallDelayLEDColor ); void UpdateDisplay(); + void UpdateSoundDeviceChannelSelectionFrame(); protected: void UpdateJitterBufferFrame(); @@ -106,7 +107,6 @@ public slots: void OnGUIDesignActivated ( int iDesignIdx ); void OnDriverSetupClicked(); void OnLanguageChanged ( QString strLanguage ) { pSettings->strLanguage = strLanguage; } - void OnUpdateSoundDeviceChannelSelectionFrame(); signals: void GUIDesignChanged(); From d3b713b5774b86812dbc53ad1ab776472dfa61f4 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 4 Dec 2020 20:03:21 +0100 Subject: [PATCH 64/92] make sure the processing is only done when we are in run state --- mac/sound.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 356ccf8c23..b4e0e9d24d 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -1036,7 +1036,7 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, const CVector& vecNumInBufChan = pSound->vecNumInBufChan; const CVector& vecNumOutBufChan = pSound->vecNumOutBufChan; - if ( ( inDevice == pSound->CurrentAudioInputDeviceID ) && inInputData ) + if ( ( inDevice == pSound->CurrentAudioInputDeviceID ) && inInputData && pSound->bRun ) { // check sizes (note that float32 has four bytes) if ( ( iSelInBufferLeft >= 0 ) && @@ -1096,7 +1096,7 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, pSound->ProcessCallback ( pSound->vecsTmpAudioSndCrdStereo ); } - if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData ) + if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData && pSound->bRun ) { // check sizes (note that float32 has four bytes) if ( ( iSelOutBufferLeft >= 0 ) && From 5fb7f6100ab6906e9b4e88ab3b0c5a36ffdefa1c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 5 Dec 2020 09:10:20 +0100 Subject: [PATCH 65/92] update text of warning message --- src/clientdlg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 0536b890b8..a2c2e02cc5 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1120,8 +1120,8 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() // it is trying to connect the server which does not help to solve the problem (#129)) if ( !pClient->IsCallbackEntered() ) { - QMessageBox::warning ( this, APP_NAME, tr ( "The soundcard device does not " - "work correctly. Please check the device selection and the driver settings." ) ); + QMessageBox::warning ( this, APP_NAME, tr ( "The soundcard device does not work correctly. " + "Please open the settings and check the device selection and the driver settings." ) ); } } From 900d4eee7c916044a08a4090767422e88ab455bb Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 5 Dec 2020 10:51:48 +0100 Subject: [PATCH 66/92] fix compilation error --- src/soundbase.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 849a0dc984..8bb67972a9 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -126,11 +126,13 @@ QString CSoundBase::SetDev ( const QString strDevName ) // if a driver was previously selected, show a warning message if ( !strDevName.isEmpty() ) { +#ifndef HEADLESS QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " "is no longer available or the audio driver properties have changed to a state which " "is incompatible with this software. We now try to find a valid audio device. This new " "audio device might cause audio feedback. So, before connecting to a server, please " "check the audio device setting." ) ); +#endif } // try to load and initialize any valid driver From d67cc9de65301b41d1f0e2f14b67d64ef2dc54a7 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 5 Dec 2020 16:36:57 +0100 Subject: [PATCH 67/92] try to fix audio device handling issues with deadlocks, etc. --- ChangeLog | 1 + mac/sound.cpp | 8 +---- src/client.cpp | 70 +++++++++++++++++++++++---------------- src/client.h | 4 ++- src/clientdlg.cpp | 14 +++++++- src/clientdlg.h | 2 +- src/clientsettingsdlg.cpp | 10 +----- src/settings.cpp | 11 +++++- src/settings.h | 3 ++ src/soundbase.cpp | 16 ++++----- 10 files changed, 83 insertions(+), 56 deletions(-) diff --git a/ChangeLog b/ChangeLog index 87e53f87fb..b5fe7c03da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,6 +27,7 @@ - bug fix: ping times of servers which are further down the server list are too high (#49) +TODO fix dead lock on MacOS when connecting/disconnecting audio device and at the same time open the device selection combo box diff --git a/mac/sound.cpp b/mac/sound.cpp index b4e0e9d24d..9bf4273876 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -382,14 +382,11 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) stPropertyAddress.mSelector = kAudioDevicePropertyDeviceIsAlive; -// TODO we only check the alive for the input to avoid that we get the warning message -// twice since the OnSndCrdReinitRequest() function is not thread safe -/* AudioObjectRemovePropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); -*/ + AudioObjectRemovePropertyListener ( audioInputDevice[lCurDev], &stPropertyAddress, deviceNotification, @@ -425,13 +422,10 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) deviceNotification, this ); -// TODO see comment above -/* AudioObjectAddPropertyListener ( audioOutputDevice[lCurDev], &stPropertyAddress, deviceNotification, this ); -*/ stPropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice; diff --git a/src/client.cpp b/src/client.cpp index a1b354e529..e6d3da0e1f 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -515,7 +515,7 @@ QString CClient::SetSndCrdDev ( const QString strNewDev ) Sound.Stop(); } - const QString strReturn = Sound.SetDev ( strNewDev ); + const QString strError = Sound.SetDev ( strNewDev ); // init again because the sound card actual buffer size might // be changed on new device @@ -527,7 +527,13 @@ QString CClient::SetSndCrdDev ( const QString strNewDev ) Sound.Start(); } - return strReturn; + // in case of an error inform the GUI about it + if ( !strError.isEmpty() ) + { + emit SoundDeviceChanged ( strError ); + } + + return strError; } void CClient::SetSndCrdLeftInputChannel ( const int iNewChan ) @@ -612,42 +618,50 @@ void CClient::SetSndCrdRightOutputChannel ( const int iNewChan ) void CClient::OnSndCrdReinitRequest ( int iSndCrdResetType ) { - // in older QT versions, enums cannot easily be used in signals without - // registering them -> workaroud: we use the int type and cast to the enum - const ESndCrdResetType eSndCrdResetType = - static_cast ( iSndCrdResetType ); + QString strError = ""; - // if client was running then first - // stop it and restart again after new initialization - const bool bWasRunning = Sound.IsRunning(); - if ( bWasRunning ) + // audio device notifications can come at any time and they are in a + // different thread, therefore we need a mutex here + MutexDriverReinit.lock(); { - Sound.Stop(); - } + // in older QT versions, enums cannot easily be used in signals without + // registering them -> workaroud: we use the int type and cast to the enum + const ESndCrdResetType eSndCrdResetType = + static_cast ( iSndCrdResetType ); - // perform reinit request as indicated by the request type parameter - if ( eSndCrdResetType != RS_ONLY_RESTART ) - { - if ( eSndCrdResetType != RS_ONLY_RESTART_AND_INIT ) + // if client was running then first + // stop it and restart again after new initialization + const bool bWasRunning = Sound.IsRunning(); + if ( bWasRunning ) { - // reinit the driver if requested - // (we use the currently selected driver) - Sound.SetDev ( Sound.GetDev() ); + Sound.Stop(); } - // init client object (must always be performed if the driver - // was changed) - Init(); - } + // perform reinit request as indicated by the request type parameter + if ( eSndCrdResetType != RS_ONLY_RESTART ) + { + if ( eSndCrdResetType != RS_ONLY_RESTART_AND_INIT ) + { + // reinit the driver if requested + // (we use the currently selected driver) + strError = Sound.SetDev ( Sound.GetDev() ); + } - if ( bWasRunning ) - { - // restart client - Sound.Start(); + // init client object (must always be performed if the driver + // was changed) + Init(); + } + + if ( bWasRunning ) + { + // restart client + Sound.Start(); + } } + MutexDriverReinit.unlock(); // inform GUI about the sound card device change - emit SoundDeviceChanged(); + emit SoundDeviceChanged ( strError ); } void CClient::OnHandledSignal ( int sigNum ) diff --git a/src/client.h b/src/client.h index 2387fc90a4..b04178d108 100755 --- a/src/client.h +++ b/src/client.h @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef USE_OPUS_SHARED_LIB # include "opus/opus_custom.h" #else @@ -353,6 +354,7 @@ class CClient : public QObject bool bJitterBufferOK; bool bNuteMeInPersonalMix; + QMutex MutexDriverReinit; // server settings int iServerSockBufNumFrames; @@ -421,6 +423,6 @@ protected slots: CVector vecLevelList ); void Disconnected(); - void SoundDeviceChanged(); + void SoundDeviceChanged ( QString strError ); void ControllerInFaderLevel ( int iChannelIdx, int iValue ); }; diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index a2c2e02cc5..c5096aa0df 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1125,8 +1125,20 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() } } -void CClientDlg::OnSoundDeviceChanged() +void CClientDlg::OnSoundDeviceChanged ( QString strError ) { + if ( !strError.isEmpty() ) + { + // the sound device setup has a problem, disconnect any active connection + if ( pClient->IsRunning() ) + { + Disconnect(); + } + + // show the error message of the device setup + QMessageBox::critical ( this, APP_NAME, strError, tr ( "Ok" ), nullptr ); + } + // if the check audio device timer is running, it must be restarted on a device change if ( TimerCheckAudioDeviceOk.isActive() ) { diff --git a/src/clientdlg.h b/src/clientdlg.h index 7e230fd6df..b58c1e967e 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -181,7 +181,7 @@ public slots: void OnConClientListMesReceived ( CVector vecChanInfo ); void OnChatTextReceived ( QString strChatText ); void OnLicenceRequired ( ELicenceType eLicenceType ); - void OnSoundDeviceChanged(); + void OnSoundDeviceChanged ( QString strError ); void OnChangeChanGain ( int iId, float fGain, bool bIsMyOwnFader ) { pClient->SetRemoteChanGain ( iId, fGain, bIsMyOwnFader ); } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 47c1bed4e5..8b55129785 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -593,16 +593,8 @@ void CClientSettingsDlg::OnNetBufServerValueChanged ( int value ) void CClientSettingsDlg::OnSoundcardActivated ( int iSndDevIdx ) { - const QString strError = pClient->SetSndCrdDev ( cbxSoundcard->itemText ( iSndDevIdx ) ); + pClient->SetSndCrdDev ( cbxSoundcard->itemText ( iSndDevIdx ) ); - if ( !strError.isEmpty() ) - { - QMessageBox::critical ( this, APP_NAME, - QString ( tr ( "The selected audio device could not be used " - "because of the following error: " ) ) + strError + - QString ( tr ( " The previous driver will be selected." ) ), - tr ( "Ok" ), nullptr ); - } UpdateSoundDeviceChannelSelectionFrame(); UpdateDisplay(); } diff --git a/src/settings.cpp b/src/settings.cpp index daf6b325dc..903032d2ce 100755 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -350,7 +350,16 @@ void CClientSettings::ReadSettingsFromXML ( const QDomDocument& IniXMLDocument } // sound card selection - pClient->SetSndCrdDev ( FromBase64ToString ( GetIniSetting ( IniXMLDocument, "client", "auddev_base64", "" ) ) ); + const QString strError = pClient->SetSndCrdDev ( FromBase64ToString ( GetIniSetting ( IniXMLDocument, "client", "auddev_base64", "" ) ) ); + + if ( !strError.isEmpty() ) + { +#ifndef HEADLESS + // special case: when settings are loaded no GUI is yet created, therefore + // we have to create a warning message box here directly + QMessageBox::warning ( nullptr, APP_NAME, strError ); +#endif + } // sound card channel mapping settings: make sure these settings are // set AFTER the sound card device is set, otherwise the settings are diff --git a/src/settings.h b/src/settings.h index 9be3ed8270..b5c7774e2f 100755 --- a/src/settings.h +++ b/src/settings.h @@ -29,6 +29,9 @@ #include #include #include +#ifndef HEADLESS +# include +#endif #include "global.h" #include "client.h" #include "server.h" diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 8bb67972a9..b7f4ccde1e 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -84,8 +84,13 @@ QString CSoundBase::SetDev ( const QString strDevName ) if ( strDevName != strCurDevName ) { // loading and initializing the new driver failed, go back to - // original driver and display error message + // original driver and create error message LoadAndInitializeDriver ( strCurDevName, false ); + + // store error return message + strReturn = QString ( tr ( "The selected audio device could not be used " + "because of the following error: " ) ) + strErrorMessage + + QString ( tr ( " The previous driver will be selected." ) ); } else { @@ -93,9 +98,6 @@ QString CSoundBase::SetDev ( const QString strDevName ) // at least one usable driver bTryLoadAnyDriver = true; } - - // store error return message - strReturn = strErrorMessage; } } else @@ -126,13 +128,11 @@ QString CSoundBase::SetDev ( const QString strDevName ) // if a driver was previously selected, show a warning message if ( !strDevName.isEmpty() ) { -#ifndef HEADLESS - QMessageBox::warning ( nullptr, APP_NAME, tr ( "The previously selected audio device " + strReturn = tr ( "The previously selected audio device " "is no longer available or the audio driver properties have changed to a state which " "is incompatible with this software. We now try to find a valid audio device. This new " "audio device might cause audio feedback. So, before connecting to a server, please " - "check the audio device setting." ) ); -#endif + "check the audio device setting." ); } // try to load and initialize any valid driver From 47bb2a95239be86abf36f77ca888647917d34bad Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 5 Dec 2020 17:11:11 +0100 Subject: [PATCH 68/92] try to fix deadlock on MacOS --- mac/sound.cpp | 9 +++------ mac/sound.h | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 9bf4273876..b758abd759 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -91,9 +91,6 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData void CSound::GetAvailableInOutDevices() { - // secure lNumDevs/strDriverNames access - QMutexLocker locker ( &Mutex ); - UInt32 iPropertySize = 0; AudioObjectPropertyAddress stPropertyAddress; @@ -322,6 +319,9 @@ QString CSound::LoadAndInitializeDriver ( QString strDriverName, bool ) // secure lNumDevs/strDriverNames access QMutexLocker locker ( &Mutex ); + // reload the driver list of available sound devices + GetAvailableInOutDevices(); + // find driver index from given driver name int iDriverIdx = INVALID_INDEX; // initialize with an invalid index @@ -981,9 +981,6 @@ OSStatus CSound::deviceNotification ( AudioDeviceID, ( inAddresses->mSelector == kAudioHardwarePropertyDefaultOutputDevice ) || ( inAddresses->mSelector == kAudioHardwarePropertyDefaultInputDevice ) ) { - // reload the driver list of available sound devices - pSound->GetAvailableInOutDevices(); - if ( ( inAddresses->mSelector == kAudioDevicePropertyDeviceHasChanged ) || ( inAddresses->mSelector == kAudioDevicePropertyDeviceIsAlive ) ) { diff --git a/mac/sound.h b/mac/sound.h index 646a2ef969..b70274b8e6 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -64,7 +64,6 @@ class CSound : public CSoundBase // these variables/functions should be protected but cannot since we want // to access them from the callback function - void GetAvailableInOutDevices(); CVector vecsTmpAudioSndCrdStereo; int iCoreAudioBufferSizeMono; int iCoreAudioBufferSizeStereo; @@ -98,6 +97,7 @@ class CSound : public CSoundBase QString CheckDeviceCapabilities ( const int iDriverIdx ); void UpdateChSelection(); + void GetAvailableInOutDevices(); int CountChannels ( AudioDeviceID devID, bool isInput ); From 26dd9f1475cbbe8daf2373b3c555bf61b3f16d81 Mon Sep 17 00:00:00 2001 From: genesisproject2020 <7592139+genesisproject2020@users.noreply.github.com> Date: Sat, 5 Dec 2020 18:16:03 +0100 Subject: [PATCH 69/92] Update translation_sv_SE.ts --- src/res/translation/translation_sv_SE.ts | 32 ++++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/res/translation/translation_sv_SE.ts b/src/res/translation/translation_sv_SE.ts index 083c020a82..ae9ff7b493 100644 --- a/src/res/translation/translation_sv_SE.ts +++ b/src/res/translation/translation_sv_SE.ts @@ -135,12 +135,12 @@ &Translation - &Översättning + &Översättningar &OK - &Okej + &Stäng
@@ -778,17 +778,17 @@ Sort Channel Users by &City - Sortera Användarna efter S&taden + Sortera användarna efter S&tad Use &Two Rows Mixer Panel - + Dela upp &mixerpanelen i två rader &Clear All Stored Solo and Mute Settings - + &Rensa alla lagrade solo och tystade inställningar &Clear All Stored Solo Settings @@ -797,7 +797,7 @@ Set All Faders to New Client &Level - + Ställ in alla mixers till ny klient&nivå @@ -872,7 +872,7 @@ The soundcard device does not work correctly. Please check the device selection and the driver settings. - + Ljudkortet fungerar inte som det ska. Kontrollera enhetsvalet och drivrutinsinställningarna. @@ -955,7 +955,7 @@ MUTED (Other people won't hear you) - TYSTAD (andra hör inte dig) + Du är tystad! (andra hör inte dig) @@ -1207,7 +1207,7 @@ Central server address combo box - + Kombinationsruta för centralserveradress Display Channel Levels @@ -1554,12 +1554,12 @@ Size - Storlek + Nivå Misc - Blandat + Blandade inställningar @@ -1598,7 +1598,7 @@ Custom Central Server Address: - Anpassad centralserveradress: + Egen serveradress: @@ -1789,7 +1789,7 @@ Getting &Started... - Komma &igång ... + Komma &igång... @@ -2872,12 +2872,12 @@ The previously selected audio device is no longer available. The system default audio device will be selected instead. - + Den tidigare valda ljudenheten är inte längre tillgänglig. Systemets standardljudenhet har valts i stället. Current audio input device is no longer available. - + Nuvarande ljudingångsenhet är inte längre tillgänglig. @@ -2887,7 +2887,7 @@ Current audio output device is no longer available. - + Nuvarande ljudutgångsenhet är inte längre tillgänglig. From 4062407216b8068a86fb2e970a6d57efa6ce1c79 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 5 Dec 2020 19:21:41 +0100 Subject: [PATCH 70/92] secure device names access with a mutex --- src/client.h | 4 +--- src/clientsettingsdlg.cpp | 7 +++++-- src/soundbase.cpp | 18 ++++++++++++++++++ src/soundbase.h | 10 +++++----- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/client.h b/src/client.h index b04178d108..255d78b6e9 100755 --- a/src/client.h +++ b/src/client.h @@ -174,9 +174,7 @@ class CClient : public QObject int GetUploadRateKbps() { return Channel.GetUploadRateKbps(); } // sound card device selection - int GetSndCrdNumDev() { return Sound.GetNumDev(); } - QString GetSndCrdDeviceName ( const int iDiD ) - { return Sound.GetDeviceName ( iDiD ); } + QStringList GetSndCrdDevNames() { return Sound.GetDevNames(); } QString SetSndCrdDev ( const QString strNewDev ); QString GetSndCrdDev() { return Sound.GetDev(); } diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 8b55129785..c697682227 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -514,11 +514,14 @@ void CClientSettingsDlg::UpdateSoundCardFrame() void CClientSettingsDlg::UpdateSoundDeviceChannelSelectionFrame() { // update combo box containing all available sound cards in the system + QStringList slSndCrdDevNames = pClient->GetSndCrdDevNames(); cbxSoundcard->clear(); - for ( int iSndDevIdx = 0; iSndDevIdx < pClient->GetSndCrdNumDev(); iSndDevIdx++ ) + + foreach ( QString strDevName, slSndCrdDevNames ) { - cbxSoundcard->addItem ( pClient->GetSndCrdDeviceName ( iSndDevIdx ) ); + cbxSoundcard->addItem ( strDevName ); } + cbxSoundcard->setCurrentText ( pClient->GetSndCrdDev() ); // update input/output channel selection diff --git a/src/soundbase.cpp b/src/soundbase.cpp index b7f4ccde1e..d82da17f84 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -62,8 +62,26 @@ void CSoundBase::Stop() /******************************************************************************\ * Device handling * \******************************************************************************/ +QStringList CSoundBase::GetDevNames() +{ + QMutexLocker locker ( &MutexDevProperties ); + + QStringList slDevNames; + + // put all device names in the string list + for ( int iDev = 0; iDev < lNumDevs; iDev++ ) + { + slDevNames << strDriverNames[iDev]; + } + + return slDevNames; +} + + QString CSoundBase::SetDev ( const QString strDevName ) { + QMutexLocker locker ( &MutexDevProperties ); + // init return parameter with "no error" QString strReturn = ""; diff --git a/src/soundbase.h b/src/soundbase.h index 6ff064f922..f9b4fc30cf 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -60,10 +60,9 @@ class CSoundBase : public QThread virtual void Stop(); // device selection - virtual int GetNumDev() { return lNumDevs; } - virtual QString GetDeviceName ( const int iDiD ) { return strDriverNames[iDiD]; } - virtual QString SetDev ( const QString strDevName ); - virtual QString GetDev() { return strCurDevName; } + QStringList GetDevNames(); + QString SetDev ( const QString strDevName ); + QString GetDev() { QMutexLocker locker ( &MutexDevProperties ); return strCurDevName; } virtual int GetNumInputChannels() { return 2; } virtual QString GetInputChannelName ( const int ) { return "Default"; } @@ -92,11 +91,11 @@ class CSoundBase : public QThread { emit ReinitRequest ( eSndCrdResetType ); } protected: - // driver handling virtual QString LoadAndInitializeDriver ( QString, bool ) { return ""; } virtual void UnloadCurrentDriver() {} QVector LoadAndInitializeFirstValidDriver ( const bool bOpenDriverSetup = false ); void ParseCommandLineArgument ( const QString& strMIDISetup ); + QString GetDeviceName ( const int iDiD ) { return strDriverNames[iDiD]; } static void GetSelCHAndAddCH ( const int iSelCH, const int iNumInChan, int& iSelCHOut, int& iSelAddCHOut ) @@ -135,6 +134,7 @@ class CSoundBase : public QThread bool bRun; bool bCallbackEntered; QMutex MutexAudioProcessCallback; + QMutex MutexDevProperties; QString strSystemDriverTechniqueName; int iCtrlMIDIChannel; From fbf5420e9748a5d680955e757a427be51847531d Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 5 Dec 2020 19:36:46 +0100 Subject: [PATCH 71/92] update --- ChangeLog | 1 - 1 file changed, 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index b5fe7c03da..87e53f87fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -27,7 +27,6 @@ - bug fix: ping times of servers which are further down the server list are too high (#49) -TODO fix dead lock on MacOS when connecting/disconnecting audio device and at the same time open the device selection combo box From 76da55d5d1df068b4bff18127151c879c828cba1 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 09:36:50 +0100 Subject: [PATCH 72/92] update translations --- src/res/translation/translation_de_DE.ts | 163 +++++++++++++---------- src/res/translation/translation_es_ES.ts | 159 ++++++++++++---------- src/res/translation/translation_fr_FR.ts | 159 ++++++++++++---------- src/res/translation/translation_it_IT.ts | 159 ++++++++++++---------- src/res/translation/translation_nl_NL.ts | 159 ++++++++++++---------- src/res/translation/translation_pl_PL.ts | 159 ++++++++++++---------- src/res/translation/translation_pt_BR.ts | 159 ++++++++++++---------- src/res/translation/translation_pt_PT.ts | 159 ++++++++++++---------- src/res/translation/translation_sk_SK.ts | 157 ++++++++++++---------- src/res/translation/translation_sv_SE.ts | 163 ++++++++++++++--------- 10 files changed, 883 insertions(+), 713 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index a9b28b06d9..4316eb3cc3 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -809,7 +809,7 @@ - + C&onnect &Verbinden @@ -863,6 +863,16 @@ &Clear All Stored Solo and Mute Settings &Lösche alle gespeicherten Solo- und Mute-Einstellungen + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + + E&xit @@ -1023,22 +1033,21 @@ Auswählen der Datei für die Konfiguration der Mixerkanäle - + user Musiker - + users Musiker - The soundcard device does not work correctly. Please check the device selection and the driver settings. - Die Soundkarte funktioniert nicht ordnungsgemäß. Bitte überprüfe die Soundkartenauswahl und die Einstellungen der Soundkarte. + Die Soundkarte funktioniert nicht ordnungsgemäß. Bitte überprüfe die Soundkartenauswahl und die Einstellungen der Soundkarte. - + D&isconnect &Trennen @@ -1749,19 +1758,12 @@ Vordefinierte Adresse - The selected audio device could not be used because of the following error: - Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: + Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: - The previous driver will be selected. - Der vorherige Treiber wird wieder ausgewählt. - - - - Ok - + Der vorherige Treiber wird wieder ausgewählt. @@ -1844,53 +1846,53 @@ - + Local Lokal - + Server Server - - + + Size Größe - + Misc Sonstiges - + Audio Channels Audiokanäle - + Audio Quality Audioqualität - + New Client Level Pegel für neuen Teilnehmer - + Skin Oberfläche - + Language Sprache - + % @@ -1903,7 +1905,7 @@ Zeige Signalpegel - + Custom Central Server Address: Benutzerdefinierte Zentralserveradresse: @@ -1912,24 +1914,24 @@ Zentralserveradresse: - + Audio Stream Rate Netzwerkrate - - - + + + val Wert - + Ping Time Ping-Zeit - + Overall Delay Gesamtverzögerung @@ -3250,103 +3252,116 @@ Der Jack-Server wurde gestoppt. Diese Software benötigt aber einen aktiven Jack-Server um zu funktionieren. Versuche die Software neu zu starten um das Problem zu lösen. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio Eingang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint als wäre keine Soundkarte im System vorhanden. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio Ausgang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint, dass keine Soundkarte ist im System verfügbar. - The previously selected audio device is no longer available. The system default audio device will be selected instead. - Die vorher ausgewählte Soundkarte ist nicht mehr im System verfügbar. Die System-Standardsoundkarte wird nun stattdessen ausgewählt. + Die vorher ausgewählte Soundkarte ist nicht mehr im System verfügbar. Die System-Standardsoundkarte wird nun stattdessen ausgewählt. - Current audio input device is no longer available. - Das aktuelle Audiogerät für den Toneingang ist nicht mehr verfügbar. + Das aktuelle Audiogerät für den Toneingang ist nicht mehr verfügbar. - + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Die aktuelle Eingangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. - Current audio output device is no longer available. - Das aktuelle Audiogerät für den Tonausgang ist nicht mehr verfügbar. + Das aktuelle Audiogerät für den Tonausgang ist nicht mehr verfügbar. + + + + + The current selected audio device is no longer present in the system. + + + + + The audio input device is no longer available. + + + + + The audio output device is no longer available. + - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Die aktuelle Ausgangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. - + The audio input stream format for this audio device is not compatible with this software. Das Audioeingangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. - + The audio output stream format for this audio device is not compatible with this software. Das Audioausgangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Die Puffergrößen vom aktuellen Eingangs- und Ausgangsaudiogerät kann nicht auf einen gemeinsamen Wert eingestellt werden. Bitte wähle ein anderes Eingangs-/Ausgangsgerät aus der Geräteliste aus. - + The audio driver could not be initialized. Der Audiotreiber konnte nicht initialisiert werden. - + The audio device does not support the required sample rate. The required sample rate is: Das Audiogerät unterstützt nicht die benötigte Samplerate. Die benötigte Samplerate ist: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Das Audiogerät unterstützt nicht die benötigte Samplerate. Dieser Fehler kann auftreten, wenn ein Audiogerät wie das Roland UA-25EX verwendet wird, bei dem die Samplerate per Schalter am Gerät verstellt werden muss. Falls das der Fall sein sollte, dann stelle bitte den Schalter auf - + Hz on the device and restart the Hz am Gerät und starte die - + software. Software neu. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Das Audiogerät unterstützt nicht die benötigte Anzahl an Kanälen. Die benötigte Anzahl an Kanälen für den Eingang und den Ausgang ist: - - + + Required audio sample format not available. Das benötigte Audio Sampleformat ist nicht verfügbar. - + No ASIO audio device (driver) found. Kein ASIO-Gerätetreiber wurde gefunden. - + The Die - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. Software benötigt aber ein ASIO Audiointerface um zu funktionieren. Dies ist keine Standard-Windowsschnittstelle und benötigt deshalb einen speziellen Treiber. Entweder die Soundkarte liefert einen nativen ASIO-Treiber mit (was empfohlen wird) oder man versucht es mit dem ASIO4All-Universaltreiber. @@ -3363,42 +3378,50 @@ Ungültige Geräteauswahl. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - Die Audiotreibereigenschaften haben sich geändert. Die neuen Einstellungen sind nicht mehr kompatibel zu dieser Software. Das ausgewählte Audiogerät konnte nicht benutzt werden wegen folgendem Fehler: + Die Audiotreibereigenschaften haben sich geändert. Die neuen Einstellungen sind nicht mehr kompatibel zu dieser Software. Das ausgewählte Audiogerät konnte nicht benutzt werden wegen folgendem Fehler: - Please restart the software. - Bitte starte die Software neu. + Bitte starte die Software neu. - - Close - + + The selected audio device could not be used because of the following error: + Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: + + + + The previous driver will be selected. + Der vorherige Treiber wird wieder ausgewählt. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Kein benutzbares - + audio device (driver) found. Audiogerät (Treiber) konnte gefunden werden. - + In the following there is a list of all available drivers with the associated error message: Im folgenden wird eine Liste aller gefundenen Audiogeräte mit entsprechender Fehlermeldung angezeigt: - + Do you want to open the ASIO driver setups? Willst du die ASIO-Treibereinstellungen öffnen? - + could not be started because of audio interface issues. konnte nicht gestartet werden wegen Problemen mit dem Audiogerät. @@ -3424,7 +3447,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Für weitere Informationen verwende die Kontexthilfe (Hilfe-Menü, rechte Maustaste oder Tastenkombination Shift+F1) diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index ca6d55d5de..c8a56529ce 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -829,7 +829,7 @@ - + C&onnect C&onectar @@ -883,6 +883,16 @@ &Clear All Stored Solo and Mute Settings + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + E&xit @@ -1039,22 +1049,17 @@ Seleccionar Archivo Configuración Canales - + user usuario - + users usuarios - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect D&esconectar @@ -1765,19 +1770,16 @@ Dirección Preestablecida - The selected audio device could not be used because of the following error: - El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: + El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: - The previous driver will be selected. - Se utilizará el driver anterior. + Se utilizará el driver anterior. - Ok - Ok + Ok @@ -1860,53 +1862,53 @@ Auto - + Local Local - + Server Servidor - - + + Size Valor - + Misc Varios - + Audio Channels Canales Audio - + Audio Quality Calidad Audio - + New Client Level Nivel Cliente Nuevo - + Skin Skin - + Language Idioma - + % % @@ -1919,7 +1921,7 @@ Mostrar Nivel Canales - + Custom Central Server Address: Dirección Personalizada Servidor Central: @@ -1928,24 +1930,24 @@ Dirección Servidor Central: - + Audio Stream Rate Tasa Muestreo Audio - - - + + + val val - + Ping Time Tiempo Ping - + Overall Delay Retardo Total @@ -3274,103 +3276,104 @@ El servidor Jack se ha cerrado. Este software necesita el servidor Jack para funcionar. Intenta reiniciar el software para solucionar este problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio input AudioHardwareGetProperty call failed. Parece ser que el sistema no tiene una tarjeta de sonido disponible. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio output AudioHardwareGetProperty call failed. Parece ser que el sistema no tiene una tarjeta de sonido disponible. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + La tasa de muestreo actual del dispositivo de audio de entrada de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - La tasa de muestreo actual del dispositivo de audio de entrada de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. La tasa de muestreo actual del dispositivo de audio de salida de %1 Hz no está soportada. Por favor, abre Configuración-Audio-MIDI en Aplicaciones->Utilidades e intenta configurar una tasa de muestreo de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. El formato de transmisión de audio de entrada para este dispositivo de audio no es compatible con este software. - + The audio output stream format for this audio device is not compatible with this software. El formato de transmisión de audio de salida para este dispositivo de audio no es compatible con este software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Los tamaños de buffer del dispositivo actual de entrada/salida de audio no pueden establecerse en un valor común. Por favor, selecciona otros dispositivos de entrada/salida de audio en la configuración del sistema. - + The audio driver could not be initialized. No se pudo iniciar el driver de audio. - + The audio device does not support the required sample rate. The required sample rate is: El dispositivo de audio no soporta la tasa de muestreo requerida. La tasa de muestreo requerida es de: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to El dispositivo de audio no permite establecer la tasa de muestreo requerida. Este error puede suceder si tienes un dispositivo de audio como el Roland UA-25EX en el que se configura mediante un interruptor físico en el dispositivo. Si es este el caso, por favor cambia la tasa de muestreo a - + Hz on the device and restart the Hz en el dispositivo y reinicie el software - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: El dispositivo de audio no soporta el número de canales requerido. El número de canales requerido es de: - - + + Required audio sample format not available. Formato de muestras de audio requerido no disponible. - + No ASIO audio device (driver) found. No se ha encontrado un dispositivo ASIO (driver). - + The El software - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. requiere la interfaz de audio de baja latencia ASIO para funcionar correctamente. No es una interfaz estándar de Windows y por tanto se requiere un driver de audio especial. Tu tarjeta de audio podría tener un driver ASIO nativo (lo recomendado) o quizá quieras probar un driver alternativo como ASIO4All. @@ -3387,42 +3390,54 @@ Selección de dispositivo no válida. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - Las propiedades del driver de audio han cambiado a un estado que es incompatible con este software. El dispositivo de audio seleccionado no se pudo utilizar a causa del siguiente error: + Las propiedades del driver de audio han cambiado a un estado que es incompatible con este software. El dispositivo de audio seleccionado no se pudo utilizar a causa del siguiente error: - Please restart the software. - Por favor reinicie el software. + Por favor reinicie el software. - Close - Cerrar + Cerrar + + + + The selected audio device could not be used because of the following error: + El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: + + + + The previous driver will be selected. + Se utilizará el driver anterior. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Ningún driver - + audio device (driver) found. de audio utilizable encontrado. - + In the following there is a list of all available drivers with the associated error message: A continuación hay una lista de todos los drivers disponibles con el error asociado: - + Do you want to open the ASIO driver setups? ¿Quieres abrir la configuración del driver ASIO? - + could not be started because of audio interface issues. no pudo arrancar debido a problemas con el dispositivo de audio. @@ -3448,7 +3463,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Para más información utiliza ¿Qué es Esto? (menú de ayuda, botón derecho del ratón o Shift+F1) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 45e548308a..d85020fe98 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -825,7 +825,7 @@ - + C&onnect Se c&onnecter @@ -879,6 +879,16 @@ &Clear All Stored Solo and Mute Settings + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + E&xit @@ -1039,22 +1049,17 @@ Sélectionnez le fichier de configuration des canaux - + user utilisateur - + users utilisateurs - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect Dé&connecter @@ -1769,19 +1774,16 @@ Adresse prédéfinie - The selected audio device could not be used because of the following error: - Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : + Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : - The previous driver will be selected. - Le pilote précédent sera sélectionné. + Le pilote précédent sera sélectionné. - Ok - Ok + Ok @@ -1864,53 +1866,53 @@ Auto - + Local Local - + Server Serveur - - + + Size Taille - + Misc Divers - + Audio Channels Canaux audio - + Audio Quality Qualité audio - + New Client Level Niveau de nouveau client - + Skin Thème graphique - + Language Langue - + % % @@ -1923,7 +1925,7 @@ Afficher les niveaux des canaux - + Custom Central Server Address: Adresse personnalisée du serveur central : @@ -1932,24 +1934,24 @@ Adresse du serveur central : - + Audio Stream Rate Débit du flux audio - - - + + + val val - + Ping Time Temps de réponse - + Overall Delay Délai global @@ -3266,103 +3268,104 @@ Le serveur Jack a été fermé. Ce logiciel nécessite un serveur Jack pour fonctionner. Essayez de redémarrer le logiciel pour résoudre le problème. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. L'appel d'entrée AudioHardwareGetProperty CoreAudio a échoué failed. Il semble qu'aucune carte son ne soit disponible dans le système. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. L'appel de sortie AudioHardwareGetProperty CoreAudio a échoué failed. Il semble qu'aucune carte son ne soit disponible dans le système. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + Le taux d'échantillonnage de %1 Hz du périphérique d'entrée audio du système actuel n'est pas pris en charge. Veuillez ouvrir la configuration Audio-MIDI dans Applications->Utilitaires et essayer de définir un taux d'échantillonnage de %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - Le taux d'échantillonnage de %1 Hz du périphérique d'entrée audio du système actuel n'est pas pris en charge. Veuillez ouvrir la configuration Audio-MIDI dans Applications->Utilitaires et essayer de définir un taux d'échantillonnage de %2 Hz. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Le taux d'échantillonnage de %1 Hz du périphérique de sortie audio du système actuel n'est pas pris en charge. Veuillez ouvrir la configuration Audio-MIDI dans Applications->Utilitaires et essayer de définir un taux d'échantillonnage de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Le format du flux d'entrée audio pour ce périphérique audio n'est pas compatible avec ce logiciel. - + The audio output stream format for this audio device is not compatible with this software. Le format du flux de sortie audio pour ce périphérique audio n'est pas compatible avec ce logiciel. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Les tailles de tampon du périphérique audio d'entrée et de sortie actuel ne peuvent pas être réglées à une valeur commune. Veuillez choisir d'autres périphériques audio d'entrée/sortie dans les paramètres de votre système. - + The audio driver could not be initialized. Le pilote audio n'a pas pu être initialisé. - + The audio device does not support the required sample rate. The required sample rate is: Le périphérique audio ne prend pas en charge la fréquence d'échantillonnage requise. La fréquence d'échantillonnage requise est : - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Le périphérique audio ne permet pas de régler la fréquence d'échantillonnage requise. Cette erreur peut se produire si vous avez une interface audio comme le Roland UA-25EX où vous réglez la fréquence d'échantillonnage avec un commutateur matériel sur le périphérique audio. Si c'est le cas, veuillez changer la fréquence d'échantillonnage à - + Hz on the device and restart the Hz sur le péripéhrique et redémarrer le logiciel - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: Le périphérique audio ne prend pas en charge le nombre de canaux requis. Le nombre de canaux requis pour l'entrée et la sortie est : - - + + Required audio sample format not available. Le format de l'échantillon audio requis n'est pas disponible. - + No ASIO audio device (driver) found. Aucun périphérique audio ASIO (pilote) trouvé. - + The Le logiciel - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. nécessite l'interface audio à faible latence ASIO pour fonctionner correctement. Il ne s'agit pas d'une interface audio Windows standard et un pilote audio spécial est donc nécessaire. Soit votre carte son dispose d'un pilote ASIO natif (ce qui est recommandé), soit vous pouvez utiliser d'autres pilotes comme le pilote ASIO4All. @@ -3379,42 +3382,54 @@ Sélection de périphérique invalide. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - Les propriétés du pilote audio ont changé et sont devenues incompatibles avec ce logiciel. Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : + Les propriétés du pilote audio ont changé et sont devenues incompatibles avec ce logiciel. Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : - Please restart the software. - Veuillez redémarrer le logiciel + Veuillez redémarrer le logiciel - Close - Fermer + Fermer + + + + The selected audio device could not be used because of the following error: + Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : + + + + The previous driver will be selected. + Le pilote précédent sera sélectionné. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Pas de périphérique audio (pilote) - + audio device (driver) found. utilisable trouvé - + In the following there is a list of all available drivers with the associated error message: Vous trouverez ci-dessous une liste de tous les pilotes disponibles avec le message d'erreur associé : - + Do you want to open the ASIO driver setups? Voulez-vous ouvrir les configurations des pilotes ASIO ? - + could not be started because of audio interface issues. n'a pas pu être lancé en raison de problèmes d'interface audio. @@ -3440,7 +3455,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Pour plus d'informations, utilisez l'aide Qu'est-ce que c'est (menu d'aide, bouton droit de la souris ou Maj+F1) diff --git a/src/res/translation/translation_it_IT.ts b/src/res/translation/translation_it_IT.ts index 475ed18977..920a274547 100644 --- a/src/res/translation/translation_it_IT.ts +++ b/src/res/translation/translation_it_IT.ts @@ -881,7 +881,7 @@ - + C&onnect C&onnetti @@ -945,6 +945,16 @@ &Clear All Stored Solo and Mute Settings &Riprisitna tutti gli stati salvati di SOLO e MUTE + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + &Clear All Stored Solo Settings &Ripristina i canali settati in "Solo" @@ -1019,22 +1029,17 @@ Selezione File di Setup dei Canali - + user utente - + users utenti - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect D&isconnetti @@ -1695,19 +1700,16 @@ Indirizzo Preferito - The selected audio device could not be used because of the following error: - La scheda audio selezionata non può essere usata per i seguenti motivi: + La scheda audio selezionata non può essere usata per i seguenti motivi: - The previous driver will be selected. - Sarà ripristinato il driver precedentemente usato. + Sarà ripristinato il driver precedentemente usato. - Ok - Ok + Ok @@ -1820,53 +1822,53 @@ Auto - + Local Locale - + Server Server - - + + Size Livello - + Misc Altri Parametri - + Audio Channels Canali Audio - + Audio Quality Qualità Audio - + New Client Level Livello Nuovo Client - + Skin Vista - + Language Lingua - + % % @@ -1879,7 +1881,7 @@ Visualizza Livelli Canali - + Custom Central Server Address: Indirizzo Server Centrale alternativo: @@ -1888,24 +1890,24 @@ Indirizzo Server Centrale: - + Audio Stream Rate Velocità dello Streaming - - - + + + val val - + Ping Time Ping - + Overall Delay Overall Delay @@ -3219,103 +3221,104 @@ Il server Jack non è attivo. Questo software necessita del server Jack per funzionare. Prova a riavviare il software per risolvere questo problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. Ingresso CoreAudio Chiamata AudioHardwareGetProperty non riuscita. Sembra che il sistema non abbia una scheda audio disponibile. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. Uscita CoreAudio Chiamata AudioHardwareGetProperty non riuscita. Sembra che il sistema non abbia una scheda audio disponibile. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + La frequenza di campionamento corrente del dispositivo audio in ingresso di %1 Hz non è supportata. Apri Impostazioni-Audio-MIDI in Applicazioni-> Utilità e prova a impostare una frequenza di campionamento di %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - La frequenza di campionamento corrente del dispositivo audio in ingresso di %1 Hz non è supportata. Apri Impostazioni-Audio-MIDI in Applicazioni-> Utilità e prova a impostare una frequenza di campionamento di %2 Hz. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. La frequenza di campionamento corrente del dispositivo audio in uscita %1 Hz non è supportata. Apri Impostazioni-Audio-MIDI in Applicazioni-> Utilità e prova a impostare una frequenza di campionamento di %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Il formato di trasmissione audio in ingresso per questo dispositivo audio non è supportato da questo software. - + The audio output stream format for this audio device is not compatible with this software. Il formato di trasmissione audio in uscita per questo dispositivo audio non è supportato da questo software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Le dimensioni del buffer dell'attuale dispositivo di input / output audio non possono essere impostate su un valore comune. Seleziona altri dispositivi di input / output audio nelle impostazioni di sistema. - + The audio driver could not be initialized. Il driver audio non può essere inizializzato. - + The audio device does not support the required sample rate. The required sample rate is: Il dispositivo audio non supporta la frequenza di campionamento richiesta. La frequenza di campionamento richiesta è: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Il dispositivo audio non consente di impostare la frequenza di campionamento richiesta. Questo errore può verificarsi se si dispone di un dispositivo audio come il Roland UA-25EX in cui è configurato mediante un interruttore fisico sul dispositivo. In tal caso, modificare la frequenza di campionamento a - + Hz on the device and restart the Hz sul dispositivo e riavviare il programma - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: Il dispositivo audio non supporta il numero richiesto di canali. Il numero di canali richiesti è: - - + + Required audio sample format not available. Formato di campionamento audio richiesto non disponibile. - + No ASIO audio device (driver) found. Non è stato trovato un dispositivo ASIO (driver). - + The Il programma - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. richiede che l'interfaccia audio ASIO a bassa latenza funzioni correttamente. Non è un'interfaccia standard di Windows e quindi è necessario un driver audio speciale. La tua scheda audio potrebbe avere un driver ASIO nativo (consigliato) o potresti provare un driver alternativo come ASIO4All. @@ -3327,42 +3330,54 @@ Device Selezionato non valido. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - I settaggi del driver audio sono stati cambiati con parametri incompatibili con questo programma. La scheda audio selezionata non può essere usata a causa dei seguenti errori: + I settaggi del driver audio sono stati cambiati con parametri incompatibili con questo programma. La scheda audio selezionata non può essere usata a causa dei seguenti errori: - Please restart the software. - Perfavore riavvia il programma. + Perfavore riavvia il programma. - Close - Chiudi + Chiudi + + + + The selected audio device could not be used because of the following error: + La scheda audio selezionata non può essere usata per i seguenti motivi: + + + + The previous driver will be selected. + Sarà ripristinato il driver precedentemente usato. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Device Non utilizzabile - + audio device (driver) found. driver non trovati. - + In the following there is a list of all available drivers with the associated error message: Di seguito è riportato un elenco di tutti i driver disponibili con errore associato: - + Do you want to open the ASIO driver setups? Vuoi aprire il setup dei Driver Audio ASIO? - + could not be started because of audio interface issues. Impossibile avviare a causa di problemi con il dispositivo audio. @@ -3388,7 +3403,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Per maggiori informazioni usare il comando "Cos'è Questo" (Menù Aiuto, Tasto destro del mouse oppure Shift+F1) diff --git a/src/res/translation/translation_nl_NL.ts b/src/res/translation/translation_nl_NL.ts index 6bf35307de..32a759a37d 100644 --- a/src/res/translation/translation_nl_NL.ts +++ b/src/res/translation/translation_nl_NL.ts @@ -873,7 +873,7 @@ - + C&onnect C&onnect @@ -937,6 +937,16 @@ &Clear All Stored Solo and Mute Settings + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + &Clear All Stored Solo Settings &Wis Alle Opgeslagen Solo-instellingen @@ -1007,22 +1017,17 @@ Selecteer bestand met Kanaalinstellingen - + user gebruiker - + users gebruikers - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect &Afmelden @@ -1717,19 +1722,16 @@ Buffervertraging: - The selected audio device could not be used because of the following error: - Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: + Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: - The previous driver will be selected. - Het vorige stuurprogramma wordt geselecteerd. + Het vorige stuurprogramma wordt geselecteerd. - Ok - Ok + Ok @@ -1812,53 +1814,53 @@ Auto - + Local Lokaal - + Server Server - - + + Size Size - + Misc Overige - + Audio Channels Audiokanalen - + Audio Quality Audiokwaliteit - + New Client Level Nieuw client-niveau - + Skin Skin - + Language Taal - + % % @@ -1871,7 +1873,7 @@ Weergave Kanaalniveaus - + Custom Central Server Address: Eigen centrale serveradres: @@ -1880,24 +1882,24 @@ Centraal Serveradres: - + Audio Stream Rate Audio Stream Rate - - - + + + val val - + Ping Time Ping-tijd - + Overall Delay Algehele vertraging @@ -3223,103 +3225,104 @@ De Jack-server werd afgesloten. Voor deze software is een Jack-server nodig om te kunnen draaien. Probeer de software te herstarten om het probleem op te lossen. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio-ingang AudioHardwareGetProperty-oproep mislukt. Het lijkt erop dat er geen geluidskaart beschikbaar is in het systeem. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio uitgang AudioHardwareGetProperty call mislukt. Het lijkt erop dat er geen geluidskaart beschikbaar is in het systeem. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + Een sample rate van %1 Hz voor het audio-ingangsapparaat van het huidige systeem wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - Een sample rate van %1 Hz voor het audio-ingangsapparaat van het huidige systeem wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. De sample rate van %1 Hz van het huidige systeem audiouitgangsapparaat wordt niet ondersteund. Open de Audio-MIDI-Setup in Applications->Utilities en probeer een sample rate van %2 Hz in te stellen. - + The audio input stream format for this audio device is not compatible with this software. Het audio input stream-formaat voor dit audioapparaat is niet compatibel met deze software. - + The audio output stream format for this audio device is not compatible with this software. Het formaat van de audio-uitgangsstroom voor dit audioapparaat is niet compatibel met deze software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. De buffergrootte van het huidige in- en uitgaande audioapparaat kan niet op een gemeenschappelijke waarde worden ingesteld. Kies andere in-/uitgangsaudioapparaten in uw systeeminstellingen. - + The audio driver could not be initialized. De audiodriver kon niet worden geïnitialiseerd. - + The audio device does not support the required sample rate. The required sample rate is: Het audioapparaat ondersteunt niet de vereiste samplefrequentie. De vereiste samplefrequentie wel: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Het audioapparaat biedt geen ondersteuning voor het instellen van de vereiste bemonsteringsfrequentie. Deze fout kan zich voordoen als u een audio-interface heeft zoals de Roland UA-25EX waarbij u de samplefrequentie instelt met een hardwareschakelaar op het audioapparaat. Als dit het geval is, verander dan de samplefrequentie in - + Hz on the device and restart the Hz op het apparaat en start de - + software. software. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Het audioapparaat ondersteunt niet het vereiste aantal kanalen. Het vereiste aantal kanalen voor in- en uitvoer is: - - + + Required audio sample format not available. Vereist audiosampleformaat niet beschikbaar. - + No ASIO audio device (driver) found. Geen ASIO-audioapparaat (stuurprogramma) gevonden. - + The De - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. software vereist de lage-latency audio-interface ASIO om goed te kunnen werken. Dit is geen standaard Windows audio-interface en daarom is een speciale audio-stuurprogramma vereist. Ofwel heeft uw geluidskaart een native ASIO driver (die wordt aanbevolen), ofwel wilt u alternatieve drivers gebruiken zoals de ASIO4All driver. @@ -3331,42 +3334,54 @@ Ongeldige apparaatkeuze. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - De eigenschappen van de audiodriver zijn veranderd in een toestand die niet compatibel is met deze software. Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: + De eigenschappen van de audiodriver zijn veranderd in een toestand die niet compatibel is met deze software. Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: - Please restart the software. - Start de software opnieuw op. + Start de software opnieuw op. - Close - Sluiten + Sluiten + + + + The selected audio device could not be used because of the following error: + Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: + + + + The previous driver will be selected. + Het vorige stuurprogramma wordt geselecteerd. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Niet bruikbaar - + audio device (driver) found. audioapparaat (stuurprogramma) gevonden. - + In the following there is a list of all available drivers with the associated error message: Hieronder vindt u een lijst van alle beschikbare drivers met de bijbehorende foutmelding: - + Do you want to open the ASIO driver setups? Wilt u de ASIO-stuurprogramma's openen? - + could not be started because of audio interface issues. kon niet worden gestart vanwege problemen met de audio-interface. @@ -3392,7 +3407,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Voor meer informatie gebruik de Wat Is Dit hulp (helpmenu, rechtermuisklik of Shift+F1) diff --git a/src/res/translation/translation_pl_PL.ts b/src/res/translation/translation_pl_PL.ts index 9319700d0d..2881da0924 100644 --- a/src/res/translation/translation_pl_PL.ts +++ b/src/res/translation/translation_pl_PL.ts @@ -713,7 +713,7 @@ - + C&onnect &Połącz @@ -792,6 +792,16 @@ Sort Channel Users by &City Sortuj kanały według &miasta + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + &Clear All Stored Solo Settings Wy&czyść wszystkie zachowane ustawienia użytkowników @@ -843,22 +853,17 @@ Wybierz plik ustawień kanału - + user użytkownik - + users użytkownicy - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect &Rozłącz @@ -1409,19 +1414,16 @@ Opóźnienie bufora: - The selected audio device could not be used because of the following error: - Wybrane urządzenie audio nie mogło być użyte z powodu następującego błędu: + Wybrane urządzenie audio nie mogło być użyte z powodu następującego błędu: - The previous driver will be selected. - Został wybrany poprzedni sterownik. + Został wybrany poprzedni sterownik. - Ok - Ok + Ok @@ -1504,80 +1506,80 @@ Automatyczny - + Local Lokalny - + Server Serwer - - + + Size Rozmiar - + Misc Różne - + Audio Channels Kanały audio - + Audio Quality Jakość audio - + New Client Level Poziom dołączającego się uczestnika - + Skin Skórka - + Language Język - + % % - + Custom Central Server Address: Własny adres serwera centralnego: - + Audio Stream Rate Prędkość strumienia audio - - - + + + val wartość - + Ping Time Czas odpowiedzi - + Overall Delay Opóźnienie całkowite @@ -2705,103 +2707,104 @@ Serwer Jack został wyłączony. Ten program wymaga serwera Jack'a do uruchomienia. Spróbuj zrestartować oprogramowanie, aby rozwiązać problem. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio wywołanie wejścia AudioHardwareGetProperty nie powiodło się. Wydaje się, że karta dźwiękowa nie jest dostępna w systemie. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio wywołanie wyjścia AudioHardwareGetProperty nie powiodło się. Wydaje się, że karta dźwiękowa nie jest dostępna w systemie. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + Aktualna systemowa częstotliwość próbkowania urządzenia wejściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - Aktualna systemowa częstotliwość próbkowania urządzenia wejściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Aktualna systemowa częstotliwość próbkowania urządzenia wyjściowego audio %1 Hz nie jest obsługiwana. Proszę otworzyć Audio-MIDI-Setup w Applications->Utilities i spróbować ustawić częstotliwość próbkowania %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Format strumienia wejściowego audio dla tego urządzenia audio nie jest kompatybilny z tym oprogramowaniem. - + The audio output stream format for this audio device is not compatible with this software. Format strumienia wyjściowego audio dla tego urządzenia audio nie jest kompatybilny z tym oprogramowaniem. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Rozmiary bufora bieżącego wejściowego i wyjściowego urządzenia audio nie mogą być ustawione na wspólną wartość. Proszę wybrać inne wejściowe/wyjściowe urządzenia audio w ustawieniach systemowych. - + The audio driver could not be initialized. Sterownik audio nie może zostać zainicjalizowany. - + The audio device does not support the required sample rate. The required sample rate is: Urządzenie audio nie obsługuje wymaganej częstotliwości próbkowania. Wymagana częstotliwość próbkowania wynosi: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Urządzenie audio nie obsługuje ustawiania wymaganej częstotliwości próbkowania. Błąd ten może się zdarzyć, jeśli posiadasz interfejs audio taki jak Roland UA-25EX, w którym ustawiasz częstotliwość próbkowania za pomocą przełącznika sprzętowego na urządzeniu audio. W takim przypadku należy zmienić częstotliwość próbkowania na - + Hz on the device and restart the Hz na urządzeniu i ponownie uruchom program - + software. program. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Urządzenie audio nie obsługuje wymaganej liczby kanałów. Wymagana liczba kanałów dla wejścia i wyjścia wynosi: - - + + Required audio sample format not available. Wymagany format próbkowania audio nie jest dostępny. - + No ASIO audio device (driver) found. Urządzenie (sterownik) ASIO nie został znaleziony. - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. program wymaga do poprawnego działania interfejsu audio ASIO o niskim opóźnieniu. Nie jest to standardowy interfejs systemu Windows i dlatego wymagany jest specjalny sterownik audio. Albo twoja karta dźwiękowa posiada natywny sterownik ASIO (co jest zalecane) lub możesz użyć alternatywnych sterowników, takich jak ASIO4All. - + The @@ -2818,42 +2821,54 @@ Wybrano niepoprawne urządzenie. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - Właściwości sterownika audio zmieniły i są niekompatybilne z Jamulus-em. Wybrane urządzenie audio nie mogło zostać użyte z powodu następującego błędu: + Właściwości sterownika audio zmieniły i są niekompatybilne z Jamulus-em. Wybrane urządzenie audio nie mogło zostać użyte z powodu następującego błędu: - Please restart the software. - Uruchom program ponownie. + Uruchom program ponownie. - Close - Zamknij + Zamknij + + + + The selected audio device could not be used because of the following error: + Wybrane urządzenie audio nie mogło być użyte z powodu następującego błędu: + + + + The previous driver will be selected. + Został wybrany poprzedni sterownik. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Nieużywany - + audio device (driver) found. znaleziono urządzenie dźwiękowe (sterownik). - + In the following there is a list of all available drivers with the associated error message: Poniżej znajduje się lista wszystkich dostępnych sterowników wraz z powiązanymi komunikatami błędów: - + Do you want to open the ASIO driver setups? Czy chcesz otworzyć konfigurację sterownika ASIO? - + could not be started because of audio interface issues. nie mógł być uruchomiony z powodu problemów z interfejsem audio. @@ -2879,7 +2894,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Aby uzyskać więcej informacji użyj "Co to" (Pomoc, prawy przycisk myszy lub Shift+F1) diff --git a/src/res/translation/translation_pt_BR.ts b/src/res/translation/translation_pt_BR.ts index 2e9e27b224..9379635467 100644 --- a/src/res/translation/translation_pt_BR.ts +++ b/src/res/translation/translation_pt_BR.ts @@ -823,7 +823,7 @@ - + C&onnect C&onectar @@ -877,6 +877,16 @@ &Clear All Stored Solo and Mute Settings + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + E&xit @@ -1037,22 +1047,17 @@ Selecione Arquivo de Configuraçao de Canal - + user usuário - + users usuários - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect Opted by Desligar instead of Desconectar to keep same keyboard shortcut Desl&igar @@ -1752,19 +1757,16 @@ Atraso do buffer: - The selected audio device could not be used because of the following error: - O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - The previous driver will be selected. - O driver anterior será selecionado. + O driver anterior será selecionado. - Ok - Ok + Ok @@ -1847,53 +1849,53 @@ Auto - + Local Local - + Server Servidor - - + + Size Tamanho - + Misc Outras Config - + Audio Channels Canais de Áudio - + Audio Quality Qualidade de Áudio - + New Client Level Nível de Novo Cliente - + Skin Aparência - + Language Idioma - + % % @@ -1906,7 +1908,7 @@ Mostrar Níveis de Canais - + Custom Central Server Address: Endereço do Servidor Central Personalizado: @@ -1915,24 +1917,24 @@ Endereço do Servidor Central: - + Audio Stream Rate Taxa de Transmissão de Áudio - - - + + + val val - + Ping Time Latência da Ligação - + Overall Delay Latência Geral @@ -3249,103 +3251,104 @@ O servidor Jack foi desligado. Este programa requer um servidor Jack para ser executado. Tente reiniciar o programa para resolver o problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A entrada do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A saída do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + A taxa de amostragem (sample rate) de %1 Hz do dispositivo de entrada de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Aplicativos-> Utilitários e tente definir uma taxa de amostragem de %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - A taxa de amostragem (sample rate) de %1 Hz do dispositivo de entrada de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Aplicativos-> Utilitários e tente definir uma taxa de amostragem de %2 Hz. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. A taxa de amostragem (sample rate) de %1 Hz do dispositivo de saída de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Aplicativos-> Utilitários e tente definir uma taxa de amostragem de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. O formato do fluxo de entrada de áudio para este dispositivo de áudio não é compatível com este programa. - + The audio output stream format for this audio device is not compatible with this software. O formato do fluxo de saída de áudio para este dispositivo de áudio não é compatível com este programa. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Os tamanhos de buffer do dispositivo de áudio de entrada e saída atual não podem ser definidos para um valor comum. Por favor, escolha outros dispositivos de áudio de entrada/saída nas configurações do seu sistema. - + The audio driver could not be initialized. O driver de áudio não pôde ser inicializado. - + The audio device does not support the required sample rate. The required sample rate is: O dispositivo de áudio não suporta a taxa de amostragem (sample rate) necessária. A taxa de amostragem necessária é: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to O dispositivo de áudio não suporta definir a taxa de amostragem (sample rate) necessária. Este erro pode ocorrer se você tiver uma interface de áudio como o Roland UA-25EX, onde se define a taxa de amostragem através de um interruptor de hardware no dispositivo de áudio. Se for esse o caso, altere a taxa de amostragem para - + Hz on the device and restart the Hz no dispositivo e reinicie o cliente - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: O dispositivo de áudio não suporta o número necessário de canais. O número necessário de canais para entrada e saída é: - - + + Required audio sample format not available. Formato de amostra de áudio necessário não disponível. - + No ASIO audio device (driver) found. Nenhum dispositivo de áudio ASIO (driver) encontrado. - + The O programa - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. requer que a interface de áudio de baixa latência ASIO funcione corretamente. Esta não é uma interface de áudio padrão do Windows e, portanto, é necessário um driver de áudio especial. Ou a sua placa de som possui um driver ASIO nativo (recomendado), ou pode usar drivers alternativos, como o driver ASIO4All. @@ -3362,42 +3365,54 @@ Seleção de dispositivo inválida. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - As propriedades do driver de áudio foram alteradas para um estado incompatível com este programa. O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + As propriedades do driver de áudio foram alteradas para um estado incompatível com este programa. O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - Please restart the software. - Por favor reinicie o programa. + Por favor reinicie o programa. - Close - Fechar + Fechar + + + + The selected audio device could not be used because of the following error: + O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + + + + The previous driver will be selected. + O driver anterior será selecionado. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Nenhum dispositivo de áudio (driver) - + audio device (driver) found. utilizável encontrado. - + In the following there is a list of all available drivers with the associated error message: Abaixo uma lista de todos os drivers disponíveis com a mensagem de erro associada: - + Do you want to open the ASIO driver setups? Deseja abrir as configurações do driver ASIO? - + could not be started because of audio interface issues. não pôde ser iniciado devido a problemas na interface de áudio. @@ -3423,7 +3438,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Para mais informações, use O que é isto (menu Ajuda, botão direito do mouse ou Shift + F1) diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 4aed4ffb49..0b09ef8b0c 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -821,7 +821,7 @@ - + C&onnect &Ligar @@ -875,6 +875,16 @@ &Clear All Stored Solo and Mute Settings + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + E&xit @@ -1031,22 +1041,17 @@ Selecione o ficheiro de configuração da mistura - + user utilizador - + users utilizadores - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect Desl&igar @@ -1745,19 +1750,16 @@ Atraso do buffer: - The selected audio device could not be used because of the following error: - O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - The previous driver will be selected. - O driver anterior será selecionado. + O driver anterior será selecionado. - Ok - Ok + Ok @@ -1840,53 +1842,53 @@ Auto - + Local Local - + Server Servidor - - + + Size Tamanho - + Misc Outras Config. - + Audio Channels Canais de Áudio - + Audio Quality Qualidade de Áudio - + New Client Level Nível de Novo Cliente - + Skin Tema - + Language Linguagem - + % % @@ -1899,7 +1901,7 @@ Mostrar Níveis de Canais - + Custom Central Server Address: Endereço do Servidor Central Personalizado: @@ -1908,24 +1910,24 @@ Endereço do Servidor Central: - + Audio Stream Rate Taxa de Transmissão de Áudio - - - + + + val val - + Ping Time Latência da Ligação - + Overall Delay Latência Geral @@ -3242,103 +3244,104 @@ O servidor Jack foi desligado. Este programa requer um servidor Jack para ser executado. Tente reiniciar o programa para resolver o problema. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A entrada do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. A saída do CoreAudio falhou na chamada AudioHardwareGetProperty. Parece que nenhuma placa de som está disponível no sistema. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. - + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + A taxa de amostragem (sample rate) de %1 Hz do dispositivo de entrada de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Applications-> Utilities e tente definir uma taxa de amostragem de %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - A taxa de amostragem (sample rate) de %1 Hz do dispositivo de entrada de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Applications-> Utilities e tente definir uma taxa de amostragem de %2 Hz. + + The audio input device is no longer available. + - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. A taxa de amostragem (sample rate) de %1 Hz do dispositivo de saída de áudio atual não é suportada. Por favor, abra o Audio-MIDI-Setup em Applications-> Utilities e tente definir uma taxa de amostragem de %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. O formato do fluxo de entrada de áudio para este dispositivo de áudio não é compatível com este programa. - + The audio output stream format for this audio device is not compatible with this software. O formato do fluxo de saída de áudio para este dispositivo de áudio não é compatível com este programa. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Os tamanhos de buffer do dispositivo de áudio de entrada e saída atual não podem ser definidos para um valor comum. Por favor, escolha outros dispositivos de áudio de entrada/saída nas configurações do seu sistema. - + The audio driver could not be initialized. O driver de áudio não pôde ser inicializado. - + The audio device does not support the required sample rate. The required sample rate is: O dispositivo de áudio não suporta a taxa de amostragem (sample rate) necessária. A taxa de amostragem necessária é: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to O dispositivo de áudio não suporta definir a taxa de amostragem (sample rate) necessária. Este erro pode ocorrer se você tiver uma interface de áudio como o Roland UA-25EX, onde se define a taxa de amostragem através de um interruptor de hardware no dispositivo de áudio. Se for esse o caso, altere a taxa de amostragem para - + Hz on the device and restart the Hz no dispositivo e reinicie o cliente - + software. . - + The audio device does not support the required number of channels. The required number of channels for input and output is: O dispositivo de áudio não suporta o número necessário de canais. O número necessário de canais para entrada e saída é: - - + + Required audio sample format not available. Formato de amostra de áudio necessário não disponível. - + No ASIO audio device (driver) found. Nenhum dispositivo de áudio ASIO (driver) encontrado. - + The O programa - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. requer que a interface de áudio de baixa latência ASIO funcione corretamente. Esta não é uma interface de áudio padrão do Windows e, portanto, é necessário um driver de áudio especial. Ou a sua placa de som possui um driver ASIO nativo (recomendado), ou pode usar drivers alternativos, como o driver ASIO4All. @@ -3355,42 +3358,54 @@ Seleção de dispositivo inválida. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - As propriedades do driver de áudio foram alteradas para um estado incompatível com este programa. O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + As propriedades do driver de áudio foram alteradas para um estado incompatível com este programa. O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: - Please restart the software. - Por favor reinicie o programa. + Por favor reinicie o programa. - Close - Fechar + Fechar + + + + The selected audio device could not be used because of the following error: + O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + + + + The previous driver will be selected. + O driver anterior será selecionado. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Nenhum dispositivo de áudio (driver) - + audio device (driver) found. utilizável encontrado. - + In the following there is a list of all available drivers with the associated error message: De seguida verá uma lista de todos os drivers disponíveis com a mensagem de erro associada: - + Do you want to open the ASIO driver setups? Deseja abrir as configurações do driver ASIO? - + could not be started because of audio interface issues. não pôde ser iniciado devido a problemas na interface de áudio. @@ -3416,7 +3431,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Para mais informações, use O que é isto (menu Ajuda, botão direito do rato ou Shift + F1) diff --git a/src/res/translation/translation_sk_SK.ts b/src/res/translation/translation_sk_SK.ts index c673941a96..9f2005fdc6 100644 --- a/src/res/translation/translation_sk_SK.ts +++ b/src/res/translation/translation_sk_SK.ts @@ -713,7 +713,7 @@ - + C&onnect &Pripojiť @@ -782,6 +782,16 @@ Set All Faders to New Client &Level + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Ok + E&xit @@ -843,22 +853,17 @@ Vyberte súbor s nastavením kanálov - + user používateľ - + users používatelia - - The soundcard device does not work correctly. Please check the device selection and the driver settings. - - - - + D&isconnect O&dpojiť @@ -1413,19 +1418,16 @@ Oneskorenie buffera: - The selected audio device could not be used because of the following error: - Vybrané audio zariadenie nie je možné použiť kvôli nasledujúcej chybe: + Vybrané audio zariadenie nie je možné použiť kvôli nasledujúcej chybe: - The previous driver will be selected. - Bude vybraný predchádzajúci ovládač. + Bude vybraný predchádzajúci ovládač. - Ok - Ok + Ok @@ -1508,53 +1510,53 @@ Automaticky - + Local Lokálny - + Server Server - - + + Size Veľkosť - + Misc Rôzne - + Audio Channels Audio kanály - + Audio Quality Audio kvalita - + New Client Level Úroveň nového klienta - + Skin Vzhľad - + Language Jazyk - + % % @@ -1563,29 +1565,29 @@ Zobraziť úrovne kanálov - + Custom Central Server Address: Adresa vlastného centrálneho servera: - + Audio Stream Rate Rýchlosť streamovania zvuku - - - + + + val hodn - + Ping Time Čas odpovede - + Overall Delay Celkové oneskorenie @@ -2743,103 +2745,104 @@ Server Jack bol vypnutý. Tento program vyžaduje, aby bol server Jack spustený. Pokúste sa reštartovať tento program a vyriešiť tak tento problém. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - - The previously selected audio device is no longer available. The system default audio device will be selected instead. + + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - - Current audio input device is no longer available. + + + The current selected audio device is no longer present in the system. - - Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. + + The audio input device is no longer available. - - Current audio output device is no longer available. + + The audio output device is no longer available. - + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. - + The audio output stream format for this audio device is not compatible with this software. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. - + The audio driver could not be initialized. Audio ovládač sa nepodarilo inicializovať. - + The audio device does not support the required sample rate. The required sample rate is: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to - + Hz on the device and restart the - + software. - + The audio device does not support the required number of channels. The required number of channels for input and output is: - - + + Required audio sample format not available. - + No ASIO audio device (driver) found. - + The - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. @@ -2851,42 +2854,50 @@ Neplatný výber zariadenia. - - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - - - - Please restart the software. - Prosím, reštartujte tento program. + Prosím, reštartujte tento program. - Close - Zavrieť + Zavrieť + + + + The selected audio device could not be used because of the following error: + Vybrané audio zariadenie nie je možné použiť kvôli nasledujúcej chybe: + + + + The previous driver will be selected. + Bude vybraný predchádzajúci ovládač. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Nebolo nájdené - + audio device (driver) found. žiadne zvukové zariadenie (ovládač). - + In the following there is a list of all available drivers with the associated error message: - + Do you want to open the ASIO driver setups? - + could not be started because of audio interface issues. @@ -2912,7 +2923,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) Pre získanie viac informácii, použite "Čo je toto?" (ponuka pomocníka, pravé tlačidlo myši alebo Shift+F1) diff --git a/src/res/translation/translation_sv_SE.ts b/src/res/translation/translation_sv_SE.ts index ae9ff7b493..dadfd19f4f 100644 --- a/src/res/translation/translation_sv_SE.ts +++ b/src/res/translation/translation_sv_SE.ts @@ -726,7 +726,7 @@ - + C&onnect &Anslut @@ -790,6 +790,16 @@ &Clear All Stored Solo and Mute Settings &Rensa alla lagrade solo och tystade inställningar + + + The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + + + + + Ok + Okej + &Clear All Stored Solo Settings &Rensa alla lagrade soloinställningar @@ -860,22 +870,21 @@ Välj kanalinställningsfil - + user användare - + users användare - The soundcard device does not work correctly. Please check the device selection and the driver settings. - Ljudkortet fungerar inte som det ska. Kontrollera enhetsvalet och drivrutinsinställningarna. + Ljudkortet fungerar inte som det ska. Kontrollera enhetsvalet och drivrutinsinställningarna. - + D&isconnect Koppla &ner @@ -1416,19 +1425,16 @@ Buffertfördröjning: - The selected audio device could not be used because of the following error: - Den valda ljudenheten kunde inte användas på grund av följande fel: + Den valda ljudenheten kunde inte användas på grund av följande fel: - The previous driver will be selected. - Den föregående drivrutinen kommer att väljas. + Den föregående drivrutinen kommer att väljas. - Ok - Okej + Okej @@ -1541,53 +1547,53 @@ Automatiskt - + Local Lokalt - + Server Server - - + + Size Nivå - + Misc Blandade inställningar - + Audio Channels Ljudkanaler - + Audio Quality Ljudkvalitet - + New Client Level Ny klientnivå - + Skin Skal - + Language Språk - + % % @@ -1596,29 +1602,29 @@ Visa kanalnivåer - + Custom Central Server Address: Egen serveradress: - + Audio Stream Rate Ljudströmshastighet - - - + + + val val - + Ping Time Pingtid - + Overall Delay Total fördröjning @@ -2860,103 +2866,116 @@ Jack-servern stängdes av. Denna programvara kräver att en Jack-server körs. Försök starta om programvaran för att lösa problemet. - + CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio-ingång AudioHardwareGetProperty misslyckades. Det verkar som om det inte finns något ljudkort i systemet. - + CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. CoreAudio-utgång AudioHardwareGetProperty misslyckades. Det verkar som om det inte finns något ljudkort i systemet. - The previously selected audio device is no longer available. The system default audio device will be selected instead. - Den tidigare valda ljudenheten är inte längre tillgänglig. Systemets standardljudenhet har valts i stället. + Den tidigare valda ljudenheten är inte längre tillgänglig. Systemets standardljudenhet har valts i stället. - Current audio input device is no longer available. - Nuvarande ljudingångsenhet är inte längre tillgänglig. + Nuvarande ljudingångsenhet är inte längre tillgänglig. - + Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Nuvarande systemljudingångsenhetens samplingsfrekvens för %1 Hz stöds inte. Öppna Audio-MIDI-installationen i Applications->Utilities och försök att ställa in en samplingsfrekvens på %2 Hz. - Current audio output device is no longer available. - Nuvarande ljudutgångsenhet är inte längre tillgänglig. + Nuvarande ljudutgångsenhet är inte längre tillgänglig. + + + + + The current selected audio device is no longer present in the system. + - + + The audio input device is no longer available. + + + + + The audio output device is no longer available. + + + + Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. Nuvarande systemljudutgångsenhetens samplingsfrekvens för %1 Hz stöds inte. Öppna Audio-MIDI-installationen i Applications->Utilities och försök att ställa in en samplingshastighet på %2 Hz. - + The audio input stream format for this audio device is not compatible with this software. Ljudingångsströmformatet för denna ljudenhet är inte kompatibelt med den här programvaran. - + The audio output stream format for this audio device is not compatible with this software. Ljudutmatningsströmformatet för denna ljudenhet är inte kompatibelt med den här programvaran. - + The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. Buffertstorlekarna för den aktuella ingångs- och utgångsljudenheten kan inte ställas in på ett gemensamt värde. Välj andra input/output-ljudenheter i systeminställningarna. - + The audio driver could not be initialized. Ljuddrivrutinen kunde inte initialiseras. - + The audio device does not support the required sample rate. The required sample rate is: Ljudenheten stöder inte den valda samplingsfrekvensen. Den valda provhastigheten är: - + The audio device does not support setting the required sampling rate. This error can happen if you have an audio interface like the Roland UA-25EX where you set the sample rate with a hardware switch on the audio device. If this is the case, please change the sample rate to Ljudenheten stöder inte inställning av önskad samplingsfrekvens. Det här felet kan hända om du har ett ljudgränssnitt som Roland UA-25EX där du ställer in samtalstakten med en hårdvaruskontakt på ljudenheten. Om detta är fallet, ändra provhastigheten till - + Hz on the device and restart the Hz på enheten och starta om - + software. applikationen. - + The audio device does not support the required number of channels. The required number of channels for input and output is: Ljudenheten stöder inte det valda antalet kanaler. Det valda antalet kanaler för in- och utmatning är: - - + + Required audio sample format not available. Nödvändigt ljudformat är inte tillgängligt. - + No ASIO audio device (driver) found. Ingen ASIO-ljudenhet (drivrutin) hittades. - + The Programvaran - + software requires the low latency audio interface ASIO to work properly. This is not a standard Windows audio interface and therefore a special audio driver is required. Either your sound card has a native ASIO driver (which is recommended) or you might want to use alternative drivers like the ASIO4All driver. kräver det låga latentljudgränssnittet ASIO för att fungera korrekt. Detta är inte ett vanligt Windows ljudgränssnitt och därför krävs en speciell ljuddrivrutin. Antingen har ditt ljudkort en inbyggd ASIO-drivrutin (som rekommenderas) eller så kanske du vill använda alternativa drivrutiner som ASIO4All-drivrutinen. @@ -2968,42 +2987,54 @@ Ogiltigt enhetsval. - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - Ljuddrivrutinens egenskaper har ändrats till ett tillstånd som inte är kompatibelt med den här programvaran. Den valda ljudenheten kunde inte användas på grund av följande fel: + Ljuddrivrutinens egenskaper har ändrats till ett tillstånd som inte är kompatibelt med den här programvaran. Den valda ljudenheten kunde inte användas på grund av följande fel: - Please restart the software. - Starta om programvaran. + Starta om programvaran. - Close - Stäng + Stäng + + + + The selected audio device could not be used because of the following error: + Den valda ljudenheten kunde inte användas på grund av följande fel: + + + + The previous driver will be selected. + Den föregående drivrutinen kommer att väljas. + + + + The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. + - + No usable Ingen användbar - + audio device (driver) found. ljudenhet (drivrutin) hittades. - + In the following there is a list of all available drivers with the associated error message: I det följande finns en lista över alla tillgängliga drivrutiner med tillhörande felmeddelande: - + Do you want to open the ASIO driver setups? Vill du öppna ASIO-drivrutinens inställningar? - + could not be started because of audio interface issues. kunde inte startas på grund av problem med ljudgränssnittet. @@ -3029,7 +3060,7 @@ global - + For more information use the What's This help (help menu, right mouse button or Shift+F1) För mer information använd hjälpen (hjälpmeny, höger musknapp eller Shift + F1) From ddb0fdf7a8f1c60a038e21bc52ebf51040d36c80 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 10:04:45 +0100 Subject: [PATCH 73/92] update warning text according to discussion in 5fb7f61 --- src/clientdlg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index c5096aa0df..fd9e2f4ff6 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1120,8 +1120,8 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() // it is trying to connect the server which does not help to solve the problem (#129)) if ( !pClient->IsCallbackEntered() ) { - QMessageBox::warning ( this, APP_NAME, tr ( "The soundcard device does not work correctly. " - "Please open the settings and check the device selection and the driver settings." ) ); + QMessageBox::warning ( this, APP_NAME, tr ( "Your soundcard does not work correctly. " + "Please open the settings dialog and check the device selection and the driver settings." ) ); } } From ee3d405dfc3dc5cee6c6f6ec6d0660678faf6460 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 10:12:08 +0100 Subject: [PATCH 74/92] update --- ChangeLog | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 87e53f87fb..3a6ca1bc1b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,7 +14,10 @@ - bug fix: sliders move by themselves if fader groups are used on reconnect (#611) -- bug fix: do not reset sound card channel selection on a device property change +- bug fix: do not reset sound card channel selection on a device property change (#727) + +- bug fix: on MacOS if an audio device is no longer available, show a warning + rather than switching to default automatically (#727) - bug fix: compiling Jamulus 3.6.1 is failing on Debian 9 Linode (#736) From b16738807bcf62695dc50d83115b0c445c4260e6 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 12:30:05 +0100 Subject: [PATCH 75/92] fix in the warning message --- src/clientdlg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index fd9e2f4ff6..4daeda7ccd 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -1120,7 +1120,7 @@ void CClientDlg::OnTimerCheckAudioDeviceOk() // it is trying to connect the server which does not help to solve the problem (#129)) if ( !pClient->IsCallbackEntered() ) { - QMessageBox::warning ( this, APP_NAME, tr ( "Your soundcard does not work correctly. " + QMessageBox::warning ( this, APP_NAME, tr ( "Your sound card is not working correctly. " "Please open the settings dialog and check the device selection and the driver settings." ) ); } } From d8e5e685ed0b2dad07a6009ae5955fc3a8d1f385 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 16:09:54 +0100 Subject: [PATCH 76/92] "sort users" instead of "sort channel users" (#759) --- src/clientdlg.cpp | 10 +++++----- src/res/translation/translation_de_DE.ts | 12 ++++++------ src/res/translation/translation_es_ES.ts | 10 +++++----- src/res/translation/translation_fr_FR.ts | 12 ++++++------ src/res/translation/translation_it_IT.ts | 12 ++++++------ src/res/translation/translation_nl_NL.ts | 10 +++++----- src/res/translation/translation_pl_PL.ts | 10 +++++----- src/res/translation/translation_pt_BR.ts | 12 ++++++------ src/res/translation/translation_pt_PT.ts | 12 ++++++------ src/res/translation/translation_sk_SK.ts | 10 +++++----- src/res/translation/translation_sv_SE.ts | 10 +++++----- 11 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 4daeda7ccd..72725f78d9 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -280,19 +280,19 @@ CClientDlg::CClientDlg ( CClient* pNCliP, // Edit menu -------------------------------------------------------------- QMenu* pEditMenu = new QMenu ( tr ( "&Edit" ), this ); - QAction* NoSortAction = pEditMenu->addAction ( tr ( "N&o Channel Sorting" ), this, + QAction* NoSortAction = pEditMenu->addAction ( tr ( "N&o User Sorting" ), this, SLOT ( OnNoSortChannels() ), QKeySequence ( Qt::CTRL + Qt::Key_O ) ); - QAction* ByNameAction = pEditMenu->addAction ( tr ( "Sort Channel Users by &Name" ), this, + QAction* ByNameAction = pEditMenu->addAction ( tr ( "Sort Users by &Name" ), this, SLOT ( OnSortChannelsByName() ), QKeySequence ( Qt::CTRL + Qt::Key_N ) ); - QAction* ByInstrAction = pEditMenu->addAction ( tr ( "Sort Channel Users by &Instrument" ), this, + QAction* ByInstrAction = pEditMenu->addAction ( tr ( "Sort Users by &Instrument" ), this, SLOT ( OnSortChannelsByInstrument() ), QKeySequence ( Qt::CTRL + Qt::Key_I ) ); - QAction* ByGroupAction = pEditMenu->addAction ( tr ( "Sort Channel Users by &Group" ), this, + QAction* ByGroupAction = pEditMenu->addAction ( tr ( "Sort Users by &Group" ), this, SLOT ( OnSortChannelsByGroupID() ), QKeySequence ( Qt::CTRL + Qt::Key_G ) ); - QAction* ByCityAction = pEditMenu->addAction ( tr ( "Sort Channel Users by &City" ), this, + QAction* ByCityAction = pEditMenu->addAction ( tr ( "Sort Users by &City" ), this, SLOT ( OnSortChannelsByCity() ), QKeySequence ( Qt::CTRL + Qt::Key_T ) ); // the sorting menu entries shall be checkable and exclusive diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 4316eb3cc3..52aa8a0c79 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -884,7 +884,7 @@ B&earbeiten - &Sort Channel Users by Name + &Sort Users by Name &Sortiere Kanäle nach Namen @@ -989,27 +989,27 @@ - N&o Channel Sorting + N&o User Sorting Keine Kanals&ortierung - Sort Channel Users by &Name + Sort Users by &Name Sortiere die Kanäle nach dem &Namen - Sort Channel Users by &Instrument + Sort Users by &Instrument Sortiere die Kanäle nach dem &Instrument - Sort Channel Users by &Group + Sort Users by &Group Sortiere die Kanäle nach der &Gruppe - Sort Channel Users by &City + Sort Users by &City Sortiere die Kanäle nach der &Stadt diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index c8a56529ce..f52e84380e 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -905,7 +905,7 @@ - Sort Channel Users by &Group + Sort Users by &Group Ordenar Usuarios de Canal por &Grupo @@ -1010,22 +1010,22 @@ - N&o Channel Sorting + N&o User Sorting N&o Ordenar Canales - Sort Channel Users by &Name + Sort Users by &Name Ordenar Canales por &Nombre - Sort Channel Users by &Instrument + Sort Users by &Instrument Ordenar Canales por &Instrumento - Sort Channel Users by &City + Sort Users by &City Ordenar Canales por &Ciudad diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index d85020fe98..f39bf87859 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -900,7 +900,7 @@ Édit&er - &Sort Channel Users by Name + &Sort Users by Name &Trier les utilisateurs du canal par nom @@ -1005,27 +1005,27 @@ - N&o Channel Sorting + N&o User Sorting Pas de tri des canaux (&o) - Sort Channel Users by &Name + Sort Users by &Name Trier les utilisateurs du canal par &nom - Sort Channel Users by &Instrument + Sort Users by &Instrument Trier les utilisateurs du canal par &instrument - Sort Channel Users by &Group + Sort Users by &Group Trier les utilisateurs du canal par &groupe - Sort Channel Users by &City + Sort Users by &City Trier les utilisateurs du &canal par ville diff --git a/src/res/translation/translation_it_IT.ts b/src/res/translation/translation_it_IT.ts index 920a274547..77514c2ae2 100644 --- a/src/res/translation/translation_it_IT.ts +++ b/src/res/translation/translation_it_IT.ts @@ -927,12 +927,12 @@ - N&o Channel Sorting + N&o User Sorting N&on Riordinare i Canali - Sort Channel Users by &City + Sort Users by &City Ordina i Canali per &Città di provenienza @@ -986,21 +986,21 @@ - Sort Channel Users by &Name + Sort Users by &Name Ordina canali per &Nome - Sort Channel Users by &Instrument + Sort Users by &Instrument Ordina canali per &Strumento - Sort Channel Users by &Group + Sort Users by &Group Ordina Canali per Nome &Utente - &Sort Channel Users by Name + &Sort Users by Name &Canali in ordine Alfabetico diff --git a/src/res/translation/translation_nl_NL.ts b/src/res/translation/translation_nl_NL.ts index 32a759a37d..b82e2138cb 100644 --- a/src/res/translation/translation_nl_NL.ts +++ b/src/res/translation/translation_nl_NL.ts @@ -919,12 +919,12 @@ - N&o Channel Sorting + N&o User Sorting Kanalen Niet S&orteren - Sort Channel Users by &City + Sort Users by &City Sorteer muzikanten op &Stad @@ -978,17 +978,17 @@ - Sort Channel Users by &Name + Sort Users by &Name Sorteer muzikanten op &Naam - Sort Channel Users by &Instrument + Sort Users by &Instrument Sorteer muzikanten op &Instrument - Sort Channel Users by &Group + Sort Users by &Group Sorteer muzikanten op &Groep diff --git a/src/res/translation/translation_pl_PL.ts b/src/res/translation/translation_pl_PL.ts index 2881da0924..690092e24e 100644 --- a/src/res/translation/translation_pl_PL.ts +++ b/src/res/translation/translation_pl_PL.ts @@ -769,27 +769,27 @@ - N&o Channel Sorting + N&o User Sorting &Bez sortowania kanałów - Sort Channel Users by &Name + Sort Users by &Name Sortuj kanały według &nazwy - Sort Channel Users by &Instrument + Sort Users by &Instrument Sortuj kanały według &instrumentu - Sort Channel Users by &Group + Sort Users by &Group Sortuj kanały według &grupy - Sort Channel Users by &City + Sort Users by &City Sortuj kanały według &miasta diff --git a/src/res/translation/translation_pt_BR.ts b/src/res/translation/translation_pt_BR.ts index 9379635467..3d1f305863 100644 --- a/src/res/translation/translation_pt_BR.ts +++ b/src/res/translation/translation_pt_BR.ts @@ -898,7 +898,7 @@ &Editar - &Sort Channel Users by Name + &Sort Users by Name Ordenar os Canais por &Nome... @@ -1003,27 +1003,27 @@ - N&o Channel Sorting + N&o User Sorting S&em Ordenação de Canais - Sort Channel Users by &Name + Sort Users by &Name Ordenar os Canais por &Nome - Sort Channel Users by &Instrument + Sort Users by &Instrument Ordenar os Canais por &Instrumento - Sort Channel Users by &Group + Sort Users by &Group Ordenar os Canais por &Grupo - Sort Channel Users by &City + Sort Users by &City Ordenar os Canais por &Cidade diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 0b09ef8b0c..ddfe21c21a 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -896,7 +896,7 @@ &Editar - &Sort Channel Users by Name + &Sort Users by Name Ordenar os Canais por &Nome... @@ -1001,27 +1001,27 @@ - N&o Channel Sorting + N&o User Sorting - Sort Channel Users by &Name + Sort Users by &Name Ordenar Utilizadores por &Nome - Sort Channel Users by &Instrument + Sort Users by &Instrument Ordenar canais por &Instrumento - Sort Channel Users by &Group + Sort Users by &Group Ordenar canais por &Grupo - Sort Channel Users by &City + Sort Users by &City diff --git a/src/res/translation/translation_sk_SK.ts b/src/res/translation/translation_sk_SK.ts index 9f2005fdc6..160dcf9cf8 100644 --- a/src/res/translation/translation_sk_SK.ts +++ b/src/res/translation/translation_sk_SK.ts @@ -759,12 +759,12 @@ - N&o Channel Sorting + N&o User Sorting - Sort Channel Users by &City + Sort Users by &City @@ -814,17 +814,17 @@ - Sort Channel Users by &Name + Sort Users by &Name Triediť používateľov kanálov podľa &mena - Sort Channel Users by &Instrument + Sort Users by &Instrument Triediť používateľov kanálov podľa &nástroja - Sort Channel Users by &Group + Sort Users by &Group Triediť používateľov kanálov podľa &skupiny diff --git a/src/res/translation/translation_sv_SE.ts b/src/res/translation/translation_sv_SE.ts index dadfd19f4f..483e285b28 100644 --- a/src/res/translation/translation_sv_SE.ts +++ b/src/res/translation/translation_sv_SE.ts @@ -772,12 +772,12 @@ - N&o Channel Sorting + N&o User Sorting I&ngen kanalstortering - Sort Channel Users by &City + Sort Users by &City Sortera användarna efter S&tad @@ -831,17 +831,17 @@ - Sort Channel Users by &Name + Sort Users by &Name Sortera kanalanvändare efter &Namn - Sort Channel Users by &Instrument + Sort Users by &Instrument Sortera kanalanvändare efter &Instrument - Sort Channel Users by &Group + Sort Users by &Group Sortera kanalanvändare efter &Grupp From 696a34dd2eccb7ec1cc73e44f2af93558217b836 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 16:10:51 +0100 Subject: [PATCH 77/92] update translation files --- src/res/translation/translation_de_DE.qm | Bin 106461 -> 104329 bytes src/res/translation/translation_de_DE.ts | 2 +- src/res/translation/translation_es_ES.qm | Bin 102425 -> 101603 bytes src/res/translation/translation_es_ES.ts | 10 +++++----- src/res/translation/translation_fr_FR.qm | Bin 109387 -> 108571 bytes src/res/translation/translation_fr_FR.ts | 10 +++++----- src/res/translation/translation_it_IT.qm | Bin 104216 -> 103414 bytes src/res/translation/translation_it_IT.ts | 10 +++++----- src/res/translation/translation_nl_NL.qm | Bin 101555 -> 100723 bytes src/res/translation/translation_nl_NL.ts | 10 +++++----- src/res/translation/translation_pl_PL.qm | Bin 102358 -> 101616 bytes src/res/translation/translation_pl_PL.ts | 10 +++++----- src/res/translation/translation_pt_BR.qm | Bin 105037 -> 104235 bytes src/res/translation/translation_pt_BR.ts | 10 +++++----- src/res/translation/translation_pt_PT.qm | Bin 102691 -> 101900 bytes src/res/translation/translation_pt_PT.ts | 10 +++++----- src/res/translation/translation_sk_SK.qm | Bin 43151 -> 42910 bytes src/res/translation/translation_sk_SK.ts | 10 +++++----- src/res/translation/translation_sv_SE.qm | Bin 98628 -> 98482 bytes src/res/translation/translation_sv_SE.ts | 2 +- 20 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index 788aef0ab21c6dbafa1e58e4d2ba243b54ff450a..97656c4eb73ca660e6ddf44df56400f2c50cf3fd 100644 GIT binary patch delta 4294 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 iszH}wG{qZr6iAcBKHw|n&2;wo - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. diff --git a/src/res/translation/translation_es_ES.qm b/src/res/translation/translation_es_ES.qm index 76498cf09fa71958b4c352421ebdc5cc39f95a7c..67175dc89c10ece74316549f84828545a2751432 100644 GIT binary patch delta 4201 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 All Stored Solo and Mute Settings - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -1058,6 +1053,11 @@ users usuarios + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index d67c720d47e6c9e6fa1b882c5ef4be7ca0bfbe87..f2e7a77f2957645602739a221770f02a1ef63e9b 100644 GIT binary patch delta 4480 zcmX9?d0b8T8-Bj$p5@+q?mf5CqRqafs1ReD?2_uDL{cfTv{WElHyhOF6!vCGi>-fo}%c+TnGbH4BUywCf*Z=Jg#uDc|za1FQm0-!l??**YB z;4q0W5C|ArhY9cN@Ub^x5a3)v7z_;N>Tp7fI((W>7y>jj0m2Bt_%3^9gYbfp}Q z0lj@_GJR@ShlyW-umkj#W)@`pbztsX;8{EH8GC`s$KW@n0zNt5|91pTodW*Z3NYO~ z@NaGbOO|E7u{VA11HmT^tk=&FdYFO7HzD*J2<&l!(7yxNm<$MkTj}%!2t)gV844i` z4<)<@A=N<9mYu9_#y1 znj_(H@eJ_8Omygb5YT(UZ}o40HXVNV>G__q7G&*)p}*Hcpk5yOrx}`oiO1j{d!P8R zhks5S*w_I0pYo#nz8EmG7g)PxW-rd(v}hB8x@`rMdn2fv2phEz#$}~IUmFWDek+Wt zk5lo>FlZQ^n^1<3;Z%;t8xZ#W12ADe!W*>)vwDX}u`v*(WywSq@lLTpw7Ng-tU{A!DKw^0TM{lDGLH#iKZ3Z|@;s{rJv<|SM!$)xw6K_$_Hhhy<%m>ZCukE%62z*4gCrn(F8AlZT}W+y(j zdIW|sOn6Iqs2G!5dV;mEWBU7Rh?YWD@991`Gq+;adBPT;*=g3_=NVY*RV=cg5os{i zY*IOx+*r0mX&o{$b8rpVl2EoOimu~&7p&yjpb54E5OV) z+!DlsX{@>2j0h6;ff{a$e<(%xg4;Tu`fkR3Zdb<~I`wqy(-pWz+_ z?*ogf=AQmd361jQK2DoU7E;)>_JT6E;Xav2v8xif>bbLl`}th;IbYz9d)!yI*TA)7 zDsD?(Ql7g7S+tW%+(!qldZrS~-+--Hqq2ET3XW*3a{ZSAAM2-Td^jE~J6Pot zhHBbSAE3u7Rq9PTZ_Gi}k^!a*z^tpP)w_QNo0q8CKfNJ7Ho71ADK@zo|Mcd_)x1Y z`iq~n<2K;w!Ou>NCT)YCy?z>%uqi*+_xgs%GbfM$TuE%E@^xW0n#*MVTR*@E9U@=U%;7-FDa|2sw)YMx6P z-P=MK&!vKmOcUaNRLHIKg@g_+G|ZfYNwwxOvX3ysdkvXDfiUOhMBsY1kox92SZ`-x zaaoOA;=Psv#G37p_OtGMQF~_wNhe+Edq$Pp}{p1mU}9CNL^V6g+BZyq*??G!tFi zE*6C?Mj&UGsD40|Vkbno<29huWwCyWfhu=IbUaKMd>tzWwx^P}&lQIUT>z9AG4eXS zu;&^v+PW23^JQX;-7~V^4&qOuikPV_5cfozZ~qqF6SBwCb2(L8cEAPwt8XN{)!9?@*vkM~D?ko-~lx zidD<(Xv{AVpEn}PcN`Jly`uyDT8i(FM^Ong#7|B>G#8qQpBqw%j2p!NTs*-XE=X({ z&Dp?o$;4IB3$u4gcE8dC>$XZR1CzmK?w4HqlW4{?mpWF@BER}385Aq63XuxHTwBbwx>cT?l=o(t5Z1bcO zcPaD1gQSXdDv9ks(t}8HYFk-)aHue z?XMo@NcOPnkb3;-a#|s-S&)gz>Lkl^3)D$*=V-I)r%t*)fRL$Yzs&@^)avvB)nq?V zFPiK?D}ar9={8EtB+XDSEjj{>uu(6YPBo7xRZj&FOxM&*=yixvZh|^X<&UuXdExBq#E06+y@(h z8A~-kT2aRNi!{DY#PHG;ntse0CZ_A93IF0tJH-Rd==bLN$|ET8Q?v%mk-CC}XKUj3Gw&^+= z2|a?fUdQNw4zINR&(RCtpQ*!|D(%n>r6jf&+SqZAfmAnb>_@6;)(Pzxf1donLpy#@ z1@(87cKmZXNJ!L<|MHobJEu(?ahtSc(oTH56Rgc)?N9zDifEFXcEfVgK-faS zTd{`%(>>Rox2DpBRco)OQ(!F)Ywzx>4als0?oA1WCum=2sB2=qWZtxkjA2-?tX2h( z!#T-T%{;*p-^pI}F902v%0C261>QQ;VNE~TuV)Hax>gRUPi<7tQch}L3cO60lWN!2 z9@pih`}CZDs64Y_4VbE#JnKaWz^vtE>7xh=<>k-G>H|yURo*1VHg{yx`hKgZ=A-2e z+l;`}i}I%KAINw-EXZ`bbsrv`*BQ z&%dFP-7AnUJy$5;Ll$HMD&^aAwp0IimhbHTliG2QTp8d8=2~B_9Mp?M9%r&#Flnd! ziGKyAzoxVKKnBvsRcBko(c)dAbDdYK0asmvENa7=^%i6SVY&v@v_8Cz)3thS19bM* zwQfC~5~J|AJasGIzR z4%i!`n{wk4SZbVZz2;F%#8B@RIy7SpnNX&0^S1&mMMZvnK?{5=h5xQs7 zqi9F%yi@l!shC!0MOPh3rOp#A2X0j+WB!ECe+i%J5XZ({G^}q z={3#&=ym#;y(yBUj{0@0-_wqosLvZek^YFftlv70RBg=C@914hTf2{bZ%imyz(#%9 zJ5SQe&lY5fXZ5F!UjRd%ZFO@BrD=r4?-`;pc9s+T0@S%LZ&(R4qjtNv{lBQVfG z|KWfUtgVwG)!3NGt8XX{7heOL7b;{&A85^YRvt>^X#J-uFOrFY z^LfgvC6rO)0_B72Lo%LN<#RzH9pJ5e4W)p(Y&KXAr$t5=Zg4Gkqq*PJ&^TZR9q3{3 zZJI)};JBgZ*>~iKrG~)SB+|Ag3?ohC;mGJ}h*?H>=!{|PALZ0;Cd1t8ooEAkWyn~^ z(LWJp8J0^E0m;v>)*%XPv8&-E4JY*VHJmh&$ohOVT+Q4;JF1uA)=c#vHFV&fDMkL5hkOkhjl#{*2FwGvR+YK8;5qx#XNtcy$H|R zA9L==c#V~@#iT}|Q^!m(>!Y2`ZBN*n)8Y(8Zqc%q%`p4Kdzb^dXp0i!9XX+1$fPOL z%-M-e*--O<2?1t)f~{a{`Can~8G@tbs&vA_y6+VkC-T-sFHQY=7Db(iXkPTF%J!%^ z*fc-aZws?x&2ldfW%k9&7S@OrN9D1}96OYooy*$fdTeKl%#*4jisN>$hur@Gx^y9_T}7<=z>Wda+^@7TxT+bu9904QR-01Nhu=J$w;G-3jlulfRhaycOAYz2PS5}MJoB8V-o5wP`}@{<*IMsd`{Z2~FWeBn?+|L$ z3P2a&-k*ftfL%Oc0N@|eg0o(?;1fr}QNU*vgkyoAJ1sc7YYWzx3C97BiveLWu(xs5 ze236ICSd$jz~MO%oJQZ;wP0K$5OR=KX|f;_PXmh<0Z%)E&)y3>xC;J<48T1X{ExqY zDdWM{d=I9L1OMVC@LlIsFKkVp+#t9w1sk3P;Vatz$yo>^M+19GA^3QJ%}j+5P(ZuS zh7ddg%xV*aNfQV!LCDaNHH8qi2tchjAz5jAa}0U2cQ zvH=+NMFE(mFGigqCZjeZaCsRp!rFpNTw|Wb*_xhYBjjT}FncjV^*zB_-$$6(kqCK? zut|%+Z2U3ZFB*93fJONfh?sj=b@B&bPORr2pw z6uG(pvIW?6;uTmc1@?N42lKg$3sse1)2i@$jxQ0tWV+=550$vmg(6^Vk84MBXv0Ie zN4(+D1U#PD9r*T3RImRE?3*;aXcz=MoNYlCxgKvme+b5nXTnP&R>qjBn+sTXo@wr` zC%!hZHc$3}ITx~lv$q1BE0~Xa4VcRk7FMjMBwqB9MP?-eZD+BRV2Tj>v77)Zoh2vO zDv3NlY|YGLo4}S2XPd`e1_l?hEk_-|#+I<6*0F#*ke!)Gyhs1V&aNI0+!ol`y(M51 zy0IH?PlI(m$L^2&K!Nz1RgWtJ%lW`wE>i#Qp738 zOa)TTb1EHG)1;rcR&Qnk)p49ng*Winmus&j>c0u%Iz31Plh$z_nJWReH{4)>Jm*c^ zkcVzyYIiPVDKQ$okqaF_Asf|&OZdkK*7**X{6`w;!7I*WT1Xo`oxr8P(*pC)a#^6% zQ-RCPo&x-In%n9-fed`k6)dI_O{wH|HK(4`joY==0r=60E7A1@+Ldx8jZ{nyo4LJS zgDIDOvLK7Oz#WPsW*n|?WiKXy`Ca15dl19FZskt6P)ZM*&6&<0H2|t}+{H;dK#9pc z980kZui>8jO`b*d;@%{Yc9a}z!D`06HBm0-W^fIQ76A9nT*C!VpmICc*u4(8v0KJ% z9YIOzY(X|%Artq}#_J&y&%6Lz-Bs4%A2NJ~x2)sOv2=bfNajA(6KqJTEGgI>_-dUj z;}6=<@RKaduM$`gCtJ6BBbaHjY=81VTIiVUb|+dO?H5`7Ur{7SPh|D~q324*@Y3rN z!1=woT(C2}=co9e2Q$R;VcRL73A6cG?#HPl=kX~;B*rei_yuv{lxg4>)`GJ_`0eReNFr|W1&e)v1F3xBs3jD) zFZf+oNkUEa1(pLA2)=lC7_f9RUtG18YDvxSJ4O7dIex!$Iz{FdzyE>@keb9-#jOEs zYb?k#;4crN4WFgAVADtb=4sLvZUcYEoJM$w|I2}RHJs(|-EsoHuHvgtP-!&f@%8V& zqM|Oh6||p7EtWpAAnTnb*!UPoo@WTQU2=e^GlHulWm>QOLfYj@Zlsi7vrdTSGQc8| zgxD{&RMbv|!YmJaYJc`Ze6#FCxC!%mlLxY5Vc{P};E!}6?=j6!8O~Sf+{~=EUgxqZs$^L3#{cc+4v&RM=Hf4wU^Rlm%@7;sS&U-w#AxxNv!T z6X|U`;rbM!G|iy}?^g;R+^G1YXIYSm^}4)D z1S+M}W1{Ks&Tv3oC6erA$vh_>~bS$BTf0xFd836R{DowDV2O?ah zkX;$T6e}srSwXU7CrxXhP{apIbHlEIb!s%PRM?vOD5abmJ%OxF(&`FI_HW-yYd26s zitR0}zgtEf|DCi!9Z2U@k|pvEG18`U4pfz!q$BHT?6Te_ow!Z@j&YVMGAR(&|CR2C zkxbh(O7{;9Axx1TG(DnRA0Rz!JVo1%m1-RwNEChK{McYBs@Sn|^H@$3&o=1({WAd7m){0KYo9|IAA2Cqw0d2j0-^G|Ga^FhD-B9m&P+(emiCXK2*8 zWuw}uBC-a`zf^Lb-=aZiZ(ry zz()Eh+EuQm2)0!?j|rsy*bkBQ{KtHKP+S@wnoi@J;@sDW; zc@Vi<$qn}fo1Uq3%4_Zyb< zr!=Mdl4bEHl$%yi%tOMIh2z@-#iDXo)J;ykOl&5V;zwGRl6?@1)?M>xHtEph2HOlLmWMKCl%G>*z4Kpiidy`|K z-pZ#6s)-p6CKbPn%70={m0adeI@Vs*s}9yoaWP zecPZK*OscL__!*;tqk}(S(VT{&JH`RO1MkU`A$^LcWeR^+Ne^Vj-!@jrCOdj9jwhJ z)rwkD^uS%JHN6{1a7}kq`6Jg*?8mA$6$S!H(W=cu>PcRDSdeKqstQ-qJlxtvwP&yv zEd8wN=x+ik{yo)+p-sTKJF1F3=V@k;R2N@R=fGX9W3wHok168+n z-=Xr$SKagX26L2D_kxB|Q?-t<95BUt)m#2KnC_Iibv?<$NVVF!l%qj>m%78(&AH&H zc34SCisdah%3JNwK(oT@5cTJEt$~4k)jfMAlOu=KekUn6YOB;^D?GvcQ`KSX$Z$Je z9ecDL#lDw1_Mr<9Hc%aR%o8RSR;Hfwm^RqgO`Uk-GFWDadi6tMY)v<{xjT8Hl&f>U z{(^GjA9Y^G<1{4=RUdglA&K3fKFSDdp*}U7vOUsYeJ11<&@owkem`yG<*)vY0hqi< zeNj$=KF@xB6wm zVd~}|)eT`3BHap&G$D`XoLr6e<_=!^;WT+$BBSVr@TlQv)jE!b_pcFYqh zW7Qn3v8V}fuh7ns9i$iN8tvCv^xXI5+OMA%kOKwU^hBCJ`!s4zW}D`+_(QwpJyAOR zU<=MH((c?ap0e~yZP}F^8bCkO-n8it)>)~2Ad%AfP1in6BL*(TXrE`1M^1U#`VJ3B zkUnbP6_?NkeYK4f$e=;nbXJpSY*B~mI-KcF-QHQ((Z7iHYp?TkN~gE-NhaOU^RGxM z_viu^P}cT2rJF|Dj_hl?h~L< zZYtP!YTZd{P8ji(?xcy5ZR8`})tn-r-a+^5T_8}HuY21{3+BP=8v2D&_CMA&6dS?% zi%L?Bjjc-UtsL#`I>QUmh(IEJVi1oc=;_5J*?gjxUFpnTpZeI@(hnN(Fw*6&m_s+k zV+P$AXI?TbwpE+JuJL-W=m?|H5T_p(pJ=X&wkz!yu2QlT^RU<+rL$tYaGKBPi=_X* z%e*$uiG`YfiR)t??rm*ujC0V~|Lgk>v$HiF|8=Eg_L6_EQQFVQTjlm!F3|H%3?do@PFKwivl z{x7Feg-CybS6uvD!{O~)SO#b1iD3FNx!Fnj7_cyR-2&F%-99MJ5HZ)FPc+O;iXexQ zq7C}F@iUU#F#FNc)C{RhcFSatf+-Dn@9S8mYJpI=9 zf8OjIPo_mAN5#bJqY`8084~q#665C>5|d&KbM?^?^9=e(3fW9Uls+k5AE76Ak_`I! f(J_(H`k1-;7-O#YM&`iuxwYGw|6z{;_JsRCI)SL2 diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index f39bf87859..e54c84be91 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -879,11 +879,6 @@ &Clear All Stored Solo and Mute Settings - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -1058,6 +1053,11 @@ users utilisateurs + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_it_IT.qm b/src/res/translation/translation_it_IT.qm index 6f0747a4b3cc1ece7ebe355dfe9d7deadc11a126..f94bb1653e2158436316b43ba84f277418a0b861 100644 GIT binary patch delta 4191 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 Mm&P}(GFS`ue-da7)Bpeg delta 4723 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 EKcLj50RR91 diff --git a/src/res/translation/translation_it_IT.ts b/src/res/translation/translation_it_IT.ts index 77514c2ae2..020254316d 100644 --- a/src/res/translation/translation_it_IT.ts +++ b/src/res/translation/translation_it_IT.ts @@ -945,11 +945,6 @@ &Clear All Stored Solo and Mute Settings &Riprisitna tutti gli stati salvati di SOLO e MUTE - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -1038,6 +1033,11 @@ users utenti + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_nl_NL.qm b/src/res/translation/translation_nl_NL.qm index 27d5bcbc04f94e19eb72c3b0e06bd0999e4ff8f2..f96bc62626148baf8e878ff3cfa7d14998860506 100644 GIT binary patch delta 4208 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 XEm1Mqqh<;>VaZO;6ajg3X0P;r0F8za diff --git a/src/res/translation/translation_nl_NL.ts b/src/res/translation/translation_nl_NL.ts index b82e2138cb..e1ccb71df1 100644 --- a/src/res/translation/translation_nl_NL.ts +++ b/src/res/translation/translation_nl_NL.ts @@ -937,11 +937,6 @@ &Clear All Stored Solo and Mute Settings - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -1026,6 +1021,11 @@ users gebruikers + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_pl_PL.qm b/src/res/translation/translation_pl_PL.qm index 6087f15912b0a3fc4dfe9a9dad39b58e8f29fbc5..87a0371dfb49297381b82f48402291728174c44f 100755 GIT binary patch delta 4191 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 I_3SqHe<`65>;M1& delta 4695 zcmY*cXH*nv)4fm6^z`IG6fhtRh7}b7v#x7iC1XG^fr>B!iXhnpgS&vTDl3kP0W$^= zBYx_NFA641=!#&@X-y!CAgJ&a%sG3`{(#%l)BRM{t-4h;A2&$Kw@Ox7P1XYF4BR|I z=mb~{B6O!qoe_0UjClJap$E_|lW;se5@WdBS`0lrWSrYJ$SwO``@O_fO>`lQBGXVNK8^Dhq1MI8-@7x#6(-*w^ zE^?$Dc%M;Vhy_2{n=lJ}l7_rb0Kc6lM{EfjfLuo--q(TO?ErMx1^&Q1Fn=xh{3T!_ zXGpqw0_Pq>k~D)@91P)75fHEis-D?siMY$n7r14LZcPydY7Bdr75A~+aFN;Tt#-oM z;dh{=ADolPeC-;z1U?47*1%gk8LR+PsLsbdq5P0oWf5)Lk$j&oB-C#99OQF=)p!;{{d^Wjrrwjf!J6UkQxcJ z?!o5!{2y8Tg{8ThkYkTnx6giX_QP16buC~y zg5&pf02+62f>Q-W@|u&6n+8O#;uM;C(oqU$@+Ank>&2NBlTdHlac$K^{i1NL!!vTc zCY|e>@+WDgBR7aA%0FjvL!b8szVY0oWMXutftxabQs(@Li})4>)}lA3kGY*d#c-0- zFC;?`?775RH4w3#OGO}2_LR$5;S22Z;C8rplY>XNT}xJhO{?W{s2EYxfy>!p1+06( z9nkaw+AQG?)RQ(8S=_;q)J1}pH6t6F#2pJIW)v^Eg38HYz29@EyA#7l0`y#=Jyp4# zEq5tj2Pn>RS10cQT<3Am$5XDHt+`hpBB_dvjpuJwfc3RRK0hE}qkeRJWw3p^`V(f9@(??BWP) zvK23R`V&~sf#S7weSv$Oj9BR;&YVI$r2i}<>IRCl5^qv-I4j<@#2MHdE#B=xO{3mI zoKt!ScEVGCfx+KHM#l5^zI&_=-J=KDt(XJ#-CV ze#(g79*b}MOa>onj94*CeCHf#hBJsC7!n9Ci62@Kf9_@CC-*u6arWZZg(QIrvAFu{ zFd%O&uWqEKkZ`>jS-W`N%vncGbr5gfISrUTfOoJC1Z!Qw_u6hnqW6{YKYu&`Y)jw= zsi;I{ru;8{M@c&$_#yRU!1yk_)A!DR_#r<*Ln422ocA$MK6c&YXM~Zc7fj`Yxg;u( zzxdgM)j-E?{G7g)BwmqTfk|bbM-9 z8d&ETe#O<_s8ntERWpd<+nKzfD@F3bgkSgM5jBPLe8x@z=)RF(zmE=T=WE1@t9)iA zF{avR#CutU&%opl`0Y~4^u8*7XXqjdAe+xAK1~ey@&#iz(46Ya7wcWVlYuMzjhWO< zL=X5f-zG}qjaXX9zdKPtQs~Ej?@eN#8EC{WmHZF;G{E!Np1uw#s9kD zy3}0W&_Pm^69OFeHB?H?^|xk9-e`%&t&NgTpPIV-RLSQv(zw4^)=4FX$EW6L>4;9gS{e^?4;|D)#(euCwg1hDDXh4#)=4<2j7*G&f2{hTnpj_CDn6r%iYfoT>AF}6gD z>Te;=qXcN-AS8*Vfwij>(#q{fnG1x~#Z=LW`-Qa|Xu6DjD6D^6Ks|W8utDhwHZEFd z&aYygu=%1DNh(%2Xd4Ce8Y7%sPs>uP0HN@{y`C1DOG0tVBf60*JoW2Mb92A&^w?0s z;li_q7laRm=k;g7)c1uq)^w0-7pZu>53L2mrOJmD#OqM0$dbWb*yyNU1FqVi8MF% zA}s`o(nG=uFvlg*zXB*VL*1mO%ZWi{we-STIwxBrQ|nJx02fnbE$yPg91OBHC95g7 zysXkKRoB;ORlb>|tX~65`r&dsadM|l_i9Ko7 zkfPM+f8@!pwxGm}m@Y3%A-7tslixqoe8A-&WyF#2pN*^Dgkc!-> zRhcSGI@yzCmMI)slh=I)Df)Xv0naOqSh-r^G&~V(uC2nWHA!ZtwIZT-0r2RiBBE(k zwOg);cw9mn9F?Ysvu*&Y9ToH6dePWnisdOYDY2o7m2aqN_iv|I<46_PyQB;I<)da~ee0E0bu{%~^jCJR zFr{9bthBR>p+KUQu0?vPi2K`=B7 zqj=@KmtXzTQ=Xr653rFbFX<1HA-ihjWd{1G)lqp>N?oYuLFLu-NGj>|%B!_R znfGDkwVtEM5p!kfjkYA-eC4apRGFo=%70>}QAG91s)*yX8(S*t{MHaN(JH}v6E%x? zmHN&eV(6jDau20q>-uJ7Zm(2byv?Y)MX2;W+BAT5d8X?3?f_WWVwKzSH0qFCgRh7)7&r?EGuix2& z&4^UJok5?YLsV5ids6?sp{hRW3D$m%T4*q(RLxLZT(1B&sMNLz3Bc+7YTNgj^t*4o z+R@AkZ1M*6kP6c7udeFhNy}&>@l?BSp!0rOq#pO`CCzO^gT_SPT^*lF567%f$G_i2 zUJpgx8-Xx|d6YjY2fR14Mh-sD987n&B6X)7_TG?D82FVWbz z?Irnq(G2OBNR2;5GyKvgYKJQ{?hB|$9eQY{Qv*j*mBxQLVQ!IT*0uBWypv{e*#O$s zO*AVuaWrw3YE}wifY3s-!D1R%ct=f9(*zp6NmHb!+H&lvDNWl;YIvx5SL+FEj?>hb zsL`5Pdui(WO`+fS_L{ofFff~T)Fl#r&$DZh>#A(&`BS)dWUzl&m@d@tbZWai8{bX} zRXeZn$moA>y9NcQEdO)oNYFf$&42E62@d)1TX}1Pe>2JWoW$Y{9t$lv6d4?HZ1M&! zm_OJQVvNBYDd_?d`s2pTG59aG%sX;yd54VlsjSKno8CHa@ZDqkjwdFwaAu{(6!>E< z<{%6qnEmgI{K(MoDBbbILtNB{P^+#{U>=XK6V$ROcV1(?;r|qWvk9=wO{T zDtuOSoPVS)gQc)mt(hGrvJvoSQxQO?#v$BzmEpLQwdvuH82aTEf^cZDkW7a_*JPYt zSU`6|=r4-#^uNg=U50-mv#{1RKdOamv#&7-r6Z!ygI=5qduTJPQkj!%A)Oe7X!vIY zr!rTUe?!ThKo0uH1crob10zFXb&=Y6k>T@nkhD2#Y!ZJQ2GApLdC`e^)$K`*pSKR*t>ZFxE diff --git a/src/res/translation/translation_pl_PL.ts b/src/res/translation/translation_pl_PL.ts index 690092e24e..cd7a636903 100644 --- a/src/res/translation/translation_pl_PL.ts +++ b/src/res/translation/translation_pl_PL.ts @@ -792,11 +792,6 @@ Sort Users by &City Sortuj kanały według &miasta - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -862,6 +857,11 @@ users użytkownicy + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_pt_BR.qm b/src/res/translation/translation_pt_BR.qm index 7af9f6afc023d285e5abc70cc08c4431a7f9fc31..f14c0cafd3565efd7a2c97489b054fe92109b1d2 100644 GIT binary patch delta 4219 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 delta 4632 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 rqb`eRgZEZ diff --git a/src/res/translation/translation_pt_BR.ts b/src/res/translation/translation_pt_BR.ts index 3d1f305863..4996a45718 100644 --- a/src/res/translation/translation_pt_BR.ts +++ b/src/res/translation/translation_pt_BR.ts @@ -877,11 +877,6 @@ &Clear All Stored Solo and Mute Settings - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -1056,6 +1051,11 @@ users usuários + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm index a9f366ef693fb83603dbf6cc8226e910adfee8e9..ded778a9b50af4f9ab7730d6c3a0b6b75a2cf125 100644 GIT binary patch delta 3990 zcmX9>d0b8D8~?uNo^!Wz?!A#xCO7MEWT_}JW`r!Qt|gVFLWTsB0H~ zkv(CU$!I2#rACt`T4e0mCQ~S-B)_NbAAP>(cHi^9&+~o0&-Z=q!2|M5sq!uQX^Q~# z2L2jD=m}Vt5&8jMSIjt9X2!DZgyVtFXe}nw<4rTpvoqtJE`H5MK=Cao3N8b4vY;7wtP`+oRNDhkvKxKdG79f&I>Pka8*9^b z=4jNH!D~Go+h7at@CTIVLU?bR4>rL8-g$If<8JsY_W-l!;d40=h}Z_-KXwA_6#UlF zu0|`2|BBLSPQm!Al(+9`7&hhr9?@p3YldNaF3|Zum>5JAjrbG((}?GC6{dcy$7sx3 zj_KWq{7;J!BJWQ5gd>C&FjkH*pGe?Y1maUolur$kFYg03bjAMVbillmNZ(BSHLNyW z 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 diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index ddfe21c21a..f002c0f3f3 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -875,11 +875,6 @@ &Clear All Stored Solo and Mute Settings - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -1050,6 +1045,11 @@ users utilizadores + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_sk_SK.qm b/src/res/translation/translation_sk_SK.qm index e1a4f3ec8a902da734fd577a6689a54292e45769..30d721ab20648ec075fc6ca3cda6a6e168b70ab9 100644 GIT binary patch delta 2849 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 VyqWenX$4j#f2&LF=i9Cce*rS+ZS4R6 diff --git a/src/res/translation/translation_sk_SK.ts b/src/res/translation/translation_sk_SK.ts index 160dcf9cf8..dd07e86be4 100644 --- a/src/res/translation/translation_sk_SK.ts +++ b/src/res/translation/translation_sk_SK.ts @@ -782,11 +782,6 @@ Set All Faders to New Client &Level - - - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. - - Ok @@ -862,6 +857,11 @@ users používatelia + + + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. + + D&isconnect diff --git a/src/res/translation/translation_sv_SE.qm b/src/res/translation/translation_sv_SE.qm index 6219382f520233db1dd5f862e1046a6ff3eb8057..3053c77de383f8b01532a418d67bb5cde5573184 100644 GIT binary patch delta 5141 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 S3TyV6slwkuNRu=%Q~Ey)U - The soundcard device does not work correctly. Please open the settings and check the device selection and the driver settings. + Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. From a16de5431063fe866df129ee2e91b3a8618b352b Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 16:18:38 +0100 Subject: [PATCH 78/92] update German translation --- src/res/translation/translation_de_DE.qm | Bin 104329 -> 106543 bytes src/res/translation/translation_de_DE.ts | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index 97656c4eb73ca660e6ddf44df56400f2c50cf3fd..e71793848e23de298367c2922832231d6f094dec 100644 GIT binary patch delta 5485 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 delta 4149 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 Vw@GH>RmY7RSgCM4YzMon`X5u-*gOCL diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 43abb8ddf1..e5346600c6 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -866,12 +866,12 @@ Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. - + Die Soundkarte funktioniert nicht ordnungsgemäß. Bitte überprüfe die Soundkartenauswahl und die Einstellungen der Soundkarte. Ok - + Ok @@ -3282,17 +3282,17 @@ The current selected audio device is no longer present in the system. - + Die ausgewählte Soundkarte ist nicht mehr im System verfügbar. The audio input device is no longer available. - + Das aktuelle Audiogerät für den Toneingang ist nicht mehr verfügbar. The audio output device is no longer available. - + Das aktuelle Audiogerät für den Tonausgang ist nicht mehr verfügbar. @@ -3388,17 +3388,17 @@ The selected audio device could not be used because of the following error: - Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: + Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: The previous driver will be selected. - Der vorherige Treiber wird wieder ausgewählt. + Der vorherige Treiber wird wieder ausgewählt. The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. - + Das aktuell ausgewählte Audiogerät ist nicht mehr verfügbar oder die Treibereinstellungen sind nicht mehr mit dieser Software kompatibel. Es wird nun versucht, ein funktionierendes Audiogerät zu finden. Dieses neue Audiogerät könnte eine Tonrückkopplung verursachen. Bitte überprüfe deswegen die Audiogeräteeinstellungen vor der nächsten Verbindung mit dem Server. From 4c01dc3ba5617357b9428941451b0c5bb9d3fa4f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 16:25:50 +0100 Subject: [PATCH 79/92] #129 is not really a bug but an improvement --- ChangeLog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3a6ca1bc1b..3feadaf3d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,8 @@ - added possibility to set MIDI offset for fader control to --ctrlmidich (#95) +- detect if no audio Device is selected before trying to connect a server (#129) + - bug fix: sliders move by themselves if fader groups are used on reconnect (#611) - bug fix: do not reset sound card channel selection on a device property change (#727) @@ -25,8 +27,6 @@ - bug fix: use new server icon on Mac server bundle and Windows installer (#737) -- bug fix: detect if no audio Device is selected before trying to connect a server (#129) - - bug fix: ping times of servers which are further down the server list are too high (#49) From f925dc3608346fa90992899baf279ee1716b5e87 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 21:24:55 +0100 Subject: [PATCH 80/92] fix: if # is set for the list filter, only filter for occupied servers and not for server names which contain a # --- src/connectdlg.cpp | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index 3f418015dc..b714f2f8cb 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -587,34 +587,38 @@ void CConnectDlg::UpdateListFilter() QTreeWidgetItem* pCurListViewItem = lvwServers->topLevelItem ( iIdx ); bool bFilterFound = false; - // search server name - if ( pCurListViewItem->text ( 0 ).indexOf ( sFilterText, 0, Qt::CaseInsensitive ) >= 0 ) - { - bFilterFound = true; - } - - // search location - if ( pCurListViewItem->text ( 3 ).indexOf ( sFilterText, 0, Qt::CaseInsensitive ) >= 0 ) - { - bFilterFound = true; - } - - // special case: filter for occupied servers // DEFINITION: if "#" is set at the beginning of the filter text, we show // occupied servers (#397) - if ( ( sFilterText.indexOf ( "#" ) == 0 ) && ( sFilterText.length() == 1 ) && - ( pCurListViewItem->childCount() > 0 ) ) + if ( ( sFilterText.indexOf ( "#" ) == 0 ) && ( sFilterText.length() == 1 ) ) { - bFilterFound = true; + // special case: filter for occupied servers + if ( pCurListViewItem->childCount() > 0 ) + { + bFilterFound = true; + } } - - // search children - for ( int iCCnt = 0; iCCnt < pCurListViewItem->childCount(); iCCnt++ ) + else { - if ( pCurListViewItem->child ( iCCnt )->text ( 0 ).indexOf ( sFilterText, 0, Qt::CaseInsensitive ) >= 0 ) + // search server name + if ( pCurListViewItem->text ( 0 ).indexOf ( sFilterText, 0, Qt::CaseInsensitive ) >= 0 ) + { + bFilterFound = true; + } + + // search location + if ( pCurListViewItem->text ( 3 ).indexOf ( sFilterText, 0, Qt::CaseInsensitive ) >= 0 ) { bFilterFound = true; } + + // search children + for ( int iCCnt = 0; iCCnt < pCurListViewItem->childCount(); iCCnt++ ) + { + if ( pCurListViewItem->child ( iCCnt )->text ( 0 ).indexOf ( sFilterText, 0, Qt::CaseInsensitive ) >= 0 ) + { + bFilterFound = true; + } + } } // only update Hide state if ping time was received From 4aac5e3064916076ff2c1a56ced10e952a6f5a58 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 21:26:44 +0100 Subject: [PATCH 81/92] update (one entry is not a bug but an improvement) --- ChangeLog | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3feadaf3d9..f58fd6fd2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,13 +14,13 @@ - detect if no audio Device is selected before trying to connect a server (#129) +- on MacOS if an audio device is no longer available, show a warning + rather than switching to default automatically (#727) + - bug fix: sliders move by themselves if fader groups are used on reconnect (#611) - bug fix: do not reset sound card channel selection on a device property change (#727) -- bug fix: on MacOS if an audio device is no longer available, show a warning - rather than switching to default automatically (#727) - - bug fix: compiling Jamulus 3.6.1 is failing on Debian 9 Linode (#736) - bug fix: on MacOS Jamulus does not always select the previous sound card (#680) From bb11c01abf5a3e1a20c364056229818756df8de7 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 6 Dec 2020 21:32:38 +0100 Subject: [PATCH 82/92] fix a typo --- ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f58fd6fd2f..89594c48be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -86,7 +86,7 @@ - replaced double types by floats for some of the signal processing, coded by hselasky (#544) -- support permanent channl fader sorting (i.e., not only on request but always) (#666) +- support permanent channel fader sorting (i.e., not only on request but always) (#666) - support sorting faders by channel city From e7572cd724b0f1de5dc153893bd293d1fba28031 Mon Sep 17 00:00:00 2001 From: daryl Date: Sun, 6 Dec 2020 22:19:56 +0100 Subject: [PATCH 83/92] Update/correct Spanish translation --- src/res/translation/translation_es_ES.ts | 30 ++++++++++++------------ 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 9e51786b5c..67c39f74e2 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -881,12 +881,12 @@ &Clear All Stored Solo and Mute Settings - + Eliminar Todas las &Configuraciones de Solo y Mute Ok - Ok + Ok @@ -1006,22 +1006,22 @@ N&o User Sorting - N&o Ordenar Canales + N&o Ordenar Usuarios Sort Users by &Name - Ordenar Canales por &Nombre + Ordenar Usuarios por &Nombre Sort Users by &Instrument - Ordenar Canales por &Instrumento + Ordenar Usuarios por &Instrumento Sort Users by &City - Ordenar Canales por &Ciudad + Ordenar Usuarios por &Ciudad &Clear All Stored Solo Settings @@ -1056,12 +1056,12 @@ Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. - + Tu tarjeta de sonido no está funcionando correctamente. Por favor abre la ventana de configuración y comprueba la selección de dispositivo y la configuración del driver. D&isconnect - D&esconectar + &Desconectar @@ -1099,7 +1099,7 @@ &Settings - C&onfiguración + Co&nfiguración @@ -3294,17 +3294,17 @@ The current selected audio device is no longer present in the system. - + El dispositivo de audio seleccionado actualmente ya no está presente en el sistema. The audio input device is no longer available. - + El dispositivo de entrada de audio ya no está disponible. The audio output device is no longer available. - + El dispositivo de salida de audio ya no está disponible. @@ -3404,17 +3404,17 @@ The selected audio device could not be used because of the following error: - El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: + El dispositivo de audio seleccionado no puede utilizarse a causa del siguiente error: The previous driver will be selected. - Se utilizará el driver anterior. + Se seleccionará el driver anterior. The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. - + El dispositivo de audio seleccionado anteriormente ya no está disponible o las propiedades del driver han cambiado a un estado que es incompatible con este software. Intentaremos ahora encontrar un dispositivo de audio válido. Este nuevo dispositivo puede ocasionar retroalimentación de audio. Por tanto, antes de conectarte a un servidor, comprueba la configuración del dispositivo de audio. From 23ece657cf80b21277925a1b02bc2914a57dbf0e Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Mon, 7 Dec 2020 18:05:10 +0100 Subject: [PATCH 84/92] French translation update for 3.6.2 --- src/res/translation/translation_fr_FR.ts | 626 +---------------------- 1 file changed, 15 insertions(+), 611 deletions(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index e54c84be91..408e9412af 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -3,34 +3,6 @@ CAboutDlg - - The - Le logiciel - - - software enables musicians to perform real-time jam sessions over the internet. There is a - permet aux musiciens de faire des bœufs en temps réel sur internet. Il existe un - - - software enables musicians to perform real-time jam sessions over the internet. - permet aux musiciens de faire des bœufs en temps réel sur internet. - - - server which collects the audio data from each - qui collecte les données audio de chaque client - - - There is a - Il existe un serveur - - - client, mixes the audio data and sends the mix back to each client. - , mixe les données audio et renvoie le mixage à chaque client. - - - uses the following libraries, resources or code snippets: - utilise les bibliothèques, ressources ou extraits de code suivants : - Qt cross-platform application framework @@ -46,10 +18,6 @@ Some pixmaps are from the Certaines images sont issues de - - Country flag icons from Mark James - Icônes de drapeaux de pays par Mark James - This app enables musicians to perform real-time jam sessions over the internet. @@ -130,22 +98,6 @@ About À propos - - , Version - , version - - - Internet Jam Session Software - Logiciels de bœuf sur Internet - - - Released under the GNU General Public License (GPL) - Publié sous la licence publique générale GNU (GPL) - - - Under the GNU General Public License (GPL) - Sous la licence public général GNU (GPL) - CAboutDlgBase @@ -184,14 +136,6 @@ &Translation &Traduction - - Author: Volker Fischer - Auteur : Volker Fisher - - - Copyright (C) 2005-2020 - Copyright (C) 2005-2020 - &OK @@ -251,10 +195,6 @@ Channel Level Niveau de canal - - Displays the pre-fader audio level of this channel. All connected clients at the server will be assigned an audio level, the same value for each client. - Affiche le niveau audio pré-fader de ce canal. Tous les clients connectés au serveur se verront attribuer un niveau audio, la même valeur pour chaque client. - Input level of the current audio channel at the server @@ -265,10 +205,6 @@ Mixer Fader Chariot du mixeur - - Adjusts the audio level of this channel. All connected clients at the server will be assigned an audio fader at each client, adjusting the local mix. - Règle le niveau audio de ce canal. Tous les clients connectés au serveur se verront attribuer un chariot audio à chaque client, ce qui permettra d'ajuster le mixage local. - Local mix level setting of the current audio channel at the server @@ -284,10 +220,6 @@ Shows a status indication about the client which is assigned to this channel. Supported indicators are: Affiche une indication sur l'état du client qui est affecté à ce canal. Les indicateurs pris en charge sont : - - Speaker with cancellation stroke: Indicates that the other client has muted you. - Haut-parleur avec barre d'annulation : indique que l'autre client vous a mis en sourdine. - Status indicator label @@ -298,10 +230,6 @@ Panning Panoramique - - Sets the panning position from Left to Right of the channel. Works only in stereo or preferably mono in/stereo out mode. - Règle la position panoramique du canal de gauche à droite. Fonctionne uniquement en mode stéréo ou de préférence en mode entrée mono/sortie stéréo. - Local panning position of the current audio channel at the server @@ -317,10 +245,6 @@ Mute button Bouton de sourdine - - With the Solo checkbox, the audio channel can be set to solo which means that all other channels except of the current channel are muted. It is possible to set more than one channel to solo. - En cochant la case Solo, le canal audio peut être réglé sur solo, ce qui signifie que tous les autres canaux, à l'exception du canal actuel, sont mis en sourdine. Il est possible de mettre plus d'un canal en solo. - Solo button @@ -331,10 +255,6 @@ Fader Tag Étiquette de chariot - - The fader tag identifies the connected client. The tag name, the picture of your instrument and a flag of your country can be set in the main window. - L'étiquette de chariot identifie le client connecté. Le nom du tag, la photo de votre instrument et un drapeau de votre pays peuvent être définis dans la fenêtre principale. - Grp @@ -376,7 +296,7 @@ With the Solo checkbox, the audio channel can be set to solo which means that all other channels except the soloed channel are muted. It is possible to set more than one channel to solo. - Avec la case-à-cocher Solo, le canal audio peut être réglé sur solo, ce qui signifie que tous les autres canaux, sauf le canal en solo, sont coupés. Il est possible de mettre plus d'un canal en solo. + En cochant la case Solo, le canal audio peut être réglé sur solo, ce qui signifie que tous les autres canaux, sauf le canal en solo, sont coupés. Il est possible de mettre plus d'un canal en solo. @@ -587,14 +507,6 @@ &Send En&voyer - - Cl&ear - N&ettoyer - - - &Close - &Fermer - CClientDlg @@ -603,35 +515,11 @@ Input Level Meter Indicateur de niveau d'entrée - - The input level indicators show the input level of the two stereo channels of the current selected audio input. - Les indicateurs de niveau d'entrée indiquent le niveau d'entrée des deux canaux stéréo de l'entrée audio actuellement sélectionnée. - Make sure not to clip the input signal to avoid distortions of the audio signal. Veillez à ne pas clipper le signal d'entrée afin d'éviter les distorsions du signal audio. - - If the - Si le logiciel - - - software, you should not hear your singing/instrument in the loudspeaker or your headphone when the - , vous ne cevriez pas entendre votre chant/instrument dans le haut-parleur ou votre casque lorsque le logiciel - - - software is connected and you play your instrument/sing in the microphone, the LED level meter should flicker. If this is not the case, you have probably selected the wrong input channel (e.g. line in instead of the microphone input) or set the input gain too low in the (Windows) audio mixer. - est connecté et que vous jouez de votre instrument ou chantez dans le microphone, le voyant de niveau devrait clignoter. Si ce n'est pas le cas, vous avez probablement sélectionné le mauvais canal d'entrée (par exemple, entrée ligne au lieu de l'entrée microphone) ou réglé le gain d'entrée trop bas dans le mixeur audio (Windows). - - - For a proper usage of the - Pour un bon usage du logiciel - - - software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). - n'est pas connecté. Vous pouvez y parvenir en mettant en sourdine votre canal audio d'entrée dans le mixeur de lecture (et pas dans le mixeur d'enregistrement !). - Input level meter @@ -647,23 +535,11 @@ Connect/Disconnect Button Bouton connecter/déconnecter - - Push this button to connect to a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. - Appuyez sur ce bouton pour vous connecter à un serveur. Une boîte de dialogue vous permettant de sélectionner un serveur s'ouvrira. Si vous êtes connecté, l'appui sur ce bouton mettra fin à la session. - Connect and disconnect toggle button Bouton-bascule de connection/déconnexion - - Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the - En cliquant sur ce bouton, la légende du bouton passe de Connecter à Déconnecter, c'est-à-dire qu'il met en œuvre une fonctionnalité de basculement pour connecter et déconnecter le logiciel - - - software. - . - Local Audio Input Fader @@ -674,22 +550,6 @@ Local audio input fader (left/right) Chariot d'entrée audio locale (gauche/droite) - - Reverberation effect level setting - Paramètre de niveau d'effet de réverbération - - - Left channel selection for reverberation - Sélection de canal gauche pour la réverbération - - - Right channel selection for reverberation - Sélection de canal droit pour la réverbération - - - If this LED indicator turns red, you will not have much fun using the - Si ce voyant devient rouge, vous n'aurez pas beaucoup de plaisir à utiliser le logiciel - This shows the level of the two stereo channels for your audio input. @@ -705,10 +565,6 @@ For proper usage of the application, you should not hear your singing/instrument through the loudspeaker or your headphone when the software is not connected.This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). Pour une bonne utilisation de l'application, vous ne devez pas entendre votre chant/instrument par le haut-parleur ou votre casque lorsque le logiciel n'est pas connecté. Ceci peut être réalisé en coupant votre canal audio d'entrée dans le mixeur de lecture (pas dans le mixeur d'enregistrement !). - - Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the application. - En cliquant sur ce bouton, la légende du bouton passe de Connecter à Déconnecter, c'est-à-dire qu'il s'agit d'une fonctionnalité de basculement pour connecter et déconnecter l'application. - Controls the relative levels of the left and right local audio channels. For a mono signal it acts as a pan between the two channels.For example, if a microphone is connected to the right input channel and an instrument is connected to the left input channel which is much louder than the microphone, move the audio fader in a direction where the label above the fader shows @@ -877,12 +733,12 @@ &Clear All Stored Solo and Mute Settings - + Effa&cer tous les paramètres Solo et Muet enregistrés Ok - Ok + Ok @@ -894,14 +750,6 @@ &Edit Édit&er - - &Sort Users by Name - &Trier les utilisateurs du canal par nom - - - None - Aucun - Center @@ -918,10 +766,6 @@ L G - - With the audio fader, the relative levels of the left and right local audio channels can be changed. For a mono signal it acts like a panning between the two channels. If, e.g., a microphone is connected to the right input channel and an instrument is connected to the left input channel which is much louder than the microphone, move the audio fader in a direction where the label above the fader shows - Avec le chariot audio, les niveaux relatifs des canaux audio locaux gauche et droit peuvent être modifiés. Pour un signal mono, il agit comme un panoramique entre les deux canaux. Si, par exemple, un microphone est connecté au canal d'entrée droit et qu'un instrument est connecté au canal d'entrée gauche qui est beaucoup plus fort que le microphone, déplacez le fader audio dans une direction où l'étiquette au-dessus du chariot indique - , where @@ -932,57 +776,21 @@ is the current attenuation indicator. est l'indicateur d'atténuation actuel. - - Reverberation Level - Niveau de réverbération - - - A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono channel selection and the reverberation level can be modified. If, e.g., the microphone signal is fed into the right audio channel of the sound card and a reverberation effect shall be applied, set the channel selector to right and move the fader upwards until the desired reverberation level is reached. - Un effet de réverbération peut être appliqué à un canal audio mono local ou aux deux canaux en mode stéréo. La sélection du canal mono et le niveau de réverbération peuvent être modifiés. Si, par exemple, le signal du microphone est envoyé dans le canal audio droit de la carte son et qu'un effet de réverbération doit être appliqué, réglez le sélecteur de canal à droite et déplacez le curseur vers le haut jusqu'à ce que le niveau de réverbération souhaité soit atteint. - - - The reverberation effect requires significant CPU so it should only be used on fast PCs. If the reverberation level fader is set to minimum (which is the default setting), the reverberation effect is switched off and does not cause any additional CPU usage. - L'effet de réverbération nécessite un processeur important, de sorte qu'il ne doit être utilisé que sur des PC rapides. Si le chariot de niveau de réverbération est réglé au minimum (qui est le réglage par défaut), l'effet de réverbération est désactivé et n'entraîne aucune utilisation supplémentaire du processeur. - - - Reverberation Channel Selection - Sélection de canal de réverbération - - - With these radio buttons the audio input channel on which the reverberation effect is applied can be chosen. Either the left or right input channel can be selected. - Ces boutons radio permettent de choisir le canal d'entrée audio sur lequel l'effet de réverbération est appliqué. Il est possible de sélectionner le canal d'entrée gauche ou droit. - Delay Status LED Voyant d'état de délai - - The delay status LED indicator shows the current audio delay status. If the light is green, the delay is perfect for a jam session. If the light is yellow, a session is still possible but it may be harder to play. If the light is red, the delay is too large for jamming. - Le voyant d'état de délai indique l'état actuel du délai audio. Si le voyant est vert, le délai est parfait pour une session de bœuf. Si le voyant est jaune, une session est toujours possible mais elle peut être plus difficile à jouer. Si le voyant est rouge, le délai est trop important pour un bœuf. - Buffers Status LED Voyant d'état de tampon - - The buffers status LED indicator shows the current audio/streaming status. If the light is green, there are no buffer overruns/underruns and the audio stream is not interrupted. If the light is red, the audio stream is interrupted caused by one of the following problems: - Le voyant d'état des tampons indique l'état actuel de l'audio/du streaming. Si le voyant est vert, il n'y a pas de dépassement de mémoire tampon ni de sous-dépassement et le flux audio n'est pas interrompu. Si le voyant est rouge, le flux audio est interrompu en raison de l'un des problèmes suivants : - The network jitter buffer is not large enough for the current network/audio interface jitter. Le tampon de jitter réseau n'est pas assez grand pour le jitter actuel de l'interface réseau/audio. - - The sound card buffer delay (buffer size) is set to too small a value. - Le délai du tampon de la carte son (taille du tampon) est réglé sur une valeur trop faible. - - - The upload or download stream rate is too high for the current available internet bandwidth. - Le taux de flux montant ou descendant est trop élevé pour la bande passante Internet actuellement disponible. - The CPU of the client or server is at 100%. @@ -1006,26 +814,22 @@ Sort Users by &Name - Trier les utilisateurs du canal par &nom + Trier les utilisateurs par &nom Sort Users by &Instrument - Trier les utilisateurs du canal par &instrument + Trier les utilisateurs par &instrument Sort Users by &Group - Trier les utilisateurs du canal par &groupe + Trier les utilisateurs par &groupe Sort Users by &City - Trier les utilisateurs du &canal par ville - - - &Clear All Stored Solo Settings - Effa&cer tous les paramètres de solo enregistrés + Trier les utilisateurs par ville (&c) @@ -1056,7 +860,7 @@ Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. - + Votre carte son ne fonctionne pas correctement. Veuillez ouvrir le dialogue des paramètres et vérifier la sélection du périphérique et les paramètres du pilote. @@ -1146,10 +950,6 @@ Update check Vérification de mise à jour - - MUTED (You are not sending any audio to the server) - SILENCÉ (vous n'envoyez aucun son au serveur) - CClientSettingsDlg @@ -1158,27 +958,11 @@ Jitter Buffer Size Taille du tampon de gigue - - The jitter buffer compensates for network and sound card timing jitters. The size of this jitter buffer has therefore influence on the quality of the audio stream (how many dropouts occur) and the overall delay (the longer the buffer, the higher the delay). - Le tampon de gigue compense les gigues de synchronisation du réseau et de l'interface audio. La taille de ce tampon de gigue a donc une influence sur la qualité du flux audio (combien de décrochages se produisent) et le délai global (plus le tampon est long, plus le délai est important). - - - The jitter buffer size can be manually chosen for the local client and the remote server. For the local jitter buffer, dropouts in the audio stream are indicated by the light below the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted. - La taille du tampon de gigue peut être choisie manuellement pour le client local et le serveur distant. Pour le tampon de gigue local, les désynchronisations dans le flux audio sont indiquées par le voyant situé en bas des chariots de taille du tampon de gigue. Si le voyant devient rouge, un dépassement de la taille de la mémoire tampon a eu lieu et le flux audio est interrompu. - The jitter buffer setting is therefore a trade-off between audio quality and overall delay. Le réglage du tampon de gigue est donc un compromis entre la qualité audio et le délai global. - - An auto setting of the jitter buffer size setting is available. If the check Auto is enabled, the jitter buffers of the local client and the remote server are set automatically based on measurements of the network and sound card timing jitter. If the Auto check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - Un réglage automatique de la taille du tampon de gigue est disponible. Si la case Auto est activée, les tampons de gigue du client local et du serveur distant sont réglés automatiquement en fonction des mesures de la gigue de synchronisation du réseau et de la carte son. Si la case Auto est activée, les chariots de la taille du tampon de gigue sont désactivés (ils ne peuvent pas être déplacés avec la souris). - - - If the auto setting of the jitter buffer is enabled, the network buffers of the local client and the remote server are set to a conservative value to minimize the audio dropout probability. To tweak the audio delay/latency it is recommended to disable the auto setting functionality and to lower the jitter buffer size manually by using the sliders until your personal acceptable limit of the amount of dropouts is reached. The LED indicator will visualize the audio dropouts of the local jitter buffer with a red light. - Si le réglage automatique du tampon de gigue est activé, les tampons réseau du client local et du serveur distant sont réglés à une valeur prudente pour minimiser la probabilité de décrochage audio. Pour ajuster le délai/latence audio, il est recommandé de désactiver la fonction de réglage automatique et de réduire manuellement la taille du tampon de gigue en utilisant les curseurs jusqu'à ce que votre limite personnelle acceptable du nombre d'interruptions soit atteinte. Le voyant visualisera les décrochages audio du tampon de gigue local par une lumière rouge. - Local jitter buffer slider control @@ -1249,10 +1033,6 @@ For each Pour chaque canal d'entrée/sortie (canal gauche et droite) de - - , a different actual sound card channel can be selected. - , un canal différent de la carte son réelle peut être sélectionné. - Left input channel selection combo box @@ -1298,47 +1078,11 @@ Sound Card Buffer Delay Délai de temporisation de l'interface audio - - The buffer delay setting is a fundamental setting of the - Le paramètre de délai de temporisation est un paramètre fondamental du logiciel - - - software. This setting has influence on many connection properties. - . Ce paramètre influence de nombreuses propriétés de connexion. - Three buffer sizes are supported Trois tailles de tampon sont prises en charge - - 64 samples: This is the preferred setting since it provides the lowest latency but does not work with all sound cards. - 64 échantillons : c'est le réglage préféré car il donne la latence la plus faible mais ne fonctionne pas avec toutes les interfaces audio. - - - 128 samples: This setting should work for most available sound cards. - 128 échantillons : ce réglage devrait fonctionner sur la plupart des interfaces audio disponibles. - - - 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. - 256 échantillons : ce paramètre ne doit être utilisé que si seul un ordinateur très lent ou une connexion internet lente est disponible. - - - Some sound card drivers do not allow the buffer delay to be changed from within the - Certains pilotes d'interface audio ne permettent pas de modifier le délai de la mémoire tampon à partir du logiciel - - - software. In this case the buffer delay setting is disabled. To change the actual buffer delay, this setting has to be changed in the sound card driver. On Windows, press the ASIO Setup button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - . Dans ce cas, le réglage du délai de mise en mémoire tampon est désactivé. Pour modifier le délai actuel de la mémoire tampon, ce paramètre doit être modifié dans le pilote de l'interface audio. Sous Windows, appuyez sur le bouton ASIO Setup pour ouvrir le panneau des paramètres du pilote. Sous Linux, utilisez l'outil de configuration Jack pour modifier la taille de la mémoire tampon. - - - If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - Si aucune taille de tampon n'est sélectionnée et que tous les paramètres sont désactivés, une taille de tampon non prise en charge est utilisée par le pilote. Le logiciel - - - software will still work with this setting but with restricted performance. - continuera toujours de fonctionner avec ce réglage, mais avec des performances limitées. - The actual buffer delay has influence on the connection status, the current upload rate and the overall delay. The lower the buffer size, the higher the probability of a red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. @@ -1349,23 +1093,11 @@ The buffer setting is therefore a trade-off between audio quality and overall delay. Le réglage de la mémoire tampon est donc un compromis entre la qualité audio et le délai global. - - If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the - Si les paramètres de délai de la mémoire tampon sont désactivés, il est interdit par le pilote audio de modifier ce paramètre à partir du logiciel - - - . On Windows, press the ASIO Setup button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - . Sous Windows, appuyez sur le bouton ASIO Setup pour ouvrir le panneau des paramètres du pilote. Sous Linux, utilisez l'outil de configuration Jack pour modifier la taille de la mémoire tampon. - input/output channel (Left and Right channel) a different actual sound card channel can be selected. un canal différent de la carte son réelle peut être sélectionné. - - software. On Windows, press the ASIO Setup button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - . On Windows, press the ASIO Setup button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - 64 samples setting radio button @@ -1386,47 +1118,11 @@ ASIO setup push button Bouton-poussoir de paramétrage ASIO - - Fancy Skin - Habillage fantaisie - - - If enabled, a fancy skin will be applied to the main window. - Si activée, un habillage fantaisie sera appliqué à la fenêtre principale. - - - Fancy skin check box - Case-à-cocher pour l'habillage fantaisie - - - Display Channel Levels - Afficher les niveaux des canaux - - - If enabled, each client channel will display a pre-fader level bar. - Si activée, chaque canal de client affichera une barre de niveau pré-fader. - - - Display channel levels check box - Case-à-cocher pour l'affichage des niveaux de canaux - Audio Channels Canaux audio - - Select the number of audio channels to be used. There are three modes available. The mono and stereo modes use one and two audio channels respectively. In mono-in/stereo-out mode the audio signal which is sent to the server is mono but the return signal is stereo. This is useful if the sound card has the instrument on one input channel and the microphone on the other channel. In that case the two input signals can be mixed to one mono channel but the server mix can be heard in stereo. - Sélectionnez le nombre de canaux audio à utiliser. Trois modes sont disponibles. Les modes mono et stéréo utilisent respectivement un et deux canaux audio. Dans le mode mono-in/stereo-out, le signal audio qui est envoyé au serveur est mono mais le signal de retour est stéréo. Ceci est utile dans le cas où l'interface audio place l'instrument sur un canal d'entrée et le microphone sur l'autre canal. Dans ce cas, les deux signaux d'entrée peuvent être mélangés dans un canal mono mais le mixage du serveur peut être entendu en stéréo. - - - Enabling the stereo streaming mode will increase the stream data rate. Make sure that the current upload rate does not exceed the available bandwidth of your internet connection. - L'activation du mode de streaming stéréo augmentera le débit de données du flux. Assurez-vous que le débit montant actuel ne dépasse pas la bande passante disponible de votre connexion internet. - - - In stereo streaming mode, no audio channel selection for the reverberation effect will be available on the main window since the effect is applied on both channels in this case. - Dans le cas du mode de streaming stéréo, aucune sélection de canal audio pour l'effet de réverbération ne sera disponible dans la fenêtre principale puisque l'effet est appliqué sur les deux canaux dans ce cas. - Audio channels combo box @@ -1437,10 +1133,6 @@ Audio Quality Qualité audio - - Select the desired audio quality. A low, normal or high audio quality can be selected. The higher the audio quality, the higher the audio stream data rate. Make sure that the current upload rate does not exceed the available bandwidth of your internet connection. - Sélectionnez la qualité audio souhaitée. Une qualité audio faible, normale ou élevée peut être sélectionnée. Plus la qualité audio est élevée, plus le débit de données du flux audio est élevé. Assurez-vous que le débit montant actuel ne dépasse pas la bande passante disponible de votre connexion internet. - Audio quality combo box @@ -1451,10 +1143,6 @@ New Client Level Niveau de nouveau client - - The new client level setting defines the fader level of a new connected client in percent. I.e. if a new client connects to the current server, it will get the specified initial fader level if no other fader level of a previous connection of that client was already stored. - Le paramètre de niveau de nouveau client définit le niveau de chariot d'un client nouvellement connecté en pourcentage. C'est-à-dire que si un nouveau client se connecte au serveur actuel, il aura le niveau de chariot initial spécifié si aucun autre niveau de chariot d'une connexion précédente de ce client n'était déjà stocké. - New client level edit box @@ -1465,43 +1153,11 @@ Custom Central Server Address Adresse personnalisée du serveur central - - The custom central server address is the IP address or URL of the central server at which the server list of the connection dialog is managed. This address is only used if the custom server list is selected in the connection dialog. - L'adresse personnalisée du serveur central est l'adresse IP ou l'URL du serveur central sur lequel la liste des serveurs du dialogue de connexion est gérée. Cette adresse n'est utilisée que si la liste de serveurs personnalisée est sélectionnée dans le dialogue de connexion. - - - Central Server Address - Adresse du serveur central - - - The central server address is the IP address or URL of the central server at which the server list of the connection dialog is managed. With the central server address type either the local region can be selected of the default central servers or a manual address can be specified. - L'adresse du serveur central est l'adresse IP ou l'URL du serveur central sur lequel la liste des serveurs du dialogue de connexion est gérée. Avec le type d'adresse du serveur central, on peut soit sélectionner la région de localisation parmi les serveurs centraux par défaut, soit spécifier une adresse manuelle. - - - Default central server type combo box - Choix déroulant de type de serveur central par défaut - - - Central server address line edit - Ligne d'édition pour l'adresse du serveur central - Current Connection Status Parameter Paramètre de l'état de la connexion actuelle - - The ping time is the time required for the audio stream to travel from the client to the server and back again. This delay is introduced by the network. This delay should be as low as 20-30 ms. If this delay is higher (e.g., 50-60 ms), your distance to the server is too large or your internet connection is not sufficient. - Le temps de ping est le temps nécessaire pour que le flux audio voyage du client au serveur et vice-versa. Ce délai est introduit par le réseau. Ce délai doit être de 20 ou 30 ms. Si ce délai est supérieur (par exemple 50-60 ms), la distance qui vous sépare du serveur est trop importante ou votre connexion internet n'est pas suffisante. - - - The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. - Le délai global est calculé à partir du temps de ping actuel et du délai qui est introduit par les paramètres actuels de la mémoire tampon. - - - The upstream rate depends on the current audio packet size and the audio compression setting. Make sure that the upstream rate is not higher than the available rate (check the upstream capabilities of your internet connection by, e.g., using speedtest.net). - Le débit montant dépend de la taille actuelle du paquet audio et du réglage de la compression audio. Assurez-vous que le débit montant n'est pas supérieur au débit disponible (vérifiez les capacités montant de votre connexion internet en utilisant, par exemple, speedtest.net). - If this LED indicator turns red, you will not have much fun using the @@ -1706,10 +1362,6 @@ Compact Compact - - Manual - Manuel - Custom @@ -1720,10 +1372,6 @@ All Genres Tous les genres - - Genre Rock/Jazz - Genre rock/jazz - Genre Classical/Folk/Choral @@ -1744,10 +1392,6 @@ Default Défaut - - Default (North America) - Défaut (Amérique du Nord) - preferred @@ -1769,22 +1413,6 @@ Buffer Delay: Délai de temporisation : - - Predefined Address - Adresse prédéfinie - - - The selected audio device could not be used because of the following error: - Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : - - - The previous driver will be selected. - Le pilote précédent sera sélectionné. - - - Ok - Ok - CClientSettingsDlgBase @@ -1916,23 +1544,11 @@ % % - - Fancy Skin - Habillage fantaisie - - - Display Channel Levels - Afficher les niveaux des canaux - Custom Central Server Address: Adresse personnalisée du serveur central : - - Central Server Address: - Adresse du serveur central : - Audio Stream Rate @@ -1963,14 +1579,6 @@ Server List Liste de serveurs - - The server list shows a list of available servers which are registered at the central server. Select a server from the list and press the connect button to connect to this server. Alternatively, double click a server from the list to connect to it. If a server is occupied, a list of the connected musicians is available by expanding the list item. Permanent servers are shown in bold font. - La liste de serveurs affiche une liste des serveurs disponibles qui sont inscrits sur le serveur central. Sélectionnez un serveur dans la liste et appuyez sur le bouton de connexion pour vous connecter à ce serveur. Vous pouvez également double-cliquer sur un serveur de la liste pour vous y connecter. Si un serveur est occupé, une liste des musiciens connectés est disponible en développant l'élément de la liste. Les serveurs permanents sont indiqués en caractères gras. - - - Note that it may take some time to retrieve the server list from the central server. If no valid central server address is specified in the settings, no server list will be available. - Notez que ça peut prendre un certain temps pour récupérer la liste des serveurs depuis le serveur central. Si aucune adresse de serveur central valide n'est spécifiée dans les paramètres, aucune liste de serveurs ne sera disponible. - Server list view @@ -1981,18 +1589,6 @@ Server Address Adresse du serveur - - The IP address or URL of the server running the - L'adresse IP ou l'URL du serveur qui exécute le logiciel serveur - - - server software must be set here. An optional port number can be added after the IP address or URL using a colon as a separator, e.g, example.org: - doit être paramétré ici. Un numéro optionnel de port peut être ajouté après l'adresse IP ou l'URL en utilisant deux points en tant que séparateur, par exemple, exemple.org : - - - . A list of the most recent used server IP addresses or URLs is available for selection. - . Une liste des adresses IP ou URL de serveur les plus récentes est disponible pour la sélection. - The Connection Setup window shows a list of available servers. Server operators can optionally list their servers by music genre. Use the List dropdown to select a genre, click on the server you want to join and press the Connect button to connect to it. Alternatively, double click on on the server name. Permanent servers (those that have been listed for longer than 48 hours) are shown in bold. @@ -2116,10 +1712,6 @@ Server Address Adresse du serveur - - Server Name/Address - Nom du serveur / adresse - C&ancel @@ -2175,10 +1767,6 @@ CLicenceDlg - - I &agree to the above licence terms - J'&accepte les conditions de licence ci-dessus - This server requires you accept conditions before you can join. Please read these in the chat window. @@ -2199,74 +1787,6 @@ Decline Décliner - - By connecting to this server and agreeing to this notice, you agree to the following: - En vous connectant à ce serveur et en acceptant le présent avis, vous acceptez ce qui suit : - - - You agree that all data, sounds, or other works transmitted to this server are owned and created by you or your licensors, and that you are making these data, sounds or other works available via the following Creative Commons License (for more information on this license, see - Vous acceptez que toutes les données, sons ou autres œuvres transmises à ce serveur soient détenus et créés par vous ou vos ayant-droits, et que vous rendiez ces données, sons ou autres œuvres disponibles via la licence Creative Commons suivante (pour plus d'informations sur cette licence, voir - - - You are free to: - Vous êtes libres de : - - - Share - Partager - - - copy and redistribute the material in any medium or format - copier et redistribuer le matériel sur tout support ou format - - - Adapt - Adapter - - - remix, transform, and build upon the material - remixer, transformer et développer à partir du matériel - - - The licensor cannot revoke these freedoms as long as you follow the license terms. - Le donneur de licence ne peut pas révoquer ces libertés tant que vous respectez les conditions de la licence. - - - Under the following terms: - Dans les conditions suivantes : - - - Attribution - Attribution - - - You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. - Vous devez donner un crédit approprié, fournir un lien vers la licence et indiquer si des modifications ont été apportées. Vous pouvez le faire de toute manière raisonnable, mais pas d'une manière qui suggère que le donneur de licence vous cautionne ou cautionne votre utilisation. - - - NonCommercial - Non commercial - - - You may not use the material for commercial purposes. - Vous ne pouvez pas utiliser le matériel à des fins commerciales. - - - ShareAlike - Partager à l'identique - - - If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. - Si vous remixez, transformez ou développez à partir du matériel, vous devez distribuer vos contributions sous la même licence que l'original. - - - No additional restrictions - Aucune restriction supplémentaire - - - You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. - Vous ne pouvez pas appliquer des termes juridiques ou des mesures technologiques qui empêchent légalement d'autres personnes de faire ce que la licence autorise. - CMultiColorLED @@ -2288,10 +1808,6 @@ CMusProfDlg - - server. This tag will also show up at each client which is connected to the same server as you. If the name is left empty, the IP address is shown instead. - . Cette balise apparaîtra également sur chaque client connecté au même serveur que vous. Si le nom est laissé vide, l'adresse IP est affichée à la place. - Alias or name edit box @@ -2375,14 +1891,6 @@ Expert Expert - - Set your name or an alias here so that the other musicians you want to play with know who you are. Additionally you may set an instrument picture of the instrument you play and a flag of the country you are living in. The city you live in and the skill level playing your instrument may also be added. - Indiquez ici votre nom ou un pseudonyme afin que les autres musiciens avec lesquels vous voulez jouer sachent qui vous êtes. Vous pouvez également mettre une photo de l'instrument dont vous jouez et un drapeau du pays dans lequel vous vivez. La ville dans laquelle vous vivez et le niveau de compétence pour jouer de votre instrument peuvent également être ajoutés. - - - What you set here will appear at your fader on the mixer board when you are connected to a - Ce que vous réglez ici apparaîtra au niveau de votre fader sur la table de mixage lorsque vous serez connecté à un serveur - Write your name or an alias here so the other musicians you want to play with know who you are. You may also add a picture of the instrument you play and a flag of the country you are located in. Your city and skill level playing your instrument may also be added. @@ -2656,61 +2164,21 @@ Start Minimized on Operating System Start Démarrage minimisé au lancement du système d'exploitation - - If the start minimized on operating system start check box is checked, the - Si la case à cocher "Démarrage minimisé au lancement du système d'exploitation" est cochée, le serveur - - - server will be started when the operating system starts up and is automatically minimized to a system task bar icon. - sera lancé au démarrage du système d'exploitation et est automatiquement minimisé dans une icône de la barre des tâches du système. - - - Show Creative Commons Licence Dialog - Dialogue d'affichage de la licence Creative Commons - - - If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - Si activé, une boîte de dialogue de licence Creative Commons BY-NC-SA 4.0 est affichée chaque fois qu'un nouvel utilisateur se connecte au serveur. - Make My Server Public Rendre mon serveur public - - If the Make My Server Public check box is checked, this server registers itself at the central server so that all - Si la case Rendre mon serveur public est cochée, ce serveur s'inscrit sur le serveur central afin que tous les utilisateurs de - - - users can see the server in the connect dialog server list and connect to it. The registration of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - puisse voir le serveur dans la liste des serveurs du dialogue de connexion et s'y connecter. L'inscription du serveur est renouvelée périodiquement pour s'assurer que tous les serveurs de la liste des serveurs du dialogue de connexion sont effectivement disponibles. - Register Server Status État du serveur inscrit - - If the Make My Server Public check box is checked, this will show whether registration with the central server is successful. - Si la case Rendre mon serveur public est cochée, cela indiquera le succès de l'enregistrement auprès du serveur central. - - - Central Server Address - Adresse du serveur central - - - The Central server address is the IP address or URL of the central server at which this server is registered. With the central server address type either the local region can be selected of the default central servers or a manual address can be specified. - L'adresse du serveur central est l'adresse IP ou l'URL du serveur central auquel ce serveur est inscrit. Avec le type d'adresse du serveur central, on peut soit sélectionner la région locale parmi les serveurs centraux par défaut, soit spécifier une adresse manuelle. - If the Make My Server Public check box is checked, this will show whether registration with the central server is successful. If the registration failed, please choose another server list. Si la case Rendre mon serveur public est cochée, cela indiquera si l'enregistrement auprès du serveur central est réussi. Si l'enregistrement a échoué, veuillez choisir une autre liste de serveurs. - - Default central server type combo box - Choix déroulant de type de serveur central par défaut - If the start minimized on operating system start check box is checked, the server will be started when the operating system starts up and is automatically minimized to a system task bar icon. @@ -2756,10 +2224,6 @@ Server Name Nom du serveur - - The server name identifies your server in the connect dialog server list at the clients. If no name is given, the IP address is shown instead. - Le nom du serveur identifie votre serveur dans la liste des serveurs du dialogue de connexion chez les clients. Si aucun nom n'est donné, l'adresse IP est affichée à la place. - The server name identifies your server in the connect dialog server list at the clients. @@ -2956,10 +2420,6 @@ ERROR ERREUR - - Displays the current status of the recorder. - Affiche l'état actuel de l'enregistreur. - Request new recording button @@ -2998,19 +2458,11 @@ &Open &Ouvrir - - server - serveur - Select Main Recording Directory Sélectionner le répertoire principal des enregistrements - - Predefined Address - Adresse prédéfinie - Recording @@ -3031,18 +2483,6 @@ Not enabled Non activé - - Manual - Manuel - - - Default - Défaut - - - Default (North America) - Défaut (Amérique du nord) - Server @@ -3142,10 +2582,6 @@ Start Minimized on Windows Start Démarrage minimisé au lancement de Windows - - Show Creative Commons BY-NC-SA 4.0 Licence Dialog - Afficher le dialogue de la licence Creative Commons BY-NC-SA 4.0 - Update check @@ -3192,10 +2628,6 @@ Language Langue - - Central Server Address: - Adresse du serveur central : - My Server Info @@ -3211,18 +2643,6 @@ Location: Country Emplacement : pays - - Enable jam recorder - Activer l'enregistreur de bœuf - - - New recording - Nouvel enregistrement - - - Recordings folder - Dossier des enregistrements - CSound @@ -3286,17 +2706,17 @@ The current selected audio device is no longer present in the system. - + Le périphérique audio actuellement sélectionné n'est plus présent dans le système. The audio input device is no longer available. - + Le périphérique d'entrée audio n'est plus disponible. The audio output device is no longer available. - + Le périphérique de sortie audio n'est plus disponible. @@ -3377,36 +2797,20 @@ CSoundBase - - Invalid device selection. - Sélection de périphérique invalide. - - - The audio driver properties have changed to a state which is incompatible with this software. The selected audio device could not be used because of the following error: - Les propriétés du pilote audio ont changé et sont devenues incompatibles avec ce logiciel. Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : - - - Please restart the software. - Veuillez redémarrer le logiciel - - - Close - Fermer - The selected audio device could not be used because of the following error: - Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : + Le périphérique audio sélectionné n'a pas pu être utilisé en raison de l'erreur suivante : The previous driver will be selected. - Le pilote précédent sera sélectionné. + Le pilote précédent sera sélectionné. The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. - + Le périphérique audio précédemment sélectionné n'est plus disponible ou les propriétés du pilote audio sont passées à un état incompatible avec ce logiciel. Nous essayons à présent de trouver un périphérique audio valide. Ce nouveau périphérique audio peut provoquer un retour audio. Aussi, avant de vous connecter à un serveur, veuillez vérifier le réglage du périphérique audio. @@ -3444,7 +2848,7 @@ Internet Jam Session Software - Logiciel de bœuf sur Internet + Logiciel de bœuf sur internet From 28add6b9ca089593ae83f85b684ee97eca9ce6eb Mon Sep 17 00:00:00 2001 From: jerogee Date: Mon, 7 Dec 2020 19:20:42 +0100 Subject: [PATCH 85/92] Update Dutch translation for 3.6.2 (see #77) --- src/res/translation/translation_nl_NL.qm | Bin 100723 -> 102995 bytes src/res/translation/translation_nl_NL.ts | 18 +++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/res/translation/translation_nl_NL.qm b/src/res/translation/translation_nl_NL.qm index f96bc62626148baf8e878ff3cfa7d14998860506..aa2a4d3a0bcd2e3319d812db79b970a6465de2d4 100644 GIT binary patch delta 5832 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 delta 4425 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 &Clear All Stored Solo and Mute Settings - + &Wis Alle Opgeslagen Solo- en Demp-instellingen Ok - Ok + Ok &Clear All Stored Solo Settings @@ -1024,7 +1024,7 @@ Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. - + Uw geluidskaart werkt niet correct. Open het Instellingsvenster en controleer apparaatselectie en bestuurprogramma-instellingen. @@ -3243,17 +3243,17 @@ The current selected audio device is no longer present in the system. - + Het geselecteerde audioapparaat is niet langer in het systeem beschikbaar. The audio input device is no longer available. - + Het audio-invoerapparaat is niet langer beschikbaar. The audio output device is no longer available. - + Het audio-uitvoerapparaat is niet langer beschikbaar. @@ -3348,17 +3348,17 @@ The selected audio device could not be used because of the following error: - Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: + Het geselecteerde audioapparaat kon niet worden gebruikt vanwege de volgende fout: The previous driver will be selected. - Het vorige stuurprogramma wordt geselecteerd. + Het vorige stuurprogramma zal worden geselecteerd. The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. - + Het eerder geselecteerde audioapparaat is niet langer beschikbaar of de stuurprogramma-eigenschappen zijn aangepast en werken niet met deze software. We zoeken nu naar een bruikbaar audioapparaat. Dit nieuwe audioappraat zou audio feedback kunnen veroorzaken. Controleer daarom de audioapparaat-instellingen alvorens op een server in te loggen. From b09016d60da302a1cab67e25402c7890abb2ee43 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 7 Dec 2020 20:27:06 +0100 Subject: [PATCH 86/92] update translations --- src/res/translation/translation_es_ES.qm | Bin 101603 -> 104105 bytes src/res/translation/translation_fr_FR.qm | Bin 108571 -> 110939 bytes src/res/translation/translation_fr_FR.ts | 8 ++++---- src/res/translation/translation_nl_NL.qm | Bin 102995 -> 103005 bytes 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/res/translation/translation_es_ES.qm b/src/res/translation/translation_es_ES.qm index 67175dc89c10ece74316549f84828545a2751432..30f5382b8472dba01683a6de4ac05a1108ac3a10 100644 GIT binary patch delta 5894 zcma)A2~<>N|Ngyq?wx(X1wlm|*ANj=aY+*+B{o3?#4VJ88DJD=U>HCY88j$OqiodC z)XW9kKr<^V4VNUB%zZ&KaZ7Upcg0-3XJ)KU=Y0RgbLKpE?%ezSw&!`?7cVasud5P& z>^mlih&mA+3kTxkH4-=!m&@Fk(cX=xlYlWqt(OAh@W^I28V9@aOgS)~sI7)b7)KO! zcV51)tsLJH#uNF@BuXp-R=LsGjA-;%Smn4IAIXUd3yFShNBrDPL?g&+4P>Nh&GZGtKNRdAx^TsTS%72TP zwj)LDo=ueg4MiVVM8v9SXbBRWIgw)CKxdu>Q%nt77~@H?bE=6#H@op+EyXU}34)Z< z@KH!4{T9WK!N^V@pwZ7C5E(zCvDyG)Yzrlc+o3aaDanQhnCLd8L}d{DeuWB`+R=d~ zG;jB3M6<5Y{H@+ZMW4{}d<2@gdSJTLL0Ue~1Khy7{{D@}Ep=*oY zBxVethQ|IN*>xAPp{?j)m&-(VPch*xDiblLcrB1v^8-v(hYmIV%9>sMf|!>tdwuds zq7D~WMDQQPT5VxTm0F_wa+W&VLgXFBrX*ri)Q^=7^*~_*ZET(dl~;u`d)y0RmU6Z{ z{s?}5$yRLhB{raft!+AyNE*ayMqv^oJlRj5BoO^Fj{UT0Be4+1PCeQ~tl1CjV*E3V z<|4ZmUrj8361zJ~M${&lHMV_BEI;c^+fl)Ir)h3L^-w{oI>*y5{%_M z9;Or3e$ILB3nx0Yf@`Hl>!*vk_Lq?Pqw`$v_dWvY+HnH}wETV@H|TONqCfj_qf29n z^hdd|{V=k~ATIk)6R{?zxZKl4;KC`+HWh(>9my3xRufr{akEKJ^t3tWnEMWqt#Saj zG7^sBvym&G@iDPvF}J?Y0tC$F*01y>TC|GWsOd@6(#~ys3Rx+eahnDY0GSTCkd0{I zzR5&ql<#oW4P%G}Z{l`zMT@r#=5_^w+yQmm{%r;##h={eIE*OL#9h5@AvUy%duT0$ z{wv~K7gRfldt?KvXI|wR3kx7eFRta>{gCNzeA4QAVq-%2Nx_ik%$59< zwP%O|UgHZg?N0@T?Y@;SjD)i+HS;qrc7}d9enDezqBG;%*pR_59lM*T?|e6=&)`=V zAA=61eEEzBqIC&;MGPF~X)M3~crDSDau>3`tNF?e*cEIy`O3qX>B$oQiyuot8Zp1w zzZgTi!f*aL5HrZ@$REy}Pt>B;jn9Zb(jNiO>D^fWK3}^BI^&k}=j;cFw76d?4!gPyLqD-2M9*0NyXjij%jw`3vY=`dnK3nBbjCnCO1NYKC->Q)Mg zc39h*u0jS^LM)0GCJt0X_?$4Qw+~UreuCNQM3Fm$ydWel+9*stZ6Z3L6iOOS66+oz z%rdTm^%5RTYVUciI52`Ariw(@&79v>~-{I(jpNf4g(f-$75cjKde!t=l~qIY(Sg|08K zlUIm^Qs6Il#KOv0qO!|k=|zn4ek-w}&k3SF?})vNvFkirDsK5L3c2~4cxW$hA*e4dWqOxEES?criqiAbb+NNigliUz<4a;X<`vN^p?12EIRqRSX?^X3)}KJ@pAhU z=zEp8d?zgNcVBTu=}uxZ=87w`p@Nhf_QTQ^@)y0tyVo0uzD%??NL$#BKNnxuqOB|R z;(Pb7TCW!3`#Z;DPAkQaS_KmeUo3vy7GrpQqxhvyATddUgw4U07f~+ZuA!#a)21%dBDcD=POJdt@#QHUoxSD=M-4{wmdX5Lf z$5|vv{xaB+T{58&?H=`(Bq!+vF^>RAt{>W@R!H)l?PyXeDG`k)=5t3quB(jFte#HnzQG&&uHylf|p z{qiA*JO^ld2pg)9j%o?BSd}Er_^AfRk)3XQ?2u+VUwr$bG~4(y4sOe(*(albqooCR z%V1OW()XeoVMa3P`&nMl@Nww}6-e;O66pt9z9SkrT{NOzn_#&raGR4&hW@)(^vAkQ3!9ph=S+;n9fvDRDU(;|`3qz&?A zAEM&;p7M$WZ;bYqe7(LF99bx@ypP0NO_Og;{FZ2~ZJ+%6AOWUOA>Te1l@f z-3tNFD-_uajKsS6E3)hGV%T;?e%lvB4{{V!Zp34UYN?p>UJ7PASn=U?_<{uYkD>y%9&z)ymPD4TELh-u@LZKk7RJ#Q&}KY9rL-(k)RVtwu^ zeH(F_xLm00Qr{H*yjd9#kPH7GrHtAQPMkfejN2DNtarFFX`vcB-$LcYZ7nhLXywGq zfkdO;R%UL;?{6n6vwlZ_HF~Ax)DdEtpDRDPjD{7SR@(hgi0qcqG5rm2W4m%mJKIj2 zt5zw$Z@^5__9(Y8;MwNNABRA0(R-COqt6m)A1n87Mxbu1ln13SsGe5k!Fd+2`KatZvRRHd$6gHD`K`K&?5 zSBO+THe9fnNY!g2J>hh5s%|Y`5bGkS`rO=zb5pb`dQKTEwX?1 z)4t=}m_9@`(F>JbDpOe=)f0_9r^+9UL?-8`mMpwaY=T3zD#L`o$I4XY=^%B~r>eDs zt8tdMt8ANeBZ>8WUA5z0Ajq=9g)Ff`_2bS%MBmn__NJv03(Qd+O2PNBA*yRP!Diib z)s19)&#hG5?H@}N-9q)?t5{;bht-l7O);7=YOllfM4uL^{fdf+c05%3-CByjKqJ&a zp1#D!?o@}=L#|;Hr0UR;Swt0^?AJ8Dwm5})`fU7O@U?pSt#TwhR$Xkt!L!XCwcXQ6 z_G#)BPtd`@7j7K(K)r5p0=RctU45*K$nU6nZ?%b7_DyxIXJ4H4o2xHL;9tQZ>KjEU zc-NQeTeFeB$8z<9HkV*CI`!kqjZo!9_0y4uuo?Dis%bI?hZf}rnl?3lP*t9$UG!S0 z<%TAtLorcFOHJthdoaK%&CmjHvU`kX0vwy(OVsG*0INRMr2SHZ=R-7wC;Q>BQ=pl< zgu~vmL-V1;L?mggS?o2QSe8Sx+qoBo)@gRzK&c)rG{?)_kL9dNBXPUJ- zlU^H>Yc*)&4OXksl%8Y16VrT)aqu{~s51@OvNvY9O6Etg)Y-YRU6-ca5;E?4IqQeZ z4)#`QyVzT7d55oEPAamM{6=$wfSbtB$TF2HCrr(RBL8IpmsQ#kz>%BvkWG! zHN&9Ic~!kuZ`5U)(_L*z%`l`+a{a0|~|fYmKI?T&wm~0Aw&bhcG2MdEV zc5RlIr?YeaOPKEegfZt@|F1Y(SJ>E55l0oyI6WN0XR}t0p&glb*Z&d&MP)gMh@l%$ zB#7uL)8sgs#=M3F{yniUX9lUc7>mjJs=XklyYl~5bC$)B<9yWkYH9^JR>S12DetmF zOo%{;_=TNWYj)A@YxCNgQp&c8IFZLc>Dqgr_4%I~FVVV2k!g=V+`-u58BIZewvx$1x+Bc{-LAF{wRy3Ey_OD<7>ZQ)eb-3c$Ngp*rW7 zV^6MZY47@2ZeJPKLWEyj%A7h&>k_2njTw;VgTW;pe4 zWF|*#G4r))M;TxS`C6-`!1-XB5hkJ2=IJtx|0Z0ZHX*~QGeiErc{tgao?(Tp-gD30uMlM@42DoqVk{BSMuqIkmUWsaYnCoU#x_|lhLJ5aBSe}X z2Hzr+Wte2oGGob%X_y+cDCGO-{`LFk+dohD-gD09eV_Mzp7%Zb4{3_FYSy`o0RLJ7 zS5t`rK*J%#{y@K1cAU7#jyF#b2LPX>5C`!RwH+tzu;U#91_Q1ZKpq7I`>&ttVojX} zL_`5DUjaiCiHGbsDHa(1BcIaBj;|*I3l{=~3!z?f7`S#4>K)5~4nIM?>nEU61NC3) zfNFj&Ed-YML3T@GG-n~Vy$MX*1KD#g@WKhQcM?Q9cgVeLu;SJj$o;~A)D*~pogfA@ zhTMN21E~jjXkXxc0pt-(xkiG#jG?=FL*6X|cTN*)fb{8hyi*Q2%>!s|gPbt~V$2H2 zrIJ}iDLVE2KftsA0h@mY^f3r{$oqTjszuQx41pd? zfqH8Zn8XCiy%7}s5U5B&&?f6tW_$-h=NNg#WdzUd4bjAk;M|p@%mE?4Yyrd}^k2pR zt$7&Goy=6N#eh6g7(4@^tFr+=jU8WmA$0Q@Hpo7N4`Uz`12A|5OLnUzhQBWZCRJf% z({{iIGa@z3$jmcDT6uvGffye=1t{u?g()^N5QFu(JAmaqvGKSQu;3r;oXdkIZ@}KQ zEJ=AfzHfblneM|69`1lD0qJMijqd_+xK9Lxr#CKN&4=i_3)hl^cz=)`uf4?emZ1={ zw77XHndhB_^${7wjaK+$SZg5hPdwYw3u4mOD6Q%WT=%a<5i}d+ZHj=>4nls(%v3@c zK68ht+ftYwlA%f;QSZ+q5cLzp=U-ALpFR?S-hV+jnMLHmroe272`l3Pr@ms|P?ic^ zL~{Q+3~Y;4tXG(MdaAGus)2}IEp`qr;O`M)_bC^M&xQD*E)}Bn6nVo~iO?D1{DuhN zmt*4m;S7jwqs8rtpCKHa#N)y5*!|tbv%%RA@gd^n3LVhITU5DL0*$*$@`2`L=#``d zlrWK*l73(m5NB;987$S*kzyfQ-D88ktG`{BctACyc!8bE(tvwQRa( zQa72Dzw9dYEb;>0*ree}p}_cd(#S3>SzwYB_cj*7(m|SiCy~8yTe8mQL4`-8#g%4Y zMtf-`qRH5F>Dx7<*;D&BOQ}JWSK|z6-;#9@k>jLvpH0B)D^hx@3$Uq1%CK|V$BqYGDFU5HD3-_65%POVzDO+4&VJ zDV5DP{$wqRfHx}55gwRuMWx9rg_!+RRkws)J|s)kkipVj9GpWR-W6FT`i5 zs#!z5f$k4f%kEGWV`i#W2IrHCxJ|0f2fky6tWjmo{v2Zd3f2AQe88NesOJZk?Q)jv@W@VnL zGcUW7=$Tga)tHSygF-u2jZznM<$-r|?D+hNy6|U;N!qD?U}HYgHT7>CJ|bkb`q8~l zDWY8Uv$NF3^RLupZ+ZclKg;G1bc;pb)S__CksSkB>GzxD1}&3;s07)=H5#H}xZH8K zixpzz*K*f?N#M@@ayJuuSLZEvkNlCMIwkv7he1eja=^Qmfcl{vVWIjTyqAaCSgF0s zs-vTav%%)EH>dMV|iAZUP#~b37TiDnp)sClZ`0V; zY31M^1)8xAZD?1SnsJVQ(OrJkEYPSpfwpTBN0LdOahjy?hMc_*G&^l?DB>E;zBBZ_ zCkdLgq%#n6D>Mh=sHL%eZ4b2#^ly_jx#?4Z!OUYDXKmP zVZ5spyYl{^AGGR0L#ez8*R{sqN+8DMXzTpw3*76X^;q@?r^5w1z7NrM7{;LAP>JbFQ&!-KriRtzwC8ef2Xo9+2-O+0; z*lKyY(^qZ)(UWyKk+WF3>$(fBWVCZ5UB0ygBkZ50E1sWEg`CkjtkAvfnG8fu z*Gv9E5P=E$Pq%qgxk9^MOz9+wq_M`k~viA%-;7M^AprRX9-}UCxru zHs~h?sVQ+qKPCJkmFlmbQp|J8pr7)lk}ls;9~Lv}E^Yh1KKAK;2xqf?K@bC)s?l%% zh8Yh^(x*i@0lNeA>CuIB zrT&ToE79w${?>BFQTLes{*jO8&(#-uGX4lZ{ogtr&HFclI-QjtxYwXnh0vm$40T$# zQzC8#4=2Xywb#&jz)av#k{$oi7y|qjLwpf!80SqifPuJ<{CD7R?$nJ7*hIeWQD^F+tWgU zFFP1^_AKK*VXZA$8LE^CbK z+HsM@QDbnfl`T-%&N%3zFE^f4W8`KABE2+DJLSx!GtD@y$ep6H8DmcK_dc1%8GrDA zy*bAC+XWC)-x@a*k+8X$Mq6t$d;5j)+eO{E0$PmQnw{Z7V=|sBWl5r4ji&_h&UE8B ze~K%pxiN3}J)mi&@sc%@2f5W4uW0E*9#@T5*2nXO!^3!^pb=GBVf^zoTdtsm@vqrY zj6A{kGVVAB@n&OHy=!irmEQ{ZzS9CM2rGElj(PMyR41F0( zGcDs*6VsntCjFX6QEjy>yw!z^%1z6fZ4!OCzU3Pw7EnI1Y;70?@nvUA?#F@S=WWTg zvXk87EH{#Q&g1o#=ar#+^G_LQsi zx3u@X{*!DcR?*#5KD+!l4g=jWEeBaWFdr+S}LR=9SkLu z#I8YUL#eGrlt!v{`nNZtO6_9n{mo3TKE2OQ91!+^S0vV-X#^H@u$$Nn~*>=2+~IoT1w@Gm{qn&z>0ACip*{Oy1+4j5Wg zIK|Jty&W(z4)D7N#LT3(J|1fw0DQQcPC4ziOw<86Il#Rc;PbZww?e?Lo&$7T1pbS? zV2YFA?=A+@l!JeG5mC&6HBgv< zC1v%1xtFnK3OPzOqGS=ZL_QrG1Ad`Qzr&^wJs`=(mcx(1yo}i1ZzNbm51c$*0Tv&O zp9>;re;tp#m5ehjqQD&Uaduw;@S+y%*QtWIy%Tpv6U^s7MAh;>U>{$`!VD{m}um@lgo>L5u1E$%hb4u+iVC)>u>)8aLs+{vF4+HM3=Nf3J z^m90_=}jA$_?YW7ZxPVp53Ywmne$h;-nTk{sTOk|&LwnDyu*#{N-Y~w!KJ;nfVJq# zWnP#`Sa{6Yr;($3JGogeG(h%LE)Pjy%JG~te>`9>i{REpjG_qdaqDx5zu7_Dmd;Db z;cRZpIzM3TIj&UO9;m;ID}6<@@_Wr~@7IH{0JmimTXEl*sWSe0?!dz_V1oj=gTYkd zgRQv3dII+cC%6;)jDYeucWVT-$k3nr?GH*QDUW-Wkwg67VR1j8Dwcb0CsY^Za5XvE zBzF(FnvNVG^&O-vK5;QtJVs zef$ndh~3dnSS{Q%E|-g@X0IAjyd72=whOnR6kB_@Atk;|@ax8zDwI$+i$$qslepTb-eU7o_k# z-TWWShgQ!74$t7n4>|#6JjutFP|wp&@RK?cJr@M~^Q*>^a&@ot*vZ9w$*eO($Ikrv+;Ctw_zgp5 zQ*W2^TYe!4e#YFEMUCgTZH)y!8P0Dzy_DFN!teN=Dy@p+ciMwyQS&bIJ5TC?87=wK z<|TmdUAJZG@qA@>a`^jIkNs;5fAI$rByI(N)j=6@Kk>i%Q45lr^4BjnBQWLiRfmZ^ z?_TgvU-khGtrRqWk)C|A%xziQ%Ysk1kyvm<@NH257~2Z=5Pw3WUM;j=OLWUp2;Kjr z(rzsldZ;@9@<^d)>~5mnVj=X^P%z)CLf9LUV!lcksU>}QxJ`(0kizXu6H>T21g=V9 zVlNHd0VTquPL1f+Y#>-&f@D}EWVNNhCEJ8)7c7LOtHPXz=fDOe+lBe2Vsao8@+<{l zJsS!6r#>dBbP9{(&yaMs5FCM&!P^>P+4cXBkh~L|#UkAe3xwrc>7a)5Joc}{!m3qN zDRsWbRyQVlli0$9wX#E`FWy42neJzPm$0S$AXO$oI52DlNwnQ5lt;XwlI<5N6W);& zXA0-WyGmK(Fuio{u)1{p_K~h}yd-|Fl&(KSlK5?3V5{m$ zx1|vaa_ULTHpc_1)6#<@3B2_uxh>NcOOI?Z0S9>LvC9-_vvJb$G(GX(Z-umKp$}cZ zKS`@~RPwF7^zmbI7-5q>ITS}d%$GiI&=Kq-tMr9GwP@H~>0gcXU=8YvY$4r>L)wX4 z6&>h!Ci;9w>x=#r8x5UFLiR>%98Q>-kScaIM1d_nEOxG$3MLB^qx?(3BHM@~j&^Mh zwD%K7`Orqg=VEM-oD?fv{HTUnVf{)>k39?4EXJ`&?rU$CEEb$^P4qo0epXH(&)Xs{ zUC{?@V!pWi+5x(oqQw;|@-rz|^tAq{SajTv*jOWO4@d_()fK;8PGei0V)5`5Jq=c` z#qxR7kve~hH)2W2ePhHM-}EK~oE2}ryG@^$h__yS57x9)toHY#LPb52@grjBb}o{s zetkd#PJzs8cPMZ_Q&#JZ1KS2r zv)eM`64~hbBpY8cS<11aG@qPxTP8apOLOmQBTF-#q)Dz&mUb?ZgmU3vS@t7>N(d*L z7gL0^`1uEzG3W$99x0zC@L(Q%ANf>p0CFg6zv< zBn#ua$##hOU}39edlP4ZjV_QKJRb+9v&)VxrSo_1lWPt>0M4C|*KVBwHgJQyeue!r zns^V(gN8=|Q_snJc~RyY&d5U>P{|AW%Lg)V0{N%%u`feu9B3_1EPO_zUzR-a_dAsN z1-W?~Iby5jdC5&_o-LFw=;e}^rSig8RfNgq^39i56B4${cb=aL%$_U%>gVPJ!Akl5 zQ@_w4)>3}Z9!rs^ewH8ir;_$y@``p8;fSg7>S^}`5(gLr`Rm@4L6Wb6>mLD@ za8uE2C0!YP-YP=&lY`DqMfgcN@Odq_Wvsm-rsx1zY9~d~gxkQpbVbs$2VhIG6~+jj zR3S@|GOV0f9;f&yrJ5XxWr~!SFX(FURhY+JB5?hvu-x7Z)>fjJ9zg-6r7Ma)B@B$w zD>jU*N4?#n*phUSFrraxdqROXC{~ok>;ZO#E52)_UC8N;1%Sss(kI*j*3&> z)QNHZ73bzr9Dx$Wl^rhs4n=iaihrE1;+~u+k~~exZy_-l{Z=WH3?f-;p!904C(86v zhSaM7x^z-@8A6zUlHj%sh03tLv%uz$QbyM!4wc%JX&nv#fBdXWTWSL9r&Fd~t00U= zLOI3%9hhKMPQ4dRH(17JORqp#ypbOx-@^IgGzzKu0{L2$GWF#t2J){O* zf1#|b))2;@GS>sxkYMGdX&V9WZpzDBuM!JiDz6U;qcJB@d41RiglUu8GWk>GbN)U- z%wJXODT&3v6jhyF99So*s__h}Sf_H8-y(t{syuc`vC6L|i7K;O75JbQ>GKs;>(-gX z`r4|TYHn zO(7#ykJ8HM?jED6iKSL(tJUJDl{D5YQfn@5q)Pm$ZnTj~zGa2mGGiNct5H6rYhLO$ z^{K_7x$4fpmxAT}q#m@efb^4B+edGup3hHGyX_rcwQ(r*wEH5DogAm0SeG(;d`xY7 z{($sas-Du10!hzRuUz&7Y-*XhIK@K0kL9S>PY~(%+wSU3{SFXWuc@~iMo~+v)dwHz zfy_H@%dBCt3|D8qN#iO0Z?3_379z(_(`b=xW5W$dQsEX#}6z$UK9F&$Qc``={sjW z4UXp=*R*x*hcu~@-Nc=}ni+YtYDs;~jQi^;>?qAF8;zgsV>AvQf_$A0nzb*fjsv_r zHig%0UNMpoxI%N_OaYCb^)<&2Sith5H5YxlfHhCn+!RT)A`fWp&7`y|9%%08Q5MZ! zXr4B{N!qeq^I}^m-S}OuXkLw~pt=m!dXJ%*MKxC2_-FueYo4~rpiRWJENy7BSwOy0 z+xNs{5;wVaa5f>c-9GI{B-1FEr!_1jySJ7$`KP1Au^+WL=ep9Y(?y%Vk|ULFru|g3 z0AiSSMcp{Cg$=bw=>EZgYV8qw2ef5jeYC$6Y$C2r)BgS<3fL5-eeR_p&cthLI*$e7 zhG}cIQD$9|NgBS8?P}!xDo8RP1Dtj}Yq6_;&lquro7yLt_L)`CSk_L@T)rjl11oty;|c{0=KIs~}m2y}d6 zZpZq&Rykgo!`NW=)9lG3S*Yu2SAEMDN}lyWj5BvS^LMPtZ|+<$jWu%Cp3Ry%+jVEY zj@(i|(Gz!;^K^Sw*V*z5R?FeFpLgsS&pU6gWDO+r+EG!|#IdHdw*7rFxnr!EHeI?k zlY&n)*phUnbe+YTp_^j0O`;rhiB_A3^rGOEMYE z)(P(X6H|&lqfb70ZqxK2Nr^iD_LWDrzcYfP{>f20}?rspUk2laxUT1a0T+8(IqMv)Y<^5uV^V&)l?6CAy zjB}lACE8e#M*H8NLz`^$DZ{R269&*?vy`PR;&^lh{$nSMO3%#O9U8@f2u-2NUetgow))SWDoH8b6u{r~Bu zA zlZfq!CfR6AN-!i&(vzsQ)+HE|N#IBYEEX4yNf12Y7;O}CYhBA!k0$&>`+p(%Z;I>7 R>Xfh&#!O{<*RurfzW{}+x5NMd delta 4524 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 The current selected audio device is no longer present in the system. - Le périphérique audio actuellement sélectionné n'est plus présent dans le système. + Le périphérique audio actuellement sélectionné n'est plus présent dans le système. The audio input device is no longer available. - Le périphérique d'entrée audio n'est plus disponible. + Le périphérique d'entrée audio n'est plus disponible. The audio output device is no longer available. - Le périphérique de sortie audio n'est plus disponible. + Le périphérique de sortie audio n'est plus disponible. @@ -2810,7 +2810,7 @@ The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. - Le périphérique audio précédemment sélectionné n'est plus disponible ou les propriétés du pilote audio sont passées à un état incompatible avec ce logiciel. Nous essayons à présent de trouver un périphérique audio valide. Ce nouveau périphérique audio peut provoquer un retour audio. Aussi, avant de vous connecter à un serveur, veuillez vérifier le réglage du périphérique audio. + Le périphérique audio précédemment sélectionné n'est plus disponible ou les propriétés du pilote audio sont passées à un état incompatible avec ce logiciel. Nous essayons à présent de trouver un périphérique audio valide. Ce nouveau périphérique audio peut provoquer un retour audio. Aussi, avant de vous connecter à un serveur, veuillez vérifier le réglage du périphérique audio. diff --git a/src/res/translation/translation_nl_NL.qm b/src/res/translation/translation_nl_NL.qm index aa2a4d3a0bcd2e3319d812db79b970a6465de2d4..62e4e0f4d1cd5b972b433f66b5fb578597e3597a 100644 GIT binary patch delta 40 ycmV+@0N4N1qz2uj1{yrLWEjftoR!TX9KT?pz1^n(000GUY+p`Hfe^J20Yj2^Z4ih6 delta 30 ocmV+(0O9}Lqz2QZ1`s^BWEjftoR!TX9KT?pz1@KtwHg6KlHyhl6951J From dd4440265f75c52a3fb9ac79c90c8e0095c730ed Mon Sep 17 00:00:00 2001 From: Melcon Moraes Date: Tue, 8 Dec 2020 07:45:39 -0300 Subject: [PATCH 87/92] Update pt_BR translation for 3.6.2 --- src/res/translation/translation_pt_BR.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/res/translation/translation_pt_BR.ts b/src/res/translation/translation_pt_BR.ts index 4996a45718..3191319ee5 100644 --- a/src/res/translation/translation_pt_BR.ts +++ b/src/res/translation/translation_pt_BR.ts @@ -603,7 +603,7 @@ Input Level Meter - Medidor do Nível de Entrada + Indicador do Nível de Entrada The input level indicators show the input level of the two stereo channels of the current selected audio input. @@ -875,12 +875,12 @@ &Clear All Stored Solo and Mute Settings - + Limpar Todas as &Configurações de Solo e Mute Ok - Ok + Ok @@ -1054,7 +1054,7 @@ Your sound card is not working correctly. Please open the settings dialog and check the device selection and the driver settings. - + Sua placa de som não está funcionando corretamente. Por favor abra a janela de ajustes e verifique a seleção do dispositivo e as configurações de driver. @@ -3269,17 +3269,17 @@ The current selected audio device is no longer present in the system. - + O dispositivo de áudio selecionado não está mais presente no sistema. The audio input device is no longer available. - + O dispositivo de entrada de áudio não está mais disponível. The audio output device is no longer available. - + O dispositivo de saída de áudio não está mais disponível. @@ -3379,17 +3379,17 @@ The selected audio device could not be used because of the following error: - O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: + O dispositivo de áudio selecionado não pôde ser usado devido ao seguinte erro: The previous driver will be selected. - O driver anterior será selecionado. + O driver anterior será selecionado. The previously selected audio device is no longer available or the audio driver properties have changed to a state which is incompatible with this software. We now try to find a valid audio device. This new audio device might cause audio feedback. So, before connecting to a server, please check the audio device setting. - + O dispositivo de áudio selecionado anteriormente não está mais disponível ou as propriedades do driver de áudio foram alteradas para um estado o qual é incompatível com este software. Tentaremos encontrar um dispositivo de áudio válido. Este novo dispositivo poderá causar realimentação de áudio. Portanto, antes de conectar-se a um servidor, confira as configurações do dispositivo. From abd2757a5022516ed19b5d028ca6d96dd5d9d90c Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Wed, 9 Dec 2020 16:10:57 +0000 Subject: [PATCH 88/92] Add scaling to SVG graph --- tools/jamulus-historytool | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/jamulus-historytool b/tools/jamulus-historytool index fbe07542e1..d5ef80df8f 160000 --- a/tools/jamulus-historytool +++ b/tools/jamulus-historytool @@ -1 +1 @@ -Subproject commit fbe07542e1d2824b1290cb6f760704b9d826f680 +Subproject commit d5ef80df8f2f2b31fa20e78343e8e31acf60c009 From be374f63df54938412e05f1836e0d95e07be4bfc Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Wed, 9 Dec 2020 18:14:02 +0000 Subject: [PATCH 89/92] Rewrite to support RPP and LOF recovery --- tools/jamulus-jamexporter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/jamulus-jamexporter b/tools/jamulus-jamexporter index e437078788..aad0012014 160000 --- a/tools/jamulus-jamexporter +++ b/tools/jamulus-jamexporter @@ -1 +1 @@ -Subproject commit e4370787888ced855eadddc155fa791418b8644d +Subproject commit aad00120143448134ac51f4bc07fb6e874744395 From 0c70052acedafa1653a065fc3f1fe1cbbfc14adb Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 12 Dec 2020 17:17:21 +0100 Subject: [PATCH 90/92] update translation --- src/res/translation/translation_pt_BR.qm | Bin 104235 -> 106645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/res/translation/translation_pt_BR.qm b/src/res/translation/translation_pt_BR.qm index f14c0cafd3565efd7a2c97489b054fe92109b1d2..9b84e007f77f3f86a71ecfef133112c179018e56 100644 GIT binary patch delta 5810 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 Heh~c|@>s>> delta 4322 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 DE=v}2 From 337a48400538ebcb5e40b02c437a22f7d74abdfe Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 12 Dec 2020 17:50:44 +0100 Subject: [PATCH 91/92] r3_6_2 --- ChangeLog | 11 +++-------- Jamulus.pro | 2 +- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 89594c48be..fb56e39629 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,12 @@ +3.6.2git <- NOTE: the release version number will be 3.6.3 -3.6.1git <- NOTE: the release version number will be 3.6.2 + +3.6.2 (2020-12-12) - change Clear All Stored Solo Settings to clear Mute as well (#731) @@ -30,13 +32,6 @@ - bug fix: ping times of servers which are further down the server list are too high (#49) - - - - - - - 3.6.1 (2020-11-21) - added menu entry "Set All Faders to New Client Level" (#622) diff --git a/Jamulus.pro b/Jamulus.pro index 333260665f..0c35f32171 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -1,4 +1,4 @@ -VERSION = 3.6.1git +VERSION = 3.6.2 # use target name which does not use a captital letter at the beginning contains(CONFIG, "noupcasename") { From 911e486303fbb749cf0ea061c7b887b6b12caed8 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 12 Dec 2020 18:35:52 +0100 Subject: [PATCH 92/92] prepare for next version --- Jamulus.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jamulus.pro b/Jamulus.pro index 0c35f32171..db1e8afa0c 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -1,4 +1,4 @@ -VERSION = 3.6.2 +VERSION = 3.6.2git # use target name which does not use a captital letter at the beginning contains(CONFIG, "noupcasename") {