From ebda8f9bbeef0ef676de00e538dc7b583a0db5f8 Mon Sep 17 00:00:00 2001 From: Simon Tomlinson Date: Thu, 16 Apr 2020 17:40:40 +0100 Subject: [PATCH 001/125] Added oboe sub module --- .gitmodules | 3 +++ libs/oboe | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 libs/oboe diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..3f550c73 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "libs/oboe"] + path = libs/oboe + url = https://github.com/google/oboe.git diff --git a/libs/oboe b/libs/oboe new file mode 160000 index 00000000..55d878a4 --- /dev/null +++ b/libs/oboe @@ -0,0 +1 @@ +Subproject commit 55d878a4e85e1994f2b5883366079b991500a25f From 31341e7de9966c7a726a2cc3416fe678d28803fe Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 26 Apr 2020 15:11:57 +0200 Subject: [PATCH 002/125] revert commit "use a stacked widget for the mixer board, preparing for some tests, maybe removed later if it does not seem to work for the test" since we should not used StackedWidget for that purpose --- src/clientdlgbase.ui | 42 ++++++------------------------------------ 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/src/clientdlgbase.ui b/src/clientdlgbase.ui index 3794e7a4..48b04c53 100755 --- a/src/clientdlgbase.ui +++ b/src/clientdlgbase.ui @@ -548,43 +548,13 @@ - - - QFrame::NoFrame + + + + 0 + 0 + - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - - - From 30c2bddd03337571d178dd1029d27ca1504a1bb9 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 26 Apr 2020 15:27:14 +0200 Subject: [PATCH 003/125] bug fix: isHidden is better than isVisible since we need the correct state even if the window is covered by other windows --- src/audiomixerboard.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index f5d04393..d8ecb871 100755 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -52,7 +52,7 @@ public: void SetChannelInfos ( const CChannelInfo& cChanInfo ); void Show() { pFrame->show(); } void Hide() { pFrame->hide(); } - bool IsVisible() { return plblLabel->isVisible(); } + bool IsVisible() { return !pFrame->isHidden(); } bool IsSolo() { return pcbSolo->isChecked(); } bool IsMute() { return pcbMute->isChecked(); } void SetGUIDesign ( const EGUIDesign eNewDesign ); From 9f7fc16ac389ca91c198110fff0f5a6a646eb46c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 26 Apr 2020 16:20:21 +0200 Subject: [PATCH 004/125] fixed compiler warnings --- src/audiomixerboard.cpp | 8 +------- src/client.cpp | 32 ++++++++++++++++---------------- src/server.cpp | 22 +++++++++++----------- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index c1ca9713..4bc949f6 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -713,13 +713,7 @@ void CAudioMixerBoard::SetServerName ( const QString& strNewServerName ) // list was received, the connection was successful and the title is updated // with the correct server name. Make sure to choose a "try to connect" title // which is most striking (we use filled blocks and upper case letters). - QByteArray baBlock; - baBlock.append ( 0xE2 ); - baBlock.append ( 0x96 ); - baBlock.append ( 0x88 ); - QString sBlocks = QString().fromUtf8 ( baBlock ).repeated ( 5 ); - - pGroupBox->setTitle ( sBlocks + " T R Y I N G T O C O N N E C T " + sBlocks ); + pGroupBox->setTitle ( u8"\u2588\u2588\u2588\u2588\u2588 T R Y I N G T O C O N N E C T \u2588\u2588\u2588\u2588\u2588" ); } } diff --git a/src/client.cpp b/src/client.cpp index 515bc012..fd98749a 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -945,7 +945,7 @@ vecsMultChanAudioSndCrd = vecsStereoSndCrdTMP; // TEST just copy the stereo data void CClient::ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ) { - int i, j; + int i, j, iUnused; unsigned char* pCurCodedData; @@ -1094,19 +1094,19 @@ void CClient::ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ) { if ( bMuteOutStream ) { - opus_custom_encode ( CurOpusEncoder, - &vecZeros[i * iNumAudioChannels * iOPUSFrameSizeSamples], - iOPUSFrameSizeSamples, - &vecCeltData[0], - iCeltNumCodedBytes ); + iUnused = opus_custom_encode ( CurOpusEncoder, + &vecZeros[i * iNumAudioChannels * iOPUSFrameSizeSamples], + iOPUSFrameSizeSamples, + &vecCeltData[0], + iCeltNumCodedBytes ); } else { - opus_custom_encode ( CurOpusEncoder, - &vecsStereoSndCrd[i * iNumAudioChannels * iOPUSFrameSizeSamples], - iOPUSFrameSizeSamples, - &vecCeltData[0], - iCeltNumCodedBytes ); + iUnused = opus_custom_encode ( CurOpusEncoder, + &vecsStereoSndCrd[i * iNumAudioChannels * iOPUSFrameSizeSamples], + iOPUSFrameSizeSamples, + &vecCeltData[0], + iCeltNumCodedBytes ); } } @@ -1150,11 +1150,11 @@ void CClient::ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ) // OPUS decoding if ( CurOpusDecoder != nullptr ) { - opus_custom_decode ( CurOpusDecoder, - pCurCodedData, - iCeltNumCodedBytes, - &vecsStereoSndCrd[i * iNumAudioChannels * iOPUSFrameSizeSamples], - iOPUSFrameSizeSamples ); + iUnused = opus_custom_decode ( CurOpusDecoder, + pCurCodedData, + iCeltNumCodedBytes, + &vecsStereoSndCrd[i * iNumAudioChannels * iOPUSFrameSizeSamples], + iOPUSFrameSizeSamples ); } } diff --git a/src/server.cpp b/src/server.cpp index d3658c0c..36a3e3e0 100755 --- a/src/server.cpp +++ b/src/server.cpp @@ -942,7 +942,7 @@ void CServer::Stop() void CServer::OnTimer() { - int i, j; + int i, j, iUnused; int iClientFrameSizeSamples; OpusCustomDecoder* CurOpusDecoder; OpusCustomEncoder* CurOpusEncoder; @@ -1095,11 +1095,11 @@ JitterMeas.Measure(); // OPUS decode received data stream if ( CurOpusDecoder != nullptr ) { - opus_custom_decode ( CurOpusDecoder, - pCurCodedData, - iCeltNumCodedBytes, - &vecvecsData[i][iB * SYSTEM_FRAME_SIZE_SAMPLES * vecNumAudioChannels[i]], - iClientFrameSizeSamples ); + iUnused = opus_custom_decode ( CurOpusDecoder, + pCurCodedData, + iCeltNumCodedBytes, + &vecvecsData[i][iB * SYSTEM_FRAME_SIZE_SAMPLES * vecNumAudioChannels[i]], + iClientFrameSizeSamples ); } } @@ -1242,11 +1242,11 @@ JitterMeas.Measure(); opus_custom_encoder_ctl ( CurOpusEncoder, OPUS_SET_BITRATE ( CalcBitRateBitsPerSecFromCodedBytes ( iCeltNumCodedBytes, iClientFrameSizeSamples ) ) ); - opus_custom_encode ( CurOpusEncoder, - &vecsSendData[iB * SYSTEM_FRAME_SIZE_SAMPLES * vecNumAudioChannels[i]], - iClientFrameSizeSamples, - &vecbyCodedData[0], - iCeltNumCodedBytes ); + iUnused = opus_custom_encode ( CurOpusEncoder, + &vecsSendData[iB * SYSTEM_FRAME_SIZE_SAMPLES * vecNumAudioChannels[i]], + iClientFrameSizeSamples, + &vecbyCodedData[0], + iCeltNumCodedBytes ); } // send separate mix to current clients From 664429b309ee333895ec4eb984e2235c230c42b2 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 26 Apr 2020 16:39:55 +0200 Subject: [PATCH 005/125] added GetCategory to CInstPictures class --- ChangeLog | 2 ++ src/util.cpp | 14 ++++++++++++++ src/util.h | 7 ++++--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index e535cda6..b2cf2524 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ + + 3.5.3git TODO improve input channel mapping and introduce input/output gains with overrange to amplification (separate dialog, replace Pan, etc.) diff --git a/src/util.cpp b/src/util.cpp index d7d6bc7e..6c0fb46a 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -1006,6 +1006,20 @@ QString CInstPictures::GetName ( const int iInstrument ) } } +CInstPictures::EInstCategory CInstPictures::GetCategory ( const int iInstrument ) +{ + // range check + if ( IsInstIndexInRange ( iInstrument ) ) + { + // return the name of the instrument + return GetTable()[iInstrument].eInstCategory; + } + else + { + return IC_OTHER_INSTRUMENT; + } +} + // Locale management class ----------------------------------------------------- QString CLocale::GetCountryFlagIconsResourceReference ( const QLocale::Country eCountry ) diff --git a/src/util.h b/src/util.h index 99fff348..324059a3 100755 --- a/src/util.h +++ b/src/util.h @@ -761,9 +761,10 @@ public: static int GetNotUsedInstrument() { return 0; } static bool IsNotUsedInstrument ( const int iInstrument ) { return iInstrument == 0; } - static int GetNumAvailableInst() { return GetTable().Size(); } - static QString GetResourceReference ( const int iInstrument ); - static QString GetName ( const int iInstrument ); + static int GetNumAvailableInst() { return GetTable().Size(); } + static QString GetResourceReference ( const int iInstrument ); + static QString GetName ( const int iInstrument ); + static EInstCategory GetCategory ( const int iInstrument ); // TODO make use of instrument category (not yet implemented) From bef58357ef1f8c1138af32a7850d35405f79cfa7 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 26 Apr 2020 19:11:54 +0200 Subject: [PATCH 006/125] update --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index b2cf2524..c3f60727 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,8 @@ TODO support internationalization TODO sometimes I cannot see the central server in the server list +TODO implement panning for channels (Ticket #52, #145) + From fc3a33dc4204883d528b3aa6490ec87a37615e15 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 30 Apr 2020 16:16:59 +0200 Subject: [PATCH 007/125] merge the fixes from the feature_sndcrdmixer branch --- ChangeLog | 12 +++++++++- linux/sound.cpp | 62 +++++++++++++++++++------------------------------ src/client.cpp | 2 +- src/clientdlg.h | 2 +- src/util.h | 2 +- 5 files changed, 38 insertions(+), 42 deletions(-) diff --git a/ChangeLog b/ChangeLog index c3f60727..c063fb93 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,16 +2,26 @@ + + 3.5.3git -TODO improve input channel mapping and introduce input/output gains with overrange to amplification (separate dialog, replace Pan, etc.) + * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) + + +TODO improve help menu, see https://github.com/corrados/jamulus/issues/90 TODO support internationalization +TODO standard style: meter bar gets smaller sometimes if board is full and fader text is short + TODO sometimes I cannot see the central server in the server list +TODO server: warning if Central server selected but OS location is different (e.g. US) -> warning in GUI and command line + TODO implement panning for channels (Ticket #52, #145) +TODO show mute state of others diff --git a/linux/sound.cpp b/linux/sound.cpp index be46d83c..0bb5fb9c 100755 --- a/linux/sound.cpp +++ b/linux/sound.cpp @@ -34,7 +34,7 @@ void CSound::OpenJack() // try to become a client of the JACK server pJackClient = jack_client_open ( APP_NAME, JackNullOption, &JackStatus ); - if ( pJackClient == NULL ) + if ( pJackClient == nullptr ) { throw CGenErr ( tr ( "The Jack server is not running. This software " "requires a Jack server to run. Normally if the Jack server is " @@ -79,10 +79,10 @@ void CSound::OpenJack() output_port_right = jack_port_register ( pJackClient, "output right", JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0 ); - if ( ( input_port_left == NULL ) || - ( input_port_right == NULL ) || - ( output_port_left == NULL ) || - ( output_port_right == NULL ) ) + if ( ( input_port_left == nullptr ) || + ( input_port_right == nullptr ) || + ( output_port_left == nullptr ) || + ( output_port_right == nullptr ) ) { throw CGenErr ( tr ( "The Jack port registering failed." ) ); } @@ -93,14 +93,14 @@ void CSound::OpenJack() input_port_midi = jack_port_register ( pJackClient, "input midi", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0 ); - if ( input_port_midi == NULL ) + if ( input_port_midi == nullptr ) { throw CGenErr ( tr ( "The Jack port registering failed." ) ); } } else { - input_port_midi = NULL; + input_port_midi = nullptr; } // tell the JACK server that we are ready to roll @@ -119,23 +119,16 @@ void CSound::OpenJack() // try to connect physical input ports if ( ( ports = jack_get_ports ( pJackClient, - NULL, - NULL, - JackPortIsPhysical | JackPortIsOutput ) ) != NULL ) + nullptr, + nullptr, + JackPortIsPhysical | JackPortIsOutput ) ) != nullptr ) { - if ( jack_connect ( pJackClient, ports[0], jack_port_name ( input_port_left ) ) ) - { - throw CGenErr ( tr ( "Cannot connect the Jack input ports" ) ); - } + jack_connect ( pJackClient, ports[0], jack_port_name ( input_port_left ) ); - // before connecting the second stereo channel, check if the input is not - // mono + // before connecting the second stereo channel, check if the input is not mono if ( ports[1] ) { - if ( jack_connect ( pJackClient, ports[1], jack_port_name ( input_port_right ) ) ) - { - throw CGenErr ( tr ( "Cannot connect the Jack input ports" ) ); - } + jack_connect ( pJackClient, ports[1], jack_port_name ( input_port_right ) ); } jack_free ( ports ); @@ -143,23 +136,16 @@ void CSound::OpenJack() // try to connect physical output ports if ( ( ports = jack_get_ports ( pJackClient, - NULL, - NULL, - JackPortIsPhysical | JackPortIsInput ) ) != NULL ) + nullptr, + nullptr, + JackPortIsPhysical | JackPortIsInput ) ) != nullptr ) { - if ( jack_connect ( pJackClient, jack_port_name ( output_port_left ), ports[0] ) ) - { - throw CGenErr ( tr ( "Cannot connect the Jack output ports." ) ); - } + jack_connect ( pJackClient, jack_port_name ( output_port_left ), ports[0] ); - // before connecting the second stereo channel, check if the output is not - // mono + // before connecting the second stereo channel, check if the output is not mono if ( ports[1] ) { - if ( jack_connect ( pJackClient, jack_port_name ( output_port_right ), ports[1] ) ) - { - throw CGenErr ( tr ( "Cannot connect the Jack output ports." ) ); - } + jack_connect ( pJackClient, jack_port_name ( output_port_right ), ports[1] ); } jack_free ( ports ); @@ -230,7 +216,7 @@ int CSound::process ( jack_nframes_t nframes, void* arg ) CSound* pSound = static_cast ( arg ); int i; - if ( pSound->IsRunning() ) + if ( pSound->IsRunning() && ( nframes == static_cast ( pSound->iJACKBufferSizeMono ) ) ) { // get input data pointer jack_default_audio_sample_t* in_left = @@ -242,7 +228,7 @@ int CSound::process ( jack_nframes_t nframes, void* arg ) pSound->input_port_right, nframes ); // copy input audio data - if ( in_left != 0 && in_right != 0 ) + if ( ( in_left != nullptr ) && ( in_right != nullptr ) ) { for ( i = 0; i < pSound->iJACKBufferSizeMono; i++ ) { @@ -267,7 +253,7 @@ int CSound::process ( jack_nframes_t nframes, void* arg ) pSound->output_port_right, nframes ); // copy output data - if ( out_left != 0 && out_right != 0 ) + if ( ( out_left != nullptr ) && ( out_right != nullptr ) ) { for ( i = 0; i < pSound->iJACKBufferSizeMono; i++ ) { @@ -291,7 +277,7 @@ int CSound::process ( jack_nframes_t nframes, void* arg ) pSound->output_port_right, nframes ); // clear output data - if ( out_left != 0 && out_right != 0 ) + if ( ( out_left != nullptr ) && ( out_right != nullptr ) ) { memset ( out_left, 0, @@ -304,7 +290,7 @@ int CSound::process ( jack_nframes_t nframes, void* arg ) } // akt on MIDI data if MIDI is enabled - if ( pSound->input_port_midi != NULL ) + if ( pSound->input_port_midi != nullptr ) { void* in_midi = jack_port_get_buffer ( pSound->input_port_midi, nframes ); diff --git a/src/client.cpp b/src/client.cpp index fd98749a..79174821 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -957,7 +957,7 @@ void CClient::ProcessAudioDataIntern ( CVector& vecsStereoSndCrd ) if ( iReverbLevel != 0 ) { // calculate attenuation amplification factor - const double dRevLev = static_cast ( iReverbLevel ) / AUD_REVERB_MAX / 2; + const double dRevLev = static_cast ( iReverbLevel ) / AUD_REVERB_MAX / 4; if ( eAudioChannelConf == CC_STEREO ) { diff --git a/src/clientdlg.h b/src/clientdlg.h index 5d265574..ddd284fd 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -102,7 +102,7 @@ protected: QTimer TimerStatus; QTimer TimerPing; - virtual void closeEvent ( QCloseEvent* Event ); + virtual void closeEvent ( QCloseEvent* Event ); void UpdateDisplay(); QMenu* pViewMenu; diff --git a/src/util.h b/src/util.h index 324059a3..8633c012 100755 --- a/src/util.h +++ b/src/util.h @@ -657,7 +657,7 @@ public: void Update ( const CVector& vecsAudio ); double MicLeveldBLeft() { return CalcLogResult ( dCurLevelL ); } double MicLeveldBRight() { return CalcLogResult ( dCurLevelR ); } - static double CalcLogResult ( const double& dLinearLevel ); + static double CalcLogResult ( const double& dLinearLevel ); void Reset() { From 07ae963cfa5bdfafed753c5e3d86f354ad556b00 Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Sun, 26 Apr 2020 13:57:14 +0100 Subject: [PATCH 008/125] Add some logging to the central server --- src/serverlist.cpp | 28 ++++++++++++++++++++++------ src/serverlist.h | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/serverlist.cpp b/src/serverlist.cpp index c9127059..69839a22 100755 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -36,7 +36,8 @@ CServerListManager::CServerListManager ( const quint16 iNPortNum, bCentServPingServerInList ( bNCentServPingServerInList ), pConnLessProtocol ( pNConLProt ), eSvrRegStatus ( SRS_UNREGISTERED ), - iSvrRegRetries ( 0 ) + iSvrRegRetries ( 0 ), + tsConsoleStream ( *( ( new ConsoleWriterFactory() )->get() ) ) { // set the central server address SetCentralServerAddress ( sNCentServAddr ); @@ -307,6 +308,8 @@ void CServerListManager::OnTimerPingServerInList() void CServerListManager::OnTimerPollList() { + CVector removals; + QMutexLocker locker ( &Mutex ); // Check all list entries except of the very first one (which is the central @@ -319,6 +322,7 @@ void CServerListManager::OnTimerPollList() if ( ServerList[iIdx].RegisterTime.elapsed() > ( SERVLIST_TIME_OUT_MINUTES * 60000 ) ) { // remove this list entry + removals.Add ( ServerList[iIdx].HostAddr ); ServerList.removeAt ( iIdx ); } else @@ -327,16 +331,26 @@ void CServerListManager::OnTimerPollList() iIdx++; } } + locker.unlock(); + foreach ( const CHostAddress HostAddr , removals ) + { + tsConsoleStream << "Expired entry for " + << HostAddr.toString() << endl; + } } void CServerListManager::CentralServerRegisterServer ( const CHostAddress& InetAddr, const CHostAddress& LInetAddr, const CServerCoreInfo& ServerInfo ) { - QMutexLocker locker ( &Mutex ); - if ( bIsCentralServer && bEnabled ) { + tsConsoleStream << "Requested to register entry for " + << InetAddr.toString() << " (" << LInetAddr.toString() << ")" + << ": " << ServerInfo.strName << endl; + + QMutexLocker locker ( &Mutex ); + const int iCurServerListSize = ServerList.size(); // define invalid index used as a flag @@ -394,10 +408,13 @@ void CServerListManager::CentralServerRegisterServer ( const CHostAddress& In void CServerListManager::CentralServerUnregisterServer ( const CHostAddress& InetAddr ) { - QMutexLocker locker ( &Mutex ); - if ( bIsCentralServer && bEnabled ) { + tsConsoleStream << "Requested to unregister entry for " + << InetAddr.toString() << endl; + + QMutexLocker locker ( &Mutex ); + const int iCurServerListSize = ServerList.size(); // Find the server to unregister in the list. The very first list entry @@ -587,7 +604,6 @@ void CServerListManager::SlaveServerRegisterServer ( const bool bIsRegister ) void CServerListManager::SetSvrRegStatus ( ESvrRegStatus eNSvrRegStatus ) { // output regirstation result/update on the console - QTextStream& tsConsoleStream = *( ( new ConsoleWriterFactory() )->get() ); tsConsoleStream << "Server Registration Status update: " << svrRegStatusToString ( eNSvrRegStatus ) << endl; // store the state and inform the GUI about the new status diff --git a/src/serverlist.h b/src/serverlist.h index 2c77055f..5c6ca70e 100755 --- a/src/serverlist.h +++ b/src/serverlist.h @@ -207,6 +207,8 @@ protected: // count of registration retries int iSvrRegRetries; + QTextStream& tsConsoleStream; + public slots: void OnTimerPollList(); void OnTimerPingServerInList(); From 1494de7b05674d0b8815e9950e69b4486f7b43a8 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 30 Apr 2020 19:26:04 +0200 Subject: [PATCH 009/125] small merge fixes --- ChangeLog | 4 ++-- src/serverlist.cpp | 17 +++++++++-------- src/serverlist.h | 3 +-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index c063fb93..1ec5476d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,8 @@ * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) +TODO implement panning for channels (Ticket #52, #145) + TODO improve help menu, see https://github.com/corrados/jamulus/issues/90 TODO support internationalization @@ -19,8 +21,6 @@ TODO sometimes I cannot see the central server in the server list TODO server: warning if Central server selected but OS location is different (e.g. US) -> warning in GUI and command line -TODO implement panning for channels (Ticket #52, #145) - TODO show mute state of others diff --git a/src/serverlist.cpp b/src/serverlist.cpp index 69839a22..dc79c603 100755 --- a/src/serverlist.cpp +++ b/src/serverlist.cpp @@ -31,13 +31,13 @@ CServerListManager::CServerListManager ( const quint16 iNPortNum, const int iNumChannels, const bool bNCentServPingServerInList, CProtocol* pNConLProt ) - : iNumPredefinedServers ( 0 ), + : tsConsoleStream ( *( ( new ConsoleWriterFactory() )->get() ) ), + iNumPredefinedServers ( 0 ), eCentralServerAddressType ( AT_MANUAL ), // must be AT_MANUAL for the "no GUI" case bCentServPingServerInList ( bNCentServPingServerInList ), pConnLessProtocol ( pNConLProt ), eSvrRegStatus ( SRS_UNREGISTERED ), - iSvrRegRetries ( 0 ), - tsConsoleStream ( *( ( new ConsoleWriterFactory() )->get() ) ) + iSvrRegRetries ( 0 ) { // set the central server address SetCentralServerAddress ( sNCentServAddr ); @@ -308,7 +308,7 @@ void CServerListManager::OnTimerPingServerInList() void CServerListManager::OnTimerPollList() { - CVector removals; + CVector vecRemovedHostAddr; QMutexLocker locker ( &Mutex ); @@ -322,7 +322,7 @@ void CServerListManager::OnTimerPollList() if ( ServerList[iIdx].RegisterTime.elapsed() > ( SERVLIST_TIME_OUT_MINUTES * 60000 ) ) { // remove this list entry - removals.Add ( ServerList[iIdx].HostAddr ); + vecRemovedHostAddr.Add ( ServerList[iIdx].HostAddr ); ServerList.removeAt ( iIdx ); } else @@ -331,11 +331,12 @@ void CServerListManager::OnTimerPollList() iIdx++; } } + locker.unlock(); - foreach ( const CHostAddress HostAddr , removals ) + + foreach ( const CHostAddress HostAddr, vecRemovedHostAddr ) { - tsConsoleStream << "Expired entry for " - << HostAddr.toString() << endl; + tsConsoleStream << "Expired entry for " << HostAddr.toString() << endl; } } diff --git a/src/serverlist.h b/src/serverlist.h index 5c6ca70e..decf9d72 100755 --- a/src/serverlist.h +++ b/src/serverlist.h @@ -186,6 +186,7 @@ protected: QTimer TimerCLRegisterServerResp; QMutex Mutex; + QTextStream& tsConsoleStream; QList ServerList; @@ -207,8 +208,6 @@ protected: // count of registration retries int iSvrRegRetries; - QTextStream& tsConsoleStream; - public slots: void OnTimerPollList(); void OnTimerPingServerInList(); From 0d517654d6ea6402fbd9b8b4a521e554db79cfa9 Mon Sep 17 00:00:00 2001 From: newlaurent62 Date: Thu, 30 Apr 2020 20:48:48 +0200 Subject: [PATCH 010/125] Set the clientdlg window title and jack client name --- android/sound.cpp | 11 ++++++----- android/sound.h | 9 +++++---- linux/sound.cpp | 4 ++-- linux/sound.h | 19 ++++++++++--------- mac/sound.cpp | 5 +++-- mac/sound.h | 9 +++++---- src/client.cpp | 11 ++++++++--- src/client.h | 10 +++++++++- src/clientdlg.cpp | 8 ++++---- src/clientdlg.h | 1 + src/main.cpp | 21 ++++++++++++++++++--- src/soundbase.cpp | 6 ++++-- src/soundbase.h | 4 +++- windows/sound.cpp | 5 +++-- windows/sound.h | 4 +++- 15 files changed, 84 insertions(+), 43 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index d1fe9d61..220a1ae9 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -26,11 +26,12 @@ /* Implementation *************************************************************/ -CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ) : - CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect ) +CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : + CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ) { } diff --git a/android/sound.h b/android/sound.h index 4af7353c..2f888b01 100644 --- a/android/sound.h +++ b/android/sound.h @@ -35,10 +35,11 @@ class CSound : public CSoundBase { public: - CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ); + CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ); virtual ~CSound() {} virtual int Init ( const int iNewPrefMonoBufferSize ); diff --git a/linux/sound.cpp b/linux/sound.cpp index 0bb5fb9c..a84e4139 100755 --- a/linux/sound.cpp +++ b/linux/sound.cpp @@ -27,12 +27,12 @@ #include "sound.h" #ifdef WITH_SOUND -void CSound::OpenJack() +void CSound::OpenJack(char* jackClientName) { jack_status_t JackStatus; // try to become a client of the JACK server - pJackClient = jack_client_open ( APP_NAME, JackNullOption, &JackStatus ); + pJackClient = jack_client_open ( jackClientName, JackNullOption, &JackStatus ); if ( pJackClient == nullptr ) { diff --git a/linux/sound.h b/linux/sound.h index 0b03c275..620ead89 100755 --- a/linux/sound.h +++ b/linux/sound.h @@ -63,9 +63,9 @@ public: CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ) : - CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect ), iJACKBufferSizeMono ( 0 ), - iJACKBufferSizeStero ( 0 ) { OpenJack(); } + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : + CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), iJACKBufferSizeMono ( 0 ) { OpenJack( strJackClientName.toLocal8Bit().data() ); } virtual ~CSound() { CloseJack(); } virtual int Init ( const int iNewPrefMonoBufferSize ); @@ -85,7 +85,7 @@ public: jack_port_t* input_port_midi; protected: - void OpenJack(); + void OpenJack(char* jackClientName); void CloseJack(); // callbacks @@ -99,11 +99,12 @@ protected: class CSound : public CSoundBase { public: - CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), - void* pParg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ) : - CSoundBase ( "nosound", false, fpNewProcessCallback, pParg, iCtrlMIDIChannel, bNoAutoJackConnect ) {} + CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), + void* pParg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : + CSoundBase ( "nosound", false, fpNewProcessCallback, pParg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ) {} virtual ~CSound() {} }; #endif // WITH_SOUND diff --git a/mac/sound.cpp b/mac/sound.cpp index d3cdf322..1b022708 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -29,8 +29,9 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ) : - CSoundBase ( "CoreAudio", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect ), + const bool bNoAutoJackConnect, + QString& strJackClientName ) : + CSoundBase ( "CoreAudio", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), midiInPortRef ( static_cast ( NULL ) ) { // Apple Mailing Lists: Subject: GUI Apps should set kAudioHardwarePropertyRunLoop diff --git a/mac/sound.h b/mac/sound.h index 67ae10da..6ef1093e 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -36,10 +36,11 @@ class CSound : public CSoundBase { public: - CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ); + CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ); virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); diff --git a/src/client.cpp b/src/client.cpp index 79174821..2c55d6b7 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -29,7 +29,8 @@ CClient::CClient ( const quint16 iPortNumber, const QString& strConnOnStartupAddress, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ) : + const bool bNoAutoJackConnect, + const QString& strClientName ) : vstrIPAddress ( MAX_NUM_SERVER_ADDR_ITEMS, "" ), ChannelInfo (), vecStoredFaderTags ( MAX_NUM_STORED_FADER_SETTINGS, "" ), @@ -59,7 +60,7 @@ CClient::CClient ( const quint16 iPortNumber, bIsInitializationPhase ( true ), bMuteOutStream ( false ), Socket ( &Channel, iPortNumber ), - Sound ( AudioCallback, this, iCtrlMIDIChannel, bNoAutoJackConnect ), + Sound ( AudioCallback, this, iCtrlMIDIChannel, bNoAutoJackConnect, strClientName ), iAudioInFader ( AUD_FADER_IN_MIDDLE ), bReverbOnLeftChan ( false ), iReverbLevel ( 0 ), @@ -76,8 +77,12 @@ CClient::CClient ( const quint16 iPortNumber, bJitterBufferOK ( true ), strCentralServerAddress ( "" ), eCentralServerAddressType ( AT_DEFAULT ), - iServerSockBufNumFrames ( DEF_NET_BUF_SIZE_NUM_BL ) + iServerSockBufNumFrames ( DEF_NET_BUF_SIZE_NUM_BL ), + strClientName ( APP_NAME ) { + + SetClientName ( strClientName ); + int iOpusError; OpusMode = opus_custom_mode_create ( SYSTEM_SAMPLE_RATE_HZ, diff --git a/src/client.h b/src/client.h index 15837f00..d552e194 100755 --- a/src/client.h +++ b/src/client.h @@ -107,13 +107,19 @@ public: CClient ( const quint16 iPortNumber, const QString& strConnOnStartupAddress, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ); + const bool bNoAutoJackConnect, + const QString& strClientName ); void Start(); void Stop(); bool IsRunning() { return Sound.IsRunning(); } bool SetServerAddr ( QString strNAddr ); + QString GetClientName() const { return this->strClientName; } + void SetClientName ( const QString& strClientName ) { + this->strClientName = strClientName; + } + double MicLeveldB_L() { return SignalLevelMeter.MicLeveldBLeft(); } double MicLeveldB_R() { return SignalLevelMeter.MicLeveldBRight(); } @@ -383,6 +389,8 @@ protected: // for ping measurement CPreciseTime PreciseTime; + + QString strClientName; public slots: void OnSendProtMessage ( CVector vecMessage ); diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index fb138d3e..0217f7a0 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -802,24 +802,24 @@ void CClientDlg::OnNumClientsChanged ( int iNewNumClients ) SetMyWindowTitle ( iNewNumClients ); } -void CClientDlg::SetMyWindowTitle ( const int iNumClients ) +void CClientDlg::SetMyWindowTitle ( const int iNumClients) { // show number of connected clients in window title (and therefore also in // the task bar of the OS) if ( iNumClients == 0 ) { // only application name - setWindowTitle ( APP_NAME ); + setWindowTitle ( pClient->GetClientName() ); } else { if ( iNumClients == 1 ) { - setWindowTitle ( QString ( APP_NAME ) + " (1 user)" ); + setWindowTitle ( QString ( pClient->GetClientName() ) + " (1 user)" ); } else { - setWindowTitle ( QString ( APP_NAME ) + + setWindowTitle ( QString ( pClient->GetClientName() ) + QString ( " (%1 users)" ).arg ( iNumClients ) ); } } diff --git a/src/clientdlg.h b/src/clientdlg.h index ddd284fd..4cbf87b1 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -95,6 +95,7 @@ protected: CClient* pClient; CSettings* pSettings; + QString strClientName; bool bConnected; bool bConnectDlgWasShown; QTimer TimerSigMet; diff --git a/src/main.cpp b/src/main.cpp index 7d4a09e5..61ea2731 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -76,6 +76,7 @@ int main ( int argc, char** argv ) QString strCentralServer = ""; QString strServerInfo = ""; QString strWelcomeMessage = ""; + QString strClientName = APP_NAME; // QT docu: argv()[0] is the program name, argv()[1] is the first // argument and argv()[argc()-1] is the last argument. @@ -431,6 +432,19 @@ int main ( int argc, char** argv ) continue; } + // Client Name --------------------------------------------------------- + if ( GetStringArgument ( tsConsole, + argc, + argv, + i, + "--clientname", + "--clientname", + strArgument ) ) + { + strClientName = strArgument; + tsConsole << "- client name: " << strClientName << endl; + continue; + } // Version number ------------------------------------------------------ if ( ( !strcmp ( argv[i], "--version" ) ) || @@ -473,7 +487,6 @@ int main ( int argc, char** argv ) strCentralServer = DEFAULT_SERVER_ADDRESS; } - // Application/GUI setup --------------------------------------------------- // Application object if ( !bUseGUI && !strHistoryFileName.isEmpty() ) @@ -523,7 +536,8 @@ int main ( int argc, char** argv ) CClient Client ( iPortNumber, strConnOnStartupAddress, iCtrlMIDIChannel, - bNoAutoJackConnect ); + bNoAutoJackConnect, + strClientName ); // load settings from init-file CSettings Settings ( &Client, strIniFileName ); @@ -672,7 +686,8 @@ QString UsageArguments ( char **argv ) " name (server only)\n" " -D, --histdays number of days of history to display (server only)\n" " -z, --startminimized start minimizied (server only)\n" - " --ctrlmidich MIDI controller channel to listen (client only)" + " --ctrlmidich MIDI controller channel to listen (client only)\n" + " --clientname Jamulus client name (windows title and jack client name)\n" "\nExample: " + QString ( argv[0] ) + " -l -inifile myinifile.ini\n"; } diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 56ae94b2..f354a544 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -31,13 +31,15 @@ CSoundBase::CSoundBase ( const QString& strNewSystemDriverTechniqueName, void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), void* pParg, const int iNewCtrlMIDIChannel, - const bool bNewNoAutoJackConnect ) : + const bool bNewNoAutoJackConnect, + const QString& strNewJackClientName ) : fpProcessCallback ( fpNewProcessCallback ), pProcessCallbackArg ( pParg ), bRun ( false ), bIsCallbackAudioInterface ( bNewIsCallbackAudioInterface ), strSystemDriverTechniqueName ( strNewSystemDriverTechniqueName ), iCtrlMIDIChannel ( iNewCtrlMIDIChannel ), - bNoAutoJackConnect ( bNewNoAutoJackConnect ) + bNoAutoJackConnect ( bNewNoAutoJackConnect ), + strJackClientName ( strNewJackClientName ) { // initializations for the sound card names (default) lNumDevs = 1; diff --git a/src/soundbase.h b/src/soundbase.h index 2a3bb6d2..3ecc36cf 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -52,7 +52,8 @@ public: void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), void* pParg, const int iNewCtrlMIDIChannel, - const bool bNewNoAutoJackConnect ); + const bool bNewNoAutoJackConnect, + const QString& strNewJackClientName ); virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); @@ -122,6 +123,7 @@ protected: QString strSystemDriverTechniqueName; int iCtrlMIDIChannel; bool bNoAutoJackConnect; + QString strJackClientName; CVector vecsAudioSndCrdStereo; diff --git a/windows/sound.cpp b/windows/sound.cpp index 65e9006f..6bf6e448 100755 --- a/windows/sound.cpp +++ b/windows/sound.cpp @@ -486,8 +486,9 @@ void CSound::Stop() CSound::CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect) : - CSoundBase ( "ASIO", true, fpNewCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect ), + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : + CSoundBase ( "ASIO", true, fpNewCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), lNumInChan ( 0 ), lNumInChanPlusAddChan ( 0 ), lNumOutChan ( 0 ), diff --git a/windows/sound.h b/windows/sound.h index 5f6d96a7..6ff3a4dd 100755 --- a/windows/sound.h +++ b/windows/sound.h @@ -49,7 +49,9 @@ public: CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect ); + const bool bNoAutoJackConnect, + const QString& strJackClientName ); + virtual ~CSound() { UnloadCurrentDriver(); } virtual int Init ( const int iNewPrefMonoBufferSize ); From bac89e358a692bf0875d73030e16d40ea715f1ad Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 30 Apr 2020 22:03:01 +0200 Subject: [PATCH 011/125] merge fixes --- android/sound.cpp | 10 +++++----- linux/sound.cpp | 2 +- linux/sound.h | 16 +++++++++------- mac/sound.h | 10 +++++----- src/client.cpp | 9 +++------ src/client.h | 10 ++-------- src/clientdlg.cpp | 8 ++++---- src/clientdlg.h | 1 - src/main.cpp | 33 ++++++++++++++++++--------------- windows/sound.cpp | 12 ++++++------ windows/sound.h | 10 +++++----- 11 files changed, 58 insertions(+), 63 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 220a1ae9..f5c6e7b7 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -26,11 +26,11 @@ /* Implementation *************************************************************/ -CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ) : +CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ) { diff --git a/linux/sound.cpp b/linux/sound.cpp index a84e4139..61100bae 100755 --- a/linux/sound.cpp +++ b/linux/sound.cpp @@ -27,7 +27,7 @@ #include "sound.h" #ifdef WITH_SOUND -void CSound::OpenJack(char* jackClientName) +void CSound::OpenJack ( const char* jackClientName ) { jack_status_t JackStatus; diff --git a/linux/sound.h b/linux/sound.h index 620ead89..332229e9 100755 --- a/linux/sound.h +++ b/linux/sound.h @@ -60,12 +60,14 @@ class CSound : public CSoundBase { public: - CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ) : - CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), iJACKBufferSizeMono ( 0 ) { OpenJack( strJackClientName.toLocal8Bit().data() ); } + CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : + CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), + iJACKBufferSizeMono ( 0 ) { OpenJack ( strJackClientName.toLocal8Bit().data() ); } + virtual ~CSound() { CloseJack(); } virtual int Init ( const int iNewPrefMonoBufferSize ); @@ -85,7 +87,7 @@ public: jack_port_t* input_port_midi; protected: - void OpenJack(char* jackClientName); + void OpenJack ( const char* jackClientName ); void CloseJack(); // callbacks diff --git a/mac/sound.h b/mac/sound.h index 6ef1093e..3ec81a07 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -36,11 +36,11 @@ class CSound : public CSoundBase { public: - CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ); + CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ); virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); diff --git a/src/client.cpp b/src/client.cpp index 2c55d6b7..ecb56ce2 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -30,7 +30,7 @@ CClient::CClient ( const quint16 iPortNumber, const QString& strConnOnStartupAddress, const int iCtrlMIDIChannel, const bool bNoAutoJackConnect, - const QString& strClientName ) : + const QString& strNClientName ) : vstrIPAddress ( MAX_NUM_SERVER_ADDR_ITEMS, "" ), ChannelInfo (), vecStoredFaderTags ( MAX_NUM_STORED_FADER_SETTINGS, "" ), @@ -60,7 +60,7 @@ CClient::CClient ( const quint16 iPortNumber, bIsInitializationPhase ( true ), bMuteOutStream ( false ), Socket ( &Channel, iPortNumber ), - Sound ( AudioCallback, this, iCtrlMIDIChannel, bNoAutoJackConnect, strClientName ), + Sound ( AudioCallback, this, iCtrlMIDIChannel, bNoAutoJackConnect, strNClientName ), iAudioInFader ( AUD_FADER_IN_MIDDLE ), bReverbOnLeftChan ( false ), iReverbLevel ( 0 ), @@ -78,11 +78,8 @@ CClient::CClient ( const quint16 iPortNumber, strCentralServerAddress ( "" ), eCentralServerAddressType ( AT_DEFAULT ), iServerSockBufNumFrames ( DEF_NET_BUF_SIZE_NUM_BL ), - strClientName ( APP_NAME ) + strClientName ( strNClientName ) { - - SetClientName ( strClientName ); - int iOpusError; OpusMode = opus_custom_mode_create ( SYSTEM_SAMPLE_RATE_HZ, diff --git a/src/client.h b/src/client.h index d552e194..76df0702 100755 --- a/src/client.h +++ b/src/client.h @@ -108,18 +108,13 @@ public: const QString& strConnOnStartupAddress, const int iCtrlMIDIChannel, const bool bNoAutoJackConnect, - const QString& strClientName ); + const QString& strNClientName ); void Start(); void Stop(); bool IsRunning() { return Sound.IsRunning(); } bool SetServerAddr ( QString strNAddr ); - QString GetClientName() const { return this->strClientName; } - void SetClientName ( const QString& strClientName ) { - this->strClientName = strClientName; - } - double MicLeveldB_L() { return SignalLevelMeter.MicLeveldBLeft(); } double MicLeveldB_R() { return SignalLevelMeter.MicLeveldBRight(); } @@ -288,6 +283,7 @@ public: CVector vecStoredFaderIsMute; int iNewClientFaderLevel; bool bConnectDlgShowAllMusicians; + QString strClientName; // window position/state settings QByteArray vecWindowPosMain; @@ -389,8 +385,6 @@ protected: // for ping measurement CPreciseTime PreciseTime; - - QString strClientName; public slots: void OnSendProtMessage ( CVector vecMessage ); diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 0217f7a0..9a510084 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -802,24 +802,24 @@ void CClientDlg::OnNumClientsChanged ( int iNewNumClients ) SetMyWindowTitle ( iNewNumClients ); } -void CClientDlg::SetMyWindowTitle ( const int iNumClients) +void CClientDlg::SetMyWindowTitle ( const int iNumClients ) { // show number of connected clients in window title (and therefore also in // the task bar of the OS) if ( iNumClients == 0 ) { // only application name - setWindowTitle ( pClient->GetClientName() ); + setWindowTitle ( pClient->strClientName ); } else { if ( iNumClients == 1 ) { - setWindowTitle ( QString ( pClient->GetClientName() ) + " (1 user)" ); + setWindowTitle ( QString ( pClient->strClientName ) + " (1 user)" ); } else { - setWindowTitle ( QString ( pClient->GetClientName() ) + + setWindowTitle ( QString ( pClient->strClientName ) + QString ( " (%1 users)" ).arg ( iNumClients ) ); } } diff --git a/src/clientdlg.h b/src/clientdlg.h index 4cbf87b1..ddd284fd 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -95,7 +95,6 @@ protected: CClient* pClient; CSettings* pSettings; - QString strClientName; bool bConnected; bool bConnectDlgWasShown; QTimer TimerSigMet; diff --git a/src/main.cpp b/src/main.cpp index 61ea2731..9fcc413f 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -328,7 +328,22 @@ int main ( int argc, char** argv ) } - // HTML status file ---------------------------------------------------- + // Client Name --------------------------------------------------------- + if ( GetStringArgument ( tsConsole, + argc, + argv, + i, + "--clientname", + "--clientname", + strArgument ) ) + { + strClientName = QString ( APP_NAME ) + " " + strArgument; + tsConsole << "- client name: " << strClientName << endl; + continue; + } + + + // Server history file name -------------------------------------------- if ( GetStringArgument ( tsConsole, argc, argv, @@ -432,19 +447,6 @@ int main ( int argc, char** argv ) continue; } - // Client Name --------------------------------------------------------- - if ( GetStringArgument ( tsConsole, - argc, - argv, - i, - "--clientname", - "--clientname", - strArgument ) ) - { - strClientName = strArgument; - tsConsole << "- client name: " << strClientName << endl; - continue; - } // Version number ------------------------------------------------------ if ( ( !strcmp ( argv[i], "--version" ) ) || @@ -487,6 +489,7 @@ int main ( int argc, char** argv ) strCentralServer = DEFAULT_SERVER_ADDRESS; } + // Application/GUI setup --------------------------------------------------- // Application object if ( !bUseGUI && !strHistoryFileName.isEmpty() ) @@ -687,7 +690,7 @@ QString UsageArguments ( char **argv ) " -D, --histdays number of days of history to display (server only)\n" " -z, --startminimized start minimizied (server only)\n" " --ctrlmidich MIDI controller channel to listen (client only)\n" - " --clientname Jamulus client name (windows title and jack client name)\n" + " --clientname client name (window title and jack client name)\n" "\nExample: " + QString ( argv[0] ) + " -l -inifile myinifile.ini\n"; } diff --git a/windows/sound.cpp b/windows/sound.cpp index 6bf6e448..5745c77d 100755 --- a/windows/sound.cpp +++ b/windows/sound.cpp @@ -483,12 +483,12 @@ void CSound::Stop() } } -CSound::CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ) : - CSoundBase ( "ASIO", true, fpNewCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), +CSound::CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ) : + CSoundBase ( "ASIO", true, fpNewCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), lNumInChan ( 0 ), lNumInChanPlusAddChan ( 0 ), lNumOutChan ( 0 ), diff --git a/windows/sound.h b/windows/sound.h index 6ff3a4dd..4a9dfaf0 100755 --- a/windows/sound.h +++ b/windows/sound.h @@ -46,11 +46,11 @@ class CSound : public CSoundBase { public: - CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ); + CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool bNoAutoJackConnect, + const QString& strJackClientName ); virtual ~CSound() { UnloadCurrentDriver(); } From 1fdfabc2d05093248effa4a4f699a68bd6866bcb Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 30 Apr 2020 22:18:11 +0200 Subject: [PATCH 012/125] further merge fixes --- android/sound.cpp | 6 +++--- android/sound.h | 10 +++++----- linux/sound.cpp | 3 ++- linux/sound.h | 14 ++++++++------ mac/sound.cpp | 6 +++--- mac/sound.h | 4 ++-- src/soundbase.cpp | 8 ++------ src/soundbase.h | 6 +----- windows/sound.cpp | 6 +++--- windows/sound.h | 4 ++-- 10 files changed, 31 insertions(+), 36 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index f5c6e7b7..0b2ae651 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -29,9 +29,9 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ) : - CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ) + const bool , + const QString& ) : + CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel ) { } diff --git a/android/sound.h b/android/sound.h index 2f888b01..6ab4c34b 100644 --- a/android/sound.h +++ b/android/sound.h @@ -35,11 +35,11 @@ class CSound : public CSoundBase { public: - CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ); + CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool , + const QString& ); virtual ~CSound() {} virtual int Init ( const int iNewPrefMonoBufferSize ); diff --git a/linux/sound.cpp b/linux/sound.cpp index 61100bae..9fd08995 100755 --- a/linux/sound.cpp +++ b/linux/sound.cpp @@ -27,7 +27,8 @@ #include "sound.h" #ifdef WITH_SOUND -void CSound::OpenJack ( const char* jackClientName ) +void CSound::OpenJack ( const bool bNoAutoJackConnect, + const char* jackClientName ) { jack_status_t JackStatus; diff --git a/linux/sound.h b/linux/sound.h index 332229e9..bb753ee7 100755 --- a/linux/sound.h +++ b/linux/sound.h @@ -65,8 +65,8 @@ public: const int iCtrlMIDIChannel, const bool bNoAutoJackConnect, const QString& strJackClientName ) : - CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), - iJACKBufferSizeMono ( 0 ) { OpenJack ( strJackClientName.toLocal8Bit().data() ); } + CSoundBase ( "Jack", true, fpNewProcessCallback, arg, iCtrlMIDIChannel ), + iJACKBufferSizeMono ( 0 ) { OpenJack ( bNoAutoJackConnect, strJackClientName.toLocal8Bit().data() ); } virtual ~CSound() { CloseJack(); } @@ -87,7 +87,9 @@ public: jack_port_t* input_port_midi; protected: - void OpenJack ( const char* jackClientName ); + void OpenJack ( const bool bNoAutoJackConnect, + const char* jackClientName ); + void CloseJack(); // callbacks @@ -104,9 +106,9 @@ public: CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), void* pParg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ) : - CSoundBase ( "nosound", false, fpNewProcessCallback, pParg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ) {} + const bool , + const QString& ) : + CSoundBase ( "nosound", false, fpNewProcessCallback, pParg, iCtrlMIDIChannel ) {} virtual ~CSound() {} }; #endif // WITH_SOUND diff --git a/mac/sound.cpp b/mac/sound.cpp index 1b022708..84743e21 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -29,9 +29,9 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - QString& strJackClientName ) : - CSoundBase ( "CoreAudio", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), + const bool , + QString& ) : + CSoundBase ( "CoreAudio", true, fpNewProcessCallback, arg, iCtrlMIDIChannel ), midiInPortRef ( static_cast ( NULL ) ) { // Apple Mailing Lists: Subject: GUI Apps should set kAudioHardwarePropertyRunLoop diff --git a/mac/sound.h b/mac/sound.h index 3ec81a07..1b4688e7 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -39,8 +39,8 @@ public: CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ); + const bool , + const QString& ); virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); diff --git a/src/soundbase.cpp b/src/soundbase.cpp index f354a544..032659e3 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -30,16 +30,12 @@ CSoundBase::CSoundBase ( const QString& strNewSystemDriverTechniqueName, const bool bNewIsCallbackAudioInterface, void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), void* pParg, - const int iNewCtrlMIDIChannel, - const bool bNewNoAutoJackConnect, - const QString& strNewJackClientName ) : + const int iNewCtrlMIDIChannel ) : fpProcessCallback ( fpNewProcessCallback ), pProcessCallbackArg ( pParg ), bRun ( false ), bIsCallbackAudioInterface ( bNewIsCallbackAudioInterface ), strSystemDriverTechniqueName ( strNewSystemDriverTechniqueName ), - iCtrlMIDIChannel ( iNewCtrlMIDIChannel ), - bNoAutoJackConnect ( bNewNoAutoJackConnect ), - strJackClientName ( strNewJackClientName ) + iCtrlMIDIChannel ( iNewCtrlMIDIChannel ) { // initializations for the sound card names (default) lNumDevs = 1; diff --git a/src/soundbase.h b/src/soundbase.h index 3ecc36cf..381648f7 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -51,9 +51,7 @@ public: const bool bNewIsCallbackAudioInterface, void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), void* pParg, - const int iNewCtrlMIDIChannel, - const bool bNewNoAutoJackConnect, - const QString& strNewJackClientName ); + const int iNewCtrlMIDIChannel ); virtual int Init ( const int iNewPrefMonoBufferSize ); virtual void Start(); @@ -122,8 +120,6 @@ protected: bool bIsCallbackAudioInterface; QString strSystemDriverTechniqueName; int iCtrlMIDIChannel; - bool bNoAutoJackConnect; - QString strJackClientName; CVector vecsAudioSndCrdStereo; diff --git a/windows/sound.cpp b/windows/sound.cpp index 5745c77d..e5674b8b 100755 --- a/windows/sound.cpp +++ b/windows/sound.cpp @@ -486,9 +486,9 @@ void CSound::Stop() CSound::CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ) : - CSoundBase ( "ASIO", true, fpNewCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect, strJackClientName ), + const bool , + const QString& ) : + CSoundBase ( "ASIO", true, fpNewCallback, arg, iCtrlMIDIChannel ), lNumInChan ( 0 ), lNumInChanPlusAddChan ( 0 ), lNumOutChan ( 0 ), diff --git a/windows/sound.h b/windows/sound.h index 4a9dfaf0..951acfcb 100755 --- a/windows/sound.h +++ b/windows/sound.h @@ -49,8 +49,8 @@ public: CSound ( void (*fpNewCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, - const bool bNoAutoJackConnect, - const QString& strJackClientName ); + const bool , + const QString& ); virtual ~CSound() { UnloadCurrentDriver(); } From 166c6fca0e06d033184cca1f6548c84a9f6c7def Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 30 Apr 2020 22:24:15 +0200 Subject: [PATCH 013/125] fixed a compiler warning --- src/client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client.cpp b/src/client.cpp index ecb56ce2..6c567bbe 100755 --- a/src/client.cpp +++ b/src/client.cpp @@ -39,6 +39,7 @@ CClient::CClient ( const quint16 iPortNumber, vecStoredFaderIsMute ( MAX_NUM_STORED_FADER_SETTINGS, false ), iNewClientFaderLevel ( 100 ), bConnectDlgShowAllMusicians ( true ), + strClientName ( strNClientName ), vecWindowPosMain (), // empty array vecWindowPosSettings (), // empty array vecWindowPosChat (), // empty array @@ -77,8 +78,7 @@ CClient::CClient ( const quint16 iPortNumber, bJitterBufferOK ( true ), strCentralServerAddress ( "" ), eCentralServerAddressType ( AT_DEFAULT ), - iServerSockBufNumFrames ( DEF_NET_BUF_SIZE_NUM_BL ), - strClientName ( strNClientName ) + iServerSockBufNumFrames ( DEF_NET_BUF_SIZE_NUM_BL ) { int iOpusError; From e44d3494bdf46b1c9b5285628003f01a70dec89e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 30 Apr 2020 22:37:48 +0200 Subject: [PATCH 014/125] another merge fix... --- mac/sound.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 84743e21..a2999d44 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -26,11 +26,11 @@ /* Implementation *************************************************************/ -CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), - void* arg, - const int iCtrlMIDIChannel, - const bool , - QString& ) : +CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), + void* arg, + const int iCtrlMIDIChannel, + const bool , + const QString& ) : CSoundBase ( "CoreAudio", true, fpNewProcessCallback, arg, iCtrlMIDIChannel ), midiInPortRef ( static_cast ( NULL ) ) { From 1c3c2e73155e47ba670bae8fd9031150dc919f69 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 May 2020 14:21:08 +0200 Subject: [PATCH 015/125] moved GetSelCHAndAddCH in the base class --- src/soundbase.cpp | 8 ++++---- src/soundbase.h | 21 +++++++++++++++++++++ windows/sound.h | 22 ---------------------- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 032659e3..6169e0d2 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -31,11 +31,11 @@ CSoundBase::CSoundBase ( const QString& strNewSystemDriverTechniqueName, void (*fpNewProcessCallback) ( CVector& psData, void* pParg ), void* pParg, const int iNewCtrlMIDIChannel ) : - fpProcessCallback ( fpNewProcessCallback ), - pProcessCallbackArg ( pParg ), bRun ( false ), - bIsCallbackAudioInterface ( bNewIsCallbackAudioInterface ), + fpProcessCallback ( fpNewProcessCallback ), + pProcessCallbackArg ( pParg ), bRun ( false ), + bIsCallbackAudioInterface ( bNewIsCallbackAudioInterface ), strSystemDriverTechniqueName ( strNewSystemDriverTechniqueName ), - iCtrlMIDIChannel ( iNewCtrlMIDIChannel ) + iCtrlMIDIChannel ( iNewCtrlMIDIChannel ) { // initializations for the sound card names (default) lNumDevs = 1; diff --git a/src/soundbase.h b/src/soundbase.h index 381648f7..f11d434c 100755 --- a/src/soundbase.h +++ b/src/soundbase.h @@ -97,6 +97,27 @@ protected: virtual void UnloadCurrentDriver() {} QVector LoadAndInitializeFirstValidDriver ( const bool bOpenDriverSetup = false ); + static void GetSelCHAndAddCH ( const int iSelCH, const int iNumInChan, + int& iSelCHOut, int& iSelAddCHOut ) + { + // we have a mixed channel setup, definitions: + // - mixed channel setup only for 4 physical inputs: + // SelCH == 4: Ch 0 + Ch 2 + // SelCh == 5: Ch 0 + Ch 3 + // SelCh == 6: Ch 1 + Ch 2 + // SelCh == 7: Ch 1 + Ch 3 + if ( iSelCH >= iNumInChan ) + { + iSelAddCHOut = ( ( iSelCH - iNumInChan ) % 2 ) + 2; + iSelCHOut = ( iSelCH - iNumInChan ) / 2; + } + else + { + iSelAddCHOut = -1; // set it to an invalid number + iSelCHOut = iSelCH; + } + } + // function pointer to callback function void (*fpProcessCallback) ( CVector& psData, void* arg ); void* pProcessCallbackArg; diff --git a/windows/sound.h b/windows/sound.h index 951acfcb..46e078e7 100755 --- a/windows/sound.h +++ b/windows/sound.h @@ -87,28 +87,6 @@ protected: bool CheckSampleTypeSupportedForCHMixing ( const ASIOSampleType SamType ); void ResetChannelMapping(); - static void GetSelCHAndAddCH ( const int iSelCH, const int iNumInChan, - int& iSelCHOut, int& iSelAddCHOut ) - { - // we have a mixed channel setup - // definitions: - // - mixed channel setup only for 4 physical inputs: - // SelCH == 4: Ch 0 + Ch 2 - // SelCh == 5: Ch 0 + Ch 3 - // SelCh == 6: Ch 1 + Ch 2 - // SelCh == 7: Ch 1 + Ch 3 - if ( iSelCH >= iNumInChan ) - { - iSelAddCHOut = ( ( iSelCH - iNumInChan ) % 2 ) + 2; - iSelCHOut = ( iSelCH - iNumInChan ) / 2; - } - else - { - iSelAddCHOut = -1; - iSelCHOut = iSelCH; - } - } - int iASIOBufferSizeMono; int iASIOBufferSizeStereo; From 7cdba88fa01282233f5b899ecadcf463be1a0b36 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 May 2020 15:57:14 +0200 Subject: [PATCH 016/125] support adding channels for 4 input case, same as in Windows (code not compiled and tested yet) --- mac/sound.cpp | 113 ++++++++++++++++++++++++++++++++++++-------------- mac/sound.h | 3 +- 2 files changed, 85 insertions(+), 31 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index a2999d44..5d60801f 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -167,6 +167,7 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData CurrentAudioInputDeviceID = 0; CurrentAudioOutputDeviceID = 0; iNumInChan = 0; + lNumInChanPlusAddChan = 0; iNumOutChan = 0; iSelInputLeftChannel = 0; iSelInputRightChannel = 0; @@ -568,6 +569,32 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) } } + // special case with 4 input channels: support adding channels + if ( iNumInChan == 4 ) + { + // add four mixed channels (i.e. 4 normal, 4 mixed channels) + iNumInChanPlusAddChan = 8; + + for ( int iCh = 0; iCh < iNumInChanPlusAddChan; iCh++ ) + { + int iSelCH, iSelAddCH; + + GetSelCHAndAddCH ( iCh, iNumInChan, iSelCH, iSelAddCH ); + + if ( iSelAddCH >= 0 ) + { + // for mixed channels, show both audio channel names to be mixed + sChannelNamesInput[iCh] = + sChannelNamesInput[iSelCH] + " + " + sChannelNamesInput[iSelAddCH]; + } + } + } + else + { + // regular case: no mixing input channels used + iNumInChanPlusAddChan = iNumInChan; + } + // everything is ok, return empty string for "no error" case return ""; } @@ -575,7 +602,7 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) void CSound::SetLeftInputChannel ( const int iNewChan ) { // apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChan ) ) + if ( ( iNewChan >= 0 ) && ( iNewChan < lNumInChanPlusAddChan ) ) { iSelInputLeftChannel = iNewChan; } @@ -584,7 +611,7 @@ void CSound::SetLeftInputChannel ( const int iNewChan ) void CSound::SetRightInputChannel ( const int iNewChan ) { // apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChan ) ) + if ( ( iNewChan >= 0 ) && ( iNewChan < lNumInChanPlusAddChan ) ) { iSelInputRightChannel = iNewChan; } @@ -834,6 +861,13 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, if ( ( inDevice == pSound->CurrentAudioInputDeviceID ) && inInputData ) { + int iSelCHLeft, iSelAddCHLeft; + int iSelCHRight, iSelAddCHRight; + + // get selected input channels plus optional additional channel + GetSelCHAndAddCH ( iSelInputLeftChannel, iNumInChan, iSelCHLeft, iSelAddCHLeft ); + GetSelCHAndAddCH ( iSelInputRightChannel, iNumInChan, iSelCHRight, iSelAddCHRight ); + // check size (float32 has four bytes) if ( inInputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumInChan * 4 ) ) @@ -845,48 +879,67 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, // copy input data for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { - // left - pSound->vecsTmpAudioSndCrdStereo[2 * i] = - (short) ( pInData[iNumInChan * i + iSelInputLeftChannel] * _MAXSHORT ); + // copy left and right channels separately + pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pInData[iNumInChan * i + iSelCHLeft] * _MAXSHORT ); + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pInData[iNumInChan * i + iSelCHRight] * _MAXSHORT ); + } - // right - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = - (short) ( pInData[iNumInChan * i + iSelInputRightChannel] * _MAXSHORT ); - -/* -// TEST mix channel with micro to the stereo output -if ( iNumInChan == 4 ) -{ - // add mic input on input channel 4 to both stereo channels - pSound->vecsTmpAudioSndCrdStereo[2 * i] = - Double2Short ( (double) ( pInData[iNumInChan * i + 3] * _MAXSHORT ) + - (double) pSound->vecsTmpAudioSndCrdStereo[2 * i] ); - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = - Double2Short ( (double) ( pInData[iNumInChan * i + 3] * _MAXSHORT ) + - (double) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] ); -} -*/ + // add an additional optional channel + if ( iSelAddCHLeft >= 0 ) + { + for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) + { + pSound->vecsTmpAudioSndCrdStereo[2 * i] = Double2Short ( + pSound->vecsTmpAudioSndCrdStereo[2 * i] + pInData[iNumInChan * i + iSelAddCHLeft] * _MAXSHORT ); + } + } + if ( iSelAddCHRight >= 0 ) + { + for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) + { + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = Double2Short ( + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pInData[iNumInChan * i + iSelAddCHRight] * _MAXSHORT ); + } } } else if ( inInputData->mNumberBuffers == (UInt32) iNumInChan && // we should have a matching number of buffers to channels inInputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * 4 ) ) { // one buffer per channel mode: - AudioBuffer left = inInputData->mBuffers[iSelInputLeftChannel]; - Float32* pLeftData = static_cast ( left.mData ); - AudioBuffer right = inInputData->mBuffers[iSelInputRightChannel]; - Float32* pRightData = static_cast ( right.mData ); + Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelCHLeft].mData ); + Float32* pRightData = static_cast ( inInputData->mBuffers[iSelCHRight].mData ); // copy input data for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { - // left - pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pLeftData[i] * _MAXSHORT ); - - // right + // copy left and right channels separately + pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pLeftData[i] * _MAXSHORT ); pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pRightData[i] * _MAXSHORT ); } + + // add an additional optional channel + if ( iSelAddCHLeft >= 0 ) + { + pLeftData = static_cast ( inInputData->mBuffers[iSelAddCHLeft].mData ); + + for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) + { + pSound->vecsTmpAudioSndCrdStereo[2 * i] = Double2Short ( + pSound->vecsTmpAudioSndCrdStereo[2 * i] + pLeftData[i] * _MAXSHORT ); + } + } + + if ( iSelAddCHRight >= 0 ) + { + pRightData = static_cast ( inInputData->mBuffers[iSelAddCHRight].mData ); + + for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) + { + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = Double2Short ( + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pRightData[i] * _MAXSHORT ); + } + } } else { diff --git a/mac/sound.h b/mac/sound.h index 1b4688e7..a4f267f8 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -47,7 +47,7 @@ public: virtual void Stop(); // channel selection - virtual int GetNumInputChannels() { return iNumInChan; } + virtual int GetNumInputChannels() { return iNumInChanPlusAddChan; } virtual QString GetInputChannelName ( const int iDiD ) { return sChannelNamesInput[iDiD]; } virtual void SetLeftInputChannel ( const int iNewChan ); virtual void SetRightInputChannel ( const int iNewChan ); @@ -69,6 +69,7 @@ public: AudioDeviceID CurrentAudioInputDeviceID; AudioDeviceID CurrentAudioOutputDeviceID; int iNumInChan; + int iNumInChanPlusAddChan; // includes additional "added" channels int iNumOutChan; int iSelInputLeftChannel; int iSelInputRightChannel; From 21a2613e085832f5208f7b520c943e1e06dcfb51 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 May 2020 16:04:04 +0200 Subject: [PATCH 017/125] fix compiler errors under MacOS --- mac/sound.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 5d60801f..6a125b97 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -167,7 +167,7 @@ CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData CurrentAudioInputDeviceID = 0; CurrentAudioOutputDeviceID = 0; iNumInChan = 0; - lNumInChanPlusAddChan = 0; + iNumInChanPlusAddChan = 0; iNumOutChan = 0; iSelInputLeftChannel = 0; iSelInputRightChannel = 0; @@ -602,7 +602,7 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) void CSound::SetLeftInputChannel ( const int iNewChan ) { // apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < lNumInChanPlusAddChan ) ) + if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChanPlusAddChan ) ) { iSelInputLeftChannel = iNewChan; } @@ -611,7 +611,7 @@ void CSound::SetLeftInputChannel ( const int iNewChan ) void CSound::SetRightInputChannel ( const int iNewChan ) { // apply parameter after input parameter check - if ( ( iNewChan >= 0 ) && ( iNewChan < lNumInChanPlusAddChan ) ) + if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChanPlusAddChan ) ) { iSelInputRightChannel = iNewChan; } From 3f437327904226fb8d4e5fd9114698f7a92e023c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 May 2020 16:15:07 +0200 Subject: [PATCH 018/125] update --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index 1ec5476d..d6813a3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,8 @@ 3.5.3git + * for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 + * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) From a41879e6b7771dd55aca95700e42cc6ee20bab14 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 May 2020 19:45:07 +0200 Subject: [PATCH 019/125] added bassoon instrument icon, created by dszgit (Ticket #131) --- ChangeLog | 2 + Jamulus.pro | 2 + src/res/instruments/bassoon.png | Bin 0 -> 910 bytes src/res/instruments/bassoon.svg | 227 ++++++++++++++++++++++++++++++++ src/resources.qrc | 1 + src/util.cpp | 1 + 6 files changed, 233 insertions(+) create mode 100644 src/res/instruments/bassoon.png create mode 100644 src/res/instruments/bassoon.svg diff --git a/ChangeLog b/ChangeLog index d6813a3f..7cbb928d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,8 @@ * for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 + * added bassoon instrument icon, created by dszgit (Ticket #131) + * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) diff --git a/Jamulus.pro b/Jamulus.pro index 80e04633..c5361185 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -564,6 +564,8 @@ DISTFILES += ChangeLog \ src/res/instruments/instrkeyboardvocal.png \ src/res/instruments/bodhran.svg \ src/res/instruments/bodhran.png \ + src/res/instruments/bassoon.svg \ + src/res/instruments/bassoon.png \ src/res/flags/flagnone.png \ src/res/flags/ad.png \ src/res/flags/ae.png \ diff --git a/src/res/instruments/bassoon.png b/src/res/instruments/bassoon.png new file mode 100644 index 0000000000000000000000000000000000000000..d002ab6789285f48088f339c1e054416b6271ec3 GIT binary patch literal 910 zcmV;919AL`P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00Q<&L_t(I%cYcENRv?*$N$@$ zbDPuYoMTRt+0<&`OdW|I49X}23(77OQp`#yDY_|1h1UcTx)Gv_@WLR2pt{kbi;6NW z)Fx`0`MK0->ZWtf_uaRiZnEqm@mA42I0!P^t6C;#=P2|L&?2bXTc|jNXYL|d;(udo`h~}+1&enh`&HudLP@FzF z-q%pw*i=JNBnm(dfKL>~u>e40BMJ9-kSCLj@UCWRKXS4#zf~XfdmHJVdt5$Rgv4J2 zpccSMiozp`!m+wKA|?bpw;QxliMEOgt*>$?${t7dOcdZt!u zmmRh_tx|c@>9mX4fOy-JRWFz@u3M54t2nnp_uyjj>CzYPx*oFz0f5PY?xZkZL8#wx zz%$d!llz&j5eF=+j`k}&UzX^muwbtItJz{njz&#DMgU-@F_@K+RUi-Hr}}BDH(r9- zAseRH8UX-#`{89(us|x9rQuVFP`$(2e;Wb790OCl1ZjGGcAnGiSkQ`@O`{e4Y>fZ_ zgVW|}e@LQh%@ZV(g`hGy3KG^v0I=wSHBR8sB*sjy4 zuef_X_K;p7kVxZ2Hq+CAY0EOJqXEFMg;`>pKSrEOG^eAbVOU`wx)zWT01S_Pd#Lg` zOUQg*9EbSA;YY+egZ7`#n_@whhC=m(W%UTAZ&lYK~lgk!lw4&d+bwH+?JT%tax50yr%i_@%07*qoM6N<$g34u^q5uE@ literal 0 HcmV?d00001 diff --git a/src/res/instruments/bassoon.svg b/src/res/instruments/bassoon.svg new file mode 100644 index 00000000..ed6d31a3 --- /dev/null +++ b/src/res/instruments/bassoon.svg @@ -0,0 +1,227 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/resources.qrc b/src/resources.qrc index 77f355ec..f8cb0795 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -50,6 +50,7 @@ res/instruments/instrguitarvocal.png res/instruments/instrkeyboardvocal.png res/instruments/bodhran.png + res/instruments/bassoon.png res/fronticon.png diff --git a/src/util.cpp b/src/util.cpp index 6c0fb46a..12a336e9 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -964,6 +964,7 @@ CVector& CInstPictures::GetTable() vecDataBase.Add ( CInstPictProps ( "Guitar+Vocal", ":/png/instr/res/instruments/instrguitarvocal.png", IC_MULTIPLE_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( "Keyboard+Vocal", ":/png/instr/res/instruments/instrkeyboardvocal.png", IC_MULTIPLE_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( "Bodhran", ":/png/instr/res/instruments/bodhran.png", IC_PERCUSSION_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( "Bassoon", ":/png/instr/res/instruments/bassoon.png", IC_WIND_INSTRUMENT ) ); // now the table is initialized TableIsInitialized = true; From 9a6653525b6b503d4852054710653b03f958a5dd Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Fri, 1 May 2020 20:21:33 +0200 Subject: [PATCH 020/125] unregister server if it was registered and the Central Server type is changed --- src/global.h | 7 ++----- src/serverdlg.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/global.h b/src/global.h index 382f5599..88b39a9d 100755 --- a/src/global.h +++ b/src/global.h @@ -213,15 +213,12 @@ LED bar: lbr #define SERVLIST_TIME_PERMSERV_MINUTES 1440 // minutes, 1440 = 60 min * 24 h // registration response timeout -#define REGISTER_SERVER_TIME_OUT_MS 500 // ms +#define REGISTER_SERVER_TIME_OUT_MS 500 // ms // defines the maximum number of times to retry server registration // when no response is received within the timeout (before reverting // to SERVLIST_REGIST_INTERV_MINUTES) -#define REGISTER_SERVER_RETRY_LIMIT 5 // count - -// length of the moving average buffer for response time measurement -#define TIME_MOV_AV_RESPONSE_SECONDS 30 // seconds +#define REGISTER_SERVER_RETRY_LIMIT 5 // count // Maximum length of fader tag and text message strings (Since for chat messages diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 0fbdf8c5..63b874b4 100755 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -447,6 +447,12 @@ void CServerDlg::OnLocationCountryActivated ( int iCntryListItem ) void CServerDlg::OnCentServAddrTypeActivated ( int iTypeIdx ) { + // if server was registered, unregister first + if ( pServer->GetServerListEnabled() ) + { + pServer->UnregisterSlaveServer(); + } + // apply new setting to the server and update it pServer->SetCentralServerAddressType ( static_cast ( iTypeIdx ) ); pServer->UpdateServerList(); From 51e1edfad5603200b8f1bbefbb2cdae36c4c23b2 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 08:24:01 +0200 Subject: [PATCH 021/125] link to docs from application Help menu (Ticket #90) --- ChangeLog | 4 ++-- src/clientdlg.cpp | 2 +- src/global.h | 6 ++++-- src/serverdlg.cpp | 2 +- src/util.cpp | 18 +++++++++++------- src/util.h | 11 ++++++----- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7cbb928d..5787f76a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,13 +10,13 @@ * added bassoon instrument icon, created by dszgit (Ticket #131) + * link to docs from application Help menu (Ticket #90) + * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) TODO implement panning for channels (Ticket #52, #145) -TODO improve help menu, see https://github.com/corrados/jamulus/issues/90 - TODO support internationalization TODO standard style: meter bar gets smaller sometimes if board is full and fader text is short diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 9a510084..e1dc415c 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -283,7 +283,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, pMenu = new QMenuBar ( this ); pMenu->addMenu ( pViewMenu ); - pMenu->addMenu ( new CHelpMenu ( this ) ); + pMenu->addMenu ( new CHelpMenu ( true, this ) ); // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); diff --git a/src/global.h b/src/global.h index 88b39a9d..24195fa9 100755 --- a/src/global.h +++ b/src/global.h @@ -105,8 +105,10 @@ LED bar: lbr #define DEFAULT_SERVER_ADDRESS "jamulus.fischvolk.de" #define DEFAULT_SERVER_NAME "Central Server" -// download URL -#define SOFTWARE_DOWNLOAD_URL "http://sourceforge.net/projects/llcon/files" +// getting started and software manual URL +#define CLIENT_GETTING_STARTED_URL "https://github.com/corrados/jamulus/wiki/Software-Manual" +#define SERVER_GETTING_STARTED_URL "https://github.com/corrados/jamulus/wiki/Running-a-Server" +#define SOFTWARE_MANUAL_URL "https://github.com/corrados/jamulus/blob/master/src/res/homepage/manual.md" // determining server internal address uses well-known host and port // (Google DNS, or something else reliable) diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 63b874b4..9091b061 100755 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -283,7 +283,7 @@ lvwClients->setMinimumHeight ( 140 ); pMenu = new QMenuBar ( this ); pMenu->addMenu ( pViewMenu ); - pMenu->addMenu ( new CHelpMenu ( this ) ); + pMenu->addMenu ( new CHelpMenu ( false, this ) ); // Now tell the layout about the menu layout()->setMenuBar ( pMenu ); diff --git a/src/util.cpp b/src/util.cpp index 12a336e9..d99c8387 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -806,16 +806,20 @@ void CMusProfDlg::OnSkillActivated ( int iCntryListItem ) // Help menu ------------------------------------------------------------------- -CHelpMenu::CHelpMenu ( QWidget* parent ) : QMenu ( "&?", parent ) +CHelpMenu::CHelpMenu ( const bool bIsClient, QWidget* parent ) : QMenu ( "&Help", parent ) { // standard help menu consists of about and what's this help - addAction ( tr ( "What's &This" ), this, - SLOT ( OnHelpWhatsThis() ), QKeySequence ( Qt::SHIFT + Qt::Key_F1 ) ); - + if ( bIsClient ) + { + addAction ( tr ( "Getting &Started..." ), this, SLOT ( OnHelpClientGetStarted() ) ); + addAction ( tr ( "Software &Manual..." ), this, SLOT ( OnHelpSoftwareMan() ) ); + } + else + { + addAction ( tr ( "Getting &Started..." ), this, SLOT ( OnHelpServerGetStarted() ) ); + } addSeparator(); - addAction ( tr ( "&Download Link..." ), this, - SLOT ( OnHelpDownloadLink() ) ); - + addAction ( tr ( "What's &This" ), this, SLOT ( OnHelpWhatsThis() ), QKeySequence ( Qt::SHIFT + Qt::Key_F1 ) ); addSeparator(); addAction ( tr ( "&About..." ), this, SLOT ( OnHelpAbout() ) ); } diff --git a/src/util.h b/src/util.h index 8633c012..6a790f3f 100755 --- a/src/util.h +++ b/src/util.h @@ -473,16 +473,17 @@ class CHelpMenu : public QMenu Q_OBJECT public: - CHelpMenu ( QWidget* parent = nullptr ); + CHelpMenu ( const bool bIsClient, QWidget* parent = nullptr ); protected: CAboutDlg AboutDlg; public slots: - void OnHelpWhatsThis() { QWhatsThis::enterWhatsThisMode(); } - void OnHelpAbout() { AboutDlg.exec(); } - void OnHelpDownloadLink() - { QDesktopServices::openUrl ( QUrl ( SOFTWARE_DOWNLOAD_URL ) ); } + void OnHelpWhatsThis() { QWhatsThis::enterWhatsThisMode(); } + void OnHelpAbout() { AboutDlg.exec(); } + void OnHelpClientGetStarted() { QDesktopServices::openUrl ( QUrl ( CLIENT_GETTING_STARTED_URL ) ); } + void OnHelpServerGetStarted() { QDesktopServices::openUrl ( QUrl ( SERVER_GETTING_STARTED_URL ) ); } + void OnHelpSoftwareMan() { QDesktopServices::openUrl ( QUrl ( SOFTWARE_MANUAL_URL ) ); } }; From d5892f3748582e4635bcf78269eb16efd711615e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 08:34:56 +0200 Subject: [PATCH 022/125] remove the logopicture from the About dialog --- Jamulus.pro | 1 - src/aboutdlgbase.ui | 30 ------------------------------ src/res/logopicture.png | Bin 31140 -> 0 bytes src/res/logopicture.xcf | Bin 49209 -> 0 bytes src/resources.qrc | 1 - 5 files changed, 32 deletions(-) delete mode 100755 src/res/logopicture.png delete mode 100755 src/res/logopicture.xcf diff --git a/Jamulus.pro b/Jamulus.pro index c5361185..7f8ba2cf 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -510,7 +510,6 @@ DISTFILES += ChangeLog \ src/res/ledbuttonnotpressed.png \ src/res/ledbuttonpressed.png \ src/res/fronticon.png \ - src/res/logopicture.png \ src/res/mainicon.png \ src/res/mixerboardbackground.png \ src/res/VLEDBlack.png \ diff --git a/src/aboutdlgbase.ui b/src/aboutdlgbase.ui index c6ed9d23..870a1ebf 100755 --- a/src/aboutdlgbase.ui +++ b/src/aboutdlgbase.ui @@ -164,36 +164,6 @@ - - - - - - - - - :/png/main/res/logopicture.png - - - - - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 20 - 1 - - - - - - diff --git a/src/res/logopicture.png b/src/res/logopicture.png deleted file mode 100755 index 30f3d7c046cd68728c476392c0f7dec9cd812357..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31140 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 A@c;k- diff --git a/src/resources.qrc b/src/resources.qrc index f8cb0795..9601cbd1 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -54,7 +54,6 @@ res/fronticon.png - res/logopicture.png res/mainicon.png From a95038bf13f14694db9ff4af27b93c95c865743c Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 08:45:29 +0200 Subject: [PATCH 023/125] added instrument icon, created by dszgit (Ticket #131) --- ChangeLog | 2 +- Jamulus.pro | 2 + src/res/instruments/oboe.png | Bin 0 -> 840 bytes src/res/instruments/oboe.svg | 282 +++++++++++++++++++++++++++++++++++ src/resources.qrc | 1 + src/util.cpp | 1 + 6 files changed, 287 insertions(+), 1 deletion(-) create mode 100644 src/res/instruments/oboe.png create mode 100644 src/res/instruments/oboe.svg diff --git a/ChangeLog b/ChangeLog index 5787f76a..ef0ace8e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,7 +8,7 @@ * for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 - * added bassoon instrument icon, created by dszgit (Ticket #131) + * added bassoon/oboe instrument icons, created by dszgit (Ticket #131) * link to docs from application Help menu (Ticket #90) diff --git a/Jamulus.pro b/Jamulus.pro index 7f8ba2cf..bb9b5920 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -565,6 +565,8 @@ DISTFILES += ChangeLog \ src/res/instruments/bodhran.png \ src/res/instruments/bassoon.svg \ src/res/instruments/bassoon.png \ + src/res/instruments/oboe.svg \ + src/res/instruments/oboe.png \ src/res/flags/flagnone.png \ src/res/flags/ad.png \ src/res/flags/ae.png \ diff --git a/src/res/instruments/oboe.png b/src/res/instruments/oboe.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6e075a6957c0937df16397e06b525b1378fd27 GIT binary patch literal 840 zcmV-O1GoH%P)P000{Z1^@s6i6JCt00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliruvKasX02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00OW{L_t(Y$F-JQNK0j){yvxwFwUCtQkE4P`tnt!6Z4+0KHen&@Nv;)uPD)}qY3(+ zLR~lF_Ph)7E&+hg3(nCaWx3@PqBoV9XD3#C)BZiT@NSpiLnEDedDOC6?ii}n-8#&B zBmm%Yfz?D4FSJFv_I;{I2gNkM@otWJ_dF-N(QzzCE66a8)3QS(lHPu&+L}MoeOl|` zC6b-`tb{iW3gILz;x5Z+uO-6h!&Bo=-}5Q~0LPDY-^qrqM8s{c7bRWh?1XE`;ol1J zDgl70x5Lu~TE#j^vKP{G&F2o1fNkE-FuY0tV9x2W7i(2CohE5a#8F#G=)q4L8^3v# z0Kk_e_v;#Skx`>J*ZE>UYYYn57QNy4p5|mXD%u`BPKcy4QnB=eRG!`6QVjaPTKHdF zEK$qS3>9MnN?66L`E2=PGp%<4mX~zxq|ML7^Mso(RXTGMP1vJL@~Fb$3BBS~0sspE zhEa09QIS~M77eW*H!5WrtwCmZ9N>790Khjt6VOYdE*4w^2rPcJ%u=M>S literal 0 HcmV?d00001 diff --git a/src/res/instruments/oboe.svg b/src/res/instruments/oboe.svg new file mode 100644 index 00000000..e00f40d5 --- /dev/null +++ b/src/res/instruments/oboe.svg @@ -0,0 +1,282 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/resources.qrc b/src/resources.qrc index 9601cbd1..a39279c1 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -51,6 +51,7 @@ res/instruments/instrkeyboardvocal.png res/instruments/bodhran.png res/instruments/bassoon.png + res/instruments/oboe.png res/fronticon.png diff --git a/src/util.cpp b/src/util.cpp index d99c8387..201a124e 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -969,6 +969,7 @@ CVector& CInstPictures::GetTable() vecDataBase.Add ( CInstPictProps ( "Keyboard+Vocal", ":/png/instr/res/instruments/instrkeyboardvocal.png", IC_MULTIPLE_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( "Bodhran", ":/png/instr/res/instruments/bodhran.png", IC_PERCUSSION_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( "Bassoon", ":/png/instr/res/instruments/bassoon.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( "Oboe", ":/png/instr/res/instruments/oboe.png", IC_WIND_INSTRUMENT ) ); // now the table is initialized TableIsInitialized = true; From 78b61cf01b2e83a667679861b928a78d44e25bdf Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 11:02:09 +0200 Subject: [PATCH 024/125] in my profile combo box: sort instruments alphabetical and show category by background color --- src/util.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/util.cpp b/src/util.cpp index 201a124e..c3b3ec7f 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -592,13 +592,31 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP, // add an entry for all known instruments for ( int iCurInst = 0; iCurInst < CInstPictures::GetNumAvailableInst(); iCurInst++ ) { - // create a combo box item with text and image - pcbxInstrument->addItem ( - QIcon ( CInstPictures::GetResourceReference ( iCurInst ) ), - CInstPictures::GetName ( iCurInst ), - iCurInst ); + // create a combo box item with text, image and background color + QColor InstrColor; + + pcbxInstrument->addItem ( QIcon ( CInstPictures::GetResourceReference ( iCurInst ) ), + CInstPictures::GetName ( iCurInst ), + iCurInst ); + + switch ( CInstPictures::GetCategory ( iCurInst ) ) + { + case CInstPictures::IC_OTHER_INSTRUMENT: InstrColor = QColor ( Qt::blue ); break; + case CInstPictures::IC_WIND_INSTRUMENT: InstrColor = QColor ( Qt::green ); break; + case CInstPictures::IC_STRING_INSTRUMENT: InstrColor = QColor ( Qt::red ); break; + case CInstPictures::IC_PLUCKING_INSTRUMENT: InstrColor = QColor ( Qt::cyan ); break; + case CInstPictures::IC_PERCUSSION_INSTRUMENT: InstrColor = QColor ( Qt::white ); break; + case CInstPictures::IC_KEYBOARD_INSTRUMENT: InstrColor = QColor ( Qt::yellow ); break; + case CInstPictures::IC_MULTIPLE_INSTRUMENT: InstrColor = QColor ( Qt::black ); break; + } + + InstrColor.setAlpha ( 10 ); + pcbxInstrument->setItemData ( iCurInst, InstrColor, Qt::BackgroundRole ); } + // sort the items in alphabetical order + pcbxInstrument->model()->sort ( 0 ); + // Country flag icons combo box -------------------------------------------- // add an entry for all known country flags From d35c5fa6cf158e431fa57ff2f4e007353619808e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 11:28:10 +0200 Subject: [PATCH 025/125] initial work for support CoreAudio aggregated devices --- ChangeLog | 4 ++- mac/sound.cpp | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ef0ace8e..af9fb385 100644 --- a/ChangeLog +++ b/ChangeLog @@ -15,12 +15,14 @@ * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) -TODO implement panning for channels (Ticket #52, #145) +TODO support CoreAudio aggregated devices TODO support internationalization TODO standard style: meter bar gets smaller sometimes if board is full and fader text is short +TODO implement panning for channels (Ticket #52, #145) + TODO sometimes I cannot see the central server in the server list TODO server: warning if Central server selected but OS location is different (e.g. US) -> warning in GUI and command line diff --git a/mac/sound.cpp b/mac/sound.cpp index 6a125b97..7bca3bdd 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -869,6 +869,56 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, GetSelCHAndAddCH ( iSelInputRightChannel, iNumInChan, iSelCHRight, iSelAddCHRight ); // check size (float32 has four bytes) +// if ( inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == +// (UInt32) iNumInChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) +// { +// const int iNumChanPerFrame = iNumInChan / inInputData->mNumberBuffers; +// const int iSelBufferLeft = iSelCHLeft / iNumChanPerFrame; +// const int iSelBufferRight = iSelCHRight / iNumChanPerFrame; +// const int iSelInterlChLeft = iSelCHLeft % iNumChanPerFrame; +// const int iSelInterlChRight = iSelCHRight % iNumChanPerFrame; +// +// Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelBufferLeft].mData ); +// Float32* pRightData = static_cast ( inInputData->mBuffers[iSelBufferRight].mData ); +// +// // copy input data +// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) +// { +// // copy left and right channels separately +// pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pLeftData[iNumChanPerFrame * i + iSelInterlChLeft] * _MAXSHORT ); +// pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pRightData[iNumChanPerFrame * i + iSelInterlChRight] * _MAXSHORT ); +// } +// +// // add an additional optional channel +// if ( iSelAddCHLeft >= 0 ) +// { +// const int iSelAddCHBufferLeft = iSelAddCHLeft / iNumChanPerFrame; +// const int iSelAddCHInterlChLeft = iSelAddCHLeft % iNumChanPerFrame; +// +// pLeftData = static_cast ( inInputData->mBuffers[iSelAddCHBufferLeft].mData ); +// +// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) +// { +// pSound->vecsTmpAudioSndCrdStereo[2 * i] = Double2Short ( +// pSound->vecsTmpAudioSndCrdStereo[2 * i] + pLeftData[iNumChanPerFrame * i + iSelAddCHInterlChLeft] * _MAXSHORT ); +// } +// } +// +// if ( iSelAddCHRight >= 0 ) +// { +// const int iSelAddCHBufferRight = iSelAddCHRight / iNumChanPerFrame; +// const int iSelAddCHInterlChRight = iSelAddCHRight % iNumChanPerFrame; +// +// pRightData = static_cast ( inInputData->mBuffers[iSelAddCHBufferRight].mData ); +// +// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) +// { +// pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = Double2Short ( +// pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pRightData[iNumChanPerFrame * i + iSelAddCHInterlChRight] * _MAXSHORT ); +// } +// } +// } +// else if ( inInputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumInChan * 4 ) ) { @@ -954,6 +1004,27 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData ) { // check size (float32 has four bytes) +// if ( inOutputData->mBuffers[0].mDataByteSize * inOutputData->mNumberBuffers == +// (UInt32) iNumOutChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) +// { +// const int iNumChanPerFrame = iNumOutChan / inOutputData->mNumberBuffers; +// const int iSelBufferLeft = iSelOutputLeftChannel / iNumChanPerFrame; +// const int iSelBufferRight = iSelOutputRightChannel / iNumChanPerFrame; +// const int iSelInterlChLeft = iSelOutputLeftChannel % iNumChanPerFrame; +// const int iSelInterlChRight = iSelOutputRightChannel % iNumChanPerFrame; +// +// Float32* pLeftData = static_cast ( inOutputData->mBuffers[iSelBufferLeft].mData ); +// Float32* pRightData = static_cast ( inOutputData->mBuffers[iSelBufferRight].mData ); +// +// // copy output data +// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) +// { +// // copy left and right channels separately +// pLeftData[iNumChanPerFrame * i + iSelInterlChLeft] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; +// pRightData[iNumChanPerFrame * i + iSelInterlChRight] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; +// } +// } +// else if ( outOutputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumOutChan * 4 ) ) { From 4866dcc9bda97e8be485fb1f3f8722f9c0436b23 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 12:02:04 +0200 Subject: [PATCH 026/125] fixes --- mac/sound.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 7bca3bdd..4e88b226 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -869,6 +869,7 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, GetSelCHAndAddCH ( iSelInputRightChannel, iNumInChan, iSelCHRight, iSelAddCHRight ); // check size (float32 has four bytes) +// TODO assumption that all buffer have same interleaved number of channels is not correct! // if ( inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == // (UInt32) iNumInChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) // { @@ -1004,17 +1005,17 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData ) { // check size (float32 has four bytes) -// if ( inOutputData->mBuffers[0].mDataByteSize * inOutputData->mNumberBuffers == +// if ( outOutputData->mBuffers[0].mDataByteSize * outOutputData->mNumberBuffers == // (UInt32) iNumOutChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) // { -// const int iNumChanPerFrame = iNumOutChan / inOutputData->mNumberBuffers; +// const int iNumChanPerFrame = iNumOutChan / outOutputData->mNumberBuffers; // const int iSelBufferLeft = iSelOutputLeftChannel / iNumChanPerFrame; // const int iSelBufferRight = iSelOutputRightChannel / iNumChanPerFrame; // const int iSelInterlChLeft = iSelOutputLeftChannel % iNumChanPerFrame; // const int iSelInterlChRight = iSelOutputRightChannel % iNumChanPerFrame; // -// Float32* pLeftData = static_cast ( inOutputData->mBuffers[iSelBufferLeft].mData ); -// Float32* pRightData = static_cast ( inOutputData->mBuffers[iSelBufferRight].mData ); +// Float32* pLeftData = static_cast ( outOutputData->mBuffers[iSelBufferLeft].mData ); +// Float32* pRightData = static_cast ( outOutputData->mBuffers[iSelBufferRight].mData ); // // // copy output data // for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) From cd8e1cb6701f990155c011041d9d9f49cf07cec6 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 13:34:12 +0200 Subject: [PATCH 027/125] added harp instrument icon, created by dszgit (Ticket #131) --- ChangeLog | 2 +- Jamulus.pro | 2 + src/res/instruments/harp.png | Bin 0 -> 1169 bytes src/res/instruments/harp.svg | 465 +++++++++++++++++++++++++++++++++++ src/res/translation_de_DE.ts | 280 ++++++++++++++++----- src/res/translation_fr_FR.ts | 280 ++++++++++++++++----- src/resources.qrc | 1 + src/util.cpp | 63 ++--- 8 files changed, 935 insertions(+), 158 deletions(-) create mode 100644 src/res/instruments/harp.png create mode 100644 src/res/instruments/harp.svg diff --git a/ChangeLog b/ChangeLog index af9fb385..e5205f2d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,7 +8,7 @@ * for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 - * added bassoon/oboe instrument icons, created by dszgit (Ticket #131) + * added bassoon/oboe/harp instrument icons, created by dszgit (Ticket #131) * link to docs from application Help menu (Ticket #90) diff --git a/Jamulus.pro b/Jamulus.pro index bb9b5920..1b73e91e 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -567,6 +567,8 @@ DISTFILES += ChangeLog \ src/res/instruments/bassoon.png \ src/res/instruments/oboe.svg \ src/res/instruments/oboe.png \ + src/res/instruments/harp.svg \ + src/res/instruments/harp.png \ src/res/flags/flagnone.png \ src/res/flags/ad.png \ src/res/flags/ae.png \ diff --git a/src/res/instruments/harp.png b/src/res/instruments/harp.png new file mode 100644 index 0000000000000000000000000000000000000000..6b32f308afaf081f86d28a1820ee572020b521aa GIT binary patch literal 1169 zcmV;C1aA9@P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00a3+L_t(I%Z-#vXkAqlhX1wp zI``aL^J)`8bkO3UA|eKAg`z0<=pcfHqA0as6(cCrX+^ZAU=h@bRtxRGiI0KRNgZ_} zr4|uEL#4hIk!sT_+MClP_uO;#UcZBz2Qi7bM~e;X+iU-8tzQ7(;A40q8Fo3b9)h+y zPUns{_q~Pl_#a0OjN_;S<04C!?yZUv3P{QV%0FNnn>dW0)`BRa&9TZsS1=m9&IpWr zIK_t^_)~Xn@5rVzh>fofJdTOAAmOep8S3f5-6T6f!kkxGKC^Dy-Xwzt=w)wQf122E zN_p|%om;!NocsdsFC?vbm_GWi)0GK1$PtvW~S5N1=$4Xv% zI&$y>GVCERBt%Dh^3s_^02l-i;YI*X(p6PL2#pxybY0hjMRw2OOSbb~mqrf2_aDVR z?JrMs$^l}(Lt*Qegix^{`=eenB6p?Z$o_YyPro_*^?(|Bj00=+>z<|^w*$g3c z&8#URm&>vo05DTkRX=?8)_{tZJ+8NXqv^TJf+l9)pk`?8%TNxK@`O!idjJM>e8?Q$gKWc z1rQYl#1Tyf!kN3xtQL{JEX$@-N&`duY%`Ds6m_-#2wq$UQB5Zp5?Gm`4ulI#{vM4n zW--Rh%-qaia^VF7eu4W4~1U{1wx{?NN9RzMb(ciDQQ>@%~byIafX zM7mBfgIw{{zZcLJlZZqhP$;4VfTo$%A%srWJ@K+}HWT>FGe_{zN-J1^1TVoJ4Iz=y zGO{YFs_GA%-6rS)z{zwJs276Uw_sATWT90;vIq%jzQSQk?7Jh$&~U5O z+A%sh`s?K6 + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/res/translation_de_DE.ts b/src/res/translation_de_DE.ts index 157e0be3..d3763859 100644 --- a/src/res/translation_de_DE.ts +++ b/src/res/translation_de_DE.ts @@ -72,7 +72,7 @@ - + &OK @@ -153,22 +153,22 @@ - + MUTE - + SOLO - + Mute - + Solo @@ -406,32 +406,32 @@ - + C&onnect - + Pan - + Center - + Reverb - + Left - + Right @@ -946,17 +946,23 @@ CHelpMenu - + + + Getting &Started... + + + + + Software &Manual... + + + + What's &This - - &Download Link... - - - - + &About... @@ -1052,41 +1058,201 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a - + 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. - + Alias or name edit box - + Instrument picture button - + Country flag button - + City edit box - + Skill level combo box + + + None + + + + + Drum Set + + + + + Djembe + + + + + Electric Guitar + + + + + Acoustic Guitar + + + + + Bass Guitar + + + + + Keyboard + + + + + Synthesizer + + + + + Grand Piano + + + + + Accordion + + + + + Vocal + + + + + Microphone + + + + + Harmonica + + + + + Trumpet + + + + + Trombone + + + + + French Horn + + + + + Tuba + + + + + Saxophone + + + + + Clarinet + + + + + Flute + + + + + Violin + + + + + Cello + + + + + Double Bass + + + + + Recorder + + + + + Streamer + + + + + Listener + + + + + Guitar+Vocal + + + + + Keyboard+Vocal + + + + + Bodhran + + + + + Bassoon + + + + + Oboe + + + + + Harp + + CServerDlg @@ -1112,7 +1278,7 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons Licence dialog is shown each time a new user connects the server. + <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. @@ -1234,7 +1400,7 @@ What you set here will appear at your fader on the mixer board when you are conn - Show Creative Commons Licence Dialog + Show Creative Commons BY-NC-SA 4.0 Licence Dialog @@ -1276,85 +1442,73 @@ What you set here will appear at your fader on the mixer board when you are conn CSound - + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. - + The Jack server sample rate is different from the required one. The required sample rate is: <b> - + Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> - + </b> to achieve a low delay. - - + + The Jack port registering failed. - + Cannot activate the Jack client. - - - Cannot connect the Jack input ports - - - - - - Cannot connect the Jack output ports. - - - - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + 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. - + 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 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. @@ -1395,12 +1549,12 @@ What you set here will appear at your fader on the mixer board when you are conn - + <b>No ASIO audio device (driver) found.</b><br><br>The - + software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. @@ -1408,37 +1562,37 @@ What you set here will appear at your fader on the mixer board when you are conn CSoundBase - + Invalid device selection. - + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> - + </b><br><br>Please restart the software. - + <b>No usable - + audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> - + <br/>Do you want to open the ASIO driver setups? - + could not be started because of audio interface issues. diff --git a/src/res/translation_fr_FR.ts b/src/res/translation_fr_FR.ts index 96aba445..e70f5247 100644 --- a/src/res/translation_fr_FR.ts +++ b/src/res/translation_fr_FR.ts @@ -72,7 +72,7 @@ - + &OK @@ -153,22 +153,22 @@ - + MUTE - + SOLO - + Mute - + Solo @@ -406,32 +406,32 @@ - + C&onnect - + Pan - + Center - + Reverb - + Left - + Right @@ -946,17 +946,23 @@ CHelpMenu - + + + Getting &Started... + + + + + Software &Manual... + + + + What's &This - - &Download Link... - - - - + &About... @@ -1052,41 +1058,201 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a - + 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. - + Alias or name edit box - + Instrument picture button - + Country flag button - + City edit box - + Skill level combo box + + + None + + + + + Drum Set + + + + + Djembe + + + + + Electric Guitar + + + + + Acoustic Guitar + + + + + Bass Guitar + + + + + Keyboard + + + + + Synthesizer + + + + + Grand Piano + + + + + Accordion + + + + + Vocal + + + + + Microphone + + + + + Harmonica + + + + + Trumpet + + + + + Trombone + + + + + French Horn + + + + + Tuba + + + + + Saxophone + + + + + Clarinet + + + + + Flute + + + + + Violin + + + + + Cello + + + + + Double Bass + + + + + Recorder + + + + + Streamer + + + + + Listener + + + + + Guitar+Vocal + + + + + Keyboard+Vocal + + + + + Bodhran + + + + + Bassoon + + + + + Oboe + + + + + Harp + + CServerDlg @@ -1112,7 +1278,7 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons Licence dialog is shown each time a new user connects the server. + <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. @@ -1234,7 +1400,7 @@ What you set here will appear at your fader on the mixer board when you are conn - Show Creative Commons Licence Dialog + Show Creative Commons BY-NC-SA 4.0 Licence Dialog @@ -1276,85 +1442,73 @@ What you set here will appear at your fader on the mixer board when you are conn CSound - + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. - + The Jack server sample rate is different from the required one. The required sample rate is: <b> - + Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> - + </b> to achieve a low delay. - - + + The Jack port registering failed. - + Cannot activate the Jack client. - - - Cannot connect the Jack input ports - - - - - - Cannot connect the Jack output ports. - - - - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + 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. - + 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 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. @@ -1395,12 +1549,12 @@ What you set here will appear at your fader on the mixer board when you are conn - + <b>No ASIO audio device (driver) found.</b><br><br>The - + software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. @@ -1408,37 +1562,37 @@ What you set here will appear at your fader on the mixer board when you are conn CSoundBase - + Invalid device selection. - + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> - + </b><br><br>Please restart the software. - + <b>No usable - + audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> - + <br/>Do you want to open the ASIO driver setups? - + could not be started because of audio interface issues. diff --git a/src/resources.qrc b/src/resources.qrc index a39279c1..80c33957 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -52,6 +52,7 @@ res/instruments/bodhran.png res/instruments/bassoon.png res/instruments/oboe.png + res/instruments/harp.png res/fronticon.png diff --git a/src/util.cpp b/src/util.cpp index c3b3ec7f..98a19a35 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -957,37 +957,38 @@ CVector& CInstPictures::GetTable() // instrument picture data base initialization // NOTE: Do not change the order of any instrument in the future! // NOTE: The very first entry is the "not used" element per definition. - vecDataBase.Add ( CInstPictProps ( "None", ":/png/instr/res/instruments/instrnone.png", IC_OTHER_INSTRUMENT ) ); // special first element - vecDataBase.Add ( CInstPictProps ( "Drum Set", ":/png/instr/res/instruments/instrdrumset.png", IC_PERCUSSION_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Djembe", ":/png/instr/res/instruments/instrdjembe.png", IC_PERCUSSION_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Electric Guitar", ":/png/instr/res/instruments/instreguitar.png", IC_PLUCKING_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Acoustic Guitar", ":/png/instr/res/instruments/instraguitar.png", IC_PLUCKING_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Bass Guitar", ":/png/instr/res/instruments/instrbassguitar.png", IC_PLUCKING_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Keyboard", ":/png/instr/res/instruments/instrkeyboard.png", IC_KEYBOARD_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Synthesizer", ":/png/instr/res/instruments/instrsynthesizer.png", IC_KEYBOARD_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Grand Piano", ":/png/instr/res/instruments/instrgrandpiano.png", IC_KEYBOARD_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Accordion", ":/png/instr/res/instruments/instraccordeon.png", IC_KEYBOARD_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Vocal", ":/png/instr/res/instruments/instrvocal.png", IC_OTHER_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Microphone", ":/png/instr/res/instruments/instrmicrophone.png", IC_OTHER_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Harmonica", ":/png/instr/res/instruments/instrharmonica.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Trumpet", ":/png/instr/res/instruments/instrtrumpet.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Trombone", ":/png/instr/res/instruments/instrtrombone.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "French Horn", ":/png/instr/res/instruments/instrfrenchhorn.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Tuba", ":/png/instr/res/instruments/instrtuba.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Saxophone", ":/png/instr/res/instruments/instrsaxophone.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Clarinet", ":/png/instr/res/instruments/instrclarinet.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Flute", ":/png/instr/res/instruments/instrflute.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Violin", ":/png/instr/res/instruments/instrviolin.png", IC_STRING_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Cello", ":/png/instr/res/instruments/instrcello.png", IC_STRING_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Double Bass", ":/png/instr/res/instruments/instrdoublebass.png", IC_STRING_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Recorder", ":/png/instr/res/instruments/instrrecorder.png", IC_OTHER_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Streamer", ":/png/instr/res/instruments/instrstreamer.png", IC_OTHER_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Listener", ":/png/instr/res/instruments/instrlistener.png", IC_OTHER_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Guitar+Vocal", ":/png/instr/res/instruments/instrguitarvocal.png", IC_MULTIPLE_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Keyboard+Vocal", ":/png/instr/res/instruments/instrkeyboardvocal.png", IC_MULTIPLE_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Bodhran", ":/png/instr/res/instruments/bodhran.png", IC_PERCUSSION_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Bassoon", ":/png/instr/res/instruments/bassoon.png", IC_WIND_INSTRUMENT ) ); - vecDataBase.Add ( CInstPictProps ( "Oboe", ":/png/instr/res/instruments/oboe.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "None" ), ":/png/instr/res/instruments/instrnone.png", IC_OTHER_INSTRUMENT ) ); // special first element + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Drum Set" ), ":/png/instr/res/instruments/instrdrumset.png", IC_PERCUSSION_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Djembe" ), ":/png/instr/res/instruments/instrdjembe.png", IC_PERCUSSION_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Electric Guitar" ), ":/png/instr/res/instruments/instreguitar.png", IC_PLUCKING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Acoustic Guitar" ), ":/png/instr/res/instruments/instraguitar.png", IC_PLUCKING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Bass Guitar" ), ":/png/instr/res/instruments/instrbassguitar.png", IC_PLUCKING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Keyboard" ), ":/png/instr/res/instruments/instrkeyboard.png", IC_KEYBOARD_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Synthesizer" ), ":/png/instr/res/instruments/instrsynthesizer.png", IC_KEYBOARD_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Grand Piano" ), ":/png/instr/res/instruments/instrgrandpiano.png", IC_KEYBOARD_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Accordion" ), ":/png/instr/res/instruments/instraccordeon.png", IC_KEYBOARD_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Vocal" ), ":/png/instr/res/instruments/instrvocal.png", IC_OTHER_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Microphone" ), ":/png/instr/res/instruments/instrmicrophone.png", IC_OTHER_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Harmonica" ), ":/png/instr/res/instruments/instrharmonica.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Trumpet" ), ":/png/instr/res/instruments/instrtrumpet.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Trombone" ), ":/png/instr/res/instruments/instrtrombone.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "French Horn" ), ":/png/instr/res/instruments/instrfrenchhorn.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Tuba" ), ":/png/instr/res/instruments/instrtuba.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Saxophone" ), ":/png/instr/res/instruments/instrsaxophone.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Clarinet" ), ":/png/instr/res/instruments/instrclarinet.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Flute" ), ":/png/instr/res/instruments/instrflute.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Violin" ), ":/png/instr/res/instruments/instrviolin.png", IC_STRING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Cello" ), ":/png/instr/res/instruments/instrcello.png", IC_STRING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Double Bass" ), ":/png/instr/res/instruments/instrdoublebass.png", IC_STRING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Recorder" ), ":/png/instr/res/instruments/instrrecorder.png", IC_OTHER_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Streamer" ), ":/png/instr/res/instruments/instrstreamer.png", IC_OTHER_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Listener" ), ":/png/instr/res/instruments/instrlistener.png", IC_OTHER_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Guitar+Vocal" ), ":/png/instr/res/instruments/instrguitarvocal.png", IC_MULTIPLE_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Keyboard+Vocal" ), ":/png/instr/res/instruments/instrkeyboardvocal.png", IC_MULTIPLE_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Bodhran" ), ":/png/instr/res/instruments/bodhran.png", IC_PERCUSSION_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Bassoon" ), ":/png/instr/res/instruments/bassoon.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Oboe" ), ":/png/instr/res/instruments/oboe.png", IC_WIND_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Harp" ), ":/png/instr/res/instruments/harp.png", IC_STRING_INSTRUMENT ) ); // now the table is initialized TableIsInitialized = true; From 02dfb101f1d1fe7fa073a8bebadb61986a9ef0f1 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 17:12:39 +0200 Subject: [PATCH 028/125] cleanup --- mac/sound.cpp | 72 --------------------------------------------------- 1 file changed, 72 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 4e88b226..6a125b97 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -869,57 +869,6 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, GetSelCHAndAddCH ( iSelInputRightChannel, iNumInChan, iSelCHRight, iSelAddCHRight ); // check size (float32 has four bytes) -// TODO assumption that all buffer have same interleaved number of channels is not correct! -// if ( inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == -// (UInt32) iNumInChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) -// { -// const int iNumChanPerFrame = iNumInChan / inInputData->mNumberBuffers; -// const int iSelBufferLeft = iSelCHLeft / iNumChanPerFrame; -// const int iSelBufferRight = iSelCHRight / iNumChanPerFrame; -// const int iSelInterlChLeft = iSelCHLeft % iNumChanPerFrame; -// const int iSelInterlChRight = iSelCHRight % iNumChanPerFrame; -// -// Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelBufferLeft].mData ); -// Float32* pRightData = static_cast ( inInputData->mBuffers[iSelBufferRight].mData ); -// -// // copy input data -// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) -// { -// // copy left and right channels separately -// pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pLeftData[iNumChanPerFrame * i + iSelInterlChLeft] * _MAXSHORT ); -// pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pRightData[iNumChanPerFrame * i + iSelInterlChRight] * _MAXSHORT ); -// } -// -// // add an additional optional channel -// if ( iSelAddCHLeft >= 0 ) -// { -// const int iSelAddCHBufferLeft = iSelAddCHLeft / iNumChanPerFrame; -// const int iSelAddCHInterlChLeft = iSelAddCHLeft % iNumChanPerFrame; -// -// pLeftData = static_cast ( inInputData->mBuffers[iSelAddCHBufferLeft].mData ); -// -// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) -// { -// pSound->vecsTmpAudioSndCrdStereo[2 * i] = Double2Short ( -// pSound->vecsTmpAudioSndCrdStereo[2 * i] + pLeftData[iNumChanPerFrame * i + iSelAddCHInterlChLeft] * _MAXSHORT ); -// } -// } -// -// if ( iSelAddCHRight >= 0 ) -// { -// const int iSelAddCHBufferRight = iSelAddCHRight / iNumChanPerFrame; -// const int iSelAddCHInterlChRight = iSelAddCHRight % iNumChanPerFrame; -// -// pRightData = static_cast ( inInputData->mBuffers[iSelAddCHBufferRight].mData ); -// -// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) -// { -// pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = Double2Short ( -// pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pRightData[iNumChanPerFrame * i + iSelAddCHInterlChRight] * _MAXSHORT ); -// } -// } -// } -// else if ( inInputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumInChan * 4 ) ) { @@ -1005,27 +954,6 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData ) { // check size (float32 has four bytes) -// if ( outOutputData->mBuffers[0].mDataByteSize * outOutputData->mNumberBuffers == -// (UInt32) iNumOutChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) -// { -// const int iNumChanPerFrame = iNumOutChan / outOutputData->mNumberBuffers; -// const int iSelBufferLeft = iSelOutputLeftChannel / iNumChanPerFrame; -// const int iSelBufferRight = iSelOutputRightChannel / iNumChanPerFrame; -// const int iSelInterlChLeft = iSelOutputLeftChannel % iNumChanPerFrame; -// const int iSelInterlChRight = iSelOutputRightChannel % iNumChanPerFrame; -// -// Float32* pLeftData = static_cast ( outOutputData->mBuffers[iSelBufferLeft].mData ); -// Float32* pRightData = static_cast ( outOutputData->mBuffers[iSelBufferRight].mData ); -// -// // copy output data -// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) -// { -// // copy left and right channels separately -// pLeftData[iNumChanPerFrame * i + iSelInterlChLeft] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; -// pRightData[iNumChanPerFrame * i + iSelInterlChRight] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; -// } -// } -// else if ( outOutputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumOutChan * 4 ) ) { From 70a78fa42632a6d5e3739b35e0ff17cd80a06878 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 17:15:18 +0200 Subject: [PATCH 029/125] backup checkin, WIP --- mac/sound.cpp | 242 +++++++++++++++++++++++++++++++++----------------- mac/sound.h | 18 +++- 2 files changed, 177 insertions(+), 83 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 6a125b97..4a21be11 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -264,40 +264,49 @@ int CSound::CountChannels ( AudioDeviceID devID, UInt32 propSize; int result = 0; - // check for the case the we have interleaved format, in that case we assume - // that only the very first buffer contains all our channels - if ( iNumChanPerFrame > 1 ) + if ( isInput ) { - result = iNumChanPerFrame; + vecNumInBufChan.Init ( 0 ); } else { - // it seems we have multiple buffers where each buffer has only one channel, - // in that case we assume that each input channel has its own buffer - AudioObjectPropertyScope theScope = isInput ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; + vecNumOutBufChan.Init ( 0 ); + } - AudioObjectPropertyAddress theAddress = { kAudioDevicePropertyStreamConfiguration, - theScope, - 0 }; + // it seems we have multiple buffers where each buffer has only one channel, + // in that case we assume that each input channel has its own buffer + AudioObjectPropertyScope theScope = isInput ? kAudioDevicePropertyScopeInput : kAudioDevicePropertyScopeOutput; - AudioObjectGetPropertyDataSize ( devID, &theAddress, 0, NULL, &propSize ); + AudioObjectPropertyAddress theAddress = { kAudioDevicePropertyStreamConfiguration, + theScope, + 0 }; - AudioBufferList *buflist = (AudioBufferList*) malloc ( propSize ); + AudioObjectGetPropertyDataSize ( devID, &theAddress, 0, NULL, &propSize ); - err = AudioObjectGetPropertyData ( devID, &theAddress, 0, NULL, &propSize, buflist ); + AudioBufferList *buflist = (AudioBufferList*) malloc ( propSize ); - if ( !err ) + err = AudioObjectGetPropertyData ( devID, &theAddress, 0, NULL, &propSize, buflist ); + + if ( !err ) + { + for ( UInt32 i = 0; i < buflist->mNumberBuffers; ++i ) { - for ( UInt32 i = 0; i < buflist->mNumberBuffers; ++i ) + // The correct value mNumberChannels for an AudioBuffer can be derived from the mChannelsPerFrame + // and the interleaved flag. For non interleaved formats, mNumberChannels is always 1. + // For interleaved formats, mNumberChannels is equal to mChannelsPerFrame. + result += buflist->mBuffers[i].mNumberChannels; + + if ( isInput ) { - // The correct value mNumberChannels for an AudioBuffer can be derived from the mChannelsPerFrame - // and the interleaved flag. For non interleaved formats, mNumberChannels is always 1. - // For interleaved formats, mNumberChannels is equal to mChannelsPerFrame. - result += buflist->mBuffers[i].mNumberChannels; + vecNumInBufChan.Add ( buflist->mBuffers[i].mNumberChannels ); + } + else + { + vecNumOutBufChan.Add ( buflist->mBuffers[i].mNumberChannels ); } } - free ( buflist ); } + free ( buflist ); return result; } @@ -317,10 +326,10 @@ QString CSound::LoadAndInitializeDriver ( int iDriverIdx, bool ) // the device has changed, per definition we reset the channel // mapping to the defaults (first two available channels) - iSelInputLeftChannel = 0; - iSelInputRightChannel = min ( iNumInChan - 1, 1 ); - iSelOutputLeftChannel = 0; - iSelOutputRightChannel = min ( iNumOutChan - 1, 1 ); + SetLeftInputChannel ( 0 ); + SetRightInputChannel ( 1 ); + SetLeftOutputChannel ( 0 ); + SetRightOutputChannel ( 1 ); } return strStat; @@ -599,12 +608,85 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) return ""; } +void CSound::UpdateChSelection() +{ + // calculate the selected input/output buffer and the selected interleaved + // channel index in the buffer, note that each buffer can have a different + // number of interleaved channels + int iChCnt; + int iSelCHLeft, iSelAddCHLeft; + int iSelCHRight, iSelAddCHRight; + iSelAddInBufferLeft = -1; // initialize with invalid value + iSelAddInInterlChLeft = -1; // initialize with invalid value + iSelAddInBufferRight = -1; // initialize with invalid value + iSelAddInInterlChRight = -1; // initialize with invalid value + + // input + GetSelCHAndAddCH ( iSelInputLeftChannel, iNumInChan, iSelCHLeft, iSelAddCHLeft ); + GetSelCHAndAddCH ( iSelInputRightChannel, iNumInChan, iSelCHRight, iSelAddCHRight ); + + iChCnt = 0; + + for ( int iBuf = 0; iBuf < vecNumInBufChan.Size(); iBuf++ ) + { + iChCnt += vecNumInBufChan[iBuf]; + + if ( iChCnt > iSelCHLeft ) + { + iSelInBufferLeft = iBuf; + iSelInInterlChLeft = iSelCHLeft - iChCnt + vecNumInBufChan[iBuf]; + } + + if ( iChCnt > iSelCHRight ) + { + iSelInBufferRight = iBuf; + iSelInInterlChRight = iSelCHRight - iChCnt + vecNumInBufChan[iBuf]; + } + + if ( ( iSelAddCHLeft >= 0 ) && ( iChCnt > iSelAddCHLeft ) ) + { + iSelAddInBufferLeft = iBuf; + iSelAddInInterlChLeft = iSelAddCHLeft - iChCnt + vecNumInBufChan[iBuf]; + } + + if ( ( iSelAddCHRight >= 0 ) && ( iChCnt > iSelAddCHRight ) ) + { + iSelAddInBufferRight = iBuf; + iSelAddInInterlChRight = iSelAddCHRight - iChCnt + vecNumInBufChan[iBuf]; + } + } + + // output + GetSelCHAndAddCH ( iSelOutputLeftChannel, iNumOutChan, iSelCHLeft, iSelAddCHLeft ); + GetSelCHAndAddCH ( iSelOutputRightChannel, iNumOutChan, iSelCHRight, iSelAddCHRight ); + + iChCnt = 0; + + for ( int iBuf = 0; iBuf < vecNumOutBufChan.Size(); iBuf++ ) + { + iChCnt += vecNumOutBufChan[iBuf]; + + if ( iChCnt > iSelCHLeft ) + { + iSelOutBufferLeft = iBuf; + iSelOutInterlChLeft = iSelCHLeft - iChCnt + vecNumOutBufChan[iBuf]; + } + + if ( iChCnt > iSelCHRight ) + { + iSelOutBufferRight = iBuf; + iSelOutInterlChRight = iSelCHRight - iChCnt + vecNumOutBufChan[iBuf]; + } + } +} + void CSound::SetLeftInputChannel ( const int iNewChan ) { // apply parameter after input parameter check if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChanPlusAddChan ) ) { iSelInputLeftChannel = iNewChan; + UpdateChSelection(); } } @@ -614,6 +696,7 @@ void CSound::SetRightInputChannel ( const int iNewChan ) if ( ( iNewChan >= 0 ) && ( iNewChan < iNumInChanPlusAddChan ) ) { iSelInputRightChannel = iNewChan; + UpdateChSelection(); } } @@ -623,6 +706,7 @@ void CSound::SetLeftOutputChannel ( const int iNewChan ) if ( ( iNewChan >= 0 ) && ( iNewChan < iNumOutChan ) ) { iSelOutputLeftChannel = iNewChan; + UpdateChSelection(); } } @@ -632,6 +716,7 @@ void CSound::SetRightOutputChannel ( const int iNewChan ) if ( ( iNewChan >= 0 ) && ( iNewChan < iNumOutChan ) ) { iSelOutputRightChannel = iNewChan; + UpdateChSelection(); } } @@ -854,90 +939,62 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, const int iCoreAudioBufferSizeMono = pSound->iCoreAudioBufferSizeMono; const int iNumInChan = pSound->iNumInChan; const int iNumOutChan = pSound->iNumOutChan; - const int iSelInputLeftChannel = pSound->iSelInputLeftChannel; - const int iSelInputRightChannel = pSound->iSelInputRightChannel; - const int iSelOutputLeftChannel = pSound->iSelOutputLeftChannel; - const int iSelOutputRightChannel = pSound->iSelOutputRightChannel; + const int iSelInBufferLeft = pSound->iSelInBufferLeft; + const int iSelInBufferRight = pSound->iSelInBufferRight; + const int iSelInInterlChLeft = pSound->iSelInInterlChLeft; + const int iSelInInterlChRight = pSound->iSelInInterlChRight; + const int iSelAddInBufferLeft = pSound->iSelAddInBufferLeft; + const int iSelAddInBufferRight = pSound->iSelAddInBufferRight; + const int iSelAddInInterlChLeft = pSound->iSelAddInInterlChLeft; + const int iSelAddInInterlChRight = pSound->iSelAddInInterlChRight; + const int iSelOutBufferLeft = pSound->iSelOutBufferLeft; + const int iSelOutBufferRight = pSound->iSelOutBufferRight; + const int iSelOutInterlChLeft = pSound->iSelOutInterlChLeft; + const int iSelOutInterlChRight = pSound->iSelOutInterlChRight; if ( ( inDevice == pSound->CurrentAudioInputDeviceID ) && inInputData ) { - int iSelCHLeft, iSelAddCHLeft; - int iSelCHRight, iSelAddCHRight; - - // get selected input channels plus optional additional channel - GetSelCHAndAddCH ( iSelInputLeftChannel, iNumInChan, iSelCHLeft, iSelAddCHLeft ); - GetSelCHAndAddCH ( iSelInputRightChannel, iNumInChan, iSelCHRight, iSelAddCHRight ); - // check size (float32 has four bytes) - if ( inInputData->mBuffers[0].mDataByteSize == - static_cast ( iCoreAudioBufferSizeMono * iNumInChan * 4 ) ) +// TODO check... + if ( inInputData->mBuffers[iSelInBufferLeft].mDataByteSize == ... +inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == +(UInt32) iNumInChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) { - // one buffer with all the channels in interleaved format: - // get a pointer to the input data of the correct type - Float32* pInData = static_cast ( inInputData->mBuffers[0].mData ); + Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelInBufferLeft].mData ); + Float32* pRightData = static_cast ( inInputData->mBuffers[iSelInBufferRight].mData ); + int iNumChanPerFrameLeft = pSound->vecNumInBufChan[iSelInBufferLeft]; + int iNumChanPerFrameRight = pSound->vecNumInBufChan[iSelInBufferRight]; // copy input data for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { // copy left and right channels separately - pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pInData[iNumInChan * i + iSelCHLeft] * _MAXSHORT ); - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pInData[iNumInChan * i + iSelCHRight] * _MAXSHORT ); + pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pLeftData[iNumChanPerFrameLeft * i + iSelInInterlChLeft] * _MAXSHORT ); + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pRightData[iNumChanPerFrameRight * i + iSelInInterlChRight] * _MAXSHORT ); } // add an additional optional channel - if ( iSelAddCHLeft >= 0 ) + if ( iSelAddInBufferLeft >= 0 ) { - for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) - { - pSound->vecsTmpAudioSndCrdStereo[2 * i] = Double2Short ( - pSound->vecsTmpAudioSndCrdStereo[2 * i] + pInData[iNumInChan * i + iSelAddCHLeft] * _MAXSHORT ); - } - } - - if ( iSelAddCHRight >= 0 ) - { - for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) - { - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = Double2Short ( - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pInData[iNumInChan * i + iSelAddCHRight] * _MAXSHORT ); - } - } - } - else if ( inInputData->mNumberBuffers == (UInt32) iNumInChan && // we should have a matching number of buffers to channels - inInputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * 4 ) ) - { - // one buffer per channel mode: - Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelCHLeft].mData ); - Float32* pRightData = static_cast ( inInputData->mBuffers[iSelCHRight].mData ); - - // copy input data - for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) - { - // copy left and right channels separately - pSound->vecsTmpAudioSndCrdStereo[2 * i] = (short) ( pLeftData[i] * _MAXSHORT ); - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = (short) ( pRightData[i] * _MAXSHORT ); - } - - // add an additional optional channel - if ( iSelAddCHLeft >= 0 ) - { - pLeftData = static_cast ( inInputData->mBuffers[iSelAddCHLeft].mData ); + pLeftData = static_cast ( inInputData->mBuffers[iSelAddInBufferLeft].mData ); + iNumChanPerFrameLeft = pSound->vecNumInBufChan[iSelAddInBufferLeft]; for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { pSound->vecsTmpAudioSndCrdStereo[2 * i] = Double2Short ( - pSound->vecsTmpAudioSndCrdStereo[2 * i] + pLeftData[i] * _MAXSHORT ); + pSound->vecsTmpAudioSndCrdStereo[2 * i] + pLeftData[iNumChanPerFrameLeft * i + iSelAddInInterlChLeft] * _MAXSHORT ); } } - if ( iSelAddCHRight >= 0 ) + if ( iSelAddInBufferRight >= 0 ) { - pRightData = static_cast ( inInputData->mBuffers[iSelAddCHRight].mData ); + pRightData = static_cast ( inInputData->mBuffers[iSelAddInBufferRight].mData ); + iNumChanPerFrameRight = pSound->vecNumInBufChan[iSelAddInBufferRight]; for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] = Double2Short ( - pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pRightData[i] * _MAXSHORT ); + pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] + pRightData[iNumChanPerFrameRight * i + iSelAddInInterlChRight] * _MAXSHORT ); } } } @@ -954,6 +1011,27 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData ) { // check size (float32 has four bytes) +// if ( outOutputData->mBuffers[0].mDataByteSize * outOutputData->mNumberBuffers == +// (UInt32) iNumOutChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) +// { +// const int iNumChanPerFrame = iNumOutChan / outOutputData->mNumberBuffers; +// const int iSelBufferLeft = iSelOutputLeftChannel / iNumChanPerFrame; +// const int iSelBufferRight = iSelOutputRightChannel / iNumChanPerFrame; +// const int iSelInterlChLeft = iSelOutputLeftChannel % iNumChanPerFrame; +// const int iSelInterlChRight = iSelOutputRightChannel % iNumChanPerFrame; +// +// Float32* pLeftData = static_cast ( outOutputData->mBuffers[iSelBufferLeft].mData ); +// Float32* pRightData = static_cast ( outOutputData->mBuffers[iSelBufferRight].mData ); +// +// // copy output data +// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) +// { +// // copy left and right channels separately +// pLeftData[iNumChanPerFrame * i + iSelInterlChLeft] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; +// pRightData[iNumChanPerFrame * i + iSelInterlChRight] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; +// } +// } +// else if ( outOutputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * iNumOutChan * 4 ) ) { diff --git a/mac/sound.h b/mac/sound.h index a4f267f8..ce905d35 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -75,11 +75,27 @@ public: int iSelInputRightChannel; int iSelOutputLeftChannel; int iSelOutputRightChannel; + int iSelInBufferLeft; + int iSelInBufferRight; + int iSelInInterlChLeft; + int iSelInInterlChRight; + int iSelAddInBufferLeft; + int iSelAddInBufferRight; + int iSelAddInInterlChLeft; + int iSelAddInInterlChRight; + int iSelOutBufferLeft; + int iSelOutBufferRight; + int iSelOutInterlChLeft; + int iSelOutInterlChRight; + CVector vecNumInBufChan; + CVector vecNumOutBufChan; protected: virtual QString LoadAndInitializeDriver ( int iIdx, bool ); - QString CheckDeviceCapabilities ( const int iDriverIdx ); + QString CheckDeviceCapabilities ( const int iDriverIdx ); + void UpdateChSelection(); + int CountChannels ( AudioDeviceID devID, const int iNumChanPerFrame, bool isInput ); From 135faf6a7db35fbbcc2d6a992a95653a85615cea Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 17:19:01 +0200 Subject: [PATCH 030/125] fix list (for consistency) --- ChangeLog | 73 +++++++++++++++++++++++++++---------------------------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index e5205f2d..a25eb934 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,16 +3,15 @@ - 3.5.3git - * for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 +- for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 - * added bassoon/oboe/harp instrument icons, created by dszgit (Ticket #131) +- added bassoon/oboe/harp instrument icons, created by dszgit (Ticket #131) - * link to docs from application Help menu (Ticket #90) +- link to docs from application Help menu (Ticket #90) - * bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) +- bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) TODO support CoreAudio aggregated devices @@ -35,73 +34,73 @@ TODO show mute state of others 3.5.2 (2020-04-24) - * use audio level meter bars for normal skin +- use audio level meter bars for normal skin - * store Show All Musicians setting in the ini-file +- store Show All Musicians setting in the ini-file - * improved Mac installer, coded by doloopuntil +- improved Mac installer, coded by doloopuntil - * support to open ASIO driver setup(s) if startup failed due to incorrect driver settings (Ticket #117) +- support to open ASIO driver setup(s) if startup failed due to incorrect driver settings (Ticket #117) - * added -v/--version command line argument to output version information (Ticket #121) +- added -v/--version command line argument to output version information (Ticket #121) - * added bodhran and other instrument icons, bodhran created by bomm (Ticket #131) +- added bodhran and other instrument icons, bodhran created by bomm (Ticket #131) - * bug fix: if small network buffers are used we get much better audio quality when drop outs occur +- bug fix: if small network buffers are used we get much better audio quality when drop outs occur - * bug fix: if names given with the -o option were too long, the server registration failed (Ticket #91) +- bug fix: if names given with the -o option were too long, the server registration failed (Ticket #91) - * bug fix: audio level changes if Buffer Delay is changed (Ticket #106) +- bug fix: audio level changes if Buffer Delay is changed (Ticket #106) - * bug fix: do not reset fader level meters if number of clients change +- bug fix: do not reset fader level meters if number of clients change - * bug fix: fixed a crash with JackRouter 64 bit ASIO driver (Ticket #93, thanks to elliotclee) +- bug fix: fixed a crash with JackRouter 64 bit ASIO driver (Ticket #93, thanks to elliotclee) 3.5.1 (2020-04-18) - * added a Mute Stream button to hear your signal and the signal of the other clients but - do not transmit your signal to the server so that the other clients cannot hear you +- added a Mute Stream button to hear your signal and the signal of the other clients but + do not transmit your signal to the server so that the other clients cannot hear you - * added Enable Small Network Buffers switch to enable small sound card buffers in - combination with legacy OPUS packets since OPUS packets with 64 samples enable low - latency but can increase audio drop outs +- added Enable Small Network Buffers switch to enable small sound card buffers in + combination with legacy OPUS packets since OPUS packets with 64 samples enable low + latency but can increase audio drop outs - * upgrade OPUS codec library to v1.3.1 by doloopuntil +- upgrade OPUS codec library to v1.3.1 by doloopuntil - * server list registration status indicator added to the server GUI, coded by pljones +- server list registration status indicator added to the server GUI, coded by pljones - * improved auto jitter buffer for 64 samples frame size +- improved auto jitter buffer for 64 samples frame size - * the ping times in the server list are now more stable +- the ping times in the server list are now more stable 3.5.0 (2020-04-15) - * added support for 64 samples OPUS packets in the client (if a sound card buffer size - larger or equal than 128 samples is chosen, the legacy 128 samples OPUS packets are used) +- added support for 64 samples OPUS packets in the client (if a sound card buffer size + larger or equal than 128 samples is chosen, the legacy 128 samples OPUS packets are used) - * added a filter for the server list to, e.g., filter a specific country or search for a musician +- added a filter for the server list to, e.g., filter a specific country or search for a musician - * refresh server list if the Central Server address type is changed +- refresh server list if the Central Server address type is changed - * the unit of the mixer faders is now dB using the range -50 dB to 0 dB +- the unit of the mixer faders is now dB using the range -50 dB to 0 dB - * increased LED luminance (Ticket #71) +- increased LED luminance (Ticket #71) - * bug fix: the server welcome message may appear twice if the server list was double clicked +- bug fix: the server welcome message may appear twice if the server list was double clicked 3.4.7 (2020-04-11) - * added support for alternative Central Servers to solve the 200 server registration limit (Ticket #50) +- added support for alternative Central Servers to solve the 200 server registration limit (Ticket #50) - * added support for 64 samples frame size in the server (if server runs in 64 or 128 samples - mode it is still compatible to both, 64 and 128 samples frame size clients) +- added support for 64 samples frame size in the server (if server runs in 64 or 128 samples + mode it is still compatible to both, 64 and 128 samples frame size clients) - * added multichannel CoreAudio support, coded by emlynmac (#44) +- added multichannel CoreAudio support, coded by emlynmac (#44) - * fixed server not visible if in same local network, coded by pljones (Ticket #27) +- fixed server not visible if in same local network, coded by pljones (Ticket #27) 3.4.6 (2020-04-09) From 27e9bebea3c5bb37dac2e85eaf34899ab1a637cb Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sat, 2 May 2020 21:55:25 +0200 Subject: [PATCH 031/125] some more testing for translations --- src/main.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9fcc413f..9717330e 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -516,12 +516,14 @@ int main ( int argc, char** argv ) // TODO translation loading does not yet work +// TODO CONFIG += lrelease embed_translations +// TODO QM_FILES_RESOURCE_PREFIX needed??? // // load translations // if ( bUseGUI ) // { // QTranslator myappTranslator; -// bool ret = myappTranslator.load ( "src/res/translation_" + QLocale::system().name() ); -//qDebug() << "translation successfully loaded: " << ret << " " << "src/res/translation_" + QLocale::system().name(); +// bool ret = myappTranslator.load ( "translation_" + QLocale::system().name() ); +//qDebug() << "translation successfully loaded: " << ret << " " << "translation_" + QLocale::system().name(); // pApp->installTranslator ( &myappTranslator ); // } From dc656992ec447c981512c9c73737bd2b5144f65f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 10:44:53 +0200 Subject: [PATCH 032/125] bug fix: standard style: meter bar gets smaller sometimes if board is full and fader text is short --- ChangeLog | 2 -- src/clientdlgbase.ui | 4 ++-- src/multicolorledbar.cpp | 5 ++--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index a25eb934..e7515189 100644 --- a/ChangeLog +++ b/ChangeLog @@ -18,8 +18,6 @@ TODO support CoreAudio aggregated devices TODO support internationalization -TODO standard style: meter bar gets smaller sometimes if board is full and fader text is short - TODO implement panning for channels (Ticket #52, #145) TODO sometimes I cannot see the central server in the server list diff --git a/src/clientdlgbase.ui b/src/clientdlgbase.ui index 48b04c53..6f30a5e8 100755 --- a/src/clientdlgbase.ui +++ b/src/clientdlgbase.ui @@ -249,7 +249,7 @@ - 16 + 19 88 @@ -265,7 +265,7 @@ - 16 + 19 88 diff --git a/src/multicolorledbar.cpp b/src/multicolorledbar.cpp index 0cd94af4..b67efea4 100755 --- a/src/multicolorledbar.cpp +++ b/src/multicolorledbar.cpp @@ -48,8 +48,7 @@ CMultiColorLEDBar::CMultiColorLEDBar ( QWidget* parent, Qt::WindowFlags f ) : // create LED object vecpLEDs[iLEDIdx] = new cLED ( parent ); - // add LED to layout with spacer (do not add spacer on the bottom of the - // first LED) + // add LED to layout with spacer (do not add spacer on the bottom of the first LED) if ( iLEDIdx < NUM_STEPS_LED_BAR - 1 ) { pLEDLayout->addStretch(); @@ -77,7 +76,7 @@ CMultiColorLEDBar::CMultiColorLEDBar ( QWidget* parent, Qt::WindowFlags f ) : // according to QScrollArea description: "When using a scroll area to display the // contents of a custom widget, it is important to ensure that the size hint of // the child widget is set to a suitable value." - pProgressBar->setMinimumSize ( QSize ( 1, 1 ) ); + pProgressBar->setMinimumSize ( QSize ( 19, 1 ) ); // 15px + 2 * 1px + 2 * 1px = 19px pLEDMeter->setMinimumSize ( QSize ( 1, 1 ) ); // update the meter type (using the default value of the meter type) From 1e5f168c5aea057cbf74a4175337fa8912aac148 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 13:44:50 +0200 Subject: [PATCH 033/125] some cleanup and fixes --- mac/sound.cpp | 155 +++++++++++++++++++++----------------------------- 1 file changed, 65 insertions(+), 90 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index 4a21be11..b71d1194 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -616,10 +616,14 @@ void CSound::UpdateChSelection() int iChCnt; int iSelCHLeft, iSelAddCHLeft; int iSelCHRight, iSelAddCHRight; - iSelAddInBufferLeft = -1; // initialize with invalid value - iSelAddInInterlChLeft = -1; // initialize with invalid value - iSelAddInBufferRight = -1; // initialize with invalid value - iSelAddInInterlChRight = -1; // initialize with invalid value + + // initialize all buffer indexes with an invalid value + iSelInBufferLeft = -1; + iSelInBufferRight = -1; + iSelAddInBufferLeft = -1; // if no additional channel used, this will stay on the invalid value + iSelAddInBufferRight = -1; // if no additional channel used, this will stay on the invalid value + iSelOutBufferLeft = -1; + iSelOutBufferRight = -1; // input GetSelCHAndAddCH ( iSelInputLeftChannel, iNumInChan, iSelCHLeft, iSelAddCHLeft ); @@ -631,25 +635,25 @@ void CSound::UpdateChSelection() { iChCnt += vecNumInBufChan[iBuf]; - if ( iChCnt > iSelCHLeft ) + if ( ( iSelInBufferLeft < 0 ) && ( iChCnt > iSelCHLeft ) ) { iSelInBufferLeft = iBuf; iSelInInterlChLeft = iSelCHLeft - iChCnt + vecNumInBufChan[iBuf]; } - if ( iChCnt > iSelCHRight ) + if ( ( iSelInBufferRight < 0 ) && ( iChCnt > iSelCHRight ) ) { iSelInBufferRight = iBuf; iSelInInterlChRight = iSelCHRight - iChCnt + vecNumInBufChan[iBuf]; } - if ( ( iSelAddCHLeft >= 0 ) && ( iChCnt > iSelAddCHLeft ) ) + if ( ( iSelAddCHLeft >= 0 ) && ( iSelAddInBufferLeft < 0 ) && ( iChCnt > iSelAddCHLeft ) ) { iSelAddInBufferLeft = iBuf; iSelAddInInterlChLeft = iSelAddCHLeft - iChCnt + vecNumInBufChan[iBuf]; } - if ( ( iSelAddCHRight >= 0 ) && ( iChCnt > iSelAddCHRight ) ) + if ( ( iSelAddCHRight >= 0 ) && ( iSelAddInBufferRight < 0 ) && ( iChCnt > iSelAddCHRight ) ) { iSelAddInBufferRight = iBuf; iSelAddInInterlChRight = iSelAddCHRight - iChCnt + vecNumInBufChan[iBuf]; @@ -666,13 +670,13 @@ void CSound::UpdateChSelection() { iChCnt += vecNumOutBufChan[iBuf]; - if ( iChCnt > iSelCHLeft ) + if ( ( iSelOutBufferLeft < 0 ) && ( iChCnt > iSelCHLeft ) ) { iSelOutBufferLeft = iBuf; iSelOutInterlChLeft = iSelCHLeft - iChCnt + vecNumOutBufChan[iBuf]; } - if ( iChCnt > iSelCHRight ) + if ( ( iSelOutBufferRight < 0 ) && ( iChCnt > iSelCHRight ) ) { iSelOutBufferRight = iBuf; iSelOutInterlChRight = iSelCHRight - iChCnt + vecNumOutBufChan[iBuf]; @@ -936,34 +940,42 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, // both, the input and output device use the same callback function QMutexLocker locker ( &pSound->Mutex ); - const int iCoreAudioBufferSizeMono = pSound->iCoreAudioBufferSizeMono; - const int iNumInChan = pSound->iNumInChan; - const int iNumOutChan = pSound->iNumOutChan; - const int iSelInBufferLeft = pSound->iSelInBufferLeft; - const int iSelInBufferRight = pSound->iSelInBufferRight; - const int iSelInInterlChLeft = pSound->iSelInInterlChLeft; - const int iSelInInterlChRight = pSound->iSelInInterlChRight; - const int iSelAddInBufferLeft = pSound->iSelAddInBufferLeft; - const int iSelAddInBufferRight = pSound->iSelAddInBufferRight; - const int iSelAddInInterlChLeft = pSound->iSelAddInInterlChLeft; - const int iSelAddInInterlChRight = pSound->iSelAddInInterlChRight; - const int iSelOutBufferLeft = pSound->iSelOutBufferLeft; - const int iSelOutBufferRight = pSound->iSelOutBufferRight; - const int iSelOutInterlChLeft = pSound->iSelOutInterlChLeft; - const int iSelOutInterlChRight = pSound->iSelOutInterlChRight; + const int iCoreAudioBufferSizeMono = pSound->iCoreAudioBufferSizeMono; + const int iNumInChan = pSound->iNumInChan; + const int iNumOutChan = pSound->iNumOutChan; + const int iSelInBufferLeft = pSound->iSelInBufferLeft; + const int iSelInBufferRight = pSound->iSelInBufferRight; + const int iSelInInterlChLeft = pSound->iSelInInterlChLeft; + const int iSelInInterlChRight = pSound->iSelInInterlChRight; + const int iSelAddInBufferLeft = pSound->iSelAddInBufferLeft; + const int iSelAddInBufferRight = pSound->iSelAddInBufferRight; + const int iSelAddInInterlChLeft = pSound->iSelAddInInterlChLeft; + const int iSelAddInInterlChRight = pSound->iSelAddInInterlChRight; + const int iSelOutBufferLeft = pSound->iSelOutBufferLeft; + const int iSelOutBufferRight = pSound->iSelOutBufferRight; + const int iSelOutInterlChLeft = pSound->iSelOutInterlChLeft; + const int iSelOutInterlChRight = pSound->iSelOutInterlChRight; + const CVector& vecNumInBufChan = pSound->vecNumInBufChan; + const CVector& vecNumOutBufChan = pSound->vecNumOutBufChan; if ( ( inDevice == pSound->CurrentAudioInputDeviceID ) && inInputData ) { - // check size (float32 has four bytes) -// TODO check... - if ( inInputData->mBuffers[iSelInBufferLeft].mDataByteSize == ... -inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == -(UInt32) iNumInChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) + // check sizes (note that float32 has four bytes) + if ( ( iSelInBufferLeft >= 0 ) && + ( iSelInBufferLeft < inInputData->mNumberBuffers ) && + ( iSelInBufferRight >= 0 ) && + ( iSelInBufferRight < inInputData->mNumberBuffers ) && + ( iSelAddInBufferLeft < inInputData->mNumberBuffers ) && + ( iSelAddInBufferRight < inInputData->mNumberBuffers ) && + ( inInputData->mBuffers[iSelInBufferLeft].mDataByteSize == static_cast ( vecNumInBufChan[iSelInBufferLeft] * iCoreAudioBufferSizeMono * 4 ) && + ( inInputData->mBuffers[iSelInBufferRight].mDataByteSize == static_cast ( vecNumInBufChan[iSelInBufferRight] * iCoreAudioBufferSizeMono * 4 ) && + ( inInputData->mBuffers[iSelAddInBufferLeft].mDataByteSize == static_cast ( vecNumInBufChan[iSelAddInBufferLeft] * iCoreAudioBufferSizeMono * 4 ) && + ( inInputData->mBuffers[iSelAddInBufferRight].mDataByteSize == static_cast ( vecNumInBufChan[iSelAddInBufferRight] * iCoreAudioBufferSizeMono * 4 ) ) { Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelInBufferLeft].mData ); Float32* pRightData = static_cast ( inInputData->mBuffers[iSelInBufferRight].mData ); - int iNumChanPerFrameLeft = pSound->vecNumInBufChan[iSelInBufferLeft]; - int iNumChanPerFrameRight = pSound->vecNumInBufChan[iSelInBufferRight]; + int iNumChanPerFrameLeft = vecNumInBufChan[iSelInBufferLeft]; + int iNumChanPerFrameRight = vecNumInBufChan[iSelInBufferRight]; // copy input data for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) @@ -977,7 +989,7 @@ inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == if ( iSelAddInBufferLeft >= 0 ) { pLeftData = static_cast ( inInputData->mBuffers[iSelAddInBufferLeft].mData ); - iNumChanPerFrameLeft = pSound->vecNumInBufChan[iSelAddInBufferLeft]; + iNumChanPerFrameLeft = vecNumInBufChan[iSelAddInBufferLeft]; for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { @@ -989,7 +1001,7 @@ inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == if ( iSelAddInBufferRight >= 0 ) { pRightData = static_cast ( inInputData->mBuffers[iSelAddInBufferRight].mData ); - iNumChanPerFrameRight = pSound->vecNumInBufChan[iSelAddInBufferRight]; + iNumChanPerFrameRight = vecNumInBufChan[iSelAddInBufferRight]; for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) { @@ -1010,63 +1022,26 @@ inInputData->mBuffers[0].mDataByteSize * inInputData->mNumberBuffers == if ( ( inDevice == pSound->CurrentAudioOutputDeviceID ) && outOutputData ) { - // check size (float32 has four bytes) -// if ( outOutputData->mBuffers[0].mDataByteSize * outOutputData->mNumberBuffers == -// (UInt32) iNumOutChan * static_cast ( iCoreAudioBufferSizeMono * 4 ) ) -// { -// const int iNumChanPerFrame = iNumOutChan / outOutputData->mNumberBuffers; -// const int iSelBufferLeft = iSelOutputLeftChannel / iNumChanPerFrame; -// const int iSelBufferRight = iSelOutputRightChannel / iNumChanPerFrame; -// const int iSelInterlChLeft = iSelOutputLeftChannel % iNumChanPerFrame; -// const int iSelInterlChRight = iSelOutputRightChannel % iNumChanPerFrame; -// -// Float32* pLeftData = static_cast ( outOutputData->mBuffers[iSelBufferLeft].mData ); -// Float32* pRightData = static_cast ( outOutputData->mBuffers[iSelBufferRight].mData ); -// -// // copy output data -// for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) -// { -// // copy left and right channels separately -// pLeftData[iNumChanPerFrame * i + iSelInterlChLeft] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; -// pRightData[iNumChanPerFrame * i + iSelInterlChRight] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; -// } -// } -// else - if ( outOutputData->mBuffers[0].mDataByteSize == - static_cast ( iCoreAudioBufferSizeMono * iNumOutChan * 4 ) ) - { - // one buffer with all the channels in interleaved format: - // get a pointer to the input data of the correct type - Float32* pOutData = static_cast ( outOutputData->mBuffers[0].mData ); + // check sizes (note that float32 has four bytes) + if ( ( iSelOutBufferLeft >= 0 ) && + ( iSelOutBufferLeft < outOutputData->mNumberBuffers ) && + ( iSelOutBufferRight >= 0 ) && + ( iSelOutBufferRight < outOutputData->mNumberBuffers ) && + ( outOutputData->mBuffers[iSelOutBufferLeft].mDataByteSize == static_cast ( vecNumOutBufChan[iSelOutBufferLeft] * iCoreAudioBufferSizeMono * 4 ) && + ( outOutputData->mBuffers[iSelOutBufferRight].mDataByteSize == static_cast ( vecNumOutBufChan[iSelOutBufferRight] * iCoreAudioBufferSizeMono * 4 ) ) + { + Float32* pLeftData = static_cast ( outOutputData->mBuffers[iSelOutBufferLeft].mData ); + Float32* pRightData = static_cast ( outOutputData->mBuffers[iSelOutBufferRight].mData ); + int iNumChanPerFrameLeft = vecNumOutBufChan[iSelOutBufferLeft]; + int iNumChanPerFrameRight = vecNumOutBufChan[iSelOutBufferRight]; - // copy output data - for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) - { - // left - pOutData[iNumOutChan * i + iSelOutputLeftChannel] = - (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; - - // right - pOutData[iNumOutChan * i + iSelOutputRightChannel] = - (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; - } - } - else if ( outOutputData->mNumberBuffers == (UInt32) iNumOutChan && // we should have a matching number of buffers to channels - outOutputData->mBuffers[0].mDataByteSize == static_cast ( iCoreAudioBufferSizeMono * 4 ) ) - { - // Outputs are to individual buffers too, rather than using channels - Float32* pLeftOutData = static_cast ( outOutputData->mBuffers[iSelOutputLeftChannel].mData ); - Float32* pRightOutData = static_cast ( outOutputData->mBuffers[iSelOutputRightChannel].mData ); - - // copy output data - for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) - { - // left - pLeftOutData[i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; - - // right - pRightOutData[i] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; - } + // copy output data + for ( int i = 0; i < iCoreAudioBufferSizeMono; i++ ) + { + // copy left and right channels separately + pLeftData[iNumChanPerFrameLeft * i + iSelOutInterlChLeft] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i] / _MAXSHORT; + pRightData[iNumChanPerFrameRight * i + iSelOutInterlChRight] = (Float32) pSound->vecsTmpAudioSndCrdStereo[2 * i + 1] / _MAXSHORT; + } } } From af5a85ceb10966919231bbf52a1b85a617cf15a0 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 14:18:22 +0200 Subject: [PATCH 034/125] bug/compile fixes --- mac/sound.cpp | 35 ++++++++++++----------------------- mac/sound.h | 1 - 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/mac/sound.cpp b/mac/sound.cpp index b71d1194..4f708da7 100755 --- a/mac/sound.cpp +++ b/mac/sound.cpp @@ -257,7 +257,6 @@ void CSound::GetAudioDeviceInfos ( const AudioDeviceID DeviceID, } int CSound::CountChannels ( AudioDeviceID devID, - const int iNumChanPerFrame, bool isInput ) { OSStatus err; @@ -472,9 +471,6 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) "not compatible with this software." ); } - // store the input number of channels per frame for this stream - const int iNumInChanPerFrame = CurDevStreamFormat.mChannelsPerFrame; - // check the output AudioObjectGetPropertyData ( outputStreamID, &stPropertyAddress, @@ -493,12 +489,9 @@ QString CSound::CheckDeviceCapabilities ( const int iDriverIdx ) "not compatible with this software." ); } - // store the output number of channels per frame for this stream - const int iNumOutChanPerFrame = CurDevStreamFormat.mChannelsPerFrame; - // store the input and out number of channels for this device - iNumInChan = CountChannels ( audioInputDevice[iDriverIdx], iNumInChanPerFrame, true ); - iNumOutChan = CountChannels ( audioOutputDevice[iDriverIdx], iNumOutChanPerFrame, false ); + iNumInChan = CountChannels ( audioInputDevice[iDriverIdx], true ); + iNumOutChan = CountChannels ( audioOutputDevice[iDriverIdx], false ); // clip the number of input/output channels to our allowed maximum if ( iNumInChan > MAX_NUM_IN_OUT_CHANNELS ) @@ -941,8 +934,6 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, QMutexLocker locker ( &pSound->Mutex ); const int iCoreAudioBufferSizeMono = pSound->iCoreAudioBufferSizeMono; - const int iNumInChan = pSound->iNumInChan; - const int iNumOutChan = pSound->iNumOutChan; const int iSelInBufferLeft = pSound->iSelInBufferLeft; const int iSelInBufferRight = pSound->iSelInBufferRight; const int iSelInInterlChLeft = pSound->iSelInInterlChLeft; @@ -962,15 +953,13 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, { // check sizes (note that float32 has four bytes) if ( ( iSelInBufferLeft >= 0 ) && - ( iSelInBufferLeft < inInputData->mNumberBuffers ) && + ( iSelInBufferLeft < static_cast ( inInputData->mNumberBuffers ) ) && ( iSelInBufferRight >= 0 ) && - ( iSelInBufferRight < inInputData->mNumberBuffers ) && - ( iSelAddInBufferLeft < inInputData->mNumberBuffers ) && - ( iSelAddInBufferRight < inInputData->mNumberBuffers ) && - ( inInputData->mBuffers[iSelInBufferLeft].mDataByteSize == static_cast ( vecNumInBufChan[iSelInBufferLeft] * iCoreAudioBufferSizeMono * 4 ) && - ( inInputData->mBuffers[iSelInBufferRight].mDataByteSize == static_cast ( vecNumInBufChan[iSelInBufferRight] * iCoreAudioBufferSizeMono * 4 ) && - ( inInputData->mBuffers[iSelAddInBufferLeft].mDataByteSize == static_cast ( vecNumInBufChan[iSelAddInBufferLeft] * iCoreAudioBufferSizeMono * 4 ) && - ( inInputData->mBuffers[iSelAddInBufferRight].mDataByteSize == static_cast ( vecNumInBufChan[iSelAddInBufferRight] * iCoreAudioBufferSizeMono * 4 ) ) + ( iSelInBufferRight < static_cast ( inInputData->mNumberBuffers ) ) && + ( iSelAddInBufferLeft < static_cast ( inInputData->mNumberBuffers ) ) && + ( iSelAddInBufferRight < static_cast ( inInputData->mNumberBuffers ) ) && + ( inInputData->mBuffers[iSelInBufferLeft].mDataByteSize == static_cast ( vecNumInBufChan[iSelInBufferLeft] * iCoreAudioBufferSizeMono * 4 ) ) && + ( inInputData->mBuffers[iSelInBufferRight].mDataByteSize == static_cast ( vecNumInBufChan[iSelInBufferRight] * iCoreAudioBufferSizeMono * 4 ) ) ) { Float32* pLeftData = static_cast ( inInputData->mBuffers[iSelInBufferLeft].mData ); Float32* pRightData = static_cast ( inInputData->mBuffers[iSelInBufferRight].mData ); @@ -1024,11 +1013,11 @@ OSStatus CSound::callbackIO ( AudioDeviceID inDevice, { // check sizes (note that float32 has four bytes) if ( ( iSelOutBufferLeft >= 0 ) && - ( iSelOutBufferLeft < outOutputData->mNumberBuffers ) && + ( iSelOutBufferLeft < static_cast ( outOutputData->mNumberBuffers ) ) && ( iSelOutBufferRight >= 0 ) && - ( iSelOutBufferRight < outOutputData->mNumberBuffers ) && - ( outOutputData->mBuffers[iSelOutBufferLeft].mDataByteSize == static_cast ( vecNumOutBufChan[iSelOutBufferLeft] * iCoreAudioBufferSizeMono * 4 ) && - ( outOutputData->mBuffers[iSelOutBufferRight].mDataByteSize == static_cast ( vecNumOutBufChan[iSelOutBufferRight] * iCoreAudioBufferSizeMono * 4 ) ) + ( iSelOutBufferRight < static_cast ( outOutputData->mNumberBuffers ) ) && + ( outOutputData->mBuffers[iSelOutBufferLeft].mDataByteSize == static_cast ( vecNumOutBufChan[iSelOutBufferLeft] * iCoreAudioBufferSizeMono * 4 ) ) && + ( outOutputData->mBuffers[iSelOutBufferRight].mDataByteSize == static_cast ( vecNumOutBufChan[iSelOutBufferRight] * iCoreAudioBufferSizeMono * 4 ) ) ) { Float32* pLeftData = static_cast ( outOutputData->mBuffers[iSelOutBufferLeft].mData ); Float32* pRightData = static_cast ( outOutputData->mBuffers[iSelOutBufferRight].mData ); diff --git a/mac/sound.h b/mac/sound.h index ce905d35..183c5377 100755 --- a/mac/sound.h +++ b/mac/sound.h @@ -97,7 +97,6 @@ protected: void UpdateChSelection(); int CountChannels ( AudioDeviceID devID, - const int iNumChanPerFrame, bool isInput ); UInt32 SetBufferSize ( AudioDeviceID& audioDeviceID, From e15eaa3d19bfbefb27bdf59f89e5cd55b690e764 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 14:21:33 +0200 Subject: [PATCH 035/125] update --- ChangeLog | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index e7515189..3611e79c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -11,11 +11,11 @@ - link to docs from application Help menu (Ticket #90) +- support Mac CoreAudio aggregated devices (Ticket #138) + - bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) -TODO support CoreAudio aggregated devices - TODO support internationalization TODO implement panning for channels (Ticket #52, #145) From a7f1b0c7d80da4ec83d47a49e977a1445266bf9a Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 19:12:46 +0200 Subject: [PATCH 036/125] fixes for raspijamulus.sh script --- Jamulus.pro | 10 ++++++++-- distributions/raspijamulus.sh | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Jamulus.pro b/Jamulus.pro index 1b73e91e..a83033ee 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -145,8 +145,14 @@ win32 { nosoundoption = $$find(CONFIG, "nosound") count(nosoundoption, 0) { message(Jack Audio Interface Enabled.) - CONFIG += link_pkgconfig - PKGCONFIG += jack + + contains(CONFIG, "raspijamulus") { + message(Using Jack Audio in raspijamulus.sh mode.) + LIBS += -ljack + } else { + CONFIG += link_pkgconfig + PKGCONFIG += jack + } HEADERS += linux/sound.h SOURCES += linux/sound.cpp diff --git a/distributions/raspijamulus.sh b/distributions/raspijamulus.sh index 71a99121..4a3d3e06 100755 --- a/distributions/raspijamulus.sh +++ b/distributions/raspijamulus.sh @@ -75,7 +75,7 @@ fi # compile Jamulus with external Opus library cd .. -qmake "CONFIG+=opus_shared_lib" "INCLUDEPATH+=distributions/${OPUS}/include" "QMAKE_LIBDIR+=distributions/${OPUS}/.libs" "INCLUDEPATH+=distributions/jack2/common" "QMAKE_LIBDIR+=distributions/jack2/build/common" Jamulus.pro +qmake "CONFIG+=opus_shared_lib" "CONFIG+=raspijamulus" "INCLUDEPATH+=distributions/${OPUS}/include" "QMAKE_LIBDIR+=distributions/${OPUS}/.libs" "INCLUDEPATH+=distributions/jack2/common" "QMAKE_LIBDIR+=distributions/jack2/build/common" Jamulus.pro make -j${NCORES} # get first USB audio sound card device From 72302ae6a0dc820334bd1a965276dae03d631599 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 19:59:59 +0200 Subject: [PATCH 037/125] added instrument viola (Ticket #131) --- Jamulus.pro | 1 + src/res/instruments/viola.png | Bin 0 -> 8776 bytes src/resources.qrc | 1 + src/util.cpp | 1 + 4 files changed, 3 insertions(+) create mode 100644 src/res/instruments/viola.png diff --git a/Jamulus.pro b/Jamulus.pro index a83033ee..2745893d 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -575,6 +575,7 @@ DISTFILES += ChangeLog \ src/res/instruments/oboe.png \ src/res/instruments/harp.svg \ src/res/instruments/harp.png \ + src/res/instruments/viola.png \ src/res/flags/flagnone.png \ src/res/flags/ad.png \ src/res/flags/ae.png \ diff --git a/src/res/instruments/viola.png b/src/res/instruments/viola.png new file mode 100644 index 0000000000000000000000000000000000000000..388c55583bef4dfe79fd36e8cec8df9b24926690 GIT binary patch literal 8776 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/instruments/bassoon.png res/instruments/oboe.png res/instruments/harp.png + res/instruments/viola.png res/fronticon.png diff --git a/src/util.cpp b/src/util.cpp index 98a19a35..8839c288 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -989,6 +989,7 @@ CVector& CInstPictures::GetTable() vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Bassoon" ), ":/png/instr/res/instruments/bassoon.png", IC_WIND_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Oboe" ), ":/png/instr/res/instruments/oboe.png", IC_WIND_INSTRUMENT ) ); vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Harp" ), ":/png/instr/res/instruments/harp.png", IC_STRING_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Viola" ), ":/png/instr/res/instruments/viola.png", IC_STRING_INSTRUMENT ) ); // now the table is initialized TableIsInitialized = true; From f481e229373bd07c34ad70b0ad2471edd023ae58 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 3 May 2020 20:34:01 +0200 Subject: [PATCH 038/125] organize command line help #165, #166, thanks to newlaurent62 --- src/main.cpp | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9717330e..41121692 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -655,45 +655,43 @@ int main ( int argc, char** argv ) QString UsageArguments ( char **argv ) { return - "Usage: " + QString ( argv[0] ) + " [option] [argument]\n" + "Usage: " + QString ( argv[0] ) + " [option] [optional argument]\n" "\nRecognized options:\n" - " -a, --servername server name, required for HTML status (server\n" - " only)\n" - " -c, --connect connect to given server address on startup\n" - " (client only)\n" - " -e, --centralserver address of the central server (server only)\n" - " -F, --fastupdate use 64 samples frame size mode (server only)\n" - " -g, --pingservers ping servers in list to keep NAT port open\n" - " (central server only)\n" " -h, -?, --help display this help text and exit\n" " -i, --inifile initialization file name\n" - " -j, --nojackconnect disable auto Jack connections (client only)\n" + " -n, --nogui disable GUI\n" + " -p, --port set your local port number\n" + " -v, --version output version information and exit\n" + "\nServer only:\n" + " -a, --servername server name, required for HTML status\n" + " -D, --histdays number of days of history to display\n" + " -e, --centralserver address of the central server\n" + " -F, --fastupdate use 64 samples frame size mode\n" + " -g, --pingservers ping servers in list to keep NAT port open\n" + " (central server only)\n" " -l, --log enable logging, set file name\n" " -L, --licence a licence must be accepted on a new\n" - " connection (server only)\n" - " -m, --htmlstatus enable HTML status file, set file name (server\n" - " only)\n" - " -n, --nogui disable GUI\n" + " connection\n" + " -m, --htmlstatus enable HTML status file, set file name\n" " -o, --serverinfo infos of the server(s) in the format:\n" " [name];[city];[country as QLocale ID]; ...\n" " [server1 address];[server1 name]; ...\n" " [server1 city]; ...\n" " [server1 country as QLocale ID]; ...\n" - " [server2 address]; ... (server only)\n" - " -p, --port local port number (server only)\n" + " [server2 address]; ...\n" " -R, --recording enables recording and sets directory to contain\n" - " recorded jams (server only)\n" + " recorded jams\n" " -s, --server start server\n" - " -u, --numchannels maximum number of channels (server only)\n" - " -v, --version output version information and exit\n" - " -w, --welcomemessage welcome message on connect (server only)\n" - " -y, --history enable connection history and set file\n" - " name (server only)\n" - " -D, --histdays number of days of history to display (server only)\n" - " -z, --startminimized start minimizied (server only)\n" - " --ctrlmidich MIDI controller channel to listen (client only)\n" + " -u, --numchannels maximum number of channels\n" + " -w, --welcomemessage welcome message on connect\n" + " -y, --history enable connection history and set file name\n" + " -z, --startminimized start minimizied\n" + "\nClient only:\n" + " -c, --connect connect to given server address on startup\n" + " -j, --nojackconnect disable auto Jack connections\n" + " --ctrlmidich MIDI controller channel to listen\n" " --clientname client name (window title and jack client name)\n" - "\nExample: " + QString ( argv[0] ) + " -l -inifile myinifile.ini\n"; + "\nExample: " + QString ( argv[0] ) + " -s -inifile myinifile.ini\n"; } bool GetFlagArgument ( char** argv, From 7421eefb112c3ed4e27806bfe2ffd75bf2c50a46 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 4 May 2020 20:22:22 +0200 Subject: [PATCH 039/125] initial implementation of the translation (must be enabled with --translation command line argument) --- Jamulus.pro | 4 +- src/main.cpp | 38 +- src/res/translation/translation_de_DE.qm | Bin 0 -> 534 bytes .../{ => translation}/translation_de_DE.ts | 651 +++++++++--------- src/res/translation/translation_fr_FR.qm | Bin 0 -> 23 bytes .../{ => translation}/translation_fr_FR.ts | 641 ++++++++--------- src/resources.qrc | 6 + 7 files changed, 684 insertions(+), 656 deletions(-) create mode 100644 src/res/translation/translation_de_DE.qm rename src/res/{ => translation}/translation_de_DE.ts (74%) create mode 100644 src/res/translation/translation_fr_FR.qm rename src/res/{ => translation}/translation_fr_FR.ts (74%) diff --git a/Jamulus.pro b/Jamulus.pro index 2745893d..08ee7e36 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -14,8 +14,8 @@ QT += widgets \ network \ xml -#TRANSLATIONS = src/res/translation_de_DE.ts \ -# src/res/translation_fr_FR.ts +TRANSLATIONS = src/res/translation/translation_de_DE.ts \ + src/res/translation/translation_fr_FR.ts INCLUDEPATH += src diff --git a/src/main.cpp b/src/main.cpp index 41121692..e06352ac 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,14 +45,12 @@ int main ( int argc, char** argv ) // initialize all flags and string which might be changed by command line // arguments - #if defined( SERVER_BUNDLE ) && ( defined( __APPLE__ ) || defined( __MACOSX ) ) // if we are on MacOS and we are building a server bundle, starts Jamulus in server mode bool bIsClient = false; #else bool bIsClient = true; #endif - bool bUseGUI = true; bool bStartMinimized = false; bool bShowComplRegConnList = false; @@ -61,6 +59,7 @@ int main ( int argc, char** argv ) bool bShowAnalyzerConsole = false; bool bCentServPingServerInList = false; bool bNoAutoJackConnect = false; + bool bUseTranslation = false; int iNumServerChannels = DEFAULT_USED_NUM_CHANNELS; int iMaxDaysHistory = DEFAULT_DAYS_HISTORY; int iCtrlMIDIChannel = INVALID_MIDI_CH; @@ -208,6 +207,21 @@ int main ( int argc, char** argv ) } + // Enable translations ------------------------------------------------- + // Undocumented debugging command line argument: Enable translations + // (since translation is still WIP, it is not enabled by default but + // must be enabled with this undocumented command line flag) + if ( GetFlagArgument ( argv, + i, + "--translation", // no short form + "--translation" ) ) + { + bUseTranslation = true; + tsConsole << "- translations enabled" << endl; + continue; + } + + // Show all registered servers in the server list ---------------------- // Undocumented debugging command line argument: Show all registered // servers in the server list regardless if a ping to the server is @@ -514,18 +528,16 @@ int main ( int argc, char** argv ) // init resources Q_INIT_RESOURCE(resources); + // load translations + QTranslator myappTranslator; -// TODO translation loading does not yet work -// TODO CONFIG += lrelease embed_translations -// TODO QM_FILES_RESOURCE_PREFIX needed??? -// // load translations -// if ( bUseGUI ) -// { -// QTranslator myappTranslator; -// bool ret = myappTranslator.load ( "translation_" + QLocale::system().name() ); -//qDebug() << "translation successfully loaded: " << ret << " " << "translation_" + QLocale::system().name(); -// pApp->installTranslator ( &myappTranslator ); -// } + if ( bUseGUI && bUseTranslation ) + { + if ( myappTranslator.load ( ":/translations/translation.qm" ) ) + { + pApp->installTranslator ( &myappTranslator ); + } + } // TEST -> activate the following line to activate the test bench, diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm new file mode 100644 index 0000000000000000000000000000000000000000..438502777b6f57dca6336fb3c2a6bef26ebe37de GIT binary patch literal 534 zcmcE7ks@*G{hX<16=n7(EZlq7iGhK^fPvR=C6J!RvgZ6$ApL^%YK$_FcIV8Au47^u&TQZ^vw zQ43BjDap)BFV@r3V+RUwIXmZMrskEna|lvtb!Hckr3xI&=8i9o|Lf$n?4Py#oS7h+^! zX<|-hNhKi@xftAmJ}N>nfz2hgEHgQkkX9XrD4^C%aF8f4c!PZha!@f?ED!9s0-y>| zkmbOgC+3n_T#%Dk3G=gpPih$vKIdb&!;l1asU8Cm!j0opb4 CAboutDlg - + The - + software enables musicians to perform real-time jam sessions over the internet. There is a - + server which collects the audio data from each - + client, mixes the audio data and sends the mix back to each client. - + uses the following libraries, resources or code snippets: - + About - + , Version - + Internet Jam Session Software - + Under the GNU General Public License (GPL) @@ -52,27 +52,27 @@ CAboutDlgBase - + About - + TextLabelVersion - + Author: Volker Fischer - + Copyright (C) 2005-2020 - + &OK @@ -80,12 +80,12 @@ CAnalyzerConsole - + Analyzer Console - + Error Rate of Each Buffer Size @@ -93,82 +93,82 @@ CChannelFader - + <b>Channel Level:</b> 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. - + Input level of the current audio channel at the server - + <b>Mixer Fader:</b> 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. - + Local mix level setting of the current audio channel at the server - + <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. - + Mute button - + <b>Solo:</b> 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. - + Solo button - + <b>Fader Tag:</b> 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. - + Mixer channel instrument picture - + Mixer channel label (fader tag) - + Mixer channel country flag - + MUTE - + SOLO - + Mute - + Solo @@ -176,22 +176,22 @@ CChatDlg - + <b>Chat Window:</b> The chat window shows a history of all chat messages. - + Chat history - + <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. - + New chat text edit box @@ -199,17 +199,17 @@ CChatDlgBase - + Chat - + Cl&ear - + &Close @@ -217,148 +217,148 @@ CClientDlg - + <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. - + If the - + 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.<br>For a proper usage of the - + software, you should not hear your singing/instrument in 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 (<b>not</b> the Recording mixer!). - + Input level meter - + Simulates an analog LED level meter. - + <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. - + Connect and disconnect toggle button - + 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 - - + + software. - + <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. - + Local audio input fader (left/right) - + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - + Reverberation effect level setting - + <b>Reverberation Channel Selection:</b> 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. - + Left channel selection for reverberation - + Right channel selection for reverberation - + <b>Delay Status LED:</b> 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. - + If this LED indicator turns red, you will not have much fun using the - + Delay status LED indicator - + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - + Buffers status LED indicator - + &Connection Setup... - + My &Profile... - + C&hat... - + &Settings... &Einstellungen - + &Analyzer Console... - + E&xit @@ -366,72 +366,72 @@ CClientDlgBase - + Delay - + Buffers - + Input - + L - + R - + Settings - + Chat - + Mute Myself - + C&onnect - + Pan - + Center - + Reverb - + Left - + Right @@ -439,237 +439,237 @@ CClientSettingsDlg - + <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - + In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light - + Local jitter buffer slider control - + Server jitter buffer slider control - + Auto jitter buffer switch - + Jitter buffer status LED indicator - + <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using - + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Sound card device selector combo box - + In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - + <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. - + Left input channel selection combo box - + Right input channel selection combo box - + Left output channel selection combo box - + Right output channel selection combo box - + <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than - + samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. - + Enable small network buffers check box - + <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the - + software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the - + 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the - + 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. - + 128 samples setting radio button - + 256 samples setting radio button - + 512 samples setting radio button - + ASIO setup push button - + <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. - + Fancy skin check box - + <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. - + Display channel levels check box - + <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. - + Audio channels combo box - + <b>Audio Quality:</b> 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. - + Audio quality combo box - + <b>New Client Level:</b> 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. - + New client level edit box - + <b>Central Server Address:</b> 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. - + Default central server type combo box - + Central server address line edit - + <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). - + If this LED indicator turns red, you will not have much fun using the - + software. - + The selected audio device could not be used because of the following error: - + The previous driver will be selected. @@ -677,157 +677,157 @@ CClientSettingsDlgBase - + Settings - + Soundcard - + Device - + Gerät - + Input Channel Mapping - - + + L - - + + R - + Output Channel Mapping - + Enable Small Network Buffers - + Buffer Delay - + (preferred) - + (default) - + (safe) - + Driver Setup - + Jitter Buffer - + Auto - + Local - + Server - - + + Size - + Misc - + Audio Channels - + Audiokanäle - + Audio Quality - + Audioqualität - + New Client Level - + % - + Fancy Skin - + Display Channel Levels - + Zeige Kanalsignalpegel - + Central Server Address: - + Audio Stream Rate - - - + + + val - + Ping Time - + Overall Delay @@ -835,57 +835,57 @@ CConnectDlg - + <b>Server List:</b> 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.<br>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. - + Server list view - + <b>Server Address:</b> The IP address or URL of the server running the - + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: - + </i>. A list of the most recent used server IP addresses or URLs is available for selection. - + Server address edit box - + Holds the current server IP address or URL. It also stores old URLs in the combo box list. - + <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. - + Filter edit box - + <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. - + Show all musicians check box @@ -893,52 +893,52 @@ CConnectDlgBase - + Connection Setup - + Filter - + Show All Musicians - + Server Name - + Ping Time - + Musicians - + Location - + Server Name/Address - + C&ancel - + &Connect @@ -946,111 +946,111 @@ CHelpMenu - - + + Getting &Started... - + Software &Manual... - + What's &This - + &About... - + Über... CLicenceDlg - + By connecting to this server and agreeing to this notice, you agree to the following: - + 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): - + You are free to: - + Share - + copy and redistribute the material in any medium or format - + Adapt - + remix, transform, and build upon the material - + The licensor cannot revoke these freedoms as long as you follow the license terms. - + Under the following terms: - + 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. - + NonCommercial - + You may not use the material for commercial purposes. - + ShareAlike - + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. - + No additional restrictions - + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. @@ -1058,319 +1058,324 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a - + 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. - + Alias or name edit box - + Instrument picture button - + Country flag button - + City edit box - + Skill level combo box - + None - + Drum Set - + Djembe - + Electric Guitar - + Acoustic Guitar - + Bass Guitar - + Keyboard - + Synthesizer - + Grand Piano - + Accordion - + Vocal - + Microphone - + Harmonica - + Trumpet - + Trombone - + French Horn - + Tuba - + Saxophone - + Clarinet - + Flute - + Violin - + Cello - + Double Bass - + Recorder - + Streamer - + Listener - + Guitar+Vocal - + Keyboard+Vocal - + Bodhran - + Bassoon - + Oboe - + Harp + + + Viola + + CServerDlg - + <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. - + Connected clients list view - + <b>Start Minimized on Operating System Start:</b> 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. - + <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - + <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all - + users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - + <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. - + <b>Central Server Address:</b> 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. - + Default central server type combo box - + Central server address line edit - + <b>Server Name:</b> 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. - + Server name line edit - + <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. - + City where the server is located line edit - + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. - + Country where the server is located combo box - - + + E&xit - + &Hide - - - + + + server - + &Open - + server - + Server @@ -1378,63 +1383,63 @@ What you set here will appear at your fader on the mixer board when you are conn CServerDlgBase - + Client IP:Port - - + + Name - + Jitter Buffer Size - + Start Minimized on Windows Start - + Show Creative Commons BY-NC-SA 4.0 Licence Dialog - + Make My Server Public (Register My Server in the Server List) - + STATUS - + Central Server Address: - + My Server Info - + Location: City - + Location: Country - + TextLabelNameVersion @@ -1442,119 +1447,119 @@ What you set here will appear at your fader on the mixer board when you are conn CSound - + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. - + The Jack server sample rate is different from the required one. The required sample rate is: <b> - + Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> - + </b> to achieve a low delay. - - + + The Jack port registering failed. - + Cannot activate the Jack client. - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + 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. - + 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 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. - + The audio device does not support the required sample rate. The required sample rate is: - + The audio device does not support to set 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. - + <b>No ASIO audio device (driver) found.</b><br><br>The - + software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. @@ -1562,37 +1567,37 @@ What you set here will appear at your fader on the mixer board when you are conn CSoundBase - + Invalid device selection. - + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> - + </b><br><br>Please restart the software. - + <b>No usable - + audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> - + <br/>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_fr_FR.qm b/src/res/translation/translation_fr_FR.qm new file mode 100644 index 0000000000000000000000000000000000000000..c02994cafb69a42d7f77c4004edd5eae08bb0f3b GIT binary patch literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iJ1`qhQtX? literal 0 HcmV?d00001 diff --git a/src/res/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts similarity index 74% rename from src/res/translation_fr_FR.ts rename to src/res/translation/translation_fr_FR.ts index e70f5247..ad4c12c5 100644 --- a/src/res/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -4,47 +4,47 @@ CAboutDlg - + The - + software enables musicians to perform real-time jam sessions over the internet. There is a - + server which collects the audio data from each - + client, mixes the audio data and sends the mix back to each client. - + uses the following libraries, resources or code snippets: - + About - + , Version - + Internet Jam Session Software - + Under the GNU General Public License (GPL) @@ -52,27 +52,27 @@ CAboutDlgBase - + About - + TextLabelVersion - + Author: Volker Fischer - + Copyright (C) 2005-2020 - + &OK @@ -80,12 +80,12 @@ CAnalyzerConsole - + Analyzer Console - + Error Rate of Each Buffer Size @@ -93,82 +93,82 @@ CChannelFader - + <b>Channel Level:</b> 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. - + Input level of the current audio channel at the server - + <b>Mixer Fader:</b> 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. - + Local mix level setting of the current audio channel at the server - + <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. - + Mute button - + <b>Solo:</b> 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. - + Solo button - + <b>Fader Tag:</b> 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. - + Mixer channel instrument picture - + Mixer channel label (fader tag) - + Mixer channel country flag - + MUTE - + SOLO - + Mute - + Solo @@ -176,22 +176,22 @@ CChatDlg - + <b>Chat Window:</b> The chat window shows a history of all chat messages. - + Chat history - + <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. - + New chat text edit box @@ -199,17 +199,17 @@ CChatDlgBase - + Chat - + Cl&ear - + &Close @@ -217,148 +217,148 @@ CClientDlg - + <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. - + If the - + 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.<br>For a proper usage of the - + software, you should not hear your singing/instrument in 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 (<b>not</b> the Recording mixer!). - + Input level meter - + Simulates an analog LED level meter. - + <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. - + Connect and disconnect toggle button - + 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 - - + + software. - + <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. - + Local audio input fader (left/right) - + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - + Reverberation effect level setting - + <b>Reverberation Channel Selection:</b> 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. - + Left channel selection for reverberation - + Right channel selection for reverberation - + <b>Delay Status LED:</b> 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. - + If this LED indicator turns red, you will not have much fun using the - + Delay status LED indicator - + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - + Buffers status LED indicator - + &Connection Setup... - + My &Profile... - + C&hat... - + &Settings... - + &Analyzer Console... - + E&xit @@ -366,72 +366,72 @@ CClientDlgBase - + Delay - + Buffers - + Input - + L - + R - + Settings - + Chat - + Mute Myself - + C&onnect - + Pan - + Center - + Reverb - + Left - + Right @@ -439,237 +439,237 @@ CClientSettingsDlg - + <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - + In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light - + Local jitter buffer slider control - + Server jitter buffer slider control - + Auto jitter buffer switch - + Jitter buffer status LED indicator - + <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using - + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Sound card device selector combo box - + In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - + <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each - + input/output channel (Left and Right channel) a different actual sound card channel can be selected. - + Left input channel selection combo box - + Right input channel selection combo box - + Left output channel selection combo box - + Right output channel selection combo box - + <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than - + samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. - + Enable small network buffers check box - + <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the - + software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the - + 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. - + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the - + 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. - + 128 samples setting radio button - + 256 samples setting radio button - + 512 samples setting radio button - + ASIO setup push button - + <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. - + Fancy skin check box - + <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. - + Display channel levels check box - + <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. - + Audio channels combo box - + <b>Audio Quality:</b> 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. - + Audio quality combo box - + <b>New Client Level:</b> 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. - + New client level edit box - + <b>Central Server Address:</b> 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. - + Default central server type combo box - + Central server address line edit - + <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). - + If this LED indicator turns red, you will not have much fun using the - + software. - + The selected audio device could not be used because of the following error: - + The previous driver will be selected. @@ -677,157 +677,157 @@ CClientSettingsDlgBase - + Settings - + Soundcard - + Device - + Input Channel Mapping - - + + L - - + + R - + Output Channel Mapping - + Enable Small Network Buffers - + Buffer Delay - + (preferred) - + (default) - + (safe) - + Driver Setup - + Jitter Buffer - + Auto - + Local - + Server - - + + Size - + Misc - + Audio Channels - + Audio Quality - + New Client Level - + % - + Fancy Skin - + Display Channel Levels - + Central Server Address: - + Audio Stream Rate - - - + + + val - + Ping Time - + Overall Delay @@ -835,57 +835,57 @@ CConnectDlg - + <b>Server List:</b> 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.<br>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. - + Server list view - + <b>Server Address:</b> The IP address or URL of the server running the - + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: - + </i>. A list of the most recent used server IP addresses or URLs is available for selection. - + Server address edit box - + Holds the current server IP address or URL. It also stores old URLs in the combo box list. - + <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. - + Filter edit box - + <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. - + Show all musicians check box @@ -893,52 +893,52 @@ CConnectDlgBase - + Connection Setup - + Filter - + Show All Musicians - + Server Name - + Ping Time - + Musicians - + Location - + Server Name/Address - + C&ancel - + &Connect @@ -946,23 +946,23 @@ CHelpMenu - - + + Getting &Started... - + Software &Manual... - + What's &This - + &About... @@ -970,87 +970,87 @@ CLicenceDlg - + By connecting to this server and agreeing to this notice, you agree to the following: - + 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): - + You are free to: - + Share - + copy and redistribute the material in any medium or format - + Adapt - + remix, transform, and build upon the material - + The licensor cannot revoke these freedoms as long as you follow the license terms. - + Under the following terms: - + 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. - + NonCommercial - + You may not use the material for commercial purposes. - + ShareAlike - + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. - + No additional restrictions - + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. @@ -1058,319 +1058,324 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a - + 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. - + Alias or name edit box - + Instrument picture button - + Country flag button - + City edit box - + Skill level combo box - + None - + Drum Set - + Djembe - + Electric Guitar - + Acoustic Guitar - + Bass Guitar - + Keyboard - + Synthesizer - + Grand Piano - + Accordion - + Vocal - + Microphone - + Harmonica - + Trumpet - + Trombone - + French Horn - + Tuba - + Saxophone - + Clarinet - + Flute - + Violin - + Cello - + Double Bass - + Recorder - + Streamer - + Listener - + Guitar+Vocal - + Keyboard+Vocal - + Bodhran - + Bassoon - + Oboe - + Harp + + + Viola + + CServerDlg - + <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. - + Connected clients list view - + <b>Start Minimized on Operating System Start:</b> 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. - + <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - + <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all - + users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. - + <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. - + <b>Central Server Address:</b> 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. - + Default central server type combo box - + Central server address line edit - + <b>Server Name:</b> 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. - + Server name line edit - + <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. - + City where the server is located line edit - + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. - + Country where the server is located combo box - - + + E&xit - + &Hide - - - + + + server - + &Open - + server - + Server @@ -1378,63 +1383,63 @@ What you set here will appear at your fader on the mixer board when you are conn CServerDlgBase - + Client IP:Port - - + + Name - + Jitter Buffer Size - + Start Minimized on Windows Start - + Show Creative Commons BY-NC-SA 4.0 Licence Dialog - + Make My Server Public (Register My Server in the Server List) - + STATUS - + Central Server Address: - + My Server Info - + Location: City - + Location: Country - + TextLabelNameVersion @@ -1442,119 +1447,119 @@ What you set here will appear at your fader on the mixer board when you are conn CSound - + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. - + The Jack server sample rate is different from the required one. The required sample rate is: <b> - + Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> - + </b> to achieve a low delay. - - + + The Jack port registering failed. - + Cannot activate the Jack client. - + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + 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. - + 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 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. - + The audio device does not support the required sample rate. The required sample rate is: - + The audio device does not support to set 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. - + <b>No ASIO audio device (driver) found.</b><br><br>The - + software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. @@ -1562,37 +1567,37 @@ What you set here will appear at your fader on the mixer board when you are conn CSoundBase - + Invalid device selection. - + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> - + </b><br><br>Please restart the software. - + <b>No usable - + audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> - + <br/>Do you want to open the ASIO driver setups? - + could not be started because of audio interface issues. diff --git a/src/resources.qrc b/src/resources.qrc index 4a4c57e2..4ecb3e69 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -1,4 +1,10 @@ + + res/translation/translation_de_DE.qm + + + res/translation/translation_fr_FR.qm + res/CLEDDisabledSmall.png res/CLEDGreenArrow.png From bcf3f18cdfa2f485a27d72be8ff00e5318157308 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 4 May 2020 21:00:41 +0200 Subject: [PATCH 040/125] update --- ChangeLog | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3611e79c..3a397afe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,13 +16,9 @@ - bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) -TODO support internationalization - TODO implement panning for channels (Ticket #52, #145) -TODO sometimes I cannot see the central server in the server list - -TODO server: warning if Central server selected but OS location is different (e.g. US) -> warning in GUI and command line +TODO WIP support internationalization TODO show mute state of others From 675c6bfb01c6641be2e2712455cecedf49d7e46f Mon Sep 17 00:00:00 2001 From: Snayler <11491485+Snayler@users.noreply.github.com> Date: Tue, 5 May 2020 19:50:18 +0100 Subject: [PATCH 041/125] Portuguese Translation --- translation_pt_PT.qm | Bin 0 -> 568 bytes translation_pt_PT.ts | 1606 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1606 insertions(+) create mode 100644 translation_pt_PT.qm create mode 100644 translation_pt_PT.ts diff --git a/translation_pt_PT.qm b/translation_pt_PT.qm new file mode 100644 index 0000000000000000000000000000000000000000..3024b81eeced87e886e4388ad0f30e36bb95a53b GIT binary patch literal 568 zcma)(ze@u#6vyBBqgt^Y9EwAc6XC`~U3F>iLx@wZi4?nHxV3# z(%D7CRS+jfCx=erqPY4^y_O` z7KU6ZgUThSK?NX-Oz{L;27-|UB!K>f&HP}?F_S{K#!++lv1zkT5q3cu(Hv + + + + CAboutDlg + + + The + O + + + + software enables musicians to perform real-time jam sessions over the internet. There is a + permite aos músicos realizar jam sessions em tempo real pela Internet. Existe um servidor + + + + server which collects the audio data from each + que reúne os dados de áudio de cada cliente + + + + client, mixes the audio data and sends the mix back to each client. + , que mistura os dados de áudio e envia a mistura de volta para cada cliente. + + + + uses the following libraries, resources or code snippets: + utiliza as seguintes bibliotecas, recursos ou partes de código: + + + + About + Sobre o + + + + , Version + , Versão + + + + Internet Jam Session Software + Programa de Jam Sessions pela Internet + + + + Under the GNU General Public License (GPL) + Sob a Licença Pública Geral GNU (GPL) + + + + CAboutDlgBase + + + About + Sobre + + + + TextLabelVersion + TextLabelVersion + + + + Author: Volker Fischer + Autor: Volker Fischer + + + + Copyright (C) 2005-2020 + Copyright (C) 2005-2020 + + + + &OK + &OK + + + + CAnalyzerConsole + + + Analyzer Console + Consola de Análise + + + + Error Rate of Each Buffer Size + Taxa de Erros de Cada Tamanho de Buffer + + + + CChannelFader + + + <b>Channel Level:</b> 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. + <b>Nível do Canal:</b> Mostra o nível de áudio pré-fader deste canal. Todos os clientes ligados ao servidor terão atribuído um nível de áudio, o mesmo valor para cada cliente. + + + + Input level of the current audio channel at the server + Nível de entrada deste canal de áudio do servidor + + + + <b>Mixer Fader:</b> 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. + <b>Fader da Mistura:</b> Ajusta o nível de áudio deste canal. Por cada cliente ligado ao servidor será atribuído um fader de áudio em todos os clientes, podendo cada um ajustar a sua mistura local. + + + + Local mix level setting of the current audio channel at the server + Configuração do nível de mistura local deste canal de áudio do servidor + + + + <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. + <b>Mute:</b> Com a caixa de seleção Mute, o canal de áudio pode ser silenciado. + + + + Mute button + Botão Mute + + + + <b>Solo:</b> 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. + <b>Solo:</b> Com a caixa de seleção Solo, o canal de áudio pode ser definido como solo, o que significa que todos os outros canais, exceto o canal atual, serão silenciados. É possível definir mais que um canal no modo solo. + + + + Solo button + Botão Solo + + + + <b>Fader Tag:</b> 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. + <b>Identificador do Fader:</b> O Identificador do fader identifica o cliente ligado. O nome no identificador, a imagem do instrumento e a bandeira do país podem ser definidos no <i>Meu Perfil</i>. + + + + Mixer channel instrument picture + Imagem do instrumento do canal da mistura + + + + Mixer channel label (fader tag) + Identificação do canal da mistura (identificador do fader) + + + + Mixer channel country flag + Bandeira do país do canal da mistura + + + + MUTE + MUTE + + + + SOLO + SOLO + + + + Mute + Mute + + + + Solo + Solo + + + + CChatDlg + + + <b>Chat Window:</b> The chat window shows a history of all chat messages. + <b>Janela de Mensagens:</b> A janela de mensagens mostra um histórico de todas as mensagens enviadas durante a sessão. + + + + Chat history + Histórico de Mensagens + + + + <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. + <b>Texto da Mensagem:</b> Introduza o texto da mensagem no campo de introdução e pressione <i>Enter</i> para enviar a mensagem ao servidor, que distribui a mensagem a todos os clientes ligados. A sua mensagem será exibida na janela de mensagens. + + + + New chat text edit box + Campo de edição de texto da mensagem + + + + CChatDlgBase + + + Chat + Mensagens + + + + Cl&ear + &Limpar + + + + &Close + &Fechar + + + + CClientDlg + + + <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. + <b>Medidor do Nível de Entrada:</b> Os indicadores do nível de entrada mostram o nível dos dois canais stereo da entrada de áudio selecionada.<br>Certifique-se de não clipar o sinal de entrada para evitar distorções no sinal de áudio. + + + + If the + Se o cliente + + + + 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.<br>For a proper usage of the + estiver ligado a um servidor e tocar o seu instrumento/cantar no microfone, os LEDs do medidor do nível de entrada devem piscar. Se tal não acontecer, provavelmente selecionou o canal de entrada errado (por exemplo, entrada de linha em vez da entrada do microfone) ou ajustou o ganho da entrada muito baixo no misturador de áudio (Windows) ou na placa de som.<br>Para um uso adequado do cliente + + + + software, you should not hear your singing/instrument in the loudspeaker or your headphone when the + , não deve ouvir a sua voz/instrumento diretamente nas colunas ou nos headphones enquanto o cliente + + + + software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (<b>not</b> the Recording mixer!). + não estiver ligado a um servidor. Isso pode ser feito silenciando (mute) o canal da entrada de áudio no dispositivo de reprodução (<b>não</b> no dispositivo de captura!). + + + + Input level meter + Medidor do nível de entrada + + + + Simulates an analog LED level meter. + Simula um medidor de nível analógico LED. + + + + <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. + <b>Botão de Ligar / Desligar:</b> Pressione este botão para se ligar a um servidor. Uma janela será aberta onde pode selecionar um servidor. Se já estiver ligado a um servidor, pressionar este botão encerrará a sessão. + + + + Connect and disconnect toggle button + Botão de alternação entre ligar e desligar + + + + 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 + Clicar nesse botão altera a legenda do botão de Ligar para Desligar, ou seja, implementa uma funcionalidade de alternação para conectar e desconectar o cliente + + + + + software. + . + + + + <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. + <b>Fader da Entrada Local de Áudio:</b> Com o fader de áudio, os níveis relativos dos canais locais esquerdo e direito podem ser alterados. Para um sinal mono, atua como uma panorâmica entre os dois canais. Se, por exemplo, um microfone estiver ligado no canal direito e um instrumento estiver ligado no canal esquerdo, mais alto que o microfone, mova o fader de áudio numa direção em que a etiqueta acima do fader mostre <i>L -x</i>, onde <i>x</i> é o indicador de atenuação atual. + + + + Local audio input fader (left/right) + Fader de entrada local de áudio (esquerdo/direito) + + + + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. + <b>Nível de Reverberação:</b> Um efeito de reverberação pode ser aplicado a um canal local de áudio mono ou a ambos os canais no modo estéreo. A seleção do canal mono e o nível de reverberação podem ser modificados. Se, por exemplo, o sinal do microfone for alimentado no canal de áudio direito da placa de som, e for aplicado um efeito de reverberação, ajuste o seletor de canal para a direita e mova o fader para cima até que o nível de reverberação desejado seja atingido.<br>O efeito de reverberação requer uma utilização do CPU significativa, de forma a que só deve ser usado em PCs rápidos. Se o atenuador do nível de reverberação estiver definido como mínimo (que é a configuração padrão), o efeito de reverberação será desativado e não causará nenhum uso adicional do CPU. + + + + Reverberation effect level setting + Ajuste do nível do efeito de reverberação + + + + <b>Reverberation Channel Selection:</b> 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. + <b>Seleção do Canal de Reverberação:</b> Com estes botões de seleção, pode ser escolhido o canal de entrada de áudio no qual o efeito de reverberação é aplicado. Pode ser selecionado o canal de entrada esquerdo ou direito. + + + + Left channel selection for reverberation + Seleção do canal esquerdo para reverberação + + + + Right channel selection for reverberation + Seleção do canal direito para reverberação + + + + <b>Delay Status LED:</b> 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. + <b>LED do Estado da Latência:</b> O indicador LED do estado da latência mostra o estado atual do atraso do áudio. Se a luz estiver verde, o atraso é perfeito para uma jam session. Se a luz estiver amarela, uma sessão ainda é possível, mas pode ser mais difícil tocar sincronizado. Se a luz estiver vermelha, o atraso é demasiado grande para uma sessão de jamming. + + + + If this LED indicator turns red, you will not have much fun using the + Se este indicador LED ficar vermelho, não se vai divertir muito ao usar o + + + + Delay status LED indicator + Indicador LED do estado de latência + + + + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> + <b>LED do Estado dos Buffers:</b> O indicador LED do estado dos buffers mostra o estado atual do áudio/transmissão. Se a luz estiver verde, não haverá buffer em excesso/déficit e o fluxo de áudio não será interrompido. Se a luz estiver vermelha, o fluxo de áudio é interrompido devido a um dos seguintes problemas:<ul><li>O jitter buffer da rede não é grande o suficiente para o jitter atual da interface de rede/áudio.</li><li>O atraso do buffer da placa de som (buffer size) está definido para um valor demasiado baixo.</li><li>A taxa de upload ou download é muito alta para a largura de banda disponível na ligação à Internet.</li><li>O CPU do cliente ou servidor está a 100%.</li></ul> + + + + Buffers status LED indicator + Indicador LED do estado dos buffers + + + + &Connection Setup... + &Configuração da ligação ... + + + + My &Profile... + Meu &Perfil... + + + + C&hat... + &Mensagens... + + + + &Settings... + &Definições... + + + + &Analyzer Console... + Consola de &Análise... + + + + E&xit + &Sair + + + + CClientDlgBase + + + Delay + Latência + + + + Buffers + Buffers + + + + Input + Entrada + + + + L + L + + + + R + R + + + + Settings + Definições + + + + Chat + Mensagens + + + + Mute Myself + Silenciar-me + + + + C&onnect + &Ligar + + + + Pan + Pan + + + + Center + Centro + + + + Reverb + Reverberação + + + + Left + Esquerdo + + + + Right + Direito + + + + CClientSettingsDlg + + + <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). + <b>Tamanho do Jitter Buffer:</b> O jitter buffer (ou buffer de instabilidade) compensa os desvios de temporização da rede e da placa de som. O tamanho desse jitter buffer influencia, portanto, a qualidade do fluxo de áudio (quantas interrupções ocorrem) e a latência geral (quanto maior o buffer, maior a latência).<br>O tamanho do jitter buffer pode ser escolhido manualmente para o cliente local e o servidor remoto. Para o jitter buffer local, as interrupções no fluxo de áudio são indicadas pela luz na parte inferior dos faders do jitter buffer. Se a luz ficar vermelha, ocorreu um excesso/déficit do buffer e o fluxo de áudio é interrompido.<br>A configuração do jitter buffer é, portanto, uma troca entre a qualidade do áudio e o atraso geral.<br>Está disponível uma configuração automática do tamanho do jitter buffer. Se a opção <i>Auto</i> estiver ativada, os jitter buffers do cliente local e do servidor remoto serão configurados automaticamente com base nas medições da instabilidade de sincronização da rede e da placa de som. Se a opção <i>Auto</i> estiver ativada, os faders do jitter buffer serão desativados (não poderão ser movidos manualmente). + + + + In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light + Caso a configuração automática do jitter buffer estiver ativada, os buffers de rede do cliente local e do servidor remoto são configurados com um valor conservador para minimizar a probabilidade de perda de áudio. Para <b>ajustar o atraso/latência do áudio</b>, é recomendável desativar a funcionalidade de configuração automática e <b>diminuir o tamanho do jitter buffer manualmente</b> usando os controles deslizantes até que a quantidade de perdas de áudio lhe sejam pessoalmente aceitáveis. O indicador LED representará as interrupções de áudio do jitter buffer local através de uma luz vermelha + + + + Local jitter buffer slider control + Controle deslizante do jitter buffer local + + + + Server jitter buffer slider control + Controle deslizante do jitter buffer do servidor + + + + Auto jitter buffer switch + Interruptor do jitter buffer automático + + + + Jitter buffer status LED indicator + Indicador LED de estado do jitter buffer + + + + <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using + <b>Dispositivo da Placa de Som:</b> O driver ASIO (placa de som) pode ser selecionado usando o + + + + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + no Windows. No MacOS/Linux, não é possível seleccionar a placa de som. Se o driver ASIO selecionado não for válido, uma mensagem de erro será exibida e o driver válido anterior será selecionado.<br>Se o driver for selecionado durante uma ligação ativa, a ligação será interrompida, o driver será alterado e a ligação reiniciada automaticamente. + + + + Sound card device selector combo box + Seletor de dispositivo da placa de som + + + + In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + Caso o driver <b>ASIO4ALL</b> seja usado, note que esse driver geralmente introduz aprox. 10-30 ms de atraso de áudio adicional. Dado isto, é recomendável usar uma placa de som com um driver ASIO nativo.<br>Se estiver a usar o driver <b>kX ASIO</b>, certifique-se de ligar as entradas ASIO no painel de configurações do kX DSP. + + + + <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each + <b>Mapeamento de Canais da Placa de Som:</b> Caso o dispositivo selecionado da placa de som ofereça mais que um canal de entrada ou saída, as configurações de Mapeamento de canais de entrada e de saída estarão visíveis.<br>Para cada canal de entrada/saída do + + + + input/output channel (Left and Right channel) a different actual sound card channel can be selected. + (canal esquerdo e direito), um canal real da placa de som pode ser selecionado. + + + + Left input channel selection combo box + Seletor de canal de entrada esquerdo + + + + Right input channel selection combo box + Seletor de canal de entrada direito + + + + Left output channel selection combo box + Seletor de canal de saída esquerdo + + + + Right output channel selection combo box + Seletor de canal de saída direito + + + + <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than + <b>Ativar Buffers de Rede Pequenos:</b> Se ativado, o suporte para pacotes de áudio de rede muito pequenos é ativado. Pacotes de rede muito pequenos serão apenas realmente usados se o atraso do buffer da placa de som for menor que + + + + samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. + amostras. Quanto menor o buffer da rede, menor a latência do áudio. Mas, ao mesmo tempo, a carga da rede e a probabilidade de interrupção do áudio também aumentam. + + + + Enable small network buffers check box + Caixa de activação de buffers de rede pequenos + + + + <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the + <b>Atraso do Buffer da Placa de Som:</b> A configuração do atraso do buffer (buffer delay) é uma configuração fundamental do cliente + + + + software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the + . Esta configuração tem influência em muitas propriedades da ligação.<br>Três tamanhos de buffer são suportados:<ul><li>64 amostras: esta é a configuração preferida, pois oferece menor latência, mas não funciona com todas as placas de som.</li><li>128 amostras: esta configuração deve funcionar na maioria das placas de som disponíveis.</li><li>256 amostras: esta configuração deve ser usada se apenas estiver disponível um computador muito lento ou uma ligação lenta à Internet.</li></ul>Alguns drivers da placa de som não permitem que o atraso do buffer seja alterado pelo cliente + + + + 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + . Nesse caso, a configuração de atraso do buffer estará desativada. Para alterar o atraso do buffer, essa configuração deve ser alterada no driver da placa de som. No Windows, pressione o botão <i>Configuração do Driver</i> para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração <i>Jack</i> para alterar o atraso do buffer.<br>Se nenhum atraso do buffer estiver selecionado e todas as configurações estiverem desativadas, um atraso do buffer não suportado será usado pelo driver. O cliente + + + + software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. + ainda funcionará com essa configuração, mas com desempenho restrito.<br>O atraso do buffer influencia o estado da ligação, a taxa de upload atual e a latência geral. Quanto menor o atraso do buffer, maior a probabilidade de a luz vermelha no indicador de estado (interrupções), maior a taxa de upload e menor a latência geral.<br>A configuração do buffer é, portanto, uma troca entre qualidade de áudio e latência geral. + + + + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the + Se as configurações de atraso do buffer estiverem desativadas, é porque o driver de áudio proibe modificar essa configuração a partir do cliente + + + + 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. + . No Windows, pressione o botão <i>Configuração do Driver</i> para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração <i>Jack</i> para alterar o atraso do buffer. + + + + 128 samples setting radio button + Botão de configuração de 128 amostras + + + + 256 samples setting radio button + Botão de configuração de 256 amostras + + + + 512 samples setting radio button + Botão de configuração de 512 amostras + + + + ASIO setup push button + Botão de configuração do ASIO + + + + <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. + <b>Skin Sofisticada:</b> Se ativada, uma skin sofisticada será aplicada à janela principal. + + + + Fancy skin check box + Caixa de ativação da skin sofisticada + + + + <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. + <b>Mostrar Níveis de Canais:</b> Se ativado, cada canal de cliente exibirá uma barra de nível pré-fader. + + + + Display channel levels check box + Caixa de activação para exibir níveis de canais + + + + <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. + <b>Canais de Áudio:</b> Selecione o número de canais de áudio a serem usados. Existem três modos disponíveis. Os modos mono e estéreo usam um e dois canais de áudio, respectivamente. No modo mono-in/stereo-out, o sinal de áudio enviado ao servidor é mono, mas o sinal de retorno é estéreo. Isso é útil quando a placa de som coloca o instrumento e o microfone em canais diferentes. Nesse caso, os dois sinais de entrada podem ser misturados num canal mono, mas a mistura do servidor pode ser ouvida em estéreo.<br>Ativar o modo de transmissão estéreo aumenta a taxa do fluxo de dados. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet.<br>No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. + + + + Audio channels combo box + Seletor de canais áudio + + + + <b>Audio Quality:</b> 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. + <b>Qualidade de Áudio:</b> Selecione a qualidade de áudio desejada. Pode ser selecionada uma qualidade de áudio baixa, normal ou alta. Quanto maior a qualidade do áudio, maior a taxa de dados do fluxo de áudio. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet. + + + + Audio quality combo box + Seletor de qualidade áudio + + + + <b>New Client Level:</b> 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. + <b>Nível de Novo Cliente:</b> A configuração de nível de novo cliente define, em percentagem, o nível do fader de um novo cliente ligado. Por exemplo, se um cliente novo se ligar ao servidor atual, o seu canal terá o nível inicial do fader especificado, excepto quando um diferente nível do fader de uma ligação anterior desse mesmo cliente já tenha sido definido. + + + + New client level edit box + Caixa de edição no nível de novo cliente + + + + <b>Central Server Address:</b> 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. + <b>Endereço do servidor central:</b> O endereço do servidor central é o endereço IP ou URL do servidor central a partir do qual é gerida a lista de servidores do diálogo de ligação. Com a configuração do endereço do servidor central, é possível selecionar um dos servidores centrais padrão ou especificar um endereço manual. + + + + Default central server type combo box + Seletor de servidor central padrão + + + + Central server address line edit + Caixa de edição do endereço do servidor central + + + + <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). + <b>Parâmetros do Estado da Ligação:</b> A latência da ligação é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede. Esta latência deve ser tão baixa quanto 20-30 ms. Se esta latência for maior (por exemplo, 50-60 ms), a distância até ao servidor é muito grande ou sua ligação à Internet não é suficiente.<br>A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer.<br>A taxa de transmissão 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 ligação à Internet usando, por exemplo, o speedtest.net). + + + + If this LED indicator turns red, you will not have much fun using the + Se este indicador LED ficar vermelho, não se irá divertir muito ao usar o + + + + software. + . + + + + 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. + + + + CClientSettingsDlgBase + + + Settings + Definições + + + + Soundcard + Placa de Som + + + + Device + Dispositivo + + + + Input Channel Mapping + Mapeamento do Canal de Entrada + + + + + L + L + + + + + R + R + + + + Output Channel Mapping + Mapeamento do Canal de Saída + + + + Enable Small Network Buffers + Activar Buffers de Rede Pequenos + + + + Buffer Delay + Atraso do buffer + + + + (preferred) + (preferido) + + + + (default) + (padrão) + + + + (safe) + (seguro) + + + + Driver Setup + Configuração do Driver + + + + Jitter Buffer + Jitter Buffer + + + + Auto + 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 + + + + % + % + + + + Fancy Skin + Skin Sofisticada + + + + Display Channel Levels + Mostrar Níveis de Canais + + + + Central Server Address: + 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 + + + + CConnectDlg + + + <b>Server List:</b> 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.<br>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. + <b>Lista de servidores:</b> A lista de servidores mostra a os servidores disponíveis registados no servidor central. Selecione um servidor da lista e pressione o botão Ligar para se ligar a este servidor. Como alternativa, clique duas vezes num servidor da lista para se ligar ao mesmo. Se um servidor estiver ocupado, uma lista dos músicos ligados estará disponível expandindo o item da lista. Os servidores permanentes são mostrados em negrito.<br>Observe que pode demorar algum tempo para obter a lista de servidores do servidor central. Se nenhum endereço de servidor central válido for especificado nas definições, nenhuma lista de servidores estará disponível. + + + + Server list view + Vista da lista de servidores + + + + <b>Server Address:</b> The IP address or URL of the server running the + <b>Endereço do servidor:</b> O endereço IP ou URL do servidor executando o servidor + + + + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: + deve ser definido aqui. Um número de porta opcional pode ser adicionado após o endereço IP ou URL usando o caractere dois pontos como separador, por exemplo, <i>example.org: + + + + </i>. A list of the most recent used server IP addresses or URLs is available for selection. + </i>. Uma lista dos endereços IP ou URLs dos servidores usados recentemente está disponível para seleção. + + + + Server address edit box + Caixa de edição do endereço do servidor + + + + Holds the current server IP address or URL. It also stores old URLs in the combo box list. + Contém o endereço IP ou URL do servidor atual. Também armazena URLs antigos na lista do seletor. + + + + <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. + <b>Filtro:</b> A lista de servidores é filtrada pelo texto fornecido. Note que o filtro não diferencia maiúsculas de minúsculas. + + + + Filter edit box + Caixa de edição do filtro + + + + <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. + <b>Mostrar Todos os Músicos:</b> Se marcar esta caixa de seleção, os músicos de todos os servidores serão mostrados. Se desmarcar a caixa de seleção, todos os itens em exibição na lista serão recolhidos. + + + + Show all musicians check box + Caixa de seleção para mostrar músicos + + + + CConnectDlgBase + + + Connection Setup + Configuração da Ligação + + + + Filter + Filtro + + + + Show All Musicians + Mostrar Todos os Músicos + + + + Server Name + Nome do Servidor + + + + Ping Time + Latência + + + + Musicians + Músicos + + + + Location + Localização + + + + Server Name/Address + Nome/Endereço do Servidor + + + + C&ancel + &Cancelar + + + + &Connect + &Ligar + + + + CHelpMenu + + + + Getting &Started... + Como Começa&r... + + + + Software &Manual... + &Manual do Programa... + + + + What's &This + O que é &isto + + + + &About... + &Sobre... + + + + CLicenceDlg + + + By connecting to this server and agreeing to this notice, you agree to the following: + Ao ligar-se a este servidor e concordar com este aviso, está a concordar com o seguinte: + + + + 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): + Você concorda que todos os dados, sons ou outros trabalhos transmitidos para este servidor pertencem e são criados por você ou por seus licenciadores, e que você está disponibilizando esses dados, sons ou outros trabalhos através da seguinte licença Creative Commons (para obter mais informações sobre esta licença, consulte <i><a href=https://creativecommons.org/licenses/by-nc-sa/4.0/deed.pt>https://creativecommons.org/licenses/by-nc-sa/4.0/deed.pt</a></i>): + + + + You are free to: + Você tem o direito de: + + + + Share + Compartilhar + + + + copy and redistribute the material in any medium or format + copiar e redistribuir o material em qualquer suporte ou formato + + + + Adapt + Adaptar + + + + remix, transform, and build upon the material + remisturar, transformar, e criar a partir do material + + + + The licensor cannot revoke these freedoms as long as you follow the license terms. + O licenciante não pode revogar estes direitos desde que você respeite os termos da licença. + + + + Under the following terms: + De acordo com os termos seguintes: + + + + Attribution + Atribuição + + + + 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. + Você deve atribuir o devido crédito, fornecer um link para a licença, e indicar se foram feitas alterações. Você pode fazê-lo de qualquer forma razoável, mas não de uma forma que sugira que o licenciante o apoia ou aprova o seu uso. + + + + NonCommercial + NãoComercial + + + + You may not use the material for commercial purposes. + Você não pode usar o material para fins comerciais. + + + + ShareAlike + CompartilhaIgual + + + + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. + Se você remisturar, transformar, ou criar a partir do material, tem de distribuir as suas contribuições ao abrigo da mesma licença que o original. + + + + No additional restrictions + Sem restrições adicionais + + + + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. + Você não pode aplicar termos jurídicos ou medidas de caráter tecnológico que restrinjam legalmente outros de fazerem algo que a licença permita. + + + + CMusProfDlg + + + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. +What you set here will appear at your fader on the mixer board when you are connected to a + <b>Perfil do músico:</b> Defina o seu nome ou um pseudônimo aqui para que os outros músicos com quem quer tocar saibam quem você é. Além disso, pode definir uma imagem do instrumento que toca e uma bandeira do país em que vive. A cidade em que vive e o nível de habilidade com o seu instrumento também podem ser adicionados. +O que definir aqui aparecerá por baixo do seu fader na secção de mistura quando estiver ligado a um servidor + + + + 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. + . Esta identificação também será exibida em cada cliente ligado ao mesmo servidor que você. Se o nome estiver vazio, o endereço IP será mostrado. + + + + Alias or name edit box + Caixa de edição do nome ou pseudônimo + + + + Instrument picture button + Botão da imagem do instrumento + + + + Country flag button + Botão da bandeira do país + + + + City edit box + Caixa de edição da cidade + + + + Skill level combo box + Caixa do nível de habilidade + + + + None + Nenhum + + + + Drum Set + Bateria + + + + Djembe + Djembe + + + + Electric Guitar + Guitarra Elétrica + + + + Acoustic Guitar + Guitarra Acústica + + + + Bass Guitar + Baixo + + + + Keyboard + Teclado + + + + Synthesizer + Sintetizador + + + + Grand Piano + Piano de Cauda + + + + Accordion + Acordeão + + + + Vocal + Voz + + + + Microphone + Microfone + + + + Harmonica + Harmónica + + + + Trumpet + Trompete + + + + Trombone + Trombone + + + + French Horn + Trompa Francesa + + + + Tuba + Tuba + + + + Saxophone + Saxofone + + + + Clarinet + Clarinete + + + + Flute + Flauta + + + + Violin + Violino + + + + Cello + Violoncelo + + + + Double Bass + Contrabaixo + + + + Recorder + Gravador + + + + Streamer + Streamer + + + + Listener + Ouvinte + + + + Guitar+Vocal + Guitarra+Voz + + + + Keyboard+Vocal + Teclado+Voz + + + + Bodhran + Bodhrán + + + + Bassoon + Fagote + + + + Oboe + Oboé + + + + Harp + Harpa + + + + Viola + Viola de Arco + + + + CServerDlg + + + <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. + <b>Lista de Clientes:</b> A lista de clientes mostra todos os clientes que estão atualmente ligados a este servidor. Algumas informações sobre os clientes, como o endereço IP e o nome, são fornecidas para cada cliente ligado. + + + + Connected clients list view + Lista de clientes ligados + + + + <b>Start Minimized on Operating System Start:</b> If the start minimized on operating system start check box is checked, the + <b>Iniciar Minimizado com o Sistema Operativo:</b> Se a caixa de seleção <i>Iniciar Minimizado com o Sistema Operativo</i> estiver marcada, o servidor + + + + server will be started when the operating system starts up and is automatically minimized to a system task bar icon. + será iniciado quando o sistema operativo for iniciado, e minimizado automaticamente para um ícone da barra de tarefas do sistema. + + + + <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + <b>Mostrar Diálogo da Licença Creative Commons:</b> Se ativada, uma caixa de diálogo Creative Commons BY-NC-SA 4.0 será exibida sempre que um novo utilizador se ligar ao servidor. + + + + <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all + <b>Tornar Servidor Público:</b> Se a caixa de seleção <i>Tornar Servidor Público</i> estiver marcada, esse servidor irá registar-se no servidor central para que todos os utilizadores do + + + + users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. + possam ver o servidor na lista do diálogo de ligação e ligar-se a ele. O registo do servidor é renovado periodicamente para garantir que todos os servidores na lista de diálogo de ligação estejam realmente disponíveis. + + + + <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. + <b>Estado de Registo do Servidor:</b> Se a caixa de seleção <i>Tornar Servidor Público</i> estiver marcada, isto mostrará o sucesso ou insucesso do registo no servidor central. + + + + <b>Central Server Address:</b> 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. + <b>Endereço do Servidor Central:</b> O endereço do servidor central é o endereço IP ou o URL do servidor central no qual esse servidor será registado. Com o menu dos servidores centrais, é possível selecionar um dos servidores centrais padrão ou especificar um endereço manual. + + + + Default central server type combo box + Seletor do servidor central padrão + + + + Central server address line edit + Caixa de edição do endereço do servidor central + + + + <b>Server Name:</b> 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. + <b>Nome do Servidor:</b> O nome do servidor identifica o servidor na lista do diálogo de ligação exibido nos clientes. Se nenhum nome for fornecido, o endereço IP será mostrado. + + + + Server name line edit + Caixa de edição do nome do servidor + + + + <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. + <b>Localização: Cidade</b> A cidade onde este servidor está localizado pode ser definida aqui. Se um nome de cidade for inserido, este será mostrado na lista do diálogo de ligação dos clientes. + + + + City where the server is located line edit + Caixa de edição da cidade onde o servidor se encontra + + + + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. + <b>Localização: País</b> O país em que este servidor está localizado pode ser definido aqui. Se um país for inserido, ele será mostrado na lista do diálogo de logação dos clientes. + + + + Country where the server is located combo box + Seletor do país onde o servidor de encontra + + + + + E&xit + &Sair + + + + &Hide + &Esconder servidor + + + + + + server + + + + + &Open + &Abrir servidor + + + + server + + + + + Server + - Servidor + + + + CServerDlgBase + + + Client IP:Port + IP do Cliente:Porta + + + + + Name + Nome do Servidor + + + + Jitter Buffer Size + Tamanho do Jitter Buffer + + + + Start Minimized on Windows Start + Iniciar Minimizado com o Sistema Operativo + + + + Show Creative Commons BY-NC-SA 4.0 Licence Dialog + Mostrar Diálogo da Licença Creative Commons BY-NC-SA 4.0 + + + + Make My Server Public (Register My Server in the Server List) + Tornar Servidor Público (Registar na Lista de Servidores) + + + + STATUS + ESTADO + + + + Central Server Address: + Endereço do Servidor Central: + + + + My Server Info + Informação do Servidor + + + + Location: City + Localização: Cidade + + + + Location: Country + Localização: País + + + + TextLabelNameVersion + TextLabelNameVersion + + + + CSound + + + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. + O servidor Jack não está em execução. Este programa requer um servidor Jack para ser executado. Normalmente, se o servidor Jack não estiver em execução, este programa iniciará automaticamente o servidor Jack. Parece que esse início automático não funcionou. Tente iniciar o servidor Jack manualmente. + + + + The Jack server sample rate is different from the required one. The required sample rate is: <b> + A taxa de amostragem (sample rate) do servidor Jack é diferente da necessária. A taxa de amostragem necessária é: <b> + + + + Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> + Hz</b>. Pode usar uma ferramenta como <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> para ajustar a taxa de amostragem do servidor Jack.<br>Certifique-se de definir <b>Frames/Período</b> para um valor baixo como <b> + + + + </b> to achieve a low delay. + </b> para obter uma latência baixa. + + + + + The Jack port registering failed. + O registo da porta Jack falhou. + + + + Cannot activate the Jack client. + Não é possível ativar o cliente Jack. + + + + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. + 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. + + + + 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 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 to set 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. + + + + <b>No ASIO audio device (driver) found.</b><br><br>The + <b>Nenhum dispositivo de áudio ASIO (driver) encontrado.</b><br><br>O programa + + + + software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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 <b>ASIO</b> 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. + + + + CSoundBase + + + Invalid device selection. + Seleção de dispositivo inválida. + + + + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> + 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: <b> + + + + </b><br><br>Please restart the software. + </b><br><br>Por favor reinicie o programa. + + + + <b>No usable + <b>Nenhum dispositivo de áudio (driver) + + + + audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> + utilizável encontrado.</b><br><br>De seguida verá uma lista de todos os drivers disponíveis com a mensagem de erro associada:<ul> + + + + <br/>Do you want to open the ASIO driver setups? + <br/>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. + + + From 4192da8c842f0b7305e9202846465c460e67f515 Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Tue, 5 May 2020 21:33:21 +0200 Subject: [PATCH 042/125] Starting French translation #77 --- src/res/translation/translation_fr_FR.ts | 62 ++++++++++++------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index ad4c12c5..3fea4318 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -6,22 +6,22 @@ The - + Le logiciel software enables musicians to perform real-time jam sessions over the internet. There is a - + permet aux musiciens d'effectuer des boeufs en temps réel sur internet. Il existe un server which collects the audio data from each - + qui collecte les données audio de chaque client, mixes the audio data and sends the mix back to each client. - + client, mixe les données audio et renvoie le mixage à chaque client. @@ -31,22 +31,22 @@ About - + À propos , Version - + , version Internet Jam Session Software - + Logiciels de boeuf sur Internet Under the GNU General Public License (GPL) - + Sous la licence public général GNU (GPL) @@ -54,7 +54,7 @@ About - + À propos @@ -64,17 +64,17 @@ Author: Volker Fischer - + Auteur : Volker Fisher Copyright (C) 2005-2020 - + Copyright (C) 2005-2020< &OK - + &OK @@ -201,7 +201,7 @@ Chat - + Tchate @@ -211,7 +211,7 @@ &Close - + &Fermer @@ -350,7 +350,7 @@ &Settings... - + Paramètre&s... @@ -368,47 +368,47 @@ Delay - + Délai Buffers - + Tampons Input - + Entrée L - + G R - + D Settings - + Paramètres Chat - + Tchate> Mute Myself - + Me silencer C&onnect - + Se c&onnecter @@ -418,22 +418,22 @@ Center - + Centre Reverb - + Réverb Left - + Gauche Right - + Droite @@ -761,13 +761,13 @@ Server - + Serveur Size - + Taille @@ -940,7 +940,7 @@ &Connect - + Se &connecter From 0a8073c11df2c6d6af7fd6cb85baaa8b16ba99cf Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 16:40:48 +0200 Subject: [PATCH 043/125] merge fixes --- ChangeLog | 4 ++++ Jamulus.pro | 3 ++- src/res/translation/translation_fr_FR.qm | Bin 23 -> 2778 bytes src/res/translation/translation_fr_FR.ts | 2 +- src/res/translation/translation_pt_PT.qm | Bin 0 -> 90147 bytes .../res/translation/translation_pt_PT.ts | 0 src/resources.qrc | 3 +++ translation_pt_PT.qm | Bin 568 -> 0 bytes 8 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 src/res/translation/translation_pt_PT.qm rename translation_pt_PT.ts => src/res/translation/translation_pt_PT.ts (100%) delete mode 100644 translation_pt_PT.qm diff --git a/ChangeLog b/ChangeLog index 3a397afe..6f5be6db 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,9 +13,13 @@ - support Mac CoreAudio aggregated devices (Ticket #138) +- added translations: french by trebmuh, portuguese by Snayler (Ticket #77) + - bug fix: for mono capture jack audio interface Jamulus complains it cannot make connections (Ticket #137) +TODO re-design About dialog + TODO implement panning for channels (Ticket #52, #145) TODO WIP support internationalization diff --git a/Jamulus.pro b/Jamulus.pro index 08ee7e36..2b1d668f 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -15,7 +15,8 @@ QT += widgets \ xml TRANSLATIONS = src/res/translation/translation_de_DE.ts \ - src/res/translation/translation_fr_FR.ts + src/res/translation/translation_fr_FR.ts \ + src/res/translation/translation_pt_PT.ts INCLUDEPATH += src diff --git a/src/res/translation/translation_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index c02994cafb69a42d7f77c4004edd5eae08bb0f3b..9cfed230588652c29979701de186681394c3b46f 100644 GIT binary patch literal 2778 zcmai0O=uit7=HIRKW?L7iB&3mm9i!_S(ZpVR4Gj+X4y7rLNV+w7RxnRRA1 zP4pm21r;e?+Ji=+R|!3N5L&SY@gVh36g&w%S`aECS`o$P{bqM2)g5Ko`R4oP{dwN! z{h4{{liGo=Zf{@s`q078&RqKR`)MM&gZ~^+-$krTME#Ew9eI){?NIu|b3~aN!J7Sp zGDp6J+*Qh4$`B14r_ALRQR)MF@Z7u5{gFx+zkuF*bYk}{$Q5bv8SMM2^z5I%!0!3v zM^9XUz3t?$uf74j!>Q+&ZxSWWr~Yz($NszYBjYygP7T*jI-A@q3)4&Nq023cg1B%6F1!@h~#CiVj7l02+6a`4oqTb;d5 zZJe1n6*%#6b+OvCffKeAXm%~>w5HB(;@qGH>GTrxS!%E6LOG`6neX6I-;igy3p;K@T6S}9zaA?bz@!lj*z<1=;#*uU}!*_syc0d##&2otjqAo zo=xT1L3A9S0sLLW{}*emgL+R4A?hMPxf{|IXB#HNa4bt2{=d-IU8flU?SXIy$Xf8> zA_oDl%=9Ksn^-*{Hx$2iCo7Las*Ya}1#{{`mQivfRb)d#uda5SAE9Dx!UsQhRX#1; zd5~gF6Ee((iK3LtaIa4YKS%J8`e_{tQtQ6Sv- z26k&G1#WK_vYhS`ouU=2Be+`xiqSBL$5!lGCtsygE21QA>FSnPY*#JQ5Oby>ZBL4k z(&F4`kBG9Arv*A0T1({@PO{j(uv4dXPpWQ>&s0WbDn@OLrVtqyaZu7n5ydLFuxK4; zT;#K=kQ=-UaSTtj{f6Tn6|0W5j__tp&p-{v_$ZJDi!IuMJrmqD;E%b|XcX%N74e&- zadn4X=;Z;;X>GaYTEiD3+NhW)7AMCiiW9{cH$xz6R)OYe5P{9+HOuiNYvnYpq4R(X zY0F{E1w$4bgr3tZ)?48q60EDlH|Yli!jn9Y!YS}CG?2?zr0<*dnpY^O**d6cYDjm7 z>k$0v7*pI-7*C;M-*mfPM?bRjp-3mh`w%KMcopQ8CJ&xqBu4@FYk9}EF-_x)VW25AOu!YyTn3Yi&c>09yGo>ucfP1{JPY`5C6 z@g%7fN+#ywEti0!t%8W6PS44Dtl?prS8Vgxiua(o6(y zDNZVf52{=EAmE;>hVt1ZiD_SrSDJx1e?#mo-pmrWOq|aC9`zfQUw^l3 Copyright (C) 2005-2020 - Copyright (C) 2005-2020< + Copyright (C) 2005-2020 diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm new file mode 100644 index 0000000000000000000000000000000000000000..93b4207ca59ec513fa7a160aaedc1ce4b998bd16 GIT binary patch literal 90147 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 yc1QhFMOGs|ZF9hznh{W5<>LoiUKK06mr7 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 z

hB)8%@TRmGf&W-l2<$9ygYmK&H?ph!I*J3DSNx3;$_kiloTGo0?87PuQ3Q6q@ zR*4+BMoC*e8BR?vJqvqN)BTx%uEc{^j~_hf_S1#~MOZh3b0+IN@0>M^+$-p|kU}5$ zr@C!yL_qL8Ek1;RZa;^TpP{5wA2QFIKdFjfY{ z5d9Th9(&ll^2Y~KVQ>zbL4V=b8dRVRsc5sgbgrf5NHr~rasvkYNwcF9S+T=^NE45BeI)lEX>ScauBJ%Z9dH$rD z=gJJy1+lampWX$k1qzr6wfdY~jf~-;p^IXpz*Lzjz2a0Jv~eaoXBjhdGkoN8=`?Jb zo^Hhc4gh`r+w@E%$iN!{h=vF(a?4`epY5?s*4>KU?U;CfMI$vR*?Hc88-e3X=zSC_oTXg$l1&BT;>7s zIBtS2qFdWq)&gZGfZ zOmfh`Zs-%9Fqb}ns4Vo7cP5R~;*iq;ZE~0FWlzNjr!g!mM$s>3(mSX)JWTo(4d}^k zK-nlRWY*4ySk{P+0jvXW9lCp@dWmd{=X`;d;r(H_5|WJDiNG+opyltG+f z2GOTsB$LR8EK4NsadqMS2SE`HSW{@GD0>$w)xH8fX1IrFFYFbOuv@(v5ensr1m_{i zhE%8%iB@=KV2Ga_JjR^1C7;Z#b9twkX16};cD>o9+tXEDaP7_6T$AVAvO>+BthsC8 zc8j6p%9OgLE2%Ip?7fTbI{2ui75MHv?8b~D%t^RXHpy>a<{-{pDJ|2kS!~3HE7pJaahKQgph) z-;Y(~TJ$!)L5=$}RhDY|>B%v$Qk=dx2KFIr&mT4?#_a9yyVT#5PH8#{=(bd!s}V7A zZcoZ9!%V&`^%?^$11l2J=GI^5_A-@SJ-|}U?s9i=a(3jRI5{)rJ~NS{I8NXbSzx*# zyV4FHXXzQQ=f?fn7fbbhp}U*1M}wv9u2gz*sb+R0hrq6cZd^JJ)QZZe9;G=r__Q)1 z?chR7kyx@=I}DfVaI3c*jG7hSGPW1P@X@`rv-Nv*Y2_5tnM-x?EUY#+mMbO1ImNXu zVOB@6Bx21;{3h^~&9PiEXuI1|!{9as+wL_5BKOaktPT6LmTGi2)~mRJggV{UDd66H zDbpdckdpI)!U}+;`o0*a^2YnKBC4h>Z}5O#Vzg9?z1PwXQrK$|IQLPjw7(GtK9}m} z5?EWR4e~hGUvO9~7z>yxd^Sz@=~Rh7`4mq&trHYPCi**i^-RrTvG?q%w|n;(RpG$ zRX*rjF=AQ{8FabBvV$B8&3A}zGAb?#SOlA+X}QR}=Ebp`!awdNWdx5gd+kl)=ZsA9 za~>DO_fABh;Aa83-AP#O=3ECyWFXMg#W_{L*~rkAnI6GWb|~~(>u zv5U;HZel_ev351|$6PYAhGZrq?ObcFCe@$S?}7&K8wydrw}dh+u+&o zFG4RXJ|V3Iv&fwaNiilH{H!>NVC$w;X%9Dm}T;Xn>nx(`?@Ard#yfjAsSctZdV>VgZ2009H zQ*>ffol>cGC_7vk#=^;sDo{V=c$&|V2U)^T86+ojHEGzgNoc+o+T>s6fs)3d^n#>5$X>DkQ(|SApm$t4pMD@_ZR@uQ-C4*mKmN$)%bo67i9% zJvnHvgHZQlyqFm0!md=P=7=yzVF}Lsq{ZC5A}vKtb#NjbCrL+!BdjkVU#d6=3{}Z6 z<-|i`K$Xu~s_Gy=4lW=^8H*#IwzLrAO4b5<=keEe&KoI70BLhFpalKBY`hl z&j6FCs@N{MnUo|)(8p%0ng^eaIgV*{@r)!c=4H0lD>Is%C}gAYF6niE5Qb4oe|>Sv`eYZfDJM zx&Bb-xUjuES;g_r4dOE+9?7QLoKW#I-9+4a4w)%eQxuQ_azhIhR6@GKAzt9-&bz}D za1ej1hV!!=z2a3%>6%{v%o6*&bWv3HyYxI)5;oc^=G%7LYH{x`FSn8l;O5nH(t9y_ z{8?|P4>@HRVtU8$w<#H^$wL{n8Jlb=Ybq{o-;^RTcBeq*b9Gb#0XtKu)I(k|OT_6x zWk-@%B2qB=^empHF=30EjouALg{{)i#G|DkFK3*+W0AUN0GmdEYBQ9NTRAjUip-2b zp?IwFM&c7>u!|`5&0kMdz^(M-2%a1=#`e2?RNJPSX&u6EHQd^@69fVI6-HlrnA=Gg z3*@>DYX*`OTH#BMo$jh3GfG*3%7J9eAW>6Ub1@DJB~P4uj~ohzXgGIeaeM#xue z6ohvh4J`B81Gn$@0XY@|k?36XUK`QtD)xuaj5leAE?I?n3SK{=*2yYl7$P4nrVbhB zq7wrUi||-){@uISnyN89S*R5)@b}*U-J<=c*^Q#TARLPY4P9?T(7BNlst{TUhgU<- zsVFhcBf2#!UYf(pT$)~LhItf4#2z;#<%1}KJ6AhSocAo>({b}p>=@+bqu97ZZd189 z&v%zHXCWUJZC9{`FzF1?G}amfLm7RP_I!yGM+!y|uT)|RN3lL(K-0tbw4K$Pd{~6< zY>Z+gY0C0^yhl0WIbPJ5V8it7RTG%uczGKS<&-gfD->p+gY<|d>Yjw+qXNFv}WRlYJKrgwb6Bn`PdE}T;o#~INfx} z9iv~|_{FXY!yGBb%QksU7A)BMTTl-FVwoUmGv z>q4VSWW=BZ|I5lZ8bf_1v_njzmKc%ZrWPVPwRy((FsKENi(`o^OG2{y_;ul?Y6hG# z4u;!+TseW;x*VkU-(g1ri04jeF1s)F7GioP!#%;vy6^txOD20!b%3%6H^P>r4;6EsvW|kf4e@urFJ6dFYA> zkhl4pNE<(8-YOTD#AOjY+pvpAI3kO-@OLtWyl{$LD68hXTynn27>A2@r851aerE*^ z$f=zI+-$+$LbQ5eDHwu9m`gALN>g&l!aLW zYxn!Mp+bRXAPm@Rf{X(_y=JR+qJ|`f2RPYf1oos_CT~&^$qR_jGh?79&In<7(@9-? zxEb$B0g%C<+#SJAj(gk)-s0+;XNZZaCa*OmIg^3m&Pn)&-5|^}r=M zq%au!k*RrrZfcUAmrZ--Uq0aE2}_oaWUXstyk5JbxTSYG%@&wJGa}a`aaSNj&r zmd~maHuztv5VJIujQm8msTZd@7TfZh-wpQ3b-E<&@i9enaEdLaFz zGDEAREyH&H3P%A8E0~`STnnP)HN(m-{Yh z%CHls>})O?+{^^EJ4XhGL-L9|LQq{5foP@IrkFQKfy#j0l`^hYoqNW7r?a?gY|PCD zt+Jc|jj~{1%)inen?Aj*F|(~*8M}J>jy>o4!tSxk9wy?q6e>}$b5NpGNmAT-v&Fxw zVOf*&+_HkCv?Exj!nRAi)Yw#3uhAsv7o*E)W(~#d5U!Rh%L>^ksXc-Vsw%2+DI%I6 zhAg>-Os&Z5%s^lmO#HG#Z4|bk0AoPZNVmE%6iXwX-R71x2{PO~Z;mlAwnLin9id7y z>AkAMRKLsyysp&r{UGVd@HqgxyI=G)&dfN0+7xI0$ex|*%zUF+Z=R@eyNExJkr)vC z?HyY| zne}}-%!{$uAWs2&iW9#G!=SEt%w^r?qKlf4v>4BkQdTMms4{QxlAUhYR9t2 z@!Q7XG=TJnWNPhGQZ*Q`EOh2~lzSfjA@fWhk)IH7v7k;2Mf&I78Bp-K7LZ^x4 zD%wZC2zLtm?x8`kKM8yBTg|($d&*_R8rb4UPuRdPJYgCIJC&Bl74nFh6Nn#Un<5Rw zENa7y5oen)Qj8}qnk&~81Mv4cv!BAD^c!onQ9P|`0k|ihOUsg_JZqz z9&Mjbal+&BbY#E=;~|7r)j71bu-HLbou5Y)TTBz9#|C5+Isb~K=nx&BY&GY6L~+He zPy9~0wc>i#K?7r|5MPfIy?gPjOj}-O1v*QxR6#-~fI4k9`3hEohYLs-a?NV!O$^Pp zY!&5fX0b;m4TEQ8Qtch`lisFK(1HbfL)V9HY|dCvwX;X0AM+6b-d6ZCJ22 zo1u+R>dji>C{;LUmPIQ;3VjLfndDe2lmJ>W zjh{3THkADeN|2my&#FgBMSf!}&)GHSmy)S=jM98ZD=9a!Xnt7@V6-E>B|lVQq%TKG zr&Th}12flVLh5;1TUod)CXocIc1*uWrRyRC9*oD4igGqyA_cZd?oe))-^`?%OEb+X zXRVf2ge@vu5OfDEeXOMnA8DqMb~1Hb`cWEgCr_+`f5$WXNH>ee$Mv1=RJG$8oCZtlHt3$o{r?90Hfm=08ce7r*3y7O) z5a^`V(HHoT?KzXmrg798>k4?k9NS^jgy{|)MBQ?jPJ!~mMi!@UU(3vjn}Sufdo{bb zSgn9`o|HN#*@DltQz&SkZgS)8$$6CfayF`Au#=rZzlyJ8&1y;P8s)|?h54!sRoRLr zYsP10nyuM1T8ko*8Up8f*>whh_#Ho-c&|n=>)$KupW{Q{!($$2g-LB$m zO=Wo3P2~C+bqATwBBVnE(THAZ&dwuFQb?S~!bzZ7p);WPB7RF>9hs!nPddNa@3D5UE7$qne3rA=SPaI!jS%?*_nf^rDF z6u!FFzY1cc9S-9ax6`(Vc)JUjdD+-0ZU6BHdTrGJ<{rh0(a>|50SVG(RzJIX+F66b ziCvg|E6G!J)ZQLI*HHkPu7h1Jdlq^=$Rb?0(S<#qkD>*x0lAERDfC79=GsHG8C*Lv zk8`>U-(8P9B%$U!`dvuh8bE8vr}Jlc*noOr>xs;^kg_3_;B4ev5Zr zq>8d8Wz{h#(ZxPGbTwY<(uSmD8a~#YE*9^LQ+rBXCxVZIN`OM?+aovEn)Tw>N7L6y zqVUQ}zEUgJiz{>LYox#4x)5X9hJRCBFDGYN%CCYQVG%nQeC>pOw?dks=%kWW-f3Uz zxz+wT2N81(mWDA9;r=uDjq{a{BX-Dp669s>Js}9B-6eUsjg=Fz6d9jUV5+x0i>=aM zkw+a^j~){38I6?Mq9<%VDD6z}x9NA5;aL*f5}0t2ITk_;gR5G00a*IKmU-x%Lx_WP zjZ{{Cj`O)#sU_r1?B7HH9$6y5{q|{S!v)l`;t7;|AU*<%hu{Uzm}4RdW()p`9r5Ne zV-m%b_a zNwGT4+2RJ|4hjn+3i@x}XH}xRh#KOOd_raU6xw33%C{^KPT^2bWPXmPfbM=JsN`cImYQc6 zZUTK$sj_D&U1k_e*z&WKn8o8E`%}GB^cmLTNJ5y7?^BV4@EI3YYW&>#kQv~C*k|2X z6|m)as9xB<1@}V_y_Bbku`^y%p)FmCFxQ0NSth&NySLcB_mXG(1t5Wxr6`V#ummB%ryo;VUe zj_z(6b2~=j)mV-)H!;-X+>x1oA}4#JEU1aNyJaWMOiup z`_H+j?4LY9_V@SC!PN`30AD_T+Lx;B3hYc4~5;VO(uf zVQszm-1W`68`V6<(nOQ!qI?W}>f8g?7bqc>yW_5qQGX<5RHazB{PcPRfp7vK7&as! zvgc12c?Bs6IrUqAb}?3>zGYO8OJO~d=+cpDMY@%`Hl%5^Y?eGA^G)Gf)0oB#dM6X! z!!t4XR@z0r)?s(@gd_!$vO6R8zmp# zQNHPTzBvXN;psDUbb2BI_+%29mT9LkXeMIQDLp`AMV%7DOtwB;DWj^+UOKnFtRmDj zSV$Yv$Z3Z(wG#~yxt1EnI3r3OVq_|z$fC{QTnf8NKgI9Gn6i$RgE=$P-s=Q1Y`_A5 z5KLgN)Im<4r7@qM1`i$LX7@v_-5D* zj#UST9?cb>Rgk7cX+jIUpVIR^i|oS$h^M5IWh#zhTD|@^St1G~{ikIY#U`kZVv{2_ z;ioKe;_{QJ__v@vQC9vN(IjRqKEFJc3V7$WV27jrXbIy7Y|ZO*+us^LxZn|ujbo>F z7l+>?&j6(z*k z`|P&{3*uTTTdhKvfN_(fxt?^~Tv8x27c*6P{QK>xg<`FPcm58eS}E8V@9_y?%wo}a z>#-|uYFYGV84;B%w&3X?IQha*ivzaHtBA@64Cg$H90H3_aWMKo+p-s0F&hA+?Kp@} zrD;Ep=ZJkNOcuf=@f8oCpi=ybED&|Bf_t(CRt(f@m-4uAsor>g?QMvWbF=?8FvB>; zqrDSmY0lu2n4vfaGA#3(oJj~7D#k$7z``ja=w4f)cY|9*x`i{tW7Qgz$1jpiDC5PO z3vf;CUKiL)RY`iSNTv6c>u%e2cw*bscp19|v^fFq`@kT5CkI@euj5W=skp1X8DKO= zOVJ1KV-;ByovO6Q-D_bHeom7~yWU8=d{gNGCW;gfB>-R?I3MpXVvgm*lLM}Qx>#b^ zZ^wwv1;mgkdURb18Gew<%n*P15Uw|0KsF4qltvk0N1q0mQX0TLldd(@x=Rd1@qfHk zoIL0YEsCR~MK^*LRnqhZy<|0e=IRxJ4_Kx%U)D9MIW2^8j0r4b7M11)M<(j$Q5PlLVv+)&ejKE)NXpf(DT0Y`WrX6G(R`HPvGU-LuW>6D?cR&b~ZCfOnLT(naB z+iK>*hTA7h0uBb^l{{32QfgN$jG@pb0h;ab=YZRY8m`sA$498qX+pLpP@m zOYmVm>hwIzDjj$GMiKe9IshQxtf2MTXr*%_N+~uP`Z|DplKse4PLG5!*6G*aFp+h? zX4WH*I0ed&1G^qc$FOqh*!Z#IQ~h3A1d{nq0N=h)G#%Jg#VD{4(g_mwo5Qj11UgH{ zSuTJvw_sZpk70CQ^&8e^tOc=l2QtPodm6CAPE%B2(8$9q34!5CyL#*~97%kzGF`26 zoo_}S+}9ZwvE(Ea%?${}oBvK{L78h@hU(UU-!Nf}il4Y@j)$m@hBiaJM$| z0!&xk6+TQOaLXkD9kBxEymG=FAkWi$N*_dX9E?S68F{BdmDvqDD9zW=`OoyVXjTXp zgl;UgqX=BTJ?7eBey7{YI)jagJc*r$@-qCveO5HFl2u-LydCWmIPAd{H#edmzA@q6 z;ArFB+;P+_fAc5D$5F=D*l_egc-R*+!TsQ(^&JjsoxmG3Im*2%PPYxS-~x$q{BOJk zMK^Y;3YC;=V+ND1l`lDJH`5h}=OSN@J|}Z3gikE^aV5O?T}}%b!nK}q;{#v=9u2Ks zg3KLot7-+?4w^h25aGbyz1?@-UYWULrc>YE#+JXCDpE}+s@qZQyyvDH@x?@^Zd1F#JWmkgKTCsf_Jn@*wI{k+@&z!%_N>~BFx+GCThaKoKp?F#yF zlN8U>#7&VJ2kksWn~fCJtk((_GvWcI4u~%Rod)mDh8*TVE~>p-s0w} zI4N7ttEsqk(uSiJPsHu3a3hG1_#&o-jf=Or*Ew?&uF`JAv;B`46B@FJ)uyEzK9~z1(_NiXN?bU&7v(Sni%wr!(1!1_J+qpNV+Z>~7Rkv`@ z3HRYF)K1K!lEZIea%v?U8SF0;kMh~NkQ{M;jm(95BkPk41;Qq4Q^NKxx`ii*RHx#e=G2uPr_tkV^dG(_ei_O72A%{i;Z@#5E(0xsblus zf>y}dWJ8K9Z7NxuR%Q%S<5?vv2@5}u;0Ku52G7zeT~OyJm9 z-Jqw-Mcwb%wlT{aV{p16b|ylJpn!n2x8*t9Lc%&KoH~mNOq`qLb|O-(1i6QvNy{3o z9#Vz9J!|l=TLV_(x{IgW9RB}Bf1Cto^!Jyk{(CM!>CJ8dmWN$=IVG80_YDyyQBJEc zm}Zo(Os>N3ay$ei0!wBc59zR8;UnOQ;Q@QFO3WDI#Ai21_{^&yWTU7uGohmyb=V<= zh^!SvbQ|2;1Mr6rxO@o3ljlKDV-i@5Gh5Cb}(DCPM-hCYL6b^x8GD0VXp?dgWF0+MNBzTir$8 z^h7D1tm8C~Dnsb1T6V0r?a+a}2ex6`9m?+!1sPvlL^9u{SKHh69PiZXxbg;o#K8pY z@&&FY?gmcC^|=#$<^{g=#{W=$%PN}x%WJ_aB`u10?X88p<~7xSa%O|I-tUwE?KAxq zQ&U;j+&+!fPO(R03MeSGU}uAPKJ}I# zQ8J9hYT2$Yk)k5r=P(JGss~KE*#+-f9^0UP0~*&;RJ7J3sUbkCIH}I$k9U>OZ&lEQ z>p!TU?EHeyT0Bd(D@qj4GDOsf?ugDRpb)uG+{k=!?9KP953!Z*j}$oy&5(U^|CXW< zp}#ZESkVaxtC)>5(A#AX$1o=|U)dQfH9poKh4Oz3+#yPldbPtTPb#Hu_Q+ox=AG1D z&$p5Z0Kweg1zydDlLfgM3};utTg^P<4PCgA3?HQJx_?}Nf z)4S!VSM;=LOOJV5n1(^4w)`#tc;Y#+!;#YCAp7zV!C?Hg6noRtqT&j->k+H)Gb)!} zg~!9tiGr3px}p}ibA?sl+1TOp^NbK92Q1ZWZ4MWv6X2vb<5;W#k!KuC#`n`tvM=vq zAS6fRk`8DeB>M~q*Dz3mt~TsO$V>l6X|q@oX%C8|u~)YSUCDPCBdY@lQ>ROQ^#+Sz z^M2q9@{4j3{N0|%E&?PoAa5>$lnRljK2Tsr@Ju+pEW}BH^i>K_v+l1!sHF z#W2(fi0R1Wg)M@Y(9AcXf& zuGZd_&)YyZkp$oRGLQ`4x`yjrx^JU~N*Ca^b6kK(`{XDeeFIC^L*1d5eVeFD=8e6~ z?<}?Vfq7*&s8o0^g+lNWAr>K6vVtl{up}I=Mqk;~k$J;ZY;19GN`>t*pC+L`ir*N9 zWze3!_&B`soyj$Towxenz3nE_2m*~Le#@s2-3E$rIGdaA3$liBx9|z??cmH!nJ_HK zbKoufM^(bnFISqVfTlo|u=6OuJhnq+MfFY?8WIraHoH_w8TXgYUk3Nf-S706VEPs= zEhke^ZM6{3XJT-^f|Iy#s+evjo3HS^Qk?tce4~(cNcX25#R(G7OUK8z?Yw5+tvn7n9B&WVb#G5^m^!S4@@<*ojAiiD-Nf`kl-((KDGv`ZsIBHmau=UoxXkC@W3 z7faziwUK9EvUI!{WVL+g*z&my@R~%jH8Y?b3CA56U&=l%j}X)Hb1Lacyg{{}4LMU> z_?&KSq0yr6PjkuEi$zG^a2Bx$7R_}Gt%QsTF)QC?f80Aw-$e%shuzbnFlWr%73nK+ z=Gp`idm|ZSx=Zh?%rlDI{u-w%eZaW~HpUv3%HHcJr>dK94s?vaN-olH^UQn`XO{b; zD_xUgo*(1pps3xsj2MbP6h=3F>8$g}U2wT@02`a z;gvJ^#t;kDHpxdEq2-~THP*2u4ypd^l3U1-Z3GR-wiGns(q`kb0cmleY4sW6QPzXo z1bF+#9<$-ePiD+sc|d0NfUIP=(g8~iTMN~QTs14M;Z`u`7m|6(@?v+ooua@)8*zyd z_Yce9qv)nxIe`s6-MVwbQB=&t;B_#z?q;_aW1bdh8*CiKvZSx=WE67CyRf99lCc4i z^)Jo|%>MMOS#>cWOk=t_Q(?^k=bnQo&RG@v<)?M5Z$iCSKlH1(%X{--sGH+_y3g4Z z`PR;o<%c$@=*y$7E$FEzNI7kTssXxfcN#o_Qoe5;DBVJ>!5-w9dm->gs~bB8 zQWk38A``M~0(Od`Yc{fPj{>Tp$0PXHk5ZyzJXW#;DQ(qmHj4fVq6ztU_tYx(hG)+e3(AWlj>{MzR(Ts)bCm?J?rPBWaKI4QM literal 0 HcmV?d00001 diff --git a/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts similarity index 100% rename from translation_pt_PT.ts rename to src/res/translation/translation_pt_PT.ts diff --git a/src/resources.qrc b/src/resources.qrc index 4ecb3e69..6b0fc83f 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -5,6 +5,9 @@ res/translation/translation_fr_FR.qm + + res/translation/translation_pt_PT.qm + res/CLEDDisabledSmall.png res/CLEDGreenArrow.png diff --git a/translation_pt_PT.qm b/translation_pt_PT.qm deleted file mode 100644 index 3024b81eeced87e886e4388ad0f30e36bb95a53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcma)(ze@u#6vyBBqgt^Y9EwAc6XC`~U3F>iLx@wZi4?nHxV3# z(%D7CRS+jfCx=erqPY4^y_O` z7KU6ZgUThSK?NX-Oz{L;27-|UB!K>f&HP}?F_S{K#!++lv1zkT5q3cu(Hv Date: Wed, 6 May 2020 19:33:27 +0200 Subject: [PATCH 044/125] added tr() for some strings in the code, added spanish translation file --- Jamulus.pro | 3 +- src/aboutdlgbase.ui | 12 +- src/audiomixerboard.cpp | 24 +- src/clientdlg.cpp | 20 +- src/clientdlg.h | 4 - src/clientsettingsdlg.cpp | 30 +- src/res/translation/translation_de_DE.ts | 422 ++++- src/res/translation/translation_es_ES.qm | Bin 0 -> 23 bytes src/res/translation/translation_es_ES.ts | 1901 ++++++++++++++++++++++ src/res/translation/translation_fr_FR.qm | Bin 2778 -> 3085 bytes src/res/translation/translation_fr_FR.ts | 432 ++++- src/res/translation/translation_pt_PT.qm | Bin 90147 -> 90475 bytes src/res/translation/translation_pt_PT.ts | 424 ++++- src/resources.qrc | 3 + src/serverdlg.cpp | 11 +- src/util.cpp | 33 +- src/util.h | 16 +- 17 files changed, 3064 insertions(+), 271 deletions(-) create mode 100644 src/res/translation/translation_es_ES.qm create mode 100644 src/res/translation/translation_es_ES.ts diff --git a/Jamulus.pro b/Jamulus.pro index 2b1d668f..739fb72b 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -16,7 +16,8 @@ QT += widgets \ TRANSLATIONS = src/res/translation/translation_de_DE.ts \ src/res/translation/translation_fr_FR.ts \ - src/res/translation/translation_pt_PT.ts + src/res/translation/translation_pt_PT.ts \ + src/res/translation/translation_es_ES.ts INCLUDEPATH += src diff --git a/src/aboutdlgbase.ui b/src/aboutdlgbase.ui index 870a1ebf..98e1e39b 100755 --- a/src/aboutdlgbase.ui +++ b/src/aboutdlgbase.ui @@ -122,20 +122,10 @@ 0 - - - - Author: Volker Fischer - - - false - - - - Copyright (C) 2005-2020 + Copyright (C) 2005-2020 Volker Fischer and others false diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 4bc949f6..3dccb3fe 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -41,11 +41,11 @@ CChannelFader::CChannelFader ( QWidget* pNW, pFader = new QSlider ( Qt::Vertical, pLevelsBox ); pMuteSoloBox = new QWidget ( pFrame ); - pcbMute = new QCheckBox ( "Mute", pMuteSoloBox ); - pcbSolo = new QCheckBox ( "Solo", pMuteSoloBox ); + pcbMute = new QCheckBox ( tr ( "Mute" ), pMuteSoloBox ); + pcbSolo = new QCheckBox ( tr ( "Solo" ), pMuteSoloBox ); pLabelInstBox = new QGroupBox ( pFrame ); - plblLabel = new QLabel ( "", pFrame ); + plblLabel = new QLabel ( "", pFrame ); plblInstrument = new QLabel ( pFrame ); plblCountryFlag = new QLabel ( pFrame ); @@ -439,13 +439,13 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) // alias/name if ( !strReceivedName.isEmpty() ) { - strToolTip += "

Alias/Name

" + strReceivedName; + strToolTip += "

" + tr ( "Alias/Name" ) + "

" + strReceivedName; } // instrument if ( !CInstPictures::IsNotUsedInstrument ( iTTInstrument ) ) { - strToolTip += "

Instrument

" + + strToolTip += "

" + tr ( "Instrument" ) + "

" + CInstPictures::GetName ( iTTInstrument ); } @@ -453,7 +453,7 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) if ( ( eTTCountry != QLocale::AnyCountry ) || ( !cChanInfo.strCity.isEmpty() ) ) { - strToolTip += "

Location

"; + strToolTip += "

" + tr ( "Location" ) + "

"; if ( !cChanInfo.strCity.isEmpty() ) { @@ -475,15 +475,15 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) switch ( cChanInfo.eSkillLevel ) { case SL_BEGINNER: - strToolTip += "

Skill Level

Beginner"; + strToolTip += "

" + tr ( "Skill Level" ) + "

" + tr ( "Beginner" ); break; case SL_INTERMEDIATE: - strToolTip += "

Skill Level

Intermediate"; + strToolTip += "

" + tr ( "Skill Level" ) + "

" + tr ( "Intermediate" ); break; case SL_PROFESSIONAL: - strToolTip += "

Skill Level

Expert"; + strToolTip += "

" + tr ( "Skill Level" ) + "

" + tr ( "Expert" ); break; case SL_NOT_SET: @@ -494,7 +494,7 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) // if no information is given, leave the tool tip empty, otherwise add header if ( !strToolTip.isEmpty() ) { - strToolTip.prepend ( "

Musician Profile

" ); + strToolTip.prepend ( "

" + tr ( "Musician Profile" ) + "

" ); } plblCountryFlag->setToolTip ( strToolTip ); @@ -704,7 +704,7 @@ void CAudioMixerBoard::SetServerName ( const QString& strNewServerName ) if ( strServerName.isEmpty() ) { // no connection or connection was reset: show default title - pGroupBox->setTitle ( "Server" ); + pGroupBox->setTitle ( tr ( "Server" ) ); } else { @@ -713,7 +713,7 @@ void CAudioMixerBoard::SetServerName ( const QString& strNewServerName ) // list was received, the connection was successful and the title is updated // with the correct server name. Make sure to choose a "try to connect" title // which is most striking (we use filled blocks and upper case letters). - pGroupBox->setTitle ( u8"\u2588\u2588\u2588\u2588\u2588 T R Y I N G T O C O N N E C T \u2588\u2588\u2588\u2588\u2588" ); + pGroupBox->setTitle ( u8"\u2588\u2588\u2588\u2588\u2588 " + tr ( "T R Y I N G T O C O N N E C T" ) + u8" \u2588\u2588\u2588\u2588\u2588" ); } } diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index e1dc415c..a68aad99 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -200,7 +200,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, OnTimerStatus(); // init connection button text - butConnect->setText ( CON_BUT_CONNECTTEXT ); + butConnect->setText ( tr ( "C&onnect" ) ); // init input level meter bars lbrInputLevelL->setValue ( 0 ); @@ -252,7 +252,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, // View menu -------------------------------------------------------------- - pViewMenu = new QMenu ( "&View", this ); + pViewMenu = new QMenu ( tr ( "&View" ), this ); pViewMenu->addAction ( tr ( "&Connection Setup..." ), this, SLOT ( OnOpenConnectionSetupDialog() ) ); @@ -323,7 +323,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, { // default icon and name for no flag selected CurFlagIcon.addFile ( ":/png/flags/res/flags/flagnone.png" ); - sCurCountryName = "None"; + sCurCountryName = tr ( "None" ); } else { @@ -603,20 +603,20 @@ void CClientDlg::UpdateAudioFaderSlider() // attenuated if ( iCurAudInFader == AUD_FADER_IN_MIDDLE ) { - lblAudioPanValue->setText ( "Center" ); + lblAudioPanValue->setText ( tr ( "Center" ) ); } else { if ( iCurAudInFader > AUD_FADER_IN_MIDDLE ) { // attenuation on right channel - lblAudioPanValue->setText ( "R -" + + lblAudioPanValue->setText ( tr ( "R" ) + " -" + QString().setNum ( iCurAudInFader - AUD_FADER_IN_MIDDLE ) ); } else { // attenuation on left channel - lblAudioPanValue->setText ( "L -" + + lblAudioPanValue->setText ( tr ( "L" ) + " -" + QString().setNum ( AUD_FADER_IN_MIDDLE - iCurAudInFader ) ); } } @@ -815,12 +815,12 @@ void CClientDlg::SetMyWindowTitle ( const int iNumClients ) { if ( iNumClients == 1 ) { - setWindowTitle ( QString ( pClient->strClientName ) + " (1 user)" ); + setWindowTitle ( QString ( pClient->strClientName ) + " (1 " + tr ( "user" ) + ")" ); } else { setWindowTitle ( QString ( pClient->strClientName ) + - QString ( " (%1 users)" ).arg ( iNumClients ) ); + QString ( " (%1 " + tr ( "users" ) + ")" ).arg ( iNumClients ) ); } } @@ -1057,7 +1057,7 @@ void CClientDlg::Connect ( const QString& strSelectedAddress, } // change connect button text to "disconnect" - butConnect->setText ( CON_BUT_DISCONNECTTEXT ); + butConnect->setText ( tr ( "D&isconnect" ) ); // set server name in audio mixer group box title MainMixerBoard->SetServerName ( strMixerBoardLabel ); @@ -1081,7 +1081,7 @@ void CClientDlg::Disconnect() } // change connect button text to "connect" - butConnect->setText ( CON_BUT_CONNECTTEXT ); + butConnect->setText ( tr ( "C&onnect" ) ); // reset server name in audio mixer group box title MainMixerBoard->SetServerName ( "" ); diff --git a/src/clientdlg.h b/src/clientdlg.h index ddd284fd..b87a925f 100755 --- a/src/clientdlg.h +++ b/src/clientdlg.h @@ -51,10 +51,6 @@ /* Definitions ****************************************************************/ -// text strings for connection button for connect and disconnect -#define CON_BUT_CONNECTTEXT "C&onnect" -#define CON_BUT_DISCONNECTTEXT "D&isconnect" - // update time for GUI controls #define LEVELMETER_UPDATE_TIME_MS 100 // ms #define BUFFER_LED_UPDATE_TIME_MS 300 // ms diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index c3263123..31cda175 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -285,7 +285,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // init driver button #ifdef _WIN32 - butDriverSetup->setText ( "ASIO Setup" ); + butDriverSetup->setText ( tr ( "ASIO Setup" ) ); #else // no use for this button for MacOS/Linux right now -> hide it butDriverSetup->hide(); @@ -332,23 +332,23 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // "Audio Channels" combo box cbxAudioChannels->clear(); - cbxAudioChannels->addItem ( "Mono" ); // CC_MONO - cbxAudioChannels->addItem ( "Mono-in/Stereo-out" ); // CC_MONO_IN_STEREO_OUT - cbxAudioChannels->addItem ( "Stereo" ); // CC_STEREO + cbxAudioChannels->addItem ( tr ( "Mono" ) ); // CC_MONO + cbxAudioChannels->addItem ( tr ( "Mono-in/Stereo-out" ) ); // CC_MONO_IN_STEREO_OUT + cbxAudioChannels->addItem ( tr ( "Stereo" ) ); // CC_STEREO cbxAudioChannels->setCurrentIndex ( static_cast ( pClient->GetAudioChannels() ) ); // "Audio Quality" combo box cbxAudioQuality->clear(); - cbxAudioQuality->addItem ( "Low" ); // AQ_LOW - cbxAudioQuality->addItem ( "Normal" ); // AQ_NORMAL - cbxAudioQuality->addItem ( "High" ); // AQ_HIGH + cbxAudioQuality->addItem ( tr ( "Low" ) ); // AQ_LOW + cbxAudioQuality->addItem ( tr ( "Normal" ) ); // AQ_NORMAL + cbxAudioQuality->addItem ( tr ( "High" ) ); // AQ_HIGH cbxAudioQuality->setCurrentIndex ( static_cast ( pClient->GetAudioQuality() ) ); // central server address type combo box cbxCentServAddrType->clear(); - cbxCentServAddrType->addItem ( "Manual" ); // AT_MANUAL - cbxCentServAddrType->addItem ( "Default" ); // AT_DEFAULT - cbxCentServAddrType->addItem ( "Default (North America)" ); // AT_NORTH_AMERICA + cbxCentServAddrType->addItem ( tr ( "Manual" ) ); // AT_MANUAL + cbxCentServAddrType->addItem ( tr ( "Default" ) ); // AT_DEFAULT + cbxCentServAddrType->addItem ( tr ( "Default (North America)" ) ); // AT_NORTH_AMERICA cbxCentServAddrType->setCurrentIndex ( static_cast ( pClient->GetCentralServerAddressType() ) ); UpdateCentralServerDependency(); @@ -454,11 +454,11 @@ void CClientSettingsDlg::UpdateJitterBufferFrame() // update slider value and text const int iCurNumNetBuf = pClient->GetSockBufNumFrames(); sldNetBuf->setValue ( iCurNumNetBuf ); - lblNetBuf->setText ( "Size: " + QString().setNum ( iCurNumNetBuf ) ); + lblNetBuf->setText ( tr ( "Size: " ) + QString().setNum ( iCurNumNetBuf ) ); const int iCurNumNetBufServer = pClient->GetServerSockBufNumFrames(); sldNetBufServer->setValue ( iCurNumNetBufServer ); - lblNetBufServer->setText ( "Size: " + QString().setNum ( iCurNumNetBufServer ) ); + lblNetBufServer->setText ( tr ( "Size: " ) + QString().setNum ( iCurNumNetBufServer ) ); // if auto setting is enabled, disable slider control const bool bIsAutoSockBufSize = pClient->GetDoAutoSockBufSize(); @@ -515,12 +515,12 @@ void CClientSettingsDlg::UpdateSoundCardFrame() if ( bPreferredChecked || bDefaultChecked || bSafeChecked ) { // default title text - grbSoundCrdBufDelay->setTitle ( "Buffer Delay" ); + grbSoundCrdBufDelay->setTitle ( tr ( "Buffer Delay" ) ); } else { // special title text with buffer size information added - grbSoundCrdBufDelay->setTitle ( "Buffer Delay: " + + grbSoundCrdBufDelay->setTitle ( tr ( "Buffer Delay: " ) + GenSndCrdBufferDelayString ( iCurActualBufSize ) ); } } @@ -633,7 +633,7 @@ void CClientSettingsDlg::OnSoundcardActivated ( int iSndDevIdx ) QString ( tr ( "The selected audio device could not be used " "because of the following error: " ) ) + strError + QString ( tr ( " The previous driver will be selected." ) ), - "Ok", nullptr ); + tr ( "Ok" ), nullptr ); // recover old selection cbxSoundcard->setCurrentIndex ( pClient->GetSndCrdDev() ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 4b1d4655..7545870a 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -63,16 +63,11 @@ - Author: Volker Fischer + Copyright (C) 2005-2020 Volker Fischer and others - - Copyright (C) 2005-2020 - - - - + &OK @@ -90,6 +85,19 @@ + + CAudioMixerBoard + + + Server + + + + + T R Y I N G T O C O N N E C T + + + CChannelFader @@ -163,11 +171,55 @@ + + Alias/Name + + + + + Instrument + + + + + Location + + + + + + + Skill Level + + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + + Musician Profile + + + + Mute + Solo @@ -332,6 +384,17 @@ Buffers status LED indicator + + + + C&onnect + + + + + &View + + &Connection Setup... @@ -362,6 +425,41 @@ E&xit + + + None + + + + + Center + + + + + R + + + + + L + + + + + user + + + + + users + + + + + D&isconnect + + CClientDlgBase @@ -663,6 +761,72 @@ software. + + + ASIO Setup + + + + + Mono + + + + + Mono-in/Stereo-out + + + + + Stereo + + + + + Low + + + + + Normal + + + + + High + + + + + Manual + + + + + Default + + + + + Default (North America) + + + + + + Size: + + + + + Buffer Delay + + + + + Buffer Delay: + + The selected audio device could not be used because of the following error: @@ -673,6 +837,11 @@ The previous driver will be selected. + + + Ok + + CClientSettingsDlgBase @@ -946,29 +1115,44 @@ CHelpMenu - - + + Getting &Started... - + Software &Manual... - + What's &This - + &About... Über... CLicenceDlg + + + I &agree to the above licence terms + + + + + Accept + + + + + Decline + + By connecting to this server and agreeing to this notice, you agree to the following: @@ -1058,203 +1242,255 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a - + 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. - + Alias or name edit box - + Instrument picture button - + Country flag button - + City edit box - + Skill level combo box - + + + None - + + Musician Profile + + + + + Alias/Name + + + + + Instrument + + + + + Country + + + + + City + + + + + Skill + + + + + &Close + + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + Drum Set - + Djembe - + Electric Guitar - + Acoustic Guitar - + Bass Guitar - + Keyboard - + Synthesizer - + Grand Piano - + Accordion - + Vocal - + Microphone - + Harmonica - + Trumpet - + Trombone - + French Horn - + Tuba - + Saxophone - + Clarinet - + Flute - + Violin - + Cello - + Double Bass - + Recorder - + Streamer - + Listener - + Guitar+Vocal - + Keyboard+Vocal - + Bodhran - + Bassoon - + Oboe - + Harp - + Viola @@ -1337,48 +1573,108 @@ What you set here will appear at your fader on the mixer board when you are conn - + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. - + Country where the server is located combo box - - + + E&xit - + &Hide - - - + + + server - + &Open - + server - + + Manual + + + + + Default + + + + + Default (North America) + + + + Server + + + &Window + + + + + Unregistered + + + + + Bad address + + + + + Registration requested + + + + + Registration failed + + + + + Check server version + + + + + Registered + + + + + Central Server full + + + + + Unknown value + + CServerDlgBase diff --git a/src/res/translation/translation_es_ES.qm b/src/res/translation/translation_es_ES.qm new file mode 100644 index 0000000000000000000000000000000000000000..9dad8dffceb9623e88f8b96d9cd0caf25574c6fa GIT binary patch literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ literal 0 HcmV?d00001 diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts new file mode 100644 index 00000000..7c0fc889 --- /dev/null +++ b/src/res/translation/translation_es_ES.ts @@ -0,0 +1,1901 @@ + + + + + CAboutDlg + + + The + + + + + software enables musicians to perform real-time jam sessions over the internet. There is a + + + + + server which collects the audio data from each + + + + + client, mixes the audio data and sends the mix back to each client. + + + + + uses the following libraries, resources or code snippets: + + + + + About + + + + + , Version + + + + + Internet Jam Session Software + + + + + Under the GNU General Public License (GPL) + + + + + CAboutDlgBase + + + About + + + + + TextLabelVersion + + + + + Copyright (C) 2005-2020 Volker Fischer and others + + + + + &OK + + + + + CAnalyzerConsole + + + Analyzer Console + + + + + Error Rate of Each Buffer Size + + + + + CAudioMixerBoard + + + Server + + + + + T R Y I N G T O C O N N E C T + + + + + CChannelFader + + + <b>Channel Level:</b> 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. + + + + + Input level of the current audio channel at the server + + + + + <b>Mixer Fader:</b> 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. + + + + + Local mix level setting of the current audio channel at the server + + + + + <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. + + + + + Mute button + + + + + <b>Solo:</b> 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. + + + + + Solo button + + + + + <b>Fader Tag:</b> 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. + + + + + Mixer channel instrument picture + + + + + Mixer channel label (fader tag) + + + + + Mixer channel country flag + + + + + MUTE + + + + + SOLO + + + + + Alias/Name + + + + + Instrument + + + + + Location + + + + + + + Skill Level + + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + + Musician Profile + + + + + + Mute + + + + + + Solo + + + + + CChatDlg + + + <b>Chat Window:</b> The chat window shows a history of all chat messages. + + + + + Chat history + + + + + <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. + + + + + New chat text edit box + + + + + CChatDlgBase + + + Chat + + + + + Cl&ear + + + + + &Close + + + + + CClientDlg + + + <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. + + + + + If the + + + + + 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.<br>For a proper usage of the + + + + + software, you should not hear your singing/instrument in 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 (<b>not</b> the Recording mixer!). + + + + + Input level meter + + + + + Simulates an analog LED level meter. + + + + + <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. + + + + + Connect and disconnect toggle button + + + + + 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 + + + + + + software. + + + + + <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. + + + + + Local audio input fader (left/right) + + + + + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. + + + + + Reverberation effect level setting + + + + + <b>Reverberation Channel Selection:</b> 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. + + + + + Left channel selection for reverberation + + + + + Right channel selection for reverberation + + + + + <b>Delay Status LED:</b> 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. + + + + + If this LED indicator turns red, you will not have much fun using the + + + + + Delay status LED indicator + + + + + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> + + + + + Buffers status LED indicator + + + + + + C&onnect + + + + + &View + + + + + &Connection Setup... + + + + + My &Profile... + + + + + C&hat... + + + + + &Settings... + + + + + &Analyzer Console... + + + + + E&xit + + + + + None + + + + + Center + + + + + R + + + + + L + + + + + user + + + + + users + + + + + D&isconnect + + + + + CClientDlgBase + + + Delay + + + + + Buffers + + + + + Input + + + + + L + + + + + R + + + + + Settings + + + + + Chat + + + + + Mute Myself + + + + + C&onnect + + + + + Pan + + + + + Center + + + + + Reverb + + + + + Left + + + + + Right + + + + + CClientSettingsDlg + + + <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). + + + + + In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light + + + + + Local jitter buffer slider control + + + + + Server jitter buffer slider control + + + + + Auto jitter buffer switch + + + + + Jitter buffer status LED indicator + + + + + <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using + + + + + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + + + + + Sound card device selector combo box + + + + + In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + + + + + <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each + + + + + input/output channel (Left and Right channel) a different actual sound card channel can be selected. + + + + + Left input channel selection combo box + + + + + Right input channel selection combo box + + + + + Left output channel selection combo box + + + + + Right output channel selection combo box + + + + + <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than + + + + + samples. The smaller the network buffers, the smaller the audio latency. But at the same time the network load increases and the probability of audio dropouts also increases. + + + + + Enable small network buffers check box + + + + + <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the + + + + + software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the + + + + + 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + + + + + software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. + + + + + If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the + + + + + 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. + + + + + 128 samples setting radio button + + + + + 256 samples setting radio button + + + + + 512 samples setting radio button + + + + + ASIO setup push button + + + + + <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. + + + + + Fancy skin check box + + + + + <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. + + + + + Display channel levels check box + + + + + <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. + + + + + Audio channels combo box + + + + + <b>Audio Quality:</b> 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. + + + + + Audio quality combo box + + + + + <b>New Client Level:</b> 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. + + + + + New client level edit box + + + + + <b>Central Server Address:</b> 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. + + + + + Default central server type combo box + + + + + Central server address line edit + + + + + <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). + + + + + If this LED indicator turns red, you will not have much fun using the + + + + + software. + + + + + ASIO Setup + + + + + Mono + + + + + Mono-in/Stereo-out + + + + + Stereo + + + + + Low + + + + + Normal + + + + + High + + + + + Manual + + + + + Default + + + + + Default (North America) + + + + + + Size: + + + + + Buffer Delay + + + + + Buffer Delay: + + + + + The selected audio device could not be used because of the following error: + + + + + The previous driver will be selected. + + + + + Ok + + + + + CClientSettingsDlgBase + + + Settings + + + + + Soundcard + + + + + Device + + + + + Input Channel Mapping + + + + + + L + + + + + + R + + + + + Output Channel Mapping + + + + + Enable Small Network Buffers + + + + + Buffer Delay + + + + + (preferred) + + + + + (default) + + + + + (safe) + + + + + Driver Setup + + + + + Jitter Buffer + + + + + Auto + + + + + Local + + + + + Server + + + + + + Size + + + + + Misc + + + + + Audio Channels + + + + + Audio Quality + + + + + New Client Level + + + + + % + + + + + Fancy Skin + + + + + Display Channel Levels + + + + + Central Server Address: + + + + + Audio Stream Rate + + + + + + + val + + + + + Ping Time + + + + + Overall Delay + + + + + CConnectDlg + + + <b>Server List:</b> 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.<br>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. + + + + + Server list view + + + + + <b>Server Address:</b> The IP address or URL of the server running the + + + + + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: + + + + + </i>. A list of the most recent used server IP addresses or URLs is available for selection. + + + + + Server address edit box + + + + + Holds the current server IP address or URL. It also stores old URLs in the combo box list. + + + + + <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. + + + + + Filter edit box + + + + + <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. + + + + + Show all musicians check box + + + + + CConnectDlgBase + + + Connection Setup + + + + + Filter + + + + + Show All Musicians + + + + + Server Name + + + + + Ping Time + + + + + Musicians + + + + + Location + + + + + Server Name/Address + + + + + C&ancel + + + + + &Connect + + + + + CHelpMenu + + + + Getting &Started... + + + + + Software &Manual... + + + + + What's &This + + + + + &About... + + + + + CLicenceDlg + + + I &agree to the above licence terms + + + + + Accept + + + + + Decline + + + + + By connecting to this server and agreeing to this notice, you agree to the following: + + + + + 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): + + + + + You are free to: + + + + + Share + + + + + copy and redistribute the material in any medium or format + + + + + Adapt + + + + + remix, transform, and build upon the material + + + + + The licensor cannot revoke these freedoms as long as you follow the license terms. + + + + + Under the following terms: + + + + + 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. + + + + + NonCommercial + + + + + You may not use the material for commercial purposes. + + + + + ShareAlike + + + + + If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. + + + + + No additional restrictions + + + + + You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. + + + + + CMusProfDlg + + + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. +What you set here will appear at your fader on the mixer board when you are connected to a + + + + + 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. + + + + + Alias or name edit box + + + + + Instrument picture button + + + + + Country flag button + + + + + City edit box + + + + + Skill level combo box + + + + + + + None + + + + + Musician Profile + + + + + Alias/Name + + + + + Instrument + + + + + Country + + + + + City + + + + + Skill + + + + + &Close + + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + + Drum Set + + + + + Djembe + + + + + Electric Guitar + + + + + Acoustic Guitar + + + + + Bass Guitar + + + + + Keyboard + + + + + Synthesizer + + + + + Grand Piano + + + + + Accordion + + + + + Vocal + + + + + Microphone + + + + + Harmonica + + + + + Trumpet + + + + + Trombone + + + + + French Horn + + + + + Tuba + + + + + Saxophone + + + + + Clarinet + + + + + Flute + + + + + Violin + + + + + Cello + + + + + Double Bass + + + + + Recorder + + + + + Streamer + + + + + Listener + + + + + Guitar+Vocal + + + + + Keyboard+Vocal + + + + + Bodhran + + + + + Bassoon + + + + + Oboe + + + + + Harp + + + + + Viola + + + + + CServerDlg + + + <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. + + + + + Connected clients list view + + + + + <b>Start Minimized on Operating System Start:</b> 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. + + + + + <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + + + + + <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all + + + + + users can see the server in the connect dialog server list and connect to it. The registering of the server is renewed periodically to make sure that all servers in the connect dialog server list are actually available. + + + + + <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. + + + + + <b>Central Server Address:</b> 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. + + + + + Default central server type combo box + + + + + Central server address line edit + + + + + <b>Server Name:</b> 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. + + + + + Server name line edit + + + + + <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. + + + + + City where the server is located line edit + + + + + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. + + + + + Country where the server is located combo box + + + + + + E&xit + + + + + &Hide + + + + + + + server + + + + + &Open + + + + + server + + + + + Manual + + + + + Default + + + + + Default (North America) + + + + + Server + + + + + &Window + + + + + Unregistered + + + + + Bad address + + + + + Registration requested + + + + + Registration failed + + + + + Check server version + + + + + Registered + + + + + Central Server full + + + + + Unknown value + + + + + CServerDlgBase + + + Client IP:Port + + + + + + Name + + + + + Jitter Buffer Size + + + + + Start Minimized on Windows Start + + + + + Show Creative Commons BY-NC-SA 4.0 Licence Dialog + + + + + Make My Server Public (Register My Server in the Server List) + + + + + STATUS + + + + + Central Server Address: + + + + + My Server Info + + + + + Location: City + + + + + Location: Country + + + + + TextLabelNameVersion + + + + + CSound + + + The Jack server is not running. This software requires a Jack server to run. Normally if the Jack server is not running this software will automatically start the Jack server. It seems that this auto start has not worked. Try to start the Jack server manually. + + + + + The Jack server sample rate is different from the required one. The required sample rate is: <b> + + + + + Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> + + + + + </b> to achieve a low delay. + + + + + + The Jack port registering failed. + + + + + Cannot activate the Jack client. + + + + + The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. + + + + + 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. + + + + + 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 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. + + + + + The audio device does not support the required sample rate. The required sample rate is: + + + + + The audio device does not support to set 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. + + + + + <b>No ASIO audio device (driver) found.</b><br><br>The + + + + + software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. + + + + + CSoundBase + + + Invalid device selection. + + + + + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> + + + + + </b><br><br>Please restart the software. + + + + + <b>No usable + + + + + audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> + + + + + <br/>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_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index 9cfed230588652c29979701de186681394c3b46f..94938b73fd62b36a0852f2ef27a85e6ea2c17698 100644 GIT binary patch delta 478 zcmca5+AC3Svm-^~)cZM8&nn97PguD3t`h?TqX7d0gAW4(nk1ecnCCJ` zwoCx(eZ$~BF`id3gdrgO2vAuYL&V=N3=ABbm{yrh1scNzp}9IHw(8Zh{$QCCbqHwr zD^``DFrX@7)}Av>K)RN7&K#gP%S8yy*~q!)%w?duT&`447NDh0JhK%KFfcG};n~et z3{?LNLUSJAP4x%b#=0Fsvn}QOzGfYeUyupZw1*k!yehGd2uhD?T3hRsThM_DF| zb14f7I6Ic6Waj&3R-_g=7__Y!7+CTd zSmw1bFtA>P&}_dMShcSJ)$L(mUC7G7!09kCS6bNh z=1g3x7teN#RV644DEpqZ=S&k&Hj;JDoI^mZjO=TEH~>|dazqM$0$O#EbI+N}3=C|Z zT&bQcK>2E(*@_1k7?`&3>}D(m>N~`n>JK!Xthnsq>$DHEvZ;AStzt1P}c42}$? z3?&SyK(dHIfx!xh!x-`zau~9KVjvMWhD?THh71so1L#KvHXs&rEG@~%FS1ey%g@P9 zEmCmHEKbfyEt-6hRXjkC!5OH(fT0qoJCh+DsIvrUiUv?r6G$5|7yzLugD#i_JSuFfi3MGB7d#89MnIxANp_wyw>)*>^BaKF?)8Ih4DWy#weH HCT2zeZU + Copyright (C) 2005-2020 Volker Fischer and others + + + Author: Volker Fischer - Auteur : Volker Fisher + Auteur : Volker Fisher - Copyright (C) 2005-2020 - Copyright (C) 2005-2020 + Copyright (C) 2005-2020 - + &OK &OK @@ -90,6 +93,19 @@ + + CAudioMixerBoard + + + Server + Serveur + + + + T R Y I N G T O C O N N E C T + + + CChannelFader @@ -163,11 +179,55 @@ + + Alias/Name + + + + + Instrument + + + + + Location + + + + + + + Skill Level + + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + + Musician Profile + + + + Mute + Solo @@ -332,6 +392,17 @@ Buffers status LED indicator + + + + C&onnect + Se c&onnecter + + + + &View + + &Connection Setup... @@ -362,6 +433,41 @@ E&xit + + + None + + + + + Center + Centre + + + + R + D + + + + L + G + + + + user + + + + + users + + + + + D&isconnect + + CClientDlgBase @@ -398,7 +504,7 @@ Chat - Tchate> + Tchate @@ -663,6 +769,72 @@ software. + + + ASIO Setup + + + + + Mono + + + + + Mono-in/Stereo-out + + + + + Stereo + + + + + Low + + + + + Normal + + + + + High + + + + + Manual + + + + + Default + + + + + Default (North America) + + + + + + Size: + + + + + Buffer Delay + + + + + Buffer Delay: + + The selected audio device could not be used because of the following error: @@ -673,13 +845,18 @@ The previous driver will be selected. + + + Ok + + CClientSettingsDlgBase Settings - + Paramètres @@ -700,13 +877,13 @@ L - + G R - + D @@ -946,29 +1123,44 @@ CHelpMenu - - + + Getting &Started... - + Software &Manual... - + What's &This - + &About... CLicenceDlg + + + I &agree to the above licence terms + + + + + Accept + + + + + Decline + + By connecting to this server and agreeing to this notice, you agree to the following: @@ -1058,203 +1250,255 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a - + 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. - + Alias or name edit box - + Instrument picture button - + Country flag button - + City edit box - + Skill level combo box - + + + None - + + Musician Profile + + + + + Alias/Name + + + + + Instrument + + + + + Country + + + + + City + + + + + Skill + + + + + &Close + &Fermer + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + Drum Set - + Djembe - + Electric Guitar - + Acoustic Guitar - + Bass Guitar - + Keyboard - + Synthesizer - + Grand Piano - + Accordion - + Vocal - + Microphone - + Harmonica - + Trumpet - + Trombone - + French Horn - + Tuba - + Saxophone - + Clarinet - + Flute - + Violin - + Cello - + Double Bass - + Recorder - + Streamer - + Listener - + Guitar+Vocal - + Keyboard+Vocal - + Bodhran - + Bassoon - + Oboe - + Harp - + Viola @@ -1337,48 +1581,108 @@ What you set here will appear at your fader on the mixer board when you are conn - + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. - + Country where the server is located combo box - - + + E&xit - + &Hide - - - + + + server - + &Open - + server - + + Manual + + + + + Default + + + + + Default (North America) + + + + Server + + + &Window + + + + + Unregistered + + + + + Bad address + + + + + Registration requested + + + + + Registration failed + + + + + Check server version + + + + + Registered + + + + + Central Server full + + + + + Unknown value + + CServerDlgBase diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm index 93b4207ca59ec513fa7a160aaedc1ce4b998bd16..8dadf0652f91da241f6cc219ddfe758dbf80eeff 100644 GIT binary patch delta 2715 zcmXX|2~-qU7QMf^s=KSJyBbjpQA9ydQB+jaQE@>z~I6vL0p0+E&)-NjN=A^$KX8asdM_=`oI7G@4fr(d%uoc652|I zeSM7O033lU(S&}0f0P-6J~LxwD4_uea5H1@|FQZzV8j$a2m?a41Hl%+wr#-m+u&19 z0oRhiXC(mrADhu|4Se%HFy0cv@I;_@CWH~U0Ar8|!VD8oSpvapJebpR2!6)^s|*Ms z9%NY8gG@L?w&sHgHy|YFfxb!zhXgX{2O)bjja?z+uLXEocX0=p>MC?&P5@WW}&?u^wcs|0n0&HjsA9?f{*n~O!%Cgg7V7b>jx zW<1-UPwyHJRJ)n6A>GJlE-VGSJL9ih;rkUDNZ!+ z%9IC8og|(M%43(PIXxPn%uc)nTn<#`Owv+Lo0Pfhrh!eZRhEqN0op>9*Y5dKe~4C= zuNy^u<*M>&vK3WZA7#s+I;#JFcPl%xD}fqO#geIE%p0H@;5CmJkW_ZtXoJjD6S_8$ zx)W4x8)-h+QDwOLHxjF>>XR;t$aSh}eI#|Vyr3Rr_BE>X?`KftS*raHDX_;|RAxr1 zR6my4QtH;LS_ayZohz!&+1rg^{qoh?`$YZJ5Vgg*X~2Uh^{^5dcvGq#6L=Pw+o>L# zPY1nPs}B8`v{0O({>q0$TGg!HolOT~lG=2Zw9&Fm-SUb=y!W2EtM5S|DonH(;}15r zR&-eVcc9Tu93DtatlJ|_>qqncw&EOS>_wFSD*DD=pq98t40L-0W}PgC%27a!n;6Er zfkRWog`GqxR*6f}+Nslph)dd=Q9khL=zDwdXxb)%F?(weQ)0LNfy zqcxRd_A@E@t7tIgZ_=KY1Te=2>01{{UB8D?=A3Vd$yB3s;9NJDyQh@BcP3H#my|a} z2Ai2H6{@np`UXkmc@=a$?~^+CKgr`Zsq_9?>K9*V`;Md>+gED`d`S*F9M;i;v95?NAzN)% zBt^s*>TG@zs38s2O=!yp^Xb(2CZ|#rIO#%92GOOKr(5#+0ibf$#m=K!)aY$#elaZ6 zoitER=LhIc4~+urBj`$Aj-tq{%@{SL2ie#Yx_dJR0ZYHuJ#8BW=5|!~@)KLS8`|am z%f6XpEObZD^>E!K2-nQ zEqUcEis;E%dG+ybGCWI8+f+_<-Pwc8(OEWGQ7%=z<-?PU!E8$9%0P-N?v(udzsM*rc>UM;E|iKA{r4ZyI^T5t4@I+q zqF(x&smFnb`}Mc1h}tH9ef>3mV06<8u+W_aIpRNs0%waU%#?n6$VV2l+&_<5v1aay zO|fw^*DQ{UVG4jnnHJ|*6>RU-Pityz9a)e#AZfg5d$@xseU9E#7;bNR5~?rI1-0;| zZz3!|Ocu0A8rTsF+bo+v}X<<>HjQA03 lbI+i=%-YoYyM-w-#iD>KTH|ZVadgOt)i8^qbsRez`9GyPJAVKG delta 2722 zcmX|D3s_8f8~^>!oHH|L=FAzl$gP_!gP2NorHz!7NKJG>Ei%-nCmH!H*~Z#(zkacJ zHo2vbBouPlP3|Sz=K5d>C5q*9D`m;|((~-hGtYbe?>Xna{NCUDzVqyiu&YE^*TK3D zKu_T85|X0<)1y{dmO|15gcY{R@)JPcA%GACgr|~zDX?%MaJd=$ssq6JJn&g*KsUEm zY5Ep?-8wJ@2cb_o(EcfezSrqJ4TNDCKv@lh01q&0???!vcLO%H5W+`*@$1RQc#@|f zr0Ic<;~?x1$Wao6oB?!R3?V-W;CDbc`6HO}2z0J{fpd4!Iqh>YA29Oga};PAM(#-l z9u39F`#j~A@&LAX$UNq$+EQ&HK+l$DLZ-H@L z5LHJR)CD72=|~PABAV_q)i_KY6$jkki>;OUfTalA<`o0uosk<90%ZS*+|#cq5qn%& z6G#Zv;A+ocvbPowE>fHq6Hyz{+Y01|qQOuD)cnnK_cv2ym)MBLO~BY2EMQrxwX53bkAHNYQ3xuG@gV0h0(6xLA!@44leMrQ-Jwr>g0bdKA!Y7%gIAh$Dc zJUPnbatCb$x_;#H^==e+6PN!!2}~N#9knKaF1B-Lk4*;lPT|T%}jGL)@IKM@N&*{WD&@CNi5 ziq&`900*p!7E3ePxyZLki2?r8iMOi=214R^tHXf`;F=Tf=$4jgZP;j4}!UU%g;}sKoyVqg@HyQReh^GG?d@i>;aTdZj}#@^O+OQ5SP?^ zR{3J;ig-SI(N#k5Ex-H60H9{jG9bNYBe_RfC$pC+L$^Uh_yFW}`Bl|Axr8SoK|V3#`oDMKvdyCR5(L zFOoSHt2S;KMwzcsZN5*L)nut!5jm;adeM$b6|2f?8b%p+Qq|krQJbz(HTk82bt z_Xu(?e|4L~-oU-Z>fWbhpz*QVHM9U2Q>}K(Cws3qs3STP2Yx%Lj%xp!`d>JrUNVZ< zSuUwp9W88Vu%IB04Ai1XPa@`-BoQvw6|G z3+czmqCaa(CAcUCnQ2@%GzZ}Kxqj9qVSpo!)$ z#y+d1Ni|+fn3zf#cM#V((&%i65D(oX==N#EUoT$+Lbr&gqLXP-4iQT~Q~(KQ#j*+` zaiT`7Ur<5%H{$dC#ei5ZzI;pfzqS{fH2J^}9%6Gg&HRU{8vUmiz{_r$fO4`|ov#VE zZY7eq7igw65OkrvH0D5>)ei<};_Au3$ETVVD~StgNs}|q7AOwUg zpQqOP`GWNvtsUvJ2+Z%AHq5pkIjYu9ck`m!4baX?@umg2Q#;R=+A+thUAbf`m{6`= zU7rT#d{w)_NTuuQqRsT*KuD%)w;gT)8}_v}XYFu8^tpEb5E;xTQ+q^}1!m)`E!|&6 z+xD=wk^hSV{?n>$x|ak5PL?{lP>p+Zk-Gmt5j($>?AA6AWQ~&HMLQrMOY*-#&`F+B zzz8+4KTjHU<`Heh{gUM-wW055X;UKwS};ud#j%72RGxH_&7oxz(kd?-q_cihx}GJ{ z<@FXI=!106lb*k0Etej@xlIu@Np*8$C=h$;)$Af#I$?3{pn=p$H|SYD zSYVwlXyqE>$QWJ3zA)NiS9Gy&t7v4O(3!{5whX;9C` z^i~cWLHGJQJK6=ca@QG4X<}WMyQy=5`j4{FhV+Aq zCEvBr2fW_Ne>Eo(8C&GHH8clITjY0n zr0+RVem}l~pfl_Fe#8}jSG_8dYU)y|cMRG?oQTmoWyL78{Iq4z1H{m*9W zO>?pUTVMV3-_O%?J@rfTjkG)V>bG=?F@TLq*Z)%F2ORa#Ut6;WsQOiZ-G(52WYOQc z5DXaIAz9oJ}T(U!NUxS02(dgmgW^^+ars++rux(pc zsc>=kxgLcR!|M6M>5;2hq2Gj^lQI&Ib=Z_DvJRW>_G9M43q_}bijFH-LG=Ft?4~c! diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 01fe7ed5..e5a533a1 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -63,16 +63,19 @@ + Copyright (C) 2005-2020 Volker Fischer and others + + + Author: Volker Fischer - Autor: Volker Fischer + Autor: Volker Fischer - Copyright (C) 2005-2020 - Copyright (C) 2005-2020 + Copyright (C) 2005-2020 - + &OK &OK @@ -90,6 +93,19 @@ Taxa de Erros de Cada Tamanho de Buffer + + CAudioMixerBoard + + + Server + Servidor + + + + T R Y I N G T O C O N N E C T + + + CChannelFader @@ -163,11 +179,55 @@ SOLO + + Alias/Name + + + + + Instrument + + + + + Location + Localização + + + + + + Skill Level + + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + + Musician Profile + + + + Mute Mute + Solo Solo @@ -332,6 +392,17 @@ Buffers status LED indicator Indicador LED do estado dos buffers + + + + C&onnect + &Ligar + + + + &View + + &Connection Setup... @@ -362,6 +433,41 @@ E&xit &Sair + + + None + Nenhum + + + + Center + Centro + + + + R + R + + + + L + L + + + + user + + + + + users + + + + + D&isconnect + + CClientDlgBase @@ -663,6 +769,72 @@ software. . + + + ASIO Setup + + + + + Mono + + + + + Mono-in/Stereo-out + + + + + Stereo + + + + + Low + + + + + Normal + + + + + High + + + + + Manual + + + + + Default + + + + + Default (North America) + + + + + + Size: + + + + + Buffer Delay + Atraso do buffer + + + + Buffer Delay: + + The selected audio device could not be used because of the following error: @@ -673,6 +845,11 @@ The previous driver will be selected. O driver anterior será selecionado. + + + Ok + + CClientSettingsDlgBase @@ -946,29 +1123,44 @@ CHelpMenu - - + + Getting &Started... Como Começa&r... - + Software &Manual... &Manual do Programa... - + What's &This O que é &isto - + &About... &Sobre... CLicenceDlg + + + I &agree to the above licence terms + + + + + Accept + + + + + Decline + + By connecting to this server and agreeing to this notice, you agree to the following: @@ -1058,204 +1250,256 @@ CMusProfDlg - + <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. What you set here will appear at your fader on the mixer board when you are connected to a <b>Perfil do músico:</b> Defina o seu nome ou um pseudônimo aqui para que os outros músicos com quem quer tocar saibam quem você é. Além disso, pode definir uma imagem do instrumento que toca e uma bandeira do país em que vive. A cidade em que vive e o nível de habilidade com o seu instrumento também podem ser adicionados. O que definir aqui aparecerá por baixo do seu fader na secção de mistura quando estiver ligado a um servidor - + 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. . Esta identificação também será exibida em cada cliente ligado ao mesmo servidor que você. Se o nome estiver vazio, o endereço IP será mostrado. - + Alias or name edit box Caixa de edição do nome ou pseudônimo - + Instrument picture button Botão da imagem do instrumento - + Country flag button Botão da bandeira do país - + City edit box Caixa de edição da cidade - + Skill level combo box Caixa do nível de habilidade - + + + None Nenhum - + + Musician Profile + + + + + Alias/Name + + + + + Instrument + + + + + Country + + + + + City + + + + + Skill + + + + + &Close + &Fechar + + + + Beginner + + + + + Intermediate + + + + + Expert + + + + Drum Set Bateria - + Djembe Djembe - + Electric Guitar Guitarra Elétrica - + Acoustic Guitar Guitarra Acústica - + Bass Guitar Baixo - + Keyboard Teclado - + Synthesizer Sintetizador - + Grand Piano Piano de Cauda - + Accordion Acordeão - + Vocal Voz - + Microphone Microfone - + Harmonica Harmónica - + Trumpet Trompete - + Trombone Trombone - + French Horn Trompa Francesa - + Tuba Tuba - + Saxophone Saxofone - + Clarinet Clarinete - + Flute Flauta - + Violin Violino - + Cello Violoncelo - + Double Bass Contrabaixo - + Recorder Gravador - + Streamer Streamer - + Listener Ouvinte - + Guitar+Vocal Guitarra+Voz - + Keyboard+Vocal Teclado+Voz - + Bodhran Bodhrán - + Bassoon Fagote - + Oboe Oboé - + Harp Harpa - + Viola Viola de Arco @@ -1338,48 +1582,108 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan Caixa de edição da cidade onde o servidor se encontra - + <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. <b>Localização: País</b> O país em que este servidor está localizado pode ser definido aqui. Se um país for inserido, ele será mostrado na lista do diálogo de logação dos clientes. - + Country where the server is located combo box Seletor do país onde o servidor de encontra - - + + E&xit &Sair - + &Hide &Esconder servidor - - - + + + server - + &Open &Abrir servidor - + server - + + Manual + + + + + Default + + + + + Default (North America) + + + + Server - Servidor + + + &Window + + + + + Unregistered + + + + + Bad address + + + + + Registration requested + + + + + Registration failed + + + + + Check server version + + + + + Registered + + + + + Central Server full + + + + + Unknown value + + CServerDlgBase diff --git a/src/resources.qrc b/src/resources.qrc index 6b0fc83f..ab3535f1 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -8,6 +8,9 @@ res/translation/translation_pt_PT.qm + + res/translation/translation_es_ES.qm + res/CLEDDisabledSmall.png res/CLEDGreenArrow.png diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 9091b061..48b4931a 100755 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -107,8 +107,7 @@ CServerDlg::CServerDlg ( CServer* pNServP, lblLocationCity->setWhatsThis ( strLocCity ); edtLocationCity->setWhatsThis ( strLocCity ); - edtLocationCity->setAccessibleName ( tr ( - "City where the server is located line edit" ) ); + edtLocationCity->setAccessibleName ( tr ( "City where the server is located line edit" ) ); // location country QString strLocCountry = tr ( "Location country: The country in " @@ -189,9 +188,9 @@ lvwClients->setMinimumHeight ( 140 ); // central server address type combo box cbxCentServAddrType->clear(); - cbxCentServAddrType->addItem ( "Manual" ); // AT_MANUAL - cbxCentServAddrType->addItem ( "Default" ); // AT_DEFAULT - cbxCentServAddrType->addItem ( "Default (North America)" ); // AT_NORTH_AMERICA + cbxCentServAddrType->addItem ( tr ( "Manual" ) ); // AT_MANUAL + cbxCentServAddrType->addItem ( tr ( "Default" ) ); // AT_DEFAULT + cbxCentServAddrType->addItem ( tr ( "Default (North America)" ) ); // AT_NORTH_AMERICA cbxCentServAddrType->setCurrentIndex ( static_cast ( pServer->GetCentralServerAddressType() ) ); // update server name line edit @@ -273,7 +272,7 @@ lvwClients->setMinimumHeight ( 140 ); // View menu -------------------------------------------------------------- - QMenu* pViewMenu = new QMenu ( "&Window", this ); + QMenu* pViewMenu = new QMenu ( tr ( "&Window" ), this ); pViewMenu->addAction ( tr ( "E&xit" ), this, SLOT ( close() ), QKeySequence ( Qt::CTRL + Qt::Key_Q ) ); diff --git a/src/util.cpp b/src/util.cpp index 8839c288..dd845c02 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -462,9 +462,9 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent ) QVBoxLayout* pLayout = new QVBoxLayout ( this ); QHBoxLayout* pSubLayout = new QHBoxLayout; QTextBrowser* txvLicence = new QTextBrowser ( this ); - QCheckBox* chbAgree = new QCheckBox ( "I &agree to the above licence terms", this ); - butAccept = new QPushButton ( "Accept", this ); - QPushButton* butDecline = new QPushButton ( "Decline", this ); + QCheckBox* chbAgree = new QCheckBox ( tr ( "I &agree to the above licence terms" ), this ); + butAccept = new QPushButton ( tr ( "Accept" ), this ); + QPushButton* butDecline = new QPushButton ( tr ( "Decline" ), this ); pSubLayout->addStretch(); pSubLayout->addWidget ( chbAgree ); @@ -539,22 +539,22 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP, - label with combo box for skill level - OK button */ - setWindowTitle ( "Musician Profile" ); + setWindowTitle ( tr ( "Musician Profile" ) ); setWindowIcon ( QIcon ( QString::fromUtf8 ( ":/png/main/res/fronticon.png" ) ) ); QVBoxLayout* pLayout = new QVBoxLayout ( this ); QHBoxLayout* pButSubLayout = new QHBoxLayout; - QLabel* plblAlias = new QLabel ( "Alias/Name", this ); + QLabel* plblAlias = new QLabel ( tr ( "Alias/Name" ), this ); pedtAlias = new QLineEdit ( this ); - QLabel* plblInstrument = new QLabel ( "Instrument", this ); + QLabel* plblInstrument = new QLabel ( tr ( "Instrument" ), this ); pcbxInstrument = new QComboBox ( this ); - QLabel* plblCountry = new QLabel ( "Country", this ); + QLabel* plblCountry = new QLabel ( tr ( "Country" ), this ); pcbxCountry = new QComboBox ( this ); - QLabel* plblCity = new QLabel ( "City", this ); + QLabel* plblCity = new QLabel ( tr ( "City" ), this ); pedtCity = new QLineEdit ( this ); - QLabel* plblSkill = new QLabel ( "Skill", this ); + QLabel* plblSkill = new QLabel ( tr ( "Skill" ), this ); pcbxSkill = new QComboBox ( this ); - QPushButton* butClose = new QPushButton ( "&Close", this ); + QPushButton* butClose = new QPushButton ( tr ( "&Close" ), this ); QGridLayout* pGridLayout = new QGridLayout; plblAlias->setSizePolicy ( QSizePolicy::Minimum, QSizePolicy::Expanding ); @@ -627,8 +627,7 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP, if ( static_cast ( iCurCntry ) != QLocale::AnyCountry ) { // get current country enum - QLocale::Country eCountry = - static_cast ( iCurCntry ); + QLocale::Country eCountry = static_cast ( iCurCntry ); // try to load icon from resource file name QIcon CurFlagIcon; @@ -653,7 +652,7 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP, FlagNoneIcon.addFile ( ":/png/flags/res/flags/flagnone.png" ); pcbxCountry->insertItem ( 0, FlagNoneIcon, - "None", + tr ( "None" ), static_cast ( QLocale::AnyCountry ) ); @@ -665,25 +664,25 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP, RGBCOL_G_SL_NOT_SET, RGBCOL_B_SL_NOT_SET ) ); - pcbxSkill->addItem ( QIcon ( SLPixmap ), "None", SL_NOT_SET ); + pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "None" ), SL_NOT_SET ); SLPixmap.fill ( QColor::fromRgb ( RGBCOL_R_SL_BEGINNER, RGBCOL_G_SL_BEGINNER, RGBCOL_B_SL_BEGINNER ) ); - pcbxSkill->addItem ( QIcon ( SLPixmap ), "Beginner", SL_BEGINNER ); + pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "Beginner" ), SL_BEGINNER ); SLPixmap.fill ( QColor::fromRgb ( RGBCOL_R_SL_INTERMEDIATE, RGBCOL_G_SL_INTERMEDIATE, RGBCOL_B_SL_INTERMEDIATE ) ); - pcbxSkill->addItem ( QIcon ( SLPixmap ), "Intermediate", SL_INTERMEDIATE ); + pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "Intermediate" ), SL_INTERMEDIATE ); SLPixmap.fill ( QColor::fromRgb ( RGBCOL_R_SL_SL_PROFESSIONAL, RGBCOL_G_SL_SL_PROFESSIONAL, RGBCOL_B_SL_SL_PROFESSIONAL ) ); - pcbxSkill->addItem ( QIcon ( SLPixmap ), "Expert", SL_PROFESSIONAL ); + pcbxSkill->addItem ( QIcon ( SLPixmap ), tr ( "Expert" ), SL_PROFESSIONAL ); // Add help text to controls ----------------------------------------------- diff --git a/src/util.h b/src/util.h index 6a790f3f..3c688f59 100755 --- a/src/util.h +++ b/src/util.h @@ -590,28 +590,28 @@ inline QString svrRegStatusToString ( ESvrRegStatus eSvrRegStatus ) switch ( eSvrRegStatus ) { case SRS_UNREGISTERED: - return "Unregistered"; + return QCoreApplication::translate ( "CServerDlg", "Unregistered" ); case SRS_BAD_ADDRESS: - return "Bad address"; + return QCoreApplication::translate ( "CServerDlg", "Bad address" ); case SRS_REQUESTED: - return "Registration requested"; + return QCoreApplication::translate ( "CServerDlg", "Registration requested" ); case SRS_TIME_OUT: - return "Registration failed"; + return QCoreApplication::translate ( "CServerDlg", "Registration failed" ); case SRS_UNKNOWN_RESP: - return "Check server version"; + return QCoreApplication::translate ( "CServerDlg", "Check server version" ); case SRS_REGISTERED: - return "Registered"; + return QCoreApplication::translate ( "CServerDlg", "Registered" ); case SRS_CENTRAL_SVR_FULL: - return "Central Server full"; + return QCoreApplication::translate ( "CServerDlg", "Central Server full" ); } - return QString ( "Unknown value " ).append ( eSvrRegStatus ); + return QString ( QCoreApplication::translate ( "CServerDlg", "Unknown value " ) ).append ( eSvrRegStatus ); } From 14aeb310278bbd7e05c32aff918dcca69e520a86 Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Wed, 6 May 2020 20:19:55 +0200 Subject: [PATCH 045/125] A few more strings translation in French --- src/res/translation/translation_fr_FR.ts | 46 ++++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 03906304..e297a490 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -98,7 +98,7 @@ Server - Serveur + Serveur @@ -266,7 +266,7 @@ Cl&ear - + N&ettoyer @@ -396,27 +396,27 @@ C&onnect - Se c&onnecter + Se c&onnecter &View - + &Vue &Connection Setup... - + Paramètres de &connexion... My &Profile... - + Mon &profil C&hat... - + Tc&hate...> @@ -426,42 +426,42 @@ &Analyzer Console... - + Console d'&analyse E&xit - + &Quitter None - + Aucun Center - Centre + Centre R - D + D L - G + G user - + utilisateur users - + utilisateurs @@ -1077,42 +1077,42 @@ Filter - + Filtre Show All Musicians - + Afficher tous les musiciens Server Name - + Nom du serveur Ping Time - + Temps de réponse Musicians - + Musiciens Location - + Localisation Server Name/Address - + Nom du serveur / adresse C&ancel - + &Annuler From fcc37795282f8721d13477c25a44d3005938d93e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 20:50:32 +0200 Subject: [PATCH 046/125] Input Level Meter: remove html from translation --- src/clientdlg.cpp | 6 +++--- src/res/translation/translation_de_DE.ts | 12 +++++++++++- src/res/translation/translation_es_ES.ts | 12 +++++++++++- src/res/translation/translation_fr_FR.qm | Bin 3085 -> 3083 bytes src/res/translation/translation_fr_FR.ts | 12 +++++++++++- src/res/translation/translation_pt_PT.qm | Bin 90475 -> 90514 bytes src/res/translation/translation_pt_PT.ts | 14 ++++++++++++-- 7 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index a68aad99..125ca97f 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -48,10 +48,10 @@ CClientDlg::CClientDlg ( CClient* pNCliP, // Add help text to controls ----------------------------------------------- // input level meter - QString strInpLevH = tr ( "Input Level Meter: The input level " + QString strInpLevH = "" + tr ( "Input Level Meter" ) + ": " + tr ( "The input level " "indicators show the input level of the two stereo channels " - "of the current selected audio input.
" - "Make sure not to clip the input signal to avoid distortions of the " + "of the current selected audio input." ) + "
" + + tr ( "Make sure not to clip the input signal to avoid distortions of the " "audio signal." ); QString strInpLevHTT = tr ( "If the " ) + APP_NAME + diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 7545870a..31f1ff37 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -270,7 +270,17 @@ CClientDlg - <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. + Input Level Meter + + + + + The input level indicators show the input level of the two stereo channels of the current selected audio input. + + + + + Make sure not to clip the input signal to avoid distortions of the audio signal. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 7c0fc889..4d563cb3 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -270,7 +270,17 @@ CClientDlg - <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. + Input Level Meter + + + + + The input level indicators show the input level of the two stereo channels of the current selected audio input. + + + + + Make sure not to clip the input signal to avoid distortions of the audio signal. diff --git a/src/res/translation/translation_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index 94938b73fd62b36a0852f2ef27a85e6ea2c17698..ad38de826665fee137f6767ccc8692b1e4c07a2a 100644 GIT binary patch delta 179 zcmeB`=$4qEqPT;Bfx(A?fm0bs2Qe_Pc|&N9PzcQ#IMG#}^Bx21LRJO_F4l>;@`^zW z0pUj&7}#4FBL041VBpxmw90HM0|P4;gyw3SxYpiLkhSMb6Hv06b;YbKhiLMj6Iko4pv7*(dk1$#3rC HsAmQM$D1pb delta 191 zcmeB{=#`kDqPUBJfx(A?fm0Po2Qe_Pc|&N9a0tyAJkeF2^8o|vLRJO_F7}DJ@`@o0 z0pUj&7}(nwBL041VBpxqw90HM0|P4;gy!m)xYpiLn6>9j6Hv02b^4_%Ok@TC)1xgV diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 03906304..ff6caf1d 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -278,7 +278,17 @@ CClientDlg - <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. + Input Level Meter + + + + + The input level indicators show the input level of the two stereo channels of the current selected audio input. + + + + + Make sure not to clip the input signal to avoid distortions of the audio signal. diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm index 8dadf0652f91da241f6cc219ddfe758dbf80eeff..d317dbde24a1d4671cbea55b9574a9d0a2b12fb4 100644 GIT binary patch delta 2518 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 diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index e5a533a1..e3706f33 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -278,8 +278,18 @@ CClientDlg - <b>Input Level Meter:</b> The input level indicators show the input level of the two stereo channels of the current selected audio input.<br>Make sure not to clip the input signal to avoid distortions of the audio signal. - <b>Medidor do Nível de Entrada:</b> Os indicadores do nível de entrada mostram o nível dos dois canais stereo da entrada de áudio selecionada.<br>Certifique-se de não clipar o sinal de entrada para evitar distorções no sinal de áudio. + Input Level Meter + Medidor do Nível de Entrada + + + + The input level indicators show the input level of the two stereo channels of the current selected audio input. + Os indicadores do nível de entrada mostram o nível dos dois canais stereo da entrada de áudio selecionada. + + + + Make sure not to clip the input signal to avoid distortions of the audio signal. + Certifique-se de não clipar o sinal de entrada para evitar distorções no sinal de áudio. From b8c1a00c1fac657a543d694ec75a650d96acbda5 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:09:34 +0200 Subject: [PATCH 047/125] some more removing html code from translation strings --- src/clientdlg.cpp | 6 ++--- src/res/translation/translation_de_DE.ts | 9 ++++++-- src/res/translation/translation_es_ES.ts | 9 ++++++-- src/res/translation/translation_fr_FR.ts | 29 ++++++++++++++---------- src/res/translation/translation_pt_PT.ts | 19 ++++++++++------ 5 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 125ca97f..831b852a 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -60,13 +60,13 @@ CClientDlg::CClientDlg ( CClient* pNCliP, "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.
For a proper usage of the " ) + APP_NAME + - tr ( " software, " + "(Windows) audio mixer." ) + "
" + tr ( "For a proper usage of the " ) + + APP_NAME + tr ( " software, " "you should not hear your singing/instrument in the loudspeaker or " "your headphone when the " ) + APP_NAME + tr ( " software is not connected. This can " "be achieved by muting your input audio channel in the Playback " - "mixer (not the Recording mixer!)." ) + TOOLTIP_COM_END_TEXT; + "mixer (not the Recording mixer!)." ) + TOOLTIP_COM_END_TEXT; QString strInpLevHAccText = tr ( "Input level meter" ); QString strInpLevHAccDescr = tr ( "Simulates an analog LED level meter." ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 31f1ff37..21cf8c8d 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -290,7 +290,12 @@
- 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.<br>For a proper usage of the + 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. + + + + + For a proper usage of the @@ -300,7 +305,7 @@ - software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (<b>not</b> the Recording mixer!). + software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 4d563cb3..af091711 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -290,7 +290,12 @@ - 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.<br>For a proper usage of the + 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. + + + + + For a proper usage of the @@ -300,7 +305,7 @@ - software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (<b>not</b> the Recording mixer!). + software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 8d94d555..4a912032 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -191,7 +191,7 @@ Location - + Localisation @@ -296,19 +296,24 @@ If the - - - 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.<br>For a proper usage of the - - software, you should not hear your singing/instrument in the loudspeaker or your headphone when the + + + 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. + + + + + For a proper usage of the + + - software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (<b>not</b> the Recording mixer!). + software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). @@ -406,7 +411,7 @@ C&onnect - Se c&onnecter + Se c&onnecter @@ -426,7 +431,7 @@ C&hat... - Tc&hate...> + Tc&hate... @@ -1011,7 +1016,7 @@ Ping Time - + Temps de réponse @@ -1300,7 +1305,7 @@ What you set here will appear at your fader on the mixer board when you are conn None - + Aucun @@ -1604,7 +1609,7 @@ What you set here will appear at your fader on the mixer board when you are conn E&xit - + &Quitter diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index e3706f33..0e284476 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -296,20 +296,25 @@ If the Se o cliente - - - 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.<br>For a proper usage of the - estiver ligado a um servidor e tocar o seu instrumento/cantar no microfone, os LEDs do medidor do nível de entrada devem piscar. Se tal não acontecer, provavelmente selecionou o canal de entrada errado (por exemplo, entrada de linha em vez da entrada do microfone) ou ajustou o ganho da entrada muito baixo no misturador de áudio (Windows) ou na placa de som.<br>Para um uso adequado do cliente - software, you should not hear your singing/instrument in the loudspeaker or your headphone when the , não deve ouvir a sua voz/instrumento diretamente nas colunas ou nos headphones enquanto o cliente + + + 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. + estiver ligado a um servidor e tocar o seu instrumento/cantar no microfone, os LEDs do medidor do nível de entrada devem piscar. Se tal não acontecer, provavelmente selecionou o canal de entrada errado (por exemplo, entrada de linha em vez da entrada do microfone) ou ajustou o ganho da entrada muito baixo no misturador de áudio (Windows) ou na placa de som. + + + + For a proper usage of the + Para um uso adequado do cliente + - software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (<b>not</b> the Recording mixer!). - não estiver ligado a um servidor. Isso pode ser feito silenciando (mute) o canal da entrada de áudio no dispositivo de reprodução (<b>não</b> no dispositivo de captura!). + software is not connected. This can be achieved by muting your input audio channel in the Playback mixer (not the Recording mixer!). + não estiver ligado a um servidor. Isso pode ser feito silenciando (mute) o canal da entrada de áudio no dispositivo de reprodução (não no dispositivo de captura!) From 8608c6b673af5026f3b6ac376272173d6552b997 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:22:24 +0200 Subject: [PATCH 048/125] some more removing html code from translation strings --- src/clientdlg.cpp | 13 ++-- src/res/translation/translation_de_DE.ts | 81 +++++++++++++-------- src/res/translation/translation_es_ES.ts | 81 +++++++++++++-------- src/res/translation/translation_fr_FR.ts | 81 +++++++++++++-------- src/res/translation/translation_pt_PT.ts | 89 +++++++++++++++--------- 5 files changed, 217 insertions(+), 128 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 831b852a..fd3eca42 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -84,8 +84,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP, lbrInputLevelR->setToolTip ( strInpLevHTT ); // connect/disconnect button - butConnect->setWhatsThis ( tr ( "Connect / Disconnect Button:" - " Push this button to connect a server. A dialog where you can " + butConnect->setWhatsThis ( "" + tr ( "Connect/Disconnect Button" ) + ": " + + tr ( "Push this button to connect a server. A dialog where you can " "select a server will open. If you are connected, pressing this " "button will end the session." ) ); @@ -98,14 +98,15 @@ CClientDlg::CClientDlg ( CClient* pNCliP, "and disconnecting the " ) + APP_NAME + tr ( " software." ) ); // local audio input fader - QString strAudFader = tr ( "Local Audio Input Fader: With the " - "audio fader, the relative levels of the left and right local audio " + QString strAudFader = "" + tr ( "Local Audio Input Fader" ) + ": " + + tr ( "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 " - "L -x, where x is the current attenuation indicator." ); + "audio fader in a direction where the label above the fader shows " ) + + "" + tr ( "L" ) + " -x" + tr ( ", where" ) + " x " + + tr ( "is the current attenuation indicator." ); lblAudioPan->setWhatsThis ( strAudFader ); lblAudioPanValue->setWhatsThis ( strAudFader ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 21cf8c8d..fd401c00 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -320,7 +320,12 @@ - <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. + Connect/Disconnect Button + + + + + Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. @@ -335,143 +340,159 @@ - + software. - <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. + Local Audio Input Fader - + Local audio input fader (left/right) - + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - + Reverberation effect level setting - + <b>Reverberation Channel Selection:</b> 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. - + Left channel selection for reverberation - + Right channel selection for reverberation - + <b>Delay Status LED:</b> 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. - + If this LED indicator turns red, you will not have much fun using the - + Delay status LED indicator - + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - + Buffers status LED indicator - - + + C&onnect - + &View - + &Connection Setup... - + My &Profile... - + C&hat... - + &Settings... &Einstellungen - + &Analyzer Console... - + E&xit - + None - + Center - + R - + + L - + + 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 + + + + + , where + + + + + is the current attenuation indicator. + + + + user - + users - + D&isconnect diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index af091711..fc776b6d 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -320,7 +320,12 @@ - <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. + Connect/Disconnect Button + + + + + Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. @@ -335,143 +340,159 @@ - + software. - <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. + Local Audio Input Fader - + Local audio input fader (left/right) - + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - + Reverberation effect level setting - + <b>Reverberation Channel Selection:</b> 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. - + Left channel selection for reverberation - + Right channel selection for reverberation - + <b>Delay Status LED:</b> 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. - + If this LED indicator turns red, you will not have much fun using the - + Delay status LED indicator - + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - + Buffers status LED indicator - - + + C&onnect - + &View - + &Connection Setup... - + My &Profile... - + C&hat... - + &Settings... - + &Analyzer Console... - + E&xit - + None - + Center - + R - + + L - + + 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 + + + + + , where + + + + + is the current attenuation indicator. + + + + user - + users - + D&isconnect diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 4a912032..97c7787a 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -328,7 +328,12 @@ - <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. + Connect/Disconnect Button + + + + + Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. @@ -343,143 +348,159 @@ - + software. - <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. + Local Audio Input Fader - + Local audio input fader (left/right) - + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - + Reverberation effect level setting - + <b>Reverberation Channel Selection:</b> 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. - + Left channel selection for reverberation - + Right channel selection for reverberation - + <b>Delay Status LED:</b> 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. - + If this LED indicator turns red, you will not have much fun using the - + Delay status LED indicator - + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - + Buffers status LED indicator - - + + C&onnect Se c&onnecter - + &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 - + E&xit &Quitter - + None Aucun - + Center Centre - + R D - + + 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 + + + + + , where + + + + + is the current attenuation indicator. + + + + user utilisateur - + users utilisateurs - + D&isconnect diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 0e284476..2ad47106 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -328,8 +328,13 @@ - <b>Connect / Disconnect Button:</b> Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. - <b>Botão de Ligar / Desligar:</b> Pressione este botão para se ligar a um servidor. Uma janela será aberta onde pode selecionar um servidor. Se já estiver ligado a um servidor, pressionar este botão encerrará a sessão. + Connect/Disconnect Button + Botão de Ligar/Desligar + + + + Push this button to connect a server. A dialog where you can select a server will open. If you are connected, pressing this button will end the session. + Pressione este botão para se ligar a um servidor. Uma janela será aberta onde pode selecionar um servidor. Se já estiver ligado a um servidor, pressionar este botão encerrará a sessão. @@ -343,143 +348,163 @@ - + software. . - <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. - <b>Fader da Entrada Local de Áudio:</b> Com o fader de áudio, os níveis relativos dos canais locais esquerdo e direito podem ser alterados. Para um sinal mono, atua como uma panorâmica entre os dois canais. Se, por exemplo, um microfone estiver ligado no canal direito e um instrumento estiver ligado no canal esquerdo, mais alto que o microfone, mova o fader de áudio numa direção em que a etiqueta acima do fader mostre <i>L -x</i>, onde <i>x</i> é o indicador de atenuação atual. + <b>Fader da Entrada Local de Áudio:</b> Com o fader de áudio, os níveis relativos dos canais locais esquerdo e direito podem ser alterados. Para um sinal mono, atua como uma panorâmica entre os dois canais. Se, por exemplo, um microfone estiver ligado no canal direito e um instrumento estiver ligado no canal esquerdo, mais alto que o microfone, mova o fader de áudio numa direção em que a etiqueta acima do fader mostre <i>L -x</i>, onde <i>x</i> é o indicador de atenuação atual. - + + Local Audio Input Fader + Fader da Entrada Local de Áudio + + + Local audio input fader (left/right) Fader de entrada local de áudio (esquerdo/direito) - + <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. <b>Nível de Reverberação:</b> Um efeito de reverberação pode ser aplicado a um canal local de áudio mono ou a ambos os canais no modo estéreo. A seleção do canal mono e o nível de reverberação podem ser modificados. Se, por exemplo, o sinal do microfone for alimentado no canal de áudio direito da placa de som, e for aplicado um efeito de reverberação, ajuste o seletor de canal para a direita e mova o fader para cima até que o nível de reverberação desejado seja atingido.<br>O efeito de reverberação requer uma utilização do CPU significativa, de forma a que só deve ser usado em PCs rápidos. Se o atenuador do nível de reverberação estiver definido como mínimo (que é a configuração padrão), o efeito de reverberação será desativado e não causará nenhum uso adicional do CPU. - + Reverberation effect level setting Ajuste do nível do efeito de reverberação - + <b>Reverberation Channel Selection:</b> 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. <b>Seleção do Canal de Reverberação:</b> Com estes botões de seleção, pode ser escolhido o canal de entrada de áudio no qual o efeito de reverberação é aplicado. Pode ser selecionado o canal de entrada esquerdo ou direito. - + Left channel selection for reverberation Seleção do canal esquerdo para reverberação - + Right channel selection for reverberation Seleção do canal direito para reverberação - + <b>Delay Status LED:</b> 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. <b>LED do Estado da Latência:</b> O indicador LED do estado da latência mostra o estado atual do atraso do áudio. Se a luz estiver verde, o atraso é perfeito para uma jam session. Se a luz estiver amarela, uma sessão ainda é possível, mas pode ser mais difícil tocar sincronizado. Se a luz estiver vermelha, o atraso é demasiado grande para uma sessão de jamming. - + If this LED indicator turns red, you will not have much fun using the Se este indicador LED ficar vermelho, não se vai divertir muito ao usar o - + Delay status LED indicator Indicador LED do estado de latência - + <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> <b>LED do Estado dos Buffers:</b> O indicador LED do estado dos buffers mostra o estado atual do áudio/transmissão. Se a luz estiver verde, não haverá buffer em excesso/déficit e o fluxo de áudio não será interrompido. Se a luz estiver vermelha, o fluxo de áudio é interrompido devido a um dos seguintes problemas:<ul><li>O jitter buffer da rede não é grande o suficiente para o jitter atual da interface de rede/áudio.</li><li>O atraso do buffer da placa de som (buffer size) está definido para um valor demasiado baixo.</li><li>A taxa de upload ou download é muito alta para a largura de banda disponível na ligação à Internet.</li><li>O CPU do cliente ou servidor está a 100%.</li></ul> - + Buffers status LED indicator Indicador LED do estado dos buffers - - + + C&onnect &Ligar - + &View - + &Connection Setup... &Configuração da ligação ... - + My &Profile... Meu &Perfil... - + C&hat... &Mensagens... - + &Settings... &Definições... - + &Analyzer Console... Consola de &Análise... - + E&xit &Sair - + None Nenhum - + Center Centro - + R R - + + L L - + + 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 + Com o fader de áudio, os níveis relativos dos canais locais esquerdo e direito podem ser alterados. Para um sinal mono, atua como uma panorâmica entre os dois canais. Se, por exemplo, um microfone estiver ligado no canal direito e um instrumento estiver ligado no canal esquerdo, mais alto que o microfone, mova o fader de áudio numa direção em que a etiqueta acima do fader mostre + + + + , where + , onde + + + + is the current attenuation indicator. + é o indicador de atenuação atual. + + + user - + users - + D&isconnect From d3412044fe75f909bbbab4a74e12b88d82782c6f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:27:04 +0200 Subject: [PATCH 049/125] some more removing html code from translation strings --- src/clientdlg.cpp | 6 +++--- src/res/translation/translation_de_DE.ts | 20 +++++++++++++++----- src/res/translation/translation_es_ES.ts | 20 +++++++++++++++----- src/res/translation/translation_fr_FR.ts | 20 +++++++++++++++----- src/res/translation/translation_pt_PT.ts | 24 +++++++++++++++--------- 5 files changed, 63 insertions(+), 27 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index fd3eca42..64d44c0e 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -115,14 +115,14 @@ CClientDlg::CClientDlg ( CClient* pNCliP, sldAudioPan->setAccessibleName ( tr ( "Local audio input fader (left/right)" ) ); // reverberation level - QString strAudReverb = tr ( "Reverberation Level: A reverberation " - "effect can be applied to one local mono audio channel or to both " + QString strAudReverb = "" + tr ( "Reverberation Level" ) + ": " + + tr ( "A reverberation effect can be applied to one local mono audio channel or to both " "channels in stereo mode. The mone 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.
" + "desired reverberation level is reached." ) + "
" + tr ( "The reverberation effect requires significant CPU so that 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 " diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index fd401c00..414a283d 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -354,11 +354,6 @@ Local audio input fader (left/right)
- - - <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - - Reverberation effect level setting @@ -481,6 +476,21 @@ is the current attenuation indicator. + + + Reverberation Level + + + + + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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. + + + + + The reverberation effect requires significant CPU so that 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. + + user diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index fc776b6d..ff65d0be 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -354,11 +354,6 @@ Local audio input fader (left/right) - - - <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - - Reverberation effect level setting @@ -481,6 +476,21 @@ is the current attenuation indicator. + + + Reverberation Level + + + + + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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. + + + + + The reverberation effect requires significant CPU so that 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. + + user diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 97c7787a..f92a91de 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -362,11 +362,6 @@ Local audio input fader (left/right) - - - <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - - Reverberation effect level setting @@ -489,6 +484,21 @@ is the current attenuation indicator. + + + Reverberation Level + + + + + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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. + + + + + The reverberation effect requires significant CPU so that 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. + + user diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 2ad47106..ca234b62 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -352,10 +352,6 @@ software. . - - <b>Local Audio Input Fader:</b> 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 <i>L -x</i>, where <i>x</i> is the current attenuation indicator. - <b>Fader da Entrada Local de Áudio:</b> Com o fader de áudio, os níveis relativos dos canais locais esquerdo e direito podem ser alterados. Para um sinal mono, atua como uma panorâmica entre os dois canais. Se, por exemplo, um microfone estiver ligado no canal direito e um instrumento estiver ligado no canal esquerdo, mais alto que o microfone, mova o fader de áudio numa direção em que a etiqueta acima do fader mostre <i>L -x</i>, onde <i>x</i> é o indicador de atenuação atual. - Local Audio Input Fader @@ -366,11 +362,6 @@ Local audio input fader (left/right) Fader de entrada local de áudio (esquerdo/direito) - - - <b>Reverberation Level:</b> A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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.<br>The reverberation effect requires significant CPU so that 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. - <b>Nível de Reverberação:</b> Um efeito de reverberação pode ser aplicado a um canal local de áudio mono ou a ambos os canais no modo estéreo. A seleção do canal mono e o nível de reverberação podem ser modificados. Se, por exemplo, o sinal do microfone for alimentado no canal de áudio direito da placa de som, e for aplicado um efeito de reverberação, ajuste o seletor de canal para a direita e mova o fader para cima até que o nível de reverberação desejado seja atingido.<br>O efeito de reverberação requer uma utilização do CPU significativa, de forma a que só deve ser usado em PCs rápidos. Se o atenuador do nível de reverberação estiver definido como mínimo (que é a configuração padrão), o efeito de reverberação será desativado e não causará nenhum uso adicional do CPU. - Reverberation effect level setting @@ -493,6 +484,21 @@ is the current attenuation indicator. é o indicador de atenuação atual. + + + Reverberation Level + Nível de Reverberação + + + + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mone 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. + Um efeito de reverberação pode ser aplicado a um canal local de áudio mono ou a ambos os canais no modo estéreo. A seleção do canal mono e o nível de reverberação podem ser modificados. Se, por exemplo, o sinal do microfone for alimentado no canal de áudio direito da placa de som, e for aplicado um efeito de reverberação, ajuste o seletor de canal para a direita e mova o fader para cima até que o nível de reverberação desejado seja atingido. + + + + The reverberation effect requires significant CPU so that 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. + O efeito de reverberação requer uma utilização do CPU significativa, de forma a que só deve ser usado em PCs rápidos. Se o atenuador do nível de reverberação estiver definido como mínimo (que é a configuração padrão), o efeito de reverberação será desativado e não causará nenhum uso adicional do CPU. + user From 8c9f50fb1ad8ff7a7d6efa3eebced0daec1ad7eb Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:29:51 +0200 Subject: [PATCH 050/125] some more removing html code from translation strings --- src/clientdlg.cpp | 4 ++-- src/res/translation/translation_de_DE.ts | 15 ++++++++++----- src/res/translation/translation_es_ES.ts | 15 ++++++++++----- src/res/translation/translation_fr_FR.ts | 15 ++++++++++----- src/res/translation/translation_pt_PT.ts | 15 ++++++++++----- 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 64d44c0e..132082bc 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -134,8 +134,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP, sldAudioReverb->setAccessibleName ( tr ( "Reverberation effect level setting" ) ); // reverberation channel selection - QString strRevChanSel = tr ( "Reverberation Channel Selection: " - "With these radio buttons the audio input channel on which the " + QString strRevChanSel = "" + tr ( "Reverberation Channel Selection" ) + ": " + + tr ( "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." ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 414a283d..da40f19c 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -359,11 +359,6 @@ Reverberation effect level setting - - - <b>Reverberation Channel Selection:</b> 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. - - Left channel selection for reverberation @@ -491,6 +486,16 @@ The reverberation effect requires significant CPU so that 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. + + + Reverberation Channel Selection + + + + + 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. + + user diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index ff65d0be..21b8dc63 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -359,11 +359,6 @@ Reverberation effect level setting - - - <b>Reverberation Channel Selection:</b> 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. - - Left channel selection for reverberation @@ -491,6 +486,16 @@ The reverberation effect requires significant CPU so that 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. + + + Reverberation Channel Selection + + + + + 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. + + user diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index f92a91de..c947c4b4 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -367,11 +367,6 @@ Reverberation effect level setting - - - <b>Reverberation Channel Selection:</b> 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. - - Left channel selection for reverberation @@ -499,6 +494,16 @@ The reverberation effect requires significant CPU so that 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. + + + Reverberation Channel Selection + + + + + 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. + + user diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index ca234b62..d94770c0 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -367,11 +367,6 @@ Reverberation effect level setting Ajuste do nível do efeito de reverberação - - - <b>Reverberation Channel Selection:</b> 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. - <b>Seleção do Canal de Reverberação:</b> Com estes botões de seleção, pode ser escolhido o canal de entrada de áudio no qual o efeito de reverberação é aplicado. Pode ser selecionado o canal de entrada esquerdo ou direito. - Left channel selection for reverberation @@ -499,6 +494,16 @@ The reverberation effect requires significant CPU so that 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. O efeito de reverberação requer uma utilização do CPU significativa, de forma a que só deve ser usado em PCs rápidos. Se o atenuador do nível de reverberação estiver definido como mínimo (que é a configuração padrão), o efeito de reverberação será desativado e não causará nenhum uso adicional do CPU. + + + Reverberation Channel Selection + Seleção do Canal de Reverberação + + + + 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. + Com estes botões de seleção, pode ser escolhido o canal de entrada de áudio no qual o efeito de reverberação é aplicado. Pode ser selecionado o canal de entrada esquerdo ou direito. + user From d7c5d98451b219d5c59a87698d2096d53a877d00 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:33:39 +0200 Subject: [PATCH 051/125] some more removing html code from translation strings --- src/clientdlg.cpp | 4 ++-- src/res/translation/translation_de_DE.ts | 15 ++++++++++----- src/res/translation/translation_es_ES.ts | 15 ++++++++++----- src/res/translation/translation_fr_FR.ts | 15 ++++++++++----- src/res/translation/translation_pt_PT.ts | 15 ++++++++++----- 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 132082bc..7cda2942 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -145,8 +145,8 @@ CClientDlg::CClientDlg ( CClient* pNCliP, rbtReverbSelR->setAccessibleName ( tr ( "Right channel selection for reverberation" ) ); // delay LED - QString strLEDDelay = tr ( "Delay Status LED: " - "The delay status LED indicator shows the current audio delay " + QString strLEDDelay = "" + tr ( "Delay Status LED" ) + ": " + + tr ( "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 " diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index da40f19c..eb5d6b55 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -369,11 +369,6 @@ Right channel selection for reverberation - - - <b>Delay Status LED:</b> 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. - - If this LED indicator turns red, you will not have much fun using the @@ -496,6 +491,16 @@ 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. + + + Delay Status LED + + + + + 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. + + user diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 21b8dc63..e81007e9 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -369,11 +369,6 @@ Right channel selection for reverberation - - - <b>Delay Status LED:</b> 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. - - If this LED indicator turns red, you will not have much fun using the @@ -496,6 +491,16 @@ 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. + + + Delay Status LED + + + + + 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. + + user diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index c947c4b4..8fa4c8fa 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -377,11 +377,6 @@ Right channel selection for reverberation - - - <b>Delay Status LED:</b> 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. - - If this LED indicator turns red, you will not have much fun using the @@ -504,6 +499,16 @@ 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. + + + Delay Status LED + + + + + 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. + + user diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index d94770c0..4f6f3f9d 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -377,11 +377,6 @@ Right channel selection for reverberation Seleção do canal direito para reverberação - - - <b>Delay Status LED:</b> 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. - <b>LED do Estado da Latência:</b> O indicador LED do estado da latência mostra o estado atual do atraso do áudio. Se a luz estiver verde, o atraso é perfeito para uma jam session. Se a luz estiver amarela, uma sessão ainda é possível, mas pode ser mais difícil tocar sincronizado. Se a luz estiver vermelha, o atraso é demasiado grande para uma sessão de jamming. - If this LED indicator turns red, you will not have much fun using the @@ -504,6 +499,16 @@ 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. Com estes botões de seleção, pode ser escolhido o canal de entrada de áudio no qual o efeito de reverberação é aplicado. Pode ser selecionado o canal de entrada esquerdo ou direito. + + + Delay Status LED + LED do Estado da Latência + + + + 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. + O indicador LED do estado da latência mostra o estado atual do atraso do áudio. Se a luz estiver verde, o atraso é perfeito para uma jam session. Se a luz estiver amarela, uma sessão ainda é possível, mas pode ser mais difícil tocar sincronizado. Se a luz estiver vermelha, o atraso é demasiado grande para uma sessão de jamming. + user From 5b4921acc7d38385f9a803fb4b7119d1cd77463e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:40:39 +0200 Subject: [PATCH 052/125] some more removing html code from translation strings --- src/clientdlg.cpp | 22 +++++++-------- src/res/translation/translation_de_DE.ts | 35 ++++++++++++++++++++---- src/res/translation/translation_es_ES.ts | 35 ++++++++++++++++++++---- src/res/translation/translation_fr_FR.ts | 35 ++++++++++++++++++++---- src/res/translation/translation_pt_PT.ts | 35 ++++++++++++++++++++---- 5 files changed, 131 insertions(+), 31 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index 7cda2942..eefc122a 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -161,20 +161,20 @@ CClientDlg::CClientDlg ( CClient* pNCliP, ledDelay->setAccessibleName ( tr ( "Delay status LED indicator" ) ); // buffers LED - QString strLEDBuffers = tr ( "Buffers Status LED: " - "The buffers status LED indicator shows the current audio/streaming " + QString strLEDBuffers = "" + tr ( "Buffers Status LED" ) + ": " + + tr ( "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:" + "audio stream is interrupted caused by one of the following problems:" ) + "
    " - "
  • The network jitter buffer is not large enough for the current " - "network/audio interface jitter.
  • " - "
  • The sound card buffer delay (buffer size) is set to a too small " - "value.
  • " - "
  • The upload or download stream rate is too high for the current " - "available internet bandwidth.
  • " - "
  • The CPU of the client or server is at 100%.
  • " - "
" ); + "
  • " + tr ( "The network jitter buffer is not large enough for the current " + "network/audio interface jitter." ) + "
  • " + "
  • " + tr ( "The sound card buffer delay (buffer size) is set to a too small " + "value." ) + "
  • " + "
  • " + tr ( "The upload or download stream rate is too high for the current " + "available internet bandwidth." ) + "
  • " + "
  • " + tr ( "The CPU of the client or server is at 100%." ) + "
  • " + ""; lblBuffers->setWhatsThis ( strLEDBuffers ); ledBuffers->setWhatsThis ( strLEDBuffers ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index eb5d6b55..0159c3b5 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -379,11 +379,6 @@ Delay status LED indicator
    - - - <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - - Buffers status LED indicator @@ -501,6 +496,36 @@ 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. + + + Buffers Status LED + + + + + 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: + + + + + The network jitter buffer is not large enough for the current network/audio interface jitter. + + + + + The sound card buffer delay (buffer size) is set to a too small value. + + + + + The upload or download stream rate is too high for the current available internet bandwidth. + + + + + The CPU of the client or server is at 100%. + + user diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index e81007e9..6427543b 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -379,11 +379,6 @@ Delay status LED indicator - - - <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - - Buffers status LED indicator @@ -501,6 +496,36 @@ 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. + + + Buffers Status LED + + + + + 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: + + + + + The network jitter buffer is not large enough for the current network/audio interface jitter. + + + + + The sound card buffer delay (buffer size) is set to a too small value. + + + + + The upload or download stream rate is too high for the current available internet bandwidth. + + + + + The CPU of the client or server is at 100%. + + user diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 8fa4c8fa..a7a0986d 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -387,11 +387,6 @@ Delay status LED indicator - - - <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - - Buffers status LED indicator @@ -509,6 +504,36 @@ 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. + + + Buffers Status LED + + + + + 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: + + + + + The network jitter buffer is not large enough for the current network/audio interface jitter. + + + + + The sound card buffer delay (buffer size) is set to a too small value. + + + + + The upload or download stream rate is too high for the current available internet bandwidth. + + + + + The CPU of the client or server is at 100%. + + user diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 4f6f3f9d..5d5be18a 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -387,11 +387,6 @@ Delay status LED indicator Indicador LED do estado de latência - - - <b>Buffers Status LED:</b> 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:<ul><li>The network jitter buffer is not large enough for the current network/audio interface jitter.</li><li>The sound card buffer delay (buffer size) is set to a too small value.</li><li>The upload or download stream rate is too high for the current available internet bandwidth.</li><li>The CPU of the client or server is at 100%.</li></ul> - <b>LED do Estado dos Buffers:</b> O indicador LED do estado dos buffers mostra o estado atual do áudio/transmissão. Se a luz estiver verde, não haverá buffer em excesso/déficit e o fluxo de áudio não será interrompido. Se a luz estiver vermelha, o fluxo de áudio é interrompido devido a um dos seguintes problemas:<ul><li>O jitter buffer da rede não é grande o suficiente para o jitter atual da interface de rede/áudio.</li><li>O atraso do buffer da placa de som (buffer size) está definido para um valor demasiado baixo.</li><li>A taxa de upload ou download é muito alta para a largura de banda disponível na ligação à Internet.</li><li>O CPU do cliente ou servidor está a 100%.</li></ul> - Buffers status LED indicator @@ -509,6 +504,36 @@ 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. O indicador LED do estado da latência mostra o estado atual do atraso do áudio. Se a luz estiver verde, o atraso é perfeito para uma jam session. Se a luz estiver amarela, uma sessão ainda é possível, mas pode ser mais difícil tocar sincronizado. Se a luz estiver vermelha, o atraso é demasiado grande para uma sessão de jamming. + + + Buffers Status LED + LED do Estado dos Buffers + + + + 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: + O indicador LED do estado dos buffers mostra o estado atual do áudio/transmissão. Se a luz estiver verde, não haverá buffer em excesso/déficit e o fluxo de áudio não será interrompido. Se a luz estiver vermelha, o fluxo de áudio é interrompido devido a um dos seguintes problemas: + + + + The network jitter buffer is not large enough for the current network/audio interface jitter. + O jitter buffer da rede não é grande o suficiente para o jitter atual da interface de rede/áudio. + + + + The sound card buffer delay (buffer size) is set to a too small value. + O atraso do buffer da placa de som (buffer size) está definido para um valor demasiado baixo. + + + + The upload or download stream rate is too high for the current available internet bandwidth. + A taxa de upload ou download é muito alta para a largura de banda disponível na ligação à Internet. + + + + The CPU of the client or server is at 100%. + O CPU do cliente ou servidor está a 100%. + user From bcca13dfc17667d7890d05a969f11fa1b2d3c2bf Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 21:56:22 +0200 Subject: [PATCH 053/125] some more removing html code from translation strings --- src/audiomixerboard.cpp | 18 +++++------ src/res/translation/translation_de_DE.ts | 27 ++++++++++++++--- src/res/translation/translation_es_ES.ts | 27 ++++++++++++++--- src/res/translation/translation_fr_FR.qm | Bin 3083 -> 4747 bytes src/res/translation/translation_fr_FR.ts | 27 ++++++++++++++--- src/res/translation/translation_pt_PT.qm | Bin 90514 -> 90600 bytes src/res/translation/translation_pt_PT.ts | 37 +++++++++++++++++------ 7 files changed, 102 insertions(+), 34 deletions(-) diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 3dccb3fe..36215d38 100755 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -107,29 +107,29 @@ CChannelFader::CChannelFader ( QWidget* pNW, Reset(); // add help text to controls - plbrChannelLevel->setWhatsThis ( tr ( "Channel Level: Displays the " - "pre-fader audio level of this channel. All connected clients at the " + plbrChannelLevel->setWhatsThis ( "" + tr ( "Channel Level" ) + ": " + + tr ( "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." ) ); plbrChannelLevel->setAccessibleName ( tr ( "Input level of the current audio " "channel at the server" ) ); - pFader->setWhatsThis ( tr ( "Mixer Fader: 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." ) ); + pFader->setWhatsThis ( "" + tr ( "Mixer Fader" ) + ": " + tr ( + "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." ) ); pFader->setAccessibleName ( tr ( "Local mix level setting of the current audio " "channel at the server" ) ); - pcbMute->setWhatsThis ( tr ( "Mute: With the Mute checkbox, the " - "audio channel can be muted." ) ); + pcbMute->setWhatsThis ( "" + tr ( "Mute" ) + ": " + tr ( + "With the Mute checkbox, the audio channel can be muted." ) ); pcbMute->setAccessibleName ( tr ( "Mute button" ) ); - pcbSolo->setWhatsThis ( tr ( "Solo: With the Solo checkbox, the " + pcbSolo->setWhatsThis ( "" + tr ( "Solo" ) + ": " + tr ( "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." ) ); pcbSolo->setAccessibleName ( tr ( "Solo button" ) ); - QString strFaderText = tr ( "Fader Tag: The fader tag " + QString strFaderText = "" + tr ( "Fader Tag" ) + ": " + tr ( "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." ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 0159c3b5..83615401 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -102,7 +102,12 @@ CChannelFader - <b>Channel Level:</b> 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. + Channel Level + + + + + 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. @@ -112,7 +117,12 @@ - <b>Mixer Fader:</b> 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. + Mixer Fader + + + + + 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. @@ -122,7 +132,7 @@ - <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. + With the Mute checkbox, the audio channel can be muted. @@ -132,7 +142,7 @@ - <b>Solo:</b> 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. + 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. @@ -142,7 +152,12 @@ - <b>Fader Tag:</b> 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. + Fader Tag + + + + + 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. @@ -214,12 +229,14 @@ + Mute + Solo diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 6427543b..72fd4e91 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -102,7 +102,12 @@ CChannelFader - <b>Channel Level:</b> 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. + Channel Level + + + + + 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. @@ -112,7 +117,12 @@ - <b>Mixer Fader:</b> 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. + Mixer Fader + + + + + 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. @@ -122,7 +132,7 @@ - <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. + With the Mute checkbox, the audio channel can be muted. @@ -132,7 +142,7 @@ - <b>Solo:</b> 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. + 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. @@ -142,7 +152,12 @@ - <b>Fader Tag:</b> 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. + Fader Tag + + + + + 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. @@ -214,12 +229,14 @@ + Mute + Solo diff --git a/src/res/translation/translation_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index ad38de826665fee137f6767ccc8692b1e4c07a2a..3beeb6e9221a016052b9a46efe77fea55c3e06ae 100644 GIT binary patch delta 1652 zcmbVLTWB0*6h52GWoLGFvyI!BfK4Ycj*&>Jpm|V4wqp}hk~AiDy&%$I_fIo8nOSCb zo5l-^+J~kUZ5blA#)zOGR{LOli-;6KC6PuHAAC?Bd}y%qU6aKQ`s1`14ILN5(yp&D@TaLr(;yU zCUM|PBJ~uBg*}KX#hC3U@imbsog?vVnW*&@l0Q9%^Hu6Pa)MuRi3ZMpOeFnGBQJgg z;?p$ptpGvmF=h+2_uL|g(=_=2&egl=!QZxsQjgJ-%OQv^wY)X71R-NFwr!n!=cd}y z<=crgO^7hFC@epWJLS_cDsKoY>(3zMU19SM*wdS0-&6tA8{%^tu&0K^m(I92S7Xdb z;_@>5gwJEto)v>i{aAlKbm_Y1$^{44F{o)3vy-qY3+0WN+uM(s20LiJGy?oP9P$W?wQM&&@p zee-t+`yun|+h@UZ#wN-hYej30kxoT&$RZi8lVa|P^wWlfp}QU=rF&Mchn1B)G%skubr9^3cJ_!??sQmGYo1;%RhEnDAW2^@XS8 z-s?MX#{0^9ANQES(&&*;4MI!q=7 zj@#O3o-%2>2lf5-99yla_a}OJIr33Qs!{73YGl)}+#++rwN%#*jfNxPQA6u8q+#2s zU;yDU@E=B)`y1`3ZxwQFlq_C_MtaJ4HL#1e$&sDsGa8uo` zrKXvG2*W#J%`xsaam(M`P)nZ<;f?MfY!@C26!9!KufjD=RJ-z}lFx!j^7IgjIulJy z5hKazbhO@!GS;I)^QD-(Y6aS-XT5nn?>KsMDMoF+tydj1zT7Dj0emd6-_dUW%e+^3 QkZQ(x@R+0cZfQ;Y37#ioJpcdz delta 349 zcmeBH?UtAzQg6V(z~IBcz@`bI*>^x_PGuk+1Qhp%&>W!$(C42Ijd8k}VT}dfza(PdftCH;cjRP$y7b z5JNyXkT1pF!VvNI3j+hk2BuYJQ-KC@L1?bFiBC1_=R_R>3jJUK(`>I;Rf58RN(EVa z&NKn(YSuY(fbuLCAv9+_=bkf{fo{&_O7&y`y1{{Gw&DQ>2Bs}MyBUjt>YqSp&V9V8 z{y-~Pw?k;QrF`GltON23GJ%?QF#}!O#h}2D%#gF0m5G^k@+U#%$+_&#j53oQIfN(g oCChannelFader - <b>Channel Level:</b> 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. + Channel Level + + + + + 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. @@ -120,7 +125,12 @@ - <b>Mixer Fader:</b> 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. + Mixer Fader + + + + + 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. @@ -130,7 +140,7 @@ - <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. + With the Mute checkbox, the audio channel can be muted. @@ -140,7 +150,7 @@ - <b>Solo:</b> 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. + 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. @@ -150,7 +160,12 @@ - <b>Fader Tag:</b> 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. + Fader Tag + + + + + 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. @@ -222,12 +237,14 @@ + Mute + Solo diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm index d317dbde24a1d4671cbea55b9574a9d0a2b12fb4..ce5472088bcc2ee71e6dd11826a37055431c91af 100644 GIT binary patch delta 3675 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 delta 3926 zcmZuz30Rcn7Jk2<|DSzP5hNfSKtfO)MYQCOlWej&0)yZJB+IB2fevtUA1z5!Gwsi` zC&DEqW78VF@?;lHQ9+O_)2p}Kb0JE_(!}f4dzj&t-P=6RJZHY;ob#UdEZ^KXB)ok{ zuo)WiJ&xU~SbyBtd;jz;e?J!q$j<->0Gj5JOac;raZ2+tr#x0fG8Hg&Ic1vJDckCR zA%6jcDM0#SAT1DBxDYu0Bly)jfg_v1SCS2{@0~LB9C+J}wP1V@gy3?(wF1JBZvb;O zgmEHp>@r53%E-lY!S#|9)v1At-~PH z&j$D{5cVwvlYR&Fh>wB8U*f4{YYFs2*ka#pBE-uOyQ37i8j9EpJP`kdL$ZKY#2?aw zp#cd8-ymS_m|)lr#&sY$gY?WMn5R&L$0{)S-^5bdXP9z>0_liAmc$oKCPNmTGuZ;< zCd>jZR^WpZ^*~7mHoejaOlq>BIx!j8z5vx<+@VOuqjKhB^$7g;`-d33ADb>xi!ZEEt@${jR#OWfb+Xd4j(6Qf&10~ zCqlXBuZ$$-e7Ow!4GQ2VZt8QDfNjE5?hWLFv1IP8AqRl&PHw~MOyFQ3w>5qeIW}?C zqt{c>>~zZRyp9hw{=@K=l5jN;rT~bdGl8$DVX=xY9(l(d!&+>p9Yh6|c83C=} z^5%DafL&IXN7imKbd>M2ARBmlFYnWCBFd|H-OhI48#mrBqzLrkBXq;4aoqXL#1^o? z5BaQZH^D|{@h=_S1vWCDpI1mgU9Ry9
    XT1bxpB;L}ikefKD!&FqwyYx#<)2Z8Zr zPMNxcuWWr4@b==jE%};q?!|9k8V7vwE?@g4F?94}e%GOLV)7P$BAoOtb@S(ZrVxM! z{PizR(0T*k8Aho~yT#vr-~-mTL>QE6OQ$NnB!q6Ejc}7NW)DR$MI#upc7p})7bb6_ zNWWSlSo|r1Yy5E-?UZMRogEaNTJzL&qgb6Ivc3nPb_G`eE=j6dDM9G|O za-%05m`2IRv%W<6O?jf_Gn$Os;lL8JcV$-z=ZP9syfY%2;XY@xhx+G2`SDqrhMll5ML{FBqfSWUJ3^R|=pe2kIr&ngA8ak=v5hwZ@2 zdGeO_;b3xwykmYlIrfzQR7VlYr^#>sLg!&jeqT`!EIK9c-bQc3$^H9&+IRp)#u9i`0f84#}P=QN~6r0gHK{GJ*7nRL*E%aP}q`b%fNYr!6`{!oU+^AByhfuEl+Eh<3BEW;Ts(jwMOU!ks zf^PN$VwR}JpRy5!%34)ij0~vXq)IsWJw2bBRo2tge$geW4fhDCeWdDrUuq|pTGc*Q zLVbVRDUW-r4n1%*K$xm)&R%+yMya~9 zC?LK~?fsEJgUP5KZR@NDOVp|pSFNF98K=&uG1Dv8q|W>0JRlvawoIgFb$p~#rp{5< zq*87t%~bCS%m(Z4t=@lU7)9pcl-Xk)l7${n|1(kt%&1gf?;HkZ*r&epf)AKRrSY1% zoZ9$b8gE%O@WXA5ZMYj9JbPXi>7GDBXS(2SvR+tnA18W3y9K)Zj?%Cux4v`BbfJD&9M{;%z8xg-N1Ta z%vsHk-9=#L0L?E~Xdajk*fhV^(m{Y)^I%dt5Lct+hf>kRPS#2%SAq?@rS(nRK{+qi z`c-J?Z`Ez>$Whr~J`c4KE%bkZ+o(+~sRRbx)y_D6nC>NMm)Fx<5`Rnk-T=CnSgU=1 zZ#1xXu=eDd9l(X1+Hc&5*{c@qnIk4ZFS%L(mhql_zGAqPWs93?+{6}FwF==dK#yD) zp|cD9$FKoA4Y|gsSvf^TmO@>U<*$~)aDzVAs1u)e+bLr!=r-LIZ@Ufc^Q0;!LPwka zqTW*>HhA58-hcu!IRO@wL5F0LR?MKiLWjGavtcsOM?&9^$m95&e2Z0=mNT>0+i~w2 z30v9YO-vc<_S6JYEkP+6vm)n7$M%}OIn3>2vM`}wE?IEc>9wJDt@WyO0wyG7q;7dq zRh<9yo0{kz&9YKUuZqma+92UeMqf>i)=zG2N{BrpHZv}8m34UbRj2RYd ziOyV_Q(9J{ONxnha+@~GqRSOWjPepUCwhnvV*epCloc8cg#||Oq$x{b(9^G;RhsyD zg_pR^94!BBOSGqDKCz068Pa=QPZq?kQT?U6306-%cP(%YNg@hn646#FSUr8Csa#4N zke$0vbPAHiul!u?p5yXaz~_WLs+ig(uT-bkMHiIh^)4dIN=u82dJDuBQ6u9{_j+3t zHc$*4D9(@px>A*pS#MacSx?PR%k- zOj@CqMo|g9Og(w2Zh%;mp|DSwbdnoQH+niRiGmBkTw3WJ>!GwRrn1YYfOWlhem~W{ zotfar?h=%w;=G(fT|`-aL9s5rXm(lYlig+yp8O8;HWV0>bRlyM`U2xn-7B*!R*R0d z9BZAJl=+;Decl6;7&k?Z`{VFAIi-Xi400oGj2tNGr7d>aUQXgc)9NYlLgauyDn#h# zyC@visIf3nTr_oreeOg(H;`)~E2%WPthp9zPH91L(UXHLLR`Dt-TqzZY9{nFV4ApQ zxrhB=3S;&QVFz8r3t?em#h7{aHQ`O1{m9s{oERMGZx4)WV)kuGx$L#_%)RBAEKm3k D7~y&$ diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 5d5be18a..75e1bd8a 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -110,8 +110,13 @@ CChannelFader - <b>Channel Level:</b> 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. - <b>Nível do Canal:</b> Mostra o nível de áudio pré-fader deste canal. Todos os clientes ligados ao servidor terão atribuído um nível de áudio, o mesmo valor para cada cliente. + Channel Level + Nível do 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. + Mostra o nível de áudio pré-fader deste canal. Todos os clientes ligados ao servidor terão atribuído um nível de áudio, o mesmo valor para cada cliente. @@ -120,8 +125,13 @@ - <b>Mixer Fader:</b> 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. - <b>Fader da Mistura:</b> Ajusta o nível de áudio deste canal. Por cada cliente ligado ao servidor será atribuído um fader de áudio em todos os clientes, podendo cada um ajustar a sua mistura local. + Mixer Fader + Fader da Mistura + + + + 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. + Ajusta o nível de áudio deste canal. Por cada cliente ligado ao servidor será atribuído um fader de áudio em todos os clientes, podendo cada um ajustar a sua mistura local. @@ -130,8 +140,8 @@ - <b>Mute:</b> With the Mute checkbox, the audio channel can be muted. - <b>Mute:</b> Com a caixa de seleção Mute, o canal de áudio pode ser silenciado. + With the Mute checkbox, the audio channel can be muted. + Com a caixa de seleção Mute, o canal de áudio pode ser silenciado. @@ -140,8 +150,8 @@ - <b>Solo:</b> 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. - <b>Solo:</b> Com a caixa de seleção Solo, o canal de áudio pode ser definido como solo, o que significa que todos os outros canais, exceto o canal atual, serão silenciados. É possível definir mais que um canal no modo solo. + 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. + Com a caixa de seleção Solo, o canal de áudio pode ser definido como solo, o que significa que todos os outros canais, exceto o canal atual, serão silenciados. É possível definir mais que um canal no modo solo. @@ -150,8 +160,13 @@ - <b>Fader Tag:</b> 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. - <b>Identificador do Fader:</b> O Identificador do fader identifica o cliente ligado. O nome no identificador, a imagem do instrumento e a bandeira do país podem ser definidos no <i>Meu Perfil</i>. + Fader Tag + Identificador do Fader + + + + 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. + O Identificador do fader identifica o cliente ligado. O nome no identificador, a imagem do instrumento e a bandeira do país podem ser definidos no Meu Perfil. @@ -222,12 +237,14 @@ + Mute Mute + Solo Solo From f3db78683bc9af27d849a42facb23f54d96718ab Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 22:02:39 +0200 Subject: [PATCH 054/125] some more removing html code from translation strings --- src/chatdlg.cpp | 8 ++++---- src/res/translation/translation_de_DE.ts | 14 ++++++++++++-- src/res/translation/translation_es_ES.ts | 14 ++++++++++++-- src/res/translation/translation_fr_FR.ts | 14 ++++++++++++-- src/res/translation/translation_pt_PT.ts | 18 ++++++++++++++---- 5 files changed, 54 insertions(+), 14 deletions(-) diff --git a/src/chatdlg.cpp b/src/chatdlg.cpp index 1a06c53e..f2fd1769 100755 --- a/src/chatdlg.cpp +++ b/src/chatdlg.cpp @@ -34,14 +34,14 @@ CChatDlg::CChatDlg ( QWidget* parent, Qt::WindowFlags f ) : // Add help text to controls ----------------------------------------------- // chat window - txvChatWindow->setWhatsThis ( tr ( "Chat Window: The chat window " - "shows a history of all chat messages." ) ); + txvChatWindow->setWhatsThis ( "" + tr ( "Chat Window" ) + ": " + tr ( + "The chat window shows a history of all chat messages." ) ); txvChatWindow->setAccessibleName ( tr ( "Chat history" ) ); // input message text - edtLocalInputText->setWhatsThis ( tr ( "Input Message Text: Enter " - "the chat message text in the edit box and press enter to send the " + edtLocalInputText->setWhatsThis ( "" + tr ( "Input Message Text" ) + ": " + tr ( + "Enter the chat message text in the edit box and press enter to send the " "message to the server which distributes the message to all connected " "clients. Your message will then show up in the chat window." ) ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 83615401..acaf577b 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -246,7 +246,12 @@ CChatDlg - <b>Chat Window:</b> The chat window shows a history of all chat messages. + Chat Window + + + + + The chat window shows a history of all chat messages. @@ -256,7 +261,12 @@ - <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. + Input Message Text + + + + + Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 72fd4e91..2643b74a 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -246,7 +246,12 @@ CChatDlg - <b>Chat Window:</b> The chat window shows a history of all chat messages. + Chat Window + + + + + The chat window shows a history of all chat messages. @@ -256,7 +261,12 @@ - <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. + Input Message Text + + + + + Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 2384a4e2..8103ae5d 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -254,7 +254,12 @@ CChatDlg - <b>Chat Window:</b> The chat window shows a history of all chat messages. + Chat Window + + + + + The chat window shows a history of all chat messages. @@ -264,7 +269,12 @@ - <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. + Input Message Text + + + + + Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 75e1bd8a..ffa18e9e 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -254,8 +254,13 @@ CChatDlg - <b>Chat Window:</b> The chat window shows a history of all chat messages. - <b>Janela de Mensagens:</b> A janela de mensagens mostra um histórico de todas as mensagens enviadas durante a sessão. + Chat Window + Janela de Mensagens + + + + The chat window shows a history of all chat messages. + A janela de mensagens mostra um histórico de todas as mensagens enviadas durante a sessão. @@ -264,8 +269,13 @@ - <b>Input Message Text:</b> Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. - <b>Texto da Mensagem:</b> Introduza o texto da mensagem no campo de introdução e pressione <i>Enter</i> para enviar a mensagem ao servidor, que distribui a mensagem a todos os clientes ligados. A sua mensagem será exibida na janela de mensagens. + Input Message Text + Texto da Mensagem + + + + Enter the chat message text in the edit box and press enter to send the message to the server which distributes the message to all connected clients. Your message will then show up in the chat window. + Introduza o texto da mensagem no campo de introdução e pressione Enter para enviar a mensagem ao servidor, que distribui a mensagem a todos os clientes ligados. A sua mensagem será exibida na janela de mensagens. From 125abe14729d5357316720561cdc65abaa81b682 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 22:11:59 +0200 Subject: [PATCH 055/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 12 ++++++------ src/res/translation/translation_de_DE.ts | 22 +++++++++++++++++++++- src/res/translation/translation_es_ES.ts | 22 +++++++++++++++++++++- src/res/translation/translation_fr_FR.ts | 22 +++++++++++++++++++++- src/res/translation/translation_pt_PT.ts | 24 ++++++++++++++++++++++-- 5 files changed, 91 insertions(+), 11 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 31cda175..f90b96ad 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -34,23 +34,23 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, // Add help text to controls ----------------------------------------------- // jitter buffer - QString strJitterBufferSize = tr ( "Jitter Buffer Size: The jitter " - "buffer compensates for network and sound card timing jitters. The " + QString strJitterBufferSize = "" + tr ( "Jitter Buffer Size" ) + ": " + tr ( + "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).
    " + "(the longer the buffer, the higher the delay)." ) + "
    " + tr ( "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 on the bottom " "of the jitter buffer size faders. If the light turns to red, a buffer " - "overrun/underrun took place and the audio stream is interrupted.
    " + "overrun/underrun took place and the audio stream is interrupted." ) + "
    " + tr ( "The jitter buffer setting is therefore a trade-off between audio " - "quality and overall delay.
    " + "quality and overall delay." ) + "
    " + tr ( "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 " + "the Auto check is enabled, the jitter buffer size faders are " "disabled (they cannot be moved with the mouse)." ); QString strJitterBufferSizeTT = tr ( "In case the auto setting of the " diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index acaf577b..12c44f78 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -646,7 +646,27 @@ CClientSettingsDlg - <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). + Jitter Buffer Size + + + + + 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). + + + + + 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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted. + + + + + The jitter buffer setting is therefore a trade-off between audio quality and overall delay. + + + + + 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). diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 2643b74a..7ec01fd3 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -646,7 +646,27 @@ CClientSettingsDlg - <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). + Jitter Buffer Size + + + + + 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). + + + + + 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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted. + + + + + The jitter buffer setting is therefore a trade-off between audio quality and overall delay. + + + + + 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). diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 8103ae5d..410d4284 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -654,7 +654,27 @@ CClientSettingsDlg - <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). + Jitter Buffer Size + + + + + 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). + + + + + 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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted. + + + + + The jitter buffer setting is therefore a trade-off between audio quality and overall delay. + + + + + 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). diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index ffa18e9e..124e6bdc 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -654,8 +654,28 @@ CClientSettingsDlg - <b>Jitter Buffer Size:</b> 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).<br>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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted.<br>The jitter buffer setting is therefore a trade-off between audio quality and overall delay.<br>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 <i>Auto</i> check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - <b>Tamanho do Jitter Buffer:</b> O jitter buffer (ou buffer de instabilidade) compensa os desvios de temporização da rede e da placa de som. O tamanho desse jitter buffer influencia, portanto, a qualidade do fluxo de áudio (quantas interrupções ocorrem) e a latência geral (quanto maior o buffer, maior a latência).<br>O tamanho do jitter buffer pode ser escolhido manualmente para o cliente local e o servidor remoto. Para o jitter buffer local, as interrupções no fluxo de áudio são indicadas pela luz na parte inferior dos faders do jitter buffer. Se a luz ficar vermelha, ocorreu um excesso/déficit do buffer e o fluxo de áudio é interrompido.<br>A configuração do jitter buffer é, portanto, uma troca entre a qualidade do áudio e o atraso geral.<br>Está disponível uma configuração automática do tamanho do jitter buffer. Se a opção <i>Auto</i> estiver ativada, os jitter buffers do cliente local e do servidor remoto serão configurados automaticamente com base nas medições da instabilidade de sincronização da rede e da placa de som. Se a opção <i>Auto</i> estiver ativada, os faders do jitter buffer serão desativados (não poderão ser movidos manualmente). + Jitter Buffer Size + Tamanho do Jitter Buffer + + + + 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). + O jitter buffer (ou buffer de instabilidade) compensa os desvios de temporização da rede e da placa de som. O tamanho desse jitter buffer influencia, portanto, a qualidade do fluxo de áudio (quantas interrupções ocorrem) e a latência geral (quanto maior o buffer, maior a latência). + + + + 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 on the bottom of the jitter buffer size faders. If the light turns to red, a buffer overrun/underrun took place and the audio stream is interrupted. + O tamanho do jitter buffer pode ser escolhido manualmente para o cliente local e o servidor remoto. Para o jitter buffer local, as interrupções no fluxo de áudio são indicadas pela luz na parte inferior dos faders do jitter buffer. Se a luz ficar vermelha, ocorreu um excesso/déficit do buffer e o fluxo de áudio é interrompido. + + + + The jitter buffer setting is therefore a trade-off between audio quality and overall delay. + A configuração do jitter buffer é, portanto, uma troca entre a qualidade do áudio e o atraso geral. + + + + 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). + Está disponível uma configuração automática do tamanho do jitter buffer. Se a opção Auto estiver ativada, os jitter buffers do cliente local e do servidor remoto serão configurados automaticamente com base nas medições da instabilidade de sincronização da rede e da placa de som. Se a opção Auto estiver ativada, os faders do jitter buffer serão desativados (não poderão ser movidos manualmente). From 50c77933831c8432bde1a123a3a8bd3a909ded71 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Wed, 6 May 2020 22:15:43 +0200 Subject: [PATCH 056/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 8 ++++---- src/res/translation/translation_de_DE.ts | 2 +- src/res/translation/translation_es_ES.ts | 2 +- src/res/translation/translation_fr_FR.ts | 2 +- src/res/translation/translation_pt_PT.ts | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index f90b96ad..9be7a800 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -56,12 +56,12 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, QString strJitterBufferSizeTT = tr ( "In case 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 " + "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 by a red light" ) + + "dropouts of the local jitter buffer by a red light." ) + TOOLTIP_COM_END_TEXT; lblNetBuf->setWhatsThis ( strJitterBufferSize ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 12c44f78..f9970e68 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -671,7 +671,7 @@ - In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light + In case 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 by a red light. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 7ec01fd3..a8f291a5 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -671,7 +671,7 @@ - In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light + In case 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 by a red light. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 410d4284..d471eed8 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -679,7 +679,7 @@ - In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light + In case 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 by a red light. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 124e6bdc..9bc7e9ec 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -679,8 +679,8 @@ - In case 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 <b>tweak the audio delay/latency</b> it is recommended to disable the auto setting functionality and to <b>lower the jitter buffer size manually</b> 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 by a red light - Caso a configuração automática do jitter buffer estiver ativada, os buffers de rede do cliente local e do servidor remoto são configurados com um valor conservador para minimizar a probabilidade de perda de áudio. Para <b>ajustar o atraso/latência do áudio</b>, é recomendável desativar a funcionalidade de configuração automática e <b>diminuir o tamanho do jitter buffer manualmente</b> usando os controles deslizantes até que a quantidade de perdas de áudio lhe sejam pessoalmente aceitáveis. O indicador LED representará as interrupções de áudio do jitter buffer local através de uma luz vermelha + In case 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 by a red light. + Caso a configuração automática do jitter buffer estiver ativada, os buffers de rede do cliente local e do servidor remoto são configurados com um valor conservador para minimizar a probabilidade de perda de áudio. Para ajustar o atraso/latência do áudio, é recomendável desativar a funcionalidade de configuração automática e diminuir o tamanho do jitter buffer manualmente usando os controles deslizantes até que a quantidade de perdas de áudio lhe sejam pessoalmente aceitáveis. O indicador LED representará as interrupções de áudio do jitter buffer local através de uma luz vermelha. From fd2c8cec80f838138b0f59640c56924cfdad1fff Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Wed, 6 May 2020 23:24:58 +0200 Subject: [PATCH 057/125] Update debian/control --- distributions/debian/control | 1 + 1 file changed, 1 insertion(+) diff --git a/distributions/debian/control b/distributions/debian/control index c84207cb..10809972 100644 --- a/distributions/debian/control +++ b/distributions/debian/control @@ -11,6 +11,7 @@ Build-Depends: make, qt5-default, qtdeclarative5-dev, + qttools5-dev-tools, Standards-Version: 3.9.5 Homepage: http://llcon.sourceforge.net/ Vcs-Git: git://github.com/corrados/jamulus.git From 07c60a9bd161cebb0070fae9ae231fff229c8428 Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Wed, 6 May 2020 23:26:00 +0200 Subject: [PATCH 058/125] Update debian/rules --- distributions/debian/rules | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/distributions/debian/rules b/distributions/debian/rules index e7195b91..b98816c9 100755 --- a/distributions/debian/rules +++ b/distributions/debian/rules @@ -5,6 +5,10 @@ override_dh_auto_configure: qmake CONFIG+=noupcasename Jamulus.pro +override_dh_auto_build: + cd src/res/translation && lrelease *.ts + dh_auto_build + override_dh_usrlocal: echo $$(pwd) mkdir -p $$(pwd)/debian/jamulus/usr/bin/ From 387de2df9eee8221392aeac34e65713956755dbd Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 07:57:50 +0200 Subject: [PATCH 059/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 6 +++--- src/res/translation/translation_de_DE.ts | 14 ++++++++++++-- src/res/translation/translation_es_ES.ts | 14 ++++++++++++-- src/res/translation/translation_fr_FR.ts | 14 ++++++++++++-- src/res/translation/translation_pt_PT.ts | 18 ++++++++++++++---- 5 files changed, 53 insertions(+), 13 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 9be7a800..eb816f35 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -80,11 +80,11 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, ledNetw->setToolTip ( strJitterBufferSizeTT ); // sound card device - cbxSoundcard->setWhatsThis ( tr ( "Sound Card Device: The ASIO " - "driver (sound card) can be selected using " ) + APP_NAME + + cbxSoundcard->setWhatsThis ( "" + tr ( "Sound Card Device" ) + ": " + + tr ( "The ASIO driver (sound card) can be selected using " ) + APP_NAME + tr ( " under the Windows operating system. Under MacOS/Linux, no sound " "card selection is possible. If the selected ASIO driver is not valid " - "an error message is shown and the previous valid driver is selected.
    " + "an error message is shown and the previous valid driver is selected." ) + "
    " + tr ( "If the driver is selected during an active connection, the connection " "is stopped, the driver is changed and the connection is started again " "automatically." ) ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index f9970e68..95ce51ff 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -696,12 +696,22 @@
    - <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using + Sound Card Device + + + + + The ASIO driver (sound card) can be selected using - under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected. + + + + + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index a8f291a5..17e4fd45 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -696,12 +696,22 @@ - <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using + Sound Card Device + + + + + The ASIO driver (sound card) can be selected using - under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected. + + + + + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index d471eed8..ac947de9 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -704,12 +704,22 @@ - <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using + Sound Card Device + + + + + The ASIO driver (sound card) can be selected using - under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected. + + + + + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 9bc7e9ec..2e7198cf 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -704,13 +704,23 @@ - <b>Sound Card Device:</b> The ASIO driver (sound card) can be selected using - <b>Dispositivo da Placa de Som:</b> O driver ASIO (placa de som) pode ser selecionado usando o + Sound Card Device + Dispositivo da Placa de Som + + + + The ASIO driver (sound card) can be selected using + O driver ASIO (placa de som) pode ser selecionado usando o - under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected.<br>If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - no Windows. No MacOS/Linux, não é possível seleccionar a placa de som. Se o driver ASIO selecionado não for válido, uma mensagem de erro será exibida e o driver válido anterior será selecionado.<br>Se o driver for selecionado durante uma ligação ativa, a ligação será interrompida, o driver será alterado e a ligação reiniciada automaticamente. + under the Windows operating system. Under MacOS/Linux, no sound card selection is possible. If the selected ASIO driver is not valid an error message is shown and the previous valid driver is selected. + no Windows. No MacOS/Linux, não é possível seleccionar a placa de som. Se o driver ASIO selecionado não for válido, uma mensagem de erro será exibida e o driver válido anterior será selecionado. + + + + If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. + Se o driver for selecionado durante uma ligação ativa, a ligação será interrompida, o driver será alterado e a ligação reiniciada automaticamente. From 1f59eb0b324ff759b1ff083b5d0e6078c87492f6 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 08:04:24 +0200 Subject: [PATCH 060/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 10 +++++----- src/res/translation/translation_de_DE.ts | 19 +++++++++++++++++-- src/res/translation/translation_es_ES.ts | 19 +++++++++++++++++-- src/res/translation/translation_fr_FR.ts | 19 +++++++++++++++++-- src/res/translation/translation_pt_PT.ts | 23 +++++++++++++++++++---- 5 files changed, 75 insertions(+), 15 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index eb816f35..78bcaa36 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -93,19 +93,19 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, #ifdef _WIN32 // set Windows specific tool tip - cbxSoundcard->setToolTip ( tr ( "In case the ASIO4ALL driver is used, " + cbxSoundcard->setToolTip ( tr ( "In case the ASIO4ALL driver is used, " "please note that this driver usually introduces approx. 10-30 ms of " "additional audio delay. Using a sound card with a native ASIO driver " - "is therefore recommended.
    If you are using the kX ASIO " + "is therefore recommended." ) + "
    " + tr ( "If you are using the kX ASIO " "driver, make sure to connect the ASIO inputs in the kX DSP settings " "panel." ) + TOOLTIP_COM_END_TEXT ); #endif // sound card input/output channel mapping - QString strSndCrdChanMapp = tr ( "Sound Card Channel Mapping: " - "In case the selected sound card device offers more than one " + QString strSndCrdChanMapp = "" + tr ( "Sound Card Channel Mapping" ) + ": " + + tr ( "In case the selected sound card device offers more than one " "input or output channel, the Input Channel Mapping and Output " - "Channel Mapping settings are visible.
    " + "Channel Mapping settings are visible." ) + "
    " + tr ( "For each " ) + APP_NAME + tr ( " input/output channel (Left and " "Right channel) a different actual sound card channel can be " "selected." ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 95ce51ff..661c72a4 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -721,12 +721,27 @@
    - In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + In case the ASIO4ALL driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended. + + + + + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each + Sound Card Channel Mapping + + + + + In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. + + + + + For each diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 17e4fd45..cac3f2d9 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -721,12 +721,27 @@ - In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + In case the ASIO4ALL driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended. + + + + + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each + Sound Card Channel Mapping + + + + + In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. + + + + + For each diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index ac947de9..cbb1333c 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -729,12 +729,27 @@ - In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + In case the ASIO4ALL driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended. + + + + + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each + Sound Card Channel Mapping + + + + + In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. + + + + + For each diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 2e7198cf..118b92f2 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -729,13 +729,28 @@ - In case the <b>ASIO4ALL</b> driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended.<br>If you are using the <b>kX ASIO</b> driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - Caso o driver <b>ASIO4ALL</b> seja usado, note que esse driver geralmente introduz aprox. 10-30 ms de atraso de áudio adicional. Dado isto, é recomendável usar uma placa de som com um driver ASIO nativo.<br>Se estiver a usar o driver <b>kX ASIO</b>, certifique-se de ligar as entradas ASIO no painel de configurações do kX DSP. + In case the ASIO4ALL driver is used, please note that this driver usually introduces approx. 10-30 ms of additional audio delay. Using a sound card with a native ASIO driver is therefore recommended. + Caso o driver ASIO4ALL seja usado, note que esse driver geralmente introduz aprox. 10-30 ms de atraso de áudio adicional. Dado isto, é recomendável usar uma placa de som com um driver ASIO nativo. + + + + If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. + Se estiver a usar o driver kX ASIO, certifique-se de ligar as entradas ASIO no painel de configurações do kX DSP. - <b>Sound Card Channel Mapping:</b> In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible.<br>For each - <b>Mapeamento de Canais da Placa de Som:</b> Caso o dispositivo selecionado da placa de som ofereça mais que um canal de entrada ou saída, as configurações de Mapeamento de canais de entrada e de saída estarão visíveis.<br>Para cada canal de entrada/saída do + Sound Card Channel Mapping + Mapeamento de Canais da Placa de Som + + + + In case the selected sound card device offers more than one input or output channel, the Input Channel Mapping and Output Channel Mapping settings are visible. + Caso o dispositivo selecionado da placa de som ofereça mais que um canal de entrada ou saída, as configurações de Mapeamento de canais de entrada e de saída estarão visíveis. + + + + For each + Para cada canal de entrada/saída do From c826e0050baafa678844badedbb95fc51b7af9f4 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 08:11:14 +0200 Subject: [PATCH 061/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 12 +++++------ src/res/translation/translation_de_DE.ts | 21 +++++++++++++++--- src/res/translation/translation_es_ES.ts | 21 +++++++++++++++--- src/res/translation/translation_fr_FR.ts | 21 +++++++++++++++--- src/res/translation/translation_pt_PT.ts | 27 ++++++++++++++++++------ 5 files changed, 81 insertions(+), 21 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 78bcaa36..7b853950 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -122,8 +122,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, cbxROutChan->setAccessibleName ( tr ( "Right output channel selection combo box" ) ); // enable OPUS64 - chbEnableOPUS64->setWhatsThis ( tr ( "Enable Small Network Buffers: If enabled, " - "the support for very small network audio packets is activated. Very small " + chbEnableOPUS64->setWhatsThis ( "" + tr ( "Enable Small Network Buffers" ) + ": " + tr ( + "If enabled, the support for very small network audio packets is activated. Very small " "network packets are only actually used if the sound card buffer delay is smaller than " ) + QString().setNum ( DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES ) + tr ( " samples. The " "smaller the network buffers, the smaller the audio latency. But at the same time " @@ -185,14 +185,14 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, butDriverSetup->setToolTip ( strSndCrdBufDelayTT ); // fancy skin - chbGUIDesignFancy->setWhatsThis ( tr ( "Fancy Skin: If enabled, " - "a fancy skin will be applied to the main window." ) ); + chbGUIDesignFancy->setWhatsThis ( "" + tr ( "Fancy Skin" ) + ": " + tr ( + "If enabled, a fancy skin will be applied to the main window." ) ); chbGUIDesignFancy->setAccessibleName ( tr ( "Fancy skin check box" ) ); // display channel levels - chbDisplayChannelLevels->setWhatsThis ( tr ( "Display Channel Levels: " - "If enabled, each client channel will display a pre-fader level bar." ) ); + chbDisplayChannelLevels->setWhatsThis ( "" + tr ( "Display Channel Levels" ) + ": " + + tr ( "If enabled, each client channel will display a pre-fader level bar." ) ); chbDisplayChannelLevels->setAccessibleName ( tr ( "Display channel levels check box" ) ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 661c72a4..75fb0cf2 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -771,7 +771,12 @@ - <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than + Enable Small Network Buffers + + + + + If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than @@ -836,7 +841,12 @@ - <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. + Fancy Skin + + + + + If enabled, a fancy skin will be applied to the main window. @@ -846,7 +856,12 @@ - <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. + Display Channel Levels + Zeige Kanalsignalpegel + + + + If enabled, each client channel will display a pre-fader level bar. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index cac3f2d9..555770f6 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -771,7 +771,12 @@ - <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than + Enable Small Network Buffers + + + + + If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than @@ -836,7 +841,12 @@ - <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. + Fancy Skin + + + + + If enabled, a fancy skin will be applied to the main window. @@ -846,7 +856,12 @@ - <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. + Display Channel Levels + + + + + If enabled, each client channel will display a pre-fader level bar. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index cbb1333c..0971878a 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -779,7 +779,12 @@ - <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than + Enable Small Network Buffers + + + + + If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than @@ -844,7 +849,12 @@ - <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. + Fancy Skin + + + + + If enabled, a fancy skin will be applied to the main window. @@ -854,7 +864,12 @@ - <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. + Display Channel Levels + + + + + If enabled, each client channel will display a pre-fader level bar. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 118b92f2..0d84a3e4 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -779,8 +779,13 @@ - <b>Enable Small Network Buffers:</b> If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than - <b>Ativar Buffers de Rede Pequenos:</b> Se ativado, o suporte para pacotes de áudio de rede muito pequenos é ativado. Pacotes de rede muito pequenos serão apenas realmente usados se o atraso do buffer da placa de som for menor que + Enable Small Network Buffers + Activar Buffers de Rede Pequenos + + + + If enabled, the support for very small network audio packets is activated. Very small network packets are only actually used if the sound card buffer delay is smaller than + Se ativado, o suporte para pacotes de áudio de rede muito pequenos é ativado. Pacotes de rede muito pequenos serão apenas realmente usados se o atraso do buffer da placa de som for menor que @@ -844,8 +849,13 @@ - <b>Fancy Skin:</b> If enabled, a fancy skin will be applied to the main window. - <b>Skin Sofisticada:</b> Se ativada, uma skin sofisticada será aplicada à janela principal. + Fancy Skin + Skin Sofisticada + + + + If enabled, a fancy skin will be applied to the main window. + Se ativada, uma skin sofisticada será aplicada à janela principal. @@ -854,8 +864,13 @@ - <b>Display Channel Levels:</b> If enabled, each client channel will display a pre-fader level bar. - <b>Mostrar Níveis de Canais:</b> Se ativado, cada canal de cliente exibirá uma barra de nível pré-fader. + Display Channel Levels + Mostrar Níveis de Canais + + + + If enabled, each client channel will display a pre-fader level bar. + Se ativado, cada canal de cliente exibirá uma barra de nível pré-fader. From f9660616706d6206ab08b3fff7d75495d4df03a4 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 08:20:18 +0200 Subject: [PATCH 062/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 16 ++++----- src/res/translation/translation_de_DE.ts | 38 +++++++++++++++++--- src/res/translation/translation_es_ES.ts | 38 +++++++++++++++++--- src/res/translation/translation_fr_FR.ts | 38 +++++++++++++++++--- src/res/translation/translation_pt_PT.ts | 46 +++++++++++++++++++----- 5 files changed, 148 insertions(+), 28 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 7b853950..1e25d6d9 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -197,7 +197,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, chbDisplayChannelLevels->setAccessibleName ( tr ( "Display channel levels check box" ) ); // audio channels - QString strAudioChannels = tr ( "Audio Channels: " + QString strAudioChannels = "" + tr ( "Audio Channels" ) + ": " + tr ( "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 the mono-in/stereo-out mode " @@ -206,10 +206,10 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, "sound card puts 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.
    " + "stereo." ) + "
    " + tr ( "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.
    " + "exceed the available bandwidth of your internet connection." ) + "
    " + tr ( "In case of the 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." ); @@ -219,7 +219,7 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, cbxAudioChannels->setAccessibleName ( tr ( "Audio channels combo box" ) ); // audio quality - QString strAudioQuality = tr ( "Audio Quality: " + QString strAudioQuality = "" + tr ( "Audio Quality" ) + ": " + tr ( "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 " @@ -231,8 +231,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, cbxAudioQuality->setAccessibleName ( tr ( "Audio quality combo box" ) ); // new client fader level - QString strNewClientLevel = tr ( "New Client Level: The " - "new client level setting defines the fader level of a new " + QString strNewClientLevel = "" + tr ( "New Client Level" ) + ": " + + tr ( "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 " @@ -243,8 +243,8 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, edtNewClientLevel->setAccessibleName ( tr ( "New client level edit box" ) ); // central server address - QString strCentrServAddr = tr ( "Central Server Address: The " - "central server address is the IP address or URL of the central server " + QString strCentrServAddr = "" + tr ( "Central Server Address" ) + ": " + + tr ( "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." ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 75fb0cf2..4402f5d4 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -871,7 +871,22 @@
    - <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. + Audio Channels + Audiokanäle + + + + 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 the 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 for the case that the sound card puts 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. + + + + + 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. + + + + + In case of the 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. @@ -881,7 +896,12 @@ - <b>Audio Quality:</b> 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. + Audio Quality + Audioqualität + + + + 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. @@ -891,7 +911,12 @@ - <b>New Client Level:</b> 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. + New Client Level + + + + + 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. @@ -901,7 +926,12 @@ - <b>Central Server Address:</b> 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. + Central Server Address + + + + + 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. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 555770f6..5dce428b 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -871,7 +871,22 @@ - <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. + Audio Channels + + + + + 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 the 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 for the case that the sound card puts 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. + + + + + 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. + + + + + In case of the 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. @@ -881,7 +896,12 @@ - <b>Audio Quality:</b> 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. + Audio Quality + + + + + 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. @@ -891,7 +911,12 @@ - <b>New Client Level:</b> 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. + New Client Level + + + + + 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. @@ -901,7 +926,12 @@ - <b>Central Server Address:</b> 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. + Central Server Address + + + + + 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. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 0971878a..d5bfe937 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -879,7 +879,22 @@ - <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. + Audio Channels + + + + + 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 the 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 for the case that the sound card puts 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. + + + + + 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. + + + + + In case of the 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. @@ -889,7 +904,12 @@ - <b>Audio Quality:</b> 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. + Audio Quality + + + + + 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. @@ -899,7 +919,12 @@ - <b>New Client Level:</b> 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. + New Client Level + + + + + 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. @@ -909,7 +934,12 @@ - <b>Central Server Address:</b> 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. + Central Server Address + + + + + 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. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 0d84a3e4..6b374567 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -879,8 +879,23 @@ - <b>Audio Channels:</b> 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 the 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 for the case that the sound card puts 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.<br>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.<br>In case of the 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. - <b>Canais de Áudio:</b> Selecione o número de canais de áudio a serem usados. Existem três modos disponíveis. Os modos mono e estéreo usam um e dois canais de áudio, respectivamente. No modo mono-in/stereo-out, o sinal de áudio enviado ao servidor é mono, mas o sinal de retorno é estéreo. Isso é útil quando a placa de som coloca o instrumento e o microfone em canais diferentes. Nesse caso, os dois sinais de entrada podem ser misturados num canal mono, mas a mistura do servidor pode ser ouvida em estéreo.<br>Ativar o modo de transmissão estéreo aumenta a taxa do fluxo de dados. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet.<br>No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. + Audio Channels + Canais de Áudio + + + + 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 the 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 for the case that the sound card puts 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. + Selecione o número de canais de áudio a serem usados. Existem três modos disponíveis. Os modos mono e estéreo usam um e dois canais de áudio, respectivamente. No modo mono-in/stereo-out, o sinal de áudio enviado ao servidor é mono, mas o sinal de retorno é estéreo. Isso é útil quando a placa de som coloca o instrumento e o microfone em canais diferentes. Nesse caso, os dois sinais de entrada podem ser misturados num canal mono, mas a mistura do servidor pode ser ouvida em estéreo. + + + + 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. + Ativar o modo de transmissão estéreo aumenta a taxa do fluxo de dados. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet. + + + + In case of the 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. + No modo de transmissão estéreo, nenhuma seleção de canal de áudio para o efeito de reverberação estará disponível na janela principal, pois o efeito é aplicado em ambos os canais. @@ -889,8 +904,13 @@ - <b>Audio Quality:</b> 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. - <b>Qualidade de Áudio:</b> Selecione a qualidade de áudio desejada. Pode ser selecionada uma qualidade de áudio baixa, normal ou alta. Quanto maior a qualidade do áudio, maior a taxa de dados do fluxo de áudio. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet. + Audio Quality + Qualidade de Áudio + + + + 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. + Selecione a qualidade de áudio desejada. Pode ser selecionada uma qualidade de áudio baixa, normal ou alta. Quanto maior a qualidade do áudio, maior a taxa de dados do fluxo de áudio. Verifique que a taxa de transmissão não excede a largura de banda disponível da sua ligação à Internet. @@ -899,8 +919,13 @@ - <b>New Client Level:</b> 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. - <b>Nível de Novo Cliente:</b> A configuração de nível de novo cliente define, em percentagem, o nível do fader de um novo cliente ligado. Por exemplo, se um cliente novo se ligar ao servidor atual, o seu canal terá o nível inicial do fader especificado, excepto quando um diferente nível do fader de uma ligação anterior desse mesmo cliente já tenha sido definido. + New Client Level + Nível de Novo Cliente + + + + 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. + A configuração de nível de novo cliente define, em percentagem, o nível do fader de um novo cliente ligado. Por exemplo, se um cliente novo se ligar ao servidor atual, o seu canal terá o nível inicial do fader especificado, excepto quando um diferente nível do fader de uma ligação anterior desse mesmo cliente já tenha sido definido. @@ -909,8 +934,13 @@ - <b>Central Server Address:</b> 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. - <b>Endereço do servidor central:</b> O endereço do servidor central é o endereço IP ou URL do servidor central a partir do qual é gerida a lista de servidores do diálogo de ligação. Com a configuração do endereço do servidor central, é possível selecionar um dos servidores centrais padrão ou especificar um endereço manual. + Central Server Address + Endereço do servidor 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. + O endereço do servidor central é o endereço IP ou URL do servidor central a partir do qual é gerida a lista de servidores do diálogo de ligação. Com a configuração do endereço do servidor central, é possível selecionar um dos servidores centrais padrão ou especificar um endereço manual. From d457b52255b2af9f1d0d5ac567dd782fb449e1a1 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 08:26:19 +0200 Subject: [PATCH 063/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 8 ++++---- src/res/translation/translation_de_DE.ts | 17 ++++++++++++++++- src/res/translation/translation_es_ES.ts | 17 ++++++++++++++++- src/res/translation/translation_fr_FR.ts | 17 ++++++++++++++++- src/res/translation/translation_pt_PT.ts | 19 +++++++++++++++++-- 5 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 1e25d6d9..6afb2094 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -257,15 +257,15 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, edtCentralServerAddress->setAccessibleName ( tr ( "Central server address line edit" ) ); // current connection status parameter - QString strConnStats = tr ( "Current Connection Status " - "Parameter: The ping time is the time required for the audio " + QString strConnStats = "" + tr ( "Current Connection Status " + "Parameter" ) + ": " + tr ( "The ping time is the time required for the audio " "stream to travel from the client to the server and backwards. 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.
    " + "sufficient." ) + "
    " + tr ( "The overall delay is calculated from the current ping time and the " - "delay which is introduced by the current buffer settings.
    " + "delay which is introduced by the current buffer settings." ) + "
    " + tr ( "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 " diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 4402f5d4..1d4a26a7 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -946,7 +946,22 @@
    - <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). + Current Connection Status Parameter + + + + + The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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. + + + + + The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. + + + + + 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). diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 5dce428b..53eeddb5 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -946,7 +946,22 @@ - <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). + Current Connection Status Parameter + + + + + The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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. + + + + + The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. + + + + + 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). diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index d5bfe937..73fcb5bd 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -954,7 +954,22 @@ - <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). + Current Connection Status Parameter + + + + + The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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. + + + + + The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. + + + + + 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). diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 6b374567..f12ae40e 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -954,8 +954,23 @@ - <b>Current Connection Status Parameter:</b> The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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.<br>The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings.<br>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). - <b>Parâmetros do Estado da Ligação:</b> A latência da ligação é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede. Esta latência deve ser tão baixa quanto 20-30 ms. Se esta latência for maior (por exemplo, 50-60 ms), a distância até ao servidor é muito grande ou sua ligação à Internet não é suficiente.<br>A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer.<br>A taxa de transmissão 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 ligação à Internet usando, por exemplo, o speedtest.net). + Current Connection Status Parameter + Parâmetros do Estado da Ligação + + + + The ping time is the time required for the audio stream to travel from the client to the server and backwards. 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. + A latência da ligação é o tempo necessário para o fluxo de áudio viajar do cliente para o servidor e vice-versa. Esta latência é introduzida pela rede. Esta latência deve ser tão baixa quanto 20-30 ms. Se esta latência for maior (por exemplo, 50-60 ms), a distância até ao servidor é muito grande ou sua ligação à Internet não é suficiente. + + + + The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. + A latência geral é calculada a partir da latência da ligação atual e do atraso introduzido pelas configurações do buffer. + + + + 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). + A taxa de transmissão 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 ligação à Internet usando, por exemplo, o speedtest.net). From df9869127cec1c226659e44948efae110884ff7d Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 08:39:46 +0200 Subject: [PATCH 064/125] some more removing html code from translation strings --- src/clientsettingsdlg.cpp | 30 ++++++------ src/res/translation/translation_de_DE.ts | 53 ++++++++++++++++++-- src/res/translation/translation_es_ES.ts | 53 ++++++++++++++++++-- src/res/translation/translation_fr_FR.ts | 53 ++++++++++++++++++-- src/res/translation/translation_pt_PT.ts | 61 ++++++++++++++++++++---- 5 files changed, 215 insertions(+), 35 deletions(-) diff --git a/src/clientsettingsdlg.cpp b/src/clientsettingsdlg.cpp index 6afb2094..b0153101 100755 --- a/src/clientsettingsdlg.cpp +++ b/src/clientsettingsdlg.cpp @@ -132,35 +132,35 @@ CClientSettingsDlg::CClientSettingsDlg ( CClient* pNCliP, QWidget* parent, chbEnableOPUS64->setAccessibleName ( tr ( "Enable small network buffers check box" ) ); // sound card buffer delay - QString strSndCrdBufDelay = tr ( "Sound Card Buffer Delay: The " - "buffer delay setting is a fundamental setting of the " ) + + QString strSndCrdBufDelay = "" + tr ( "Sound Card Buffer Delay" ) + ": " + + tr ( "The buffer delay setting is a fundamental setting of the " ) + APP_NAME + tr ( " software. This setting has influence on many " - "connection properties.
    " - "Three buffer sizes are supported:" - "
      " - "
    • 64 samples: This is the preferred setting since it gives lowest " - "latency but does not work with all sound cards.
    • " - "
    • 128 samples: This setting should work on most of the available " - "sound cards.
    • " - "
    • 256 samples: This setting should only be used if only a very slow " - "computer or a slow internet connection is available.
    • " - "
    " + "connection properties." ) + "
    " + tr ( + "Three buffer sizes are supported" ) + + ":
      " + "
    • " + tr ( "64 samples: This is the preferred setting since it gives lowest " + "latency but does not work with all sound cards." ) + "
    • " + "
    • " + tr ( "128 samples: This setting should work on most of the available " + "sound cards." ) + "
    • " + "
    • " + tr ( "256 samples: This setting should only be used if only a very slow " + "computer or a slow internet connection is available." ) + "
    • " + "
    " + tr ( "Some sound card driver do not allow the buffer delay to be changed " "from within the " ) + APP_NAME + tr ( " 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.
    " + "use the Jack configuration tool to change the buffer size." ) + "
    " + tr ( "If no buffer size is selected and all settings are disabled, an " "unsupported buffer size is used by the driver. The " ) + APP_NAME + tr ( " software will still work with this setting but with restricted " - "performannce.
    " + "performannce." ) + "
    " + tr ( "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 red light in the status indicator (drop " "outs) and the higher the upload rate and the lower the overall " - "delay.
    " + "delay." ) + "
    " + tr ( "The buffer setting is therefore a trade-off between audio " "quality and overall delay." ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 1d4a26a7..91dec646 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -791,22 +791,67 @@
    - <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the + Sound Card Buffer Delay + + + + + The buffer delay setting is a fundamental setting of the - software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the + software. This setting has influence on many connection properties. + + + + + Three buffer sizes are supported + + + + + 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. + + + + + 128 samples: This setting should work on most of the available sound cards. + + + + + 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. + + + + + Some sound card driver do not allow the buffer delay to be changed from within the - 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + 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. + + + + + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. + software will still work with this setting but with restricted performannce. + + + + + 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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. + + + + + The buffer setting is therefore a trade-off between audio quality and overall delay. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 53eeddb5..12523b3c 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -791,22 +791,67 @@ - <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the + Sound Card Buffer Delay + + + + + The buffer delay setting is a fundamental setting of the - software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the + software. This setting has influence on many connection properties. + + + + + Three buffer sizes are supported + + + + + 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. + + + + + 128 samples: This setting should work on most of the available sound cards. + + + + + 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. + + + + + Some sound card driver do not allow the buffer delay to be changed from within the - 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + 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. + + + + + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. + software will still work with this setting but with restricted performannce. + + + + + 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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. + + + + + The buffer setting is therefore a trade-off between audio quality and overall delay. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 73fcb5bd..5fe46fee 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -799,22 +799,67 @@ - <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the + Sound Card Buffer Delay + + + + + The buffer delay setting is a fundamental setting of the - software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the + software. This setting has influence on many connection properties. + + + + + Three buffer sizes are supported + + + + + 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. + + + + + 128 samples: This setting should work on most of the available sound cards. + + + + + 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. + + + + + Some sound card driver do not allow the buffer delay to be changed from within the - 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + 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. + + + + + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. + software will still work with this setting but with restricted performannce. + + + + + 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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. + + + + + The buffer setting is therefore a trade-off between audio quality and overall delay. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index f12ae40e..347dc2c6 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -799,23 +799,68 @@ - <b>Sound Card Buffer Delay:</b> The buffer delay setting is a fundamental setting of the - <b>Atraso do Buffer da Placa de Som:</b> A configuração do atraso do buffer (buffer delay) é uma configuração fundamental do cliente + Sound Card Buffer Delay + Atraso do Buffer da Placa de Som + + + + The buffer delay setting is a fundamental setting of the + A configuração do atraso do buffer (buffer delay) é uma configuração fundamental do cliente - software. This setting has influence on many connection properties.<br>Three buffer sizes are supported:<ul><li>64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards.</li><li>128 samples: This setting should work on most of the available sound cards.</li><li>256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available.</li></ul>Some sound card driver do not allow the buffer delay to be changed from within the - . Esta configuração tem influência em muitas propriedades da ligação.<br>Três tamanhos de buffer são suportados:<ul><li>64 amostras: esta é a configuração preferida, pois oferece menor latência, mas não funciona com todas as placas de som.</li><li>128 amostras: esta configuração deve funcionar na maioria das placas de som disponíveis.</li><li>256 amostras: esta configuração deve ser usada se apenas estiver disponível um computador muito lento ou uma ligação lenta à Internet.</li></ul>Alguns drivers da placa de som não permitem que o atraso do buffer seja alterado pelo cliente + software. This setting has influence on many connection properties. + . Esta configuração tem influência em muitas propriedades da ligação. + + + + Three buffer sizes are supported + Três tamanhos de buffer são suportados + + + + 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. + 64 amostras: esta é a configuração preferida, pois oferece menor latência, mas não funciona com todas as placas de som. + + + + 128 samples: This setting should work on most of the available sound cards. + 128 amostras: esta configuração deve funcionar na maioria das placas de som disponíveis. + + + + 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. + 256 amostras: esta configuração deve ser usada se apenas estiver disponível um computador muito lento ou uma ligação lenta à Internet. + + + + Some sound card driver do not allow the buffer delay to be changed from within the + Alguns drivers da placa de som não permitem que o atraso do buffer seja alterado pelo cliente - 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.<br>If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - . Nesse caso, a configuração de atraso do buffer estará desativada. Para alterar o atraso do buffer, essa configuração deve ser alterada no driver da placa de som. No Windows, pressione o botão <i>Configuração do Driver</i> para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração <i>Jack</i> para alterar o atraso do buffer.<br>Se nenhum atraso do buffer estiver selecionado e todas as configurações estiverem desativadas, um atraso do buffer não suportado será usado pelo driver. O cliente + 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. + . Nesse caso, a configuração de atraso do buffer estará desativada. Para alterar o atraso do buffer, essa configuração deve ser alterada no driver da placa de som. No Windows, pressione o botão Configuração do Driver para abrir o painel de configurações do driver. No Linux, use a ferramenta de configuração Jack para alterar o atraso do buffer. + + + + If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The + Se nenhum atraso do buffer estiver selecionado e todas as configurações estiverem desativadas, um atraso do buffer não suportado será usado pelo driver. O cliente - software will still work with this setting but with restricted performannce.<br>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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay.<br>The buffer setting is therefore a trade-off between audio quality and overall delay. - ainda funcionará com essa configuração, mas com desempenho restrito.<br>O atraso do buffer influencia o estado da ligação, a taxa de upload atual e a latência geral. Quanto menor o atraso do buffer, maior a probabilidade de a luz vermelha no indicador de estado (interrupções), maior a taxa de upload e menor a latência geral.<br>A configuração do buffer é, portanto, uma troca entre qualidade de áudio e latência geral. + software will still work with this setting but with restricted performannce. + ainda funcionará com essa configuração, mas com desempenho restrito. + + + + 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 red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. + O atraso do buffer influencia o estado da ligação, a taxa de upload atual e a latência geral. Quanto menor o atraso do buffer, maior a probabilidade de a luz vermelha no indicador de estado (interrupções), maior a taxa de upload e menor a latência geral. + + + + The buffer setting is therefore a trade-off between audio quality and overall delay. + A configuração do buffer é, portanto, uma troca entre qualidade de áudio e latência geral. From a6fd5e75c30d6dc4caa220369203081e0d520ddd Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 08:51:16 +0200 Subject: [PATCH 065/125] some more removing html code from translation strings --- src/connectdlg.cpp | 26 ++++++------- src/res/translation/translation_de_DE.ts | 37 +++++++++++++++--- src/res/translation/translation_es_ES.ts | 37 +++++++++++++++--- src/res/translation/translation_fr_FR.ts | 37 +++++++++++++++--- src/res/translation/translation_pt_PT.ts | 49 ++++++++++++++++++------ 5 files changed, 143 insertions(+), 43 deletions(-) diff --git a/src/connectdlg.cpp b/src/connectdlg.cpp index fc5ddc27..9a54755f 100755 --- a/src/connectdlg.cpp +++ b/src/connectdlg.cpp @@ -44,13 +44,13 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList, // Add help text to controls ----------------------------------------------- // server list - lvwServers->setWhatsThis ( tr ( "Server List: 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 " + lvwServers->setWhatsThis ( "" + tr ( "Server List" ) + ": " + tr ( + "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.
    " + "Permanent servers are shown in bold font." ) + "
    " + tr ( "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." ) ); @@ -58,12 +58,12 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList, lvwServers->setAccessibleName ( tr ( "Server list view" ) ); // server address - QString strServAddrH = tr ( "Server Address: The IP address or URL " - "of the server running the " ) + APP_NAME + tr ( " server software " - "must be set here. An optional port number can be added after the IP " - "address or URL using a comma as a separator, e.g, " + QString strServAddrH = "" + tr ( "Server Address" ) + ": " + tr ( + "The IP address or URL of the server running the " ) + APP_NAME + tr ( + " server software must be set here. An optional port number can be added after the IP " + "address or URL using a comma as a separator, e.g, " "example.org:" ) + - QString().setNum ( LLCON_DEFAULT_PORT_NUMBER ) + tr ( ". A list of " + QString().setNum ( LLCON_DEFAULT_PORT_NUMBER ) + tr ( ". A list of " "the most recent used server IP addresses or URLs is available for " "selection." ); @@ -75,13 +75,13 @@ CConnectDlg::CConnectDlg ( const bool bNewShowCompleteRegList, "IP address or URL. It also stores old URLs in the combo box list." ) ); // filter - edtFilter->setWhatsThis ( tr ( "Filter: The server list is filered " - "by the given text. Note that the filter is case insensitive." ) ); + edtFilter->setWhatsThis ( "" + tr ( "Filter" ) + ": " + tr ( "The server " + "list is filered by the given text. Note that the filter is case insensitive." ) ); edtFilter->setAccessibleName ( tr ( "Filter edit box" ) ); // show all mucisians - chbExpandAll->setWhatsThis ( tr ( "Show All Musicians: If you check " - "this check box, the musicians of all servers are shown. If you " + chbExpandAll->setWhatsThis ( "" + tr ( "Show All Musicians" ) + ": " + tr ( + "If you check this check box, the musicians of all servers are shown. If you " "uncheck the check box, all list view items are collapsed.") ); chbExpandAll->setAccessibleName ( tr ( "Show all musicians check box" ) ); diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 91dec646..1f773ad9 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -1263,7 +1263,17 @@ CConnectDlg - <b>Server List:</b> 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.<br>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. + Server List + + + + + 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. + + + + + 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. @@ -1273,17 +1283,22 @@ - <b>Server Address:</b> The IP address or URL of the server running the + Server Address + + + + + The IP address or URL of the server running the - server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, example.org: - </i>. A list of the most recent used server IP addresses or URLs is available for selection. + . A list of the most recent used server IP addresses or URLs is available for selection. @@ -1298,7 +1313,12 @@ - <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. + Filter + + + + + The server list is filered by the given text. Note that the filter is case insensitive. @@ -1308,7 +1328,12 @@ - <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. + Show All Musicians + + + + + If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 12523b3c..e23dfe02 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -1263,7 +1263,17 @@ CConnectDlg - <b>Server List:</b> 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.<br>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. + Server List + + + + + 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. + + + + + 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. @@ -1273,17 +1283,22 @@ - <b>Server Address:</b> The IP address or URL of the server running the + Server Address + + + + + The IP address or URL of the server running the - server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, example.org: - </i>. A list of the most recent used server IP addresses or URLs is available for selection. + . A list of the most recent used server IP addresses or URLs is available for selection. @@ -1298,7 +1313,12 @@ - <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. + Filter + + + + + The server list is filered by the given text. Note that the filter is case insensitive. @@ -1308,7 +1328,12 @@ - <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. + Show All Musicians + + + + + If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 5fe46fee..fe837f74 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -1271,7 +1271,17 @@ CConnectDlg - <b>Server List:</b> 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.<br>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. + Server List + + + + + 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. + + + + + 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. @@ -1281,17 +1291,22 @@ - <b>Server Address:</b> The IP address or URL of the server running the + Server Address + + + + + The IP address or URL of the server running the - server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, example.org: - </i>. A list of the most recent used server IP addresses or URLs is available for selection. + . A list of the most recent used server IP addresses or URLs is available for selection. @@ -1306,7 +1321,12 @@ - <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. + Filter + Filtre + + + + The server list is filered by the given text. Note that the filter is case insensitive. @@ -1316,7 +1336,12 @@ - <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. + Show All Musicians + Afficher tous les musiciens + + + + If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 347dc2c6..d86afa9f 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -1271,8 +1271,18 @@ CConnectDlg - <b>Server List:</b> 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.<br>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. - <b>Lista de servidores:</b> A lista de servidores mostra a os servidores disponíveis registados no servidor central. Selecione um servidor da lista e pressione o botão Ligar para se ligar a este servidor. Como alternativa, clique duas vezes num servidor da lista para se ligar ao mesmo. Se um servidor estiver ocupado, uma lista dos músicos ligados estará disponível expandindo o item da lista. Os servidores permanentes são mostrados em negrito.<br>Observe que pode demorar algum tempo para obter a lista de servidores do servidor central. Se nenhum endereço de servidor central válido for especificado nas definições, nenhuma lista de servidores estará disponível. + Server List + Lista de servidores + + + + 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. + A lista de servidores mostra a os servidores disponíveis registados no servidor central. Selecione um servidor da lista e pressione o botão Ligar para se ligar a este servidor. Como alternativa, clique duas vezes num servidor da lista para se ligar ao mesmo. Se um servidor estiver ocupado, uma lista dos músicos ligados estará disponível expandindo o item da lista. Os servidores permanentes são mostrados em negrito. + + + + 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. + Observe que pode demorar algum tempo para obter a lista de servidores do servidor central. Se nenhum endereço de servidor central válido for especificado nas definições, nenhuma lista de servidores estará disponível. @@ -1281,18 +1291,23 @@ - <b>Server Address:</b> The IP address or URL of the server running the - <b>Endereço do servidor:</b> O endereço IP ou URL do servidor executando o servidor + Server Address + Endereço do servidor + + + + The IP address or URL of the server running the + O endereço IP ou URL do servidor executando o servidor - server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, <i>example.org: - deve ser definido aqui. Um número de porta opcional pode ser adicionado após o endereço IP ou URL usando o caractere dois pontos como separador, por exemplo, <i>example.org: + server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, example.org: + deve ser definido aqui. Um número de porta opcional pode ser adicionado após o endereço IP ou URL usando o caractere dois pontos como separador, por exemplo, example.org: - </i>. A list of the most recent used server IP addresses or URLs is available for selection. - </i>. Uma lista dos endereços IP ou URLs dos servidores usados recentemente está disponível para seleção. + . A list of the most recent used server IP addresses or URLs is available for selection. + . Uma lista dos endereços IP ou URLs dos servidores usados recentemente está disponível para seleção. @@ -1306,8 +1321,13 @@ - <b>Filter:</b> The server list is filered by the given text. Note that the filter is case insensitive. - <b>Filtro:</b> A lista de servidores é filtrada pelo texto fornecido. Note que o filtro não diferencia maiúsculas de minúsculas. + Filter + Filtro + + + + The server list is filered by the given text. Note that the filter is case insensitive. + A lista de servidores é filtrada pelo texto fornecido. Note que o filtro não diferencia maiúsculas de minúsculas. @@ -1316,8 +1336,13 @@ - <b>Show All Musicians:</b> If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. - <b>Mostrar Todos os Músicos:</b> Se marcar esta caixa de seleção, os músicos de todos os servidores serão mostrados. Se desmarcar a caixa de seleção, todos os itens em exibição na lista serão recolhidos. + Show All Musicians + Mostrar Todos os Músicos + + + + If you check this check box, the musicians of all servers are shown. If you uncheck the check box, all list view items are collapsed. + Se marcar esta caixa de seleção, os músicos de todos os servidores serão mostrados. Se desmarcar a caixa de seleção, todos os itens em exibição na lista serão recolhidos. From 87132ad190fba548f4df40d54243c3e92b4e8818 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 09:08:23 +0200 Subject: [PATCH 066/125] some more removing html code from translation strings --- src/res/translation/translation_de_DE.ts | 63 +++++++++++++++--- src/res/translation/translation_es_ES.ts | 63 +++++++++++++++--- src/res/translation/translation_fr_FR.ts | 63 +++++++++++++++--- src/res/translation/translation_pt_PT.ts | 81 ++++++++++++++++++------ src/serverdlg.cpp | 34 +++++----- 5 files changed, 242 insertions(+), 62 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 1f773ad9..c5a895cb 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -1782,7 +1782,12 @@ What you set here will appear at your fader on the mixer board when you are conn CServerDlg - <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. + Client List + + + + + The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. @@ -1792,7 +1797,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Start Minimized on Operating System Start:</b> If the start minimized on operating system start check box is checked, the + Start Minimized on Operating System Start + + + + + If the start minimized on operating system start check box is checked, the @@ -1802,12 +1812,22 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + Show Creative Commons Licence Dialog + + + + + If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all + Make My Server Public + + + + + If the Make My Server Public check box is checked, this server registers itself at the central server so that all @@ -1817,12 +1837,22 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. + Register Server Status + + + + + If the Make My Server Public check box is checked, this will show the success of registration with the central server. - <b>Central Server Address:</b> 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. + Central Server Address + + + + + 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. @@ -1837,7 +1867,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Server Name:</b> 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. + Server Name + + + + + 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. @@ -1847,7 +1882,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. + Location City + + + + + The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. @@ -1857,7 +1897,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. + Location country + + + + + The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index e23dfe02..ca1b2d19 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -1782,7 +1782,12 @@ What you set here will appear at your fader on the mixer board when you are conn CServerDlg - <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. + Client List + + + + + The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. @@ -1792,7 +1797,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Start Minimized on Operating System Start:</b> If the start minimized on operating system start check box is checked, the + Start Minimized on Operating System Start + + + + + If the start minimized on operating system start check box is checked, the @@ -1802,12 +1812,22 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + Show Creative Commons Licence Dialog + + + + + If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all + Make My Server Public + + + + + If the Make My Server Public check box is checked, this server registers itself at the central server so that all @@ -1817,12 +1837,22 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. + Register Server Status + + + + + If the Make My Server Public check box is checked, this will show the success of registration with the central server. - <b>Central Server Address:</b> 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. + Central Server Address + + + + + 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. @@ -1837,7 +1867,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Server Name:</b> 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. + Server Name + + + + + 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. @@ -1847,7 +1882,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. + Location City + + + + + The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. @@ -1857,7 +1897,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. + Location country + + + + + The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index fe837f74..b96cd1dd 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -1790,7 +1790,12 @@ What you set here will appear at your fader on the mixer board when you are conn CServerDlg - <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. + Client List + + + + + The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. @@ -1800,7 +1805,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Start Minimized on Operating System Start:</b> If the start minimized on operating system start check box is checked, the + Start Minimized on Operating System Start + + + + + If the start minimized on operating system start check box is checked, the @@ -1810,12 +1820,22 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + Show Creative Commons Licence Dialog + + + + + If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all + Make My Server Public + + + + + If the Make My Server Public check box is checked, this server registers itself at the central server so that all @@ -1825,12 +1845,22 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. + Register Server Status + + + + + If the Make My Server Public check box is checked, this will show the success of registration with the central server. - <b>Central Server Address:</b> 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. + Central Server Address + + + + + 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. @@ -1845,7 +1875,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Server Name:</b> 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. + 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. @@ -1855,7 +1890,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. + Location City + + + + + The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. @@ -1865,7 +1905,12 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. + Location country + + + + + The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index d86afa9f..869be841 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -1791,8 +1791,13 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan CServerDlg - <b>Client List:</b> The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. - <b>Lista de Clientes:</b> A lista de clientes mostra todos os clientes que estão atualmente ligados a este servidor. Algumas informações sobre os clientes, como o endereço IP e o nome, são fornecidas para cada cliente ligado. + Client List + Lista de Clientes + + + + The client list shows all clients which are currently connected to this server. Some information about the clients like the IP address and name are given for each connected client. + A lista de clientes mostra todos os clientes que estão atualmente ligados a este servidor. Algumas informações sobre os clientes, como o endereço IP e o nome, são fornecidas para cada cliente ligado. @@ -1801,8 +1806,13 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>Start Minimized on Operating System Start:</b> If the start minimized on operating system start check box is checked, the - <b>Iniciar Minimizado com o Sistema Operativo:</b> Se a caixa de seleção <i>Iniciar Minimizado com o Sistema Operativo</i> estiver marcada, o servidor + Start Minimized on Operating System Start + Iniciar Minimizado com o Sistema Operativo + + + + If the start minimized on operating system start check box is checked, the + Se a caixa de seleção Iniciar Minimizado com o Sistema Operativo estiver marcada, o servidor @@ -1811,13 +1821,23 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>Show Creative Commons Licence Dialog:</b> If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - <b>Mostrar Diálogo da Licença Creative Commons:</b> Se ativada, uma caixa de diálogo Creative Commons BY-NC-SA 4.0 será exibida sempre que um novo utilizador se ligar ao servidor. + Show Creative Commons Licence Dialog + Mostrar Diálogo da Licença Creative Commons + + + + If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. + Se ativada, uma caixa de diálogo Creative Commons BY-NC-SA 4.0 será exibida sempre que um novo utilizador se ligar ao servidor. - <b>Make My Server Public:</b> If the Make My Server Public check box is checked, this server registers itself at the central server so that all - <b>Tornar Servidor Público:</b> Se a caixa de seleção <i>Tornar Servidor Público</i> estiver marcada, esse servidor irá registar-se no servidor central para que todos os utilizadores do + Make My Server Public + Tornar Servidor Público + + + + If the Make My Server Public check box is checked, this server registers itself at the central server so that all + Se a caixa de seleção Tornar Servidor Público estiver marcada, esse servidor irá registar-se no servidor central para que todos os utilizadores do @@ -1826,13 +1846,23 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>Register Server Status:</b> If the Make My Server Public check box is checked, this will show the success of registration with the central server. - <b>Estado de Registo do Servidor:</b> Se a caixa de seleção <i>Tornar Servidor Público</i> estiver marcada, isto mostrará o sucesso ou insucesso do registo no servidor central. + Register Server Status + Estado de Registo do Servidor + + + + If the Make My Server Public check box is checked, this will show the success of registration with the central server. + Se a caixa de seleção Tornar Servidor Público estiver marcada, isto mostrará o sucesso ou insucesso do registo no servidor central. - <b>Central Server Address:</b> 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. - <b>Endereço do Servidor Central:</b> O endereço do servidor central é o endereço IP ou o URL do servidor central no qual esse servidor será registado. Com o menu dos servidores centrais, é possível selecionar um dos servidores centrais padrão ou especificar um endereço manual. + Central Server Address + Endereço do servidor 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. + O endereço do servidor central é o endereço IP ou o URL do servidor central no qual esse servidor será registado. Com o menu dos servidores centrais, é possível selecionar um dos servidores centrais padrão ou especificar um endereço manual. @@ -1846,8 +1876,13 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>Server Name:</b> 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. - <b>Nome do Servidor:</b> O nome do servidor identifica o servidor na lista do diálogo de ligação exibido nos clientes. Se nenhum nome for fornecido, o endereço IP será mostrado. + Server Name + Nome do Servidor + + + + 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. + O nome do servidor identifica o servidor na lista do diálogo de ligação exibido nos clientes. Se nenhum nome for fornecido, o endereço IP será mostrado. @@ -1856,8 +1891,13 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>Location City:</b> The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. - <b>Localização: Cidade</b> A cidade onde este servidor está localizado pode ser definida aqui. Se um nome de cidade for inserido, este será mostrado na lista do diálogo de ligação dos clientes. + Location City + ;Localização: Cidade + + + + The city in which this server is located can be set here. If a city name is entered, it will be shown in the connect dialog server list at the clients. + A cidade onde este servidor está localizado pode ser definida aqui. Se um nome de cidade for inserido, este será mostrado na lista do diálogo de ligação dos clientes. @@ -1866,8 +1906,13 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>Location country:</b> The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. - <b>Localização: País</b> O país em que este servidor está localizado pode ser definido aqui. Se um país for inserido, ele será mostrado na lista do diálogo de logação dos clientes. + Location country + Localização: País + + + + The country in which this server is located can be set here. If a country is entered, it will be shown in the connect dialog server list at the clients. + O país em que este servidor está localizado pode ser definido aqui. Se um país for inserido, ele será mostrado na lista do diálogo de logação dos clientes. diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 48b4931a..7717e023 100755 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -42,28 +42,28 @@ CServerDlg::CServerDlg ( CServer* pNServP, // Add help text to controls ----------------------------------------------- // client list - lvwClients->setWhatsThis ( tr ( "Client List: The client list " - "shows all clients which are currently connected to this server. Some " - "information about the clients like the IP address and name are given " - "for each connected client." ) ); + lvwClients->setWhatsThis ( "" + tr ( "Client List" ) + ": " + tr ( + "The client list shows all clients which are currently connected to this " + "server. Some information about the clients like the IP address and name " + "are given for each connected client." ) ); lvwClients->setAccessibleName ( tr ( "Connected clients list view" ) ); // start minimized on operating system start - chbStartOnOSStart->setWhatsThis ( tr ( "Start Minimized on Operating " - "System Start: If the start minimized on operating system start " + chbStartOnOSStart->setWhatsThis ( "" + tr ( "Start Minimized on Operating " + "System Start" ) + ": " + tr ( "If the start minimized on operating system start " "check box is checked, the " ) + APP_NAME + tr ( " server will be " "started when the operating system starts up and is automatically " "minimized to a system task bar icon." ) ); // CC licence dialog switch - chbUseCCLicence->setWhatsThis ( tr ( "Show Creative Commons Licence " - "Dialog: If enabled, a Creative Commons BY-NC-SA 4.0 Licence " + chbUseCCLicence->setWhatsThis ( "" + tr ( "Show Creative Commons Licence " + "Dialog" ) + ": " + tr ( "If enabled, a Creative Commons BY-NC-SA 4.0 Licence " "dialog is shown each time a new user connects the server." ) ); // Make My Server Public flag - chbRegisterServer->setWhatsThis ( tr ( "Make My Server Public: If " - "the Make My Server Public check box is checked, this server registers " + chbRegisterServer->setWhatsThis ( "" + tr ( "Make My Server Public" ) + ": " + + tr ( "If the Make My Server Public check box is checked, this server registers " "itself at the central server so that all " ) + APP_NAME + tr ( " users can see the server in the connect dialog server list and " "connect to it. The registering of the server is renewed periodically " @@ -71,13 +71,13 @@ CServerDlg::CServerDlg ( CServer* pNServP, "actually available." ) ); // register server status label - lblRegSvrStatus->setWhatsThis ( tr ( "Register Server Status: If " - "the Make My Server Public check box is checked, this will show " + lblRegSvrStatus->setWhatsThis ( "" + tr ( "Register Server Status" ) + ": " + + tr ( "If the Make My Server Public check box is checked, this will show " "the success of registration with the central server." ) ); // central server address - QString strCentrServAddr = tr ( "Central Server Address: The " - "Central server address is the IP address or URL of the central server " + QString strCentrServAddr = "" + tr ( "Central Server Address" ) + ": " + + tr ( "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." ); @@ -90,7 +90,7 @@ CServerDlg::CServerDlg ( CServer* pNServP, edtCentralServerAddress->setAccessibleName ( tr ( "Central server address line edit" ) ); // server name - QString strServName = tr ( "Server Name: The server name identifies " + QString strServName = "" + tr ( "Server Name" ) + ": " + tr ( "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." ); @@ -100,7 +100,7 @@ CServerDlg::CServerDlg ( CServer* pNServP, edtServerName->setAccessibleName ( tr ( "Server name line edit" ) ); // location city - QString strLocCity = tr ( "Location City: The city in which this " + QString strLocCity = "" + tr ( "Location City" ) + ": " + tr ( "The city in which this " "server is located can be set here. If a city name is entered, it " "will be shown in the connect dialog server list at the clients." ); @@ -110,7 +110,7 @@ CServerDlg::CServerDlg ( CServer* pNServP, edtLocationCity->setAccessibleName ( tr ( "City where the server is located line edit" ) ); // location country - QString strLocCountry = tr ( "Location country: The country in " + QString strLocCountry = "" + tr ( "Location country" ) + ": " + tr ( "The country in " "which this server is located can be set here. If a country is " "entered, it will be shown in the connect dialog server list at the " "clients." ); From 76ae7a41fffbd1552c1466619bb9beeebed5de4f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 09:16:28 +0200 Subject: [PATCH 067/125] some more removing html code from translation strings --- src/res/translation/translation_de_DE.ts | 18 ++++++++++++---- src/res/translation/translation_es_ES.ts | 18 ++++++++++++---- src/res/translation/translation_fr_FR.ts | 18 ++++++++++++---- src/res/translation/translation_pt_PT.ts | 26 ++++++++++++++++-------- src/soundbase.cpp | 6 +++--- windows/sound.cpp | 6 +++--- 6 files changed, 66 insertions(+), 26 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index c5a895cb..511d8c19 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -2179,12 +2179,17 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>No ASIO audio device (driver) found.</b><br><br>The + No ASIO audio device (driver) found. - software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. + The + + + + + software requires the low latency audio interface ASIO to work properly. This is no 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. @@ -2197,12 +2202,17 @@ What you set here will appear at your fader on the mixer board when you are conn - The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: - </b><br><br>Please restart the software. + Please restart the software. + + + + + Close diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index ca1b2d19..ebdada87 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -2179,12 +2179,17 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>No ASIO audio device (driver) found.</b><br><br>The + No ASIO audio device (driver) found. - software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. + The + + + + + software requires the low latency audio interface ASIO to work properly. This is no 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. @@ -2197,12 +2202,17 @@ What you set here will appear at your fader on the mixer board when you are conn - The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: - </b><br><br>Please restart the software. + Please restart the software. + + + + + Close diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index b96cd1dd..f7931bfd 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -2187,12 +2187,17 @@ What you set here will appear at your fader on the mixer board when you are conn - <b>No ASIO audio device (driver) found.</b><br><br>The + No ASIO audio device (driver) found. - software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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. + The + Le logiciel + + + + software requires the low latency audio interface ASIO to work properly. This is no 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. @@ -2205,12 +2210,17 @@ What you set here will appear at your fader on the mixer board when you are conn - The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> + The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: - </b><br><br>Please restart the software. + Please restart the software. + + + + + Close diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 869be841..ef624170 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -2188,13 +2188,18 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - <b>No ASIO audio device (driver) found.</b><br><br>The - <b>Nenhum dispositivo de áudio ASIO (driver) encontrado.</b><br><br>O programa + No ASIO audio device (driver) found. + Nenhum dispositivo de áudio ASIO (driver) encontrado - software requires the low latency audio interface <b>ASIO</b> to work properly. This is no 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 <b>ASIO</b> 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. + The + O programa + + + + software requires the low latency audio interface ASIO to work properly. This is no 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. @@ -2206,13 +2211,18 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - The audio driver properties have changed to a state which is incompatible to this software. The selected audio device could not be used because of the following error: <b> - 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: <b> + The audio driver properties have changed to a state which is incompatible to 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: - </b><br><br>Please restart the software. - </b><br><br>Por favor reinicie o programa. + Please restart the software. + Por favor reinicie o programa. + + + + Close + diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 6169e0d2..2d417639 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -141,10 +141,10 @@ QString CSoundBase::SetDev ( const int iNewDev ) nullptr, APP_NAME, QString ( tr ( "The audio driver properties " "have changed to a state which is incompatible to this " "software. The selected audio device could not be used " - "because of the following error: " ) ) + + "because of the following error:" ) + " " ) + strErrorMessage + - QString ( tr ( "

    Please restart the software." ) ), - "Close", nullptr ); + QString ( "


    " + tr ( "Please restart the software." ) ), + tr ( "Close" ), nullptr ); _exit ( 0 ); } diff --git a/windows/sound.cpp b/windows/sound.cpp index e5674b8b..19b44360 100755 --- a/windows/sound.cpp +++ b/windows/sound.cpp @@ -515,9 +515,9 @@ CSound::CSound ( void (*fpNewCallback) ( CVector& psData, voi // in case we do not have a driver available, throw error if ( lNumDevs == 0 ) { - throw CGenErr ( tr ( "No ASIO audio device (driver) found.

    " - "The " ) + APP_NAME + tr ( " software requires the low latency audio " - "interface ASIO to work properly. This is no standard " + throw CGenErr ( "" + tr ( "No ASIO audio device (driver) found." ) + "

    " + + tr ( "The " ) + APP_NAME + tr ( " software requires the low latency audio " + "interface ASIO to work properly. This is no 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 " From 0a88822d161a86d5f009cb06789404ca20bd1f5e Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 09:24:53 +0200 Subject: [PATCH 068/125] some more removing html code from translation strings --- linux/sound.cpp | 10 +++++----- src/res/translation/translation_de_DE.ts | 11 ++++++++--- src/res/translation/translation_es_ES.ts | 11 ++++++++--- src/res/translation/translation_fr_FR.ts | 11 ++++++++--- src/res/translation/translation_pt_PT.ts | 17 +++++++++++------ 5 files changed, 40 insertions(+), 20 deletions(-) diff --git a/linux/sound.cpp b/linux/sound.cpp index 9fd08995..00f9a3e0 100755 --- a/linux/sound.cpp +++ b/linux/sound.cpp @@ -58,13 +58,13 @@ void CSound::OpenJack ( const bool bNoAutoJackConnect, if ( jack_get_sample_rate ( pJackClient ) != SYSTEM_SAMPLE_RATE_HZ ) { throw CGenErr ( tr ( "The Jack server sample rate is different from " - "the required one. The required sample rate is: " ) + - QString().setNum ( SYSTEM_SAMPLE_RATE_HZ ) + tr ( " Hz. You can " + "the required one. The required sample rate is:" ) + " " + + QString().setNum ( SYSTEM_SAMPLE_RATE_HZ ) + " Hz. " + tr ( "You can " "use a tool like
    QJackCtl " - "to adjust the Jack server sample rate.
    Make sure to set the " - "Frames/Period to a low value like " ) + + "to adjust the Jack server sample rate." ) + "
    " + tr ( "Make sure to set the " + "Frames/Period to a low value like " ) + QString().setNum ( DOUBLE_SYSTEM_FRAME_SIZE_SAMPLES ) + - tr ( "
    to achieve a low delay." ) ); + tr ( " to achieve a low delay." ) ); } // create four ports (two for input, two for output -> stereo) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 511d8c19..6f721906 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -2077,17 +2077,22 @@ What you set here will appear at your fader on the mixer board when you are conn - The Jack server sample rate is different from the required one. The required sample rate is: <b> + The Jack server sample rate is different from the required one. The required sample rate is: - Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> + You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. + + + + + Make sure to set the Frames/Period to a low value like - </b> to achieve a low delay. + to achieve a low delay. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index ebdada87..68c29688 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -2077,17 +2077,22 @@ What you set here will appear at your fader on the mixer board when you are conn - The Jack server sample rate is different from the required one. The required sample rate is: <b> + The Jack server sample rate is different from the required one. The required sample rate is: - Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> + You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. + + + + + Make sure to set the Frames/Period to a low value like - </b> to achieve a low delay. + to achieve a low delay. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index f7931bfd..a0b2b534 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -2085,17 +2085,22 @@ What you set here will appear at your fader on the mixer board when you are conn - The Jack server sample rate is different from the required one. The required sample rate is: <b> + The Jack server sample rate is different from the required one. The required sample rate is: - Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> + You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. + + + + + Make sure to set the Frames/Period to a low value like - </b> to achieve a low delay. + to achieve a low delay. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index ef624170..dbb64f63 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -2086,18 +2086,23 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan - The Jack server sample rate is different from the required one. The required sample rate is: <b> - A taxa de amostragem (sample rate) do servidor Jack é diferente da necessária. A taxa de amostragem necessária é: <b> + The Jack server sample rate is different from the required one. The required sample rate is: + A taxa de amostragem (sample rate) do servidor Jack é diferente da necessária. A taxa de amostragem necessária é: - Hz</b>. You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate.<br>Make sure to set the <b>Frames/Period</b> to a low value like <b> - Hz</b>. Pode usar uma ferramenta como <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> para ajustar a taxa de amostragem do servidor Jack.<br>Certifique-se de definir <b>Frames/Período</b> para um valor baixo como <b> + You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. + Pode usar uma ferramenta como <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> para ajustar a taxa de amostragem do servidor Jack. + + + + Make sure to set the Frames/Period to a low value like + Certifique-se de definir Frames/Período para um valor baixo como - </b> to achieve a low delay. - </b> para obter uma latência baixa. + to achieve a low delay. + para obter uma latência baixa. From da30aeae0924f4183b04a70225d02c54763da61d Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 09:30:43 +0200 Subject: [PATCH 069/125] some more removing html code from translation strings --- src/res/translation/translation_de_DE.ts | 2 +- src/res/translation/translation_es_ES.ts | 2 +- src/res/translation/translation_fr_FR.ts | 2 +- src/res/translation/translation_pt_PT.ts | 4 ++-- src/util.cpp | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 6f721906..b17cd5ca 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -1443,7 +1443,7 @@ - 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): + 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 diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 68c29688..4ea3e746 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -1443,7 +1443,7 @@ - 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): + 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 diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index a0b2b534..9d6d8a7a 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -1451,7 +1451,7 @@ - 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): + 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 diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index dbb64f63..57a58bd8 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -1451,8 +1451,8 @@ - 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 <i><a href=http://creativecommons.org/licenses/by-nc-sa/4.0>http://creativecommons.org/licenses/by-nc-sa/4.0</a></i>): - Você concorda que todos os dados, sons ou outros trabalhos transmitidos para este servidor pertencem e são criados por você ou por seus licenciadores, e que você está disponibilizando esses dados, sons ou outros trabalhos através da seguinte licença Creative Commons (para obter mais informações sobre esta licença, consulte <i><a href=https://creativecommons.org/licenses/by-nc-sa/4.0/deed.pt>https://creativecommons.org/licenses/by-nc-sa/4.0/deed.pt</a></i>): + 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 + Você concorda que todos os dados, sons ou outros trabalhos transmitidos para este servidor pertencem e são criados por você ou por seus licenciadores, e que você está disponibilizando esses dados, sons ou outros trabalhos através da seguinte licença Creative Commons (para obter mais informações sobre esta licença, consulte diff --git a/src/util.cpp b/src/util.cpp index dd845c02..8be0a099 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -486,10 +486,10 @@ CLicenceDlg::CLicenceDlg ( QWidget* parent ) : QDialog ( parent ) "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 " + "License (for more information on this license, see " ) + "" - "http://creativecommons.org/licenses/by-nc-sa/4.0):" ) + "

    " + - "

    Attribution-NonCommercial-ShareAlike 4.0

    " + + "http://creativecommons.org/licenses/by-nc-sa/4.0
    ):

    " + "

    Attribution-NonCommercial-ShareAlike 4.0

    " "

    " + tr ( "You are free to:" ) + "

      " "
    • " + tr ( "Share" ) + " - " + From 48bfa02bb397eb6f5d83c993fd850472238343a9 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 09:38:20 +0200 Subject: [PATCH 070/125] some more removing html code from translation strings --- src/res/translation/translation_de_DE.ts | 17 +++++++++++------ src/res/translation/translation_es_ES.ts | 17 +++++++++++------ src/res/translation/translation_fr_FR.ts | 17 +++++++++++------ src/res/translation/translation_pt_PT.ts | 22 +++++++++++++--------- src/util.cpp | 6 +++--- 5 files changed, 49 insertions(+), 30 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index b17cd5ca..28da2e5e 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -1524,12 +1524,6 @@ CMusProfDlg - - - <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. -What you set here will appear at your fader on the mixer board when you are connected to a - - 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. @@ -1569,6 +1563,7 @@ What you set here will appear at your fader on the mixer board when you are conn + Musician Profile @@ -1617,6 +1612,16 @@ What you set here will appear at your fader on the mixer board when you are conn 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. The city you live in and the skill level of playing your instrument may also be added. + + + + + What you set here will appear at your fader on the mixer board when you are connected to a + + Drum Set diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 4ea3e746..9583b094 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -1524,12 +1524,6 @@ CMusProfDlg - - - <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. -What you set here will appear at your fader on the mixer board when you are connected to a - - 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. @@ -1569,6 +1563,7 @@ What you set here will appear at your fader on the mixer board when you are conn + Musician Profile @@ -1617,6 +1612,16 @@ What you set here will appear at your fader on the mixer board when you are conn 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. The city you live in and the skill level of playing your instrument may also be added. + + + + + What you set here will appear at your fader on the mixer board when you are connected to a + + Drum Set diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 9d6d8a7a..c7755de1 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -1532,12 +1532,6 @@ CMusProfDlg - - - <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. -What you set here will appear at your fader on the mixer board when you are connected to a - - 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. @@ -1577,6 +1571,7 @@ What you set here will appear at your fader on the mixer board when you are conn + Musician Profile @@ -1625,6 +1620,16 @@ What you set here will appear at your fader on the mixer board when you are conn 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. The city you live in and the skill level of playing your instrument may also be added. + + + + + What you set here will appear at your fader on the mixer board when you are connected to a + + Drum Set diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 57a58bd8..6118f853 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -233,7 +233,7 @@ Musician Profile - + Perfil do músico @@ -1532,13 +1532,6 @@ CMusProfDlg - - - <b>Musician Profile:</b> 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. The city you live in and the skill level of playing your instrument may also be added. -What you set here will appear at your fader on the mixer board when you are connected to a - <b>Perfil do músico:</b> Defina o seu nome ou um pseudônimo aqui para que os outros músicos com quem quer tocar saibam quem você é. Além disso, pode definir uma imagem do instrumento que toca e uma bandeira do país em que vive. A cidade em que vive e o nível de habilidade com o seu instrumento também podem ser adicionados. -O que definir aqui aparecerá por baixo do seu fader na secção de mistura quando estiver ligado a um servidor - 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. @@ -1578,8 +1571,9 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan + Musician Profile - + Perfil do músico @@ -1626,6 +1620,16 @@ O que definir aqui aparecerá por baixo do seu fader na secção de mistura quan 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. The city you live in and the skill level of playing your instrument may also be added. + Defina o seu nome ou um pseudônimo aqui para que os outros músicos com quem quer tocar saibam quem você é. Além disso, pode definir uma imagem do instrumento que toca e uma bandeira do país em que vive. A cidade em que vive e o nível de habilidade com o seu instrumento também podem ser adicionados. + + + + What you set here will appear at your fader on the mixer board when you are connected to a + O que definir aqui aparecerá por baixo do seu fader na secção de mistura quando estiver ligado a um servidor + Drum Set diff --git a/src/util.cpp b/src/util.cpp index 8be0a099..ec2a90ff 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -687,12 +687,12 @@ CMusProfDlg::CMusProfDlg ( CClient* pNCliP, // Add help text to controls ----------------------------------------------- // fader tag - QString strFaderTag = tr ( "Musician Profile: Set your name " - "or an alias here so that the other musicians you want to play with " + QString strFaderTag = "" + tr ( "Musician Profile" ) + ": " + tr ( + "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. " "The city you live in and the skill level of playing your instrument " - "may also be added.\n" + "may also be added." ) + "
      " + tr ( "What you set here will appear at your fader on the mixer board when " "you are connected to a " ) + APP_NAME + tr ( " server. This tag will " "also show up at each client which is connected to the same server as " From d268e8783b663ced9915d7bcb4aa4936923efd0f Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Thu, 7 May 2020 09:45:11 +0200 Subject: [PATCH 071/125] some more removing html code from translation strings --- src/res/translation/translation_de_DE.ts | 11 ++++++++--- src/res/translation/translation_es_ES.ts | 11 ++++++++--- src/res/translation/translation_fr_FR.ts | 11 ++++++++--- src/res/translation/translation_pt_PT.ts | 17 +++++++++++------ src/soundbase.cpp | 8 ++++---- 5 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 28da2e5e..da5e7bf8 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -2227,17 +2227,22 @@
      - <b>No usable + No usable - audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> + audio device (driver) found. + + + + + In the following there is a list of all available drivers with the associated error message: - <br/>Do you want to open the ASIO driver setups? + Do you want to open the ASIO driver setups? diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 9583b094..01cecfd1 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -2227,17 +2227,22 @@ - <b>No usable + No usable - audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> + audio device (driver) found. + + + + + In the following there is a list of all available drivers with the associated error message: - <br/>Do you want to open the ASIO driver setups? + Do you want to open the ASIO driver setups? diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index c7755de1..f1d21c72 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -2235,17 +2235,22 @@ - <b>No usable + No usable - audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> + audio device (driver) found. + + + + + In the following there is a list of all available drivers with the associated error message: - <br/>Do you want to open the ASIO driver setups? + Do you want to open the ASIO driver setups? diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 6118f853..896ae107 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -2235,18 +2235,23 @@ - <b>No usable - <b>Nenhum dispositivo de áudio (driver) + No usable + Nenhum dispositivo de áudio (driver) - audio device (driver) found.</b><br><br>In the following there is a list of all available drivers with the associated error message:<ul> - utilizável encontrado.</b><br><br>De seguida verá uma lista de todos os drivers disponíveis com a mensagem de erro associada:<ul> + 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: - <br/>Do you want to open the ASIO driver setups? - <br/>Deseja abrir as configurações do driver ASIO? + Do you want to open the ASIO driver setups? + Deseja abrir as configurações do driver ASIO? diff --git a/src/soundbase.cpp b/src/soundbase.cpp index 2d417639..c7f0c814 100755 --- a/src/soundbase.cpp +++ b/src/soundbase.cpp @@ -186,11 +186,11 @@ QString CSoundBase::SetDev ( const int iNewDev ) if ( !vsErrorList.isEmpty() ) { // create error message with all details - QString sErrorMessage = tr ( "No usable " ) + + QString sErrorMessage = "" + tr ( "No usable " ) + strSystemDriverTechniqueName + tr ( " audio device " - "(driver) found.

      " + "(driver) found." ) + "


      " + tr ( "In the following there is a list of all available drivers " - "with the associated error message: