From ebda8f9bbeef0ef676de00e538dc7b583a0db5f8 Mon Sep 17 00:00:00 2001 From: Simon Tomlinson Date: Thu, 16 Apr 2020 17:40:40 +0100 Subject: [PATCH 01/15] 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 2da5a989cdb0fe494e7ee10adbd41daad94d67e3 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 10 May 2020 14:32:45 +0200 Subject: [PATCH 02/15] some more German translation --- src/res/translation/translation_de_DE.qm | Bin 26747 -> 36015 bytes src/res/translation/translation_de_DE.ts | 52 +++++++++++------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index c4d9c9e21aa1b3aad5752b00331c37ef444b305c..34eb8995d63b2d311e35b33078f85f3afffbc81c 100644 GIT binary patch delta 10129 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 Qt cross-platform application framework - + Qt plattformübergreifender Anwendungsrahmen @@ -434,37 +434,37 @@ Local audio input fader (left/right) - + Lokaler Eingangsregler Reverberation effect level setting - + Halleffekt Pegelregler Left channel selection for reverberation - + Auswahl linker Kanal für Halleffekt Right channel selection for reverberation - + Auswahl rechter Kanal für Halleffekt If this LED indicator turns red, you will not have much fun using the - + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der Delay status LED indicator - + LED Stautuslampe für die Verzögerung Buffers status LED indicator - + LED Statuslampe für den Netzwerkpuffer @@ -531,82 +531,82 @@ 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 - + Mit diesem Einstellregler kann der relative Pegel vom linken und rechten Eingangskanal verändert werden. Für ein Mono-Signal verhält sich der Regler wie ein Pan-Regler. Wenn, z.B., ein Mikrofon am rechten Kanal angeschlossen ist und das Instrument am linken Eingangskanal ist viel lauter als das Mikrofon, dann kann man den Lautstärkeunterschied mit diesem Regler kompensieren indem man den Regler in eine Richtung verschiebt, so dass über dem Regler , where - + angezeigt wird, wobei is the current attenuation indicator. - + die aktuelle Dämpfung anzeigt. Reverberation Level - + Halleffektregler 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. - + Der Halleffekt kann auf einen selektierten Mono-Audiokanal oder auf beide Stereoaudiokanäle angewendet werden. Die Mono-Kanalselektion und die Hallstärke können eingestellt werden. Wenn z.B. ein Mikrofonsignal auf dem rechten Kanal anliegt und ein Halleffekt soll auf das Mikrofonsignal angewendet werden, dann muss die Hallkanalselektion auf rechts eingestellt werden und der Hallregler muss erhöht werden, bis die gewünschte Stärke des Halleffekts erreicht ist. 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. - + Die Berechnung des Halleffekts benötigt etwas Rechenleistung, so dass der Halleffekt nur bei schnellen Computern angewendet werden sollte. Wenn der Hallregler ganz nach unten gezogen ist, dann ist der Halleffekt ausgeschaltet und verbraucht keine Rechenleistung mehr. Reverberation Channel Selection - + Halleffekt Kanalselektion 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. - + Mit diesen Knöpfen kann ausgewählt werden, auf welches Eingangssignal der Halleffekt angewendet werden soll. Entweder der rechte oder linke Eingangskanal kann ausgewählt werden. Delay Status LED - + Status LED für die Verzögerung 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. - + Die Status-LED für die Verzögerung zeigt eine Bewertung der Gesamtverzögerung des Audiosignals. Wenn die LED grün leuchtet, dann ist die Verzögerung gering genug für das Jammen. Wenn die LED gelb anzeigt kann man noch spielen aber es wird schwieriger Lieder mit hohem Tempo zu spielen. Wenn die LED rot anzeigt, dann ist die Verzögerung zu hoch zum Jammen. Buffers Status LED - + Status LED für den Netzwerkpuffer 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: - + Die Status-LED für den Netzwerkpuffer zeigt den aktuellen Status des Netzwerkstroms. Wenn die LED grün ist, dann gibt es keine Pufferprobleme. Wenn die LED rot anzeigt, dann ist der Netzwerkstrom kurz unterbrochen. Dies kann folgende Ursachen haben: The network jitter buffer is not large enough for the current network/audio interface jitter. - + Der Netzwerkpuffer ist nicht groß genug eingestellt für die aktuellen Netzwerkbedingungen. The sound card buffer delay (buffer size) is set to a too small value. - + Der Soundkartenpuffer ist zu klein eingestellt. The upload or download stream rate is too high for the current available internet bandwidth. - + Die Upload-Rate der Internetverbindung ist zu klein für den Netzwerkdatenstrom. The CPU of the client or server is at 100%. - + Die CPU des Computers ist voll ausgelastet. @@ -674,7 +674,7 @@ Pan - + @@ -1067,7 +1067,7 @@ If this LED indicator turns red, you will not have much fun using the - + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der From ac3255afbffc1c45ad85bad7925866110cb55257 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 10 May 2020 19:06:27 +0200 Subject: [PATCH 03/15] Fixed a bug with the default server port (Ticket #194) --- src/main.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6def9cb6..c955e3b3 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,6 +60,7 @@ int main ( int argc, char** argv ) bool bCentServPingServerInList = false; bool bNoAutoJackConnect = false; bool bUseTranslation = true; + bool bCustomPortNumberGiven = false; int iNumServerChannels = DEFAULT_USED_NUM_CHANNELS; int iMaxDaysHistory = DEFAULT_DAYS_HISTORY; int iCtrlMIDIChannel = INVALID_MIDI_CH; @@ -77,13 +78,6 @@ int main ( int argc, char** argv ) QString strWelcomeMessage = ""; QString strClientName = APP_NAME; - // adjust default port number for client: use different default port than the server since - // if the client is started before the server, the server would get a socket bind error - if ( bIsClient ) - { - iPortNumber += 10; // increment by 10 - } - // QT docu: argv()[0] is the program name, argv()[1] is the first // argument and argv()[argc()-1] is the last argument. // Start with first argument, therefore "i = 1" @@ -312,7 +306,8 @@ int main ( int argc, char** argv ) 65535, rDbleArgument ) ) { - iPortNumber = static_cast ( rDbleArgument ); + iPortNumber = static_cast ( rDbleArgument ); + bCustomPortNumberGiven = true; tsConsole << "- selected port number: " << iPortNumber << endl; continue; } @@ -507,13 +502,22 @@ int main ( int argc, char** argv ) strCentralServer = DEFAULT_SERVER_ADDRESS; } + // adjust default port number for client: use different default port than the server since + // if the client is started before the server, the server would get a socket bind error + if ( bIsClient && !bCustomPortNumberGiven ) + { + iPortNumber += 10; // increment by 10 + } - // Application/GUI setup --------------------------------------------------- - // Application object - if ( !bUseGUI && !strHistoryFileName.isEmpty() ) + // display a warning if in server no GUI mode and a history file is requested + if ( !bIsClient && !bUseGUI && !strHistoryFileName.isEmpty() ) { tsConsole << "Qt5 requires a windowing system to paint a JPEG image; image will use SVG" << endl; } + + + // Application/GUI setup --------------------------------------------------- + // Application object QCoreApplication* pApp = bUseGUI ? new QApplication ( argc, argv ) : new QCoreApplication ( argc, argv ); From dd451dc868c4658e7cfd65bc6f8d5c1e0dde4388 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 10 May 2020 22:32:36 +0200 Subject: [PATCH 04/15] added bongo instrument icon created by bspeer (Ticket #131) --- ChangeLog | 4 +- Jamulus.pro | 2 + src/res/instruments/bongo.png | Bin 0 -> 1876 bytes src/res/instruments/bongo.svg | 142 +++++++++++++++++++++++ src/res/translation/translation_de_DE.ts | 5 + src/res/translation/translation_es_ES.ts | 5 + src/res/translation/translation_fr_FR.ts | 5 + src/res/translation/translation_pt_PT.ts | 5 + src/resources.qrc | 1 + src/util.cpp | 1 + 10 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 src/res/instruments/bongo.png create mode 100644 src/res/instruments/bongo.svg diff --git a/ChangeLog b/ChangeLog index fdd8fe30..06f7c09b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,7 +7,7 @@ - for CoreAudio and 4 channel input, support mixing channels 1&2 with 3&4 -- added bassoon/oboe/harp instrument icons created by dszgit; congas created by bspeer (Ticket #131) +- added bassoon/oboe/harp instrument icons created by dszgit; congas/bongo created by bspeer (Ticket #131) - link to docs from application Help menu (Ticket #90) @@ -24,6 +24,8 @@ TODO WIP support internationalization +TODO improve disconnect message behaviour on client + TODO implement panning for channels (Ticket #52, #145) TODO show mute state of others diff --git a/Jamulus.pro b/Jamulus.pro index b517c99b..97dc3c9d 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -581,6 +581,8 @@ DISTFILES += ChangeLog \ src/res/instruments/viola.png \ src/res/instruments/congas.svg \ src/res/instruments/congas.png \ + src/res/instruments/bongo.svg \ + src/res/instruments/bongo.png \ src/res/flags/flagnone.png \ src/res/flags/ad.png \ src/res/flags/ae.png \ diff --git a/src/res/instruments/bongo.png b/src/res/instruments/bongo.png new file mode 100644 index 0000000000000000000000000000000000000000..3864cc70a157738269ad37aa1dbdfe004fa4521c GIT binary patch literal 1876 zcmV-a2dnsrP)X1^@s6yEvDU00006VoOIv0RI60 z0RN!9r;`8x010qNS#tmY4c7nw4c7reD4Tcy000McNliru87&^IR)@J|!02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00z8CL_t(Y$IX^|a8%VD$3J)P z?%hW=$!1Bifsh0U0TatRu{=Wo5ztzt^ocTqwN>nN8e51nTCHQ-8PM{w1!fTCky?}) zG-@DqhzJ-SK_-DD1i~ZDVX~(N!%KS zm;dlguHEU#cO|BJW32K0ukG4(sd#_!S-v4iH!kd0zv{uXjMQhwjvhPNnUG@Bg$02X zU04aL2JOVDV^{X<`CD~e#kr+59*_SfHpgXUrad$xZ({Cl*gdczHk z&D|fDmmh0#yWa-dZro_RHYnX$n3*&*dEfZEv+w%sa0^0wQCTr6^317=G7OP(>6`of zr)oT&oWWo5!&00tJo3Xi3x52AxrsSr$GBvpRnmomKtW(a430w~@$iYt(<}bIb<6RC zN6MZB+P^^N@cS$0-<_3N?1)c{(Z%hbQV1bj&KSwt)twGtvzecI{O5BDpL_aeNkbBx zc7cKrGPg2gHk;+y)APqn&7GCGZqvGq4O{;DQZyPp0wC|$u-q{{H|vBm!4V541V(QD zH33Fi-IbB8yS5pxdV}pr4olwljlWv*)bfRyHmg+und?Q|Fuz`8gV}J;lo@I5?HBK> zsXJE%G#hFzxSvmQ+T*^=xpZ9@ZSD$f?>n2#Z|pfNl9LkD*I)hR%zN{5vi?_xRTQ)F z$z_i^Ge-{J3)qa6HJ$mPa8y&w$hX?$?Pv*kTF+Wu*}OyEf9Q-@I4{3x$%4$`dEoGS z-9|)Jxzy~TzM+*14Xs!#N-%5G$cx2W3cTX{v(xKbldZCW$ej{tZ#^&U<}PW#ANI_d zcYn9Bwyti=f`yALr%#`zqUgY6T^D8mqb#e5iOvhZSiY=j&gA4F-Xpt5rJ4`E<2M)#W!IA4C&x}!M+;U}KeFZlp2(3g+O2TUT&OpICWDd+stOOML&1p}Lw05| z6GWQq3v@6tV;GX*OQVst){6}EHV|v}VKPg!w07}W;cFdlzP0yqN=i!O^|x|2casp* za8F8OYO;=m1o81uc@-w*fl-As=b$rcmP#tFcwI^H_KcJy+*i67@C6v~MezH>c)I%V z`9ci%{PgsA>GCw;ZL7g7c`zGQR8?c!o4|buTX~KYIKwRn=lfq$NiuW~VEuDG5lD zM4a75cb|`jCXZHgp(WDl>9IQEV=qn28D(3!c(fz2r)=J|)%_=LS+#*!;4m<8cq~Ud zgXAUK>F*8^=MQ61WcG)nya+^qMW3#pSt}38EJ%e=iisY(nU-O(d@M^G<68g+&<_M|6Ey!9N^yDDf|amGU0*+)ZH`y O0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index e7ef8f4c..b3a8d111 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -1852,6 +1852,11 @@ Congas Congas + + + Bongo + + CServerDlg diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 5651cdb5..6537077d 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -1856,6 +1856,11 @@ Congas Congas + + + Bongo + + CServerDlg diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 5e3d648c..0236ed05 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -1864,6 +1864,11 @@ Congas + + + Bongo + + CServerDlg diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 79e4ccf0..a72621d2 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -1864,6 +1864,11 @@ Congas + + + Bongo + + CServerDlg diff --git a/src/resources.qrc b/src/resources.qrc index 2c9c8476..51b5fe74 100755 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -67,6 +67,7 @@ res/instruments/harp.png res/instruments/viola.png res/instruments/congas.png + res/instruments/bongo.png res/fronticon.png diff --git a/src/util.cpp b/src/util.cpp index 117a77a8..fff72c99 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -999,6 +999,7 @@ CVector& CInstPictures::GetTable() 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 ) ); vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Congas" ), ":/png/instr/res/instruments/congas.png", IC_PERCUSSION_INSTRUMENT ) ); + vecDataBase.Add ( CInstPictProps ( QCoreApplication::translate ( "CMusProfDlg", "Bongo" ), ":/png/instr/res/instruments/bongo.png", IC_PERCUSSION_INSTRUMENT ) ); // now the table is initialized TableIsInitialized = true; From 82ec4822d441226eae6a53783e0038d81d9a53de Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 10 May 2020 22:55:47 +0200 Subject: [PATCH 05/15] fixed a typo --- src/clientdlg.cpp | 2 +- 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 | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/clientdlg.cpp b/src/clientdlg.cpp index eefc122a..ab178cd4 100755 --- a/src/clientdlg.cpp +++ b/src/clientdlg.cpp @@ -117,7 +117,7 @@ CClientDlg::CClientDlg ( CClient* pNCliP, // reverberation level 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 " + "channels in stereo mode. The mono channel selection and the " "reverberation level can be modified. If, e.g., " "the microphone signal is fed into the right audio channel of the " "sound card and a reverberation effect shall be applied, set the " diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index b3a8d111..a6975a43 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -550,7 +550,7 @@ - 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. + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono channel selection and the reverberation level can be modified. If, e.g., the microphone signal is fed into the right audio channel of the sound card and a reverberation effect shall be applied, set the channel selector to right and move the fader upwards until the desired reverberation level is reached. Der Halleffekt kann auf einen selektierten Mono-Audiokanal oder auf beide Stereoaudiokanäle angewendet werden. Die Mono-Kanalselektion und die Hallstärke können eingestellt werden. Wenn z.B. ein Mikrofonsignal auf dem rechten Kanal anliegt und ein Halleffekt soll auf das Mikrofonsignal angewendet werden, dann muss die Hallkanalselektion auf rechts eingestellt werden und der Hallregler muss erhöht werden, bis die gewünschte Stärke des Halleffekts erreicht ist. diff --git a/src/res/translation/translation_es_ES.ts b/src/res/translation/translation_es_ES.ts index 6537077d..4aa0a654 100644 --- a/src/res/translation/translation_es_ES.ts +++ b/src/res/translation/translation_es_ES.ts @@ -554,7 +554,7 @@ - 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. + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono channel selection and the reverberation level can be modified. If, e.g., the microphone signal is fed into the right audio channel of the sound card and a reverberation effect shall be applied, set the channel selector to right and move the fader upwards until the desired reverberation level is reached. Se puede aplicar un efecto de reverberación a un canal local de audio mono o a ambos canales en modo estéreo. Se puede modificar la selección de canales en modo mono y el nivel de reverberación. Por ej., si la señal del micrófono va por el canal derecho de la tarjeta de sonido y se desea aplicar reverberación, cambia el selector de canal a derecho y sube el fader hasta alcanzar el nivel de reverberación deseado. diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 0236ed05..2f559ed8 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -562,7 +562,7 @@ - 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. + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono channel selection and the reverberation level can be modified. If, e.g., the microphone signal is fed into the right audio channel of the sound card and a reverberation effect shall be applied, set the channel selector to right and move the fader upwards until the desired reverberation level is reached. diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index a72621d2..361a2a78 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -562,7 +562,7 @@ - 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. + A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono channel selection and the reverberation level can be modified. If, e.g., the microphone signal is fed into the right audio channel of the sound card and a reverberation effect shall be applied, set the channel selector to right and move the fader upwards until the desired reverberation level is reached. 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. From dc28332ac62317c605e729d891671cac1afc67f3 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Sun, 10 May 2020 23:11:29 +0200 Subject: [PATCH 06/15] some more German translation --- src/res/translation/translation_de_DE.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index a6975a43..64a8b4bb 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -702,32 +702,32 @@ Jitter Buffer Size - Netzwerkpuffergröße + Netzwerkpuffergröße 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). - + Der Netzwerkpuffer kompensiert die Netzwerk- und Soundkarten-Timing-Schwankungen. Die Größe des Netzwerkpuffers hat Auswirkungen auf die Qualität des Audiosignals (wie viele Aussetzer auftreten) und die Gesamtverzögerung (je länger der Puffer, desto größer ist die Verzögerung). 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. - + Die Netzwerkpuffergröße kann manuell verstellt werden, jeweils getrennt für die Applikation und den Server. Für den lokalen Netzwerkpuffer werden die Aussetzer durch die LED-Anzeige unter den Reglern angezeigt. Wenn die Lampe rot anzeigt, dann hat ein Pufferüberlauf oder ein Leerlauf des Puffers stattgefunden und der Audiodatenstrom wurde kurz unterbrochen. The jitter buffer setting is therefore a trade-off between audio quality and overall delay. - + Die Netzwerkpuffergröße ist deshalb ein Kompromiss zwischen Audioqualität und Gesamtverzögerung. 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). - + Die Netzwerkpuffergröße kann automatisch eingestellt werden. Wenn die Automatik aktiviert ist, dann werden die Netzwerkpuffer der Applikation und des Servers getrennt basierend auf Messungen der Netzwerkschwankungen eingestellt. Wenn die Automatik aktiviert ist, dann sind die beiden Regler gesperrt für die manuelle Verstellung (sie können nicht mit der Maus verändert werden). 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. - + Wenn die Automatik zum Einstellen der Netzwerkpuffer aktiviert ist, dann werden die Netzwerkpuffer der Applikation und des entfernten Servers auf einen konservativen Wert eingestellt, um eine möglichst gute Audioqualität zu garantieren. Um die Gesamtverzögerung zu optimieren, bietet es sich an, die Automatik zu deaktivieren und die Netzwerkpuffer etwas kleiner einzustellen. Die Werte sollte man so weit reduzieren, bis die Audioqualität gerade noch der persönlichen Akkzeptanz entspricht. Die LED-Anzeige hilft dabei die Audioaussetzer verursacht durch den lokalen Netzwerkpuffer zu visualisieren (wenn die LED rot leuchtet). From 95fdf0fc6bca3ce4567c4fa097a7ad26510350a2 Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Mon, 11 May 2020 01:19:21 +0200 Subject: [PATCH 07/15] French translation update --- src/res/translation/translation_fr_FR.ts | 216 +++++++++++------------ 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 2f559ed8..213ade65 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -255,58 +255,58 @@ Alias/Name - + Pseudo/nom Instrument - + Instrument Location - Localisation + Localisation Skill Level - + Niveau de compétence Beginner - + Débutant Intermediate - + Intermédiaire Expert - + Expert Musician Profile - + Profil de musicien Mute - + Muet Solo - + Solo @@ -583,22 +583,22 @@ Delay Status LED - LED d'état de délai + Voyant d'état de délai The delay status LED indicator shows the current audio delay status. If the light is green, the delay is perfect for a jam session. If the light is yellow, a session is still possible but it may be harder to play. If the light is red, the delay is too large for jamming. - L'indicateur LED d'état de délai indique l'état actuel du délai audio. Si le voyant est vert, le délai est parfait pour une session de bœuf. Si le voyant est jaune, une session est toujours possible mais elle peut être plus difficile à jouer. Si le voyant est rouge, le délai est trop important pour un bœuf. + Le voyant d'état de délai indique l'état actuel du délai audio. Si le voyant est vert, le délai est parfait pour une session de bœuf. Si le voyant est jaune, une session est toujours possible mais elle peut être plus difficile à jouer. Si le voyant est rouge, le délai est trop important pour un bœuf. Buffers Status LED - LED d'état de tampon + Voyant d'état de tampon The buffers status LED indicator shows the current audio/streaming status. If the light is green, there are no buffer overruns/underruns and the audio stream is not interrupted. If the light is red, the audio stream is interrupted caused by one of the following problems: - L'indicateur LED d'état des tampons indique l'état actuel de l'audio/du streaming. Si le voyant est vert, il n'y a pas de dépassement de mémoire tampon ni de sous-dépassement et le flux audio n'est pas interrompu. Si le voyant est rouge, le flux audio est interrompu en raison de l'un des problèmes suivants : + Le voyant d'état des tampons indique l'état actuel de l'audio/du streaming. Si le voyant est vert, il n'y a pas de dépassement de mémoire tampon ni de sous-dépassement et le flux audio n'est pas interrompu. Si le voyant est rouge, le flux audio est interrompu en raison de l'un des problèmes suivants : @@ -839,57 +839,57 @@ Enable Small Network Buffers - + Activer les petits tampons de réseau 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 - + Si activée, la prise en charge des très petits paquets audio de réseau est activée. Les très petits paquets réseau ne sont réellement utilisés que si le délai de la mémoire tampon de la carte son est inférieur à 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. - + échantillons. Plus la mémoire tampon du réseau est petite, plus la latence audio est faible. Mais en même temps, la charge du réseau augmente et la probabilité de décrochage audio augmente également. Enable small network buffers check box - + Cochez la case Activer les petits tampons de réseau Sound Card Buffer Delay - + Délai de temporisation de l'interface audio The buffer delay setting is a fundamental setting of the - + Le paramètre de délai de temporisation est un paramètre fondamental du logiciel software. This setting has influence on many connection properties. - + . Ce paramètre influence de nombreuses propriétés de connexion. Three buffer sizes are supported - + Trois tailles de tampon sont prises en charge 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. - + 64 échantillons : c'est le réglage préféré car il donne la latence la plus faible mais ne fonctionne pas avec toutes les interfaces audio. 128 samples: This setting should work on most of the available sound cards. - + 128 échantillons : ce réglage devrait fonctionner sur la plupart des interfaces audio disponibles. 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. - + 256 échantillons : ce paramètre ne doit être utilisé que si seul un ordinateur très lent ou une connexion internet lente est disponible. @@ -954,32 +954,32 @@ Fancy Skin - + Habillage fantaisie If enabled, a fancy skin will be applied to the main window. - + Si activée, un habillage fantaisie sera appliquée à la fenêtre principale. Fancy skin check box - + Cocher la case Habillage fantaisie Display Channel Levels - + Afficher les niveaux des canaux If enabled, each client channel will display a pre-fader level bar. - + Si activée, chaque canal de client affichera une barre de niveau pré-fader. Display channel levels check box - + Cocher la case Afficher les niveaux des canaux @@ -1079,12 +1079,12 @@ If this LED indicator turns red, you will not have much fun using the - + Si ce voyant devient rouge, vous n'aurez pas beaucoup de plaisir à utiliser le logiciel software. - + . @@ -1145,7 +1145,7 @@ Size: - + Taille : @@ -1170,7 +1170,7 @@ Ok - + Ok @@ -1183,79 +1183,79 @@ Soundcard - + Interface audio Device - + Périphérique Input Channel Mapping - + Cartographie des canaux d'entrée L - G + G R - D + D Output Channel Mapping - + Cartographie des canaux de sortie Enable Small Network Buffers - + Activer les petits tampons de réseau Buffer Delay - + Délai de temporisation (preferred) - + (préféré) (default) - + (défaut) (safe) - + (sûr) Driver Setup - + Configuration du pilote Jitter Buffer - + Tampon de gigue Auto - + Auto Local - + Local @@ -1271,64 +1271,64 @@ Misc - + Divers Audio Channels - + Canaux audio Audio Quality - + Qualité audio New Client Level - + Niveau de nouveau client % - + % Fancy Skin - + Habillage fantaisie Display Channel Levels - + Afficher les niveaux des canaux Central Server Address: - + Adresse du serveur central : Audio Stream Rate - + Débit du flux audio val - + val Ping Time - Temps de réponse + Temps de réponse Overall Delay - + Retard global @@ -1472,7 +1472,7 @@ &Help - + &Aide @@ -1636,58 +1636,58 @@ None - Aucun + Aucun Musician Profile - + Profil de musicien Alias/Name - + Pseudo/nom Instrument - + Instrument Country - + Pays City - + Ville Skill - + Compétence &Close - &Fermer + &Fermer Beginner - + Débutant Intermediate - + Intermédiaire Expert - + Expert @@ -1702,172 +1702,172 @@ Drum Set - + Batterie Djembe - + Djembé Electric Guitar - + Guitare électrique Acoustic Guitar - + Guitare accoustique Bass Guitar - + Guitare basse Keyboard - + Clavier Synthesizer - + Synthétiseur Grand Piano - + Piano à queue Accordion - + Accordéon Vocal - + Voix Microphone - + Microphone Harmonica - + Harmonica Trumpet - + Trompette Trombone - + Trombone French Horn - + Cor d'harmonie Tuba - + Tuba Saxophone - + Saxophone Clarinet - + Clarinette Flute - + Flute Violin - + Violon Cello - + Violoncelle Double Bass - + Contrebasse Recorder - + Enregistreur Streamer - + Diffuseur Listener - + Auditeur Guitar+Vocal - + Guitare+voix Keyboard+Vocal - + Clavier+voix Bodhran - + Bodhran Bassoon - + Basson Oboe - + Hautbois Harp - + Harpe Viola - + Alto Congas - + Congas Bongo - + Bongo From c112b1e0fc631c50bd08a1f92365dcae0981f6ac Mon Sep 17 00:00:00 2001 From: Simon Tomlinson Date: Mon, 11 May 2020 07:36:46 +0100 Subject: [PATCH 08/15] Added Oboe support code for android audio. There are problems rendering audio (audio is dithered), still more work required. --- Jamulus.pro | 132 ++++++++++ android/AndroidManifest.xml | 105 ++++++-- android/androiddebug.cpp | 45 ++++ android/sound.cpp | 468 ++++++++++++++++-------------------- android/sound.h | 65 +++-- src/global.h | 2 + src/main.cpp | 13 +- 7 files changed, 521 insertions(+), 309 deletions(-) create mode 100644 android/androiddebug.cpp diff --git a/Jamulus.pro b/Jamulus.pro index ad151e79..3c7f0d16 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -97,11 +97,136 @@ win32 { LIBS += /usr/local/lib/libjack.dylib } } else:android { + # we want to compile with C++14 + CONFIG += c++14 + + QT += androidextras + + # enabled only for debugging on android devices + DEFINES += ANDROIDDEBUG + + target.path = /tmp/your_executable # path on device + INSTALLS += target + HEADERS += android/sound.h SOURCES += android/sound.cpp LIBS += -lOpenSLES ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android OTHER_FILES += android/AndroidManifest.xml + +# if compiling for android you need to use Oboe library which is included as a git submodule +# make sure you git pull with submodules to pull the latest Oboe library +OBOE_SOURCES = libs/oboe/src/aaudio/AAudioLoader.cpp \ + libs/oboe/src/aaudio/AudioStreamAAudio.cpp \ + libs/oboe/src/common/AudioSourceCaller.cpp \ + libs/oboe/src/common/AudioStream.cpp \ + libs/oboe/src/common/AudioStreamBuilder.cpp \ + libs/oboe/src/common/DataConversionFlowGraph.cpp \ + libs/oboe/src/common/FilterAudioStream.cpp \ + libs/oboe/src/common/FixedBlockAdapter.cpp \ + libs/oboe/src/common/FixedBlockReader.cpp \ + libs/oboe/src/common/FixedBlockWriter.cpp \ + libs/oboe/src/common/LatencyTuner.cpp \ + libs/oboe/src/common/QuirksManager.cpp \ + libs/oboe/src/common/SourceFloatCaller.cpp \ + libs/oboe/src/common/SourceI16Caller.cpp \ + libs/oboe/src/common/StabilizedCallback.cpp \ + libs/oboe/src/common/Trace.cpp \ + libs/oboe/src/common/Utilities.cpp \ + libs/oboe/src/common/Version.cpp \ + libs/oboe/src/fifo/FifoBuffer.cpp \ + libs/oboe/src/fifo/FifoController.cpp \ + libs/oboe/src/fifo/FifoControllerBase.cpp \ + libs/oboe/src/fifo/FifoControllerIndirect.cpp \ + libs/oboe/src/flowgraph/ClipToRange.cpp \ + libs/oboe/src/flowgraph/FlowGraphNode.cpp \ + libs/oboe/src/flowgraph/ManyToMultiConverter.cpp \ + libs/oboe/src/flowgraph/MonoToMultiConverter.cpp \ + libs/oboe/src/flowgraph/RampLinear.cpp \ + libs/oboe/src/flowgraph/SampleRateConverter.cpp \ + libs/oboe/src/flowgraph/SinkFloat.cpp \ + libs/oboe/src/flowgraph/SinkI16.cpp \ + libs/oboe/src/flowgraph/SinkI24.cpp \ + libs/oboe/src/flowgraph/SourceFloat.cpp \ + libs/oboe/src/flowgraph/SourceI16.cpp \ + libs/oboe/src/flowgraph/SourceI24.cpp \ + libs/oboe/src/flowgraph/resampler/IntegerRatio.cpp \ + libs/oboe/src/flowgraph/resampler/LinearResampler.cpp \ + libs/oboe/src/flowgraph/resampler/MultiChannelResampler.cpp \ + libs/oboe/src/flowgraph/resampler/PolyphaseResampler.cpp \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.cpp \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.cpp \ + libs/oboe/src/flowgraph/resampler/SincResampler.cpp \ + libs/oboe/src/flowgraph/resampler/SincResamplerStereo.cpp \ + libs/oboe/src/opensles/AudioInputStreamOpenSLES.cpp \ + libs/oboe/src/opensles/AudioOutputStreamOpenSLES.cpp \ + libs/oboe/src/opensles/AudioStreamBuffered.cpp \ + libs/oboe/src/opensles/AudioStreamOpenSLES.cpp \ + libs/oboe/src/opensles/EngineOpenSLES.cpp \ + libs/oboe/src/opensles/OpenSLESUtilities.cpp \ + libs/oboe/src/opensles/OutputMixerOpenSLES.cpp + +OBOE_HEADERS = libs/oboe/src/aaudio/AAudioLoader.h \ + libs/oboe/src/aaudio/AudioStreamAAudio.h \ + libs/oboe/src/common/AudioClock.h \ + libs/oboe/src/common/AudioSourceCaller.h \ + libs/oboe/src/common/DataConversionFlowGraph.h \ + libs/oboe/src/common/FilterAudioStream.h \ + libs/oboe/src/common/FixedBlockAdapter.h \ + libs/oboe/src/common/FixedBlockReader.h \ + libs/oboe/src/common/FixedBlockWriter.h \ + libs/oboe/src/common/MonotonicCounter.h \ + libs/oboe/src/common/OboeDebug.h \ + libs/oboe/src/common/QuirksManager.h \ + libs/oboe/src/common/SourceFloatCaller.h \ + libs/oboe/src/common/SourceI16Caller.h \ + libs/oboe/src/common/Trace.h \ + libs/oboe/src/fifo/FifoBuffer.h \ + libs/oboe/src/fifo/FifoController.h \ + libs/oboe/src/fifo/FifoControllerBase.h \ + libs/oboe/src/fifo/FifoControllerIndirect.h \ + libs/oboe/src/flowgraph/ClipToRange.h \ + libs/oboe/src/flowgraph/FlowGraphNode.h \ + libs/oboe/src/flowgraph/ManyToMultiConverter.h \ + libs/oboe/src/flowgraph/MonoToMultiConverter.h \ + libs/oboe/src/flowgraph/RampLinear.h \ + libs/oboe/src/flowgraph/SampleRateConverter.h \ + libs/oboe/src/flowgraph/SinkFloat.h \ + libs/oboe/src/flowgraph/SinkI16.h \ + libs/oboe/src/flowgraph/SinkI24.h \ + libs/oboe/src/flowgraph/SourceFloat.h \ + libs/oboe/src/flowgraph/SourceI16.h \ + libs/oboe/src/flowgraph/SourceI24.h \ + libs/oboe/src/flowgraph/resampler/HyperbolicCosineWindow.h \ + libs/oboe/src/flowgraph/resampler/IntegerRatio.h \ + libs/oboe/src/flowgraph/resampler/LinearResampler.h \ + libs/oboe/src/flowgraph/resampler/MultiChannelResampler.h \ + libs/oboe/src/flowgraph/resampler/PolyphaseResampler.h \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerMono.h \ + libs/oboe/src/flowgraph/resampler/PolyphaseResamplerStereo.h \ + libs/oboe/src/flowgraph/resampler/SincResampler.h \ + libs/oboe/src/flowgraph/resampler/SincResamplerStereo.h \ + libs/oboe/src/opensles/AudioInputStreamOpenSLES.h \ + libs/oboe/src/opensles/AudioOutputStreamOpenSLES.h \ + libs/oboe/src/opensles/AudioStreamBuffered.h \ + libs/oboe/src/opensles/AudioStreamOpenSLES.h \ + libs/oboe/src/opensles/EngineOpenSLES.h \ + libs/oboe/src/opensles/OpenSLESUtilities.h \ + libs/oboe/src/opensles/OutputMixerOpenSLES.h + +INCLUDEPATH_OBOE = libs/oboe/include/ \ + libs/oboe/src/ + +DISTFILES_OBOE += libs/oboe/AUTHORS \ + libs/oboe/CONTRIBUTING \ + libs/oboe/LICENSE \ + libs/oboe/README + + INCLUDEPATH += $$INCLUDEPATH_OBOE + HEADERS += $$OBOE_HEADERS + SOURCES += $$OBOE_SOURCES + DISTFILES += $$DISTFILES_OBOE + } else:unix { # we want to compile with C++11 QMAKE_CXXFLAGS += -std=c++11 @@ -248,6 +373,7 @@ HEADERS_OPUS = libs/opus/include/opus.h \ libs/opus/silk/float/SigProc_FLP.h SOURCES += src/audiomixerboard.cpp \ + android/androiddebug.cpp \ src/buffer.cpp \ src/channel.cpp \ src/chatdlg.cpp \ @@ -415,6 +541,12 @@ DISTFILES += ChangeLog \ COPYING \ INSTALL.md \ README.md \ + android/build.gradle \ + android/gradle/wrapper/gradle-wrapper.jar \ + android/gradle/wrapper/gradle-wrapper.properties \ + android/gradlew \ + android/gradlew.bat \ + android/res/values/libs.xml \ src/res/CLEDBlack.png \ src/res/CLEDBlackSmall.png \ src/res/CLEDDisabledSmall.png \ diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index addcb052..cba6d9a2 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,41 +1,94 @@ - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + + + + - - - + + - - - - - + + + + + + + + + - + + + + + - + + + + + + + + + + + + + + + + + + - - - - - - - + diff --git a/android/androiddebug.cpp b/android/androiddebug.cpp new file mode 100644 index 00000000..93656a47 --- /dev/null +++ b/android/androiddebug.cpp @@ -0,0 +1,45 @@ +const char*const applicationName="Jamulus"; + +#ifdef ANDROIDDEBUG // Set in my myapp.pro file for android builds +#include +#include +#include +#include +#include +#include +#include + +void myMessageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg) +{ + QString report=msg; + if (context.file && !QString(context.file).isEmpty()) { + report+=" in file "; + report+=QString(context.file); + report+=" line "; + report+=QString::number(context.line); + } + if (context.function && !QString(context.function).isEmpty()) { + report+=+" function "; + report+=QString(context.function); + } + const char*const local=report.toLocal8Bit().constData(); + switch (type) { + case QtDebugMsg: + __android_log_write(ANDROID_LOG_DEBUG,applicationName,local); + break; + case QtInfoMsg: + __android_log_write(ANDROID_LOG_INFO,applicationName,local); + break; + case QtWarningMsg: + __android_log_write(ANDROID_LOG_WARN,applicationName,local); + break; + case QtCriticalMsg: + __android_log_write(ANDROID_LOG_ERROR,applicationName,local); + break; + case QtFatalMsg: + default: + __android_log_write(ANDROID_LOG_FATAL,applicationName,local); + abort(); + } +} +#endif diff --git a/android/sound.cpp b/android/sound.cpp index d1fe9d61..5ddf43ca 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -23,255 +23,156 @@ \******************************************************************************/ #include "sound.h" - +#include "androiddebug.cpp" /* Implementation *************************************************************/ + + CSound::CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), void* arg, const int iCtrlMIDIChannel, const bool bNoAutoJackConnect ) : CSoundBase ( "OpenSL", true, fpNewProcessCallback, arg, iCtrlMIDIChannel, bNoAutoJackConnect ) { - + pSound = this; +#ifdef ANDROIDDEBUG + qInstallMessageHandler(myMessageHandler); +#endif } -void CSound::InitializeOpenSL() +void CSound::setupCommonStreamParams(oboe::AudioStreamBuilder *builder) { - // set up stream formats for input and output - SLDataFormat_PCM inStreamFormat; - inStreamFormat.formatType = SL_DATAFORMAT_PCM; - inStreamFormat.numChannels = 1; - inStreamFormat.samplesPerSec = SL_SAMPLINGRATE_16; - inStreamFormat.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; - inStreamFormat.containerSize = 16; - inStreamFormat.channelMask = SL_SPEAKER_FRONT_CENTER; - inStreamFormat.endianness = SL_BYTEORDER_LITTLEENDIAN; - - SLDataFormat_PCM outStreamFormat; - outStreamFormat.formatType = SL_DATAFORMAT_PCM; - outStreamFormat.numChannels = 2; - outStreamFormat.samplesPerSec = SYSTEM_SAMPLE_RATE_HZ * 1000; // unit is mHz - outStreamFormat.bitsPerSample = SL_PCMSAMPLEFORMAT_FIXED_16; - outStreamFormat.containerSize = 16; - outStreamFormat.channelMask = SL_SPEAKER_FRONT_LEFT | SL_SPEAKER_FRONT_RIGHT; - outStreamFormat.endianness = SL_BYTEORDER_LITTLEENDIAN; - - // create the OpenSL root engine object - slCreateEngine ( &engineObject, - 0, - nullptr, - 0, - nullptr, - nullptr ); - - // realize the engine - (*engineObject)->Realize ( engineObject, - SL_BOOLEAN_FALSE ); - - // get the engine interface (required to create other objects) - (*engineObject)->GetInterface ( engineObject, - SL_IID_ENGINE, - &engine ); - - // create the main output mix - (*engine)->CreateOutputMix ( engine, - &outputMixObject, - 0, - nullptr, - nullptr ); - - // realize the output mix - (*outputMixObject)->Realize ( outputMixObject, - SL_BOOLEAN_FALSE ); - - // configure the audio (data) source for input - SLDataLocator_IODevice micLocator; - micLocator.locatorType = SL_DATALOCATOR_IODEVICE; - micLocator.deviceType = SL_IODEVICE_AUDIOINPUT; - micLocator.deviceID = SL_DEFAULTDEVICEID_AUDIOINPUT; - micLocator.device = nullptr; - - SLDataSource inDataSource; - inDataSource.pLocator = &micLocator; - inDataSource.pFormat = nullptr; - - // configure the input buffer queue - SLDataLocator_AndroidSimpleBufferQueue inBufferQueue; - inBufferQueue.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; - inBufferQueue.numBuffers = 2; // max number of buffers in queue - - // configure the audio (data) sink for input - SLDataSink inDataSink; - inDataSink.pLocator = &inBufferQueue; - inDataSink.pFormat = &inStreamFormat; - - // create the audio recorder - const SLInterfaceID recorderIds[] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE }; - const SLboolean recorderReq[] = { SL_BOOLEAN_TRUE }; - - (*engine)->CreateAudioRecorder ( engine, - &recorderObject, - &inDataSource, - &inDataSink, - 1, - recorderIds, - recorderReq ); - - // realize the audio recorder - (*recorderObject)->Realize ( recorderObject, - SL_BOOLEAN_FALSE ); - - // get the audio recorder interface - (*recorderObject)->GetInterface ( recorderObject, - SL_IID_RECORD, - &recorder ); - - // get the audio recorder simple buffer queue interface - (*recorderObject)->GetInterface ( recorderObject, - SL_IID_ANDROIDSIMPLEBUFFERQUEUE, - &recorderSimpleBufQueue ); - - // register the audio input callback - (*recorderSimpleBufQueue)->RegisterCallback ( recorderSimpleBufQueue, - processInput, - this ); - - // configure the output buffer queue - SLDataLocator_AndroidSimpleBufferQueue outBufferQueue; - outBufferQueue.locatorType = SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE; - outBufferQueue.numBuffers = 2; // max number of buffers in queue - - // configure the audio (data) source for output - SLDataSource outDataSource; - outDataSource.pLocator = &outBufferQueue; - outDataSource.pFormat = &outStreamFormat; - - // configure the output mix - SLDataLocator_OutputMix outputMix; - outputMix.locatorType = SL_DATALOCATOR_OUTPUTMIX; - outputMix.outputMix = outputMixObject; - - // configure the audio (data) sink for output - SLDataSink outDataSink; - outDataSink.pLocator = &outputMix; - outDataSink.pFormat = nullptr; - - // create the audio player - const SLInterfaceID playerIds[] = { SL_IID_ANDROIDSIMPLEBUFFERQUEUE }; - const SLboolean playerReq[] = { SL_BOOLEAN_TRUE }; - - (*engine)->CreateAudioPlayer ( engine, - &playerObject, - &outDataSource, - &outDataSink, - 1, - playerIds, - playerReq ); - - // realize the audio player - (*playerObject)->Realize ( playerObject, - SL_BOOLEAN_FALSE ); - - // get the audio player interface - (*playerObject)->GetInterface ( playerObject, - SL_IID_PLAY, - &player ); - - // get the audio player simple buffer queue interface - (*playerObject)->GetInterface ( playerObject, - SL_IID_ANDROIDSIMPLEBUFFERQUEUE, - &playerSimpleBufQueue ); - - // register the audio output callback - (*playerSimpleBufQueue)->RegisterCallback ( playerSimpleBufQueue, - processOutput, - this ); + // We request EXCLUSIVE mode since this will give us the lowest possible + // latency. If EXCLUSIVE mode isn't available the builder will fall back to SHARED mode + builder->setCallback(this) + ->setFormat(oboe::AudioFormat::Float) + ->setSharingMode(oboe::SharingMode::Shared) + ->setChannelCount(oboe::ChannelCount::Mono) + // ->setSampleRate(48000) + // ->setSampleRateConversionQuality(oboe::SampleRateConversionQuality::Medium) + ->setPerformanceMode(oboe::PerformanceMode::None); + return; } -void CSound::CloseOpenSL() +void CSound::openStreams() +{ + // Create callback + mCallback = this; + + //Setup output stream + oboe::AudioStreamBuilder inBuilder, outBuilder; + outBuilder.setDirection(oboe::Direction::Output); + setupCommonStreamParams(&outBuilder); + oboe::Result result = outBuilder.openManagedStream(mPlayStream); + if (result != oboe::Result::OK) { + return; + } + mPlayStream->setBufferSizeInFrames(pSound->iOpenSLBufferSizeStereo); + + warnIfNotLowLatency(mPlayStream, "PlayStream"); + printStreamDetails(mPlayStream); + + //Setup input stream + inBuilder.setDirection(oboe::Direction::Input); + setupCommonStreamParams(&inBuilder); + result = inBuilder.openManagedStream(mRecordingStream); + if (result != oboe::Result::OK) { + closeStream(mPlayStream); + return; + } + mRecordingStream->setBufferSizeInFrames(pSound->iOpenSLBufferSizeStereo); + + warnIfNotLowLatency(mRecordingStream, "RecordStream"); + printStreamDetails(mRecordingStream); +} + +void CSound::printStreamDetails(oboe::ManagedStream &stream) +{ + + QString sDirection = (stream->getDirection()==oboe::Direction::Input?"Input":"Output"); + QString sFramesPerBurst = QString::number(stream->getFramesPerBurst()); + QString sBufferSizeInFrames = QString::number(stream->getBufferSizeInFrames()); + QString sBytesPerFrame = QString::number(stream->getBytesPerFrame()); + QString sBytesPerSample = QString::number(stream->getBytesPerSample()); + QString sBufferCapacityInFrames = QString::number(stream->getBufferCapacityInFrames()); + QString sPerformanceMode = (stream->getPerformanceMode()==oboe::PerformanceMode::LowLatency?"LowLatency":"NotLowLatency"); + QString sSharingMode = (stream->getSharingMode() == oboe::SharingMode::Exclusive?"Exclusive":"Shared"); + QString sDeviceID = QString::number(stream->getDeviceId()); + QString sSampleRate = QString::number(stream->getSampleRate()); + QString sAudioFormat = (stream->getFormat()==oboe::AudioFormat::I16?"I16":"Float"); + + QString sFramesPerCallback = QString::number(stream->getFramesPerCallback()); + //QString sSampleRateConversionQuality = (stream.getSampleRateConversionQuality()==oboe::SampleRateConversionQuality:: + + qInfo() << "Stream details: [sDirection: " << sDirection << + ", FramesPerBurst: " << sFramesPerBurst << + ", BufferSizeInFrames: " << sBufferSizeInFrames << + ", BytesPerFrame: " << sBytesPerFrame << + ", BytesPerSample: " << sBytesPerSample << + ", BufferCapacityInFrames: " << sBufferCapacityInFrames << + ", PerformanceMode: " << sPerformanceMode << + ", SharingMode: " << sSharingMode << + ", DeviceID: " << sDeviceID << + ", SampleRate: " << sSampleRate << + ", AudioFormat: " << sAudioFormat << + ", FramesPerCallback: " << sFramesPerCallback << "]"; + +} + +void CSound::warnIfNotLowLatency(oboe::ManagedStream &stream, QString streamName) { + if (stream->getPerformanceMode() != oboe::PerformanceMode::LowLatency) { + QString latencyMode = (stream->getPerformanceMode()==oboe::PerformanceMode::None ? "None" : "Power Saving"); + // throw CGenErr ( tr ( "Stream is NOT low latency." + // "Check your requested format, sample rate and channel count." ) ); + } +} + +void CSound::closeStream(oboe::ManagedStream &stream) +{ + if (stream) { + oboe::Result requestStopRes = stream->requestStop(); + oboe::Result result = stream->close(); + if (result != oboe::Result::OK) { + throw CGenErr ( tr ( "Error closing stream: $s", + oboe::convertToText(result) ) ); + } + stream.reset(); + } +} + +void CSound::closeStreams() { // clean up - (*recorderObject)->Destroy ( recorderObject ); - (*playerObject)->Destroy ( playerObject ); - (*outputMixObject)->Destroy ( outputMixObject ); - (*engineObject)->Destroy ( engineObject ); + closeStream(mRecordingStream); + closeStream(mPlayStream); } void CSound::Start() { - InitializeOpenSL(); - -// TEST We have to supply the interface with initial buffers, otherwise -// the rendering will not start. -// Note that the number of buffers enqueued here must match the maximum -// numbers of buffers configured in the constructor of this class. -vecsTmpAudioSndCrdStereo.Reset ( 0 ); - - // enqueue initial buffers for record - (*recorderSimpleBufQueue)->Enqueue ( recorderSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - (*recorderSimpleBufQueue)->Enqueue ( recorderSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - // enqueue initial buffers for playback - (*playerSimpleBufQueue)->Enqueue ( playerSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - (*playerSimpleBufQueue)->Enqueue ( playerSimpleBufQueue, - &vecsTmpAudioSndCrdStereo[0], - iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); - - // start the rendering - (*recorder)->SetRecordState ( recorder, SL_RECORDSTATE_RECORDING ); - (*player)->SetPlayState ( player, SL_PLAYSTATE_PLAYING ); + openStreams(); // call base class CSoundBase::Start(); + + // finally start the streams so the callback begins, start with inputstream first. + mRecordingStream->requestStart(); + mPlayStream->requestStart(); + } void CSound::Stop() { - // stop the audio stream - (*recorder)->SetRecordState ( recorder, SL_RECORDSTATE_STOPPED ); - (*player)->SetPlayState ( player, SL_PLAYSTATE_STOPPED ); - - // clear the buffers - (*recorderSimpleBufQueue)->Clear ( recorderSimpleBufQueue ); - (*playerSimpleBufQueue)->Clear ( playerSimpleBufQueue ); + closeStreams(); // call base class CSoundBase::Stop(); - - CloseOpenSL(); } int CSound::Init ( const int iNewPrefMonoBufferSize ) { - - -// TODO make use of the following: -// String sampleRate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)); -// String framesPerBuffer = am.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER)); -/* -// get the Audio IO DEVICE CAPABILITIES interface -SLAudioIODeviceCapabilitiesItf audioCapabilities; - -(*engineObject)->GetInterface ( engineObject, - SL_IID_AUDIOIODEVICECAPABILITIES, - &audioCapabilities ); - -(*audioCapabilities)->QueryAudioInputCapabilities ( audioCapabilities, - inputDeviceIDs[i], - &audioInputDescriptor ); -*/ - - // store buffer size - iOpenSLBufferSizeMono = iNewPrefMonoBufferSize; + iOpenSLBufferSizeMono = 512 ; + //iNewPrefMonoBufferSize; // init base class CSoundBase::Init ( iOpenSLBufferSizeMono ); @@ -282,7 +183,6 @@ SLAudioIODeviceCapabilitiesItf audioCapabilities; // create memory for intermediate audio buffer vecsTmpAudioSndCrdStereo.Init ( iOpenSLBufferSizeStereo ); - // TEST #if ( SYSTEM_SAMPLE_RATE_HZ != 48000 ) # error "Only a system sample rate of 48 kHz is supported by this module" @@ -295,57 +195,105 @@ SLAudioIODeviceCapabilitiesItf audioCapabilities; iModifiedInBufSize = iOpenSLBufferSizeMono / 3; vecsTmpAudioInSndCrd.Init ( iModifiedInBufSize ); - return iOpenSLBufferSizeMono; } -void CSound::processInput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ) +// This is the main callback method for when an audio stream is ready to publish data to an output stream +// or has received data on an input stream. As per manual much be very careful not to do anything in this back that +// can cause delays such as sleeping, file processing, allocate memory, etc +oboe::DataCallbackResult CSound::onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames) { - CSound* pSound = static_cast ( instance ); + // only process if we are running + if ( ! pSound->bRun ) + { + return oboe::DataCallbackResult::Continue; + } - // only process if we are running - if ( !pSound->bRun ) + // Need to modify the size of the buffer based on the numFrames requested in this callback. + // Buffer size can change regularly by android devices + int& iBufferSizeMono = pSound->iOpenSLBufferSizeMono; + + // perform the processing for input and output +// QMutexLocker locker ( &pSound->Mutex ); + // locker.mutex(); + + //This can be called from both input and output at different times + if (oboeStream == pSound->mPlayStream.get() && audioData) { - return; + float *floatData = static_cast(audioData); + + // Zero out the incoming container array + memset(audioData, 0, sizeof(float) * numFrames * oboeStream->getChannelCount()); + + // Only copy data if we have data to copy, otherwise fill with silence + if (!pSound->vecsTmpAudioSndCrdStereo.empty()) + { + for (int frmNum = 0; frmNum < numFrames; ++frmNum) + { + for (int channelNum = 0; channelNum < oboeStream->getChannelCount(); channelNum++) + { + // copy sample received from server into output buffer + + + // convert to 32 bit + const int32_t iCurSam = static_cast ( + pSound->vecsTmpAudioSndCrdStereo [frmNum * oboeStream->getChannelCount() + channelNum] ); + floatData[frmNum * oboeStream->getChannelCount() + channelNum] = (float) iCurSam/ _MAXSHORT; + } + } + } + else + { + // prime output stream buffer with silence + memset(static_cast(audioData) + numFrames * oboeStream->getChannelCount(), 0, + (numFrames) * oboeStream->getBytesPerFrame()); + } } - - QMutexLocker locker ( &pSound->Mutex ); - - // enqueue the buffer for record - (*bufferQueue)->Enqueue ( bufferQueue, - &pSound->vecsTmpAudioInSndCrd[0], - pSound->iModifiedInBufSize * 2 /* 2 bytes */ ); - -// upsampling (without filtering) and channel management -pSound->vecsTmpAudioSndCrdStereo.Reset ( 0 ); -for ( int i = 0; i < pSound->iModifiedInBufSize; i++ ) -{ - pSound->vecsTmpAudioSndCrdStereo[6 * i] = - pSound->vecsTmpAudioSndCrdStereo[6 * i + 1] = - pSound->vecsTmpAudioInSndCrd[i]; -} - -} - -void CSound::processOutput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ) -{ - CSound* pSound = static_cast ( instance ); - - // only process if we are running - if ( !pSound->bRun ) + else if (oboeStream == pSound->mRecordingStream.get() && audioData) { - return; + // First things first, we need to discard the input queue a little for 500ms or so + if (pSound->mCountCallbacksToDrain > 0) + { + // discard the input buffer + int32_t numBytes = numFrames * oboeStream->getBytesPerFrame(); + memset(audioData, 0 /* value */, numBytes); + pSound->mCountCallbacksToDrain--; + } + + // We're good to start recording now + // Take the data from the recording device ouput buffer and move + // it to the vector ready to send up to the server + + float *floatData = static_cast(audioData); + + // Copy recording data to internal vector + for (int frmNum = 0; frmNum < numFrames; ++frmNum) + { + for (int channelNum = 0; channelNum < oboeStream->getChannelCount(); channelNum++) + { + pSound->vecsTmpAudioSndCrdStereo [frmNum * oboeStream->getChannelCount() + channelNum] = + (short) floatData[frmNum * oboeStream->getChannelCount() + channelNum] * _MAXSHORT; + } + } + + // Tell parent class that we've put some data ready to send to the server + pSound->ProcessCallback ( pSound->vecsTmpAudioSndCrdStereo ); } - - QMutexLocker locker ( &pSound->Mutex ); - - // call processing callback function - pSound->ProcessCallback ( pSound->vecsTmpAudioSndCrdStereo ); - - // enqueue the buffer for playback - (*bufferQueue)->Enqueue ( bufferQueue, - &pSound->vecsTmpAudioSndCrdStereo[0], - pSound->iOpenSLBufferSizeStereo * 2 /* 2 bytes */ ); + // locker.unlock(); + return oboe::DataCallbackResult::Continue; } + +//TODO better handling of stream closing errors +void CSound::onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result result) +{ + qDebug() << "CSound::onErrorAfterClose"; +} + +//TODO better handling of stream closing errors +void CSound::onErrorBeforeClose(oboe::AudioStream *oboeStream, oboe::Result result) +{ + qDebug() << "CSound::onErrorBeforeClose"; +} + + + diff --git a/android/sound.h b/android/sound.h index 4af7353c..a8639bcb 100644 --- a/android/sound.h +++ b/android/sound.h @@ -24,15 +24,18 @@ #pragma once -#include -#include +/* Deprecated, moving to OBOE + * #include + * #include */ +#include #include #include "soundbase.h" #include "global.h" - +#include +#include /* Classes ********************************************************************/ -class CSound : public CSoundBase +class CSound : public CSoundBase, public oboe::AudioStreamCallback//, public IRenderableAudio, public IRestartable { public: CSound ( void (*fpNewProcessCallback) ( CVector& psData, void* arg ), @@ -45,10 +48,30 @@ public: virtual void Start(); virtual void Stop(); + // Call backs for Oboe + virtual oboe::DataCallbackResult onAudioReady(oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames); + virtual void onErrorAfterClose(oboe::AudioStream *oboeStream, oboe::Result result); + virtual void onErrorBeforeClose(oboe::AudioStream *oboeStream, oboe::Result result); + // these variables should be protected but cannot since we want // to access them from the callback function CVector vecsTmpAudioSndCrdStereo; + static void android_message_handler(QtMsgType type, + const QMessageLogContext &context, + const QString &message) + { + android_LogPriority priority = ANDROID_LOG_DEBUG; + switch (type) { + case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break; + case QtWarningMsg: priority = ANDROID_LOG_WARN; break; + case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break; + case QtFatalMsg: priority = ANDROID_LOG_FATAL; break; + }; + + __android_log_print(priority, "Qt", "%s", qPrintable(message)); + }; + // TEST CVector vecsTmpAudioInSndCrd; int iModifiedInBufSize; @@ -56,27 +79,25 @@ int iModifiedInBufSize; int iOpenSLBufferSizeMono; int iOpenSLBufferSizeStereo; -protected: +private: + void setupCommonStreamParams(oboe::AudioStreamBuilder *builder); + void printStreamDetails(oboe::ManagedStream &stream); + void openStreams(); + void closeStreams(); + void warnIfNotLowLatency(oboe::ManagedStream &stream, QString streamName); + void closeStream(oboe::ManagedStream &stream); - void InitializeOpenSL(); - void CloseOpenSL(); + oboe::ManagedStream mRecordingStream; + oboe::ManagedStream mPlayStream; + AudioStreamCallback *mCallback; - // callbacks - static void processInput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ); + // used to reach a state where the input buffer is + // empty and the garbage in the first 500ms or so is discarded + static constexpr int32_t kNumCallbacksToDrain = 10; + int32_t mCountCallbacksToDrain = kNumCallbacksToDrain; - static void processOutput ( SLAndroidSimpleBufferQueueItf bufferQueue, - void* instance ); - - SLObjectItf engineObject; - SLEngineItf engine; - SLObjectItf recorderObject; - SLRecordItf recorder; - SLAndroidSimpleBufferQueueItf recorderSimpleBufQueue; - SLObjectItf outputMixObject; - SLObjectItf playerObject; - SLPlayItf player; - SLAndroidSimpleBufferQueueItf playerSimpleBufQueue; + // Used to reference this instance of class from within the static callback + CSound *pSound; QMutex Mutex; diff --git a/src/global.h b/src/global.h index cb49542b..12478b1c 100755 --- a/src/global.h +++ b/src/global.h @@ -255,6 +255,8 @@ typedef unsigned __int64 uint64_t; typedef unsigned __int32 uint32_t; typedef unsigned __int16 uint16_t; typedef unsigned __int8 uint8_t; +#elif defined ( __ANDROID__ ) +/* don't redfine types for android as these ones below don't work. */ #else typedef long long int64_t; typedef int int32_t; diff --git a/src/main.cpp b/src/main.cpp index d90355a5..e8299f98 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -32,12 +32,15 @@ #include "settings.h" #include "testbench.h" #include "util.h" - +#ifdef ANDROID + #include +#endif // Implementation ************************************************************** int main ( int argc, char** argv ) { + QTextStream& tsConsole = *( ( new ConsoleWriterFactory() )->get() ); QString strArgument; double rDbleArgument; @@ -466,6 +469,14 @@ int main ( int argc, char** argv ) QCoreApplication* pApp = bUseGUI ? new QApplication ( argc, argv ) : new QCoreApplication ( argc, argv ); +#ifdef ANDROID + auto result = QtAndroid::checkPermission(QString("android.permission.RECORD_AUDIO")); + if(result == QtAndroid::PermissionResult::Denied){ + QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(QStringList({"android.permission.RECORD_AUDIO"})); + if(resultHash["android.permission.RECORD_AUDIO"] == QtAndroid::PermissionResult::Denied) + return 0; + } +#endif #ifdef _WIN32 // set application priority class -> high priority From 7df3ce1115ca8b44d1d068eac6a64c2a430bb397 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 11 May 2020 17:10:38 +0200 Subject: [PATCH 09/15] small merge fixes --- Jamulus.pro | 5 +++-- src/global.h | 4 ++-- src/main.cpp | 20 ++++++++++++++------ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Jamulus.pro b/Jamulus.pro index c06f7e92..4ba4813a 100755 --- a/Jamulus.pro +++ b/Jamulus.pro @@ -140,7 +140,9 @@ win32 { INSTALLS += target HEADERS += android/sound.h - SOURCES += android/sound.cpp + SOURCES += android/sound.cpp \ + android/androiddebug.cpp + LIBS += -lOpenSLES ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android OTHER_FILES += android/AndroidManifest.xml @@ -433,7 +435,6 @@ android { } SOURCES += src/audiomixerboard.cpp \ - android/androiddebug.cpp \ src/buffer.cpp \ src/channel.cpp \ src/chatdlg.cpp \ diff --git a/src/global.h b/src/global.h index a68380bb..de7a0783 100755 --- a/src/global.h +++ b/src/global.h @@ -258,8 +258,8 @@ typedef unsigned __int64 uint64_t; typedef unsigned __int32 uint32_t; typedef unsigned __int16 uint16_t; typedef unsigned __int8 uint8_t; -#elif defined ( __ANDROID__ ) -/* don't redfine types for android as these ones below don't work. */ +#elif defined ( ANDROID ) +// don't redfine types for android as these ones below don't work #else typedef long long int64_t; typedef int int32_t; diff --git a/src/main.cpp b/src/main.cpp index 3df5b3d4..fa615518 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -34,9 +34,10 @@ #include "testbench.h" #include "util.h" #ifdef ANDROID - #include +# include #endif + // Implementation ************************************************************** int main ( int argc, char** argv ) @@ -524,13 +525,20 @@ int main ( int argc, char** argv ) QCoreApplication* pApp = bUseGUI ? new QApplication ( argc, argv ) : new QCoreApplication ( argc, argv ); + #ifdef ANDROID - auto result = QtAndroid::checkPermission(QString("android.permission.RECORD_AUDIO")); - if(result == QtAndroid::PermissionResult::Denied){ - QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(QStringList({"android.permission.RECORD_AUDIO"})); - if(resultHash["android.permission.RECORD_AUDIO"] == QtAndroid::PermissionResult::Denied) - return 0; + // special Android coded needed for record audio permission handling + auto result = QtAndroid::checkPermission ( QString ( "android.permission.RECORD_AUDIO" ) ); + + if ( result == QtAndroid::PermissionResult::Denied ) + { + QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync ( QStringList ( { "android.permission.RECORD_AUDIO" } ) ); + + if ( resultHash["android.permission.RECORD_AUDIO"] == QtAndroid::PermissionResult::Denied ) + { + return 0; } + } #endif #ifdef _WIN32 From 610f234ad83dda543d1bae23a8adf86aa21154a4 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 11 May 2020 17:42:33 +0200 Subject: [PATCH 10/15] set correct author name --- android/sound.cpp | 2 +- android/sound.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/sound.cpp b/android/sound.cpp index 1ed5dfc3..ae28508a 100644 --- a/android/sound.cpp +++ b/android/sound.cpp @@ -2,7 +2,7 @@ * Copyright (c) 2004-2020 * * Author(s): - * Volker Fischer + * Simon Tomlinson * ****************************************************************************** * diff --git a/android/sound.h b/android/sound.h index fdd9caf7..535694b7 100644 --- a/android/sound.h +++ b/android/sound.h @@ -2,7 +2,7 @@ * Copyright (c) 2004-2020 * * Author(s): - * Volker Fischer + * Simon Tomlinson * ****************************************************************************** * From 312b5f30476ec5dd668d593e7a698908a403edd9 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 11 May 2020 19:51:34 +0200 Subject: [PATCH 11/15] some more German translations --- src/res/translation/translation_de_DE.qm | Bin 36015 -> 65789 bytes src/res/translation/translation_de_DE.ts | 161 ++++++++++++----------- src/res/translation/translation_es_ES.qm | Bin 93564 -> 93604 bytes src/res/translation/translation_es_ES.ts | 5 + src/res/translation/translation_fr_FR.qm | Bin 19053 -> 30936 bytes src/res/translation/translation_fr_FR.ts | 21 +-- src/res/translation/translation_pt_PT.qm | Bin 94647 -> 94647 bytes src/res/translation/translation_pt_PT.ts | 5 + 8 files changed, 106 insertions(+), 86 deletions(-) diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index 34eb8995d63b2d311e35b33078f85f3afffbc81c..4aa1990b402cb224becd77253381d34ce11e6b99 100644 GIT binary patch literal 65789 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 delta 2089 zcmXAqYg80h7KL|}b*Zi{XpD-3BQz4ls1b#r_yS)M5rkk+KoAgtmRE~FcnG#MAV?4w zYD(fG!~`FxsDL3eF%V&tI3otZ#LQa842dHn5oL5i1cIV7N9)&Dy{hiL`|PvN?HBn% z?P1>RaWU5R`jd+C8;*9(QI(fEmjjwQ08YTBKB6BmuTy2HtID`|Vj$r8oyyRsDicb9 zw-*7DC$KgSh+;r+E)d!dVNWd(^BaVtg@9v-%JpRs%%6V^q`5$Nun)-af$-!u5NQIN zQ3Q-NgT4JDZ4d;uQ~~1J!Bz&)#@oPF%?0wS!Te4FHhaN>y?{kbWtJNltwGjCutIBk zKLS=sViK2uRm}#*8^CH(0P!T|y?)sF6Wg(Q%h zgc-dqKyt9+&*{ykV)(SserX(huap4mFTvk~^rYKkO~|+O`#IKznn?Entbai!g#{sO z(oE7df(Q#oAX`MltM}Q7FjY`}AvHKP?G~VwP<^={$jnCVyXyecV|-ucLvmiIj2(}= z{{YM|Bw=8B7qHchV|{cW8{zbaUIOpsabAN5fyL*!h;x%@;aD!FBn^1OiQ5+Z7hqH` zSLQbw2w%y4+OGpvNZh~Ij*##suJ1z$7$~)O&#-y_!1~+V%{T8)NOG&3s&gEO**#qRV;E#*@p?oX$*d1 zd)f*pUbbvs)DIN5aqQr65wKgz4xLS=E_$gn8dyaI36kSgCVWM_NAdfFRcii5`+BqL zYt6(0_U-?E0d{(`Yd#|+bRWAJ{c;6;=+6EbKAGYat1`NuJ-XOLd2OTey@_x8^omG_NBg$JnUMs8s&T^yV1FqQ9T??{F5m(lfyPLD7Cy0M+3w`Zmxq zu|o{JIv;TOT@12`1bhO;jA^vJtcZtxrQ?$Ch^p?(V#6W2pLEB>u4gS2mb+q)gC1De zpqX8GpT>Tk%FG^(>-%5OJyxWN|NB)kQs?pd0jYB}sjpu+YqI;w$goSAUB1H-?Y)-hjdHL5$QBO zMya)(5}7?9_2jgZp?=cv2?a1#YA1g(hf;0OPJ8|mu$-t}^&PECe5!Iwv)14vP{-D2 z<9ldbO0Cwo;U|h{oAyEi35a})XipED1GEh;jG|w!{bmmx7+$V&`xC`pqv!KV6i!e3zMwVQ)cRAf_rE*m{9qU^lUpr3& z7i}-MJt4W9YUMj;{{?KHDc@a9*GEpZe0L3fuZvfi+A0qUz2uj({6}XB;JVs!yz}Rn zh_}XA+V3ErrfV$qd&$@>jw*M&RP3b*qVJXeQ0+O2zce*4;i+ZI3aZ4s(6ViR8f8yw z+5J0}9&NCEkP!*ER9g;5koJrLE4x!v`Nk@h=Dk*{OUtN7MOGna*8&k$Dh=0_`_j~R z!rHBx`)AQClrlI6@(|RlDujEagS5X%&^HgcjC_&ok>lB-4vdLN3 z^aE{eJEZF^p*^-2=!VYKP&M0i&w|V4QMh>D2nx;W^^}0m74f!vFvP diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 64a8b4bb..3fe40864 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -732,347 +732,347 @@ Local jitter buffer slider control - + Lokale Netzwerkpuffergröße Schieberegler Server jitter buffer slider control - + Server Netzwerkpuffergröße Schieberegler Auto jitter buffer switch - + Automatik für die Netzwerkpuffergröße aktivieren Jitter buffer status LED indicator - + Netzwerkpuffer Status LED Sound Card Device - + Soundkartengerät The ASIO driver (sound card) can be selected using - + Der ASIO-Treiber (Soundkarte) kann ausgewählt werden mit der 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. - + Software unter Windows. Unter MacOS und Linux kann man die Soundkarte nicht auswählen. Wenn der selektierte ASIO-Treiber nicht gültig ist, dann wird eine Fehlermeldung angezeigt und der vorherige gültige Treiber wird wieder ausgewählt. If the driver is selected during an active connection, the connection is stopped, the driver is changed and the connection is started again automatically. - + Wenn der Treiber während eine aktiven Verbindung ausgewählt wird, dann wird die Verbindung gestoppt, der neue Treiber ausgewählt und anschließend wird die Verbindung automatisch wiederhergestellt. Sound card device selector combo box - + Soundkarten Auswahlbox 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. - + Falls der ASIO4All-Treiber verwendet wird, kann es sein, dass dieser Treiber zusätzliche 10-30 ms Verzögerung hinzufügt. Aus diesem Grund sollte man bevorzugt einen nativen ASIO-Treiber der Soundkarte verwenden, der mit dem Produkt mitgeliefert wurde. If you are using the kX ASIO driver, make sure to connect the ASIO inputs in the kX DSP settings panel. - + Falls der kx ASIO-Treiber verwendet wird, dann muss man darauf achten, dass die ASIO-Eingänge im kx DSP-Einstellungsfenster verbunden sind. Sound Card Channel Mapping - + Soundkarten Kanalzuweisung 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. - + Falls die ausgewählte Soundkarte mehr als zwei Eingangs- oder Ausgangskanäle unterstützt, dann werden die Steuerelemente für die Kanalzuweisung angezeigt. For each - + Für jeden input/output channel (Left and Right channel) a different actual sound card channel can be selected. - + Eingangs-/Ausgangskanal (linker und rechter Kanal) kann ein beliebiger Soundkartenkanal zugewiesen werden. Left input channel selection combo box - + Linker Eingang Kanalauswahlbox Right input channel selection combo box - + Rechter Eingang Kanalauswahlbox Left output channel selection combo box - + Linker Ausgang Kanalauswahlbox Right output channel selection combo box - + Rechter Ausgang Kanalauswahlbox Enable Small Network Buffers - Aktiviere kleine Netzwerkpuffer + Aktiviere kleine Netzwerkpuffer 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 - + Falls aktiviert wird die Unterstützung für sehr kleine Netzwerk-Audiopakete aktiviert. Sehr kleine Netzwerkpakete werden nur dann verwendet, wenn der Soundkartenpuffer kleiner als 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. - + Samples ist. Je kleiner die Netzwerkpakete sind, desto kleiner ist auch die Audioverzögerung. Aber gleichzeitig wird dadurch die Netzwerklast erhöht und die Wahrscheinlichkeit für Audioaussetzer erhöht sich dadurch auch. Enable small network buffers check box - + Aktiviere kleine Netzwerkpuffer Schalter Sound Card Buffer Delay - + Soundkarten Puffergröße The buffer delay setting is a fundamental setting of the - + Die Soundkartenpuffergröße ist eine fundamentale Einstellung der software. This setting has influence on many connection properties. - + Software. Diese Einstellung hat Einfluss auf viele andere Verbindungseigenschaften. Three buffer sizes are supported - + Drei Puffergrößen werden unterstützt 64 samples: This is the preferred setting since it gives lowest latency but does not work with all sound cards. - + 64 Samples: Dies ist die bevorzugte Einstellung weil es die geringste Verzögerung hat. Diese Puffergröße funktioniert allerdings nicht mit allen Soundkarten. 128 samples: This setting should work on most of the available sound cards. - + 128 Samples: Diese Puffergröße sollte mit den meisten Soundkarten funktionieren. 256 samples: This setting should only be used if only a very slow computer or a slow internet connection is available. - + 256 Samples: Diese Einstellung sollte nur dann verwendet werden, wenn man einen langsamen Computer oder eine langsame Internetverbindung hat. Some sound card driver do not allow the buffer delay to be changed from within the - + Manche Soundkartentreiber unterstützen nicht das Verändern der Puffergröße innerhalb der 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. - + Software. In diesem Fall ist die Einstellungsmöglichkeit für die Puffergröße deaktiviert. Die Puffergröße muss man stattdessen direkt im Soundkartentreiber durchführen. Unter Windows kann man den ASIO-Einstellungen Knopf drücken um die Treibereinstellungen zu öffnen. Unter Linux benutzt man das Jack-Konfigurationsprogramm um die Puffergröße einzustellen. If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + Falls keiner der vorgegebenen Puffergrößen ausgeählt ist und alle Einstellungen deaktiviert sind, dann wird eine nicht unterstützte Puffergröße im Soundkartentreiber verwendet. Die software will still work with this setting but with restricted performannce. - + Software funktioniert trotzdem aber es könnte eine größere Verzögerung resultieren. 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. - + Die Puffergröße hat einen Einfluss auf den Verbindungsstatus, die aktuelle Upload-Rate und die Gesamtverzögerung. Je kleiner der Puffer, desto größer ist die Wahrscheinlichkeit für das Auftreten einer rot leuchtenden LED (was Audioaussetzer anzeigt), eine höheren Upload-Rate und eine niedrigere Gesamtverzögerung. The buffer setting is therefore a trade-off between audio quality and overall delay. - + Die Puffergröße ist somit ein Kompromiss zwischen Audioqualität und Gesamtverzögerung. If the buffer delay settings are disabled, it is prohibited by the audio driver to modify this setting from within the - + Falls die Puffergröße nicht verstellt werden kann, dann hat der Soundkartentreiber die Einstellung gesperrt man kann es nicht innerhalb der 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. - + Software verändern. Unter Windows kann man den ASIO-Einstellungen Knopf drücken, um die Treibereinstellungen zu öffnen. Unter Linux kann man ein Jack-Konfigurationswerkzeug verwenden, um die Puffergröße zu verändern. 128 samples setting radio button - + 128 Samples Einstellknopf 256 samples setting radio button - + 256 Samples Einstellknopf 512 samples setting radio button - + 512 Samples Einstellknopf ASIO setup push button - + ASIO-Einstellungen Knopf Fancy Skin - Schicke Oberfläche + Schicke Oberfläche If enabled, a fancy skin will be applied to the main window. - + Falls aktiviert wird eine schicke Oberfläche im Hauptfenster verwendet. Fancy skin check box - + Schicke Oberfläche Schalter Display Channel Levels - Zeige Kanalsignalpegel + Zeige Kanalsignalpegel If enabled, each client channel will display a pre-fader level bar. - + Falls aktiviert wird eine Signalpegelanzeige neben jedem Kanalfader angezeigt, welcher den Pegel vor dem Fader anzeigt. Display channel levels check box - + Zeige Kanalpegel Schalter Audio Channels - Audiokanäle + 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. - + Hiermit kann man die Anzahl an Audiokanälen auswählen. Es gibt drei Modi. Die Mono- und Stereomodi verwenden jeweils einen oder zwei Kanäle. Im Mono-In/Stereo-Out Modus wird ein Monosignal zum Server geschickt aber es kommt ein Stereo-Signal zurück vom Server. Dies is nützlich für den Fall, dass man an die Soundkarte ein Instrument an den einen Eingangskanal und ein Mikrofon an den anderen Eingangskanal angeschlossen hat. In diesem Fall können die beiden Signale zusammen gemischt werden und an den Server geschickt werden aber man kann das Stereo-Signal von den anderen Musikern hören. 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. - + Wenn man den Stereo-Modus verwendet, dann ist die Übertragungsrate etwas höher. Man muss sicher stellen, dass die Internetverbindung die höhere Rate übertragen kann. 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. - + Wenn der Stereo-Modus ausgewählt wurde, dann verschwindet die Kanalselektion für den Halleffekt im Hauptfenster, da der Effekt auf beide Stereokanäle angewendet wird. Audio channels combo box - + Audiokanal Auswahlbox Audio Quality - Audioqualität + 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. - + Wählt die gewünschte Audioqualität aus. Es wird eine niedrige, mittlere und hohe Audioqualität angeboten. Je höher die Audioqualität, desto höher ist die Netzwerkübertragungsrate. Man muss sicherstellen, dass die Internetverbindung die höhere Rate übertragen kann. Audio quality combo box - + Audioqualität Auswahlbox New Client Level - Pegel für neuen Teilnehmer + Pegel für neuen Teilnehmer 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. - + Der Pegel für neue Teilnehmer definiert die Fadereinstellung, wenn sich ein Teilnehmer neu mit dem Server verbindet. D.h. wenn ein neuer Fader erscheint, dann wird er auf den voreingestellten Pegel gesetzt. Eine Ausnahme bildet der Fall, dass der Teilnehmer vorher schon mal mit dem Server verbunden war und der Pegel gespeichert war. New client level edit box - + Neuer Teilnehmer Pegel Einstellbox Central Server Address - + Zentralserveradresse 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. - + Die Zentralserveradresse ist die IP-Adresse oder URL des Zentralservers, der die Serverlist organisiert und bereitstellt. Mit der Zentralserveradresse kann entweder die örtliche Region festgelegt werden (durch Auswahl des entsprechenden vorgegebenen Zentralservers) oder man gibt eine beliebige Adresse manuell ein. Default central server type combo box - + Voreingestellter Zentralservertyp Auswahlbox Central server address line edit - + Zentralserveradresse Eingabefeld Current Connection Status Parameter - + Verbindungsstatus 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. - + Die Ping-Zeit ist die Zeit, die der Audiodatenstrom benötigt, um von der Applikation zum Server und zurück zu kommen. Diese Verzögerung wird vom Netzwerk hervorgerufen. Diese Verzögerung sollte so um die 20-30 ms sein. Falls die Verzögerung größer ist (z.B. 50-60 ms), der Abstand zum Server ist zu groß oder die Internetverbindung ist nicht ausreichend. The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. - + Die Gesamtverzögerung setzt sich zusammen aus der Ping-Zeit und die Verzögerung, die durch die Puffergrößen verursacht wird. 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). - + Die Upload-Rate hängt von der Soundkartenpuffergröße und die Audiokomprimierung ab. Man muss sicher stellen, dass die Upload-Rate immer kleiner ist als die Rate, die die Internetverbindung zur Verfügung stellt (man kann die Upload-Rate des Internetproviders z.B. mit speedtest.net überprüfen). If this LED indicator turns red, you will not have much fun using the - Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der + Wenn diese LED rot leuchtet, dann wirst du keinen Spaß haben mit der software. - Software. + Software. @@ -1087,7 +1087,7 @@ Mono-in/Stereo-out - + Mono-In/Stereo-Out @@ -1148,17 +1148,17 @@ The selected audio device could not be used because of the following error: - + Das ausgewählte Audiogerät kann aus folgendem Grund nicht verwendet werden: The previous driver will be selected. - + Der vorherige Treiber wird wieder ausgewählt. Ok - + @@ -1203,7 +1203,7 @@ Enable Small Network Buffers - Aktiviere kleine Netzwerkpuffer + Aktiviere kleine Netzwerkpuffer @@ -1306,7 +1306,7 @@ val - + Wert @@ -1928,7 +1928,7 @@ Central Server Address - + Zentralserveradresse @@ -1938,12 +1938,12 @@ Default central server type combo box - + Voreingestellter Zentralservertyp Auswahlbox Central server address line edit - + Zentralserveradresse Eingabefeld @@ -2277,6 +2277,11 @@ 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. + + + Error closing stream: $s + + CSoundBase diff --git a/src/res/translation/translation_es_ES.qm b/src/res/translation/translation_es_ES.qm index 0605aee0a5ad34119fa3993cb3e346a9840dd7b3..1b23987e9d8267b84677153eb52d4eaabd600edb 100644 GIT binary patch delta 4318 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 Apa1{> delta 4256 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 n1u 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. requiere la interfaz de audio de baja latencia ASIO para funcionar correctamente. No es una interfaz estándar de Windows y por tanto se requiere un driver de audio especial. Tu tarjeta de audio podría tener un driver ASIO nativo (lo recomendado) o quizá quieras probar un driver alternativo como ASIO4All. + + + Error closing stream: $s + + CSoundBase diff --git a/src/res/translation/translation_fr_FR.qm b/src/res/translation/translation_fr_FR.qm index 8f6aee262342e46629ec618f976c0cc279abc0c2..8d5adb430a41e83f9cf6db7c7e3bebd3a01f4730 100644 GIT binary patch literal 30936 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 diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 213ade65..3b8486fb 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -436,7 +436,7 @@ software. - + . @@ -466,7 +466,7 @@ If this LED indicator turns red, you will not have much fun using the - + Si ce voyant devient rouge, vous n'aurez pas beaucoup de plaisir à utiliser le logiciel @@ -984,7 +984,7 @@ Audio Channels - + Canaux audio @@ -1009,7 +1009,7 @@ Audio Quality - + Qualité audio @@ -1024,7 +1024,7 @@ New Client Level - + Niveau de nouveau client @@ -1150,7 +1150,7 @@ Buffer Delay - + Délai de temporisation @@ -2137,7 +2137,7 @@ Central Server Address: - + Adresse du serveur central : @@ -2261,7 +2261,7 @@ software. - + . @@ -2289,6 +2289,11 @@ 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. + + + Error closing stream: $s + + CSoundBase diff --git a/src/res/translation/translation_pt_PT.qm b/src/res/translation/translation_pt_PT.qm index 8f7b9c79219d5c4b49e98044e10ffe8c84420de2..b6fd9264249aa174efb7b2ff0c4a381f808d6c2d 100644 GIT binary patch delta 38 ucmdn~n05PO)(vvZo7I>dxYz?K)-f=so!gws`&WxGzd6}rd$I*%h$R3O>kVN5 delta 38 ucmdn~n05PO)(vvZ>;@I<7#P&fZI)$r^hd$I*%h$R3NYz;2} diff --git a/src/res/translation/translation_pt_PT.ts b/src/res/translation/translation_pt_PT.ts index 361a2a78..5df540ca 100644 --- a/src/res/translation/translation_pt_PT.ts +++ b/src/res/translation/translation_pt_PT.ts @@ -2289,6 +2289,11 @@ 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. + + + Error closing stream: $s + + CSoundBase From a093be74f029d759562b6cb79a5f159fd7f785f9 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 11 May 2020 22:36:09 +0200 Subject: [PATCH 12/15] most of the German translation is done now --- src/res/translation/translation_de_DE.ts | 186 +++++++++++------------ 1 file changed, 93 insertions(+), 93 deletions(-) diff --git a/src/res/translation/translation_de_DE.ts b/src/res/translation/translation_de_DE.ts index 3fe40864..ed72c5c8 100644 --- a/src/res/translation/translation_de_DE.ts +++ b/src/res/translation/translation_de_DE.ts @@ -1294,7 +1294,7 @@ Central Server Address: - Zentralserveradresse + Zentralserveradresse: @@ -1324,82 +1324,82 @@ Server List - + Severliste 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. - + Die Serverliste zeigt eine Liste von verfügbaren Server, die sich am Zentralserver registriert haben. Markiere einen Server von der Liste und drücke den Knopf Verbinden um eine Verbindung zu dem Server aufzubauen. Alternativ kann man auch den Server in der Liste direkt doppelklicken. Wenn ein Server belegt ist, dann wird eine Liste der verbundenen Musikern angezeigt. Server, die länger online sind (permanente Server) werden in Fettschrift dargestellt. 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. - + Es kann einen Moment dauern, bis die Serverliste vom Zentralserver empfangen wird. Falls keine gültige Zentralserveradresse in den Einstellungen angegeben ist, kann keine Liste angezeigt werden. Server list view - + Serverliste Anzeige Server Address - + Serveradresse The IP address or URL of the server running the - + Die IP-Adresse oder URL des Servers, auf der die 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: - + Serversoftware läuft wird hier angegeben. Optional kann eine Portnummer angefügt werden. Diese wird hinter der IP-Adresse durch ein Doppelpunkt getrennt angegeben. Beispiel: example.org: . A list of the most recent used server IP addresses or URLs is available for selection. - + Eine Liste der letzten IP-Adressen oder URLs wird gespeichert und kann nachträglich wieder ausgewählt werden. Server address edit box - + Serveradresse Eingabefeld Holds the current server IP address or URL. It also stores old URLs in the combo box list. - + Enthält die aktuelle Server-IP-Adresse oder URL. Es speichert auch alte URLs in der Auswahlliste. Filter - Filter + Filter The server list is filered by the given text. Note that the filter is case insensitive. - + Die Serverliste kann mit dem eingegebenen Text gefiltert werden, d.h. es werden nur Einträge angezeigt, die dem Filtertext entsprechen. Die Groß- und Kleinschreibung des Filtertexts wird dabei nicht beachtet. Filter edit box - + Filtereingabefeld Show All Musicians - Zeige alle Teilnehmer + Zeige alle Teilnehmer 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. - + Ist diese Einstellung angehakt, dann werden alle Musiker auf allen Servern angezeigt. Wird der Haken entfernt, dann werden alle Listeneinträge eingeklappt und die verbundenen Musikernamen werden verborgen. Show all musicians check box - + Zeige alle Teilnehmer Schalter @@ -1504,7 +1504,7 @@ By connecting to this server and agreeing to this notice, you agree to the following: - + Durch das Verbinden mit diesem Server und das Akzeptieren des Lizenztextes willigst du folgenden Bedingungen ein: @@ -1592,32 +1592,32 @@ 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. - + -Server. Dieses Schild wird auch bei allen anderen Teilnehmern, die mit dem gleichen Server verbunden sind, angezeigt. Wenn der Name leer gelassen wurde, dann wird die IP-Adresse stattdessen angezeigt. Alias or name edit box - + Alias oder Name Eingabefeld Instrument picture button - + Instrumentenbild Knopf Country flag button - + Landesflagge Knopf City edit box - + Stadt Eingabefeld Skill level combo box - + Fähigkeit Auswahlbox @@ -1670,7 +1670,7 @@ Intermediate - Mittlere Spielstärke + Mittlere Spielstärke @@ -1680,12 +1680,12 @@ 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. - + Schreibe den Namen oder Alias hier rein so dass die anderen Musikern mit denen du spielst wissen wer du bist. Zusätzlich kannst du dein Instrument auswählen und eine Flagge des Landes auswählen in dem du dich befindest. Deine Stadt und deine Spielstärke des Instruments kannst du ebenso angeben. What you set here will appear at your fader on the mixer board when you are connected to a - + Was man hier sieht wird auch am Fader im Mixer angezeigt, wenn du mit einem @@ -1805,7 +1805,7 @@ Streamer - + @@ -1825,7 +1825,7 @@ Bodhran - + @@ -1855,7 +1855,7 @@ Bongo - + Bongos @@ -1863,132 +1863,132 @@ Client List - + Teilnehmerliste 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. - + Die Teilnehmerliste zeigt alle gerade mit dem Server verbunden Musiker an. Für jeden Teilnehmer werden zusätzliche Informationen wie die IP-Adresse und Namen angezeigt. Connected clients list view - + Teilnehmerliste Start Minimized on Operating System Start - + Starte minimiert beim Starten des Betriebssystems If the start minimized on operating system start check box is checked, the - + Wenn diese Funktion angehakt ist, dann wird der server will be started when the operating system starts up and is automatically minimized to a system task bar icon. - + -Server automatisch mit dem Betriebssystemstart geladen und erscheint minimiert in der Systemleiste als Icon. Show Creative Commons Licence Dialog - + Zeige den Creative Commons Lizenzdialog If enabled, a Creative Commons BY-NC-SA 4.0 Licence dialog is shown each time a new user connects the server. - + Falls aktiviert wird ein Create Commons BY-NC-SA 4.0 Lizenzdialog angezeigt, wenn ein neuer Teilnehmer versucht sich mit dem Server zu verbinden. Make My Server Public - + Veröffentliche meinen Server If the Make My Server Public check box is checked, this server registers itself at the central server so that all - + Mit dieser Funktion wird der eigene Server in der Serverliste des Zentralservers registriert so dass alle anderen Applikationsnutzer den 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. - + -Server in der Liste sehen können und sich mit ihm verbinden können. Die Registrierung mit dem Zentralserver wird periodisch erneuert um sicherzugehen, dass alle registrierten Server auch wirklich erreichbar sind. Register Server Status - + Registrierungsstatus If the Make My Server Public check box is checked, this will show the success of registration with the central server. - + Wenn der eigene Server veröffentlicht wurde, dann zeigt der Registrierungsstatus and, ob die Registrierung erfolgreich war oder nicht. Central Server Address - Zentralserveradresse + Zentralserveradresse 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. - + Die Zentralserveradrees ist die IP-Adresse oder URL des Zentralservers bei dem man sich registrieren möchte. Mit dem Zentralservertyp legt man die Region fest, in der man sich befindet. Außerdem kann eine freie Adresse eingetragen werden. Default central server type combo box - Voreingestellter Zentralservertyp Auswahlbox + Voreingestellter Zentralservertyp Auswahlbox Central server address line edit - Zentralserveradresse Eingabefeld + Zentralserveradresse Eingabefeld Server Name - Servername + Servername 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. - + Der Servername identifiziert deinen Server in der Serverliste. Falls kein Name angegeben wurde, dann wird die IP-Adresse stattdessen angezeigt. Server name line edit - + Servername Eingabefeld Location City - + Standort Stadt 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. - + Hier kann man die Stadt angeben, in der sich der Server befindet. Falls eine Stadt angegeben wurde, dann wird die in der Serverliste angezeigt. City where the server is located line edit - + Stadt in der sich der Server befindet Eingabefeld Location country - + Standort Land 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. - + Hier kann man das Land eingeben, in dem sich der Server befindet. Falls ein Land angegeben wurde, dann wird das in der Serverliste angezeigt. Country where the server is located combo box - + Land in dem sich der Server befindet Auswahlbox @@ -1999,14 +1999,14 @@ &Hide - Ausblenden vom + &Ausblenden vom server - -Server + -Server @@ -2153,134 +2153,134 @@ 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. - + Der Jack-Server läuft nicht. Diese Software benötigt aber einen Jack-Server um zu funktionieren. Normalerweise wird der Jack-Server automatisch gestartet. Es scheint so, als hätte dieser Automatismus nicht funktioniert. Versuche den Jack-Server manuell zu starten. The Jack server sample rate is different from the required one. The required sample rate is: - + Die Jack-Server-Samplerate ist verschieden zu der benötigen. Die benötigte Samplerate ist: You can use a tool like <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></i> to adjust the Jack server sample rate. - + Do kannst ein Werkzeug wie <i><a href=http://qjackctl.sourceforge.net>QJackCtl</a></li> verwenden um die Samplerate umzustellen. Make sure to set the Frames/Period to a low value like - + Versichere dich, dass die Frames/Perioden auf einen niedrigen Wert wie z.B. to achieve a low delay. - + eingestellt ist um eine niedrige Verzögerung zu erreichen. The Jack port registering failed. - + Die Jack-Portregistrierung ist fehlgeschlagen. Cannot activate the Jack client. - + Der Jack-Client kann nicht aktiviert werden. The Jack server was shut down. This software requires a Jack server to run. Try to restart the software to solve the issue. - + Der Jack-Server wurde gestoppt. Diese Software benötigt aber einen aktiven Jack-Server um zu funktionieren. Versuche die Software neu zu starten um das Problem zu lösen. CoreAudio input AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio Eingang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint als wäre keine Soundkarte im System vorhanden. CoreAudio output AudioHardwareGetProperty call failed. It seems that no sound card is available in the system. - + CoreAudio Ausgang AudioHardwareGetProperty Aufruf schlug fehl. Es scheint, dass keine Soundkarte ist im System verfügbar. Current system audio input device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + Die aktuelle Eingangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. Current system audio output device sample rate of %1 Hz is not supported. Please open the Audio-MIDI-Setup in Applications->Utilities and try to set a sample rate of %2 Hz. - + Die aktuelle Ausgangssamplerate von %1 Hz wird nicht unterstützt. Bitte öffne die Audio-MIDI-Setup-Applikation in Applikationen->Werkzeuge und versuche die Samplerate auf %2 Hz einzustellen. The audio input stream format for this audio device is not compatible with this software. - + Das Audioeingangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. The audio output stream format for this audio device is not compatible with this software. - + Das Audioausgangsstromformat von diesem Audiogerät ist nicht kompatibel mit dieser Software. The buffer sizes of the current input and output audio device cannot be set to a common value. Please choose other input/output audio devices in your system settings. - + Die Puffergrößen vom aktuellen Eingangs- und Ausgangsaudiogerät kann nicht auf einen gemeinsamen Wert eingestellt werden. Bitte wähle ein anderes Eingangs-/Ausgangsgerät aus der Geräteliste aus. The audio driver could not be initialized. - + Der Audiotreiber konnte nicht initialisiert werden. The audio device does not support the required sample rate. The required sample rate is: - + Das Audiogerät unterstützt nicht die benötigte Samplerate. Die benötigte Samplerate ist: The audio device does not support 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 - + Das Audiogerät unterstützt nicht die benötigte Samplerate. Dieser Fehler kann auftreten, wenn ein Audiogerät wie das Roland UA-25EX verwendet wird, bei dem die Samplerate per Schalter am Gerät verstellt werden muss. Falls das der Fall sein sollte, dann stelle bitte den Schalter auf Hz on the device and restart the - + Hz am Gerät und starte die software. - Software. + Software neu. The audio device does not support the required number of channels. The required number of channels for input and output is: - + Das Audiogerät unterstützt nicht die benötigte Anzahl an Kanälen. Die benötigte Anzahl an Kanälen für den Eingang und den Ausgang ist: Required audio sample format not available. - + Das benötigte Audio Sampleformat ist nicht verfügbar. No ASIO audio device (driver) found. - + Kein ASIO-Gerätetreiber wurde gefunden. The - Die + Die 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. - + Software benötigt aber ein ASIO Audiointerface um zu funktionieren. Dies ist keine Standard-Windowsschnittstelle und benötigt deshalb einen speziellen Treiber. Entweder die Soundkarte liefert einen nativen ASIO-Treiber mit (was empfohlen wird) oder man versucht es mit dem ASIO4All-Universaltreiber. Error closing stream: $s - + Fehler beim Schließen des Datenstroms: $s @@ -2288,47 +2288,47 @@ Invalid device selection. - + Ungültige Geräteauswahl. 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: - + Die Audiotreibereigenschaften haben sich geändert. Die neuen Einstellungen sind nicht mehr kompatibel zu dieser Software. Das ausgewählte Audiogerät konnte nicht benutzt werden wegen folgendem Fehler: Please restart the software. - + Bitte starte die Software neu. Close - + No usable - + Kein benutzbares audio device (driver) found. - + Audiogerät (Treiber) konnte gefunden werden. In the following there is a list of all available drivers with the associated error message: - + Im folgenden wird eine Liste aller gefundenen Audiogeräte mit entsprechender Fehlermeldung angezeigt: Do you want to open the ASIO driver setups? - + Willst du die ASIO-Treibereinstellungen öffnen? could not be started because of audio interface issues. - + konnte nicht gestartet werden wegen Problemen mit dem Audiogerät. From 51e04b601e5c00c9c68f2e799d3f0245074979a2 Mon Sep 17 00:00:00 2001 From: Volker Fischer Date: Mon, 11 May 2020 22:36:53 +0200 Subject: [PATCH 13/15] update --- src/res/translation/translation_de_DE.qm | Bin 65789 -> 91458 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/res/translation/translation_de_DE.qm b/src/res/translation/translation_de_DE.qm index 4aa1990b402cb224becd77253381d34ce11e6b99..296f9faf3eeafc77763e2cd0bfb98efcd2e1e325 100644 GIT binary patch delta 21725 zcmd^ndwf*Ywf{atCLwPmBq0RI3D59I0w`z^(C`R^w**8~tdq?NzW16wj5;C_&%O07Z`(5M&BDnLvSDF zV2Xw(@z{~G#N0`ng|Vc!n7jMiLY%WxESQ4fj}?i<%b&vUpNqy77Yp%U`^7oOu*h?l ziF3`d!pQhotjw%L_umjJao@;%TQtpW6Jq~vaq$)@#PaQ8Yu95!oYy6O@cX^OFqVtE zs$L!@L{7H2`-zW*_~I3D-;AZg7|>5VIDV)Q>&n%qk^iFnz^G{0Dc)XQCB%kF;^3$^ zh4^HEk@3L=Lj37z!+!wN@*g$w_uYi)Z#M?tbX1N}_Zo9f z`Li(k{6bFkRi@;Udc(-FWT!Lfq5l`$5ApjI+dd=VdntV{)_aZm3374%DBY8NR!JFj$ChU*y|f zI6;WMt9{##bOesiLKyjdeLF`%2D>VJyT&{u#C>ypPt=5k(f>u?FMomOe)h8O z*+)Y{-aJlJc5?~@DUpp4S&8#6W^o+!je&&sJ8gNGbmo^j`8 zbA-6#^^9!`zA41#U(2}XMJ)b5D>CkX5_9_efZUKVICXSi#-7Q$h1mNm{rOQz#_NMu z2xHWh8Sgx?M~J`tEaSaXpqr&-8K0bwsonC;jK6+%rV#hn`~8z4=~?)y81NAF880F4;A&k-#=yLgTfe_=bwFaxJZet>Hf1N z8s7ea|H5bu272BfBaBD>-hWm2hr$>$(tqvq-+-O;_up{gZ(%nr{_nl9SBQ(Q^56Kw zEFlJ->A&eGQGjTc{`_dZf6EpuD7Q_2{vjKme-cLTQT{u6KQ6?*KK~t8MupM$*Z#Yo z*#-N#zs&#C7ke?I&Hi6qwh$d3^gq)8wEm^bzo+Rq4DkVZoqxoVV;eHZZMcsIg8-FHfK#b zycQULLRM#1rdE#51^}ajw%#?R#j_@6>mM>(MW>4*X^)~c!c%%Fvb8ypvdD)}S!r-e<&aQbLj&l9e z>eD#s=Ip6`(D$_uWKSEgP#E)fX4e}h!FwFdo)c1Ny|>}dbFw4nU4q4C%4J#ADPzFS?EiTFWjN6N*}GOI;Ut=}pZ(1^0OFh3 zdm5v{C>faj?)u-L|LNI>e*{PS(N#G^Z>8~ta;iQ*E<|2=&YWN4`TZ^W^T4*8vu}G$ z7!z7@f(Idsv#N7K4H>}8sX1-$qMy%B&xxG(dkA-RPRFq;Q^F|Uopbdy(=gy8Iop=P zeckp(&fURRVRDCa9tb}sMCy?K{M{WnKR^3nSnQ&lN5=Vu`0Ih3|F{+tUVo+fG)`*H zd8!16@AGQTGxy@T<2UBK^4q~eEd6cHyW_qu#2I(z{7*K}G3vi^d-s|LuX9&!pJAyQ zz+`l8|Jxzy*~fDyg`0)QxGVS61qmVEHgjk6U4^i^Lwy=mBXVcgT`G)O<8mAOj}_wk zt8y5mt#Rqx!)ak7^Zhg?w0!R!a^!?Z`+3c+g9anJ>#!J zob;~#Jl>wWt>pUYP|5z>ZJQyQx!=gW_w)i`)csK2*}J;YC>Wdj#=P0U*@E0R7J~^C zwCT^oPvjoTcpo9{s@%_Bho2umFR!Hfb|FUg%^S1 zpf))uyKMHfsc=kLC3!RFWAYCS$eZ|N(!MNhV!kD;1PR%Jb&Xvn@hK%?&E-b#WV8i=&Lc~W4Hm!X| zh<~e9pT=My!lS|@0mylFXM{$i;Jc~z^vE?M#HDt!BV%jKP6QPbkJdljV$C{ynukD^VK>iN{UJgl=DxD_4r3^g0A-hT$9zfo}K+eE#(7IP+8Ubjj zLz>}Y`P8_+^2~=yQZ!pVP8U8o3;mmRiA|O%^O~!PD;iqNb+Jyfxh>SZ8sY@-^jFAp zti~;@vpF1yLhvonL&U-@01Derw8grj&=5OGb()<~yPuG^8$P8>VNE#HWrmZXcKvj7 zED{NHz!rK|+T|7=UBlB7(5qU2_2~5~wTeJr=u8P#jD@h82s?T8?uuNBZjEYeB5;&X zq#)_vS|CF0^Qju!EmMj0mY!)0R2>u{3pxteM}KX*BISH~4G@j;kB2G?3L5ns>XiGEd-wORqD^SHIcDz| zeXiAfKAa*wQ?CiCpZ@ZmPb>SES~o3MnC8Na5%R-hC6s)fe0+NGNqwxg4y2SzylMaW z#uRz;{?SriRX%87Bao@!ituFN*8#Q~y$Q)m&F)iA@tSc$K_>tp(b#PZ4nkwloU@Q| zOXa4g298PS)yF%dQHC!nrAOa$I|kagyL&psf;l9Uh5M(0>Mr#pjQ5??`JJ7cpLEiIZnF<3l z^@7E0IFXpx2RdRxBsvPtQy!9IBve2kNeRQ+c)wMRL(DxZ4_D69TM5Ym+smYg4>~h76AMaDhY! z;7^32iEt9_J?^K#4H~^RYQ-5L8Cg^|%CTF_knV&|LqlEhJIq>B&8R#hueewt1`F29 zV&H(#>3+^IAym>#?FHiaq|+i47>r!%xj^-|+PY8hXh(G4gT=M>_%=elbF&pi{&*BZ zh3}Eq&n}hsPb~&VzvCN;M}9LSi;oW%Qz4R?C+r74^cZ^wr%zcuq(V-As6;-wt%x#CX&IB)Yd20BPra~rP0T5O4cjWkY2wfVeKuF9 zIgHo(N8$PO$f;LXkM>FYZv#FIBZR&(6@ue(er-*Nb=`#>}mG&{&3^~0L_m`$C@WDKSd1Fu$O zh+kEN*PaUml?D+F&;%mu#+t!cC+TK$Bn&D*3f{w5>Ai(vWQhHNl-(G{6>Dzp>_BuG z>sh^8lb!@D)%D0|?g|D599r8Ehz4zMsuoAKP-89*#oGf>@7pa zH9Pk0Uz<_%CnQI1!bDG#koQh2O}So|;7Q;gO~MNT*VCz|aJLQ+UXPYK6Qr?fzf9w! zrz1dlKWgO~^ws(feVr!2t!N3zWB@Xq@-O*ivd^-9DckA0$uhByA*AWcglNn_ zYdjS4-iyYP;pWg-MdH*=tz~8nkw~lyO(*N9G#|~P%^`~si#|fGcyCvR@f}eupZICn zL_On1<%KzGW<0L1woD$^Xr}boiV4fwhf3v;+>*2iWrAJyOfHd2Km73N;z?NiTrJ(KfJ@h zuWhklQe!S9qfG`{O~qw&8bM~z*y?9X~0KR3RAIT`_u|hdP z9OW(a7zwrD>GqB!%!b$9B#w6#D`tR6h62GFdBX?Avh4kxCK8iLKoi{)m*LGk)q>^S zpAIc8sf&a$C{jK(mXpejK3E~&e1DgmaDEJthldOPI_pF$KctcZMdDPm0kAGi6O!6 z#g;}L>n>I@0V&qt`?eKI<844l{9;*C;DTyZG+Le&@cdt1QXX1IUf% zm!))0!%2|AX$HzA+Ep)B&S>2_q*`>uhJsPuh$0UR!a^rdijoe}3m}%IALJ`A2P=rh zU>I?avuB#wl?ng{2qGO3q&QvSWShA<3Ulmgi)jz0%11$fQ&o>5>(o`IL#!@gEE-ie zG+Ff(&mE4W22dVT!`5mQZMLw?Hq2ln;WhA)bQFkuv<%+BMG{2iacSO()y#w<$h{)W zg4s8HFq(o-x-;TDm5Z@!T-x?;|73ho6$tlRKuQ>XOlN~hdBe9VN{SmjU8DY`D;W~j zp4GcC84m^8<>F6Dcf9n;YU6zPkDK5uweQeG##_N8*$H6?>a-`%ttcp_L06!`9afNA zfalgqvwxY~dtL7oabd&I_T)C008kqV;=JY5GlgZ>{VW&T(Gdy&78Xoe0zrU)Gz4O7 z53j{9O|d{c2#tfL+e)wq3b=tE*a(N95S#=^Ah$pdRB?*cr))7LL+EHn!3!-CDpn!%Bd|;ebS7i% zXw!_6$~wq18g37-M;}UR)>FwqVzt=>9fTp)8hO^iqE*J->9TZJWG#ps#$Ezh5et8m z(`s=DpSI()rADM__hcg^j3=m%HS&RJMWx=SYH)R?lB6l;9vM_^w!++~XL6AmM~`uBV5mXLhyx8f&|8rkGLaJFQe>Ra6h#TfzYu0nDrPif$C|f3lIQ!!m*%*4B(+%)sGl%l}Gkg?s}fdPsAf&i_{Ji2p9^1v;^gyPl$f(hZiU9v= zk`Cu0zlt>nXd97mGz6|9pEz7%43?F-#e*4g6;d5flsiKcxcRIrVSc({&4~@mXE-T{ z=6o0j&zP)A@7P%SCoGgE<%as1rH&NZk%xt%+%I6}B{zRD@@p2t z973wtt|}%5OkhSK)rOl+9W?@!&+r+2<$i-woUeb1FtCD21B+AxRWXqJz5Ru;#~=pJRk@sedu z4Nui^ShVJPJz1?|ED01+v1@|tw5OcfVJfr>`pA@#*Fz%WStDkaj%Z!{IRtvff<6lh zHXWpYa*`8OQslaIWaTO;H@2}Qxdhkbq9Y|E$vN!ff+YQ}-Avb+q zB9|TOJH*439cbmxr=Q^p=!rPni70L>6;SYcQ*G9Tu}QVg)8w{er&TzO ziWkrUFIZ8_-GP9m=cX&Nw%DckHSQ;<-5S)CXntThuJi0W~16*$f6wMHHRL&bZ985feATe z_t#gtg$9n!P;V1nJLLE5YV?fTL0cH7xdIZ91pu9GaOg{sjwCo-2ku!lN6!eBl?j?9 z>$DoKG;&%eiG?TBd7g7;)-BknIn=?X_n{BHFV{W?54yVn^a(nhYq5-(T&4RV0Nsi{ zmz+1Cy{}v}v@GKb&;`}N1J(9;)szS~mj}1lOt4Q5Q z>Z4LJ@D*Jx_4;`aOCZ@wJAeT1fzt%c=InwE$`35Cj^*x}L%`wIm{BU%X45W*mX*2t zYjy-tJR_mPW2Ui~xRqy)Dyw#w2A1b_@2W(GW$N^U3ImqqEqf-)`iBb2wJ3mdS`}*8FbmL8yU02I>1I}t%u*}sL(@?Myg z+bOP+{AB5-tCv^Z{Pt%5y3GzRGLH_TIHyjr-eTN~^}EHd0KMN7D8f#9Fxpt%|F0``(vX;+GmC_a3li zZQHm4*opPnJ|`4p8AH$ce7Zk%8dN?9Hp>+;#>`gYdP_Mf+qCHObs2${Y{dpA+6^)1 zthdV>!O$Ai*cIrp8Ka^g4T9zO%o&YPbdYCJeCME>Mg)}>Atz7BTc*K$2&34vQ11fL zBWTDo5HzBqun1QeML36;3K)!UWP#i*2zK3#Z9XWyicdi#sR*(YRd@tin)y08R-ubld9L9LF*`b5!sH5vB+%~A}? z$*_yK!rd%6_Q^8oOP1u)r?T>iJ96)q)1AUkmEyNt5Lp2aal|kbV>rtdb{T&vu zsO2I*gr7$ZRLu+zr}%W04jQTx9@Ps)ag1*iw<=i2YY(@!A+}oeT~t9(3U#&@O+5i7 z+*X)i&!^NOBI!G73*KWTVjvWwt%RpI<+KUC{i*=8`Cem$u|}FJ$`B!KPy_e!oqGq# zH_s>~>RAaQK)fXz0>mxT^j8(L<~DVl2D`LSPB4V3?g`U4$8n)^m6fdq8fHNKL?=@| zFNsrmRt9OO9DjYW{4`Y{FBqDWGG_#$*rj7RCA>uq(Y-5{Dgmc%wrECbV^k=uhT`* z6J-2xk20oA6A;HgD&vq?@vo3^dd<@E)RuG^h6wncq)ZKa523g?kGfI@Vf&}WyvULB zKPG15Vk-hM!15pn>$h;Jva+#wJpHJB&Y0ww(ZxMlGhB?vZ#p|HD2vm^8BCrXK z^Ufv;EZ7)mF^7*Q(NMtv7SP$jW7V{W#gPyXGa+Q?G)7rb^@4_(4cw~3E;mS3T}KBh z4}oL~%so*(ZCNrL!TuWJl8PDF*G1@2+iPa`K__6)?xyo)I#t?8Hy|B8T*}QV+3+8cb~_$KFmTs{_WE7^|()z zk#*K0?6JMxKhkrvZBa)uT$2axEy6yhK6paEZDrK>T#xvtQXt1vPgP~SgxW{ZW}uOYiD&VWFcBWXZN@!HAARZU&LS50U6X%r*6tzxMuww*w?s6k7(@l5EtLkz* z24FR3y2b@CcO)TLYQ^)O`of-YRPE@V;13=YDGk*xLAjz&t{-senr(eHL1JiNZlvkH ztquNW2azZ!o33?Gua1$}2fy9hn%{ZdPxoQngOlfXSF4xFK<>eCOAB&ioIP@m&f1AE zsyBFLZD|UA!MT+Fv^qfP$xV$VU+oeA!tSn{aMTB&HOw8qfVOTeXvN>_AT*iQ1qlYS zFSCs_hcN&RdonMmi{1$lk-XPdS-Jt)z9(n}4V_#z!Sm_O8EteCsFud>F*xyW-8It% zz$V&Abk(avOL;((X0b}WO!znK%|f@gyyln`O(GVtUXKYU5}o>7zgKYuP#g=m<6bS3 zPj4z2p6-dX_tI3y14H@2{bi%(;khV0ovt)FsD-$?>5Q%O(^|^|KP^hlf>khYw=+w- zd}iB8I&rou8{kb25xJOxOpEcs7&ts_-^vG6VZp($_0A=7hvv4xavT7UBX{T1^3(r40Slwyq)|5p5i zLh=}TH{p2hAniIq0KQ3D09X)JCr^E~FA?=GlY<>Y(@D6yVHm)md<%hv7&=P5Vb_(Z zzDDJq0mX9at9fJ8P7&s4+wBr~p@;$@&v!4w+^dnHPDI7$9BF>1SblJ8K`jBz6W)X- zs|~g?d-lW~^7^Yv`k)!3gHu751#%>6wv6@(<>S3O3if2|s9@h?$w|{7e&a;-`zLl; zL?57_V{*&Te9g~gADSsNs=`$uWj)Toqs8SIlhOC@z=_ND9h*|1;3+JoFxfeSdij=eax^!f$suzGkkPQb8EhD}tI2*%>nswx%08$?@m5z^Z~yk|G& z3w+Ilq-`cg7{n~ZxjD*eT!UWZNy(xjdN^u>$J_OuXjr|b#v;8b>Ga&Ia8V zwr+7)AcGsMT0D(uj+K%@8C)$Y=N%}n z^GzG;*o+kb8UOyS#Rov<;LZ5YotQn|5`?w_3|$C z<0&CRCsBF)&eE_QNz)@J3r}_q%j||P>QnEo2ld7)%RQhSF|54^pJGvgSJ+#-{LR*p zvSUPs-1=P3ct$L58InbDT`X~T?d-BQeRM*8uVrM)I}?t{T*&r-7#s-UTpeAZ0BU=sF`Q2R~#6XLhy98%n##9;}`=vecE+3UZ%07sfwmBxh)oB zWf2Yp8%N{>wU)}A{?HwKj5@}RxmahGt(S?rBiRsQW(tPpsz4i}?eO^$khl8k)?}tY z7}LZQ2!f~GDa;lzRh1i(Fxtte`P7PwaCm~7psVqZ=kRJE+86}PKbgVyEL*gSsXPrt z{U*^N{%)J~$PD$!6m%0%1Jx?|Ps4CJt6^4+x{JK8y|}FBAjtivt=1!XROu zt%P8cu^8WcM>%Lpc-jcq@|%A2Tpkxc=wsbxum({tMKMFF?*;c<>(#l=?E>{)fSh#{W2Jw&R(fud+VIW=Q+?~{l->IVAApl z`BGhx(T>@drd-&c2FK|M7%ErBNtLEhbAYl2&Fvm%RSJ+$I82-D7x>R%)&3c%L53Ll z(%Rtn3$P)8*LX=nG*X>cbL7{PgXFt!lwE*{yW0;@afZ|Dn3?)@7JE0;EzfhOSC{5k za_{U&oYB+R&!IZlj`svh<(-@QjhUb34LBhkmAfg9qNLEWsZBQAF)$EQ50 za)YJ}&ijEx6^I9-5H>=29-6YmmYZFR3pty&&N0tGA`!#igy0EnO@B}fO$1s)DpT$* z$Z_DANG@A(%87hV9~yR;q5`4zaooRDTab<%@$#7d;{|rP-1#dgJxOhdr^KqWGS;8g zBSQl<>nx7>_4t-jS^MfhzrzhvUVVJEE11336^t~e)MqEu-c}pgx8}M*GdY1_4n6~$Y0e>rFx~}os2Jj)Vr+Ibp~jRC RzB;e8J2b9>WAGWq{{we#xD5aR delta 2254 zcmXAqc~}%@62{+dx@V@RX9h(eAjbqz0khzEpsoiR6$BJfJOF`RJcxKaikqlWQA8zZ zL=;3dh$0{mL0!CEyh0R3E(HMv!AJy>BK_Cz>FKZQt9q;IowDnEZ!Bjq z`N9gT>#tLjZ#meOh94`go(_mevd~*!01yC7xgj&SQ)boUBtIt?GjIu~fcxXYrSAb8 z0%Zmzf;(CO)Sd_T@(|E)Cn-(8)E>N-KajBrytg~>_B-%%P68GO!7ug%Ch;;~6o3z2 z1iWYfzsHo`_kcgf1HUGL&l(9>Mu5+a0+c6ZcAW!X6bm#hmFyTd_URMJkFkqETO54K z>3D5Ce9QI$LB;T!OxM*P$GpJH^!xz}f}?>)^$6;vqLwVel8^reyxfH_g#(2YpLDglAH$k<#0gltB(^F2TsC(D(;V%~%Muwcw{wj=&b1esaL8vyzt8k19e# zpfj+29J*ZUfM*2^-%i)_J&b)yA24?(Gc+L=sJO~_zB2+IKS~=}2dA_S9WYa1t{$e) z|BqsxFX$l|XEN=31;G3|)2;sv81zzVWj}Jc&018<0v^6+2kWeW%^O+!M$*UsKkSg& ze*w><*r|16fVw=%)ns@~Z9QvD2nBwKWHWt8X7d0xXIwJ%&Q@m42R0|u9@w{m%{3hj zn5|)Rf2VNGXW8>>srSuYY_SU^T&ibFKRE}S@@20U(E0QC*lR@*G&RH6x`5Nbn~7}K z7o=ZCpUhwW$-aw;gH&r`uCys~17gQWTFzQ>;})8r{iSq(8y@qlmy7l>0OLGl?l0t$ zyWN4RWSP~GT5b8L^YZpT(7p_5dLsMwQ9}1^R9}*yqn3NheDaD z$T#0AN*7X3%q(O!I!U(_?t}396D70%dtkylrJXme`CCuPRp}7;dDwm0iJi*7*b<@K z=uFR|q)d5MLdy`Yl(U|tyb#i#^%P}c${awKsjU0GoL1;FWs}|>m{_P9xu=1wV7$y1 z>!n`h@R;XCstxnc0^?m(TiO#zq+-=qzTGq~lT=@4(Py=`suPX5fM2noD{TXcs|D-Z zhbhIcg`rWqf$C;q#C#HE%^1P$CRxPRD>7T-g((9(fP^!G7c-FdEf%S&)wB)L#ilV zfI4d-t$13E`pl{lAm*LShZ*Yp#TRINj`^z#4LnfuclE^tN?>ce%+~qp%a$}o1AbB8 zue1jiR;rr}>A=(+b+bT@(h)DJOlAX$Y|-i{DKe{19JgvYz-5aw%vO`Z=gEBYP+VX| zCYiokJYpcFZFh*NUPow*Mu=%y!|21v)ndlfPGDe@%!Xbu>)>>fY@nExOqKZVlH$~) zREw!tGn-87l|ihTNAGo!GHdN{j+9bU?2TSRBC3ME$^-n(~>XQ~LzXwKz9m{YoiKbkKK)QB958w6@u#W$JdB?FY28_b1ZOic+um zQOscNvi)>H;XZAIKNW0vE;Gnh``rxseN3;mw1Xl#r^pPCli3xmy<_D_9g5QawnGOT ziqrA>HlRFEXR|V%oB}%MmQ*TWi0;!pd&wzQ={)1=fNl3=J_ypyZ=_X_@-(*gEhkBl z9$nIx6?9;v%+@BIWU-7C&y%_|!%WapFWG6WeTJmcWuaB32FqOX%OX<`$DP3LXwy%x zbgW%f&ij(ykCl0&CuUa>ayzHy@s zGuqha&e-OCU+bliih74gi7f*qO=oCcb Date: Tue, 12 May 2020 02:20:16 +0200 Subject: [PATCH 14/15] French translation update --- src/res/translation/translation_fr_FR.ts | 154 +++++++++++------------ 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index 3b8486fb..c259436a 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -15,22 +15,22 @@ software enables musicians to perform real-time jam sessions over the internet. - + permet aux musiciens de faire des bœufs en temps réel sur internet. server which collects the audio data from each - serveur qui collecte les données audio de chaque + qui collecte les données audio de chaque client There is a - + Il existe un serveur client, mixes the audio data and sends the mix back to each client. - client, mixe les données audio et renvoie le mixage à chaque client. + , mixe les données audio et renvoie le mixage à chaque client. @@ -40,32 +40,32 @@ Qt cross-platform application framework - + Cadriciel d'application multiplateforme Qt Audio reverberation code by Perry R. Cook and Gary P. Scavone - + Code de réverbération audio par Perry R. Cook et Gary P. Scavone Some pixmaps are from the - + Certaines images sont issues de Country flag icons from Mark James - + Icônes de drapeaux de pays par Mark James For details on the contributions check out the - + Pour plus de détails sur les contributions, consultez la Github Contributors list - + liste de contributeurs sur github @@ -108,22 +108,22 @@ A&bout - + À &propos &Libraries - + Bib&liothèques &Contributors - + &Contributeurs &Translation - + &Traduction Author: Volker Fischer @@ -245,12 +245,12 @@ MUTE - + MUET SOLO - + SOLO @@ -415,38 +415,38 @@ Connect/Disconnect Button - + Bouton connecter/déconnecter 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. - + Appuyez sur ce bouton pour vous connecter à un serveur. Une boîte de dialogue vous permettant de sélectionner un serveur s'ouvrira. Si vous êtes connecté, l'appui sur ce bouton mettra fin à la session. Connect and disconnect toggle button - + Bouton-bascule de connection/déconnexion Clicking on this button changes the caption of the button from Connect to Disconnect, i.e., it implements a toggle functionality for connecting and disconnecting the - + En cliquant sur ce bouton, la légende du bouton passe de Connecter à Déconnecter, c'est-à-dire qu'il met en œuvre une fonctionnalité de basculement pour connecter et déconnecter le logiciel software. - . + . Local Audio Input Fader - + Chariot d'entrée audio locale Local audio input fader (left/right) - + Chariot d'entrée audio locale (gauche/droite) @@ -543,32 +543,32 @@ With the audio fader, the relative levels of the left and right local audio channels can be changed. For a mono signal it acts like a panning between the two channels. If, e.g., a microphone is connected to the right input channel and an instrument is connected to the left input channel which is much louder than the microphone, move the audio fader in a direction where the label above the fader shows - + Avec le chariot audio, les niveaux relatifs des canaux audio locaux gauche et droit peuvent être modifiés. Pour un signal mono, il agit comme un panoramique entre les deux canaux. Si, par exemple, un microphone est connecté au canal d'entrée droit et qu'un instrument est connecté au canal d'entrée gauche qui est beaucoup plus fort que le microphone, déplacez le fader audio dans une direction où l'étiquette au-dessus du chariot indique , where - + , où is the current attenuation indicator. - + est l'indicateur d'atténuation actuel. Reverberation Level - + Niveau de réverbération A reverberation effect can be applied to one local mono audio channel or to both channels in stereo mode. The mono channel selection and the reverberation level can be modified. If, e.g., the microphone signal is fed into the right audio channel of the sound card and a reverberation effect shall be applied, set the channel selector to right and move the fader upwards until the desired reverberation level is reached. - + Un effet de réverbération peut être appliqué à un canal audio mono local ou aux deux canaux en mode stéréo. La sélection du canal mono et le niveau de réverbération peuvent être modifiés. Si, par exemple, le signal du microphone est envoyé dans le canal audio droit de la carte son et qu'un effet de réverbération doit être appliqué, réglez le sélecteur de canal à droite et déplacez le curseur vers le haut jusqu'à ce que le niveau de réverbération souhaité soit atteint. The reverberation effect requires significant CPU so 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. - + L'effet de réverbération nécessite un processeur important, de sorte qu'il ne doit être utilisé que sur des PC rapides. Si le chariot de niveau de réverbération est réglé au minimum (qui est le réglage par défaut), l'effet de réverbération est désactivé et n'entraîne aucune utilisation supplémentaire du processeur. @@ -686,7 +686,7 @@ Pan - + Pan @@ -714,27 +714,27 @@ Jitter Buffer Size - + Taille du tampon de gigue The jitter buffer compensates for network and sound card timing jitters. The size of this jitter buffer has therefore influence on the quality of the audio stream (how many dropouts occur) and the overall delay (the longer the buffer, the higher the delay). - + Le tampon de gigue compense les gigues de synchronisation du réseau et de l'interface audio. La taille de ce tampon de gigue a donc une influence sur la qualité du flux audio (combien de décrochages se produisent) et le délai global (plus le tampon est long, plus le délai est important). The jitter buffer size can be manually chosen for the local client and the remote server. For the local jitter buffer, dropouts in the audio stream are indicated by the light 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. - + La taille du tampon de gigue peut être choisie manuellement pour le client local et le serveur distant. Pour le tampon de gigue local, les désynchronisations dans le flux audio sont indiquées par le voyant situé en bas des chariots de taille du tampon de gigue. Si le voyant devient rouge, un dépassement de la taille de la mémoire tampon a eu lieu et le flux audio est interrompu. The jitter buffer setting is therefore a trade-off between audio quality and overall delay. - + Le réglage du tampon de gigue est donc un compromis entre la qualité audio et le délai global. An auto setting of the jitter buffer size setting is available. If the check Auto is enabled, the jitter buffers of the local client and the remote server are set automatically based on measurements of the network and sound card timing jitter. If the Auto check is enabled, the jitter buffer size faders are disabled (they cannot be moved with the mouse). - + Un réglage automatique de la taille du tampon de gigue est disponible. Si la case Auto est activée, les tampons de gigue du client local et du serveur distant sont réglés automatiquement en fonction des mesures de la gigue de synchronisation du réseau et de la carte son. Si la case Auto est activée, les chariots de la taille du tampon de gigue sont désactivés (ils ne peuvent pas être déplacés avec la souris). @@ -894,32 +894,32 @@ Some sound card driver do not allow the buffer delay to be changed from within the - + Certains pilotes d'interface audio ne permettent pas de modifier le délai de la mémoire tampon à partir du logiciel software. In this case the buffer delay setting is disabled. To change the actual buffer delay, this setting has to be changed in the sound card driver. On Windows, press the ASIO Setup button to open the driver settings panel. On Linux, use the Jack configuration tool to change the buffer size. - + . Dans ce cas, le réglage du délai de mise en mémoire tampon est désactivé. Pour modifier le délai actuel de la mémoire tampon, ce paramètre doit être modifié dans le pilote de l'interface audio. Sous Windows, appuyez sur le bouton ASIO Setup pour ouvrir le panneau des paramètres du pilote. Sous Linux, utilisez l'outil de configuration Jack pour modifier la taille de la mémoire tampon. If no buffer size is selected and all settings are disabled, an unsupported buffer size is used by the driver. The - + Si aucune taille de tampon n'est sélectionnée et que tous les paramètres sont désactivés, une taille de tampon non prise en charge est utilisée par le pilote. Le logiciel software will still work with this setting but with restricted performannce. - + continuera toujours de fonctionner avec ce réglage, mais avec des performances limitées. The actual buffer delay has influence on the connection status, the current upload rate and the overall delay. The lower the buffer size, the higher the probability of red light in the status indicator (drop outs) and the higher the upload rate and the lower the overall delay. - + Le délai actuel de la mémoire tampon a une influence sur l'état de la connexion, le taux de téléchargement actuel et le délai global. Plus la taille de la mémoire tampon est faible, plus la probabilité d'un voyant rouge dans l'indicateur d'état (désynchronisations) est élevée, plus le taux de téléchargement est élevé et plus le délai global est faible. The buffer setting is therefore a trade-off between audio quality and overall delay. - + Le réglage de la mémoire tampon est donc un compromis entre la qualité audio et le délai global. @@ -984,22 +984,22 @@ Audio Channels - Canaux audio + Canaux audio Select the number of audio channels to be used. There are three modes available. The mono and stereo modes use one and two audio channels respectively. In 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. - + Sélectionnez le nombre de canaux audio à utiliser. Trois modes sont disponibles. Les modes mono et stéréo utilisent respectivement un et deux canaux audio. Dans le mode mono-in/stereo-out, le signal audio qui est envoyé au serveur est mono mais le signal de retour est stéréo. Ceci est utile dans le cas où l'interface audio place l'instrument sur un canal d'entrée et le microphone sur l'autre canal. Dans ce cas, les deux signaux d'entrée peuvent être mélangés dans un canal mono mais le mixage du serveur peut être entendu en stéréo. Enabling the stereo streaming mode will increase the stream data rate. Make sure that the current upload rate does not exceed the available bandwidth of your internet connection. - + L'activation du mode de streaming stéréo augmentera le débit de données du flux. Assurez-vous que le débit montant actuel ne dépasse pas la bande passante disponible de votre connexion internet. In 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. - + Dans le cas du mode de streaming stéréo, aucune sélection de canal audio pour l'effet de réverbération ne sera disponible dans la fenêtre principale puisque l'effet est appliqué sur les deux canaux dans ce cas. @@ -1009,12 +1009,12 @@ Audio Quality - Qualité audio + Qualité audio Select the desired audio quality. A low, normal or high audio quality can be selected. The higher the audio quality, the higher the audio stream data rate. Make sure that the current upload rate does not exceed the available bandwidth of your internet connection. - + Sélectionnez la qualité audio souhaitée. Une qualité audio faible, normale ou élevée peut être sélectionnée. Plus la qualité audio est élevée, plus le débit de données du flux audio est élevé. Assurez-vous que le débit montant actuel ne dépasse pas la bande passante disponible de votre connexion internet. @@ -1024,12 +1024,12 @@ New Client Level - Niveau de nouveau client + Niveau de nouveau client The new client level setting defines the fader level of a new connected client in percent. I.e. if a new client connects to the current server, it will get the specified initial fader level if no other fader level of a previous connection of that client was already stored. - + Le paramètre de niveau de nouveau client définit le niveau de chariot d'un client nouvellement connecté en pourcentage. C'est-à-dire que si un nouveau client se connecte au serveur actuel, il aura le niveau de chariot initial spécifié si aucun autre niveau de chariot d'une connexion précédente de ce client n'était déjà stocké. @@ -1039,12 +1039,12 @@ Central Server Address - + Adresse du serveur central The central server address is the IP address or URL of the central server at which the server list of the connection dialog is managed. With the central server address type either the local region can be selected of the default central servers or a manual address can be specified. - + L'adresse du serveur central est l'adresse IP ou l'URL du serveur central sur lequel la liste des serveurs du dialogue de connexion est gérée. Avec le type d'adresse du serveur central, on peut soit sélectionner la région de localisation parmi les serveurs centraux par défaut, soit spécifier une adresse manuelle. @@ -1059,22 +1059,22 @@ Current Connection Status Parameter - + Paramètre de l'état de la connexion actuelle The ping time is the time required for the audio stream to travel from the client to the server and 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. - + Le temps de ping est le temps nécessaire pour que le flux audio voyage du client au serveur et vice-versa. Ce délai est introduit par le réseau. Ce délai doit être de 20 ou 30 ms. Si ce délai est supérieur (par exemple 50-60 ms), la distance qui vous sépare du serveur est trop importante ou votre connexion internet n'est pas suffisante. The overall delay is calculated from the current ping time and the delay which is introduced by the current buffer settings. - + Le délai global est calculé à partir du temps de ping actuel et du délai qui est introduit par les paramètres actuels de la mémoire tampon. The upstream rate depends on the current audio packet size and the audio compression setting. Make sure that the upstream rate is not higher than the available rate (check the upstream capabilities of your internet connection by, e.g., using speedtest.net). - + Le débit montant dépend de la taille actuelle du paquet audio et du réglage de la compression audio. Assurez-vous que le débit montant n'est pas supérieur au débit disponible (vérifiez les capacités montant de votre connexion internet en utilisant, par exemple, speedtest.net). @@ -1150,7 +1150,7 @@ Buffer Delay - Délai de temporisation + Délai de temporisation @@ -1328,7 +1328,7 @@ Overall Delay - Retard global + Délai global @@ -1336,47 +1336,47 @@ Server List - + Liste de serveurs The server list shows a list of available servers which are registered at the central server. Select a server from the list and press the connect button to connect to this server. Alternatively, double click a server from the list to connect to it. If a server is occupied, a list of the connected musicians is available by expanding the list item. Permanent servers are shown in bold font. - + La liste de serveurs affiche une liste des serveurs disponibles qui sont enregistrés sur le serveur central. Sélectionnez un serveur dans la liste et appuyez sur le bouton de connexion pour vous connecter à ce serveur. Vous pouvez également double-cliquer sur un serveur de la liste pour vous y connecter. Si un serveur est occupé, une liste des musiciens connectés est disponible en développant l'élément de la liste. Les serveurs permanents sont indiqués en caractères gras. Note that it may take some time to retrieve the server list from the central server. If no valid central server address is specified in the settings, no server list will be available. - + Notez que ça peut prendre un certain temps pour récupérer la liste des serveurs depuis le serveur central. Si aucune adresse de serveur central valide n'est spécifiée dans les paramètres, aucune liste de serveurs ne sera disponible. Server list view - + Vue de la liste de serveurs Server Address - + Adresse du serveur The IP address or URL of the server running the - + L'adresse IP ou l'URL du serveur qui exécute le logiciel serveur server software must be set here. An optional port number can be added after the IP address or URL using a comma as a separator, e.g, example.org: - + doit être paramétré ici. Un numéro optionnel de port peut être ajouté après l'adresse IP ou l'URL en utilisant une virgule en tant que séparateur, par exemple, exemple.org : . A list of the most recent used server IP addresses or URLs is available for selection. - + Une liste des adresses IP ou URL de serveur les plus récentes est disponible pour la sélection. Server address edit box - + Boîte d'édition de l'adresse du serveur @@ -1386,7 +1386,7 @@ Filter - Filtre + Filtre @@ -1401,17 +1401,17 @@ Show All Musicians - Afficher tous les musiciens + 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. - + Si vous cochez cette case, les musiciens de tous les serveurs sont affichés. Si vous décochez la case, tous les éléments de la vue en liste sont regroupés. Show all musicians check box - + Cochez la case Afficher tous les musiciens @@ -1419,7 +1419,7 @@ Connection Setup - + Paramètres de connexion @@ -1614,29 +1614,29 @@ Instrument picture button - + Bouton d'image d'instrument Country flag button - + Bouton de drapeau de pays City edit box - + Boîte d'édition de la ville Skill level combo box - + Boîte combo de niveau de compétence None - Aucun + Aucune @@ -2112,7 +2112,7 @@ Jitter Buffer Size - + Taille du tampon de gigue From 7c608472f0f5216b58851b41759f961c12b751aa Mon Sep 17 00:00:00 2001 From: Olivier Humbert Date: Tue, 12 May 2020 02:32:06 +0200 Subject: [PATCH 15/15] Fix a typo --- src/res/translation/translation_fr_FR.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/res/translation/translation_fr_FR.ts b/src/res/translation/translation_fr_FR.ts index c259436a..87a9eebb 100644 --- a/src/res/translation/translation_fr_FR.ts +++ b/src/res/translation/translation_fr_FR.ts @@ -959,7 +959,7 @@ If enabled, a fancy skin will be applied to the main window. - Si activée, un habillage fantaisie sera appliquée à la fenêtre principale. + Si activée, un habillage fantaisie sera appliqué à la fenêtre principale.