diff -Nru mumble-1.2.3/celt-0.11.0-src/configure.ac mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/configure.ac --- mumble-1.2.3/celt-0.11.0-src/configure.ac 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/configure.ac 2011-04-02 22:20:48.000000000 +0000 @@ -6,7 +6,7 @@ CELT_MAJOR_VERSION=0 CELT_MINOR_VERSION=11 -CELT_MICRO_VERSION=0 +CELT_MICRO_VERSION=1 CELT_EXTRA_VERSION= CELT_VERSION=$CELT_MAJOR_VERSION.$CELT_MINOR_VERSION.$CELT_MICRO_VERSION$CELT_EXTRA_VERSION LIBCELT_SUFFIX=0 diff -Nru mumble-1.2.3/celt-0.11.0-src/COPYING mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/COPYING --- mumble-1.2.3/celt-0.11.0-src/COPYING 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/COPYING 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -- Neither the name of the Xiph.org Foundation nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/Doxyfile mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/Doxyfile --- mumble-1.2.3/celt-0.11.0-src/Doxyfile 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/Doxyfile 2011-04-02 22:20:48.000000000 +0000 @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = CELT -PROJECT_NUMBER = 0.11.0 +PROJECT_NUMBER = 0.11.1 OUTPUT_DIRECTORY = doc/API CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff -Nru mumble-1.2.3/celt-0.11.0-src/Doxyfile.devel mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/Doxyfile.devel --- mumble-1.2.3/celt-0.11.0-src/Doxyfile.devel 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/Doxyfile.devel 2011-04-02 22:20:48.000000000 +0000 @@ -5,7 +5,7 @@ #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = CELT -PROJECT_NUMBER = 0.11.0 +PROJECT_NUMBER = 0.11.1 OUTPUT_DIRECTORY = doc/devel CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/arch.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/arch.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/arch.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/arch.h 2011-04-02 22:20:48.000000000 +0000 @@ -18,10 +18,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/bands.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/bands.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/bands.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/bands.c 2011-04-02 22:20:48.000000000 +0000 @@ -14,10 +14,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -206,7 +202,7 @@ x++; } while (++jnbEBands];inbEBands]*(celt_int32)(2+2*i-m->nbEBands); } } while (++c<0); - diff /= C*(nbEBands-1); + diff /= C*(end-1); /*printf("%f\n", diff);*/ if (diff > QCONST16(2.f, DB_SHIFT)) trim_index--; @@ -872,7 +868,7 @@ { #endif int i, c, N; - int bits; + celt_int32 bits; ec_enc _enc; VARDECL(celt_sig, in); VARDECL(celt_sig, freq); @@ -921,9 +917,11 @@ int silence=0; SAVE_STACK; - if (nbCompressedBytes<2 || nbCompressedBytes>1275 || pcm==NULL) + if (nbCompressedBytes<2 || pcm==NULL) return CELT_BAD_ARG; + /* Can't produce more than 1275 output bytes */ + nbCompressedBytes = IMIN(nbCompressedBytes,1275); frame_size *= st->upsample; for (LM=0;LM<=st->mode->maxLM;LM++) if (st->mode->shortMdctSize<mode->shortMdctSize-st->mode->overlap; st->prefilter_period=IMAX(st->prefilter_period, COMBFILTER_MINPERIOD); CELT_COPY(in+c*(N+st->overlap), st->in_mem+c*(st->overlap), st->overlap); #ifdef ENABLE_POSTFILTER - comb_filter(in+c*(N+st->overlap)+st->overlap, pre[c]+COMBFILTER_MAXPERIOD, - st->prefilter_period, pitch_index, N, -st->prefilter_gain, -gain1, + if (offset) + comb_filter(in+c*(N+st->overlap)+st->overlap, pre[c]+COMBFILTER_MAXPERIOD, + st->prefilter_period, st->prefilter_period, offset, -st->prefilter_gain, -st->prefilter_gain, + st->prefilter_tapset, st->prefilter_tapset, NULL, 0); + + comb_filter(in+c*(N+st->overlap)+st->overlap+offset, pre[c]+COMBFILTER_MAXPERIOD+offset, + st->prefilter_period, pitch_index, N-offset, -st->prefilter_gain, -gain1, st->prefilter_tapset, prefilter_tapset, st->mode->window, st->mode->overlap); #endif /* ENABLE_POSTFILTER */ CELT_COPY(st->in_mem+c*(st->overlap), in+c*(N+st->overlap)+N, st->overlap); @@ -1272,7 +1276,7 @@ t1 = 2; t2 = 4; } - for (i=1;imode->nbEBands-1;i++) + for (i=st->start+1;iend-1;i++) { celt_word32 d2; d2 = 2*bandLogE[i]-bandLogE[i-1]-bandLogE[i+1]; @@ -1323,7 +1327,7 @@ if (tell+(6<mode, X, bandLogE, - st->mode->nbEBands, LM, C, N); + st->end, LM, C, N); ec_enc_icdf(enc, alloc_trim, trim_icdf, 7); tell = ec_tell_frac(enc); } @@ -1437,8 +1441,8 @@ ALLOC(pulses, st->mode->nbEBands, int); ALLOC(fine_priority, st->mode->nbEBands, int); - /* bits = packet size - where we are - safety*/ - bits = (nbCompressedBytes*8<=2&&bits>=(LM+2<mode, st->start, st->end, offsets, cap, @@ -1537,19 +1541,13 @@ c=0; do { st->prefilter_period=IMAX(st->prefilter_period, COMBFILTER_MINPERIOD); st->prefilter_period_old=IMAX(st->prefilter_period_old, COMBFILTER_MINPERIOD); + comb_filter(out_mem[c], out_mem[c], st->prefilter_period_old, st->prefilter_period, st->mode->shortMdctSize, + st->prefilter_gain_old, st->prefilter_gain, st->prefilter_tapset_old, st->prefilter_tapset, + st->mode->window, st->overlap); if (LM!=0) - { - comb_filter(out_mem[c], out_mem[c], st->prefilter_period, st->prefilter_period, st->overlap, - st->prefilter_gain, st->prefilter_gain, st->prefilter_tapset, st->prefilter_tapset, - NULL, 0); - comb_filter(out_mem[c]+st->overlap, out_mem[c]+st->overlap, st->prefilter_period, pitch_index, N-st->overlap, + comb_filter(out_mem[c]+st->mode->shortMdctSize, out_mem[c]+st->mode->shortMdctSize, st->prefilter_period, pitch_index, N-st->mode->shortMdctSize, st->prefilter_gain, gain1, st->prefilter_tapset, prefilter_tapset, st->mode->window, st->mode->overlap); - } else { - comb_filter(out_mem[c], out_mem[c], st->prefilter_period_old, st->prefilter_period, N, - st->prefilter_gain_old, st->prefilter_gain, st->prefilter_tapset_old, st->prefilter_tapset, - st->mode->window, st->mode->overlap); - } } while (++cprefilter_period = pitch_index; st->prefilter_gain = gain1; st->prefilter_tapset = prefilter_tapset; +#ifdef RESYNTH + if (LM!=0) + { + st->prefilter_period_old = st->prefilter_period; + st->prefilter_gain_old = st->prefilter_gain; + st->prefilter_tapset_old = st->prefilter_tapset; + } +#endif if (CC==2&&C==1) { for (i=0;imode->nbEBands;i++) @@ -2149,7 +2155,7 @@ #endif int c, i, N; int spread_decision; - int bits; + celt_int32 bits; ec_dec _dec; VARDECL(celt_sig, freq); VARDECL(celt_norm, X); @@ -2365,7 +2371,7 @@ alloc_trim = tell+(6<=2&&bits>=(LM+2<mode, st->start, st->end, offsets, cap, @@ -2438,19 +2444,14 @@ c=0; do { st->postfilter_period=IMAX(st->postfilter_period, COMBFILTER_MINPERIOD); st->postfilter_period_old=IMAX(st->postfilter_period_old, COMBFILTER_MINPERIOD); + comb_filter(out_syn[c], out_syn[c], st->postfilter_period_old, st->postfilter_period, st->mode->shortMdctSize, + st->postfilter_gain_old, st->postfilter_gain, st->postfilter_tapset_old, st->postfilter_tapset, + st->mode->window, st->overlap); if (LM!=0) - { - comb_filter(out_syn[c], out_syn[c], st->postfilter_period, st->postfilter_period, st->overlap, - st->postfilter_gain, st->postfilter_gain, st->postfilter_tapset, st->postfilter_tapset, - NULL, 0); - comb_filter(out_syn[c]+st->overlap, out_syn[c]+st->overlap, st->postfilter_period, postfilter_pitch, N-st->overlap, + comb_filter(out_syn[c]+st->mode->shortMdctSize, out_syn[c]+st->mode->shortMdctSize, st->postfilter_period, postfilter_pitch, N-st->mode->shortMdctSize, st->postfilter_gain, postfilter_gain, st->postfilter_tapset, postfilter_tapset, st->mode->window, st->mode->overlap); - } else { - comb_filter(out_syn[c], out_syn[c], st->postfilter_period_old, st->postfilter_period, N-st->overlap, - st->postfilter_gain_old, st->postfilter_gain, st->postfilter_tapset_old, st->postfilter_tapset, - st->mode->window, st->mode->overlap); - } + } while (++cpostfilter_period_old = st->postfilter_period; st->postfilter_gain_old = st->postfilter_gain; @@ -2458,6 +2459,12 @@ st->postfilter_period = postfilter_pitch; st->postfilter_gain = postfilter_gain; st->postfilter_tapset = postfilter_tapset; + if (LM!=0) + { + st->postfilter_period_old = st->postfilter_period; + st->postfilter_gain_old = st->postfilter_gain; + st->postfilter_tapset_old = st->postfilter_tapset; + } #endif /* ENABLE_POSTFILTER */ if (CC==2&&C==1) { @@ -2587,7 +2594,7 @@ case CELT_SET_END_BAND_REQUEST: { celt_int32 value = va_arg(ap, celt_int32); - if (value<0 || value>=st->mode->nbEBands) + if (value<1 || value>st->mode->nbEBands) goto bad_arg; st->end = value; } diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/celt.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/celt.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/celt.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/celt.h 2011-04-02 22:20:48.000000000 +0000 @@ -19,10 +19,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -222,7 +218,7 @@ * the length returned be somehow transmitted to the decoder. Otherwise, no * decoding is possible. */ -EXPORT int celt_encode_float(CELTEncoder *st, const float *pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes); +EXPORT int celt_encode_float(CELTEncoder *st, const float *pcm, int frame_size, unsigned char *compressed, int maxCompressedBytes); /** Encodes a frame of audio. @param st Encoder state @@ -238,7 +234,7 @@ * the length returned be somehow transmitted to the decoder. Otherwise, no * decoding is possible. */ -EXPORT int celt_encode(CELTEncoder *st, const celt_int16 *pcm, int frame_size, unsigned char *compressed, int nbCompressedBytes); +EXPORT int celt_encode(CELTEncoder *st, const celt_int16 *pcm, int frame_size, unsigned char *compressed, int maxCompressedBytes); /** Query and set encoder parameters @param st Encoder state diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/celt_header.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/celt_header.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/celt_header.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/celt_header.h 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/celt_types.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/celt_types.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/celt_types.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/celt_types.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,20 +1,31 @@ +/* (C) COPYRIGHT 1994-2002 Xiph.Org Foundation */ +/* Modified by Jean-Marc Valin */ +/* + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ /* celt_types.h taken from libogg */ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * - * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * - * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - - function: #ifdef jail to whip a few platforms into the UNIX ideal. - last mod: $Id: os_types.h 7524 2004-08-11 04:20:36Z conrad $ - ********************************************************************/ /** @file celt_types.h @brief CELT types diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/cwrs.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/cwrs.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/cwrs.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/cwrs.c 2011-04-02 22:20:48.000000000 +0000 @@ -14,10 +14,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/cwrs.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/cwrs.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/cwrs.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/cwrs.h 2011-04-02 22:20:48.000000000 +0000 @@ -14,10 +14,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/dump_modes.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/dump_modes.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/dump_modes.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/dump_modes.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/ecintrin.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/ecintrin.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/ecintrin.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/ecintrin.h 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/entcode.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entcode.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/entcode.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entcode.c 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/entcode.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entcode.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/entcode.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entcode.h 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -41,14 +37,15 @@ typedef celt_int32 ec_int32; typedef celt_uint32 ec_uint32; -typedef size_t ec_window; +typedef celt_uint32 ec_window; typedef struct ec_ctx ec_ctx; typedef struct ec_ctx ec_enc; typedef struct ec_ctx ec_dec; -/*This must be at least 32 bits.*/ +/*OPT: This must be at least 32 bits, but if you have fast arithmetic on a + larger type, you can speed up the decoder by using it for ec_window.*/ # define EC_WINDOW_SIZE ((int)sizeof(ec_window)*CHAR_BIT) /*The number of bits to use for the range-coded part of unsigned integers.*/ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/entdec.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entdec.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/entdec.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entdec.c 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -222,7 +218,7 @@ ft=(unsigned)(_ft>>ftb)+1; s=ec_decode(_this,ft); ec_dec_update(_this,s,s+1,ft); - t=s<error=1; return _ft; diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/entdec.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entdec.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/entdec.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entdec.h 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/entenc.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entenc.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/entenc.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entenc.c 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -219,6 +215,29 @@ _this->nbits_total+=_bits; } +void ec_enc_patch_initial_bits(ec_enc *_this,unsigned _val,unsigned _nbits){ + int shift; + unsigned mask; + celt_assert(_nbits<=EC_SYM_BITS); + shift=EC_SYM_BITS-_nbits; + mask=(1<<_nbits)-1<offs>0){ + /*The first byte has been finalized.*/ + _this->buf[0]=(unsigned char)(_this->buf[0]&~mask|_val<rem>=0){ + /*The first byte is still awaiting carry propagation.*/ + _this->rem=_this->rem&~mask|_val<rng<=EC_CODE_TOP>>shift){ + /*The renormalization loop has never been run.*/ + _this->val=_this->val&~((ec_uint32)mask<error=-1; +} + void ec_enc_shrink(ec_enc *_this,ec_uint32 _size){ celt_assert(_this->offs+_this->end_offs<=_size); CELT_MOVE(_this->buf+_size-_this->end_offs, diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/entenc.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entenc.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/entenc.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/entenc.h 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -82,6 +78,22 @@ This must be between 0 and 25, inclusive.*/ void ec_enc_bits(ec_enc *_this,ec_uint32 _fl,unsigned _ftb); +/*Overwrites a few bits at the very start of an existing stream, after they + have already been encoded. + This makes it possible to have a few flags up front, where it is easy for + decoders to access them without parsing the whole stream, even if their + values are not determined until late in the encoding process, without having + to buffer all the intermediate symbols in the encoder. + In order for this to work, at least _nbits bits must have already been + encoded using probabilities that are an exact power of two. + The encoder can verify the number of encoded bits is sufficient, but cannot + check this latter condition. + _val: The bits to encode (in the least _nbits significant bits). + They will be decoded in order from most-significant to least. + _nbits: The number of bits to overwrite. + This must be no more than 8.*/ +void ec_enc_patch_initial_bits(ec_enc *_this,unsigned _val,unsigned _nbits); + /*Compacts the data to fit in the target size. This moves up the raw bits at the end of the current buffer so they are at the end of the new buffer size. diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_c5x.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_c5x.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_c5x.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_c5x.h 2011-04-02 22:20:48.000000000 +0000 @@ -15,10 +15,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_c6x.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_c6x.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_c6x.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_c6x.h 2011-04-02 22:20:48.000000000 +0000 @@ -15,10 +15,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_debug.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_debug.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_debug.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_debug.h 2011-04-02 22:20:48.000000000 +0000 @@ -16,10 +16,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_generic.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_generic.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/fixed_generic.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/fixed_generic.h 2011-04-02 22:20:48.000000000 +0000 @@ -17,10 +17,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/float_cast.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/float_cast.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/float_cast.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/float_cast.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,11 +1,27 @@ +/* Copyright (C) 2001 Erik de Castro Lopo */ /* -** Copyright (C) 2001 Erik de Castro Lopo -** -** Permission to use, copy, modify, distribute, and sell this file for any -** purpose is hereby granted without fee, provided that the above copyright -** and this permission notice appear in all copies. No representations are -** made about the suitability of this software for any purpose. It is -** provided "as is" without express or implied warranty. + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Version 1.1 */ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/header.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/header.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/header.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/header.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/kiss_fft.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/kiss_fft.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/kiss_fft.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/kiss_fft.c 2011-04-02 22:20:48.000000000 +0000 @@ -10,7 +10,6 @@ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/_kiss_fft_guts.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/_kiss_fft_guts.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/_kiss_fft_guts.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/_kiss_fft_guts.h 2011-04-02 22:20:48.000000000 +0000 @@ -7,7 +7,6 @@ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/kiss_fft.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/kiss_fft.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/kiss_fft.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/kiss_fft.h 2011-04-02 22:20:48.000000000 +0000 @@ -10,7 +10,6 @@ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/laplace.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/laplace.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/laplace.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/laplace.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/laplace.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/laplace.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/laplace.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/laplace.h 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/libcelt.vcxproj mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/libcelt.vcxproj --- mumble-1.2.3/celt-0.11.0-src/libcelt/libcelt.vcxproj 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/libcelt.vcxproj 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,124 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {245603E3-F580-41A5-9632-B25FE3372CBF} + Win32Proj + libcelt + + + + StaticLibrary + true + Unicode + + + StaticLibrary + false + true + Unicode + + + + + + + + + + + + + + + + + Level3 + Disabled + HAVE_CONFIG_H;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + HAVE_CONFIG_H;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/libcelt.vcxproj.filters mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/libcelt.vcxproj.filters --- mumble-1.2.3/celt-0.11.0-src/libcelt/libcelt.vcxproj.filters 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/libcelt.vcxproj.filters 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,153 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/Makefile.am mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/Makefile.am --- mumble-1.2.3/celt-0.11.0-src/libcelt/Makefile.am 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/Makefile.am 2011-04-02 22:20:48.000000000 +0000 @@ -3,7 +3,7 @@ pkginclude_HEADERS = celt.h celt_types.h celt_header.h -EXTRA_DIST= match-test.sh +EXTRA_DIST= match-test.sh libcelt.vcxproj libcelt.vcxproj.filters #INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include -I$(top_builddir) @OGG_CFLAGS@ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/mathops.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mathops.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/mathops.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mathops.c 2011-04-02 22:20:48.000000000 +0000 @@ -18,10 +18,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/mathops.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mathops.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/mathops.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mathops.h 2011-04-02 22:20:48.000000000 +0000 @@ -18,10 +18,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/mdct.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mdct.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/mdct.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mdct.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/mdct.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mdct.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/mdct.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mdct.h 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/mfrngcod.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mfrngcod.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/mfrngcod.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/mfrngcod.h 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/modes.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/modes.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/modes.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/modes.c 2011-04-02 22:20:48.000000000 +0000 @@ -14,10 +14,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -218,7 +214,7 @@ if (400*(celt_int32)eband5ms[k] > mode->eBands[j]*(celt_int32)mode->Fs/mode->shortMdctSize) break; } - if (k>mode->nbEBands-1) + if (k>maxBands-1) allocVectors[i*mode->nbEBands+j] = band_allocation[i*maxBands + maxBands-1]; else { celt_int32 a0, a1; diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/modes.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/modes.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/modes.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/modes.h 2011-04-02 22:20:48.000000000 +0000 @@ -14,10 +14,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/os_support.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/os_support.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/os_support.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/os_support.h 2011-04-02 22:20:48.000000000 +0000 @@ -15,9 +15,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - 3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/pitch.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/pitch.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/pitch.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/pitch.c 2011-04-02 22:20:48.000000000 +0000 @@ -18,10 +18,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/pitch.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/pitch.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/pitch.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/pitch.h 2011-04-02 22:20:48.000000000 +0000 @@ -18,10 +18,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/plc.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/plc.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/plc.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/plc.c 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/plc.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/plc.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/plc.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/plc.h 2011-04-02 22:20:48.000000000 +0000 @@ -12,10 +12,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/quant_bands.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/quant_bands.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/quant_bands.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/quant_bands.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -276,7 +272,7 @@ int badness1=0; SAVE_STACK; - intra = force_intra || (*delayedIntra && nbAvailableBytes > end*C); + intra = force_intra || (*delayedIntra && nbAvailableBytes > (end-start)*C); if (/*shortBlocks || */intra_decision(eBands, oldEBands, start, effEnd, m->nbEBands, C)) *delayedIntra = 1; else @@ -299,7 +295,7 @@ ALLOC(oldEBands_intra, C*m->nbEBands, celt_word16); ALLOC(error_intra, C*m->nbEBands, celt_word16); - CELT_COPY(oldEBands_intra, oldEBands, C*end); + CELT_COPY(oldEBands_intra, oldEBands, C*m->nbEBands); if (two_pass || intra) { @@ -339,12 +335,12 @@ /* Copy intra bits to bit-stream */ CELT_COPY(ec_get_buffer(&enc_intra_state) + nstart_bytes, intra_bits, nintra_bytes - nstart_bytes); - CELT_COPY(oldEBands, oldEBands_intra, C*end); - CELT_COPY(error, error_intra, C*end); + CELT_COPY(oldEBands, oldEBands_intra, C*m->nbEBands); + CELT_COPY(error, error_intra, C*m->nbEBands); } } else { - CELT_COPY(oldEBands, oldEBands_intra, C*end); - CELT_COPY(error, error_intra, C*end); + CELT_COPY(oldEBands, oldEBands_intra, C*m->nbEBands); + CELT_COPY(error, error_intra, C*m->nbEBands); } RESTORE_STACK; } diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/quant_bands.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/quant_bands.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/quant_bands.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/quant_bands.h 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/rate.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/rate.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/rate.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/rate.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -252,11 +248,11 @@ #define ALLOC_STEPS 6 static inline int interp_bits2pulses(const CELTMode *m, int start, int end, int skip_start, - const int *bits1, const int *bits2, const int *thresh, const int *cap, int total, celt_int32 *_balance, + const int *bits1, const int *bits2, const int *thresh, const int *cap, celt_int32 total, celt_int32 *_balance, int skip_rsv, int *intensity, int intensity_rsv, int *dual_stereo, int dual_stereo_rsv, int *bits, int *ebits, int *fine_priority, int _C, int LM, ec_ctx *ec, int encode, int prev) { - int psum; + celt_int32 psum; int lo, hi; int i, j; int logM; @@ -264,7 +260,7 @@ int stereo; int codedBands=-1; int alloc_floor; - int left, percoeff; + celt_int32 left, percoeff; int done; int balance; SAVE_STACK; @@ -282,7 +278,7 @@ done = 0; for (j=end;j-->start;) { - int tmp = bits1[j] + (mid*bits2[j]>>ALLOC_STEPS); + int tmp = bits1[j] + (mid*(celt_int32)bits2[j]>>ALLOC_STEPS); if (tmp >= thresh[j] || done) { done = 1; @@ -344,7 +340,7 @@ left -= (m->eBands[codedBands]-m->eBands[start])*percoeff; rem = IMAX(left-(m->eBands[j]-m->eBands[start]),0); band_width = m->eBands[codedBands]-m->eBands[j]; - band_bits = bits[j] + percoeff*band_width + rem; + band_bits = (int)(bits[j] + percoeff*band_width + rem); /*Only code a skip decision if we're above the threshold for this band. Otherwise it is force-skipped. This ensures that we have enough bits to code the skip flag.*/ @@ -420,10 +416,10 @@ percoeff = left/(m->eBands[codedBands]-m->eBands[start]); left -= (m->eBands[codedBands]-m->eBands[start])*percoeff; for (j=start;jeBands[j+1]-m->eBands[j]); + bits[j] += ((int)percoeff*(m->eBands[j+1]-m->eBands[j])); for (j=start;jeBands[j+1]-m->eBands[j]); + int tmp = (int)IMIN(left, m->eBands[j+1]-m->eBands[j]); bits[j] += tmp; left -= tmp; } @@ -572,7 +568,7 @@ /* Below this threshold, we're sure not to allocate any PVQ bits */ thresh[j] = IMAX((C)<eBands[j+1]-m->eBands[j])<>4); /* Tilt of the allocation curve */ - trim_offset[j] = C*(m->eBands[j+1]-m->eBands[j])*(alloc_trim-5-LM)*(m->nbEBands-j-1) + trim_offset[j] = C*(m->eBands[j+1]-m->eBands[j])*(alloc_trim-5-LM)*(end-j-1) <<(LM+BITRES)>>6; /* Giving less resolution to single-coefficient bands because they get more benefit from having one coarse value per coefficient*/ diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/rate.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/rate.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/rate.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/rate.h 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -105,7 +101,7 @@ @return Total number of bits allocated */ int compute_allocation(const CELTMode *m, int start, int end, const int *offsets, const int *cap, int alloc_trim, int *intensity, int *dual_stero, - int total, celt_int32 *balance, int *pulses, int *ebits, int *fine_priority, int _C, int LM, ec_ctx *ec, int encode, int prev); + celt_int32 total, celt_int32 *balance, int *pulses, int *ebits, int *fine_priority, int _C, int LM, ec_ctx *ec, int encode, int prev); #endif diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/stack_alloc.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/stack_alloc.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/stack_alloc.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/stack_alloc.h 2011-04-02 22:20:48.000000000 +0000 @@ -16,10 +16,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/testcelt.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/testcelt.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/testcelt.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/testcelt.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/vq.c mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/vq.c --- mumble-1.2.3/celt-0.11.0-src/libcelt/vq.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/vq.c 2011-04-02 22:20:48.000000000 +0000 @@ -13,10 +13,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR @@ -72,7 +68,7 @@ static void exp_rotation(celt_norm *X, int len, int dir, int stride, int K, int spread) { - static const int SPREAD_FACTOR[3]={5,10,15}; + static const int SPREAD_FACTOR[3]={15,10,5}; int i; celt_word16 c, s; celt_word16 gain, theta; diff -Nru mumble-1.2.3/celt-0.11.0-src/libcelt/vq.h mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/vq.h --- mumble-1.2.3/celt-0.11.0-src/libcelt/vq.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/celt-0.11.0-src/libcelt/vq.h 2011-04-02 22:20:48.000000000 +0000 @@ -17,10 +17,6 @@ notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - Neither the name of the Xiph.org Foundation nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR diff -Nru mumble-1.2.3/CHANGES mumble-1.2.3-87-gf7d8711/CHANGES --- mumble-1.2.3/CHANGES 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/CHANGES 2011-04-02 22:20:48.000000000 +0000 @@ -1,3 +1,114 @@ +2011-03-12 + Thorvald Natvig + ee6bccf Fix speexbuild pro and mysql installer path + 973790f Update win32 build paths + +2011-03-09 + Stefan Hacker + fb61d50 Fix Timer includes all over the codebase and fix some pro/pri + buildfiles. + + Martijn Stolk + db2538f Overlay: add sorting options, including ability to sort on + last state change + 6d62ae7 Overlay: add support for displaying active users + + Thorvald Natvig + 9682d7d Allow some leeway in the timer atomicity test + +2011-03-07 + Stefan Hacker + e83cec0 Instead of warning when casting from ASCII to QString in the + client disable it completely. + +2011-03-06 + Stefan Hacker + 8c952c3 Remove duplicate overlay debug output code. + +2011-03-04 + Stefan Hacker + b986e84 Fix possible access violation in Overlay + + Jamie Fraser + d2a023e Added "Copy URL" to channel context menu. + e83173c ICE: Add udpPing and tcpPing to User + +2011-03-03 + Tsbook + 630d712 Czech Translation Update + +2011-03-01 + Stefan Hacker + 05096f7 Add some comments to hooking code + + Jamie Fraser + 188b652 Fixed Ice method getLogLen() requiring write secret instead of + read secret. + +2011-02-28 + Mark-Willem Jansen + c245e2d PulseAudio: Fix multi speakers configuration. + +2011-02-27 + Stefan Hacker + 4774dab Moved windows self detection mechanism into Windows specific + Overlay code instead of special casing it in generic one + 3db23e6 Make mumble overlay able to detect mumble independent of + executable name + + Jamie Fraser + 296ee6f Fixed typo: "staring" -> "starting" in OSS.cpp + + Thorvald Natvig + 2cd9863 Work around broken XI2 master devices + +2011-02-26 + Mikkel Krautz + ad3926a Kill the nagging accessibility dialog from GlobalShortcutMac. + + Benjamin Jemlich + fcc8c2b Split AudioInput::encodeAudioFrame + + Thorvald Natvig + ffbeaa2 XInput 2.0 support + +2011-02-22 + Stefan Hacker + ddd9c97 Add no-elevation build-flag to prevent the need of signing + win32 release builds during testing + +2011-02-21 + Stefan Hacker + a65bb68 Make message read back user configurable + +2011-02-20 + Stefan Hacker + 859d7a4 Remove leftover launchCompatibilityClient signature + 4188575 mumble:// links without or with invalid version parameter now + refer to 1.2.0 by default. Also remove version hardcoding in + checker and fix version check in general. + cb39dc6 Save current input when using the history + 8fa3b10 User ctrl+up/down for chatbar history + ee21456 Fix violation of abstraction in ChatbarTextEdit + 127a09c Fix setenv called on windows build + f07d33b Add history to chatbar + ae024c8 Remove obvious "FPS:" text from overlay leaving only the + number + 0e155a5 After downloading a new snapshot delete all snapshots older + than 30 days from the snapshot folder + + Mikkel Krautz + 91a4fe6 Don't try launch compatibility client anymore. + + Thorvald Natvig + f11d097 Protobuf 2.4.0a on Win32 (and static) + 873282b Update ASIO path + 064a5a3 Bump version to 1.2.4 + d294ccd Fix pch + 2b84bd7 Suppress vendor lockin suggestions + 2400cae Unify snapshot/release defines + 1161c9a Remove 1.1.x - no longer maintained + 2011-02-18 Stefan Hacker df0f290 Add some other applications to the overlay blacklist @@ -68,6 +179,11 @@ cebb2dd Fixed 'nan' in user information (average ping) for newly connected users +2011-01-26 + Zuko + e067269 User Information improvements + 6755b81 Added gg, xmpp, skype and mailto to allowedSchemes + 2011-01-23 Thorvald Natvig e0ba383 Work around timestamp update for mysql @@ -426,6 +542,11 @@ Jonathan 6f7435f Danish translation: small update +2010-10-29 + Rafael Correia + 99cc86d rework to improve the quality of the code of the patch (bug + 3067616 - DUAL Head PTT) + 2010-10-24 Álvaro Manuel Recio Pérez f913b99 Updated Spanish translation for 1.2.3 @@ -540,6 +661,9 @@ bdd383c Fixed unreliable Steam linking for BFBC2 2010-10-08 + Justin McGrath + 52a8f39 Added FR 2109227: limit the chat log size. + Natenom 1eaee4b Updated German translations. diff -Nru mumble-1.2.3/compiler.pri mumble-1.2.3-87-gf7d8711/compiler.pri --- mumble-1.2.3/compiler.pri 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/compiler.pri 2011-04-02 22:20:48.000000000 +0000 @@ -4,7 +4,7 @@ # Import dependency paths for windows include(winpaths_default.pri) - INCLUDEPATH *= "$$BOOST_PATH/include/boost-1_45/" + INCLUDEPATH *= "$$BOOST_PATH/include/boost-1_46_1/" QMAKE_LIBDIR *= "$$OPENSSL_PATH/lib" "$$LIBSNDFILE_PATH" INCLUDEPATH *= "$$OPENSSL_PATH/include" "$$LIBSNDFILE_PATH/include" CONFIG(intelcpp) { diff -Nru mumble-1.2.3/debian/changelog mumble-1.2.3-87-gf7d8711/debian/changelog --- mumble-1.2.3/debian/changelog 2011-02-19 22:57:23.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/debian/changelog 2011-04-02 22:46:40.000000000 +0000 @@ -1,13 +1,28 @@ -mumble (1.2.3-1~ppa1~lucid1) lucid; urgency=low +mumble (1.2.3-87-gf7d8711-1~ppa1~lucid1) lucid; urgency=low + + * PPA Upload of 1.2.3-87-gf7d8711 for Ubuntu lucid + + -- Thorvald Natvig Sat, 02 Apr 2011 15:46:40 -0700 + +mumble (1.2.3-2) unstable; urgency=low + + * Prefer libboost1.46-dev to libboost-dev. + Closes: #618092 + * Add patch from Conor Curran to fix PulseAudio role. + Closes: #615994 + * Add patch from Benjamin Jemlich to remove OpenGL for AudioStats dialog. + + -- Thorvald Natvig Fri, 25 Mar 2011 07:45:13 +0100 + +mumble (1.2.3-1) unstable; urgency=low [ Patrick Matthäi ] * Do not build with non existant libpulse-dev on hurd-i386. [ Thorvald Natvig ] * New upstream release. - * PPA Upload for Ubuntu lucid - -- Thorvald Natvig Sat, 19 Feb 2011 14:57:23 -0800 + -- Thorvald Natvig Sat, 19 Feb 2011 22:58:58 +0100 mumble (1.2.3~rc3-2) unstable; urgency=low diff -Nru mumble-1.2.3/debian/control mumble-1.2.3-87-gf7d8711/debian/control --- mumble-1.2.3/debian/control 2011-02-19 22:57:24.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/debian/control 2011-04-02 22:46:40.000000000 +0000 @@ -4,7 +4,7 @@ Homepage: http://mumble.sourceforge.net/ Maintainer: Debian VoIP Team Uploaders: Patrick Matthäi , Thorvald Natvig -Build-Depends: debhelper (>= 7.0.8), po-debconf, libboost-dev (>= 1.36.0), libboost-python-dev (>= 1.36.0), libqt4-dev (>= 4.5.0), libqt4-opengl-dev (>= 4.5.0), libasound2-dev, libpulse-dev [!hurd-i386], libogg-dev, libspeex-dev, libspeexdsp-dev, libcelt-dev (>= 0.7.0), libsndfile1-dev, libssl-dev, libzeroc-ice34-dev | libzeroc-ice33-dev | libzeroc-ice32-dev | libzeroc-ice-dev, ice34-translators | ice33-translators | ice32-translators | ice-translators, ice34-slice | ice33-slice | ice32-slice | ice-slice, libg15daemon-client-dev, libspeechd-dev, protobuf-compiler, libprotobuf-dev, libavahi-compat-libdnssd-dev, libxi-dev, libcap-dev [!kfreebsd-i386 !kfreebsd-amd64], libc6-dev-i386 [amd64], gcc-multilib [amd64] +Build-Depends: debhelper (>= 7.0.8), po-debconf, libboost1.46-dev | libboost-dev (>= 1.42.0), libboost-python1.46-dev | libboost-python-dev (>= 1.42.0), libqt4-dev (>= 4.5.0), libqt4-opengl-dev (>= 4.5.0), libasound2-dev, libpulse-dev [!hurd-i386], libogg-dev, libspeex-dev, libspeexdsp-dev, libcelt-dev (>= 0.7.0), libsndfile1-dev, libssl-dev, libzeroc-ice34-dev | libzeroc-ice33-dev | libzeroc-ice32-dev | libzeroc-ice-dev, ice34-translators | ice33-translators | ice32-translators | ice-translators, ice34-slice | ice33-slice | ice32-slice | ice-slice, libg15daemon-client-dev, libspeechd-dev, protobuf-compiler, libprotobuf-dev, libavahi-compat-libdnssd-dev, libxi-dev, libcap-dev [!kfreebsd-i386 !kfreebsd-amd64], libc6-dev-i386 [amd64], gcc-multilib [amd64] Standards-Version: 3.9.1 Vcs-Svn: svn://svn.debian.org/pkg-voip/mumble/trunk/ Vcs-Browser: http://svn.debian.org/wsvn/pkg-voip/mumble/?op=log diff -Nru mumble-1.2.3/g15helper/g15helper.c mumble-1.2.3-87-gf7d8711/g15helper/g15helper.c --- mumble-1.2.3/g15helper/g15helper.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/g15helper/g15helper.c 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/g15helper/g15helper.h mumble-1.2.3-87-gf7d8711/g15helper/g15helper.h --- mumble-1.2.3/g15helper/g15helper.h 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/g15helper/g15helper.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/g15helper/g15helper_macx.c mumble-1.2.3-87-gf7d8711/g15helper/g15helper_macx.c --- mumble-1.2.3/g15helper/g15helper_macx.c 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/g15helper/g15helper_macx.c 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/g15helper/g15helper.plist mumble-1.2.3-87-gf7d8711/g15helper/g15helper.plist --- mumble-1.2.3/g15helper/g15helper.plist 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/g15helper/g15helper.plist 2011-04-02 22:20:48.000000000 +0000 @@ -13,7 +13,7 @@ CFBundleSignature G15H CFBundleVersion - 1.2.3 + 1.2.4 NSHumanReadableCopyright Copyright (c) 2009 Mikkel Krautz <mikkel@krautz.dk> diff -Nru mumble-1.2.3/g15helper/g15helper.rc mumble-1.2.3-87-gf7d8711/g15helper/g15helper.rc --- mumble-1.2.3/g15helper/g15helper.rc 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/g15helper/g15helper.rc 2011-04-02 22:20:48.000000000 +0000 @@ -8,15 +8,15 @@ #define VER_DEBUG VS_FF_DEBUG #endif -#ifndef RELEASE_BUILD +#ifdef SNAPSHOT_BUILD #define VER_RELEASE VS_FF_SPECIALBUILD|VS_FF_PRERELEASE #else #define VER_RELEASE 0L #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,2,3,0 - PRODUCTVERSION 1,2,3,0 + FILEVERSION 1,2,4,0 + PRODUCTVERSION 1,2,4,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS (VER_DEBUG|VER_RELEASE) FILEOS VOS_NT_WINDOWS32 @@ -29,12 +29,12 @@ BEGIN VALUE "CompanyName", "Mikkel Krautz" VALUE "FileDescription", "Mumble G15 LCD Helper" - VALUE "FileVersion", "1.2.3" - VALUE "ProductVersion", "1.2.3" - VALUE "LegalCopyright", "Copyright (C) 2008-2009, Mikkel Krautz " + VALUE "FileVersion", "1.2.4" + VALUE "ProductVersion", "1.2.4" + VALUE "LegalCopyright", "Copyright (C) 2008-2011, Mikkel Krautz " VALUE "OriginalFilename", "mumble-g15-helper.exe" VALUE "ProductName", "Mumble G15 LCD Helper" -#ifndef RELEASE_BUILD +#ifdef SNAPSHOT_BUILD VALUE "SpecialBuild", "Snapshot development release" #endif END diff -Nru mumble-1.2.3/LICENSE mumble-1.2.3-87-gf7d8711/LICENSE --- mumble-1.2.3/LICENSE 2011-02-19 21:35:14.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/LICENSE 2011-04-02 22:20:48.000000000 +0000 @@ -1,12 +1,12 @@ -Copyright (C) 2005-2010, Thorvald Natvig +Copyright (C) 2005-2011, Thorvald Natvig Copyright (C) 2007, Stefan Gehn Copyright (C) 2007, Sebastian Schlingmann -Copyright (C) 2008-2010, Mikkel Krautz +Copyright (C) 2008-2011, Mikkel Krautz Copyright (C) 2008, Andreas Messer Copyright (C) 2007, Trenton Schulz -Copyright (C) 2008-2010, Stefan Hacker -Copyright (C) 2008-2010, Snares -Copyright (C) 2009-2010, Benjamin Jemlich +Copyright (C) 2008-2011, Stefan Hacker +Copyright (C) 2008-2011, Snares +Copyright (C) 2009-2011, Benjamin Jemlich All rights reserved. diff -Nru mumble-1.2.3/macx/common.pri mumble-1.2.3-87-gf7d8711/macx/common.pri --- mumble-1.2.3/macx/common.pri 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/macx/common.pri 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ # Common OSX overlay settings. -VERSION = 1.2.3 +VERSION = 1.2.4 DEFINES *= VERSION=\\\"$$VERSION\\\" diff -Nru mumble-1.2.3/macx/compat/compat.m mumble-1.2.3-87-gf7d8711/macx/compat/compat.m --- mumble-1.2.3/macx/compat/compat.m 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/macx/compat/compat.m 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2010, Mikkel Krautz +/* Copyright (C) 2010-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/macx/osax/osax.m mumble-1.2.3-87-gf7d8711/macx/osax/osax.m --- mumble-1.2.3/macx/osax/osax.m 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/macx/osax/osax.m 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2010, Mikkel Krautz +/* Copyright (C) 2010-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/macx/osax/osax.plist mumble-1.2.3-87-gf7d8711/macx/osax/osax.plist --- mumble-1.2.3/macx/osax/osax.plist 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/macx/osax/osax.plist 2011-04-02 22:20:48.000000000 +0000 @@ -13,7 +13,7 @@ CFBundlePackageType osax CFbundleVersion - 1.2.3 + 1.2.4 CFBundleSignature MUOL CSResourcesFileMapped diff -Nru mumble-1.2.3/macx/overlay/overlay.m mumble-1.2.3-87-gf7d8711/macx/overlay/overlay.m --- mumble-1.2.3/macx/overlay/overlay.m 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/macx/overlay/overlay.m 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2010, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/main.pro mumble-1.2.3-87-gf7d8711/main.pro --- mumble-1.2.3/main.pro 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/main.pro 2011-04-02 22:20:48.000000000 +0000 @@ -14,9 +14,6 @@ !CONFIG(no-bundled-celt) { SUBDIRS *= celt-0.7.0-build celt-0.11.0-build } - !CONFIG(no-11x) { - SUBDIRS *= src/mumble11x - } SUBDIRS *= src/mumble diff -Nru mumble-1.2.3/man/mumble11x.1 mumble-1.2.3-87-gf7d8711/man/mumble11x.1 --- mumble-1.2.3/man/mumble11x.1 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/man/mumble11x.1 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -.TH MUMBLE 1 "2008 Januar 07" -.SH NAME -mumble \- a low\-latency, high quality voice chat program for gaming. -.SH SYNOPSIS -.B mumble11x -.SH DESCRIPTION -Mumble is a low\-latency, high quality voice chat utility for -gaming that runs under X11. -This is the compatibility client for connecting to server versions 1.1.X. -.SH SEE ALSO -.BR mumble\-overlay (1), -.BR mumble (1). -.br -.SH AUTHOR -mumble and murmurd was written by Thorvald Natvig -. diff -Nru mumble-1.2.3/overlay/d3d10.cpp mumble-1.2.3-87-gf7d8711/overlay/d3d10.cpp --- mumble-1.2.3/overlay/d3d10.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/d3d10.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -587,6 +587,11 @@ } extern "C" __declspec(dllexport) void __cdecl PrepareDXGI() { + // This function is called by the Mumble client in Mumble's scope + // mainly to extract the offsets of various functions in the IDXGISwapChain + // and IDXGIObject interfaces that need to be hooked in target + // applications. The data is stored in the dxgi shared memory structure. + if (! dxgi) return; @@ -603,7 +608,7 @@ memset(&ovi, 0, sizeof(ovi)); ovi.dwOSVersionInfoSize = sizeof(ovi); GetVersionExW(reinterpret_cast(&ovi)); - if ((ovi.dwMajorVersion >= 7) || ((ovi.dwMajorVersion == 6) && (ovi.dwBuildNumber >= 6001))) { + if ((ovi.dwMajorVersion >= 7) || ((ovi.dwMajorVersion == 6) && (ovi.dwBuildNumber >= 6001))) { // Make sure this is vista or greater as quite a number of <=WinXP users have fake DX10 libs installed HMODULE hD3D10 = LoadLibrary("D3D10.DLL"); HMODULE hDXGI = LoadLibrary("DXGI.DLL"); @@ -660,6 +665,8 @@ if (pDevice && pSwapChain) { HMODULE hRef; + // For VC++ the vtable is located at the base addr. of the object and each function entry is a single pointer. Since p.e. the base classes + // of IDXGISwapChain have a total of 8 functions the 8+Xth entry points to the Xth added function in the derived interface. void ***vtbl = (void ***) pSwapChain; void *pPresent = (*vtbl)[8]; if (! GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (char *) pPresent, &hRef)) { diff -Nru mumble-1.2.3/overlay/d3d9.cpp mumble-1.2.3-87-gf7d8711/overlay/d3d9.cpp --- mumble-1.2.3/overlay/d3d9.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/d3d9.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/overlay/HardHook.cpp mumble-1.2.3-87-gf7d8711/overlay/HardHook.cpp --- mumble-1.2.3/overlay/HardHook.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/HardHook.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -29,34 +29,11 @@ */ #include "HardHook.h" +#include "ods.h" void *HardHook::pCode = NULL; unsigned int HardHook::uiCode = 0; -static void __cdecl ods(const char *format, ...) { - char buf[4096], *p = buf; - va_list args; - - va_start(args, format); - int len = _vsnprintf_s(p, sizeof(buf) - 1, _TRUNCATE, format, args); - va_end(args); - - if (len <= 0) - return; - - p += len; - - while (p > buf && isspace(static_cast(p[-1]))) - *--p = '\0'; - - *p++ = '\r'; - *p++ = '\n'; - *p = '\0'; - - OutputDebugStringA(buf); -} - - HardHook::HardHook() { int i; baseptr = NULL; @@ -100,6 +77,7 @@ } void *HardHook::cloneCode(void **porig) { + DWORD oldProtect, restoreProtect; if (! pCode || uiCode > 4000) { uiCode = 0; pCode = VirtualAlloc(NULL, 4096, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); @@ -110,12 +88,28 @@ n += uiCode; unsigned int idx = 0; - while (*o == 0xe9) { + if (!VirtualProtect(o, 16, PAGE_EXECUTE_READ, &oldProtect)) { + fods("HardHook: Failed vprotect (1)"); + return NULL; + } + + while (*o == 0xe9) { // JMP + unsigned char *tmp = o; int *iptr = reinterpret_cast(o+1); + // Follow jmp relative to next command. It doesn't make a difference + // if we actually perform all the jumps or directly jump after the + // chain. o += *iptr + 5; - ods("HardHook: Chaining from %p to %p", *porig, o); + fods("HardHook: Chaining from %p to %p", *porig, o); *porig = o; + + // Assume jump took us out of our read enabled zone, get rights for the new one + VirtualProtect(tmp, 16, oldProtect, &restoreProtect); + if (!VirtualProtect(o, 16, PAGE_EXECUTE_READ, &oldProtect)) { + fods("HardHook: Failed vprotect (2)"); + return NULL; + } } do { @@ -145,7 +139,7 @@ case 0x5e: case 0x5f: break; - case 0x68: + case 0x68: // PUSH immediate extra = 4; break; case 0x81: // CMP immediate @@ -158,7 +152,8 @@ extra = modrmbytes(a,b) + 1; break; default: - ods("HardHook: Unknown opcode at %d: %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x", idx-1, o[0], o[1], o[2], o[3], o[4], o[5], o[6], o[7], o[8], o[9], o[10], o[11]); + fods("HardHook: Unknown opcode at %d: %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x", idx-1, o[0], o[1], o[2], o[3], o[4], o[5], o[6], o[7], o[8], o[9], o[10], o[11]); + VirtualProtect(o, 16, oldProtect, &restoreProtect); return NULL; break; } @@ -167,8 +162,9 @@ idx += extra; } while (idx < 6); + VirtualProtect(o, 16, oldProtect, &restoreProtect); - n[idx++] = 0xe9; + n[idx++] = 0xe9; // Add a relative jmp back to the original code int offs = o - n - 5; int *iptr = reinterpret_cast(&n[idx]); @@ -191,22 +187,22 @@ unsigned char *fptr = reinterpret_cast(func); unsigned char *nptr = reinterpret_cast(replacement); - ods("HardHook: Asked to replace %p with %p", func, replacement); + fods("HardHook: Asked to replace %p with %p", func, replacement); - if (VirtualProtect(fptr, 16, PAGE_EXECUTE_READ, &oldProtect)) { - call = (voidFunc) cloneCode((void **) &fptr); + call = (voidFunc) cloneCode((void **) &fptr); - if (call) { - bTrampoline = true; - } else { - bTrampoline = false; - call = func; - } + if (call) { + bTrampoline = true; + } else { + bTrampoline = false; + call = func; + } + if (VirtualProtect(fptr, 16, PAGE_EXECUTE_READ, &oldProtect)) { unsigned char **iptr = reinterpret_cast(&replace[1]); *iptr = nptr; - replace[0] = 0x68; - replace[5] = 0xc3; + replace[0] = 0x68; // PUSH (immediate) nptr + replace[5] = 0xc3; // RETN for (i=0;i<6;i++) orig[i]=fptr[i]; @@ -216,12 +212,12 @@ VirtualProtect(fptr, 16, oldProtect, &restoreProtect); } else { - ods("Failed initial vprotect"); + fods("HardHook: Failed vprotect"); } } void HardHook::setupInterface(IUnknown *unkn, LONG funcoffset, voidFunc replacement) { - ods("HardHook: Replacing %p function #%ld", unkn, funcoffset); + fods("HardHook: Replacing %p function #%ld", unkn, funcoffset); void **ptr = reinterpret_cast(unkn); ptr = reinterpret_cast(ptr[0]); setup(reinterpret_cast(ptr[funcoffset]), replacement); @@ -238,13 +234,13 @@ if (VirtualProtect(baseptr, 6, PAGE_EXECUTE_READWRITE, &oldProtect)) { for (i=0;i<6;i++) - baseptr[i] = replace[i]; + baseptr[i] = replace[i]; // Replace with jump to new code VirtualProtect(baseptr, 6, oldProtect, &restoreProtect); FlushInstructionCache(GetCurrentProcess(),baseptr, 6); } for (i=0;i<6;i++) if (baseptr[i] != replace[i]) - ods("HH: Injection failure at byte %d", i); + fods("HH: Injection failure at byte %d", i); } void HardHook::restore(bool force) { @@ -265,19 +261,19 @@ } void HardHook::print() { - ods("HardHook: %02x %02x %02x %02x %02x => %02x %02x %02x %02x %02x (%02x %02x %02x %02x %02x)", - orig[0], orig[1], orig[2], orig[3], orig[4], - replace[0], replace[1], replace[2], replace[3], replace[4], - baseptr[0], baseptr[1], baseptr[2], baseptr[3], baseptr[4]); + fods("HardHook: %02x %02x %02x %02x %02x => %02x %02x %02x %02x %02x (%02x %02x %02x %02x %02x)", + orig[0], orig[1], orig[2], orig[3], orig[4], + replace[0], replace[1], replace[2], replace[3], replace[4], + baseptr[0], baseptr[1], baseptr[2], baseptr[3], baseptr[4]); } void HardHook::check() { if (memcmp(baseptr, replace, 6) != 0) { if (memcmp(baseptr, orig, 6) == 0) { - ods("HH: Restoring function %p", baseptr); + fods("HH: Restoring function %p", baseptr); inject(true); } else { - ods("HH: Function %p replaced by third party. Lost."); + fods("HH: Function %p replaced by third party. Lost."); } } } diff -Nru mumble-1.2.3/overlay/HardHook.h mumble-1.2.3-87-gf7d8711/overlay/HardHook.h --- mumble-1.2.3/overlay/HardHook.h 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/HardHook.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -47,13 +47,19 @@ typedef void *(*voidFunc)(); struct HardHook { + // Pointer to the place in the original code where replacements happen unsigned char *baseptr; unsigned char orig[6]; unsigned char replace[6]; + // Remembers whether there is a trampoline in place in the target code or + // whether restore -> call orig. -> replace has to be used for every intercepted call bool bTrampoline; + // Points to the (rest of the) original function when used from the injected function voidFunc call; + // Pointer to executable code page that holds all trampoline codes static void *pCode; + // Offset to next unused addr in pCode static unsigned int uiCode; HardHook(); diff -Nru mumble-1.2.3/overlay/lib.cpp mumble-1.2.3-87-gf7d8711/overlay/lib.cpp --- mumble-1.2.3/overlay/lib.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/lib.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -128,44 +128,6 @@ LeaveCriticalSection(&cs); } -void __cdecl _ods_out(const char *format, va_list *args) { - char buf[4096], *p = buf + 2; - - buf[0] = 'M'; // Add a prefix - buf[1] = ':'; - - // Format but be aware of space taken by prefix - int len = _vsnprintf_s(p, sizeof(buf) - 3, _TRUNCATE, format, *args); - - - if (len <= 0) - return; - - p += len; - - // Truncate trailing spaces - while (p > (buf + 2) && isspace(p[-1])) - *--p = '\0'; - - // Add custom termination - if (p > (buf + sizeof(buf) - 3)) { // Make sure there's space - p = buf + sizeof(buf) - 3; - } - *p++ = '\r'; - *p++ = '\n'; - *p = '\0'; - - OutputDebugStringA(buf); -} - -void __cdecl fods(const char *format, ...) { - va_list args; - - va_start(args, format); - _ods_out(format, &args); - va_end(args); -} - void __cdecl ods(const char *format, ...) { #ifndef DEBUG if (!bDebug) @@ -524,7 +486,7 @@ char *p = strrchr(procname, '\\'); if (!p) { // No blacklisting if the file has no path - } else if ((_stricmp(p+1, "mumble.exe")==0) || (_stricmp(p+1, "mumble11x.exe")==0)) { + } else if (GetProcAddress(NULL, "mumbleSelfDetection") != NULL) { ods("Attached to self"); bBlackListed = TRUE; bMumble = TRUE; diff -Nru mumble-1.2.3/overlay/lib.h mumble-1.2.3-87-gf7d8711/overlay/lib.h --- mumble-1.2.3/overlay/lib.h 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/lib.h 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,127 @@ +/* Copyright (C) 2005-2011, Thorvald Natvig + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _LIB_H +#define _LIB_H + +#define _UNICODE +#define _WIN32_WINNT 0x0501 +#include +#include +#include +#include +#include +#include +#include +#include +#include "overlay.h" +#include "HardHook.h" +#include "ods.h" + +#define lround(x) static_cast((x) + (((x) >= 0.0) ? 0.5 : -0.5)) + +using namespace std; + +void __cdecl ods(const char *format, ...); + +struct Direct3D9Data { + int iOffsetCreate; + int iOffsetCreateEx; + char cFileName[2048]; +}; + +struct DXGIData { + int iOffsetPresent; + int iOffsetResize; + int iOffsetAddRef; + int iOffsetRelease; + wchar_t wcDXGIFileName[2048]; + wchar_t wcD3D10FileName[2048]; +}; + +struct SharedData { + bool bHooked; +}; + +struct FakeInterface { + typedef ULONG(FakeInterface::* voidMemberFunc)(); + void **vtbl; + IUnknown *pOriginal; + IUnknown *pNew; + void *pAssembly; + FakeInterface(IUnknown *orig, int entries); + ~FakeInterface(); + void replace(LONG funcoffset, voidMemberFunc replacement); +}; + +class Mutex { + protected: + static CRITICAL_SECTION cs; + public: + static void init(); + Mutex(); + ~Mutex(); +}; + +class Pipe { + private: + HANDLE hSocket; + HANDLE hMemory; + + void release(); + protected: + unsigned int uiWidth, uiHeight; + unsigned int uiLeft, uiTop, uiRight, uiBottom; + unsigned char *a_ucTexture; + DWORD dwAlreadyRead; + OverlayMsg omMsg; + + void checkMessage(unsigned int w, unsigned int h); + bool sendMessage(const OverlayMsg &m); + virtual void blit(unsigned int x, unsigned int y, unsigned int w, unsigned int h) = 0; + virtual void setRect() = 0; + virtual void newTexture(unsigned int w, unsigned int h) = 0; + Pipe(); + ~Pipe(); + public: + void disconnect(); +}; + +extern void checkDXGIHook(bool preonly = false); +extern void checkD3D9Hook(bool preonly = false); +extern void checkOpenGLHook(); + +extern Direct3D9Data *d3dd; +extern DXGIData *dxgi; +extern HMODULE hSelf; +extern unsigned int uiAudioCount; +extern bool bVideoHooked; + +#endif diff -Nru mumble-1.2.3/overlay/ods.cpp mumble-1.2.3-87-gf7d8711/overlay/ods.cpp --- mumble-1.2.3/overlay/ods.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/ods.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,73 @@ +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2011-2011, Stefan Hacker + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include +#include +#include +#include "ods.h" + +void __cdecl _ods_out(const char *format, va_list *args) { + char buf[4096], *p = buf + 2; + + buf[0] = 'M'; // Add a prefix + buf[1] = ':'; + + // Format but be aware of space taken by prefix + int len = _vsnprintf_s(p, sizeof(buf) - 3, _TRUNCATE, format, *args); + + + if (len <= 0) + return; + + p += len; + + // Truncate trailing spaces + while (p > (buf + 2) && isspace(p[-1])) + *--p = '\0'; + + // Add custom termination + if (p > (buf + sizeof(buf) - 3)) { // Make sure there's space + p = buf + sizeof(buf) - 3; + } + *p++ = '\r'; + *p++ = '\n'; + *p = '\0'; + + OutputDebugStringA(buf); +} + +void __cdecl fods(const char *format, ...) { + va_list args; + + va_start(args, format); + _ods_out(format, &args); + va_end(args); +} diff -Nru mumble-1.2.3/overlay/ods.h mumble-1.2.3-87-gf7d8711/overlay/ods.h --- mumble-1.2.3/overlay/ods.h 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/ods.h 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,39 @@ +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2011-2011, Stefan Hacker + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef ODS_H +#define ODS_H + +#include + +void __cdecl _ods_out(const char *format, va_list *args); +void __cdecl fods(const char *format, ...); + +#endif // ODS_H diff -Nru mumble-1.2.3/overlay/opengl.cpp mumble-1.2.3-87-gf7d8711/overlay/opengl.cpp --- mumble-1.2.3/overlay/opengl.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/opengl.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/overlay/overlay.h mumble-1.2.3-87-gf7d8711/overlay/overlay.h --- mumble-1.2.3/overlay/overlay.h 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/overlay.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/overlay/overlay.pro mumble-1.2.3-87-gf7d8711/overlay/overlay.pro --- mumble-1.2.3/overlay/overlay.pro 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay/overlay.pro 2011-04-02 22:20:48.000000000 +0000 @@ -5,7 +5,8 @@ CONFIG *= dll shared debug_and_release warn_on CONFIG -= embed_manifest_dll TARGET = mumble_ol -SOURCES = lib.cpp d3d9.cpp d3d10.cpp opengl.cpp HardHook.cpp +SOURCES = lib.cpp d3d9.cpp d3d10.cpp ods.cpp opengl.cpp HardHook.cpp +HEADERS = lib.h ods.h HardHook.h EFFECTS = overlay.fx DIST = overlay.h overlay.fx HardHook.h diff -Nru mumble-1.2.3/overlay_gl/overlay.c mumble-1.2.3-87-gf7d8711/overlay_gl/overlay.c --- mumble-1.2.3/overlay_gl/overlay.c 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay_gl/overlay.c 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/overlay_gl/overlay_gl.pro mumble-1.2.3-87-gf7d8711/overlay_gl/overlay_gl.pro --- mumble-1.2.3/overlay_gl/overlay_gl.pro 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/overlay_gl/overlay_gl.pro 2011-04-02 22:20:48.000000000 +0000 @@ -5,7 +5,7 @@ CONFIG -= qt CONFIG *= debug_and_release TARGET = mumble$(TARGET_ADD) -VERSION = 1.2.3 +VERSION = 1.2.4 SOURCES = overlay.c LIBS *= -lrt -ldl QMAKE_CFLAGS *= -fvisibility=hidden $(CFLAGS_ADD) diff -Nru mumble-1.2.3/plugins/aoc/aoc.cpp mumble-1.2.3-87-gf7d8711/plugins/aoc/aoc.cpp --- mumble-1.2.3/plugins/aoc/aoc.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/aoc/aoc.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/arma2/arma2.cpp mumble-1.2.3-87-gf7d8711/plugins/arma2/arma2.cpp --- mumble-1.2.3/plugins/arma2/arma2.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/arma2/arma2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/bf1942/bf1942.cpp mumble-1.2.3-87-gf7d8711/plugins/bf1942/bf1942.cpp --- mumble-1.2.3/plugins/bf1942/bf1942.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/bf1942/bf1942.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/bf2/bf2.cpp mumble-1.2.3-87-gf7d8711/plugins/bf2/bf2.cpp --- mumble-1.2.3/plugins/bf2/bf2.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/bf2/bf2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/bf2142/bf2142.cpp mumble-1.2.3-87-gf7d8711/plugins/bf2142/bf2142.cpp --- mumble-1.2.3/plugins/bf2142/bf2142.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/bf2142/bf2142.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/bfbc2/bfbc2.cpp mumble-1.2.3-87-gf7d8711/plugins/bfbc2/bfbc2.cpp --- mumble-1.2.3/plugins/bfbc2/bfbc2.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/bfbc2/bfbc2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2010-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/bfheroes/bfheroes.cpp mumble-1.2.3-87-gf7d8711/plugins/bfheroes/bfheroes.cpp --- mumble-1.2.3/plugins/bfheroes/bfheroes.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/bfheroes/bfheroes.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/borderlands/borderlands.cpp mumble-1.2.3-87-gf7d8711/plugins/borderlands/borderlands.cpp --- mumble-1.2.3/plugins/borderlands/borderlands.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/borderlands/borderlands.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (C) 2010, Mark-Willem Jansen - Copyright (C) 2005-2010, Thorvald Natvig + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/breach/breach.cpp mumble-1.2.3-87-gf7d8711/plugins/breach/breach.cpp --- mumble-1.2.3/plugins/breach/breach.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/breach/breach.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,144 @@ +/* Copyright (C) 2011, Mark-Willem Jansen + Copyright (C) 2005-2011, Thorvald Natvig + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "../mumble_plugin_win32.h" + +BYTE *posptr; +BYTE *frontptr; +BYTE *topptr; + +static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &, std::wstring &) { + bool ok; + + for (int i=0;i<3;i++) + avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; + + // State value is working most of the time + unsigned char state; + ok = peekProc((BYTE *) 0x11146bb, &state, sizeof(state)); + if (! ok) + return false; + // State is 255 when you are in a menu + if (state == 255) + return true; // This results in all vectors beeing zero which tells Mumble to ignore them + + // coordinate systems is already left handed so no change needed + ok = peekProc(posptr, avatar_pos, 12) && + peekProc(frontptr, avatar_front, 12) && + peekProc(topptr, avatar_top, 12); + if (! ok) + return false; + + // The ingame units are inches + for (int i=0;i<3;i++) + avatar_pos[i] /= 39.37f; + + // As it is a First Person Shooter the avatar and camera are the same + for (int i=0;i<3;i++) { + camera_pos[i] = avatar_pos[i]; + camera_front[i] = avatar_front[i]; + camera_top[i] = avatar_top[i]; + } + + return true; +} + +static int trylock(const std::multimap &pids) { + posptr = frontptr = topptr = NULL; + + if (! initialize(pids, L"Breach.exe", L"fmodex.dll")) + return false; + + // Checking the version of Breach + char version[12]; + if ((! peekProc((BYTE *) 0x1118f98, &version, sizeof(version))) || (strncmp("breach 1.1.0", version, sizeof(version)) != 0)) { + generic_unlock(); + return false; + } + + // Setting the pointers for the avatar information + BYTE *ptr1 = peekProc(pModule + 0x177980); + if (ptr1 == 0) { + generic_unlock(); + return false; + } + posptr = ptr1 + 0x9200; + frontptr = ptr1 + 0x9248; + topptr = ptr1 + 0x9230; + + // Final check by calling fetch. + float apos[3], afront[3], atop[3], cpos[3], cfront[3], ctop[3]; + std::string context; + std::wstring identity; + if (! fetch(apos, afront, atop, cpos, cfront, ctop, context, identity)) { + generic_unlock(); + return false; + } + + return true; +} + +static const std::wstring longdesc() { + return std::wstring(L"Supports Breach v1.1.0, steam version. Context and Identity on supported."); +} + +static std::wstring description(L"Breach v1.1.0"); +static std::wstring shortname(L"Breach"); + +static int trylock1() { + return trylock(std::multimap()); +} + +static MumblePlugin breachplug = { + MUMBLE_PLUGIN_MAGIC, + description, + shortname, + NULL, + NULL, + trylock1, + generic_unlock, + longdesc, + fetch +}; + +static MumblePlugin2 breachplug2 = { + MUMBLE_PLUGIN_MAGIC_2, + MUMBLE_PLUGIN_VERSION, + trylock +}; + +extern "C" __declspec(dllexport) MumblePlugin *getMumblePlugin() { + return &breachplug; +} + +extern "C" __declspec(dllexport) MumblePlugin2 *getMumblePlugin2() { + return &breachplug2; +} diff -Nru mumble-1.2.3/plugins/breach/breach.pro mumble-1.2.3-87-gf7d8711/plugins/breach/breach.pro --- mumble-1.2.3/plugins/breach/breach.pro 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/breach/breach.pro 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,6 @@ +include(../plugins.pri) + +TARGET = breach +SOURCES = breach.cpp +LIBS += -luser32 + diff -Nru mumble-1.2.3/plugins/cod2/cod2.cpp mumble-1.2.3-87-gf7d8711/plugins/cod2/cod2.cpp --- mumble-1.2.3/plugins/cod2/cod2.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/cod2/cod2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/cod4/cod4.cpp mumble-1.2.3-87-gf7d8711/plugins/cod4/cod4.cpp --- mumble-1.2.3/plugins/cod4/cod4.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/cod4/cod4.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/cod5/cod5.cpp mumble-1.2.3-87-gf7d8711/plugins/cod5/cod5.cpp --- mumble-1.2.3/plugins/cod5/cod5.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/cod5/cod5.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/codmw2/codmw2.cpp mumble-1.2.3-87-gf7d8711/plugins/codmw2/codmw2.cpp --- mumble-1.2.3/plugins/codmw2/codmw2.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/codmw2/codmw2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/codmw2so/codmw2so.cpp mumble-1.2.3-87-gf7d8711/plugins/codmw2so/codmw2so.cpp --- mumble-1.2.3/plugins/codmw2so/codmw2so.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/codmw2so/codmw2so.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/cs/cs.cpp mumble-1.2.3-87-gf7d8711/plugins/cs/cs.cpp --- mumble-1.2.3/plugins/cs/cs.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/cs/cs.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (C) 2009-2010, Imre Botos - Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig + Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/css/css.cpp mumble-1.2.3-87-gf7d8711/plugins/css/css.cpp --- mumble-1.2.3/plugins/css/css.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/css/css.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/dods/dods.cpp mumble-1.2.3-87-gf7d8711/plugins/dods/dods.cpp --- mumble-1.2.3/plugins/dods/dods.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/dods/dods.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/dys/dys.cpp mumble-1.2.3-87-gf7d8711/plugins/dys/dys.cpp --- mumble-1.2.3/plugins/dys/dys.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/dys/dys.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/etqw/etqw.cpp mumble-1.2.3-87-gf7d8711/plugins/etqw/etqw.cpp --- mumble-1.2.3/plugins/etqw/etqw.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/etqw/etqw.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/gmod/gmod.cpp mumble-1.2.3-87-gf7d8711/plugins/gmod/gmod.cpp --- mumble-1.2.3/plugins/gmod/gmod.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/gmod/gmod.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/gtaiv/gtaiv.cpp mumble-1.2.3-87-gf7d8711/plugins/gtaiv/gtaiv.cpp --- mumble-1.2.3/plugins/gtaiv/gtaiv.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/gtaiv/gtaiv.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,183 @@ +/* Copyright (C) 2011, Mike + Copyright (C) 2005-2011, Thorvald Natvig + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "../mumble_plugin_win32.h" + +static unsigned int playerid; +static BYTE *base_address; +static BYTE *cvecptr; +static BYTE *displayptr; + +static int setuppointers() { + BYTE *playerptr; + BYTE *charptr; + + // Player stuff + if (!peekProc(base_address + 0xF1CC68, playerid)) + return false; + + if (!peekProc(base_address + 0x11A7008 + (playerid * 4), &playerptr, 4) || !playerptr) + return false; + + if (!peekProc(playerptr + 0x58C, &charptr, 4) || !charptr) + return false; + + if (!peekProc(charptr + 0x20, &cvecptr, 4) || !cvecptr) + return false; + + return true; +} + +static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, +std::string &, std::wstring &) { + unsigned int playerid_check; + if (!peekProc(base_address + 0xF1CC68, playerid_check)) + return false; + if (playerid_check != playerid) { + if (!setuppointers()) + return false; + } + + for (int i=0;i<3;i++) + avatar_pos[i]=avatar_front[i]=avatar_top[i]=0.0f; + + bool ok; + + float pos_corrector[3]; + float front_corrector[3]; + float top_corrector[3]; + + float campos_corrector[3]; + float camfront_corrector[3]; + float camtop_corrector[3]; + + // Peekproc and assign game addresses to our containers, so we can retrieve positional data + ok = peekProc(cvecptr + 0x30, &pos_corrector, 12) && + peekProc(cvecptr + 0x20, &top_corrector, 12) && + peekProc(cvecptr + 0x10, &front_corrector, 12) && + peekProc(displayptr + 0x30, &campos_corrector, 12) && + peekProc(displayptr + 0x10, &camtop_corrector, 12) && + peekProc(displayptr + 0x20, &camfront_corrector, 12); + + if (!ok) + return false; + + // Convert to left-handed coordinate system + avatar_pos[0] = pos_corrector[0]; + avatar_pos[1] = pos_corrector[2]; + avatar_pos[2] = pos_corrector[1]; + + avatar_front[0] = front_corrector[0]; + avatar_front[1] = front_corrector[2]; + avatar_front[2] = front_corrector[1]; + + avatar_top[0] = top_corrector[0]; + avatar_top[1] = top_corrector[2]; + avatar_top[2] = top_corrector[1]; + + camera_pos[0] = campos_corrector[0]; + camera_pos[1] = campos_corrector[2]; + camera_pos[2] = campos_corrector[1]; + + camera_front[0] = -camfront_corrector[0]; + camera_front[1] = -camfront_corrector[2]; + camera_front[2] = -camfront_corrector[1]; + + camera_top[0] = camtop_corrector[0]; + camera_top[1] = camtop_corrector[2]; + camera_top[2] = camtop_corrector[1]; + + return true; +} + +static int trylock(const std::multimap &pids) { + if (!initialize(pids, L"GTAIV.exe")) + return false; + + // Check if we can get meaningful data from it + float apos[3], afront[3], atop[3]; + float cpos[3], cfront[3], ctop[3]; + std::wstring sidentity; + std::string scontext; + BYTE *viewportptr; + + base_address = pModule - 0x400000; + + if (!peekProc(base_address + 0x10F47F0, &viewportptr, 4) || !viewportptr) + return false; + + displayptr = viewportptr + 0x50; + + if (setuppointers() && fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { + return true; + } else { + generic_unlock(); + return false; + } +} + +static const std::wstring longdesc() { + return std::wstring(L"Supports Grand Theft Auto IV (v1.0.7.0). No identity support."); +} + +static std::wstring description(L"Grand Theft Auto IV v1.0.7.0"); +static std::wstring shortname(L"GTA IV"); + +static int trylock1() { + return trylock(std::multimap()); +} + +static MumblePlugin gtaivplug = { + MUMBLE_PLUGIN_MAGIC, + description, + shortname, + NULL, + NULL, + trylock1, + generic_unlock, + longdesc, + fetch +}; + +static MumblePlugin2 gtaivplug2 = { + MUMBLE_PLUGIN_MAGIC_2, + MUMBLE_PLUGIN_VERSION, + trylock +}; + +extern "C" __declspec(dllexport) MumblePlugin *getMumblePlugin() { + return >aivplug; +} + +extern "C" __declspec(dllexport) MumblePlugin2 *getMumblePlugin2() { + return >aivplug2; +} + diff -Nru mumble-1.2.3/plugins/gtaiv/gtaiv.pro mumble-1.2.3-87-gf7d8711/plugins/gtaiv/gtaiv.pro --- mumble-1.2.3/plugins/gtaiv/gtaiv.pro 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/gtaiv/gtaiv.pro 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,7 @@ +include(../plugins.pri) + +TARGET = gtaiv +SOURCES = gtaiv.cpp +LIBS += -luser32 + + diff -Nru mumble-1.2.3/plugins/hl2dm/hl2dm.cpp mumble-1.2.3-87-gf7d8711/plugins/hl2dm/hl2dm.cpp --- mumble-1.2.3/plugins/hl2dm/hl2dm.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/hl2dm/hl2dm.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/insurgency/insurgency.cpp mumble-1.2.3-87-gf7d8711/plugins/insurgency/insurgency.cpp --- mumble-1.2.3/plugins/insurgency/insurgency.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/insurgency/insurgency.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/l4d/l4d.cpp mumble-1.2.3-87-gf7d8711/plugins/l4d/l4d.cpp --- mumble-1.2.3/plugins/l4d/l4d.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/l4d/l4d.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -71,8 +71,8 @@ if (! initialize(pids, L"left4dead.exe", L"client.dll")) return false; - posptr = pModule + 0x6F8340; - rotptr = pModule + 0x640A08; + posptr = pModule + 0x596E30; + rotptr = pModule + 0x596E3C; float pos[3]; float rot[3]; @@ -119,10 +119,10 @@ } static const std::wstring longdesc() { - return std::wstring(L"Supports L4D version 4448 only. Supports no fancy stuff."); + return std::wstring(L"Supports L4D version 4440 only. Supports no fancy stuff."); } -static std::wstring description(L"Left 4 Dead (Build 4448)"); +static std::wstring description(L"Left 4 Dead (Build 4440)"); static std::wstring shortname(L"Left 4 Dead"); static int trylock1() { diff -Nru mumble-1.2.3/plugins/l4d2/l4d2.cpp mumble-1.2.3-87-gf7d8711/plugins/l4d2/l4d2.cpp --- mumble-1.2.3/plugins/l4d2/l4d2.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/l4d2/l4d2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -72,8 +72,8 @@ if (! initialize(pids, L"left4dead2.exe", L"client.dll")) return false; - posptr = pModule + 0x6F8340; - rotptr = pModule + 0x6AD900; + posptr = pModule + 0x6F9250; + rotptr = pModule + 0x641A08; // stateptr = pModule + 0x690A3C; float pos[3]; @@ -127,10 +127,10 @@ } static const std::wstring longdesc() { - return std::wstring(L"Supports L4D2 build 4391. No identity or context support yet."); + return std::wstring(L"Supports L4D2 build 4490. No identity or context support yet."); } -static std::wstring description(L"Left 4 Dead 2 (Build 4391)"); +static std::wstring description(L"Left 4 Dead 2 (Build 4490)"); static std::wstring shortname(L"Left 4 Dead 2"); static int trylock1() { diff -Nru mumble-1.2.3/plugins/link/link.cpp mumble-1.2.3-87-gf7d8711/plugins/link/link.cpp --- mumble-1.2.3/plugins/link/link.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/link/link.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/link/link-posix.cpp mumble-1.2.3-87-gf7d8711/plugins/link/link-posix.cpp --- mumble-1.2.3/plugins/link/link-posix.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/link/link-posix.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/manual/manual.cpp mumble-1.2.3-87-gf7d8711/plugins/manual/manual.cpp --- mumble-1.2.3/plugins/manual/manual.cpp 2011-02-19 21:35:15.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/manual/manual.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009-2010, Stefan Hacker +/* Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/plugins/mumble_plugin.h mumble-1.2.3-87-gf7d8711/plugins/mumble_plugin.h --- mumble-1.2.3/plugins/mumble_plugin.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/mumble_plugin.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/plugins.pro mumble-1.2.3-87-gf7d8711/plugins/plugins.pro --- mumble-1.2.3/plugins/plugins.pro 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/plugins.pro 2011-04-02 22:20:48.000000000 +0000 @@ -5,5 +5,5 @@ DIST = plugins.pri win32 { - SUBDIRS += aoc arma2 bf1942 bf2 bf2142 bfbc2 bfheroes borderlands cod2 cod4 cod5 codmw2 codmw2so cs css dods dys etqw tf2 gmod hl2dm insurgency l4d l4d2 lotro sto ut2004 ut3 wolfet wow + SUBDIRS += aoc arma2 bf1942 bf2 bf2142 bfbc2 bfheroes borderlands breach cod2 cod4 cod5 codmw2 codmw2so cs css dods dys etqw tf2 gmod gtaiv hl2dm insurgency l4d l4d2 lotro sto ut2004 ut3 wolfet wow } diff -Nru mumble-1.2.3/plugins/sto/sto.cpp mumble-1.2.3-87-gf7d8711/plugins/sto/sto.cpp --- mumble-1.2.3/plugins/sto/sto.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/sto/sto.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/tf2/tf2.cpp mumble-1.2.3-87-gf7d8711/plugins/tf2/tf2.cpp --- mumble-1.2.3/plugins/tf2/tf2.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/tf2/tf2.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,13 +31,20 @@ #include "../mumble_plugin_win32.h" -using namespace std; - -BYTE *posptr; -BYTE *rotptr; +BYTE *posrotptr; BYTE *stateptr; BYTE *hostptr; +/* + note that these are just examples of memory values, and may not be updated or correct + position tuple: client.dll+0x6F76C0 (x,y,z, float) + orientation tuple: client.dll+0x6F76CC (v,h float) + spawn state: client.dll+0x607C64 (0 when at main menu, 1 when spectator, 3 when at team selection menu, and 6 or 9 when on a team (depending on the team side and gamemode), byte) + host string: engine.dll+0x3D3E94 (ip:port zero-terminated string; localhost:27015 if create a server ingame) + ID string: engine.dll+0x54E668 = "DemomanTaunts" (13 characters, text) + note that memory addresses in this comment are for example only; the real ones are defined below +*/ + static bool calcout(float *pos, float *rot, float *opos, float *front, float *top) { float h = rot[0]; float v = rot[1]; @@ -53,62 +60,55 @@ opos[1] = pos[2] / 39.37f; opos[2] = pos[1] / 39.37f; - front[0] = cos(v) * cos(h); - front[1] = -sin(h); - front[2] = sin(v) * cos(h); - - h -= static_cast(M_PI / 2.0f); - - top[0] = cos(v) * cos(h); - top[1] = -sin(h); - top[2] = sin(v) * cos(h); + // h rotation angle up-down, positive in down direction starting from x-axis + // v rotation angle left-right, positive to the left starting from x-axis + front[0] = cosf(h) * cosf(v); + front[1] = -sinf(h); + front[2] = cosf(h) * sinf(v); + // sin(h - 1/2pi) = -cos(h) and cos(h - 1/2pi) = sin(h) + top[0] = sinf(h) * cosf(v); + top[1] = cosf(h); + top[2] = sinf(h) * sinf(v); return true; } -static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, string &context, wstring &) { +static int fetch(float *avatar_pos, float *avatar_front, float *avatar_top, float *camera_pos, float *camera_front, float *camera_top, std::string &context, std::wstring &) { for (int i=0;i<3;i++) avatar_pos[i] = avatar_front[i] = avatar_top[i] = camera_pos[i] = camera_front[i] = camera_top[i] = 0.0f; - float ipos[3], rot[3]; bool ok; + float posrot[5]; char state; char chHostStr[40]; - string sHost; - wostringstream new_identity; - ostringstream new_context; - - ok = peekProc(posptr, ipos, 12) && - peekProc(rotptr, rot, 12) && - peekProc(stateptr, &state, 1) && - peekProc(hostptr, chHostStr, 40); + + ok = peekProc(posrotptr, posrot) && + peekProc(stateptr, state) && + peekProc(hostptr, chHostStr); if (!ok) return false; chHostStr[39] = 0; + std::string sHost; sHost.assign(chHostStr); - if (sHost.find(':')==string::npos) - sHost.append(":27015"); + if (!sHost.empty()) { + if (sHost.find(':') == std::string::npos) + sHost.append(":27015"); + + std::ostringstream new_context; + new_context << "{ \"ipport\": \"" << sHost << "\"}"; + context = new_context.str(); + } - new_context << "" - << "tf2" - << "" << sHost << "" - << ""; - context = new_context.str(); - - /* TODO - new_identity << "" - << "" << "SAS" << "" - << ""; - identity = new_identity.str(); */ + //TODO: Implement identity // Check to see if you are in a server and spawned if (state == 0 || state == 1 || state == 3) return true; // Deactivate plugin - ok = calcout(ipos, rot, avatar_pos, avatar_front, avatar_top); + ok = calcout(posrot, posrot+3, avatar_pos, avatar_front, avatar_top); if (ok) { for (int i=0;i<3;++i) { camera_pos[i] = avatar_pos[i]; @@ -122,7 +122,7 @@ } static int trylock(const std::multimap &pids) { - posptr = rotptr = NULL; + posrotptr = NULL; if (! initialize(pids, L"hl2.exe", L"client.dll")) return false; @@ -131,40 +131,21 @@ if (!mod_engine) return false; - // Check if we really have TF2 running - /* - note that these are just examples of memory values, and may not be updated or correct - position tuple: client.dll+0x5753d8 (x,y,z, float) - orientation tuple: client.dll+0x4b691c (v,h float) - ID string: client.dll+0x4eb30b = "teamJet@@" (9 characters, text) - spawn state: client.dll+0x4EABCC; (0 when at main menu, 1 when spectator, 3 when at team selection menu, and 6 or 9 when on a team (depending on the team side and gamemode), byte) - host string: engine.dll+0x3c8124 (ip:port zero-terminated string; localhost:27015 if create a server ingame) - note that memory addresses in this comment are for example only; the real ones are defined below - */ - // Remember addresses for later - posptr = pModule + 0x6EFCC0; - rotptr = pModule + 0x6F6544; - stateptr = pModule + 0x606C64; + posrotptr = pModule + 0x6F76C0; + stateptr = pModule + 0x607C64; hostptr = mod_engine + 0x3D3E94; - /* - // Gamecheck - char sMagic[9]; - if (!peekProc(pModule + 0x617DE3, sMagic, 9) || strncmp("teamJet@@", sMagic, 9)!=0) - return false; - */ - // Gamecheck char sMagic[13]; - if (!peekProc(mod_engine + 0x54A670, sMagic, 13) || strncmp("DemomanTaunts", sMagic, 13)!=0) + if (!peekProc(mod_engine + 0x54E668, sMagic) || strncmp("DemomanTaunts", sMagic, sizeof(sMagic))!=0) return false; // Check if we can get meaningful data from it float apos[3], afront[3], atop[3]; float cpos[3], cfront[3], ctop[3]; - wstring sidentity; - string scontext; + std::wstring sidentity; + std::string scontext; if (fetch(apos, afront, atop, cpos, cfront, ctop, scontext, sidentity)) { return true; @@ -175,10 +156,10 @@ } static const std::wstring longdesc() { - return std::wstring(L"Supports TF2 build 4421. No identity support yet."); + return std::wstring(L"Supports TF2 build 4426. No identity support yet."); } -static std::wstring description(L"Team Fortress 2 (Build 4421)"); +static std::wstring description(L"Team Fortress 2 (Build 4426)"); static std::wstring shortname(L"Team Fortress 2"); static int trylock1() { diff -Nru mumble-1.2.3/plugins/ut2004/ut2004.cpp mumble-1.2.3-87-gf7d8711/plugins/ut2004/ut2004.cpp --- mumble-1.2.3/plugins/ut2004/ut2004.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/ut2004/ut2004.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/ut3/ut3.cpp mumble-1.2.3-87-gf7d8711/plugins/ut3/ut3.cpp --- mumble-1.2.3/plugins/ut3/ut3.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/ut3/ut3.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Snares - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Snares + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/wolfet/wolfet.cpp mumble-1.2.3-87-gf7d8711/plugins/wolfet/wolfet.cpp --- mumble-1.2.3/plugins/wolfet/wolfet.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/wolfet/wolfet.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009-2010, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/plugins/wow/wow.cpp mumble-1.2.3-87-gf7d8711/plugins/wow/wow.cpp --- mumble-1.2.3/plugins/wow/wow.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/plugins/wow/wow.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ /* Copyright (C) 2009-2010, deKarl - Copyright (C) 2005-2010, Thorvald Natvig + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/speexbuild/mumble_speex_init.c mumble-1.2.3-87-gf7d8711/speexbuild/mumble_speex_init.c --- mumble-1.2.3/speexbuild/mumble_speex_init.c 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/speexbuild/mumble_speex_init.c 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/speexbuild/speexbuild.pro mumble-1.2.3-87-gf7d8711/speexbuild/speexbuild.pro --- mumble-1.2.3/speexbuild/speexbuild.pro 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/speexbuild/speexbuild.pro 2011-04-02 22:20:48.000000000 +0000 @@ -48,9 +48,9 @@ !CONFIG(intelcpp) { DEFINES+=USE_SMALLFT } else { - LIBS *= -l"\Program Files (x86)\Intel/Compiler\11.1\054\ipp\ia32\lib\ippsemerged" - LIBS *= -l"\Program Files (x86)\Intel/Compiler\11.1\054\ipp\ia32\lib\ippsmerged" - LIBS *= -l"\Program Files (x86)\Intel/Compiler\11.1\054\ipp\ia32\lib\ippcorel" + LIBS *= -l"\\Program Files (x86)\\Intel/Compiler\\11.1\\054\\ipp\\ia32\\lib\\ippsemerged" + LIBS *= -l"\\Program Files (x86)\\Intel/Compiler\\11.1\\054\\ipp\\ia32\\lib\\ippsmerged" + LIBS *= -l"\\Program Files (x86)\\Intel/Compiler\\11.1\\054\\ipp\\ia32\\lib\\ippcorel" } } else { CONFIG += staticlib diff -Nru mumble-1.2.3/src/ACL.cpp mumble-1.2.3-87-gf7d8711/src/ACL.cpp --- mumble-1.2.3/src/ACL.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/ACL.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/ACL.h mumble-1.2.3-87-gf7d8711/src/ACL.h --- mumble-1.2.3/src/ACL.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/ACL.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/bonjour/bonjourservicebrowser.h mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourservicebrowser.h --- mumble-1.2.3/src/bonjour/bonjourservicebrowser.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourservicebrowser.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2007, Trenton Schulz -Copyright (c) 2009, Stefan Hacker +Copyright (c) 2009-2011, Stefan Hacker Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -Nru mumble-1.2.3/src/bonjour/bonjourserviceregister.cpp mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceregister.cpp --- mumble-1.2.3/src/bonjour/bonjourserviceregister.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceregister.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2007, Trenton Schulz -Copyright (c) 2009, Stefan Hacker +Copyright (c) 2009-2011, Stefan Hacker Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -53,7 +53,9 @@ } #endif - DNSServiceErrorType err = DNSServiceRegister(&dnssref, 0, 0, record.serviceName.toUtf8().constData(), + DNSServiceErrorType err = DNSServiceRegister(&dnssref, 0, 0, + record.serviceName.isEmpty() ? 0 + : record.serviceName.toUtf8().constData(), record.registeredType.toUtf8().constData(), record.replyDomain.isEmpty() ? 0 : record.replyDomain.toUtf8().constData(), 0, diff -Nru mumble-1.2.3/src/bonjour/bonjourserviceregister.h mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceregister.h --- mumble-1.2.3/src/bonjour/bonjourserviceregister.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceregister.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2007, Trenton Schulz -Copyright (c) 2009, Stefan Hacker +Copyright (c) 2009-2011, Stefan Hacker Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -Nru mumble-1.2.3/src/bonjour/bonjourserviceresolver.cpp mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceresolver.cpp --- mumble-1.2.3/src/bonjour/bonjourserviceresolver.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceresolver.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (c) 2007, Trenton Schulz -Copyright (C) 2009-2010, Thorvald Natvig +Copyright (C) 2009-2011, Thorvald Natvig Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -Nru mumble-1.2.3/src/bonjour/bonjourserviceresolver.h mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceresolver.h --- mumble-1.2.3/src/bonjour/bonjourserviceresolver.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/bonjour/bonjourserviceresolver.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,7 +1,7 @@ /* Copyright (c) 2007, Trenton Schulz -Copyright (c) 2009-2010, Stefan Hacker -Copyright (C) 2009-2010, Thorvald Natvig +Copyright (c) 2009-2011, Stefan Hacker +Copyright (C) 2009-2011, Thorvald Natvig Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -Nru mumble-1.2.3/src/Channel.cpp mumble-1.2.3-87-gf7d8711/src/Channel.cpp --- mumble-1.2.3/src/Channel.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Channel.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Channel.h mumble-1.2.3-87-gf7d8711/src/Channel.h --- mumble-1.2.3/src/Channel.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Channel.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Connection.cpp mumble-1.2.3-87-gf7d8711/src/Connection.cpp --- mumble-1.2.3/src/Connection.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Connection.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Connection.h mumble-1.2.3-87-gf7d8711/src/Connection.h --- mumble-1.2.3/src/Connection.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Connection.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/CryptState.cpp mumble-1.2.3-87-gf7d8711/src/CryptState.cpp --- mumble-1.2.3/src/CryptState.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/CryptState.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/CryptState.h mumble-1.2.3-87-gf7d8711/src/CryptState.h --- mumble-1.2.3/src/CryptState.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/CryptState.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Group.cpp mumble-1.2.3-87-gf7d8711/src/Group.cpp --- mumble-1.2.3/src/Group.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Group.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Group.h mumble-1.2.3-87-gf7d8711/src/Group.h --- mumble-1.2.3/src/Group.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Group.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Message.h mumble-1.2.3-87-gf7d8711/src/Message.h --- mumble-1.2.3/src/Message.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Message.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -59,7 +59,8 @@ MUMBLE_MH_MSG(CodecVersion) \ MUMBLE_MH_MSG(UserStats) \ MUMBLE_MH_MSG(RequestBlob) \ - MUMBLE_MH_MSG(ServerConfig) + MUMBLE_MH_MSG(ServerConfig) \ + MUMBLE_MH_MSG(SuggestConfig) class MessageHandler { public: diff -Nru mumble-1.2.3/src/mumble/About.cpp mumble-1.2.3-87-gf7d8711/src/mumble/About.cpp --- mumble-1.2.3/src/mumble/About.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/About.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/About.h mumble-1.2.3-87-gf7d8711/src/mumble/About.h --- mumble-1.2.3/src/mumble/About.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/About.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ACLEditor.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ACLEditor.cpp --- mumble-1.2.3/src/mumble/ACLEditor.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ACLEditor.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ACLEditor.h mumble-1.2.3-87-gf7d8711/src/mumble/ACLEditor.h --- mumble-1.2.3/src/mumble/ACLEditor.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ACLEditor.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ALSAAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ALSAAudio.cpp --- mumble-1.2.3/src/mumble/ALSAAudio.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ALSAAudio.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ALSAAudio.h mumble-1.2.3-87-gf7d8711/src/mumble/ALSAAudio.h --- mumble-1.2.3/src/mumble/ALSAAudio.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ALSAAudio.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ASIOInput.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ASIOInput.cpp --- mumble-1.2.3/src/mumble/ASIOInput.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ASIOInput.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ASIOInput.h mumble-1.2.3-87-gf7d8711/src/mumble/ASIOInput.h --- mumble-1.2.3/src/mumble/ASIOInput.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ASIOInput.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/AudioConfigDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble/AudioConfigDialog.cpp --- mumble-1.2.3/src/mumble/AudioConfigDialog.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioConfigDialog.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig Copyright (C) 2008, Andreas Messer All rights reserved. diff -Nru mumble-1.2.3/src/mumble/AudioConfigDialog.h mumble-1.2.3-87-gf7d8711/src/mumble/AudioConfigDialog.h --- mumble-1.2.3/src/mumble/AudioConfigDialog.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioConfigDialog.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Audio.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Audio.cpp --- mumble-1.2.3/src/mumble/Audio.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Audio.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Audio.h mumble-1.2.3-87-gf7d8711/src/mumble/Audio.h --- mumble-1.2.3/src/mumble/Audio.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Audio.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/AudioInput.cpp mumble-1.2.3-87-gf7d8711/src/mumble/AudioInput.cpp --- mumble-1.2.3/src/mumble/AudioInput.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioInput.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -594,6 +594,130 @@ } */ +void AudioInput::resetAudioProcessor() { + if (!bResetProcessor) + return; + + int iArg; + + if (sppPreprocess) + speex_preprocess_state_destroy(sppPreprocess); + if (sesEcho) + speex_echo_state_destroy(sesEcho); + + sppPreprocess = speex_preprocess_state_init(iFrameSize, iSampleRate); + + iArg = 1; + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_VAD, &iArg); + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC, &iArg); + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_DENOISE, &iArg); + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_DEREVERB, &iArg); + + iArg = 30000; + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_TARGET, &iArg); + + float v = 30000.0f / static_cast(g.s.iMinLoudness); + iArg = iroundf(floorf(20.0f * log10f(v))); + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_MAX_GAIN, &iArg); + + iArg = -60; + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_DECREMENT, &iArg); + + iArg = g.s.iNoiseSuppress; + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &iArg); + + if (iEchoChannels > 0) { + sesEcho = speex_echo_state_init_mc(iFrameSize, iFrameSize * 10, 1, bEchoMulti ? iEchoChannels : 1); + iArg = iSampleRate; + speex_echo_ctl(sesEcho, SPEEX_ECHO_SET_SAMPLING_RATE, &iArg); + speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_ECHO_STATE, sesEcho); + + qWarning("AudioInput: ECHO CANCELLER ACTIVE"); + } else { + sesEcho = NULL; + } + + bResetProcessor = false; +} + +int AudioInput::encodeCELTFrame(short *psSource, unsigned char *buffer) { + CELTCodec *switchto = NULL; + + if ((! g.uiSession || (g.s.lmLoopMode == Settings::Local)) && (! g.qmCodecs.isEmpty())) { + // Use latest for local loopback + QMap::const_iterator i = g.qmCodecs.constEnd(); + --i; + switchto = i.value(); + } else { + if (cCodec && bPreviousVoice) { + // Currently talking, don't switch unless you must. + int v = cCodec->bitstreamVersion(); + if ((v == g.iCodecAlpha) || (v == g.iCodecBeta)) + switchto = cCodec; + } + } + if (! switchto) { + switchto = g.qmCodecs.value(g.bPreferAlpha ? g.iCodecAlpha : g.iCodecBeta); + if (! switchto) { + switchto = g.qmCodecs.value(g.bPreferAlpha ? g.iCodecBeta : g.iCodecAlpha); + } + } + if (switchto != cCodec) { + if (cCodec && ceEncoder) { + cCodec->celt_encoder_destroy(ceEncoder); + ceEncoder = NULL; + } + cCodec = switchto; + if (cCodec) { + ceEncoder = cCodec->encoderCreate(); + } + } else if (cCodec && ! bPreviousVoice) { + cCodec->celt_encoder_ctl(ceEncoder, CELT_RESET_STATE); + } + + if (! cCodec) + return 0; + + if (g.uiSession && g.s.lmLoopMode != Settings::Local) { + int v = cCodec->bitstreamVersion(); + if (v == g.iCodecAlpha) + umtType = MessageHandler::UDPVoiceCELTAlpha; + else if (v == g.iCodecBeta) + umtType = MessageHandler::UDPVoiceCELTBeta; + else { + qWarning() << "Couldn't find message type for codec version" << v; + return 0; + } + } + + cCodec->celt_encoder_ctl(ceEncoder, CELT_SET_PREDICTION(0)); + + cCodec->celt_encoder_ctl(ceEncoder, CELT_SET_VBR_RATE(iAudioQuality)); + int len = cCodec->encode(ceEncoder, psSource, buffer, qMin(iAudioQuality / (8 * 100), 127)); + iBitrate = len * 100 * 8; + + return len; +} + +int AudioInput::encodeSpeexFrame(short *psSource, unsigned char *buffer) { + int vbr = 0; + speex_encoder_ctl(esSpeex, SPEEX_GET_VBR_MAX_BITRATE, &vbr); + if (vbr != iAudioQuality) { + vbr = iAudioQuality; + speex_encoder_ctl(esSpeex, SPEEX_SET_VBR_MAX_BITRATE, &vbr); + } + + if (! bPreviousVoice) + speex_encoder_ctl(esSpeex, SPEEX_RESET_STATE, NULL); + + speex_encode_int(esSpeex, psSource, &sbBits); + int len = speex_bits_write(&sbBits, reinterpret_cast(buffer), 127); + iBitrate = len * 50 * 8; + speex_bits_reset(&sbBits); + + return len; +} + void AudioInput::encodeAudioFrame() { int iArg; ClientUser *p=ClientUser::get(g.uiSession); @@ -628,47 +752,7 @@ } QMutexLocker l(&qmSpeex); - - if (bResetProcessor) { - if (sppPreprocess) - speex_preprocess_state_destroy(sppPreprocess); - if (sesEcho) - speex_echo_state_destroy(sesEcho); - - sppPreprocess = speex_preprocess_state_init(iFrameSize, iSampleRate); - - iArg = 1; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_VAD, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_DENOISE, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_DEREVERB, &iArg); - - iArg = 30000; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_TARGET, &iArg); - - float v = 30000.0f / static_cast(g.s.iMinLoudness); - iArg = iroundf(floorf(20.0f * log10f(v))); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_MAX_GAIN, &iArg); - - iArg = -60; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_DECREMENT, &iArg); - - iArg = g.s.iNoiseSuppress; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &iArg); - - if (iEchoChannels > 0) { - sesEcho = speex_echo_state_init_mc(iFrameSize, iFrameSize*10, 1, bEchoMulti ? iEchoChannels : 1); - iArg = iSampleRate; - speex_echo_ctl(sesEcho, SPEEX_ECHO_SET_SAMPLING_RATE, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_ECHO_STATE, sesEcho); - - qWarning("AudioInput: ECHO CANCELLER ACTIVE"); - } else { - sesEcho = NULL; - } - - bResetProcessor = false; - } + resetAudioProcessor(); speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_GET_AGC_GAIN, &iArg); float gainValue = static_cast(iArg); @@ -772,75 +856,11 @@ int len; if (umtType != MessageHandler::UDPVoiceSpeex) { - CELTCodec *switchto = NULL; - - if ((! g.uiSession || (g.s.lmLoopMode == Settings::Local)) && (! g.qmCodecs.isEmpty())) { - // Use latest for local loopback - QMap::const_iterator i = g.qmCodecs.constEnd(); - --i; - switchto = i.value(); - } else { - if (cCodec && bPreviousVoice) { - // Currently talking, don't switch unless you must. - int v = cCodec->bitstreamVersion(); - if ((v == g.iCodecAlpha) || (v == g.iCodecBeta)) - switchto = cCodec; - } - } - if (! switchto) { - switchto = g.qmCodecs.value(g.bPreferAlpha ? g.iCodecAlpha : g.iCodecBeta); - if (! switchto) { - switchto = g.qmCodecs.value(g.bPreferAlpha ? g.iCodecBeta : g.iCodecAlpha); - } - } - if (switchto != cCodec) { - if (cCodec && ceEncoder) { - cCodec->celt_encoder_destroy(ceEncoder); - ceEncoder = NULL; - } - cCodec = switchto; - if (cCodec) { - ceEncoder = cCodec->encoderCreate(); - } - } else if (cCodec && ! bPreviousVoice) { - cCodec->celt_encoder_ctl(ceEncoder, CELT_RESET_STATE); - } - - if (! cCodec) + len = encodeCELTFrame(psSource, buffer); + if (len == 0) return; - - if (g.uiSession && g.s.lmLoopMode != Settings::Local) { - int v = cCodec->bitstreamVersion(); - if (v == g.iCodecAlpha) - umtType = MessageHandler::UDPVoiceCELTAlpha; - else if (v == g.iCodecBeta) - umtType = MessageHandler::UDPVoiceCELTBeta; - else { - qWarning() << "Couldn't find message type for codec version" << v; - return; - } - } - - cCodec->celt_encoder_ctl(ceEncoder, CELT_SET_PREDICTION(0)); - - cCodec->celt_encoder_ctl(ceEncoder,CELT_SET_VBR_RATE(iAudioQuality)); - len = cCodec->encode(ceEncoder, psSource, buffer, qMin(iAudioQuality / 800, 127)); - iBitrate = len * 100 * 8; } else { - int vbr = 0; - speex_encoder_ctl(esSpeex, SPEEX_GET_VBR_MAX_BITRATE, &vbr); - if (vbr != iAudioQuality) { - vbr = iAudioQuality; - speex_encoder_ctl(esSpeex, SPEEX_SET_VBR_MAX_BITRATE, &vbr); - } - - if (! bPreviousVoice) - speex_encoder_ctl(esSpeex, SPEEX_RESET_STATE, NULL); - - speex_encode_int(esSpeex, psSource, &sbBits); - len = speex_bits_write(&sbBits, reinterpret_cast(buffer), 127); - iBitrate = len * 50 * 8; - speex_bits_reset(&sbBits); + len = encodeSpeexFrame(psSource, buffer); } flushCheck(QByteArray(reinterpret_cast(buffer), len), ! bIsSpeech); diff -Nru mumble-1.2.3/src/mumble/AudioInput.h mumble-1.2.3-87-gf7d8711/src/mumble/AudioInput.h --- mumble-1.2.3/src/mumble/AudioInput.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioInput.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -83,6 +83,9 @@ unsigned int iMicFilled, iEchoFilled; inMixerFunc imfMic, imfEcho; inMixerFunc chooseMixer(const unsigned int nchan, SampleFormat sf); + void resetAudioProcessor(); + int encodeSpeexFrame(short *pSource, unsigned char *buffer); + int encodeCELTFrame(short *pSource, unsigned char *buffer); protected: MessageHandler::UDPMessageType umtType; SampleFormat eMicFormat, eEchoFormat; diff -Nru mumble-1.2.3/src/mumble/AudioOutput.cpp mumble-1.2.3-87-gf7d8711/src/mumble/AudioOutput.cpp --- mumble-1.2.3/src/mumble/AudioOutput.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioOutput.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/AudioOutput.h mumble-1.2.3-87-gf7d8711/src/mumble/AudioOutput.h --- mumble-1.2.3/src/mumble/AudioOutput.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioOutput.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/AudioStats.cpp mumble-1.2.3-87-gf7d8711/src/mumble/AudioStats.cpp --- mumble-1.2.3/src/mumble/AudioStats.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioStats.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -124,30 +124,11 @@ } -AudioEchoWidget::AudioEchoWidget(QWidget *p) : QGLWidget(p) { +AudioEchoWidget::AudioEchoWidget(QWidget *p) : QWidget(p) { setMinimumSize(100, 60); } -void AudioEchoWidget::initializeGL() { - glDisable(GL_LIGHTING); - - glClearColor(0,0,0,0); - glShadeModel(GL_SMOOTH); - - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_CULL_FACE); -} - -void AudioEchoWidget::resizeGL(int w, int h) { - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -static inline void mapEchoToColor(float echo) { +static inline const QColor mapEchoToColor(float echo) { bool neg = (echo < 0.0f); echo = fabsf(echo); @@ -162,21 +143,26 @@ if (echo < 0.5f) { a = echo * 2.0f; - b = 0; + b = 0.0f; } else { - a = 1; + a = 1.0f; b = (echo - 0.5f) * 2.0f; } if (neg) - glColor3f(a, b, c); + return QColor::fromRgbF(a, b, c); else - glColor3f(c, b, a); + return QColor::fromRgbF(c, b, a); } #define WGT(x,y) st->W[(y)*N + 2*(x)+1] -void AudioEchoWidget::paintGL() { +void AudioEchoWidget::paintEvent(QPaintEvent *) { + QPainter paint(this); + + paint.scale(width(), height()); + paint.fillRect(rect(), Qt::black); + AudioInputPtr ai = g.ai; if (! ai || ! ai->sesEcho) return; @@ -211,8 +197,6 @@ float xscale = 1.0f / static_cast(N); float yscale = 1.0f / static_cast(M); - glBegin(GL_QUADS); - for (int j = 0; j < M; j++) { for (int i=1;i < N; i++) { float xa = static_cast(i) * xscale; @@ -221,24 +205,19 @@ float xb = xa + xscale; float yb = ya + yscale; - mapEchoToColor(sqrtf(W[j*n+2*i]*W[j*n+2*i]+W[j*n+2*i-1]*W[j*n+2*i-1]) / 65536.f); - glVertex2f(xa, ya); - glVertex2f(xb, ya); - glVertex2f(xb, yb); - glVertex2f(xa, yb); + const QColor &c = mapEchoToColor(sqrtf(W[j*n+2*i]*W[j*n+2*i]+W[j*n+2*i-1]*W[j*n+2*i-1]) / 65536.f); + paint.fillRect(QRectF(QPointF(xa, ya), QPointF(xb, yb)), c); } } - glEnd(); - - glBegin(GL_LINE_STRIP); - glColor3f(1.0f, 0.0f, 1.0f); - xscale = 1.0f / (2.0f*static_cast(n)); + QPolygonF poly; + xscale = 1.0f / (2.0f * static_cast(n)); yscale = 1.0f / (200.0f * 32767.0f); - for (int i=0;i<2*n;i++) { - glVertex2f(static_cast(i)*xscale, 0.5f + static_cast(w[i]) * yscale); + for (int i = 0; i < 2 * n; i++) { + poly << QPointF(static_cast(i) * xscale, 0.5f + static_cast(w[i]) * yscale); } - glEnd(); + paint.setPen(QColor::fromRgbF(1.0f, 0.0f, 1.0f)); + paint.drawPolyline(poly); } AudioNoiseWidget::AudioNoiseWidget(QWidget *p) : QWidget(p) { @@ -411,11 +390,7 @@ abSpeech->iAbove = iroundf(g.s.fVADmax * 32767.0f + 0.5f); if (g.s.vsVAD == Settings::Amplitude) { -#ifndef COMPAT_CLIENT abSpeech->iValue = iroundf((32767.f/96.0f) * (96.0f + ai->dPeakCleanMic) + 0.5f); -#else - abSpeech->iValue = iroundf((32767.f/96.0f) * (96.0f + ai->dPeakMic) + 0.5f); -#endif } else { abSpeech->iValue = iroundf(ai->fSpeechProb * 32767.0f + 0.5f); } @@ -424,5 +399,5 @@ anwNoise->update(); if (aewEcho) - aewEcho->updateGL(); + aewEcho->update(); } diff -Nru mumble-1.2.3/src/mumble/AudioStats.h mumble-1.2.3-87-gf7d8711/src/mumble/AudioStats.h --- mumble-1.2.3/src/mumble/AudioStats.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioStats.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -50,16 +50,14 @@ QList qlReplacementBrushes; }; -class AudioEchoWidget : public QGLWidget { +class AudioEchoWidget : public QWidget { private: Q_OBJECT Q_DISABLE_COPY(AudioEchoWidget) public: AudioEchoWidget(QWidget *parent); - protected: - void initializeGL(); - void resizeGL(int w, int h); - void paintGL(); + protected slots: + void paintEvent(QPaintEvent *event); }; class AudioNoiseWidget : public QWidget { diff -Nru mumble-1.2.3/src/mumble/AudioWizard.cpp mumble-1.2.3-87-gf7d8711/src/mumble/AudioWizard.cpp --- mumble-1.2.3/src/mumble/AudioWizard.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioWizard.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/AudioWizard.h mumble-1.2.3-87-gf7d8711/src/mumble/AudioWizard.h --- mumble-1.2.3/src/mumble/AudioWizard.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/AudioWizard.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/BanEditor.cpp mumble-1.2.3-87-gf7d8711/src/mumble/BanEditor.cpp --- mumble-1.2.3/src/mumble/BanEditor.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/BanEditor.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* copyright (C) 2005-2010, Thorvald Natvig +/* copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/BanEditor.h mumble-1.2.3-87-gf7d8711/src/mumble/BanEditor.h --- mumble-1.2.3/src/mumble/BanEditor.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/BanEditor.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/BonjourClient.cpp mumble-1.2.3-87-gf7d8711/src/mumble/BonjourClient.cpp --- mumble-1.2.3/src/mumble/BonjourClient.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/BonjourClient.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/BonjourClient.h mumble-1.2.3-87-gf7d8711/src/mumble/BonjourClient.h --- mumble-1.2.3/src/mumble/BonjourClient.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/BonjourClient.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Cert.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Cert.cpp --- mumble-1.2.3/src/mumble/Cert.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Cert.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Cert.h mumble-1.2.3-87-gf7d8711/src/mumble/Cert.h --- mumble-1.2.3/src/mumble/Cert.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Cert.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ClientUser.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ClientUser.cpp --- mumble-1.2.3/src/mumble/ClientUser.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ClientUser.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -39,13 +39,15 @@ QList ClientUser::c_qlTalking; QReadWriteLock ClientUser::c_qrwlTalking; -ClientUser::ClientUser(QObject *p) : QObject(p) { - tsState = Settings::Passive; - bLocalMute = false; - fPowerMin = fPowerMax = 0.0f; - fAverageAvailable = 0.0f; - iFrames = 0; - iSequence = 0; +ClientUser::ClientUser(QObject *p) : QObject(p), + tsState(Settings::Passive), + bLocalMute(false), + fPowerMin(0.0f), + fPowerMax(0.0f), + fAverageAvailable(0.0f), + iFrames(0), + iSequence(0), + tLastTalkStateChange(false) { } ClientUser *ClientUser::get(unsigned int uiSession) { @@ -71,6 +73,16 @@ return c_qlTalking; } +QList ClientUser::getActive() { + QReadLocker lock(&c_qrwlUsers); + QList activeUsers; + foreach(ClientUser *cu, c_qmUsers) { + if (cu->isActive()) + activeUsers << cu; + } + return activeUsers; +} + bool ClientUser::isValid(unsigned int uiSession) { QReadLocker lock(&c_qrwlUsers); @@ -159,6 +171,7 @@ nstate = true; tsState = ts; + tLastTalkStateChange.restart(); emit talkingChanged(); if (nstate && cChannel) { @@ -229,6 +242,35 @@ } bool ClientUser::lessThanOverlay(const ClientUser *first, const ClientUser *second) { + if (g.s.os.osSort == OverlaySettings::LastStateChange) { + // Talkers above non-talkers + if (first->tsState != Settings::Passive && second->tsState == Settings::Passive) + return true; + if (first->tsState == Settings::Passive && second->tsState != Settings::Passive) + return false; + + // Valid time above invalid time (possible when there wasn't a state-change yet) + if (first->tLastTalkStateChange.isStarted() && !second->tLastTalkStateChange.isStarted()) + return true; + if (!first->tLastTalkStateChange.isStarted() && second->tLastTalkStateChange.isStarted()) + return false; + + // If both have a valid time + if (first->tLastTalkStateChange.isStarted() && second->tLastTalkStateChange.isStarted()) { + // Among talkers, long > short + // (if two clients are talking, the client that started first is above the other) + if (first->tsState != Settings::Passive && second->tsState != Settings::Passive) + return first->tLastTalkStateChange > second->tLastTalkStateChange; + + // Among non-talkers, short -> long + // (if two clients are passive, the client that most recently stopped talking is above) + if (first->tsState == Settings::Passive && second->tsState == Settings::Passive) + return first->tLastTalkStateChange < second->tLastTalkStateChange; + } + + // If both times are invalid, fall back to alphabetically (continuing below) + } + if (first->cChannel == second->cChannel || first->cChannel == NULL || second->cChannel == NULL) return lessThan(first, second); @@ -245,14 +287,22 @@ return Channel::lessThan(first->cChannel, second->cChannel); } - - void ClientUser::sortUsersOverlay(QList &list) { QReadLocker lock(&c_qrwlUsers); qSort(list.begin(), list.end(), ClientUser::lessThanOverlay); } +bool ClientUser::isActive() { + if (tsState != Settings::Passive) + return true; + + if (!tLastTalkStateChange.isStarted()) + return false; + + return tLastTalkStateChange.elapsed() < g.s.os.iActiveTime * 1000000; +} + /* From Channel.h */ void Channel::addClientUser(ClientUser *p) { diff -Nru mumble-1.2.3/src/mumble/ClientUser.h mumble-1.2.3-87-gf7d8711/src/mumble/ClientUser.h --- mumble-1.2.3/src/mumble/ClientUser.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ClientUser.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -47,6 +47,7 @@ }; Settings::TalkState tsState; + Timer tLastTalkStateChange; bool bLocalMute; float fPowerMin, fPowerMax; @@ -66,12 +67,19 @@ QString getFlagsString() const; ClientUser(QObject *p = NULL); + /*! Determines whether a user is active or not + * A user is active when it is currently speaking or when the user has + * spoken within Settings::iActiveTime amount of seconds. + */ + bool isActive(); + static QHash c_qmUsers; static QReadWriteLock c_qrwlUsers; static QList c_qlTalking; static QReadWriteLock c_qrwlTalking; static QList getTalking(); + static QList getActive(); static void sortUsersOverlay(QList &list); diff -Nru mumble-1.2.3/src/mumble/ConfigDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog.cpp --- mumble-1.2.3/src/mumble/ConfigDialog.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,9 +31,7 @@ #include "ConfigDialog.h" #include "AudioInput.h" #include "AudioOutput.h" -#ifndef COMPAT_CLIENT #include "Overlay.h" -#endif #include "Global.h" ConfigDialog::ConfigDialog(QWidget *p) : QDialog(p) { @@ -75,9 +73,7 @@ )); if (! g.s.qbaConfigGeometry.isEmpty()) { -#ifndef COMPAT_CLIENT if (! g.ocIntercept) -#endif restoreGeometry(g.s.qbaConfigGeometry); } } @@ -229,9 +225,7 @@ void ConfigDialog::accept() { apply(); -#ifndef COMPAT_CLIENT if (! g.ocIntercept) -#endif g.s.qbaConfigGeometry=saveGeometry(); QDialog::accept(); diff -Nru mumble-1.2.3/src/mumble/ConfigDialogDelegate.h mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialogDelegate.h --- mumble-1.2.3/src/mumble/ConfigDialogDelegate.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialogDelegate.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Mikkel Krautz +/* Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConfigDialogDelegate.mm mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialogDelegate.mm --- mumble-1.2.3/src/mumble/ConfigDialogDelegate.mm 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialogDelegate.mm 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Mikkel Krautz +/* Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConfigDialog.h mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog.h --- mumble-1.2.3/src/mumble/ConfigDialog.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConfigDialog_macx.h mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog_macx.h --- mumble-1.2.3/src/mumble/ConfigDialog_macx.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog_macx.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConfigDialog_macx.mm mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog_macx.mm --- mumble-1.2.3/src/mumble/ConfigDialog_macx.mm 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigDialog_macx.mm 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConfigWidget.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ConfigWidget.cpp --- mumble-1.2.3/src/mumble/ConfigWidget.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigWidget.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConfigWidget.h mumble-1.2.3-87-gf7d8711/src/mumble/ConfigWidget.h --- mumble-1.2.3/src/mumble/ConfigWidget.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConfigWidget.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ConnectDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ConnectDialog.cpp --- mumble-1.2.3/src/mumble/ConnectDialog.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConnectDialog.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -33,7 +33,7 @@ #include "ServerHandler.h" #include "Channel.h" #include "Database.h" -#include "NetworkConfig.h" +#include "WebFetch.h" QMap ServerItem::qmIcons; QList ConnectDialog::qlPublicServers; @@ -409,7 +409,7 @@ if (! url.hasQueryItem(QLatin1String("title"))) url.addQueryItem(QLatin1String("title"), url.host()); - ServerItem *si = new ServerItem(url.queryItemValue(QLatin1String("title")), url.host(), static_cast(url.port()), url.userName(), url.password()); + ServerItem *si = new ServerItem(url.queryItemValue(QLatin1String("title")), url.host(), static_cast(url.port(DEFAULT_MUMBLE_PORT)), url.userName(), url.password()); if (url.hasQueryItem(QLatin1String("url"))) si->qsUrl = url.queryItemValue(QLatin1String("url")); @@ -570,14 +570,34 @@ return fs; } + +/*! + \fn QMimeData *ServerItem::toMimeData() const + This function turns a ServerItem object into a QMimeData object holding a URL to the server. +*/ QMimeData *ServerItem::toMimeData() const { + QMimeData *mime = ServerItem::toMimeData(qsName, qsHostname, usPort); + + if (itType == FavoriteType) + mime->setData(QLatin1String("OriginatedInMumble"), QByteArray()); + + return mime; +} + +/*! + \fn QMimeData *ServerItem::toMimeData(const QString &name, const QString &host, unsigned short port, const QString &channel) + This function creates a QMimeData object containing a URL to the server at \a host and \a port. \a name is passed in the + query string as "title", which is used for adding a server to favorites. \a channel may be omitted, but if specified it + should be in the format of "/path/to/channel". +*/ +QMimeData *ServerItem::toMimeData(const QString &name, const QString &host, unsigned short port, const QString &channel) { QUrl url; url.setScheme(QLatin1String("mumble")); - url.setHost(qsHostname); - url.setPort(usPort); - url.addQueryItem(QLatin1String("title"), qsName); - if (! qsUrl.isEmpty()) - url.addQueryItem(QLatin1String("url"), qsUrl); + url.setHost(host); + if (port != DEFAULT_MUMBLE_PORT) + url.setPort(port); + url.setPath(channel); + url.addQueryItem(QLatin1String("title"), name); url.addQueryItem(QLatin1String("version"), QLatin1String("1.2.0")); QString qs = QLatin1String(url.toEncoded()); @@ -586,7 +606,7 @@ #ifdef Q_OS_WIN QString contents = QString::fromLatin1("[InternetShortcut]\r\nURL=%1\r\n").arg(qs); - QString urlname = QString::fromLatin1("%1.url").arg(qsName); + QString urlname = QString::fromLatin1("%1.url").arg(name); FILEGROUPDESCRIPTORA fgda; ZeroMemory(&fgda, sizeof(fgda)); @@ -622,10 +642,7 @@ mime->setUrls(urls); mime->setText(qs); - mime->setHtml(QString::fromLatin1("%2").arg(qs).arg(qsName)); - - if (itType == FavoriteType) - mime->setData(QLatin1String("OriginatedInMumble"), QByteArray()); + mime->setHtml(QString::fromLatin1("%2").arg(qs).arg(name)); return mime; } @@ -925,7 +942,7 @@ void ConnectDialog::on_qaFavoriteAddNew_triggered() { QString host, user, pw; QString name; - unsigned short port = 64738; + unsigned short port = DEFAULT_MUMBLE_PORT; // Try to fill out fields if possible { @@ -1114,13 +1131,10 @@ bPublicInit = true; QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(g.qsRegionalHost); url.setPath(QLatin1String("/list2.cgi")); url.addQueryItem(QLatin1String("version"), QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING))); - QNetworkReply *rep = Network::get(url); - connect(rep, SIGNAL(finished()), this, SLOT(finished())); + WebFetch::fetch(url, this, SLOT(fetched(QByteArray,QUrl,QMap))); } #ifdef USE_BONJOUR @@ -1466,36 +1480,19 @@ } } -static QString fromUtf8(const QByteArray &qba) { - if (qba.isEmpty()) - return QString(); - return QString::fromUtf8(qba.constData(), qba.length()); -} - -void ConnectDialog::finished() { - QNetworkReply *rep = qobject_cast(sender()); - if (rep->error() != QNetworkReply::NoError) { - QUrl url = rep->request().url(); - if (url.host() == g.qsRegionalHost) { - url.setHost(QLatin1String("mumble.info")); - QNetworkReply *nrep = Network::get(url); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - - rep->deleteLater(); - return; - } - +void ConnectDialog::fetched(QByteArray data, QUrl url, QMap headers) { + if (data.isNull()) { QMessageBox::warning(this, QLatin1String("Mumble"), tr("Failed to fetch server list"), QMessageBox::Ok); return; } QDomDocument doc; - doc.setContent(rep->readAll()); + doc.setContent(data); qlPublicServers.clear(); - qsUserCountry = fromUtf8(rep->rawHeader("Geo-Country")); - qsUserCountryCode = fromUtf8(rep->rawHeader("Geo-Country-Code")).toLower(); - qsUserContinentCode = fromUtf8(rep->rawHeader("Geo-Continent-Code")).toLower(); + qsUserCountry = headers.value(QLatin1String("Geo-Country")); + qsUserCountryCode = headers.value(QLatin1String("Geo-Country-Code")).toLower(); + qsUserContinentCode = headers.value(QLatin1String("Geo-Continent-Code")).toLower(); QDomElement root=doc.documentElement(); QDomNode n = root.firstChild(); @@ -1522,6 +1519,4 @@ tPublicServers.restart(); fillList(); - - rep->deleteLater(); } diff -Nru mumble-1.2.3/src/mumble/ConnectDialog.h mumble-1.2.3-87-gf7d8711/src/mumble/ConnectDialog.h --- mumble-1.2.3/src/mumble/ConnectDialog.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ConnectDialog.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -34,6 +34,7 @@ #include "mumble_pch.hpp" #include "Timer.h" #include "Database.h" +#include "Net.h" #ifdef USE_BONJOUR #include "BonjourClient.h" @@ -155,6 +156,7 @@ FavoriteServer toFavoriteServer() const; QMimeData *toMimeData() const; + static QMimeData *toMimeData(const QString &name, const QString &host, unsigned short port, const QString &channel = QString()); static QIcon loadIcon(const QString &name); @@ -186,7 +188,7 @@ public: QString qsName, qsHostname, qsUsername, qsPassword; unsigned short usPort; - ConnectDialogEdit(QWidget *parent, const QString &name = QString(), const QString &host = QString(), const QString &user = QString(), unsigned short port = 64738, const QString &password = QString(), bool add = false); + ConnectDialogEdit(QWidget *parent, const QString &name = QString(), const QString &host = QString(), const QString &user = QString(), unsigned short port = DEFAULT_MUMBLE_PORT, const QString &password = QString(), bool add = false); }; class ConnectDialog : public QDialog, public Ui::ConnectDialog { @@ -241,7 +243,7 @@ void stopDns(ServerItem *); public slots: void accept(); - void finished(); + void fetched(QByteArray, QUrl, QMap); void udpReply(); void lookedUp(QHostInfo); diff -Nru mumble-1.2.3/src/mumble/CoreAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble/CoreAudio.cpp --- mumble-1.2.3/src/mumble/CoreAudio.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/CoreAudio.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009-2010, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/CoreAudio.h mumble-1.2.3-87-gf7d8711/src/mumble/CoreAudio.h --- mumble-1.2.3/src/mumble/CoreAudio.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/CoreAudio.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/CrashReporter.cpp mumble-1.2.3-87-gf7d8711/src/mumble/CrashReporter.cpp --- mumble-1.2.3/src/mumble/CrashReporter.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/CrashReporter.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Mikkel Krautz +/* Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. @@ -105,15 +105,7 @@ void CrashReporter::run() { QByteArray qbaDumpContents; -#ifdef COMPAT_CLIENT -#ifdef Q_OS_MAC - QFile qfCrashDump(QDir::homePath() + QLatin1String("/Library/Preferences/Mumble/mumble11x.dmp")); -#else - QFile qfCrashDump(QDesktopServices::storageLocation(QDesktopServices::DataLocation) + QLatin1String("/mumble11x.dmp")); -#endif -#else QFile qfCrashDump(g.qdBasePath.filePath(QLatin1String("mumble.dmp"))); -#endif if (! qfCrashDump.exists()) return; @@ -142,11 +134,7 @@ } QStringList qslFilters; -#ifdef COMPAT_CLIENT - qslFilters << QString::fromLatin1("Mumble11x_*.crash"); -#else qslFilters << QString::fromLatin1("Mumble_*.crash"); -#endif qdCrashReports.setNameFilters(qslFilters); qdCrashReports.setSorting(QDir::Time); QFileInfoList qfilEntries = qdCrashReports.entryInfoList(); diff -Nru mumble-1.2.3/src/mumble/CrashReporter.h mumble-1.2.3-87-gf7d8711/src/mumble/CrashReporter.h --- mumble-1.2.3/src/mumble/CrashReporter.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/CrashReporter.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Mikkel Krautz +/* Copyright (C) 2009-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/CustomElements.cpp mumble-1.2.3-87-gf7d8711/src/mumble/CustomElements.cpp --- mumble-1.2.3/src/mumble/CustomElements.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/CustomElements.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -93,7 +93,7 @@ QTextEdit::dropEvent(evt); } -ChatbarTextEdit::ChatbarTextEdit(QWidget *p) : QTextEdit(p) { +ChatbarTextEdit::ChatbarTextEdit(QWidget *p) : QTextEdit(p), iHistoryIndex(-1) { setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -150,7 +150,11 @@ if (evt->type() == QEvent::KeyPress) { QKeyEvent *kev = static_cast(evt); if ((kev->key() == Qt::Key_Enter || kev->key() == Qt::Key_Return) && !(kev->modifiers() & Qt::ShiftModifier)) { - g.mw->sendChatbarMessage(); + const QString msg = toPlainText(); + if (!msg.isEmpty()) { + addToHistory(msg); + emit entered(msg); + } return true; } if (kev->key() == Qt::Key_Tab) { @@ -159,6 +163,12 @@ } else if (kev->key() == Qt::Key_Space && kev->modifiers() == Qt::ControlModifier) { emit ctrlSpacePressed(); return true; + } else if (kev->key() == Qt::Key_Up && kev->modifiers() == Qt::ControlModifier) { + historyUp(); + return true; + } else if (kev->key() == Qt::Key_Down && kev->modifiers() == Qt::ControlModifier) { + historyDown(); + return true; } } return QTextEdit::event(evt); @@ -231,9 +241,44 @@ return id; } +void ChatbarTextEdit::addToHistory(const QString &str) { + iHistoryIndex = -1; + qslHistory.push_front(str); + if (qslHistory.length() > MAX_HISTORY) { + qslHistory.pop_back(); + } +} + +void ChatbarTextEdit::historyUp() { + if (qslHistory.length() == 0) + return; + + if (iHistoryIndex == -1) { + qsHistoryTemp = toPlainText(); + } + + if (iHistoryIndex < qslHistory.length() - 1) { + setPlainText(qslHistory[++iHistoryIndex]); + moveCursor(QTextCursor::End); + } +} + +void ChatbarTextEdit::historyDown() { + if (iHistoryIndex < 0) { + return; + } else if (iHistoryIndex == 0) { + setPlainText(qsHistoryTemp); + iHistoryIndex--; + } else { + setPlainText(qslHistory[--iHistoryIndex]); + } + moveCursor(QTextCursor::End); +} + void ChatbarTextEdit::pasteAndSend_triggered() { paste(); - g.mw->sendChatbarMessage(); + addToHistory(toPlainText()); + emit entered(toPlainText()); } DockTitleBar::DockTitleBar() : QLabel(tr("Drag here")) { diff -Nru mumble-1.2.3/src/mumble/CustomElements.h mumble-1.2.3-87-gf7d8711/src/mumble/CustomElements.h --- mumble-1.2.3/src/mumble/CustomElements.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/CustomElements.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2009, Stefan Hacker - Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2009-2011, Stefan Hacker + Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -38,6 +38,10 @@ Q_OBJECT Q_DISABLE_COPY(ChatbarTextEdit) void inFocus(bool); + QStringList qslHistory; + QString qsHistoryTemp; + int iHistoryIndex; + static const int MAX_HISTORY = 50; protected: QString qsDefaultText; bool bDefaultVisible; @@ -55,10 +59,14 @@ signals: void tabPressed(void); void ctrlSpacePressed(void); + void entered(QString); public slots: void pasteAndSend_triggered(); void doResize(); void doScrollbar(); + void addToHistory(const QString &str); + void historyUp(); + void historyDown(); public: ChatbarTextEdit(QWidget *p = NULL); }; diff -Nru mumble-1.2.3/src/mumble/Database.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Database.cpp --- mumble-1.2.3/src/mumble/Database.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Database.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,6 +31,8 @@ #include "Database.h" #include "Global.h" #include "Message.h" +#include "Net.h" +#include "Version.h" Database::Database() { QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE")); @@ -94,7 +96,7 @@ QSqlQuery query; - query.exec(QLatin1String("CREATE TABLE IF NOT EXISTS `servers` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `hostname` TEXT, `port` INTEGER DEFAULT 64738, `username` TEXT, `password` TEXT)")); + query.exec(QLatin1String("CREATE TABLE IF NOT EXISTS `servers` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` TEXT, `hostname` TEXT, `port` INTEGER DEFAULT " MUMTEXT(DEFAULT_MUMBLE_PORT) ", `username` TEXT, `password` TEXT)")); query.exec(QLatin1String("ALTER TABLE `servers` ADD COLUMN `url` TEXT")); query.exec(QLatin1String("CREATE TABLE IF NOT EXISTS `comments` (`who` TEXT, `comment` BLOB, `seen` DATE)")); diff -Nru mumble-1.2.3/src/mumble/Database.h mumble-1.2.3-87-gf7d8711/src/mumble/Database.h --- mumble-1.2.3/src/mumble/Database.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Database.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/DBus.cpp mumble-1.2.3-87-gf7d8711/src/mumble/DBus.cpp --- mumble-1.2.3/src/mumble/DBus.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/DBus.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/DBus.h mumble-1.2.3-87-gf7d8711/src/mumble/DBus.h --- mumble-1.2.3/src/mumble/DBus.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/DBus.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/DirectSound.cpp mumble-1.2.3-87-gf7d8711/src/mumble/DirectSound.cpp --- mumble-1.2.3/src/mumble/DirectSound.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/DirectSound.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/DirectSound.h mumble-1.2.3-87-gf7d8711/src/mumble/DirectSound.h --- mumble-1.2.3/src/mumble/DirectSound.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/DirectSound.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/FileEngine.cpp mumble-1.2.3-87-gf7d8711/src/mumble/FileEngine.cpp --- mumble-1.2.3/src/mumble/FileEngine.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/FileEngine.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/FileEngine.h mumble-1.2.3-87-gf7d8711/src/mumble/FileEngine.h --- mumble-1.2.3/src/mumble/FileEngine.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/FileEngine.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/G15LCDEngine_helper.cpp mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_helper.cpp --- mumble-1.2.3/src/mumble/G15LCDEngine_helper.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_helper.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/G15LCDEngine_helper.h mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_helper.h --- mumble-1.2.3/src/mumble/G15LCDEngine_helper.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_helper.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/G15LCDEngine_lglcd.cpp mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_lglcd.cpp --- mumble-1.2.3/src/mumble/G15LCDEngine_lglcd.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_lglcd.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/G15LCDEngine_lglcd.h mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_lglcd.h --- mumble-1.2.3/src/mumble/G15LCDEngine_lglcd.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_lglcd.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/G15LCDEngine_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_unix.cpp --- mumble-1.2.3/src/mumble/G15LCDEngine_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_unix.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/G15LCDEngine_unix.h mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_unix.h --- mumble-1.2.3/src/mumble/G15LCDEngine_unix.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/G15LCDEngine_unix.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Global.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Global.cpp --- mumble-1.2.3/src/mumble/Global.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Global.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Global.h mumble-1.2.3-87-gf7d8711/src/mumble/Global.h --- mumble-1.2.3/src/mumble/Global.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Global.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -87,7 +87,6 @@ int iMaxBandwidth; int iAudioBandwidth; QDir qdBasePath; - QString qsRegionalHost; QMap qmCodecs; int iCodecAlpha, iCodecBeta; bool bPreferAlpha; diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut.cpp mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut.cpp --- mumble-1.2.3/src/mumble/GlobalShortcut.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut.h mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut.h --- mumble-1.2.3/src/mumble/GlobalShortcut.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut_macx.h mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_macx.h --- mumble-1.2.3/src/mumble/GlobalShortcut_macx.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_macx.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. @@ -33,20 +33,6 @@ #include "GlobalShortcut.h" #include "Global.h" -class GlobalShortcutMacInit : public QObject, public DeferInit { - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutMacInit) - public: - GlobalShortcutMacInit(); - void initialize(); - public slots: - void openPrefsPane(const QString &) const; - protected: - bool accessibilityApiEnabled() const; - void accessibilityDialog() const; -}; - class GlobalShortcutMac : public GlobalShortcutEngine { private: Q_OBJECT @@ -59,10 +45,8 @@ bool handleModButton(CGEventFlags newmask); virtual bool canSuppress(); -#ifndef COMPAT_CLIENT public slots: void forwardEvent(void *evt); -#endif protected: CFRunLoopRef loop; diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut_macx.mm mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_macx.mm --- mumble-1.2.3/src/mumble/GlobalShortcut_macx.mm 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_macx.mm 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. @@ -30,54 +30,13 @@ */ #include "GlobalShortcut_macx.h" -#ifndef COMPAT_CLIENT #include "Overlay.h" -#endif #import #define MOD_OFFSET 0x10000 #define MOUSE_OFFSET 0x20000 -/* - * We use DeferInit in here to pop up a dialog box if their system isn't - * properly set up to receieve global keyboard/mouse events. - */ - -GlobalShortcutMacInit::GlobalShortcutMacInit() : QObject(NULL) { -} - -void GlobalShortcutMacInit::initialize() { - if (!accessibilityApiEnabled()) - accessibilityDialog(); -} - -bool GlobalShortcutMacInit::accessibilityApiEnabled() const { - return QFile::exists("/private/var/db/.AccessibilityAPIEnabled"); -} - -void GlobalShortcutMacInit::openPrefsPane(const QString &) const { - system("open /Applications/System\\ Preferences.app/ /System/Library/PreferencePanes/UniversalAccessPref.prefPane/"); -} - -void GlobalShortcutMacInit::accessibilityDialog() const { - QMessageBox mb("Mumble", - tr("Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.

" - "This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.

" - "Please enable this setting and continue when done."), - QMessageBox::Question, QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton, QMessageBox::NoButton); - - QLabel *label = mb.findChild(QLatin1String("qt_msgbox_label")); - label->setOpenExternalLinks(false); - connect(label, SIGNAL(linkActivated(const QString &)), this, SLOT(openPrefsPane(const QString &))); - - mb.exec(); -} - -static GlobalShortcutMacInit gsminit; - -/* --- */ - GlobalShortcutEngine *GlobalShortcutEngine::platformInit() { return new GlobalShortcutMac(); } @@ -104,13 +63,10 @@ /* Suppressing "the" mouse button is probably not a good idea :-) */ if (keycode == 0) suppress = false; -#ifndef COMPAT_CLIENT forward = !suppress; -#endif break; } -#ifndef COMPAT_CLIENT case kCGEventMouseMoved: case kCGEventLeftMouseDragged: case kCGEventRightMouseDragged: @@ -129,7 +85,6 @@ case kCGEventScrollWheel: forward = true; break; -#endif case kCGEventKeyDown: down = true; @@ -167,7 +122,6 @@ break; } -#ifndef COMPAT_CLIENT if (forward && g.ocIntercept) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSEvent *evt = [[NSEvent eventWithCGEvent:event] retain]; @@ -175,7 +129,6 @@ [pool release]; return NULL; } -#endif return suppress ? NULL : event; } @@ -366,30 +319,30 @@ } QString GlobalShortcutMac::translateMouseButton(const unsigned int keycode) const { - return QString("Mouse Button %1").arg(keycode-MOUSE_OFFSET+1); + return QString::fromLatin1("Mouse Button %1").arg(keycode-MOUSE_OFFSET+1); } QString GlobalShortcutMac::translateModifierKey(const unsigned int keycode) const { unsigned int key = keycode - MOD_OFFSET; switch (key) { case 0: - return QString("Caps Lock"); + return QLatin1String("Caps Lock"); case 1: - return QString("Shift"); + return QLatin1String("Shift"); case 2: - return QString("Control"); + return QLatin1String("Control"); case 3: - return QString("Alt/Option"); + return QLatin1String("Alt/Option"); case 4: - return QString("Command"); + return QLatin1String("Command"); case 5: - return QString("Help"); + return QLatin1String("Help"); case 6: - return QString("Fn"); + return QLatin1String("Fn"); case 7: - return QString("Num Lock"); + return QLatin1String("Num Lock"); } - return QString("Modifier %1").arg(key); + return QString::fromLatin1("Modifier %1").arg(key); } QString GlobalShortcutMac::translateKeyName(const unsigned int keycode) const { @@ -410,23 +363,23 @@ if (len == 1) { switch (unicodeString[0]) { case '\t': - return QString("Tab"); + return QLatin1String("Tab"); case '\r': - return QString("Enter"); + return QLatin1String("Enter"); case '\b': - return QString("Backspace"); + return QLatin1String("Backspace"); case '\e': - return QString("Escape"); + return QLatin1String("Escape"); case ' ': - return QString("Space"); + return QLatin1String("Space"); case 28: - return QString("Left"); + return QLatin1String("Left"); case 29: - return QString("Right"); + return QLatin1String("Right"); case 30: - return QString("Up"); + return QLatin1String("Up"); case 31: - return QString("Down"); + return QLatin1String("Down"); } if (unicodeString[0] < ' ') { @@ -435,7 +388,7 @@ } } - return QString(reinterpret_cast(unicodeString), len).toUpper(); + return QString::fromRawData(reinterpret_cast(unicodeString), len).toUpper(); } QString GlobalShortcutMac::buttonName(const QVariant &v) { @@ -454,7 +407,7 @@ return str; } - return QString("Keycode %1").arg(key); + return QString::fromLatin1("Keycode %1").arg(key); } bool GlobalShortcutMac::canSuppress() { diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_unix.cpp --- mumble-1.2.3/src/mumble/GlobalShortcut_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_unix.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -36,12 +36,9 @@ GlobalShortcutX::GlobalShortcutX() { bRunning=false; - bXInput = false; display = NULL; - iKeyPress = iKeyRelease = iButtonPress = iButtonRelease = -1; - #ifdef Q_OS_LINUX QString dir = QLatin1String("/dev/input"); QFileSystemWatcher *fsw = new QFileSystemWatcher(QStringList(dir), this); @@ -67,81 +64,60 @@ return; } - XExtensionVersion *version = XGetExtensionVersion(display, INAME); - if (version && (version != reinterpret_cast(NoSuchExtension))) { - qWarning("GlobalShortcutX: Using XInput %d.%d", version->major_version, version->minor_version); - bXInput = true; - XFree(version); - initXInput(); - if (qmXDevices.isEmpty()) { - qWarning("GlobalShortcutX: No XInput devices"); - } else { + for (int i=0; i < ScreenCount(display); ++i) + qsRootWindows.insert(RootWindow(display, i)); + + int evt, error; + + if (XQueryExtension(display, "XInputExtension", &iXIopcode, &evt, &error)) { + int major = 2; + int minor = 0; + int rc = XIQueryVersion(display, &major, &minor); + if (rc != BadRequest) { + qWarning("GlobalShortcutX: Using XI2 %d.%d", major, minor); + + queryXIMasterList(); + + XIEventMask evmask; + unsigned char mask[(XI_LASTEVENT + 7)/8]; + + memset(&evmask, 0, sizeof(evmask)); + memset(mask, 0, sizeof(mask)); + + XISetMask(mask, XI_RawButtonPress); + XISetMask(mask, XI_RawButtonRelease); + XISetMask(mask, XI_RawKeyPress); + XISetMask(mask, XI_RawKeyRelease); + XISetMask(mask, XI_HierarchyChanged); + + evmask.deviceid = XIAllDevices; + evmask.mask_len = sizeof(mask); + evmask.mask = mask; + + foreach(Window w, qsRootWindows) + XISelectEvents(display, w, &evmask, 1); + XFlush(display); + connect(new QSocketNotifier(ConnectionNumber(display), QSocketNotifier::Read, this), SIGNAL(activated(int)), this, SLOT(displayReadyRead(int))); + return; } - } else { - qWarning("GlobalShortcutX: No XInput support, falling back to polled input. This wastes a lot of CPU resources, so please enable one of the other methods."); - bRunning=true; - start(QThread::TimeCriticalPriority); } + + qWarning("GlobalShortcutX: No XInput support, falling back to polled input. This wastes a lot of CPU resources, so please enable one of the other methods."); + bRunning=true; + start(QThread::TimeCriticalPriority); } GlobalShortcutX::~GlobalShortcutX() { bRunning = false; wait(); - foreach(XDevice *dev, qmXDevices) - XCloseDevice(display, dev); + if (display) XCloseDisplay(display); } -void GlobalShortcutX::initXInput() { - foreach(XDevice *dev, qmXDevices) - XCloseDevice(display, dev); - - qmXDevices.clear(); - - int numdev; - XDeviceInfo *infolist = XListInputDevices(display, &numdev); - if (! infolist) - return; - for (int i=0;iid); - if (dev) { - bool key = false, button = false; - for (int j=0;jnum_classes;++j) { - XInputClassInfo *ici = dev->classes + j; - key = key || (ici->input_class == KeyClass); - button = button || (ici->input_class == ButtonClass); - } - - XEventClass events[4]; - int nevents = 0; - if (key) { - DeviceKeyPress(dev, iKeyPress, events[nevents]); - ++nevents; - DeviceKeyRelease(dev, iKeyRelease, events[nevents]); - ++nevents; - } - if (button) { - DeviceButtonPress(dev, iButtonPress, events[nevents]); - ++nevents; - DeviceButtonRelease(dev, iButtonRelease, events[nevents]); - ++nevents; - } - - if ((nevents != 0) && ! XSelectExtensionEvent(display, XDefaultRootWindow(display), events, nevents)) { - qWarning("GlobalShortcutX: XInput %ld:%s", info->id, info->name); - qmXDevices.insert(info->id, dev); - } else { - XCloseDevice(display, dev); - } - } - } - XFree(infolist); -} - +// Tight loop polling void GlobalShortcutX::run() { Window root = XDefaultRootWindow(display); Window root_ret, child_ret; @@ -185,6 +161,30 @@ } } +// Find XI2 master devices so they can be ignored. +void GlobalShortcutX::queryXIMasterList() { + XIDeviceInfo *info, *dev; + int ndevices; + + qsMasterDevices.clear(); + + dev = info = XIQueryDevice(display, XIAllDevices, &ndevices); + for (int i=0;iuse) { + case XIMasterPointer: + case XIMasterKeyboard: + qsMasterDevices.insert(dev->deviceid); + break; + default: + break; + } + + ++dev; + } + XIFreeDeviceInfo(info); +} + +// XInput2 event is ready on socketnotifier. void GlobalShortcutX::displayReadyRead(int) { XEvent evt; @@ -193,28 +193,33 @@ while (XPending(display)) { XNextEvent(display, &evt); - if ((evt.type == iButtonPress) || (evt.type == iButtonRelease)) { - XDeviceButtonEvent *be = reinterpret_cast(&evt); - handleButton(be->button + 0x117, evt.type == iButtonPress); - } else if ((evt.type == iKeyPress) || (evt.type == iKeyRelease)) { - XDeviceKeyEvent *ke = reinterpret_cast(&evt); - if ((evt.type == iKeyRelease) && XPending(display)) { - // Is it a silly key repeat? - XEvent nxt; - XPeekEvent(display, &nxt); - if (nxt.type == iKeyPress) { - XDeviceKeyEvent *ne = reinterpret_cast(&nxt); - if (ke->keycode == ne->keycode) { - XNextEvent(display, &nxt); - continue; - } - } - } - handleButton(ke->keycode, evt.type == iKeyPress); + XGenericEventCookie *cookie = & evt.xcookie; + + if ((cookie->type != GenericEvent) || (cookie->extension != iXIopcode) || !XGetEventData(display, cookie)) + continue; + + XIDeviceEvent *xide = reinterpret_cast(cookie->data); + + switch (cookie->evtype) { + case XI_RawKeyPress: + case XI_RawKeyRelease: + if (! qsMasterDevices.contains(xide->deviceid)) + handleButton(xide->detail, cookie->evtype == XI_RawKeyPress); + break; + case XI_RawButtonPress: + case XI_RawButtonRelease: + if (! qsMasterDevices.contains(xide->deviceid)) + handleButton(xide->detail + 0x117, cookie->evtype == XI_RawButtonPress); + break; + case XI_HierarchyChanged: + queryXIMasterList(); } + + XFreeEventData(display, cookie); } } +// One of the raw /dev/input devices has ready input void GlobalShortcutX::inputReadyRead(int) { #ifdef Q_OS_LINUX struct input_event ev; @@ -262,6 +267,7 @@ #define test_bit(bit, array) (array[bit/8] & (1<<(bit%8))) +// The /dev/input directory changed void GlobalShortcutX::directoryChanged(const QString &dir) { #ifdef Q_OS_LINUX QDir d(dir, QLatin1String("event*"), 0, QDir::System); diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut_unix.h mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_unix.h --- mumble-1.2.3/src/mumble/GlobalShortcut_unix.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_unix.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #ifdef Q_OS_LINUX #include @@ -50,20 +50,20 @@ Q_DISABLE_COPY(GlobalShortcutX) public: Display *display; + QSet qsRootWindows; + int iXIopcode; + QSet qsMasterDevices; + volatile bool bRunning; - bool bXInput; QSet qsKeyboards; QMap qmInputDevices; - QMap qmXDevices; GlobalShortcutX(); ~GlobalShortcutX(); void run(); QString buttonName(const QVariant &); - int iKeyPress, iKeyRelease, iButtonPress, iButtonRelease; - - void initXInput(); + void queryXIMasterList(); public slots: void displayReadyRead(int); void inputReadyRead(int); diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_win.cpp --- mumble-1.2.3/src/mumble/GlobalShortcut_win.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_win.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -30,9 +30,7 @@ #include "GlobalShortcut_win.h" #include "MainWindow.h" -#ifndef COMPAT_CLIENT #include "Overlay.h" -#endif #include "Global.h" #include "../../overlay/HardHook.h" @@ -48,8 +46,6 @@ return val; } -#ifndef COMPAT_CLIENT - static HWND WINAPI HookWindowFromPoint(POINT p); static BOOL WINAPI HookSetForegroundWindow(HWND hwnd); @@ -84,8 +80,6 @@ return ret; } -#endif - GlobalShortcutEngine *GlobalShortcutEngine::platformInit() { return new GlobalShortcutWin(); } @@ -127,7 +121,6 @@ hhKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, HookKeyboard, hSelf, 0); hhMouse = SetWindowsHookEx(WH_MOUSE_LL, HookMouse, hSelf, 0); - #ifdef QT_NO_DEBUG #endif @@ -240,7 +233,6 @@ ql << QVariant(QUuid(GUID_SysKeyboard)); bool suppress = gsw->handleButton(ql, !(key->flags & LLKHF_UP)); -#ifndef COMPAT_CLIENT if (! suppress && g.ocIntercept) { HWND hwnd = g.ocIntercept->qgv.winId(); @@ -257,7 +249,6 @@ suppress = true; } -#endif if (suppress) return 1; @@ -312,7 +303,6 @@ break; } -#ifndef COMPAT_CLIENT if (g.ocIntercept) { POINT p; GetCursorPos(&p); @@ -359,7 +349,6 @@ suppress = true; } -#endif bool down = false; unsigned int btn = 0; diff -Nru mumble-1.2.3/src/mumble/GlobalShortcut_win.h mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_win.h --- mumble-1.2.3/src/mumble/GlobalShortcut_win.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/GlobalShortcut_win.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/LCD.cpp mumble-1.2.3-87-gf7d8711/src/mumble/LCD.cpp --- mumble-1.2.3/src/mumble/LCD.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/LCD.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/LCD.h mumble-1.2.3-87-gf7d8711/src/mumble/LCD.h --- mumble-1.2.3/src/mumble/LCD.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/LCD.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/licenses.h mumble-1.2.3-87-gf7d8711/src/mumble/licenses.h --- mumble-1.2.3/src/mumble/licenses.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/licenses.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,12 +1,12 @@ -static const char *licenseMumble = "Copyright (C) 2005-2010, Thorvald Natvig \n" +static const char *licenseMumble = "Copyright (C) 2005-2011, Thorvald Natvig \n" "Copyright (C) 2007, Stefan Gehn \n" "Copyright (C) 2007, Sebastian Schlingmann \n" - "Copyright (C) 2008-2010, Mikkel Krautz \n" + "Copyright (C) 2008-2011, Mikkel Krautz \n" "Copyright (C) 2008, Andreas Messer \n" "Copyright (C) 2007, Trenton Schulz\n" - "Copyright (C) 2008-2010, Stefan Hacker \n" - "Copyright (C) 2008-2010, Snares \n" - "Copyright (C) 2009-2010, Benjamin Jemlich \n" + "Copyright (C) 2008-2011, Stefan Hacker \n" + "Copyright (C) 2008-2011, Snares \n" + "Copyright (C) 2009-2011, Benjamin Jemlich \n" "\n" "All rights reserved.\n" "\n" diff -Nru mumble-1.2.3/src/mumble/Log.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Log.cpp --- mumble-1.2.3/src/mumble/Log.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Log.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -110,9 +110,11 @@ i->setCheckState(ColStaticSound, (ml & Settings::LogSoundfile) ? Qt::Checked : Qt::Unchecked); i->setText(ColStaticSoundPath, r.qmMessageSounds.value(mt)); } + qsbMaxBlocks->setValue(r.iMaxLogBlocks); loadSlider(qsVolume, r.iTTSVolume); qsbThreshold->setValue(r.iTTSThreshold); + qcbReadBackOwn->setChecked(r.bTTSMessageReadBack); qcbWhisperFriends->setChecked(r.bWhisperFriends); } @@ -133,14 +135,17 @@ s.qmMessages[mt] = v; s.qmMessageSounds[mt] = i->text(ColStaticSoundPath); } + s.iMaxLogBlocks = qsbMaxBlocks->value(); s.iTTSVolume=qsVolume->value(); s.iTTSThreshold=qsbThreshold->value(); + s.bTTSMessageReadBack = qcbReadBackOwn->isChecked(); s.bWhisperFriends = qcbWhisperFriends->isChecked(); } void LogConfig::accept() const { g.l->tts->setVolume(s.iTTSVolume); + g.mw->qteLog->document()->setMaximumBlockCount(s.iMaxLogBlocks); } bool LogConfig::expert(bool) { @@ -199,18 +204,17 @@ QStringList qslAllEvents; for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { Log::MsgType t = static_cast(i); - qslAllEvents << QString("\"%1\"").arg(g.l->msgName(t)); + qslAllEvents << QString::fromLatin1("\"%1\"").arg(g.l->msgName(t)); } - QString qsGrowlEvents = QString("{%1}").arg(qslAllEvents.join(",")); - QString qsScript = QString( + QString qsScript = QString::fromLatin1( "tell application \"GrowlHelperApp\"\n" - " set the allNotificationsList to %1\n" - " set the enabledNotificationsList to %1\n" + " set the allNotificationsList to {%1}\n" + " set the enabledNotificationsList to {%1}\n" " register as application \"Mumble\"" " all notifications allNotificationsList" " default notifications enabledNotificationsList" " icon of application \"Mumble\"\n" - "end tell\n").arg(qsGrowlEvents); + "end tell\n").arg(qslAllEvents.join(QLatin1String(","))); if (growl_available()) qt_mac_execute_apple_script(qsScript, NULL); #endif @@ -260,6 +264,11 @@ qslAllowedSchemeNames << QLatin1String("spotify"); qslAllowedSchemeNames << QLatin1String("steam"); qslAllowedSchemeNames << QLatin1String("irc"); + qslAllowedSchemeNames << QLatin1String("gg"); // Gadu-Gadu http://gg.pl - Polish instant massager + qslAllowedSchemeNames << QLatin1String("mailto"); + qslAllowedSchemeNames << QLatin1String("xmpp"); + qslAllowedSchemeNames << QLatin1String("skype"); + return qslAllowedSchemeNames; } @@ -425,7 +434,7 @@ } } -void Log::log(MsgType mt, const QString &console, const QString &terse, bool console_only) { +void Log::log(MsgType mt, const QString &console, const QString &terse, bool ownMessage) { QDateTime dt = QDateTime::currentDateTime(); int ignore = qmIgnore.value(mt); @@ -441,7 +450,12 @@ // Message output on console if ((flags & Settings::LogConsole)) { - QTextCursor tc=g.mw->qteLog->textCursor(); + QTextCursor tc = g.mw->qteLog->textCursor(); + + QScrollBar *vscroll = g.mw->qteLog->verticalScrollBar(); + const int oldscrollvalue = vscroll->value(); + const bool scroll = oldscrollvalue == vscroll->maximum(); + tc.movePosition(QTextCursor::End); if (qdDate != dt.date()) { @@ -464,10 +478,14 @@ validHtml(console, true, &tc); tc.movePosition(QTextCursor::End); g.mw->qteLog->setTextCursor(tc); - g.mw->qteLog->ensureCursorVisible(); + + if (scroll) + vscroll->setValue(vscroll->maximum()); + else + vscroll->setValue(oldscrollvalue); } - if (console_only) + if (!g.s.bTTSMessageReadBack && ownMessage) return; // Message notification with balloon tooltips @@ -545,7 +563,7 @@ } } #ifdef Q_OS_MAC - QString qsScript = QString( + QString qsScript = QString::fromLatin1( "tell application \"GrowlHelperApp\"\n" " notify with name \"%1\" title \"%1\" description \"%2\" application name \"Mumble\"\n" "end tell\n").arg(msgName(mt)).arg(plain); diff -Nru mumble-1.2.3/src/mumble/Log.h mumble-1.2.3-87-gf7d8711/src/mumble/Log.h --- mumble-1.2.3/src/mumble/Log.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Log.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -93,7 +93,7 @@ static QString formatClientUser(ClientUser *cu, LogColorType t); static QString formatChannel(::Channel *c); public slots: - void log(MsgType t, const QString &console, const QString &terse=QString(), bool console_only = false); + void log(MsgType t, const QString &console, const QString &terse=QString(), bool ownMessage = false); }; class ValidDocument : public QTextDocument { diff -Nru mumble-1.2.3/src/mumble/Log.ui mumble-1.2.3-87-gf7d8711/src/mumble/Log.ui --- mumble-1.2.3/src/mumble/Log.ui 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Log.ui 2011-04-02 22:20:48.000000000 +0000 @@ -6,7 +6,7 @@ 0 0 - 402 + 446 334 @@ -79,7 +79,7 @@ - + Volume of Text-To-Speech Engine @@ -139,18 +139,15 @@ - - - - Qt::Horizontal + + + + If enabled text messages you send will be read back to you with TTS - - - 8 - 16 - + + Read back own messages - + @@ -174,6 +171,54 @@ + + + + Chat Log + + + + + + Maximum chat length + + + + + + + QAbstractSpinBox::PlusMinus + + + Unlimited + + + Lines + + + 1000000 + + + 100 + + + + + + + Qt::Horizontal + + + + 8 + 16 + + + + + + + diff -Nru mumble-1.2.3/src/mumble/LookConfig.cpp mumble-1.2.3-87-gf7d8711/src/mumble/LookConfig.cpp --- mumble-1.2.3/src/mumble/LookConfig.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/LookConfig.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/LookConfig.h mumble-1.2.3-87-gf7d8711/src/mumble/LookConfig.h --- mumble-1.2.3/src/mumble/LookConfig.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/LookConfig.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/main.cpp mumble-1.2.3-87-gf7d8711/src/mumble/main.cpp --- mumble-1.2.3/src/mumble/main.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/main.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -129,6 +129,10 @@ #if defined(Q_OS_WIN) SetDllDirectory(L""); +#else +#ifndef Q_OS_MAC + setenv("AVAHI_COMPAT_NOWARN", "1", 1); +#endif #endif // Initialize application object. @@ -203,31 +207,7 @@ #endif MumbleVersion::get(&major, &minor, &patch, version); - if ((major == 1) && (minor == 1)) { - bool sent = false; -#ifdef USE_DBUS - QDBusInterface qdbi(QLatin1String("net.sourceforge.mumble.mumble11x"), QLatin1String("/"), QLatin1String("net.sourceforge.mumble.Mumble")); - - QDBusMessage reply=qdbi.call(QLatin1String("openUrl"), QLatin1String(url.toEncoded())); - sent = (reply.type() == QDBusMessage::ReplyMessage); -#else - sent = SocketRPC::send(QLatin1String("Mumble11x"), QLatin1String("url"), param); -#endif - if (sent) { - return 0; - } else { - QString executable = a.applicationFilePath(); - int idx = executable.lastIndexOf(QLatin1String("mumble")); - if (idx >= 0) { - QStringList args; - args << url.toString(); - - executable.replace(idx, 6, QLatin1String("mumble11x")); - if (QProcess::startDetached(executable, args)) - return 0; - } - } - } else { + if ((major == 1) && (minor == 2)) { bool sent = false; #ifdef USE_DBUS QDBusInterface qdbi(QLatin1String("net.sourceforge.mumble.mumble"), QLatin1String("/"), QLatin1String("net.sourceforge.mumble.Mumble")); @@ -301,7 +281,7 @@ #ifdef Q_OS_MAC if (os_lang) { qWarning("Using Mac OS X system langauge as locale name"); - qsSystemLocale = QString(os_lang); + qsSystemLocale = QLatin1String(os_lang); } #endif @@ -323,8 +303,10 @@ else if (qttranslator.load(QLatin1String("translation:qt_") + locale)) a.installTranslator(&qttranslator); - g.qsRegionalHost = qsSystemLocale; - g.qsRegionalHost = g.qsRegionalHost.remove(QRegExp(QLatin1String("^.+_"))).toLower() + QLatin1String(".mumble.info"); + if (g.s.qsRegionalHost.isEmpty()) { + g.s.qsRegionalHost = qsSystemLocale; + g.s.qsRegionalHost = g.s.qsRegionalHost.remove(QRegExp(QLatin1String("^.+_"))).toLower() + QLatin1String(".mumble.info"); + } // Initialize proxy settings NetworkConfig::SetupProxy(); @@ -425,16 +407,14 @@ g.l->log(Log::Warning, CertWizard::tr("Certificate Expiry: Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on.")); #ifdef QT_NO_DEBUG -#ifdef RELEASE_BUILD +#ifndef SNAPSHOT_BUILD if (g.s.bUpdateCheck) -#endif new VersionCheck(true, g.mw); - -#ifdef SNAPSHOT_BUILD +#else new VersionCheck(false, g.mw, true); #endif #else - g.mw->msgBox(g.mw->tr("Skipping version check in debug mode.")); + g.mw->msgBox(MainWindow::tr("Skipping version check in debug mode.")); #endif if (g.s.bPluginOverlayCheck) { g.p->checkUpdates(); diff -Nru mumble-1.2.3/src/mumble/MainWindow.cpp mumble-1.2.3-87-gf7d8711/src/mumble/MainWindow.cpp --- mumble-1.2.3/src/mumble/MainWindow.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/MainWindow.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -49,6 +49,7 @@ #include "AudioStats.h" #include "Plugins.h" #include "Log.h" +#include "Net.h" #include "Overlay.h" #include "Global.h" #include "Database.h" @@ -199,6 +200,7 @@ connect(qmUser, SIGNAL(aboutToShow()), this, SLOT(qmUser_aboutToShow())); connect(qmChannel, SIGNAL(aboutToShow()), this, SLOT(qmChannel_aboutToShow())); + connect(qteChat, SIGNAL(entered(QString)), this, SLOT(sendChatbarMessage(QString))); // Fix context of all actions. QList qla = findChildren(); @@ -272,6 +274,9 @@ gsWhisper = new GlobalShortcut(this, idx++, tr("Whisper/Shout"), false, QVariant::fromValue(ShortcutTarget())); gsWhisper->setObjectName(QLatin1String("gsWhisper")); + gsMetaLink=new GlobalShortcut(this, idx++, tr("Link Channel", "Global Shortcut")); + gsMetaLink->setObjectName(QLatin1String("MetaLink")); + #ifndef Q_OS_MAC qstiIcon->show(); #endif @@ -295,6 +300,7 @@ LogDocument *ld = new LogDocument(qteLog); qteLog->setDocument(ld); + qteLog->document()->setMaximumBlockCount(g.s.iMaxLogBlocks); qteLog->document()->setDefaultStyleSheet(qApp->styleSheet()); pmModel = new UserModel(qtvUsers); @@ -669,26 +675,28 @@ } int major, minor, patch; + int thismajor, thisminor, thispatch; + MumbleVersion::get(&thismajor, &thisminor, &thispatch); + + // With no version parameter given assume the link refers to our version major = 1; - minor = 1; + minor = 2; patch = 0; QString version = url.queryItemValue(QLatin1String("version")); MumbleVersion::get(&major, &minor, &patch, version); -#ifdef Q_OS_MAC - if ((major == 1) && (minor == 1)) { - launchCompatibilityClient(url); + if ((major < 1) || // No pre 1.2.0 + (major == 1 && minor <= 1) || + (major > thismajor) || // No future version + (major == thismajor && minor > thisminor) || + (major == thismajor && minor == thisminor && patch > thispatch)) { + g.l->log(Log::Warning, tr("This version of Mumble can't handle URLs for Mumble version %1.%2.%3").arg(major).arg(minor).arg(patch)); return; - } else -#endif - if ((major != 1) || (minor != 2) || (patch > 3)) { - g.l->log(Log::Warning, tr("This version of Mumble can't handle URLs for Mumble version %1.%2.%3").arg(major).arg(minor).arg(patch)); - return; - } + } QString host = url.host(); - unsigned short port = static_cast(url.port(64738)); + unsigned short port = static_cast(url.port(DEFAULT_MUMBLE_PORT)); QString user = url.userName(); QString pw = url.password(); qsDesiredChannel = url.path(); @@ -1466,15 +1474,12 @@ this->close(); } -void MainWindow::sendChatbarMessage() { - if (qteChat->toPlainText().isEmpty() || g.uiSession == 0) return; // Check if text & connection is available +void MainWindow::sendChatbarMessage(QString qsText) { + if (g.uiSession == 0) return; // Check if text & connection is available ClientUser *p = pmModel->getUser(qtvUsers->currentIndex()); Channel *c = pmModel->getChannel(qtvUsers->currentIndex()); - QString qsText; - - qsText = qteChat->toPlainText(); qsText = Qt::escape(qsText); qsText = TextMessage::autoFormat(qsText); @@ -1554,6 +1559,7 @@ qmChannel->addAction(qaChannelUnlinkAll); qmChannel->addSeparator(); qmChannel->addAction(qaChannelSendMessage); + qmChannel->addAction(qaChannelCopyURL); #ifndef Q_OS_MAC if (g.s.bMinimalView) { @@ -1725,6 +1731,26 @@ delete texm; } +void MainWindow::on_qaChannelCopyURL_triggered() { + Channel *c = getContextMenuChannel(); + QString host, uname, pw, channel; + unsigned short port; + + if (!c) + return; + + g.sh->getConnectionInfo(host, port, uname, pw); + + // walk back up the channel list to build the URL. + while (c->cParent != NULL) { + channel.prepend(c->qsName); + channel.prepend(QLatin1String("/")); + c = c->cParent; + } + + QApplication::clipboard()->setMimeData(ServerItem::toMimeData(c->qsName, host, port, channel), QClipboard::Clipboard); +} + void MainWindow::updateMenuPermissions() { ClientUser *cu = NULL; Channel *c = NULL; @@ -2179,6 +2205,21 @@ return; } } + + if (gsMetaLink->active()) { + if (! st.bUsers) { + Channel *c = ClientUser::get(g.uiSession)->cChannel; + Channel *l = mapChannel(st.iChannel); + if (l) { + if (c->qsPermLinks.contains(l)) { + g.sh->removeChannelLink(c->iId, l->iId); + } else { + g.sh->addChannelLink(c->iId, l->iId); + } + } + return; + } + } qsCurrentTargets.insert(st); updateTarget(); @@ -2369,34 +2410,7 @@ } } } else if (err == QAbstractSocket::SslHandshakeFailedError) { - if (QMessageBox::warning(this, tr("SSL Version mismatch"), tr("This server is using an older encryption standard. It might be an older 1.1 based Mumble server.
Would you like to launch the compatibility client to connect to it?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { - - QString host, user, pw; - unsigned short port; - QUrl url; - - g.sh->getConnectionInfo(host, port, user, pw); - url.setScheme(QLatin1String("mumble")); - url.setHost(host); - url.setPort(port); - url.setUserName(user); - url.addQueryItem(QLatin1String("version"), QLatin1String("1.1.8")); - -#ifdef USE_DBUS - QDBusInterface qdbi(QLatin1String("net.sourceforge.mumble.mumble11x"), QLatin1String("/"), QLatin1String("net.sourceforge.mumble.Mumble")); - - QDBusMessage reply=qdbi.call(QLatin1String("openUrl"), QLatin1String(url.toEncoded())); - if (reply.type() == QDBusMessage::ReplyMessage) { - this->close(); - return; - } else -#endif - { - if (launchCompatibilityClient(url)) - return; - } - QMessageBox::critical(this, tr("Failed to launch compatibility client"), tr("The compatibility client could not be found, or failed to start.
Note that the compatibility client is an optional component for most installations, and might not be installed."), QMessageBox::Ok, QMessageBox::Ok); - } + QMessageBox::warning(this, tr("SSL Version mismatch"), tr("This server is using an older encryption standard, and is no longer supported by modern versions of Mumble."), QMessageBox::Ok); } else { bool ok = false; bool matched = false; @@ -2664,59 +2678,6 @@ return retval; } -bool MainWindow::launchCompatibilityClient(const QUrl &url) { - Audio::stop(); - -#ifdef Q_OS_MAC - FSRef fref; - OSStatus err; - - err = LSFindApplicationForInfo(kLSUnknownCreator, CFSTR("net.sourceforge.mumble.Mumble11x"), CFSTR("Mumble11x.app"), &fref, NULL); - if (err == noErr) { - CFMutableArrayRef arguments = CFArrayCreateMutable(kCFAllocatorDefault, 2, &kCFTypeArrayCallBacks); - if (arguments) { - CFArrayAppendValue(arguments, CFSTR("Mumble11x")); - QString qsUrlString = url.toString(); - CFStringRef urlString = CFStringCreateWithCharacters(kCFAllocatorDefault, reinterpret_cast(qsUrlString.unicode()), qsUrlString.length()); - CFArrayAppendValue(arguments, urlString); - CFRelease(urlString); - } - - LSApplicationParameters parm; - memset(&parm, 0, sizeof(LSApplicationParameters)); - parm.flags = kLSLaunchDefaults; - parm.application = &fref; - parm.argv = arguments; - err = LSOpenApplication(&parm, NULL); - - CFRelease(arguments); - - if (err == noErr) { - this->close(); - return true; - } - } -#else - QString executable = QApplication::instance()->applicationFilePath(); - int idx = executable.lastIndexOf(QLatin1String("mumble")); - if (idx >= 0) { - QStringList args; - args << url.toString(); - - executable.replace(idx, 6, QLatin1String("mumble11x")); - if (QProcess::startDetached(executable, args)) { - g.mw->bSuppressAskOnQuit = true; - qApp->closeAllWindows(); - } - return true; - } -#endif - - Audio::start(); - - return false; -} - void MainWindow::destroyUserInformation() { UserInformation *ui = static_cast(sender()); QMap::iterator i; diff -Nru mumble-1.2.3/src/mumble/MainWindow.h mumble-1.2.3-87-gf7d8711/src/mumble/MainWindow.h --- mumble-1.2.3/src/mumble/MainWindow.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/MainWindow.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -84,7 +84,7 @@ GlobalShortcut *gsPushTalk, *gsResetAudio, *gsMuteSelf, *gsDeafSelf; GlobalShortcut *gsUnlink, *gsPushMute, *gsMetaChannel, *gsToggleOverlay; - GlobalShortcut *gsMinimal, *gsVolumeUp, *gsVolumeDown, *gsWhisper; + GlobalShortcut *gsMinimal, *gsVolumeUp, *gsVolumeDown, *gsWhisper, *gsMetaLink; DockTitleBar *dtbLogDockTitle, *dtbChatDockTitle; ACLEditor *aclEdit; @@ -114,7 +114,6 @@ void setOnTop(bool top); void updateTrayIcon(); QPair openImageFile(); - void sendChatbarMessage(); static const QString defaultStyleSheet; void openTextMessageDialog(ClientUser *p); @@ -144,7 +143,6 @@ void customEvent(QEvent *evt); void findDesiredChannel(); void setupView(bool toggle_minimize = true); - bool launchCompatibilityClient(const QUrl &url); virtual void closeEvent(QCloseEvent *e); virtual void hideEvent(QHideEvent *e); @@ -190,6 +188,7 @@ void on_qaChannelUnlink_triggered(); void on_qaChannelUnlinkAll_triggered(); void on_qaChannelSendMessage_triggered(); + void on_qaChannelCopyURL_triggered(); void on_qaAudioReset_triggered(); void on_qaAudioMute_triggered(); void on_qaAudioDeaf_triggered(); @@ -238,6 +237,7 @@ void talkingChanged(); void destroyUserInformation(); void trayAboutToShow(); + void sendChatbarMessage(QString msg); public: MainWindow(QWidget *parent); ~MainWindow(); diff -Nru mumble-1.2.3/src/mumble/MainWindow.ui mumble-1.2.3-87-gf7d8711/src/mumble/MainWindow.ui --- mumble-1.2.3/src/mumble/MainWindow.ui 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/MainWindow.ui 2011-04-02 22:20:48.000000000 +0000 @@ -607,6 +607,17 @@ Sends a text message to all users in a channel. + + + &Copy URL + + + Copies a link to this channel to the clipboard. + + + Copies a link to this channel to the clipboard. + + true diff -Nru mumble-1.2.3/src/mumble/Messages.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Messages.cpp --- mumble-1.2.3/src/mumble/Messages.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Messages.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -746,3 +746,21 @@ void MainWindow::msgRequestBlob(const MumbleProto::RequestBlob &) { } + +void MainWindow::msgSuggestConfig(const MumbleProto::SuggestConfig &msg) { + if (msg.has_version() && (msg.version() > MumbleVersion::getRaw())) { + g.l->log(Log::Warning, tr("The server requests minimum client version %1").arg(MumbleVersion::toString(msg.version()))); + } + if (msg.has_positional() && (msg.positional() != g.s.doPositionalAudio())) { + if (msg.positional()) + g.l->log(Log::Warning, tr("The server requests positional audio be enabled.")); + else + g.l->log(Log::Warning, tr("The server requests positional audio be disabled.")); + } + if (msg.has_push_to_talk() && (msg.push_to_talk() != (g.s.atTransmit == Settings::PushToTalk))) { + if (msg.push_to_talk()) + g.l->log(Log::Warning, tr("The server requests Push-to-Talk be enabled.")); + else + g.l->log(Log::Warning, tr("The server requests Push-to-Talk be disabled.")); + } +} diff -Nru mumble-1.2.3/src/mumble/mumble_cs.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_cs.ts --- mumble-1.2.3/src/mumble/mumble_cs.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_cs.ts 2011-04-02 22:20:48.000000000 +0000 @@ -10,7 +10,7 @@ Active ACLs - Aktivní pravidla ACL + Aktivní ACL @@ -55,7 +55,7 @@ &Down - &Ðolů + &Dolů @@ -70,12 +70,12 @@ Applies to sub-channels - Použít pro kanály umístěné v tomto kanále + Použít pro podkanály User ID - Uživatelovo ID + ID Uživatele @@ -153,27 +153,27 @@ List of entries - Seznam položek + Seznam záznamů Inherit ACL of parent? - Zdědit ACL mateřského kanálu? + Zdědit ACL nadřazeného? This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Nastavuje, jestli ACL nadřazeného kanálu bude aplikováno na tento objekt. Zděděny mohou být pouze položky označené v nadřazeném kanálu jako "aplikovat na podkanály". + Toto nastaví, jestli ACL, v řetězu nadřazených kanálů, budou aplikovány na tento objekt. Zděděny mohou být pouze záznamy označené v nadřazeném kanálu jako "použit na podkanály". Add new entry - Přidat záznam + Přidat nový záznam This adds a new entry, initially set with no permissions and applying to all. - + Toto přidá nový záznam, ze záčátku nastaven bez jakýchkoli oprávnění a použitý na vše. @@ -193,42 +193,42 @@ Name - Jméno + Jméno Enter the channel name here. - + Zde zdejte jméno kanálu. Description - + Popis Password - + Heslo Enter the channel password here. - + Zde zadejte heslo kanálu. Check to create a temporary channel. - + Zaškrtněte pro vytvoření dočasného kanálu. Temporary - + Dočasný Channel positioning facility value - + Hodnota prostředku umístění kanálu @@ -236,63 +236,65 @@ This value enables you to change the way Mumble arranges the channels in the tree. A channel with a higher <i>Position</i> value will always be placed below one with a lower value and the other way around. If the <i>Position</i> value of two channels is equal they will get sorted alphabetically by their name. <b>Position</b><br/> This value enables you to change the way mumble arranges the channels in the tree. A channel with a higher <i>Position</i> value will always be placed below one with a lower value and the other way around. If the <i>Position</i> value of two channels is equal they will get sorted alphabetically by their name. - + <b>Umístění</b><br/> +Tato hodnota Vám umožní změnit způsob, jakým Mumble uspořádá kanály ve stromu. Kanál s vyšší hodnotou <i>Umístění</i> bude vždy umístěn pod kanálem s nižší hodnotou a naopak. Pokud hodnota <i>Umístění</i> dvou kanálů je shodná, budou seřazeny abecedně podle jejích jména. Position - Umístění + Umístění Add new group - + Přidat novou skupinu <b>Add</b><br/> Add a new group. - + <b>Přidat</b><br/> +Přidat novou skupinu. Inherited members - + Zdědění členové Contains the list of members added to the group by this channel. - + Obsahuje seznam členů přidaných do skupiny tímto kanálem. Contains a list of members whose group membership will not be inherited from the parent channel. - + Obsahuje seznam členů, jejichž členství ve skupině nebude zděděno z nadřazeného kanálu. Contains the list of members inherited by other channels. - + Obsahuje seznam členů zděděných z jiných kanálů. Type in the name of a user you wish to add to the group and click Add. - + Zadejte jméno uživatele, kterého chcete do skupiny přidat a klikněte na Přidat. Type in the name of a user you wish to remove from the group and click Add. - + Zadejte jméno uživatele, kterého chcete ze skupiny odstranit a klikněte na Přidat. Exclude - + Vyřadit Excluded members - + Vyřazení členové @@ -313,17 +315,17 @@ Entry should apply to this channel. Entry should apply to this channel - Použít pro tento kanál + Záznam by měl být použit pro tento kanál. This makes the entry apply to this channel. - Tímto se daná položka stane platnou pro tento kanál. + Tímto se daná položka použije pro tento kanál. Entry should apply to sub-channels. - Použít v podkanálech. + Záznam by měl být použit v podkanálech. @@ -333,17 +335,17 @@ Group this entry applies to - + Skupina, na kterou je záznam použit User this entry applies to - + Uživatel, na kterého je záznam použit This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - + Toto kontroluje, na kterého uživatele se záznam použije. Jednoduše napište jméno uživatele a stiskněte enter k prohledání serveru pro shodu. @@ -353,33 +355,33 @@ Deny %1 - Odepřít %1 + Zakázat %1 Mumble - Add channel - + Mumble - Přidat kanál Failed: Invalid channel - + Selhalo: Neplatný kanál Mumble - Edit %1 - + Mumble - Upravit %1 This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Tímto se povolí privilegium %1. Pokud je privilegium zároveň přiděleno i odepřeno, považuje se za odepřené.<br />%2 + Toto uděli privilegium %1. Pokud je privilegium zároveň povoleno i zakázáno, považuje se za odepřené.<br />%2 This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Odebere privilegium %1. Pokud je privilegium zároveň přiděleno i odepřeno, považuje se za odepřené.<br />%2 + Toto odebere privilegium %1. Pokud je privilegium zároveň povoleno i zakázáno, považuje se za odepřené.<br />%2 @@ -402,7 +404,7 @@ Inherit group members from parent - Zdědit členy skupiny od rodiče + Zdědit členy skupiny od nadřazené This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. @@ -411,7 +413,7 @@ Make group inheritable to sub-channels - Učiní skupiny děditelnými pro podkanály + Učiní skupinu děditelnou pro podkanály This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. @@ -420,7 +422,7 @@ Group was inherited from parent channel - Skupina byla zděděna od mateřského kanálu + Skupina byla zděděna od nadřazeného kanálu @@ -443,82 +445,87 @@ Dialog - + Dialogové Okno &Properties - + &Vlastnosti <b>Name</b><br />Enter the channel name in this field. The name has to comply with the restriction imposed by the server you are connected to. - + <b>Jméno</b><br />Zadejte do pole jméno kanálu. Jméno musí souhlasit s omezeními předepsaná serverem, ke kterému jste připojeni. <b>Temporary</b><br /> When checked the channel created will be marked as temporary. This means when the last player leaves it the channel will be automatically deleted by the server. - + <b>Dočasný</b><br /> +Když je zaškrtnuto, kanál, který je vytvořen bude označen jako dočasný. To znamená, že když poslední hráč z kanálu odejde, bude automaticky ze serveru smazán. <b>Group</b><br /> These are all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - + <b>Skupina</b><br /> +Toto jsou všechny skupiny v současnosti definované pro kanál. Pro vytvoření nové skupiny, jednoduše zadejte jméno a stiskněte enter. <b>Remove</b><br />This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - + <b>Odstranit</b><br />Toto odstraní právě zvolenou skupinu. Pokud skupina byla zděděna, nebude ze seznamu odstraněna, ale všechny místní informace o ní budou vyčištěny. <b>Inherit</b><br />This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - + <b>Zdědit</b><br />Toto zdědí všechny členy ve skupině z nadřazené, pokud je skupina v nadřazeném kanálu označena jako <i>Nezděditelná</i>. <b>Inheritable</b><br />This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - + <b>Děditelná</b><br />Toto dělá skupinu děditelnou do podkanálů. Pokud je skupina neděditelná, podkanály stále můžou vytvořit nové skupiny se stejným jménem. <b>Inherited</b><br />This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - + <b>Zděděno</b><br />Toto označuje, že skupina byla zděděna z nadřazeného kanálu. Tuto možnost nemůžete upravit, je zde pouze pro informaci. <b>Members</b><br /> This list contains all members that were added to the group by the current channel. Be aware that this does not include members inherited by higher levels of the channel tree. These can be found in the <i>Inherited members</i> list. To prevent this list to be inherited by lower level channels uncheck <i>Inheritable</i> or manually add the members to the <i>Excluded members</i> list. - + <b>Členové</b><br /> +Tento seznam obsahuje všechny členy, kteří byli do skupiny přidáni současným kanálem. Nezapomeňte, že toto nezahrnuje členy zděděné vyššími úrovněmi stromu kanálů. Ti můžou být nalezeni v seznamu <i>Zdědění členové</i>. Aby se zabránilo zdědění tohoto seznamu kanály nižší úrovně, odškrtněte <i>Děditelné</i> nebo ručně členy přidejte do seznamu <i>Vyřazení členové</i>. <b>Excluded members</b><br /> Contains a list of members whose group membership will not be inherited from the parent channel. - + <b>Vyřazení členové</b><br /> +Obsahuje seznam členů, jejichž členství ve skupině nebude zděděno z nadřazeného kanálu. <b>Inherited members</b><br /> Contains the list of members inherited by the current channel. Uncheck <i>Inherit</i> to prevent inheritance from higher level channels. - + <b>Zdědění členové</b><br /> +Obsahuje seznam členů, zděděných současným kanálem. Odškrtněte <i>Zdědit</i>, abyste zabránili dědění z kanálů vyšší úrovně. This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with '!', its membership is negated, and if it starts with '~', it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in.<br />If a group name starts with '#', it is interpreted as an access token. Users must have entered whatever follows the '#' in their list of access tokens to match. This can be used for very simple password access to channels for non-authenticated users.<br />If a group name starts with '$', it will only match users whose certificate hash matches what follows the '$'.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for '<i>sub,0,0,0</i>').<br /><b>out</b> - Users outside the channel will match (convenience for '<i>!sub,0,0,0</i>').<br />Note that an entry applies to either a user or a group, not both. - + Toto kontroluje, na kterou skupinu uživatelů se tento záznam použije.<br />Nezapomeňte, že skupina je vyhodnocena v kontextu kanálu, v kterém je záznam použit. Například, výchozí ACL v Kořenovém kanálu dává oprávnění k <i>Zápisu</i> skupině <i>admin</i>. Tento záznam, pokud je zděděn kanálem, dá uživateli oprávnění k zápisu, pokud patři do skupiny <i>admin</i> v onom kanálu, i když do skupiny <i>admin</i> nepatří v kanále kde ACL vznikl.<br />Pokud jméno skupiny začíná '!', její členství je znegováno, a pokud začíná '~', je vyhodnoceno v kanále, kde byl ACL definováno, spíše než kde je ACL aktivní.<br />Pokud jméno skupiny začíná '#',je vyloženo jako znak přístupu. Uživatelé musí zadat cokoliv, co následuje po '#' v jejich seznamu znaků přístupu ke shodě. Toto může být použito pro velmi jednoduchý přístup heslem do kanálů pro neověřené uživatele.<br >Pokud jméno skupiny začíná '$', skupina se bude shodovat pouze s uživateli, jejichž haš certifikátu se shoduje s tím co následuje po '$'.<br />Několik speciálních přednastavených skupin je:<br /><b>all</b>- Shoda se všemi.<br /><b>auth</b> - Všichni ověření uživatelé se budou shodovat.<br /><b>sub,a,b,c</b> - Uživatel současně v podkanále minimum <i>a</i> společných nadřazených, a mezi <i>b</i> a <i>c</i> kanály níže v řetězci. Navštivte stránku pro rozsáhlejší dokumentaci této skupiny.<br /><b>in</b> - Uživatelé, kteří jsou nyní v kanále se budou shodovat (nemusíte psát '<i>sub,0,0,0</i>').<br /><b>out</b> - Uživatelé mimo kanál se budou shodovat (nemusíte psát '<i>!sub,0,0,0</i>').<br />Nezapomeňte, že záznam bude použit buď na skupinu, nebo na uživatele, ne na obojí. <b>Password</b><br />This field allows you to easily set and change the password of a channel. It uses Mumble's access tokens feature in the background. Use ACLs and groups if you need more fine grained and powerful access control. - + <b>Heslo</b><br />Toto pole Vám dovolí jednoduše nastavit a změnit heslo kanálu. Používá funkci Mumble znaků přístupu v pozadí. Použijte ACL a skupiny, pokud potřebujete podrobnější a silnější kontrolu přístupu. This shows all the entries active on this channel. Entries inherited from parent channels will be shown in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - + Toto zobrazí všechny aktivní záznamy v tomto kanále. Záznamy zděděné z nadřazených kanálů budou zobrazeny kurzívou.<br />AACL jsou vyhodnocovány od shora dolů, což znamená, že se priorita zvyšuje, jak postupujete seznamem dolů. @@ -526,12 +533,12 @@ Opening chosen ALSA Input failed: %1 - Otevírání zvoleného zvukového vstupu selhalo. Nebude tedy snímán zvuk ze žádného mikrofonu, + Otevírání zvoleného ALSA vstupu selhalo: %1 Default ALSA Card - + Výchozí Karta ALSA @@ -544,7 +551,7 @@ Default ALSA Card - + Výchozí Karta ALSA @@ -603,82 +610,82 @@ Device selection - Výběr zařízení + Výběr zařízení Capabilities - + Schopnosti Buffer size - + Velikost vyrovnávací paměti This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - + Toto nastaví kanály vstupu pro ASIO. Ujistěte se, že vyberete alespoň jeden kanál jako mikrofon a reproduktor. <i>Mikrofon</i> by měl být tam, kde je Váš mikrofon připojen, a <i>Reproduktor</i> by měl být kanál, který vzorkuje '<i>To co slyšíte</i>'.<br />Například, na Audigy 2 ZS, dobrý výběr pro mikrofon by mohl být '<i>Mic L</i>' zatímco Reproduktor by mohl být '<i>Mix L</i>' a '<i>Mix R</i>'. Channels - + Kanály Configure input channels - + Nastavit kanály vstupu Device to use for microphone - Zařízení, na kterém je mikrofon + Zařízení, které použít jako mikrofon This chooses what device to query. You still need to actually query the device and select which channels to use. - + Toto zvolí, které zařízení má být dotázáno. Stále se musíte zařízení dotázat a vybrat, které kanály použít. Device - Zařízení + Zařízení &Query - + &Dotázat Query selected device - + Dotázat se zvoleného zařízení This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - + Toto se dotáže zvoleného zařízení pro kanály. Berte na vědomí, že mnoho ovladačů ASIO má mnoho chyb, a dotazovat se jich může způsobit pád aplikace nebo systému. &Configure - + &Nastavit Configure selected device - + Nastavit zvolené zařízení This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - + Toto nastaví zvolené zařízení. Berte na vědomí, že mnoho ovladačů ASIO má mnoho chyb, a dotazovat se jich může způsobit pád aplikace nebo systému. Driver name - + Jméno ovladače @@ -688,33 +695,33 @@ <- - + <- -> - + -> Unused - + Nepoužité Speakers - Bedničky + Reproduktory %1 (version %2) - + %1 (verze %2) %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5Hz - + %1 -> %2 , velikost vyrovnávací paměti %3 rozlišení vzorku (%4 preferováno) při %5 Hz Mumble @@ -724,23 +731,23 @@ ASIO Initialization failed: %1 - + Spuštení ASIO selhalo: %1 Failed to instantiate ASIO driver - + Nelze instancovat ovladač ASIO ASIO - + ASIO Form - Písmo + Tiskopis @@ -752,12 +759,12 @@ You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - + Musíte zvolit alespoň jeden zdroj mikrofonu a reproduktoru, abyste mohli ASIO použít. Pokud potřebujete vzorkovat pouze mikrofon, použijte DirectSound. Opening selected ASIO device failed. No input will be done. - + Otevření zvoleného zařízení ASIO selhalo. Žádný vstup nebude proveden. @@ -770,7 +777,7 @@ &About Mumble - O &aplikaci Mumble + O progr&amu Mumble @@ -785,12 +792,12 @@ About Mumble - + O programu Mumble <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - + <h3>Mumble (%1)</h3><p>Všechna práva vyhrazena %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Nástroj pro hlasovou komunikaci pro hráče</b></p><p><tt><a href="%2">%2</a></tt></p> @@ -798,7 +805,7 @@ <h3>About Speex</h3><p><tt><a href="%1">%1</a></tt></p><p>This program uses SpeexDSP.</p><p>Speex is used for echo cancellation, noise<br />filtering and voice activity detection.</p> - + <h3>O Speex</h3><p><tt><a href="%1">%1</a></tt></p><p>Tento program používá SpeexDSP.</p><p>Speex je používán pro rušení ozvěny, čištění<br />šumu a zjištění aktivity hlasu.</p> <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> @@ -812,7 +819,7 @@ About Speex - + O Speex @@ -1043,69 +1050,69 @@ Form - Písmo + Formulář Interface - + Rozhraní System - Systém + Systém Input method for audio - Vstupní metoda pro audio + Vstupní metoda pro zvuk <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - + <b>Toto je metoda vstupu pro zvuk.</b><br />Pravděpododně budete chtít použít DirectSound. Device - Zařízení + Zařízení Input device for audio Output method for audio - Výstupní metoda pro zvuk + Vstupní metoda pro zvuk <b>This is the input device to use for audio.</b> <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. + <b>Toto je vstupní zařízení, použité pro zvuk.</b> Transmission - Přenos + Vysílání &Transmit - + Vysíla&t When to transmit your speech - Kdy vysílat Vaši řeč + Kdy vysílat Vaši řeč <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - Nastaví, kdy bude Vaše řeč přenášena do internetu.</b><br /><i>Stále</i> - neustálé vysílání<br /><i>Při hlasové aktivitě</i> - když je detekována hlasová aktivita .<br /><i>Mluvení na stisk tlačítka</i> - mluvení je přenášeno, pouze když držíte stisknutou nadefinovanou klávesu pro mluvení. + Nastaví, kdy bude Vaše řeč vysílána.</b><br /><i>Průběžně</i> - neustále<br /><i>Při aktivitě hlasu</i> - když je zjištěna aktivita hlasu .<br /><i>Mluvení při stisku tlačítka</i> - mluvení je vysíláno, pouze když držíte stisknutou určenou klávesu pro mluvení. DoublePush Time - + Čas pro opětovné stisknutí Audible audio cue when push-to-talk pressed and released @@ -1114,42 +1121,42 @@ <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Zahraje krátký signál, když někdo začíná a končí vysílání.</b> + <b>Toto povolí zvukový signál pro mluvení při stisknutí.</b><br /> Toto nastavení Vám přehraje krátké pípnutí, když je klávesa pro mluvení stisknuta a uvolněna. PTT Audio cue - Zvukový signál na počátku a konci vysílání + PTT Zvukový signál Use SNR based speech detection - + Použít zjištění hlasu na základě poměru signál-šum Signal to Noise - + Signál-Šum <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - + <b>Toto nastaví zjištění hlasu, aby používalo Amplitudu.</b><br /> V tomto režimu, je čistá síla vstupního signálu použita pro zjištění hlasu. Amplitude - + Amplituda Voice &Hold - + Podržení &Hlasu How long to keep transmitting after silence - Jak dlouho se ještě vysílá po ukončení hlasové aktivity + Jak dlouho se ještě vysílá po ukončení hlasové aktivity <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. @@ -1158,42 +1165,42 @@ Silence Below - + Ticho Pod <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - + <b>Toto nastaví spouštěcí hodnoty pro zjištění hlasu</b><br />Použijte toto spolu s oknem Statistika Zvuku, pro ruční ladění spouštěcích hodnot pro zjištění hlasu. Vstupní hodnoty níže než "Ticho Pod" jsou vždy brány jako ticho. Hodnoty výše než "Řeč Nad" jsou vždy brány jako hlas. Hodnoty mezi budou brány jako hlas, pokud již mluvíte, ale nespustí nové zjišťování. Speech Above - + Řeč Nad Signal values above this count as voice - + Hodnoty signálu výše než tato hodnota jsou brány jako hlas Compression - Komprese + Komprimace &Quality - + &Kvalita Quality of compression (peak bandwidth) - Kvalita komprese (maximální šířka pásma) + Kvalita komprimace (maximální šířka pásma) <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - + <b>Toto nastaví kvalitu komprimace.</b><br /> To určí jakou šířku pásma může Mumble použít pro výstupní zvuk. Complexity of compression (CPU) @@ -1202,17 +1209,17 @@ Audio per packet - Audio/blok + Zvuk na paket How many audio frames to send per packet - Množství úseků zvuku odeslaných v jednom bloku + Kolik zvukových rámců poslat přes jeden paket <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Vybere kolik úseků zvuku bude zasíláno v jednom bloku dat.</b><br />Zvětšením této hodnoty se zvětší zpoždění v komunikaci, ale také bude efektivnější využití šířky pásma. + <b>Vybere kolik zvukových rámců by mělo být dáno do jednoho paketu.</b><br />Zvětšením této hodnoty se zvětší zpoždění ve Vašem hlase, ale také sníží využití šířky pásma. Maximum bandwidth used for sent audio @@ -1221,227 +1228,227 @@ <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - + <b>Toto zobrazuje špičku využití odchozí šírky pásma.</b><br /> Toto zobrazuje špičku množství šírky pásma odeslané z Vašeho stroje. Bitový tok zvuku je nejvyšší (protože používáme VBR) pro samotná zvuková data. Pozice je bitový tok, používaný pro informace o pozici. Čas zpracování se skládá z našeho rámečkování a hlavičky paketů IP( IP a UDP tvoří 75% z tohoto času). Audio Processing - + Zpracování Zvuku Noise Suppression - + Potlačení Šumu Noise suppression - + Potlačení šumu <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be suppressed. - + <b>Toto nastaví jak moc potlačení šumu použít.</b><br />Čím vyšší je hodnota, tím agresivněji bude neměnný hluk potlačen. Amplification - + Zesílení Maximum amplification of input sound - Maximální zesílení vstupního audio signálu + Maximální zesílení vstupního zvuku <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - + <b>Maximální zesílení vstupu.</b><br />Mumble normalizuje hlasitost vstupu před komprimací, a toto nastavuje jak moc je dovoleno zesilovat.<br />Skutečná úroveň je neustále aktualizována podle Vaši současné řeči, ale nikdy nepřesáhne úroveň zadanou zde.<br />Pokud úroveň<i>Hlasitosti Mikrofonu</i> statistiky zvuku se pohybuje okol 100%, pravděpodobně budete toto chtít nastavit na 2.0 nebo tak nějak, ale pokud, jako většina lidí, nemůžete 100% dosáhnout, tak toto nastavte na mnohem větší úroveň.<br /> Ideálně to nastavte na <i>Hlasitost Mikrofonu * Faktor Zesílení >= 100</i>, i když mluvíte velmi jemně.<br /><br />Nezapomeňte, že neuškodí toto nastavit na maximum, ale Mumble začne zachycovat jiné konverzace, pokud ho necháte toto automaticky nastavit na tuto úroveň. Current speech detection chance - + Současná šance zjištění řeči Cancel echo from speakers - + Vyrušit ozvěnu z reproduktorů Enabling this will cancel the echo from your speakers. Mixed has low CPU impact, but only works well if your speakers are equally loud and equidistant from the microphone. Multichannel echo cancellation provides much better echo cancellation, but at a higher CPU cost. - + Povolením tohoto zrušíte ozvěnu z Vašich reproduktorů. Smíšená má malý dopad na procesor, ale funguje dobře pouze, pokud mají reproduktory stejnou hlasitost a jsou ve stejné vzdálenosti od mikrofonu. Vícekanálové rušení ozvěny poskytuje mnohem lepší rušení ozvěny, ale za vyšší požadavky na procesor. Disabled - + Vypnuto Mixed - + Smíšené Multichannel - + Vícekanálové Echo - + Ozvěna If you press the PTT key twice in this time it will get locked. - + Pokud v tomto čase stisknete klávesu pro mluvení dvakrát, bude uzamčena. <b>DoublePush Time</b><br />If you press the push-to-talk key twice during the configured interval of time it will be locked. Mumble will keep transmitting until you hit the key once more to unlock PTT again. - + <b>Čas pro opětovné stisknutí</b><br /> Pokud dvakrát zmáčknete klávesu pro mluvení během nastaveného intervalu, bude uzamčena. Mumble bude stále přenášet, dokud klávesu nestisknete ještě jednou pro znovu odemčení. Gets played when the PTT button is pressed - + Bude přehrán při stisku klávesy pro mluvení Gets played when the PTT button is released - + Bude přehrán při uvolnění klávesy pro mluvení Reset audio cue to default - + Resetovat zvukový signál na výchozí <b>Reset</b><br/>Reset the paths for the files to their default. - + <b>Resetovat</b><br/>Nastaví cesty k souborům na výchozí. Browse for on audio file - + Procházet pro soubor zvuku při zapnutí Browse for off audio file - + Procházet pro soubor zvuku při vypnutí Off - + Vypnuto On - + Zapnuto Preview the audio cues - + Náhled zvukových signálů Audible audio cue when push-to-talk is activated or deactivated - + Slišitelný zvukový signál při spuštění či vypnutí mluvení při stisku tlačítka <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - + <b>Toto nastaví zjištění řeči, aby používalo poměr Signál-Šum.</b><br />V tomto režimu je vstup analyzován pro něco připomínající čistý signál, a čistota tohoto signálu je použita při spuštění zjištění řeči. <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - + <b>Toto zobrazuje současné nastavení zjištění řeči.</b><br />Tato nastavení můžete měnit z dialogového okna Nastavení nebo z Průvodce Zvukem. Signal values below this count as silence - + Hodnoty signálu nížší než tento počet jsou brány jako ticho Maximum bandwidth used for sending audio - + Maximální šířka pásma použitá pro odesílání zvuku Server maximum network bandwidth is only %1 kbit/s. Audio quality auto-adjusted to %2 kbit/s (%3ms) - + Maximální šířka pásma sítě serveru je pouze %1 kbit/s. Kvalita zvuku automaticky přizpůsobena na %2 kbit/s (%3ms) Use Amplitude based speech detection - + Použít zjištění řeči na základě Amplitudy <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name). - + <b>Toto zvolí, jak dlouho po domnělém zastavení by mělo odesílání pokračovat.</b><br />Nastavte toto výše, pokud se Váš hlas při mluvení láme (jak můžete vidět díky rychle blikající ikoně zvuku vedle Vašeho jména). Idle AutoDeafen - + AutoOhlušení při nečinosti How long to remain idle before auto-deafen. - + Jak dlouho zůstat nečinný před autoohluchnutím. This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted and deafened. - + Toto nastaví časovač nečinnosti. Pokud časovač vyprší bez jakéhokoliv vysílaného zvuku na server, jste ztlumeni a ohlušeni. Exclusive mode - + Výhradní režim <b>This opens the device in exclusive mode.</b><br />No other application will be able to use the device. - + <b>Toto otevře zařízení ve výhradním režimu.</b><br /> Žádná jiná aplikace nebude schopna toto zařízení použít. Exclusive - + Výhradně R&eset - + R&esetovat &Browse... - + &Procházet... B&rowse... - + P&rocházet... &Preview - + &Náhled <b>Preview</b><br/>Plays the current <i>on</i> sound followed by the current <i>off</i> sound. - + <b>Náhled</b><br/>Přehraje aktuální zvuk <i>zapnutí</i> následován aktuálním zvukem <i>vypnutí</i>. @@ -1449,66 +1456,66 @@ Continuous - Stále + Průběžný Voice Activity - Při hlasové aktivitě + Při aktivitě hlasu Push To Talk - Mluvení pouze na stisk tlačítka + Mluvení při stisku tlačítka Audio Input - + Vstup Zvuku %1 ms - %1 ms + %1 ms Off - + Vypnuto %1 s - %1 s + %1 s %1 kb/s - + %1 kb/s -%1 dB - + -%1 dB %1 kbit/s (Audio %2 %5, Position %4, Overhead %3) %1kbit/s (Audio %2 %5, Position %4, Overhead %3) - + %1 kbit/s (Zvuk %2 %5, Pozice %4, Čas na zpracování %3) CELT - + CELT Speex - + Speex %1kbit/s (Audio %2, Position %4, Overhead %3) @@ -1517,7 +1524,7 @@ %1 min - + %1 min @@ -1525,286 +1532,286 @@ Form - Písmo + Formulář Interface - + Rozhraní System - Systém + Systém Output method for audio Input method for audio - Vstupní metoda pro audio + Vstupní metoda pro zvuk <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. + <b>Toto je výstupní metoda k použití pro zvuk.</b><br /> Pravděpodobně budete chtít použít DirectSound. Device - Zařízení + Zařízení Output device for audio - + Výstupní zařízení pro zvuk <b>This is the output device to use for audio.</b> - + <b>Toto je výstupní zařízení k použití pro zvuk.</b> Positional Audio - + Poziční Zvuk Audio Output - + Výstup Zvuku Default &Jitter Buffer - + &Výchozí vyr. pam. chvění Safety margin for jitter buffer - + Bezpečnostní hranice pro vyrovnávací pamět chvění <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - + <b>Toto nastaví minimální bezpečnostní hranici pro vyrovnávací paměť chvění.</b><br />Veškerý příchozí zvuk je uložen, a vyrovnávací paměť chvění se neustále snaží vyrovnávací paměť dotlačit na minimum udržitelné Vaší sítí, aby bylo zpoždění co nejmenší. Toto nastaví minimální velikost vyrovnávací paměti, kterou použít. Pokud je začátek vět, které slyšíte velmi roztřesený, tuto hodnotu zvyšte. Minimum distance to user before sound volume decreases - + Minimální vzdálenost od uživatele před snížením hlasitosti zvuku This sets the minimum distance for sound calculations. The volume of other users' speech will not decrease until they are at least this far away from you. - + Toto nastaví minimální vzdálenost pro kalkulace zvuku. Hlasitost řeči ostatních uživatelů se nesníží, dokud nebudou mít alespoň tuto vzdálenost. This sets the maximum distance for sound calculations. When farther away than this, other users' speech volume will not decrease any further. - + Toto nastaví maximálníí vzdálenost pro kalkulace zvuku. Když mají uživatelé vzdálenost větší než toto, jejich hlasitost řeči se již nebude dále snižovat. <b>This enables one of the loopback test modes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other users will hear your voice. This setting is not saved on application exit. - + <b> Toto povolí jeden z testovacích režimů zpětné smyčky.</b><br /><i>Žádná</i> - Zpětná smyčka zakázána<br /><i>Místní</i> - Emulovat místní server.<br /><i>Server</i> - Požádat o zpětnou smyčku ze serveru.</br> Uvědomte si, prosím, že když je zpětná smyčka zapnuta, ostatní uživatelé neuslyší Váš hlas. Toto nastavení se při ukončení aplikace neukládá. Volume - Hlasitost + Hlasitost Volume of incoming speech - + Hlasitost příchozí řeči <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - + <b>Toto upraví hlasitost příchozí řeči.</b><br />Nezapomeňte , že pokud toto zvýšíte nad 100%, bude zvuk zkreslený. Output Delay - Výstupní opoždění + Spoždění výstupu Amount of data to buffer - + Množství dat k uložení do vyrovnávací paměti Factor for sound volume decrease - + Faktor pro snížení hlasitosti zvuku Bloom - + Bloom Loopback Test - Testování místním propojením do smyčky + Testování zpětné smyčky Delay Variance - + Variace Zpoždění Variance in packet latency - + Variace ve zpoždění paketů <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you to set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms. <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms. - + <b>Toto nastaví variaci zpoždění paketů pro testování zpětné smyčky.</b><br />Většina zvukových cest obsahuje nějakou variaci zpoždění. Tímto je Vám umožněno tuto variaci nastavit pro test zpětné smyčky. Například, pokud ji nastavite na 15ms, tak bude síť emulována s 20-35ms zpožděním pingu nebo síť se zpožděním 80-95ms. Většina domácích síťových připojení má variaci okolo 5ms. Packet Loss - Ztráta paketů + Ztráta paketů Packet loss for loopback mode - Ztráta paketů v režimu místní smyčky + Ztráta paketů pro režim zpětné smyčky <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - + <b>Toto nastaví ztrátu paketů do režimu zpětné smyčky.</b><br /> &Loopback - + &Zpětná smyčka Desired loopback mode - Vyžadovaný režim smyčky + Požadovaný režim zpětné smyčky Factor for sound volume increase - + Faktor pro zvýšení hlasitosti The connected "speakers" are actually headphones The connected "speakers" are actually headphones. - + Připojené "reproduktory" jsou vlastně sluchátka Minimum Distance - + Minimální Vzdálenost Maximum Distance - + Maximální Vzdálenost Maximum distance, beyond which speech volume won't decrease - + Maximální vzdálenost, za níž se hlasitost řeči nebude zvyšovat Minimum Volume - + Minimální Hlasitost What should the volume be at the maximum distance? - + Jaká by měla být hlasitost při maximálni vzdálenosti? How much should sound volume increase for sources that are really close? - + Jak moc by se měla hlasitost zvuku zvyšovat pro zdroje, které jsou velmi blízko? Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - + Když toto zaškrtnete, označujete tím, že nemáte připojené reproduktory, ale pouze sluchátka. To je důležité, protože reproduktory jsou většinou přímo před Vámi, zatímco sluchátka jsou od Vás přímo nalevo/napravo. Headphones - + Sluchátka This sets the amount of data to pre-buffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - + Toto nastaví množství dat pro před uložení do vyrovnávací paměti výstupu. Zkoušejte různé hodnoty a nastavte toto na nejnižší hodnotu, která ve zvuku nezpůsobuje rychlé chvění. Attenuate applications by... - + Ztišit aplikace o... Attenuation of other applications during speech - + Ztišení ostatních aplikací během mluvení <b>Attenuate volume of other applications during speech</b><br />Mumble supports decreasing the volume of other applications during incoming and/or outgoing speech. This sets the attenuation of other applications if the feature is enabled. - + <b>Ztišit hlasitost ostatních aplikací během mluvení</b><br />Mumble podporuje zmenšení hlasitosti jiných aplikací při příchozí a/nebo odchozí řeči. Toto nastaví ztišení ostatních aplikací, je-li funkce zapnuta. If checked Mumble lowers the volume of other applications while other users talk - + Pokud toto zaškrtnete, Mumble sníží hlasitost ostatních aplikací, když mluví ostatní <b>Attenuate applications while other users talk</b><br />Mumble supports decreasing the volume of other applications during incoming and/or outgoing speech. This makes mumble activate the feature while other users talk to you. - + <b>Ztišit aplikace, když ostatní uživatelé mluví</b><br />Mumble podporuje zmenšení hlasitosti jiných aplikací při příchozí a/nebo odchozí řeči. Tímto Mumble funkci aktivuje, když ostatní uživatelé mluví k Vám. while other users talk - + když ostatní mluví If checked Mumble lowers the volume of other applications while you talk - + Pokud je zaškrtnuto, Mumble sníží hlasitost ostatních plikací, když Vy mluvíte <b>Attenuate applications while you talk</b><br />Mumble supports decreasing the volume of other applications during incoming and/or outgoing speech. This makes mumble activate the feature while you talk. - + <b>Ztišit aplikace, když Vy mluvíte.</b><br />Mumble podporuje zmenšení hlasitosti jiných aplikací při příchozí a/nebo odchozí řeči. Tímto Mumble funkci aktivuje, když Vy mluvíte. while you talk - + když Vy mluvíte Exclusive mode, not recommended. - + Výhradní režim, nedoporučuje se. <b>This opens the device in exclusive mode.</b><br />No other application will be able to use the device. - + <b>Toto otevře zařízení ve výhradním režimu.</b><br /> Žádná jiná aplikace nebude schopna toto zařízení použít. Exclusive - + Výhradně @@ -1812,29 +1819,29 @@ None - + Žádná Local - Místní + Místní Server - Server + Server Audio Output - + Výstup Zvuku %1 ms - %1 ms + %1 ms @@ -1843,13 +1850,13 @@ %1 % - + %1 % %1 m - + %1 m %1% @@ -1865,17 +1872,17 @@ Choose sound file - + Zvolte zvukový soubor Invalid sound file - + Neplatný zvukový soubor The file '%1' cannot be used by Mumble. Please select a file with a compatible format and encoding. - + Mumble nemůže soubor '%1' použít. Vyberte, prosím, soubor s kompatibilním formátem a kódováním. @@ -1919,7 +1926,7 @@ Peak power in last frame - Max. výkon v posledním časovém úseku + Max. výkon v posledním rámci This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. @@ -1929,7 +1936,7 @@ This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Ukazuje maximální výkon zvukového výstupu za poslední časový úsek (20 ms). Pokud nepoužíváte vícekanálovou samplovací metodu (jako např. ASIO) s nastavenými kanály pro výstup, pak tato hodnota bude rovna 0. Pokud máte takové nastavení a stále vidíte 0 zatímco jiné aplikace hrají zvuk, Vaše nastavení asi není v pořádku. + Ukazuje maximální výkon reproduktorů za poslední snímek (20 ms). Pokud nepoužíváte vícekanálovou vzorkovací metodu (jako např. ASIO) s nastavenými kanály reproduktoru, pak tato hodnota bude rovna 0. Pokud máte takové nastavení a stále vidíte 0 zatímco jiné aplikace hrají zvuk, Vaše nastavení asi není v pořádku. This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. @@ -1947,27 +1954,27 @@ This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - + Toto zobrazuje nejvyšší výkon v posledním rámci (20 ms) po veškerém zpracování. Ideálně by toto mělo být -96 dB, když nemluvíte. Ve skutečnosti by hodnota ve zvukovém studiu měla být -60 dB, a Vy byste měli mít něco okolo -20 dB. Když mluvíte, tak by měla vzrůst na něco mezi -5 a -10 dB.<br />Pokud používáte vyrušení ozvěny a hodnota vzroste na více než -15 dB, když nemluvíte, Vaše nastavení nefunguje, a Vy budete ostatní uživatele otravovat ozvěnami. Signal-To-Noise ratio from the microphone - Poměr signál-šum mikrofonu (SNR) + Poměr Signál-Šum z mikrofonu This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - Poměr signál-šum mikrofonu v posledním zvukovém rámci (20 ms). Ukazuje jak je hlas silný v porovnání se šumem.<br /> Pokud je tato hodnota pod 1.0, je šum silnější než hlas a kvalita nebude dobrá. <br /> Neexistuje žádný horní limit pro tuto hodnotu, ale neočekávejte hodnoty větší než 40 nebo 50, pokud nejste ve zvukovém studiu. + Toto je poměr signál-šum mikrofonu v posledním snímku (20 ms). Ukazuje jak je čistý hlas v porovnání s hlukem.<br /> Pokud je tato hodnota pod 1.0, je šum silnější než hlas a kvalita je tedy snížena. <br /> Neexistuje žádný horní limit pro tuto hodnotu, ale neočekávejte hodnoty větší než 40 nebo 50 bez zvukového studia. Probability of speech - Pravděpodobnost, že je mluveno + Pravděpodobnost, že se mluví This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - Toto je pravděpodobnost, že poslední zvukový rámec (20 ms) byl řeč, ne jenom hluk okolního prostředí.<br /> Přenos při hlasová aktivitě závisí na tom, aby detekce proběhla správně. Trik je v tom, že uprostřed věty je vždy snadné rozpoznat řeč, problémem jsou pauzy mezi slovy a začátek mluvení. Je obtížné rozpoznat povzdech od písmenka 'h' na začátku slova.<br /> Pokud tohle je zobrazeno tučně, znamená to, že hlasová aktivita byla rozpoznána. + Toto je pravděpodobnost, že poslední zvukový rámec (20 ms) byla řeč, ne jenom šum okolního prostředí.<br /> Přenos při hlasová aktivitě ns tomto závisí. Trik je v tom, že prostředek věty je vždy rozpoznána jako řeč; problémem jsou pauzy mezi slovy a začátek mluvení. Je obtížné rozpoznat povzdech od slova, začínajícího na 'h'.<br /> Pokud je toto zobrazeno tučně, znamená to, že nyní probíhá přenos. @@ -1981,7 +1988,7 @@ Time between last two Push-To-Talk presses - + Čas mezi posledními dvěma stisknutími klávesy pro mluvení @@ -1991,7 +1998,7 @@ This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - Ukazuje výkonové spektrum aktuálního vstupu (červená čára) a aktuální odhad šumu (vyplněno modře).<br />Všechny amplitudy jsou vynásobeny 30x aby byly vidět zajímavé části (jak moc je signál větší než zvuk pro různé frekvence).<br /> To je pravděpodobně zajímavé, pokud zkoušíte vyladit šumové podmínky mikrofonu. V dobrých podmínkách bude dole pouze modrá čára. Pokud dosahuje modrá oblast do poloviny výšky grafu, znamená to, že zvuk je rušen silným šumem. + Ukazuje výkonové spektrum aktuálního vstupního signálu (červená čára) a aktuální odhad šumu (vyplněno modře).<br />Všechny amplitudy jsou vynásobeny 30x aby byly vidět zajímavé části (jak moc je signál větší než hluk, přítomný v každém vlnovém pásmu).<br /> Toto je pravděpodobně zajímavé pouze, pokud zkoušíte vyladit šumové podmínky Vašeho mikrofonu. V dobrých podmínkách bude dole pouze malé chvění modré. Pokud modrá oblast dosahuje do poloviny výšky grafu, znamená to, že máte velmi rušné prostředí. @@ -2001,93 +2008,93 @@ This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - + Toto zobrazuje váhy rušitele ozvěny s časem zvyšujícím se dolů a frekvencí zvyšující se doprava.<br /> Ideálně by toto mělo být černé, což znamená, že neexistuje žádná ozvěna. Běžně budete mít jednu nebo více vodorovných modrých čar, označující časově zpožděnou ozvěnu. Měli byste vidět, jak jsou váhy aktualizovány ve skutečném čase.<br />Uvědomte si, prosím, že dokud nebudete mít něco, od čeho ozvěnu odrážet, tak zde moc užitečná data neuvidíte. Přehrajte nějakou hudbu a věci by se měli ustálit. <br /> Můžete si zvolit k zobrazení skutečné nebo domnělé části vah kmitočtového pásma, nebo jinak vypočítaná modulace a fáze. Z těchto bude asi nejužitečnější modulace, což je amplituda ozvěny, a ukazuje kolik výstupního signálu je v onom časovém kroku odstraněno. Ostatní režimy zobrazení jsou většinou užitečné pro lidi, kteří si chtějí vyladit jejich algoritmy vyrušení ozvěny.<br /> Uvědomte si, prosím, že pokud se celý obrázek hodně mění, když je v režimu modulace, rušitel ozvěny nemůže najít žádnou souvztažnost mezi dvěma vstupními zdroji (reproduktory a mikrofon). Buď máte velmi dlouhou prodlevu ozvěny, nebo jeden ze vstupních zdrojů není správně nastaven. >1000 ms >1000ms - + >1000 ms Audio Statistics - + Statistiky Zvuku Input Levels - + Hladiny Vstupu This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - + Toto zobrazuje nejvyšší výkon v posledním rámci (20 ms), a je to stejné měření, které byste normálně našli pojmenované jako "síla vstupu". Tohoto si, prosím, nevšímejte a podívejte se místo toho na <b>Sílu mikrofonu</b>, které je mnohem stabilnější a nevšímá si extrémních výchylek. Signal Analysis - + Analýza Signálu Microphone power - + Síla mikrofonu This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - + Toto zobrazuje jak blízo je současný vstup k ideálnímu. Pro úpravu hladiny Vašeho mikrofonu, otevřete jakýkoli program, který používáte pro úpravu hlasitosti nahrávání,a podívejte na hodnotu zde, když mluvíte<br /><b> Mluvte tak hlasitě, jako když jste rozčílení, že Vás nějaká lama zastřelila.</b><br />Upravte hlasitost dokud hodnota nebude blízko ke 100%, ale ujistěte se, že nebude vyšší. Pokud bude výš, pravděpodobně budou části Vaši řeči oříznuty, což sníží kvalitu zvuku. Signal-To-Noise ratio - Poměr zvuku k šumu + Poměr zvuku k šumu Configuration feedback - + Zpětná vazba nastavení Current audio bitrate - + Současný bitový tok zvuku DoublePush interval - + Interval Opětovného stisknutí Speech Detection - + Detekce Řeči Current speech detection chance - + Současná šance zjištění řeči <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - + <b>Toto zobrazuje současná nastavení zjištění řeči.</b><br />Tato nastavení můžete změnit v dialogovém okně Nastavení nebo z Průvodce Zvukem. Signal and noise power spectrum - + Výkonové spektrum signálu a šumu Echo Analysis - + Analýza ozvěny This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - + Toto je bitový tok posledního komprimovaného rámce (20ms), a jako takový bude skákat nahoru a dolů jak VBR upravuje kvalitu. Nejvyšší bitový tok může být upraven v dialogovém okně Nastavení. @@ -2095,7 +2102,7 @@ Audio Tuning Wizard - Průvodce nastavením zvuku + Průvodce Laděním Zvuku @@ -2105,7 +2112,7 @@ Welcome to the Mumble Audio Wizard - Vítejte v průvodci pro nastavení zvuku pro aplikaci Mumble + Vítejte v průvodci nastavením zvuku pro aplikaci Mumble This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. @@ -2123,7 +2130,7 @@ Enjoy using Mumble - Mumble je připraveno k použití + Užijte si používání Mumble Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. @@ -2137,7 +2144,7 @@ Selecting the input and output device to use with Mumble. - Vyberte vstupní a výstupní zvukové zařízení pro použití v Mumble. + Vyberte vstupní a výstupní zařízení pro použití v Mumble. Input device @@ -2146,7 +2153,7 @@ This is the device your microphone is connected to. - Zařízení pro zvukový vstup (s mikrofonem). + Toto je zařízení, do kterého je Váš mikrofon připojen. @@ -2156,12 +2163,12 @@ Input method for audio - Vstupní metoda pro audio + Vstupní metoda pro zvuk <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro zaznamenávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. + <b>Toto je vstupní metoda k použíti pro zvuk.</b><br /> Pravděpodobně budete chtít použít DirectSound. @@ -2171,12 +2178,12 @@ Input device to use - Vstupní zařízení + Které vstupní zařízení použít <b>Selects which sound card to use for audio input.</b> - <b>Vyberte zvukovou kartu, která bude snímat zvuk.</b> + <b>Vybere, která zvuková karta bude použita pro zvukový vstup.</b> Output device @@ -2185,7 +2192,7 @@ This is the device your speakers or headphones are connected to. - Zařízení, ke kterému jsou připojeny sluchátka nebo mikrofon. + Zařízení, ke kterému jsou připojeny Vaše reproduktory nebo sluchátka. @@ -2195,17 +2202,17 @@ <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. + <b>Toto je výstupní metoda k použíti pro zvuk</b><br /> Pravděpodobně budete chtít použít DirectSound. Output device to use - Výstupní zařízení + Které výstupní zařízení použít <b>Selects which sound card to use for audio Output.</b> - <b>Vyberte zvukovou kartu, která bude přehrávat zvuk.</b> + <b>Vybere, která zvuková karta bude použita pro Výstup zvuku.</b> @@ -2215,7 +2222,7 @@ Tuning microphone hardware volume to optimal settings. - Nastavení hlasitosti mikrofonu pro optimální hlasitost. + Ladění hardwarové hlasitosti mikrofonu na optimální nastavení. Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. @@ -2228,27 +2235,27 @@ Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Nyní se uvolněte a mluvte potichu, jako kdyby byla pozdní noc a nechtěli jste nikoho rušit ve spánku. Nastavte táhlo pod tímto textem tak, aby monitorovaný zvuk byl v zelené oblasti při mluvení, ale aby bezpečně zůstal v modré oblasti, když jste potichu. + Nyní mluvte potichu, jako kdybyste mluvili pozdě v noci a nechtěli nikoho rušit. Nastavte táhlo níže tak, aby se při mluvení lišta pohybovala v zelené oblasti, ale aby zůstala v modré oblasti, když jste potichu. Voice Activity Detection - Detekce hlasové aktivity + Zjištění hlasové aktivity Letting Mumble figure out when you're talking and when you're silent. - Mumble umí rozpoznávat mluvení a ticho. + Nechat na Mumble, aby rozpoznal, kdy mluvíte a kdy jste potichu. This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Toto pomůže aplikaci Mumble rozpoznat, kdy mluvíte. První krok je výběr, podle které hodnoty se má provádět rozpoznání. + Toto pomůže aplikaci Mumble rozpoznat, kdy mluvíte. První krok je výběr, podle které hodnoty dat se má rozpoznání provádět. Raw amplitude from input - Hlasitost vstupu + Čistá amplituda ze vstupu @@ -2259,7 +2266,7 @@ Next you need to adjust the following slider. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Nyní je potřeba nastavit následující dvě hodnoty. Prvních několik vašich slabik by mělo skončit v zelené oblasti (rozpoznáno jako řeč). Pokud mluvíte, měl by monitor zůstávat ve žluté (rozpoznáno jako pravděpopdobná řeč). Když nemluvíte, vše by mělo být v červené oblasti (to dozajista není řeč). + Nyní je potřeba nastavit následující dvě hodnoty. Prvních několik Vašich slabik by mělo skončit v zelené oblasti (určitě řeč). Pokud mluvíte, měli byste zůstávat ve žluté (pravděpodobně řeč)a když nemluvíte, vše by mělo být v červené oblasti (určitě není řeč). Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. @@ -2273,7 +2280,7 @@ Changing hardware output delays to their minimum value. - Změní výstupní parametry zvuku tak, aby prodleva v komunikaci mohla být minimální. + Změna zpoždění výstupu hardwaru na jeho minimální hodnotu. To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. @@ -2302,23 +2309,23 @@ Use echo cancellation - + Použít vyrušení ozvěny This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - + Toto povolí vyrušení ozvěny ve výstupním zvuku, což pomáhá jak na reproduktorech, tak na sluchátcích. Enable positional audio - + Zapnout poziční zvuk Allows positioning of sound Allows positioning of sound. - + Povolí umísťování zvuku @@ -2328,27 +2335,32 @@ <p> Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. </p> - + <p> +Toto je průvodce laděním zvuku pro Mumble. Pomůže Vám správně nastavit vstupní úrovně Vaši zvukové karty, a také nastavit správné parametry pro zpracování zvuku v Mumble +</p> +<p> +Uvědomte si, prosím, že dokud bude tento průvodce spuštěn, zvuk bude ve smyčce posílán zpátky k Vám, abyste si ho mohli poslechnout, a žádný zvuk nebude odeslán na server. +</p> Input Device - + Vstupní Zařízení Cancel echo from headset or speakers - + Zrušit ozvěnu z reproduktorů nebo sluchátek Output Device - + Výstupní Zařízení This allows Mumble to use positional audio to place voices. - + Toto povolí Mumble používat poziční zvuk pro umístění hlasů. @@ -2359,17 +2371,23 @@ You should hear a voice sample. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test. </p> - + <p> +Aby bylo zpoždění co nejmenší, je důležité na zvukovou kartu ukládat co nejméně zvuku, jak jen to jde. Nicméně, mnoho zvukových karet hlásí, že potřebují mnohem menší vyrovnávací pameť, než s čím můžou ve skutečnosti pracovat, takže jediný způsob, jak tuto hodnotu nastavit je pokus-omyl. +</p> +<p> +Měli byste slyšet ukázku hlasu. Změňte šoupátko pod nejnižší hodnotu, která ve zvuku nedává <b>žádné</b> přerušení nebo chvění. Nezapomeňte, prosím, že místní ozvěna je během tohoto tesu vypnuta. +</p> + Amount of data to buffer - + Množství dat k uložení This sets the amount of data to pre-buffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - + Toto nastaví množství dat pro před uložení do vyrovnávací paměti výstupu. Zkoušejte různé hodnoty a nastavte toto na nejnižší hodnotu, která ve zvuku nezpůsobuje rychlé chvění. @@ -2380,17 +2398,23 @@ Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. </p> - + <p> +Otevřete Váš ovládací panel zvuku a jděte do nastavení záznamu. Ujistěte se, že je mikrofon vybrán jako aktivní vstup s maximální hlasitostí záznamu. Pokud existuje také možnost povolit "Zesílení Mikrofonu" ujistěte se, že je zaškrtnuta. +</p> +<p> +Mluvte nahlas, jako kdybyste byli podráždění nebo nadšení. Snižujte hlasitost v kontrolním panelu zvuk, dokud lišta níže zůstane nejvýše, jak je to možné, v modré a zelené ale <b>ne</b> červené oblasti, zatímco vy mluvíte. +</p> + Positional Audio - + Poziční Zvuk Adjusting attenuation of positional audio. - + Úprava ztišení pozičního zvuku. @@ -2401,12 +2425,18 @@ The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. </p> - + <p> +Mumble podporuje v některých hrách poziční audio, a umístí hlasy ostatních uživatelů relativně k jejich pozici ve hře. V závislosti na jejich pozici, hlasitost hlasu bude v reproduktorech měněna, aby napodobila směr a vzdálenost, kde se jiný uživatel nachází. Takovéto umisťování závisí na správnosti nastavení Vašich reproduktorů ve Vašem operačním systému, proto se zde dělá test. +</p> +<p> +Graf níže zobrazuje <font color="red">Vaši</font> pozici, <font color="yellow">reproduktorů</font> a <font color="green">hýbajícího se zdroje zvuku</font>, jak můžete vidět výše. Měli byste slyšet, jak se zvuk mezi kanály pohybuje. +</p> + Use headphones instead of speakers - + Použít sluchátka místo reproduktorů @@ -2417,132 +2447,138 @@ Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistics are essential for future development, and also make sure the features you use aren't deprecated. </p> - + <p> +Gratulujeme. Nyní byste měli být připraveni si vychutnat bohatší zážitek ze zvuku pomocí Mumble. +</p> +<p> +Mumble je pod neustálým vývojem, a tým vývojářů se chce zaměřit na funkce, které nejvíce vyhovoují uživatelům. Za tímto účelem, Mumble podporuje zasílání vývojářům anonymní statistiky o Vašem nastavení. Tyto statistiky jsou zásadní pro budoucí vývoj, a také zajišťují, že funkce, které používáte, nejsou zavrhnuty. +</p> + Use headphones - + Použít sluchátka This ignores the OS speaker configuration and configures the positioning for headphones instead. - + Toto ignoruje nastavení reproduktorů v OS a místo toho nastaví umístění sluchátek. Submit anonymous statistics to the Mumble project - + Posílat anonymní statistiky projektu Mumble Push To Talk: - + Klávesa Pro Mluvení: Quality & Notifications - + Kvalita & oznámení Adjust quality and notification settings. - + Upraví kvalitu a nastavení oznamení. Quality settings - + Nastavení kvality Low - + Nízké Balanced - + Vyrovnané Notification settings - + Nastavení oznamení Use Text-To-Speech to read notifications and messages to you. - + Použít Text-Na-Řeč pro čtení oznámení a zpráv pro Vás. Disable Text-To-Speech and use sounds instead. - + Vypnout Text-Na-Řeč a míst toho použít zvuky. %1 ms - %1 ms + %1 ms Enables attenuation of other applications while users talk to you - + Povolí ztišení ostatních aplikací, když uživatelé mluví k Vám Attenuate applications while other users talk - + Ztiší aplikace, když ostatní uživatelé mluví In this configuration Mumble will use a <b>low amount of bandwidth</b>. This will inevitably result in high latency and poor quality. Choose this only if your connection cannot handle the other settings. (Speex 16kbit/s, 60ms per packet) - + V tomto nastavení Mumble použije <b>malé množství šířky pásma</b>. Toto nevyhnutelně vyústí ve vysoké zpoždění a špatnou kvalitu. Toto si zvolte pouze, pokud Vaše připojení ostatní nastavení nezvládne. (Speex 16kbit/s, 60ms na paket) This is the <b>recommended default</b> configuration. It provides a good balance between quality, latency, and bandwidth usage. (CELT 40kbit/s, 20ms per packet) - + Toto je <b>výchozí doporučené</b> nastavení. Poskytuje dobrou rovnováhu mezi kvalitou, zpožděním a využití šířky pásma. (CELT 40kbit/s, 20ms na paket) High - + Vysoké This configuration is only recommended for use in setups where bandwidth is not an issue, like a LAN. It provides the lowest latency supported by Mumble and <b>high quality</b>. (CELT 72kbit/s, 10ms per packet) - + Toto nastavení je doporučené pouze v systému, kde šířka pásma není problém, jako například LAN. Poskytuje nejnižší zpoždění, které Mumble podporuje a <b>vysokou kvalitu</b>. (CELT 72kbit/s, 10ms na paket) Custom - + Vlastní You already set a customized quality configuration in Mumble. Select this setting to keep it. - + Již jste nastavili vlastní nastavení kvality v Mumble. Vyberte toto nastavení pro jeho uchování. Enables attenuation of other applications while users talk to you. This means that as soon someone starts to speak to you in Mumble, the sound of all other applications (like audio players) will get attenuated so you can hear them more clearly. - + Zapne ztišení jiných aplikací, když uživatelé mluví k Vám. To znamená, že jakmile někdo začne v Mumble mluvit k Vám, zvuk ostatních aplikací (jako hudební přehrávače), bude ztišen, abyste je mohli lépe slyšet. Apply some high contrast optimizations for visually impaired users - + Použít některé vysoko kontrastní optimalizace pro zrakově postižené uživatele Use high contrast graphics - + Použít grafiku s vysokým kontrastem Keep custom Text-To-Speech settings. - + Ponechat vlastní nastavení Text-Na-Řeč. @@ -2561,19 +2597,25 @@ </p> For high contrast mode - + <p> +Otevřete Váš ovládací panel zvuku a jděte do nastavení záznamu. Ujistěte se, že je mikrofon vybrán jako aktivní vstup s maximální hlasitostí záznamu. Pokud existuje také možnost povolit "Zesílení Mikrofonu" ujistěte se, že je zaškrtnuta. +</p> +<p> +Mluvte nahlas, jako kdybyste byli podráždění nebo nadšení. Snižujte hlasitost v kontrolním panelu zvuk, dokud lišta níže zůstane nejvýše, jak je to možné, v pruhované a prázdné, ale <b>ne</b> křížkované oblasti, zatímco vy mluvíte. +</p> + Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into empty zone when you talk, but stays in the striped one while you're silent. For high contrast mode - + Nyní mluvte potichu, jako kdybyste mluvili pozdě v noci a nechtěli nikoho rušit. Nastavte šoupátko níže tak, aby se při mluvení lišta posunula do prázdné oblasti, ale zůstala v pruhované, když jste potichu. Next you need to adjust the following slider. The first few utterances you say should end up in the empty area (definitive speech). While talking, you should stay inside the striped (might be speech) and when you're not talking, everything should be in the crisscrossed (definitively not speech). For high contrast mode - + Nyní je potřeba nastavit následující dvě hodnoty. Prvních několik Vašich slabik by mělo skončit v prázdné oblasti (určitě řeč). Pokud mluvíte, měli byste zůstávat v pruhované (pravděpodobně řeč)a když nemluvíte, vše by mělo být v křížkované oblasti (určitě není řeč). @@ -2581,7 +2623,7 @@ Mumble - Edit Bans - Mumble - Upravit bany (zákazy) + Mumble - Upravit zákazy 0.0.0.0 @@ -2590,27 +2632,27 @@ Reason - + Důvod Start - + Začátek End - + Konec User - + Uživatel Hash - + Hash @@ -2620,7 +2662,7 @@ &Update - &Obnovit + Akt&ualizovat @@ -2654,12 +2696,12 @@ &Address - + &Adresa &Mask - + &Maska @@ -2667,32 +2709,32 @@ Name - Jméno + Jméno Email - + E-mail Issuer - + Vydal Expiry Date - + Platný do (none) - + (žádný) Self-signed - + Podepsaný sám sebou @@ -2700,72 +2742,72 @@ Resolving domain %1. - + Překládám doménu %1. Unable to validate email.<br />Enter a valid (or blank) email to continue. - + Nelze potvrdit e-mail.<br />Pro pokračování zadejte platný (nebo prázdný) e-mail. There was an error generating your certificate.<br />Please try again. - + Při vytváření Vašeho certifikátu došlo k chybě.<br />Zkuste to, prosím, znovu. Your certificate and key could not be exported to PKCS#12 format. There might be an error in your certificate. - + Váš certifikát a klíč nemohli být exportovány do formátu PKCS#12. Ve Vašem certifikátu může být chyba. The file could not be opened for writing. Please use another file. - + Soubor nemohl být otevřen pro zápis. Použijte, prosím, jiný soubor. The file could not be written successfully. Please use another file. - + Soubor nemohl být úspěšně zapsán. Použijte, prosím, jiný soubor. The file could not be opened for reading. Please use another file. - + Soubor nemohl být otevřen pro čtení. Použijte, prosím, jiný soubor. The file is empty or could not be read. Please use another file. - + Soubor je prázdný, nebo z něj nelze číst. Použijte, prosím, jiný soubor. The file did not contain a valid certificate and key. Please use another file. - + Soubor neobsahoval platný certifikát a klíč. Použijte, prosím, jiný soubor. Select file to export certificate to - + Vyberte soubor, do kterého certifikát exportovat Select file to import certificate from - + Vyberte soubor, z kterého certifikát importovat Unable to resolve domain. - + Nelze přeložit doménu. Mumble User - + Uživatel Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. - + <b>Vypršení Certifikátu:</b> Váš certifikát brzy vyprší. Musíte ho obnovit, nebo se už nebudete moci připojit k serverům, na kterých jste registrování. @@ -2773,158 +2815,158 @@ Certificate Management - + Správce Certifikátů Certificate Authentication - + Ověření Certifikátů Authenticating to servers without using passwords - + Ověřování pomocí serveru bez použití hesel Current certificate - + Současný Certifikát This is the certificate Mumble currently uses. - + Toto je certifikát, který Mumble v současnosti používá. Current Certificate - + Současný Certifikát Create a new certificate - + Vytvořit nový certifikát This will create a new certificate. - + Toto vytvoří nový certifikát. Import certificate from file - + Importovat certifikát ze souboru This will import a certificate from file. - + Toto importuje certifikát ze souboru. Import a certificate - + Importovat certifikát Export Certificate - + Exportovat certifikát This will export a certificate to file. - + Toto exportuje certifikát do souboru. Export current certificate - + Exportovat současný certifikát Import Certificate - + Importovat Certifikát PKCS #12 Certificate import - + Import Certifikátu PKCS #12 <p>Mumble can import certificates stored in PKCS #12 format. This is the format used when exporting a key from Mumble, and also when exporting keys from Firefox, Internet Explorer, Opera etc.</p><p>If the file is password protected, you will need the password to import the certificate.</p> <p>Mumble can import certificates stored in PKCS #12 format. This is the format used when exporting a key from Mumble, and also when exporting keys from FireFox, Internet Explorer, Opera etc.</p><p>If the file is password protected, you will need the password to import the certificate.</p> - + <p>Mumble může importovat certifikáty uložené ve formátu PKCS #12. Toto je formát používaný při exportu klíče z Mumble, a také při exportu klíčů z Firefox, Internet Explorer, Opera atd.</p><p>Pokud soubor je chráněn heslem, budete toto heslo potřebovat při importu certifikátu.</p> Import from - + Importovat z Filename to import from - + Jméno souboru, z kterého importovat This is the filename you wish to import a certificate from. - + Toto je název souboru, z kterého chcete certifikát importovat. Select file to import from - + Vyberte soubor z kterého importovat This opens a file selection dialog to choose a file to import a certificate from. - + Toto otevře dialogové okno výběru souboru ke zvolení souboru, z kterého certifikát importovat. Open... - + Otevřít... Password - + Heslo Password for PKCS#12 file - + Heslo pro soubor PKCS#12 This is the password for the PKCS#12 file containing your certificate. - + Toto je heslo pro soubor PKCS#12, obsahující Váš certifikát. Certificate to import - + Který certifikát importovat This is the certificate you are importing. - + Toto je certifikát, který importujete. Certificate Details - + Podrobnosti Certifikátu Replace Certificate - + Nahradit Certifikát Replace existing certificate with new certificate? - + Nahradit existující certifikát novým certifikátem? @@ -2937,117 +2979,125 @@ Are you sure you wish to replace your certificate? </p> - + <p>V Mumble už máte uložen certifikát, a chystáte se ho nahradit.</p> +<p>Pokud aktualizujete na certifikát, který Vám vydal důvěryhodná CA a e-mailová adresa se shoduje s tou na Vašem současném certifikátu, toto je naprosto bezpečné, a servery, na které se připojujete, automaticky rozpoznají silný certifikát pro Vaši e-mailovou adresu. +</p> +<p>Pokud to tak není, už nebudete žádným serverem, kterým jste předtím byli ověřováni, rozpoznán. Pokud jste se ještě na žádných serverech neregistrovali, není se čeho obávat. +</p> +<p> +Jste si jisti, že chcete certifikát nahradit? +</p> + This is the certificate Mumble currently uses. It will be replaced. - + Toto je certifikát, který Mumble nyní používá. Bude nahrazen. New certificate - + Nový certifikát This is the new certificate that will replace the old one. - + Toto je nový certifikát, který nahradí starý. New Certificate - + Nový Certifikát Make a backup of your certificate - + Vytvořit zálohu Vašeho certifikátu Export to - + Exportovat do Filename to export to - + Jméno souboru, do kterého exportovat This is the filename you wish to export a certificate to. - + Toto je jméno souboru, do kterého chcete certifikát exportovat. Save As... - + Uložit Jako... This is the certificate Mumble currently uses. It will be exported. - + Toto je certifikát, který Mumble nyní používá. Bude exportován. Generate a new certificate for strong authentication - + Vytvořit nový certifikát, pro silné ověření <p>Mumble will now generate a strong certificate for authentication to servers.</p><p>If you wish, you may provide some additional information to be stored in the certificate, which will be presented to servers when you connect. If you provide a valid email address, you can upgrade to a CA issued email certificate later on, which provides strong identification.</p> - + <p>Mumble nyní vytvoří silný certifikát pro ověření serverem.</p><p>Pokud chcete, můžete zadat další dodatečné informace, které budou uloženy do certifikátu, který bude při připojení k serverům prezentován. Pokud zadáte platnou e-mailovou adresu, můžete později aktualizovat na e-mailový certifikát vydaný CA, který poskytuje silný průkaz totožnosti.</p> Name - Jméno + Jméno Email - + E-mail Your email address (e.g. johndoe@mumble.info) - + Vaše e-mailová adresa (např. jannovak@mumble.info) This is your email address. It is strongly recommended to provide a valid email address, as this will allow you to upgrade to a strong certificate without authentication problems. - + Toto je Vaše e-mailová adresa. Je výrazně doporučeno, abyste zadali platnou e-mailovou adresu, protože Vám umožní aktualizovat na silný certifikát bez problémů s ověřením. Your name (e.g. John Doe) - + Vaše jméno (např. Jan Novák) This is your name, and will be filled out in the certificate. This field is entirely optional. - + Toto je Vaše jméno, které bude v certifikátu vyplněno. Toto pole je nepovinné. Finish - + Dokončit Certificate-based authentication is ready for use - + Ověření pomocí certifikátů je připraveno k použití Enjoy using Mumble with strong authentication. - + Užijte si použivání Mumble se silným ověřením. Automatic certificate creation - + Vytvořit certifikát automaticky @@ -3056,13 +3106,18 @@ It is <b>strongly</b> recommended that you <a href="http://mumble.info/certificate.php">create a trusted certificate</a>. </p> - + <p>Mumble může použít certifikáty k ověření s pomocí serveru. Použitím certifikátů se vyhnete heslům, což znamená, že nemusíte vzdálené síti sdělovat žádná hesla. Také umožní velmi snadnou registraci uživatelů.</p><p>I když Mumble může bez certifikátů pracovat, většina serverů bude očekávat, že ho budete mít.</p> +<p> +Je <b>výrazně</b> doporučeno, abyste si <a href="http://mumble.info/certificate.php">vytvořili důvěryhodný certifikát</a>. +</p> + <p>If you ever lose your current certificate, which will happen if your computer suffers a hardware failure or you reinstall your machine, you will no longer be able to authenticate to any server you are registered on. It is therefore <b>mandatory</b> that you make a backup of your certificate. We strongly recommend you store this backup on removable storage, such as a USB flash drive.</p> <p>Note that this file will not be encrypted, and if anyone gains access to it, they will be able to impersonate you, so take good care of it.</p> - + <p>Pokud někdy certifikát ztratíte, což se může stát, pokud Váš počítač utrpí chybu hardwaru, nebo přeinstalujete počítač, nebudete se už moci na jakémkoliv serveru, na kterém jste registrován ověřit. Je tedy <b>nutné</b>, abyste si udělali zálohu Vašeho certifikátu. Výrazně doporučujeme si tuto zálohu uložit na vyměnitelném úložišti, jako například USB flash disk.</p> +<p>Nezapomeňte, že tento soubor nebude zašifrován, a pokud k němu získá někdo jiný přístup, může se za Vás vydávat, takže se o něj dobře starejte.</p> @@ -3115,7 +3170,7 @@ Traverse - Průchod + Procházet @@ -3125,7 +3180,7 @@ Speak - Mluvení + Mluvit AltSpeak @@ -3134,7 +3189,7 @@ Mute/Deafen - Zakázat mluvení/poslouchání + Ztlumit/Ohlušit Move/Kick @@ -3143,132 +3198,132 @@ Make channel - Vytvoření kanálu + Vytvořit kanál Make temporary - + Udělat dočasným Link channel - Propojení kanálů + Propojit kanál This represents no privileges. - Toto představuje absenci jakýchkoliv privilegií. + Toto představuje absenci jakýchkoliv výsad. This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Reprezentuje totální právo ke kanálu, včetně schopnosti změnit skupiny a ACL. Mít toto privilegium automaticky znamená mít všechna ostatní práva. + Toto představuje úplný přístup do kanálu, zahrnující schopnost měnit skupiny a informace ACL. Tato výsada zahrnuje všechny ostatní. This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Reprezentuje povolení procházet kanálem. Pokud je procházení uživateli odepřeno, nebude schopen přijít do kanálu či jeho podkanálů (i kdyby tam měl průchod povolen). + Toto představuje oprávnění procházet kanálem. Pokud je uživateli tato výsada odepřena, nebude moci do těchto kanálu a podkanálů jakýmkoliv způsobem vstoupit, bez ohledu na jiná oprávnění v podkanálech. This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Povolení vejít do kanálu. V hierarchicky uspořádaných kanálech je často výhodné dám všem právo průchodu (traverse), ale omezit právo vstupu (enter) v kořeni hierarchie. + Toto představuje oprávnění vstoupit do kanálu. Pokud máte hierarchickou strukturu kanálu, asi byste mohli chtít dát všem Procházet, ale omezit Vstup v kořeni Vaší hierarchie. This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Representuje oprávnění mluvit v kanálu. Uživatelům bez tohoto privilegia bude serverem zakázáno mluvit a nebudou mít možnost mluvit, dokud jim nějaký administrátor tuto schopnost neumožní. + Toto představuje oprávnění v kanálu mluvit. Uživatelé bez tohoto oprávnění budou serverem potlačeni (zobrazeni jako ztlumení), a nebudou moci mluvit, dokud je někdo s odpovídajícími výsadami jejich ztlumení nezruší. This represents the permission to whisper to this channel from the outside. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with the Whisper key held down. This may be used to broadcast to a hierarchy of channels without linking. - + Toto představuje oprávnění do tohoto kanálu šeptat z venčí. Toto funguje stejně jako výsada <i>mluvit</i>, ale týká se paketů mluvených při držení klávesy Šeptat. Toto může být použito pro vysílání do hierarchie kanálů bez propojení. This represents the permission to mute and deafen other users. Once muted, a user will stay muted until he is unmuted by another privileged user or reconnects to the server. - + Toto představuje oprávnění ztlumit a ohlušit jiné uživatele. Jakmile je uživatel ztlumen, zůstane tak, dokud ztlumení není zrušeno jiným uživatelem s výsadami, nebo se znovu nepřipojí k serveru. This represents the permission to move a user to another channel or kick him from the server. To actually move the user, either the moving user must have Move privileges in the destination channel, or the user must normally be allowed to enter the channel. Users with this privilege can move users into channels the target user normally wouldn't have permission to enter. - + Toto představuje oprávnění přesunout uživatele na jiný kanál nebo ho vykopnout ze serveru. Abyste uživatele přesunuli, buď musí přesunující uživatel mít oprávnění Přesunout v cílovém kanálu, nebo musí mít uživatel povolení vstoupit běžně do kanálu. Uživatelé s touto výsadou můžou přesunovat uživatele do kanálů, do kterých by přesunovaný uživatel normálně neměl oprávnění vstoupit. This represents the permission to make sub-channels. The user making the sub-channel will be added to the admin group of the sub-channel. - + Toto představuje oprávnění vytvářet podkanály. Uživatel, který je vytváří, bude přidán do skupiny administrátorů tohoto podkanálu. This represents the permission to make a temporary subchannel. The user making the sub-channel will be added to the admin group of the sub-channel. Temporary channels are not stored and disappear when the last user leaves. - + Toto představuje oprávnění vytvořit dočasný podkanál. Uživatel, který ho vytváří, bude přidán do skupiny administrátorů tohoto podkanálu. Dočasné kanály nejsou ukládány a zmizí, když poslední uživatel odejde. This represents the permission to link channels. Users in linked channels hear each other, as long as the speaking user has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - + Toto představuje oprávnění propojit kanály. Uživatelé v propojených kanálech se slyší navzájem, pokud mluvící uživatel má výsadu <i>mluvit</i> v kanálu posluchače. Musíte mít výsadu propojit v obou kanálech pro vytvoření propojení, ale pro odstranění pouze v jednom. This represents the permission to write text messages to other users in this channel. - + Toto představuje oprávnění psát textové zprávy ostatním uživatelům v tomto kanálu. This represents the permission to forcibly remove users from the server. - + Toto představuje oprávnění násilím odstranit uživatele ze serveru. This represents the permission to permanently remove users from the server. - + Toto představuje oprávnění natrvalo odstranit uživatele ze serveru. This represents the permission to register and unregister users on the server. - + Toto představuje oprávnění registrovat a odregistrovat uživatele ze serveru. This represents the permission to register oneself on the server. - + Toto představuje oprávnění registrovat sám sebe na server. Whisper - + Šeptat Move - + Přesunout Text message - + Textová zpráva Kick - + Vykopnout Ban - + Zakázat Register User - + Registrovat Uživatele Register Self - + Registrovat Sám Sebe This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. @@ -3293,7 +3348,7 @@ Write ACL - + Zapsat ACL @@ -3301,60 +3356,60 @@ Paste and send - + Vložit a odeslat <center>Type chat message here</center> - + <center>Zde zadejte chatovou zprávu</center> ClientUser - + Friend - + Přítel Authenticated - + Ověřený Priority speaker - + Přednostní řečník Recording - + Nahrávám Muted (server) - + Ztlumen (serverem) Deafened (server) - + Ohlušen (serverem) Local Mute - + Místní Ztlumení Muted (self) - + Ztlumil (sám sebe) Deafened (self) - + Ohlušen (sám sebe) @@ -3362,27 +3417,27 @@ Mumble Configuration - Konfigurace Mumble + Nastavení Mumble Advanced - + Pokročilé &OK &OK - + Accept changes - Potvrdit změny + Přijmout změny This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Toto tlačítko potvrdí současné nastavení a navrátí se do aplikace.<br />Nastavení bude uloženo na disku při ukončení aplikace. + Toto tlačítko přijme současná nastavení a navrátí Vás do aplikace.<br />Nastavení bude uloženo na disk, když z aplikace odejdete. &Cancel @@ -3391,12 +3446,12 @@ Reject changes - Odmítnout nové změny + Odmítnout změny This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Tímto tlačítkem můžete odmítnout nastavované změny a vrátit se do aplikace.<br />Nastavení nebude změněno. + Toto tlačítko odmítne veškeré změny a navrátí Vás do aplikace.<br />Nastavení budou navrácena do původních pozic. &Apply @@ -3415,23 +3470,23 @@ Undo changes for current page - + Vrátit změny ze současné stránky This button will revert any changes done on the current page to the most recent applied settings. - + Toto tlačítko vrátí jakékoliv změny provedené na současné stránce na nejnovější potvrzená nastavení. Restore defaults for current page - + Obnovit výchozí nastavení na současné stránce This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - + Toto tlačítko obnoví výchozí nastavení na současné stránce. Jiné stránky nebudou změněny.<br />Pro obnovení všech nastavení na výchozí, budete muset tlačítko použít na každé stránce. @@ -3439,53 +3494,53 @@ Accept changes - Potvrdit změny + Přijmout změny This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Toto tlačítko potvrdí současné nastavení a navrátí se do aplikace.<br />Nastavení bude uloženo na disku při ukončení aplikace. + Toto tlačítko přijme současná nastavení a navrátí Vás do aplikace.<br />Nastavení bude uloženo na disk, když z aplikace odejdete. Reject changes - + Odmítnout změny This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Tímto tlačítkem můžete odmítnout nastavované změny a vrátit se do aplikace.<br />Nastavení nebude změněno. + Toto tlačítko odmítne veškeré změny a navrátí Vás do aplikace.<br />Nastavení budou navrácena do původních pozic. Apply changes - Potvrdit změny + Přijmout změny This button will immediately apply all changes. - Toto tlačítko okamžitě provede všechny vybrané změny. + Toto tlačítko okamžitě přijme všechny změny. Undo changes for current page - + Vrátit změny na současné stránce This button will revert any changes done on the current page to the most recent applied settings. - + Toto tlačítko vrátí jakékoliv změny provedené na současné stránce na nejnovější potvrzená nastavení. Restore defaults for current page - + Obnovit výchozí nastavení na současné stránce This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - + Toto tlačítko obnoví výchozí nastavení na současné stránce. Jiné stránky nebudou změněny.<br />Pro obnovení všech nastavení na výchozí, budete muset tlačítko použít na každé stránce. @@ -3519,9 +3574,9 @@ &Heslo - + &Connect - &Připojit + &Připojit Cancel @@ -3558,160 +3613,160 @@ Connecting to %1 - Připojování k %1 + Připojuji se k %1 - - + + Enter username - Zadejte jmého uživatele + Zadejte jméno uživatele - + Adding host %1 - + Přidávám hostitele %1 Servername - + Jméno serveru Hostname - + Jméno hostitele Bonjour name - + Jméno Bonjour Port - + Port Addresses - + Adresy Website - + Internetová stránka Packet loss - + Ztráta paketů Ping (80%) - + Ping (80%) %1 ms - %1 ms + %1 ms Ping (95%) - + Ping (95%) Bandwidth - + Šířka pásma %1 kbit/s - + %1 kbit/s - + &Filters - + &Filtry - + Users - + Uživatelé Version - + Verze Mumble Mumble - + Failed to fetch server list - Selhalo stažení seznamu dostupných serverů + Stažení seznamu serverů selhalo Mumble Server Connect - + Připojení k Serveru Mumble Ping - + Ping Remove from Favorites - + Odstranit z Oblíbených Add custom server - + Přidat vlastní server Show all servers that respond to ping - + Zobrazit všechny servery, které odpovídají na ping Show all servers with users - + Zobrazit všechny servery s uživateli Show all servers - + Zobrazit všechny servery &Copy - + &Kopírovat Copy favorite link to clipboard - + Zkopírovat oblíbený odkaz do schránky &Paste - + &Vložit Paste favorite from clipboard - + Vložit oblíbený odkaz ze schránky Add @@ -3720,38 +3775,38 @@ &Edit... - + &Upravit... &Add New... - + Přid&at Nový... Add to &Favorites - + Přidat do &Oblíbených Open &Webpage - + Otevřít &Internetovou stránku Show &Reachable - + Zobrazit &Dosažitelné Show &Populated - + Zobrazit &Zalidněné Show &All - + Zobrazit &Vše @@ -3759,23 +3814,23 @@ Edit Server - + Upravit Server Name of the server - + Jméno Serveru A&ddress - A&dresa + A&dresa Internet address of the server. Internet address of the server. - + Internetová adresa serveru. @@ -3783,76 +3838,81 @@ Internet address of the server. This can be a normal hostname, an IPv4/IPv6 address or a Bonjour service identifier. Bonjour service identifiers have to be prefixed with a '@' to be recognized by Mumble. <b>Address</b></br> Internet address of the server. This can be a normal hostname, an ipv4/6 address or a bonjour service identifier. Bonjour service identifiers have to be prefixed with a '@' to be recognized by Mumble. - + <b>Adresa</b><br/> +Internetová adresa serveru. To může být normální jméno hostitele, adresa IPv4/IPv6 nebo identifikátor služby Bonjour. Identifikátory služby Bonjour musí mít předponu @, aby je Mumble rozpoznal. &Port - &Port + &Port Port on which the server is listening - + Port, na kterém server posluchá <b>Port</b><br/> Port on which the server is listening. If the server is identified by a Bonjour service identifier this field will be ignored. - + <b>Port</b><br/> +Port, na kterém server poslouchá. Pokud server je identifikován identifikátorem služby Bonjour, toto pole je ignorováno. &Username - &Uživatelské jméno + &Uživatelské jméno Username to send to the server - + Uživatelské jméno, které bude odesláno na server <b>Username</b><br/> Username to send to the server. Be aware that the server can impose restrictions on how a username might look like. Also your username could already be taken by another user. - + <b>Uživatelské jméno</b><br/> +Uživatelské jméno k odeslání na server. Nezapomeňte, že server může předepisovat, jak má uživatelské jméno vypadat. Také může být Vaše uživatelské jméno zabráno jiným uživatelem. Label - + Jmenovka Add Server - + Přidat Server Password - + Heslo Password to send to the server - + Heslo, které bude odesláno na server <b>Password</b><br/> Password to be sent to the server on connect. This password is needed when connecting as <i>SuperUser</i> or to a server using password authentication. If not entered here the password will be queried on connect. - + <b>Heslo</b><br/> +Heslo, které má být odesláno při připojení na server. Toto heslo je potřeba při připojování jako <i>SuperUživatel</i> nebo na server používající ověření heslem. Pokud nezadáno zde, bude o heslo požádáno při připojení. Show password - + Zobrazit heslo <b>Label</b><br/> Label of the server. This is what the server will be named like in your server list and can be chosen freely. - + <b>Jmenovka</b><br/> +Jmenovka serveru. Takto se bude server jmenovat ve Vašem seznamu serverů a může být zvoleno, jak chcete. @@ -3860,7 +3920,7 @@ Default Device - + Vychozí zařízení @@ -3868,69 +3928,69 @@ Mumble Crash Report - + Hlášení o Pádu Mumble <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - + <p><b>Je nám velice líto, ale zdá se, že Mumble se zhroutil. Chcete odeslat hlášení o pádu vývojářům Mumble?</b></p><p>Hlášení o pádu obsahuje částečnou kopii paměti Mumble v době zhroucení, a pomůže vývojářům problém spravit.</p> Email address (optional) - + E-mailová adresa (nepovinné) Please describe briefly, in English, what you were doing at the time of the crash Please briefly describe what you were doing at the time of the crash - + Stručně, prosím, popište v angličtině, co jste dělali v době zhroucení Send Report - + Odeslat Hlášení Don't send report - + Neodesílat hlášení Crash upload successful - + Hlášení úspěšně nahráno Thank you for helping make Mumble better! - + Děkujeme Vám, že jste pomohli Mumble udělat lepším! Crash upload failed - + Nahrávání hlášení selhalo We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - + Je nám velmi líto, ale zdá se že nahrávání hlášení selhalo s chybou %1 %2. Informujte, prosím, vývojáře. This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - + Tohle opravdu není legrační, ale zdá se, že v kódu ohlášení pádu je chyba, a nepodařilo se nám hlášení nahrát. Můžete vývojáře o této chybě informovat %1 - + Uploading crash report - + Nahrávám hlášení o pádu Abort upload - + Zrušit nahrávání @@ -3946,22 +4006,22 @@ Opening chosen DirectSound Input failed. Default device will be used. - Otevírání vybraného vstupu DirectSound selhalo. Bude použito výchozí zařízení. + Otevření vybraného vstupu DirectSound selhalo. Bude použito výchozí zařízení. Default DirectSound Voice Input - Výchozí DirectSound hlasový vstup + Výchozí Hlasový vstup DirectSound Opening chosen DirectSound Input device failed. No microphone capture will be done. - + Otevření vybraného vstupního zařízení DirectSound selhalo. Nebude prováděn záznam mikrofonu. Lost DirectSound input device. - + Ztracené vstupní zařízení DirectSound. @@ -3973,22 +4033,22 @@ Opening chosen DirectSound Output failed. No audio will be heard. - Otevírání vybraného výstupu DirectSound selhalo. Nebude slyšet žádný zvukový výstup. + Otevření vybraného výstupu DirectSound selhalo. Nebude slyšet žádný zvuk. Opening chosen DirectSound Output failed. Default device will be used. - Otevírání vybraného výstupu DirectSound selhalo. Bude použito výchozí zařízení. + Otevření vybraného výstupu DirectSound selhalo. Bude použito výchozí zařízení. Default DirectSound Voice Output - Výchozí DirectSound hlasový výstup + Výchozí Výstup Hlasu DirectSound Lost DirectSound output device. - + Ztracené výstupní zařízení DirectSound. @@ -4060,14 +4120,14 @@ Mumble failed to initialize a database in any of the possible locations. - Mumble nedokazalo inicializovat databázi + Mumble nedokázalo spustit databázi v žádném z možných míst. The database '%1' is read-only. Mumble cannot store server settings (i.e. SSL certificates) until you fix this problem. The database '%1' is read-only. Mumble can not store server settings (ie. SSL certificates) until you fix this problem. - + Databáze %1 je jen pro čtení. Mumble nemůže ukládat nastavení serveru (např. certifikáty SSL), dokud tento problém nevyřešíte. @@ -4080,9 +4140,9 @@ DockTitleBar - + Drag here - + Zde táhněte @@ -4090,62 +4150,62 @@ Shortcuts - + Zkratky List of configured shortcuts - + Seznam nastavených zkratek Function - Funkce + Funkce Data - + Data Shortcut - Zkratka + Zkratka Suppress - + Potlačit Add new shortcut - + Přidá novou zkratku This will add a new global shortcut - + Toto přidá novou globální zkratku &Add - + Přid&at Remove selected shortcut - + Odstraní vybranou zkratku This will permanently remove a selected shortcut. - + Toto navždy odstraní vybranou zkratku. &Remove - Odst&ranit + Odst&ranit @@ -4153,7 +4213,7 @@ Shortcuts - + Zkratky Function @@ -4170,31 +4230,23 @@ Shortcut button combination. - + Tlačítková kombinace zkratky. <b>This is the global shortcut key combination.</b><br />Click this field and then press the desired key/button combo to rebind. Double-click to clear. <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - + <b>Toto je globální klávesová kombinace zkratky.</b><br />Klikněte na toto pole a pak zmáčkněte požadovanou kombinaci kláves/tlačítek pro znovu svázání. Klikněte dvakrát pro vyčištění. Suppress keys from other applications - + Potlačit klávesy z jiných aplikací <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - + <b>Toto skryje stisknutí tlačítek před ostatními aplikacemi.</b><br />Zapnutí tohoto skryje tlačítko (nebo poslední tlačítko vícetlačítkové kombinace) před jinými aplikacemi. Nezapomeňte, že ne všechny tlačítka mohou být potlačena. @@ -4202,82 +4254,82 @@ Whisper Target - + Šeptat Cíl Whisper to list of Users - + Šeptat seznamu Uživatelů Channel Target - + Cílový Kanál Restrict to Group - + Omezit na Skupinu If specified, only members of this group will receive the whisper. - + Pokud zadáno, pouze členové této skupiny šepot dostanou. List of users - + Seznam Uživatelů Add - Přidat + Přidat Remove - Odstranit + Odstranit Modifiers - + Modifikátory Do not send positional audio information when using this whisper shortcut. - + Neposílat informace pozičního zvuku, když používáte zkratku šeptání. Ignore positional audio - + Ignorovat poziční zvuk Shout to Linked channels - + Křičet do propojených kanálů Shout to subchannels - + Křičet do podkanálů Shout to Channel - + Křičet do Kanálu The whisper will also be transmitted to linked channels. - + Šepot bude také vysílán do propojených kanálů. The whisper will also be sent to the subchannels of the channel target. - + Šepot bude také odeslán do podkanálů cílového kanálu. @@ -4306,9 +4358,9 @@ GlobalShortcutX - + Mouse %1 - + Myš %1 @@ -4339,7 +4391,7 @@ Not connected - + Nepřipojeno @@ -4347,27 +4399,27 @@ Enable this device - + Povolit toto zařízení LCD - + LCD Form - Písmo + Formulář Devices - + Zařízení Name - Jméno + Jméno @@ -4377,67 +4429,74 @@ This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> <h3>Enabled:</h3> <p>This decides whether Mumble should draw to a particular LCD device.</p> - + <p>Toto je seznam dostupných LCD zařízení ve Vašem systému. Zařízení jsou zobrazena podle názvu, ale také je zde velikost obrazovky. Mumble podporuje výstup obrazu do několika zařízení LCD najednou.</p> +<h3>Velikost:</h3> +<p> +Toto pole popisuje velikost LCD zařízení. Velikost je udávána buď v pixelech (pro Grafická LCD), nebo ve znacích (pro Znaková LCD).</p> +<h3>Povoleno:</h3> +<p>Toto rozhoduje, zda-li má Mumble do konkrétního LCD zařízení vykreslovat.</p> Size - + Velikost Enabled - + Povoleno Views - + Zobrazení Minimum Column Width - + Minimální Šířka Sloupce <p>This option decides the minimum width a column in the User View.</p> <p>If too many people are speaking at once, the User View will split itself into columns. You can use this option to pick a compromise between number of users shown on the LCD, and width of user names.</p> - + <p>Tato volba rozhoduje o minimální šířce sloupce v Zobrazení Uživatelů.</p> +<p>Pokud mluví najednou příliš mnoho lidí, Zobrazení Uživatelů se rozdělí na dva sloupce. Tuto volbu můžete použít, pro vybrání kompromisu mezi počtem uživatelů, zobrazených na LCD, a šířkou jmen uživatelů.</p> + This setting decides the width of column splitter. - + Toto nastavení rozhoduje o šířce separátoru sloupce. Splitter Width - + Šířka Separátoru Log - + Debug - Debug + Ladění Critical - Critical + Kritické Warning - Warning + Varování Information - Information + Informace @@ -4468,12 +4527,12 @@ You self-muted/deafened - Zakázal jste si možnost hovoru/poslechu + Sami jste se ztlumili/ohlušili Other self-muted/deafened - Uživatel si vypnul mluvení/poslech + Ostatní se ztlumili/ohlušili Player muted (you) @@ -4498,7 +4557,7 @@ Permission Denied - K provedení akce chybí potřebné oprávnění + Oprávnění zamítnuto @@ -4512,149 +4571,150 @@ User Joined Server - + Uživatel Se Připojil Na Server User Left Server - + Uživatel Odešel Ze Serveru User recording state changed - + Stav nahrávání uživatele změněn User kicked (you or by you) - + Uživatel vykopnut (Vás nebo Vámi) User kicked - + Uživatel vykopnut User muted (you) - + Uživatel ztlumil Vás User muted (by you) - + Uživatel ztlumen (Vámi) User muted (other) - + Uživatel ztlumen (jiné) User Joined Channel - + Uživatel vstoupil do kanálu User Left Channel - + Uživatel odešel z kanálu - + the server - + server [[ Text object too large to display ]] - + [[ Textový objekt je příliš velký pro zobrazení ]] [Date changed to %1] - + [Datum změněno na %1] + link to %1 - + odkaz na %1 ftp link to %1 - + ftp odkaz na %1 player link - + odkaz hráče channel link - + odkaz kanálu %1 link - + odkaz %1 LogConfig - + Toggle console for %1 events - + Zapnout konzoli pro události %1 Toggle pop-up notifications for %1 events - + Zapnout vyskakující oznamení pro události %1 Toggle Text-To-Speech for %1 events - + Zapnout Text-Na-Řeč pro události %1 Click here to toggle sound notification for %1 events - + Klikněte zde pro zapnutí oznámení zvukem pro události %1 Path to sound file used for sound notifications in the case of %1 events<br />Single click to play<br />Double-click to change - + Cesta k zvukovému souboru, který bude použit pro oznámení zvukem v případě událostí %1<br />Jednou klikněte pro přehrání<br />Dvakrát pro změnu Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - + Klikněte zde pro zapnutí výstupu konzole pro události %1.<br />Je-li zaškrtnuto, tato volba donutí Mumble vypsat všechny události %1 v záznamu zpráv. Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - + Klikněte zde pro zapnutí vyskakujících oznámení pro události %1. <br />Je-li zaškrtnuto, vyskakující oznámení bude Mumblem vytvořeno pro každou událost %1. Path to sound file used for sound notifications in the case of %1 events.<br />Single click to play<br />Double-click to change<br />Ensure that sound notifications for these events are enabled or this field will not have any effect. - + Cesta k zvukovému souboru, který bude použit pro oznámení zvukem v případě událostí %1.<br />Jednou klikněte pro přehrání<br />Dvakrát pro změnu<br />Ujistěte se, že oznámení zvukem jsou pro tyto události povoleny, nebo toto pole nebude mít žádný účinek. Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for sound files. Text-To-Speech and sound files cannot be used at the same time. Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - + Klikněte zde pro zapnutí Textu-Na-Řeč pro události %1.<br />Je-li zaškrtnuto. Mumble použije Text-Na-Řeč, aby Vám události %1 nahlas přečetl. Text-Na-Řeč je také schopen přečíst obsah události, což není tak pravda pro zvukové soubory. Text-Na-Řeč a zvukové soubory nemůžou být používány najednou. Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a sound file predefined by you to indicate %1 events. Sound files and Text-To-Speech cannot be used at the same time. Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - + klikněte zde pro zapnutí oznámení zvukem pro události %1.<br />Je-li zaškrtnuto, Mumble použije zvukový soubor Vámi přednastavený, pro signalizaci událostí %1. Zvukové soubory a Text-Na-Řeč nemůžou být použity najednou. @@ -4664,7 +4724,7 @@ Console - Konsola + Konzole TTS @@ -4681,7 +4741,7 @@ Text To Speech - Čtení textu nahlas + Text na Řeč @@ -4691,72 +4751,102 @@ Volume of Text-To-Speech Engine - Hlasitost čtení textu nahlas + Hlasitost Textu-Na-Řeč <b>This is the volume used for the speech synthesis.</b> - <b>Hlasitost pro hlasovou syntézu</b> + <b>Toto je hlasitost použitá pro syntézu hlasu.</b> Length threshold - Maximální délka + Maximální Délka Message length threshold for Text-To-Speech Engine - Maximální délka zprávy pro přečtení hlasovým systémem + Maximální délka zprávy pro Text-Na-Řeč <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Toto je maximální délka zprávy pro čtení</b><br />Zprávy delší než tento limit nebudou přečteny v celé svojí délce. + <b>Toto je maximální délka zprávy použitá Textem-Na-Řeč.</b><br />Zprávy delší než tento limit nebudou nahlas přečteny v celé svojí délce. + + + + If enabled text messages you send will be read back to you with TTS + Pokud zapnuto, textové zprávy, které odesíláte, Vám budou přečteny zpátky pomocí Textu-Na-Řeč + + + + Read back own messages + Vlastní zprávy přečíst zpět Whisper - + Šepot If checked you will only hear whispers from users you added to your friend list. - + Je-li zaškrtnuto, šepoty budete slyšet pouze od uživatelů, které jste přidali na seznam přátel. Only accept whispers from friends - + Šepoty přijímat pouze od přátel + + + + Chat Log + Záznam chatu + + + + Maximum chat length + Maximální délka chatu + + + + Unlimited + Neomezená + + + + Lines + Řádků Message - + Zpráva Notification - + Oznámení Text-To-Speech - + Text-Na-Řeč Soundfile - + Zvukový soubor Path - + Cesta Characters - + Znaků @@ -4769,23 +4859,23 @@ Look and Feel - Vzhled a motivy + Styl vzhledu System default - Podle výchozího nastavení systému + Výchozí nastavení systému Language to use (requires restart) - Jazyk pro uživatelské rozhraní (vyžaduje restart) + Který jazyk použít (vyžaduje restart) <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Nastaví jazyk, který má aplikace Mumble používat.</b><br />Musíte restartovat Mumble, aby se změna projevila. + <b>Nastaví jazyk, který má aplikace Mumble použít.</b><br />Pro použití nového jazyka musíte Mumble restartovat. @@ -4795,38 +4885,38 @@ Layout - + Rozvržení Classic - + Klasické Stacked - + Na sobě Hybrid - + Smíšené Custom - + Vlastní This changes the behavior when moving channels. - + Toto změní chování při přesunu kanálů. This sets the behavior of channel drags; it can be used to prevent accidental dragging. <i>Move</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. This sets the behavior of channel drags; it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - + Toto nastavuje chování při táhnutí kanálů; může být použito pro zabránění neúmyslného táhnutí. <i>Přesunout</i> přesune kanály bez potvrzení. <i>Nedělat nic</i> nic neudělá a vypíše chybovou zprávu. <i>Zeptat se</i> použije rámeček se zprávou pro potvrzení, jetli opravdu chcete kanál přesunout. @@ -4836,7 +4926,7 @@ <b>This sets the basic look and feel to use.</b> - <b>nastaví základní styl vzhledu aplikace.</b> + <b>Toto nastaví základní styl vzhledu aplikace.</b> @@ -4850,17 +4940,17 @@ Show number of users in each channel - + Zobrazí počet uživatelů v každém kanále Show channel user count - + Zobrazit počet uživatelů kanálu Skin file to use - Soubor motivu, který se bude používat + Soubor motivu, který má být použit <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. @@ -4901,7 +4991,7 @@ User Interface - Rozhraní + Uživatelské Rozhraní @@ -4911,7 +5001,7 @@ <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - + <b>Toto nastaví, který motiv by měl Mumble použít.</b><br />Motiv je soubor se stylem použitý navrch základního stylu grafické komponenty. Pokud ve stejném adresáři jako stylopis existují ikony, tak nahradí výchozí ikony. Form @@ -4920,182 +5010,182 @@ None - + Žádný All - + Všechny Expand - + Zvětšit When to automatically expand channels - + Kdy automaticky zvětšit kanály Only with users - + Pouze s uživateli Ask - + Zeptat se Do Nothing - + Nedělat Nic Move - + Přesunout Channel Dragging - + Táhnutí Kanálů Ask whether to close or minimize when quitting Mumble. - + Zeptat se, jestli zavřít či minimalizovat při ukončení Mumble. Ask on quit while connected - + Zeptat se na ukončení, je-li připojeno Always On Top - + Vždy Nahoře <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - + <b>Je-li nastaveno, minimalizováním hlavního okna Mumble, způsobí, že je skryt a přístupný pouze z hlavního panelu. Jinak bude minimalizován jako normální okno.</b> This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with users</i> will expand and collapse channels as users join and leave them. - + Toto nastavuje, který kanál má být automaticky rozšířen. <i>Žádný<i/> a <i>Všechny</i> rozšíří žádný nebo všechny kanály, zatímco <i>Pouze s uživateli</i> rozšíří a zúží kanály, jak uživatelé přicházejí a odcházejí. List users above subchannels (requires restart). - + Zobrazí uživatele nad podkanály (vyžaduje restart). <b>If set, users will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - + <b>Je-li nastaveno, uživatelé budou zobrazeni nad podkanály v zobrazení kanálů.</b><br />Pro zobrazení změny je vyžadován restart Mumble. Users above Channels - + Uživatelé nad Kanály <b>If set, will verify you want to quit if connected.</b> - + <b>Je-li nastaveno, potvrdí, zda chcete odejít, pokud jste připojeni.</b> Hide in tray when minimized - + Při minimalizaci skrýt do hlavního panelu Hide the main Mumble window in the tray when it is minimized. - + Skryje hlavní okno Mumble při minimalizaci do hlavního panelu. This setting controls when the application will be always on top. - + Toto nastavení kontroluje kdy je aplikace vždy nahoře. Never - + Nikdy Always - + Vždy In minimal view - + V minimálním zobrazení In normal view - + V normálním zobrazení Displays talking status in system tray - + Zobrazí stav mluvení v hlavním panelu Show talking status in tray icon - + Zobrazit stav mluvení v ikoně hlavního panelu This setting controls in which situations the application will stay always on top. If you select <i>Never</i> the application will not stay on top. <i>Always</i> will always keep the application on top. <i>In minimal view</i> / <i>In normal view</i> will only keep the application always on top when minimal view is activated / deactivated. - + Toto nastavení kontroluje, v kterých situacích aplikace zůstane vždy nahoře. Pokud zvolíte <i>Nikdy</i> aplikace nikdy nezůstane nahoře. <i>Vždy</i> zůstane aplikace nahoře vždycky. <i>V minimálním zobrazení</i> / <i>V normálním zobrazení</i> ponechá aplikaci vždy nahoře, když minimální zobrazení je zapnuto / vypnuto. Show context menu in menu bar - + Zobrazit kontextové menu v liště menu Apply some high contrast optimizations for visually impaired users - + Použít některé vysoko kontrastní optimalizace pro zrakově postižené uživatele Optimize for high contrast - + Optimalizovat pro vysoký kontrast Application - + Aplikace Adds user and channel context menus into the menu bar - + Přidá kontextové menu uživatel a kanál do lišty s menu Tray Icon - + Ikona hlavního panelu Channel Tree - + Strom kanálů &Browse... - + &Procházet... @@ -5106,15 +5196,20 @@ Vítejte v aplikaci Mumble. + + Skipping version check in debug mode. + V režimu ladění přeskakuji kontrolu verze. + + - + Root Kořen &Quit Mumble - &Ukončit + &Ukončit Mumble @@ -5139,7 +5234,7 @@ Open the server connection dialog - Otevřít dialog nastavení spojení se serverem + Otevřít dialogové okno spojení se serverem Shows a dialog of registered servers, and also allows quick connect. @@ -5148,7 +5243,7 @@ &Disconnect - &Odpojit + O&dpojit @@ -5158,7 +5253,7 @@ Disconnects you from the server. - Odpojí k serveru otevřená spojení. + Odpojí Vás od serveru. @@ -5168,17 +5263,17 @@ Edit ban lists on server - Upravit seznam banů + Upravit seznam zákazů na serveru This lets you edit the server-side IP ban lists. - Tady můžete upravit seznam banů (zakázaných ip adres) pro server. + Toto Vám umožní upravit seznamy zakázaných IP adres na straně serveru. &Kick - &Vykopnout + Vy&kopnout Kick player (with reason) @@ -5191,7 +5286,7 @@ &Ban - Zákaz (&ban) + Z&akázat Kick and ban player (with reason) @@ -5204,7 +5299,7 @@ &Mute - Vypnout &mluvení + Ztlu&mit Mute player @@ -5217,7 +5312,7 @@ &Deafen - Zakázat &poslouchání + O&hlušit Deafen player @@ -5230,7 +5325,7 @@ &Local Mute - Lokální um&lčení + Místní Zt&lumení Mute or unmute player locally. @@ -5243,7 +5338,7 @@ Send a Text Message - Odeslat textovou zprávu + Poslat textovou zprávu @@ -5253,7 +5348,7 @@ &Add - &Přidat + Přid&at @@ -5263,7 +5358,7 @@ This adds a new sub-channel to the currently selected channel. - Přidá nový kanál do vybraného kanálu. + Toto přidá nový podkanál do současně vybraného kanálu. @@ -5278,7 +5373,7 @@ This removes a channel and all sub-channels. - Odstraní kanál a všechny jeho podkanály. + Toto odstraní kanál a všechny podkanály. &Edit ACL @@ -5292,7 +5387,7 @@ This opens the Group and ACL dialog for the channel, to control permissions. - Otevře dialogové okno skupin a ACL daného kanálu. Zde se mohou nastavit oprávnění k určitým operacím. + Toto otevře dialogové okno skupin a ACL daného kanálu, pro kontrolu oprávnění. @@ -5302,7 +5397,7 @@ Link your channel to another channel - Propojí současný kanál s kanálem označeným kurzorem + Propojí současný kanál s jiným kanálem This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. @@ -5315,88 +5410,88 @@ This is the chatbar<br />If you enter text here and then press enter the text is sent to the user or channel that was selected. If nothing is selected the message is sent to your current channel. - + Toto je chatová lišta<br />Pokud zde zadáte text a pak zmáčknete enter, tex je poslán zvolenému uživateli nebo kanálu. Pokud nic není zvoleno, zpráva bude poslána do současného kanálu. Chatbar - + Chatová lišta Shows a dialog of registered servers, and also allows quick-connect. - + Zobrazí dialogové okno registrovaných serverů, a také umožňuje rychlé připojení. Kick user (with reason) - + Vykopnout uživatele (s důvodem) Kick selected user off server. You'll be asked to specify a reason. - + Vykopne vybraného uživatele ze serveru. Budete požádáni o udání důvodu. Mute user - + Zeslabit uživatele Mute or unmute user on server. Unmuting a deafened user will also undeafen them. - + Ztlumit nebo zesílit uživatele na serveru. Zesílení ohlušeného uživatele také zruší jejich ohlušení. Kick and ban user (with reason) - + Vykopnout a zakázat uživatele (s důvodem) Kick and ban selected user from server. You'll be asked to specify a reason. - + Vykopnout a zakázat uživatele na serveru. Budete požádáni o udání důvodu. Deafen user - + Ohlušit uživatele Deafen or undeafen user on server. Deafening a user will also mute them. - + Ohluší nebo zruší ohlušení uživatele na serveru. Ohlušením jsou uživatelé také ztlumeni. Mute user locally - + Ztlumit uživatele místně Mute or unmute user locally. Use this on other users in the same room. - + Ztlumit nebo zesílit uživatele místně. Toto použijte na ostatní uživatele ve stejné místnosti. &Edit - + &Upravit This links your current channel to the selected channel. If users in a channel have permission to speak in the other channel, users can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. This links your current channel to the selected channel. If they have permission to speak in the other channel, users can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - + Toto propojí Váš současný kanál s vybraným. Pokud mají uživatelé v kanálu oprávnění mluvit v druhém kanálu, mohou se teď navzájem sloučit. Toto je trvalé propojení, a bude trvat do doby, než budou ručně rozpojeni nebo server restartován. Prohlédněte si, prosím, zkratky pro zmáčknutí k propojení. Unlink your channel from another channel - Zruší propojení současného a zvoleného kanálu + Rozpojit Váš kanálu od jiného kanálu This unlinks your current channel from the selected channel. - Zruší propojení mezi současným a vybraným kanálem. + Rozpojí Váš současný kanál od vybraného kanálu. Unlink &All @@ -5405,72 +5500,72 @@ Unlinks your channel from all linked channels. - Zruší propojení sučasného kanálu ke všem kanálům s ním spojeným. + Rozpojí Váš kanál od všech propojených kanálů. This unlinks your current channel (not the selected one) from all linked channels. - Zruší propojení mezi současným kanálem uživatele a všech kanálů, které jsou s tímto kanálem propojeny. + Toto rozpojí Váš současný kanál (ne ten vybraný) od všech propojených kanálů. &Reset - &Resetovat audio + &Resetovat Reset audio preprocessor - Resetuje zvukový preprocesor + Resetovat preprocesor This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Resetuje zvukový preprocesor, včetně rušení šumu, automatické hlasitosti a detekce hlasové aktivity. Pokud se nějak náhle zhorší zvukové prostředí (například při upuštění mikrofonu na stůl) a příčina problémů odezní, jde tak rychle znovunastavit rozumné hodnoty. + Toto resetuje zvukový preprocesor, včetně rušení šumu, automatického získání hlasitosti a detekce hlasové aktivity. Pokud něco náhle zhorší zvukové prostředí (například mikrofon upadne) a je to pouze dočasné, použijte toto, abyste se vyhnuli čekáním, až se preprocesor přizpůsobí. &Mute Self - Vypnout si &mluvení + &Zeslabit se Mute yourself - Zakázat si mluvení + Zeslabit se Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Zakázat/povolit si mluvení. Když je zakázáno mluvení, neposílají se na server žádná zvuková data. Povolením mluvení se zároveň zapína poslech. + Zeslabit/zesílit sám sebe. Když jste zeslabeni, neposíláte žádná data na server. Zesílením při ohlušení zároveň ohlušení zrušíte. &Deafen Self - Vypnout si &poslech + &Ohlušit se Deafen yourself - Vypnout si poslech + Ohlušit se Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Vypnout si poslech. Tak neuslyšíte komunikaci. Vypnutí poslechu automaticky zároveň zakáže mluvení. + Ohlušit sám sebe nebo zrušit ohlušení. Když jste ohlušeni, tak nic neuslyšíte. Ohlušením se také zeslabíte. &Text-To-Speech - Výstup &textu do hlasové syntézy + &Text-Na-Řeč Toggle Text-To-Speech - Přepnout výstup textu do hlasové syntézy + Zapnout Text-Na-Řeč Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Povolí nebo zakáže převod textu na počítačem mluvený hlas. Budou přečtena pouze textová hlášení, u kterých je to nastaveno v konfiguračním dialogu. + Zapnout nebo vypnout text-na-řeč. Pouze zprávy povolené pro text-na-řeč v dialogovém okně nastavení budou přečteny. S&tatistics @@ -5479,27 +5574,27 @@ Display audio statistics - Zobrazí zvukovou statistiku + Zobrazit statistiku zvuku Pops up a small dialog with information about your current audio input. - Vyskočí malé okénko s informacemi o současném audio vstupu. + Vyskočí malé dialogové okno s informacemi o současném zvukovém vstupu. Forcibly unlink plugin - Násilně odstraň plugin + Násilně odpojit zásuvný modul This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Násilně udpojí současný plugin, což může být užitečné, pokud čte a zpracovává úplně chybný data. + Toto násilně donutí zásuvný modul k odpojení, což je užitečné, pokud načítá naprosto špatná data. &Settings - &Nastavení + Na&stavení @@ -5509,22 +5604,22 @@ Allows you to change most settings for Mumble. - Nastavení většiny možností. + Umožňuje Vám změnit většinu nastavení Mumble. &Audio Wizard - &Zvukový Wizard + &Průvodce Zvukem Start the audio configuration wizard - Spustí zvukový Wizard pro nastavení + Spustit průvodce nastavením zvuku This will guide you through the process of configuring your audio hardware. - Tohle vás provede zkrze proces konfigurace zvukového hardware. + Toto Vás provede skrz proces nastavení Vašeho hardware zvuku. @@ -5534,17 +5629,17 @@ Enter What's This? mode - Vstoupí do režimu "co je tohle?" + Vstoupit do režimu "Co je To?" Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Klikněte pro vsoupení do režimu "Co je tohle?" Váš kurzor se změní na otazník. Jakmile máte tlačítko, výběr menu nebo cokoliv co chcete ukázat. + Klikněte pro vstoupení do režimu "Co je To?" Váš kurzor se změní na otazník. Klikněte na jakékoli tlačítko, volbu menu nebo oblast pro zobrazení popisu co je to zač. &About - &O aplikaci + O &aplikaci @@ -5554,120 +5649,117 @@ Shows a small dialog with information and license for Mumble. - Ukáže okno s informacemi a licenčním ujednáním pro používání Mumble. - - - + Zobrazí malé dialogové okno s informacemi a licencí pro Mumble. About &Speex - O kodeku &Speex + O &Speex Information about Speex - Informace o kodeku Speex + Informace o Speex Shows a small dialog with information about Speex. - Ukáže informace o použitém kodeku Speex. + Zobrazí malé dialogové okno s informacemi o Speex. &Change Comment - + Změnit &Komentář Configure certificates for strong authentication - + Nastavit certifiákaty pro silné ověření This starts the wizard for creating, importing and exporting certificates for authentication against servers. - + Toto spustí průvodce pro vytvoření, importování a exportování certifikátu pro ověření pomocí serverů. Register user on server - + Registrovat uživatele na serveru This will permanently register the user on the server. - + Toto natrvalo registruje uživatele na serveru. Add &Friend - + &Přidat Přítele Adds a user as your friend. - + Přidá uživatele jako Vašeho přítele. This will add the user as a friend, so you can recognize him on this and other servers. - + Toto přidá uživatele jako přítele, takže ho můžete rozpoznat na tomto a dalších serverech. &Remove Friend - + Odst&ranit Přítele Removes a user from your friends. - + Odstraní uživatele z Vašich přátel. This will remove a user from your friends list. - + Toto odstraní uživatele ze seznamu Vašich přátel. &Update Friend - + Akt&ualizovat Přítele Update name of your friend. - + Aktualizovat jméno Vašeho přítele. Your friend uses a different name than what is in your database. This will update the name. - + Váš přítel používá jiné jméno, než jaké je ve Vaši databázi. Toto jméno aktualizuje. Registered &Users - + Registrovaní &Uživatelé Edit registered users list - + Upravit seznam registrovaných uživatelů This opens the editor for registered users, which allow you to change their name or unregister them. - + Toto otevře editor pro registrované uživatele, což Vám dovolí měnit jejich jména nebo zrušit jejich registraci. &Access Tokens - + Zn&aky Přístupu Add or remove text-based access tokens - + Přidá nebo odstraní textové znaky přístupu &About Qt @@ -5676,34 +5768,34 @@ Information about Qt - Informace o knihovně Qt + Informace o Qt Shows a small dialog with information about Qt. - Ukáže dialogové okno s informacemi o knihovně QT. + Zobrazí malé dialogové okno s informacemi o QT. Check for &Updates - Zjistit &dostupnost nové verze + Zkontrolovat akt&ualizace Check for new version of Mumble - Ověřit dostupnost nových verzí aplikace Mumble + Zkontroluje aktualizace Mumble Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Připojí se k webové stránce Mumble pro zjištění případné dostupnosti novějších verzí a vypíše vhodný odkaz na stažení, pokud je nová verze k dispozici. + Připojí se k webové stránce Mumble pro zjištění, je-li nová verze dostupná, a oznámí Vám to vhodným odkazem na stažení, pokud tomu opravdu tak je. - + - + Mumble -- %1 - Mumble =- %1 + Mumble -- %1 Log of messages @@ -5712,7 +5804,7 @@ This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Zobrazuje nedávné aktivity, jako např. připojování k serverům, chyby a informační zprávy.<br /> V nastavení jde určit, které z těchto zpráv se mají či nemají zobrazovat. + Toto zobrazí nedávnou aktivitu. Připojování k serverům, chyby a informační zprávy jsou všechny zobrazeny zde.<br /> Abyste přesně nastavili, které zprávy se zde zobrazí, použijte z menu příkaz <b>Nastavení</b>. &Server @@ -5723,9 +5815,9 @@ &Uživatel - + &Channel - &Kanál + &Kanál &Audio @@ -5739,10 +5831,10 @@ &Help - &Pomoc + &Nápověda - + Push-to-Talk Global Shortcut Mluvení při stisku klávesy @@ -5751,19 +5843,19 @@ Push and hold this button to send voice. Global Shortcut - + Zmáčkněte a držte toto tlačítko pro odeslání hlasu. This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. Global Shortcut - + Toto nastaví tlačítko pro mluvení při stisku klávesy, dokavaď budete tlačítko držet, budete zvuk vysílat. Reset Audio Processor Global Shortcut - Resetovat zvukový procesor + Resetovat Zvukový Procesor Toggle Mute Self @@ -5779,7 +5871,7 @@ Unlink Plugin Global Shortcut - Odpojit Plugin + Odpojit Zásuvný Modul Force Center Position @@ -5800,7 +5892,7 @@ Push-to-Mute Global Shortcut - Zakázat si mluvení při stisku klávesy + Ztlumení při stisku klávesy @@ -5812,13 +5904,13 @@ Toggle Overlay Global Shortcut - Přepnout Overlay + Zapnout Překryv Toggle state of in-game overlay. Global Shortcut - + Přepnout stav překryvu ve hře. Alt Push-to-Talk @@ -5826,9 +5918,9 @@ Alternativní klávesa pro mluvení - + Reconnecting. - Opětovné připojování. + Znovu se připojuji. Kicking player %1 @@ -5855,15 +5947,15 @@ - + - + To %1: %2 Pro %1: %2 - - + + Message to %1 Zpráva pro %1 @@ -5877,44 +5969,44 @@ Název kanálu - + Are you sure you want to delete %1 and all its sub-channels? - Opravdu chcete odstranit kanál %1 včetně všech jeho podkanálů? + Jste si jisti, že chcete odstranit kanál %1 a všechny jeho podkanály? - + Unmuted and undeafened. - Opět schopen slyšet a mluvit. + Zrušeno ohlušení a zesílen. Unmuted. - Opět schopen mluvit. + Zesílen. Muted. - Zakázáno mluvení. + Zeslaben. Muted and deafened. - Zakázáno mluvit a poslouchat. + Zeslaben a ohlušen. Deafened. - Vypnut poslech. + Ohlušen. Undeafened. - Opět schopen slyšet. + Ohlušení zrušeno. About Qt - O knihovně Qt + O Qt Joining %1. @@ -5925,24 +6017,24 @@ Připojen k serveru. - + Server connection failed: %1. Připojování k serveru selhalo: %1. Invalid username - Špatné jméno uživatele + Neplatné jméno uživatele You connected with an invalid username, please try another one. - Připojujete se s nesprávným jménem uživatele, prosím zkuste nějaké jiné. + Připojili jste se s neplatným uživatelským jménem, zkuste jiné, prosím. That username is already in use, please try another username. - Toto uživatelské jméno je již používáno, prosím zkuste nějaké jiné. + Toto uživatelské jméno se již používá, zkuste jiné, prosím. @@ -5952,17 +6044,17 @@ Wrong password for registered users, please try again. - Špatné heslo registrovaného uživatele, prosím zkuste znova. + Špatné heslo registrovaného uživatele, prosím zkuste znovu. Wrong server password for unregistered user account, please try again. - Špatné heslo serveru pro neregistrované uživatele, prosím zkuste znova. + Špatné heslo serveru pro účet neregistrovaného uživatele, prosím zkuste znovu. Disconnected from server. - Spojení se serverem bylo zrušeno. + Odpojeno od serveru. Joined server: %1. @@ -5975,17 +6067,17 @@ %1 is now muted and deafened. - %1 má zakázáno mluvit a poslouchat. + %1 je nyní zeslaben a ohlušen. %1 is now muted. - %1 má zakázáno mluvit. + %1 je nyní zeslaben. %1 is now unmuted. - %1 je nyní schopen mluvit. + %1 je nyní zesílen. server @@ -5994,33 +6086,33 @@ You were muted by %1. - %1 Vám zakázal mluvit. + %1 Vás zeslabil. You were unmuted by %1. - Vrácena schopnost mluvit od %1. + %1 Vás zesílil. %1 muted by %2. - %2 zakázal mluvit uživateli %1. + %2 zeslabil %1. %1 unmuted by %2. - %1 získává schopnost mluvit od %2. + %1 zesílil %2. You were muted and deafened by %1. You were deafened by %1. - Bylo vám vypnut poslech uživatelem %1. + %1 Vás zeslabil a ohlušil. You were undeafened by %1. - Byla Vám vrácena schopnost slyšet od %1. + %1 zrušil Vaše ohlušení. %1 deafened by %2. @@ -6029,32 +6121,32 @@ %1 undeafened by %2. - %1 byla vlrácena schopnost slyšet od %2. + %1 zrušil ohlušení uživatele %2. You were kicked from the server by %1: %2. - Byl jste vykopnut ze serveru od %1: %2. + Byli jste vykopnuti ze serveru uživatelem %1: %2. %3 was kicked from the server by %1: %2. - %3 byl vykopnut ze serveru od %1: %2. + %3 byl vykopnut ze serveru uživatelem %1: %2. You were kicked and banned from the server by %1: %2. - Byl jste vykopnut a dostal jste ban (zákaz) od %1: %2. + Byli jste vykopnuti a zakázáni uživatelem %1: %2. %3 was kicked and banned from the server by %1: %2. - %3 byl vykopnut a dostal ban (zákaz) od %1: %2. + %3 byl vykopnut a zakázán uživatelem %1: %2. You were moved to %1 by %2. - + Byli jste přesunuti do %1 uživatelem %2. %1 left channel. @@ -6076,224 +6168,224 @@ Server connection rejected: %1. - Spojení se serverem bylo odmítnuto: %1. + Spojení se serverem odmítnuto: %1. Welcome message: %1 - + Uvítací zpráva: %1 Mumble: %1 - + Mumble: %1 You were denied %1 privileges in %2. - + Byli Vám zamítnuty výsady %1 v %2. %3 was denied %1 privileges in %2. - + %3 byly zamítnuty výsady %1 v %2. Denied: Cannot modify SuperUser. - + Zamítnuto: Nelze změnit SuperUživatele. Denied: Invalid channel name. - + Zamítnuto: Neplatné jméno kanálu. Denied: Text message too long. - + Zamítnuto: Textová zpráva je příliš dlouhá. Denied: Operation not permitted in temporary channel. - + Zamítnuto: Operace není v dočasném kanálu povolena. You need a certificate to perform this operation. - + K provedení této operace potřebujete certifikát. %1 does not have a certificate. - + %1 nemá certifikát. Invalid username: %1. - + Neplatné uživatelské jméno: %1. Invalid username. - + Neplatné uživatelské jméno. Channel is full. - + Kanál je plný. Denied: %1. - Zakázano: %1. + Zamítnuto: %1. Permission denied. - + Oprávnění zamítnuto. Recording started - + Nahrávání spuštěno Recording stopped - + Nahrávání zastaveno %1 started recording. - + %1 začal nahrávat. %1 stopped recording. - + %1 přestal nahrávat. You were unmuted and undeafened by %1. - + %1 Vás zesílil a zrušil Vaše ohlušení. You were suppressed. You were suppressed by %1. - + Byli jste potlačeni. You were unsuppressed. - + Vaše potlačení bylo zrušeno. You were unsuppressed by %1. - + Vaše potlačení bylo zrušeno uživatelem %1. You muted %1. - + Zeslabili jste %1. You suppressed %1. - + Potlačili jste %1. You unsuppressed %1. - + Zrušili jste potlačení uživatele %1. You unmuted %1. - + Zesílili jste %1. %1 connected. - + %1 se připojil. You muted and deafened %1. - + Zeslabili a ohlušili jste uživatele %1. You unmuted and undeafened %1. - + Zesílili jste a zrušili ohlušení uživatele %1. You undeafened %1. - + Zrušili jste ohlušení uživatele %1. %1 muted and deafened by %2. - + %1 byl zeslaben a ohlušen uživatelem %2. %1 unmuted and undeafened by %2. - + %1 byl zesílen a zbaven ohlušení uživatelem %2. %1 suppressed by %2. - + %1 potlačen uživatelem %2. %1 unsuppressed by %2. - + %1 byl zbaven potlačení uživatelem %2. %1 moved to %2. - + %1 přesunut do %2. %1 moved to %2 by %3. - + %1 přesunut do %2 uživatelem %3. %1 moved in from %2 by %3. - + %1 přesunut z %2 uživatelem %3. %1 is recording - + %1 nahrává %1 disconnected. - + %1 odpojen. (Tree) - + (Strom) (Channel) - + (Kanál) %2%1: %3 - + %2%1: %3 From %1: %2 @@ -6302,466 +6394,456 @@ Message from %1 - + Zpráva od %1 Unable to find matching CELT codecs with other clients. You will not be able to talk to all users. - + Nelze nalézt odpovídající kodeky CELT s ostatními klienty. Nebudete schopni mluvit ke všem uživatelům. &Information - + &Informace Show information about the server connection - + Zobrazit informace o připojení k serveru This will show extended information about the connection to the server. - + Toto zobrazí podrobné informace o připojení k serveru. - + Opening URL %1 - + Otevírám URL %1 File does not exist - + Soubor neexistuje File is not a configuration file. - + Soubor není soubor nastavení. Settings merged from file. - + Nastavení sloučena ze souboru. URL scheme is not 'mumble' - + Schéma URL není 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 - + Tato verze Mumble neumí pracovat s URL pro verzi Mumble %1.%2.%3 Connecting to %1 - Připojování k %1 + Připojuji se k %1 Enter username - Zadejte jmého uživatele + Zadejte jméno uživatele Connecting to server %1. - + Připojuji se k serveru %1. Change your comment - + Změnit Váš komentář <h2>Version</h2><p>Protocol %1.%2.%3.</p> - + <h2>Verze</h2><p>Protokol %1.%2.%3.</p> <p>No build information or OS version available.</p> - + <p>Nejsou dostupné žádné informace o sestavení nebo verzi OS.</p> <p>%1 (%2)<br />%3</p> - + <p>%1 (%2)<br />%3</p> <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 deviation)</p> - + <h2>Zvukový kanál</h2><p>Zašifrován pomocí 128 bit OCB-AES128<br />průměrné zpoždění %1 ms (odchylka %4)</p> <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s</p> - + <h2>Šířka pásma zvuku</h2><p>Maximum %1 kbit/s<br />Nyní %2 kbit/s</p> Mumble Server Information - + Informace o Serveru Mumble - + &View Certificate - + Zobrazit &Certifikát - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + Tento server používá starý šifrovací standard, a nebude nadále podporován novými verzemi Mumble. + + + Register yourself as %1 - + Registrovat se jako %1 <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> - + <p>Chystáte se k registraci na tomto serveru. Tuto činnost nelze vrátit zpět, a jakmile je toto provedeno, Vaše uživatelské jméno nelze změnit. Na tomto serveru budete navždy známi jako '%1'.</p><p>Jste si jisti, že se chcete zaregistrovat?</p> Register user %1 - + Registrovat uživatele %1 <p>You are about to register %1 on the server. This action cannot be undone, the username cannot be changed, and as a registered user, %1 will have access to the server even if you change the server password.</p><p>From this point on, %1 will be authenticated with the certificate currently in use.</p><p>Are you sure you want to register %1?</p> - + <p>Chystáte se k registraci %1 na tomto serveru. Tuto činnost nelze vzít zpět, uživatelské jméno nelze změnit, a jako registrovaný uživatel, %1 bude mít přístup na server i když změníte jeho heslo.</p><p>Od této chvíle, %1 bude ověřen pomocí právě používaného certifikátu.</p><p>Jste si jisti, že chcete registrovat %1?</p> Kicking user %1 - + Vykopávám uživatele %1 Banning user %1 - + Zakazuji uživatele %1 View comment on user %1 - + Zobrazit komentář na uživatele %1 - - + + Message to channel %1 - + Zpráva do kanálu %1 - + Connected. - + Připojen. SSL Version mismatch - - - - - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - - - - - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - + Neshoda verze SSL - + SSL Verification failed: %1 - + Ověření SSL selhalo: %1 - + &User - + &Uživatel - + This will switch the states of the in-game overlay. Global Shortcut - + Toto přepne stavy překryvu ve hře. - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> - + <h2>Kontrolní kanál</h2><p>Šifrován pomocí %1 bit %2<br />průměrné zpoždění %3 ms (odchylka %4)</p><p>Vzdálený hostitel %5 (port %6)</p> Are you sure you want to reset the comment of user %1? - + Jste si jisti, že chcete resetovat komentář uživatele %1? - + To %1 (Tree): %2 (Tree) %1: %2 - + Do %1 (Strom): %2 - + <b>WARNING:</b> The server presented a certificate that was different from the stored one. - + <b>VAROVÁNÍ:</b> Server předložil certifikát, který se liší od uloženého. Sever presented a certificate which failed verification. - + Server předložil certifikát, jehož ověření bylo neúspěšné. <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - - - - - Failed to launch compatibility client - + <p>%1.<br />Specifické chyby v certifikátu jsou: </p><ol>%2</ol><p>Chcete přesto tento certifikát přijmout?<br />(Bude zároveň uložen, takže už na toto nebudete tázáni.)</p> - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here - + <center>Zde napište zprávu pro kanál '%1'</center> <center>Type message to user '%1' here</center> Type message to user '%1' here - + <center>Zde napište zprávu pro uživatele '%1'</center> Choose image file - + Zvolte obrázkový soubor Images (*.png *.jpg *.jpeg *.svg) - + Obrázky (*.png *.jpg *.jpeg *.svg) Failed to load image - + Načtení obrázku selhalo Could not open file for reading. - + Nelze otevřít soubor pro čtení. Image format not recognized. - + Formát obrázku nerozpoznán. - + Voice channel is sent over control channel. - + Zvukový kanál je posílán přes kontrolní kanál. UDP Statistics - + Statistiky UDP To Server - + Na Server From Server - + Ze Serveru Good - + Dobré Late - + Zpožděné Lost - + Ztracené Resync - + Resynch - + Sending message to channel %1 - + Odesílám zprávu do kanálu %1 Message to tree %1 - + Zpráva pro strom %1 Ctrl+Q - Ukončit + Ctrl+Q About &Qt - + O &Qt Sends a text message to all users in a channel. - + Pošle textovou zprávu všem uživatelům v kanálu. Mumble is currently connected to a server. Do you want to Close or Minimize it? - + Mumble je nyní připojen k serveru. Opravdu ho chcete Zavřit nebo Minimalizovat? Close - + Zavřít - - + + Minimize - + Minimalizovat - + Mute Self Global Shortcut - + Zeslabit Se Set self-mute status. Global Shortcut - + Nastavit stav sebe-ztlumení. This will set or toggle your muted status. If you turn this off, you will also disable self-deafen. Global Shortcut - + Toto nastaví nebo přepne Váš stav ztlumení. Pokud toto vypnete, vypnete tím i sebe-ohlušení. Deafen Self Global Shortcut - + Ohlušit se Set self-deafen status. Global Shortcut - + Nastavit stav sebe-ohlušení. This will set or toggle your deafened status. If you turn this on, you will also enable self-mute. Global Shortcut - + Toto nastaví nebo přepne Váš stav ohlušení. Pokud toto zapnete, zapnete tím i sebe-zeslabení. Whisper/Shout Whisper - + Šeptat/Křičet &Window - + &Okno Ctrl+M - + Ctrl+M Toggle Minimal Global Shortcut - + Zapnout Minimálni Zobrazení &Minimal View - + &Minimální Zobrazení Toggle minimal window modes - + Zapnout režim minimálního okna This will toggle minimal mode, where the log window and menu is hidden. - + Toto zapne minimální zobrazení, kde jsou okna záznamu a menu skryta. Volume Up (+10%) Global Shortcut - + Zvýšit Hlasitost (+10%) Volume Down (-10%) Global Shortcut - + Snížit Hlasitost (-10%) - - + + <center>Not connected</center> Not connected - + <center>Nepřipojen</center> - + Clear - + Vyčistit Log - + Záznam You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - + Táhnutí kanálu máte nastavené na "Nedělej Nic", takže kanál nebyl přesunut. Unknown Channel Drag mode in UserModel::dropMimeData. - + Neznámý režim Táhnutí Kanálů v UserModel::dropMimeData. &Unlink Channel - O&dpojit + O&dpojit &Unlink @@ -6773,142 +6855,152 @@ Server message from - Server + Serveru Hide Frame - + Skrýt Rámeček Toggle showing frame on minimal window - + Přepne zobrazení rámečku v minimálním okně This will toggle whether the minimal window should have a frame for moving and resizing. - + Toto nastaví, zda-li okno minimálního zobrazení by mělo mít rámeček pro přesunování a změny velikosti. Send &Message - + Poslat &Zprávu &Unlink All - + Odpojit &Vše &Certificate Wizard - + Průvodce &Certifikátem &Register - + &Registrovat Reset &Comment - + Resetovat &Komentář Reset the comment of the selected user. - + Resetuje komentář zvoleného uřživatele. &Join Channel - + &Vstoupit do Kanálu View Comment - + Zobrazit Komentář View comment in editor - + Zobrazit komentář v editoru Query server for connection information for user - + Požádat server o informace o připojení uživatele S&erver - + S&erver &Self - + &Sebe Audio S&tatistics - + S&tatistiky Zvuku &Unlink Plugins - + Odpojit Zás&uvné Moduly R&egister - + R&egistrovat Register yourself on the server - + Registrovat se na serveru Change &Avatar - + Změnit &Avatara Change your avatar image on this server - + Změnit obrázek avatara na tomto serveru &Remove Avatar - + Odst&ranit Avatara Remove currently defined avatar image. - + Odstranit současně nastavený obrázek avatara. Icon Toolbar - + Panel nástrojů s Ikonami Change your own comment - + Změnit Váš vlastní komentář Recording - + Nahrávání Priority Speaker - + Přednostní Řečník + + + + &Copy URL + &Kopírovat URL + + + + Copies a link to this channel to the clipboard. + Zkopíruje odkaz na tento kanál do schránky. @@ -6916,12 +7008,12 @@ Network - + Síť Updates are mandatory when using snapshot releases. - + Aktualizace jsou povinné, když používáte vývojové verze. Form @@ -6930,18 +7022,18 @@ Connection - + Připojení Use TCP compatibility mode Use TCP compatability mode - + Použít kompatibilní režim TCP <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - + <b>Zapnout Kompatibilní režim TCP</b>.<br />Toto donutí Mumble použít pouze TCP při komunikaci se serverem. Tím se zvýší čas zpracování a způsobuje, že ztracené pakety vytvářejí nápadné pauzy v komunikaci, takže toto by mělo být použito pouze, když nemůžete použít výchozí nastavení (které používá UDP pro hlas a TCP pro kontrolu). Use TCP mode @@ -6950,228 +7042,229 @@ Reconnect when disconnected - Přihlásit zpátky na server, pokud došlo k výpadku spojení + Po odpojení se znovu připojit <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Automatické připojení</b>.<br />Pokud se ztratí spojení se serverem, Mumble se pokusí automaticky spojení obnovit každých 10 sekund. + <b>Při odpojení se znovu připojit<b>.<br />Toto donutí Mumble se automaticky znovu pokusit o připojení po 10 sekundách od selhání připojení k serveru. Reconnect automatically - + Připojit se znovu automaticky Proxy - + Proxy Type - + Typ Type of proxy to connect through - + Typ proxy, přes které se připojit Direct connection - + Přímé spojení HTTP(S) proxy - + HTTP(S) proxy SOCKS5 proxy - + SOCKS5 proxy Hostname - + Jméno hostitele Hostname of the proxy - + Jméno hostitele proxy Force TCP mode - + Vynutit režim TCP Enable QoS to prioritize packets - + Zapnout QoS pro upřednostňování paketů This will enable QoS, which will attempt to prioritize voice packets over other traffic. - + Toto zapne QoS, které se pokusí upřednostňovat hlasové pakety před jinými připojeními. Use Quality of Service - + Použít Quality of Service Don't send certificate to server and don't save passwords. (Not saved). - + Neposílat certifikáty na server a neukládat hesla. (Neukládá se). <b>This will suppress identity information from the client.</b><p>The client will not identify itself with a certificate, even if defined, and will not cache passwords for connections. This is primarily a test-option and is not saved.</p> - + <b>Toto potlačí identifikační informace od klientu</b><p>Klient se certifikátem nebude identifikovat, i když je nastaven, a nebude ukládat hesla pro připojení. Toto je zejména volba pro testování a nebude ukládána.</p> Suppress certificate and password storage - + Potlačit ukládání certifikátů a hesel <b>Type of proxy to connect through.</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - + <b>Typ proxy, přes které se připojit.</b><br />Toto donutí Mumble se připojit přes proxy pro všechna odchozí připojení. Poznámka: Tunelování přes proxy donutí Mumble použít kompatibilní režim TCP, což způsobí, že všechna hlasová data budou posílána přes kontrolní kanál. <b>Hostname of the proxy.</b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - + <b>Jméno hostitele proxy.</b><br />Toto pole určuje jméno hostitele proxy, přes které chcete tunelovat připojení. Port - + Port Port number of the proxy - + Číslo portu proxy <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - + <b>Číslo portu proxy.</b><br />Toto pole určuje číslo portu, na kterém proxy očekává spojení. Username - + Uživatelské jméno Username for proxy authentication - + Uživatelské jméno pro ověření na proxy <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - + <b>Uživatelské jméno pro ověření na proxy.</b><br />Toto určuje uživatelské jméno, které se použije pro Vaše ověření na proxy. V případě, že proxy ověření na proxy, nebo se chcete připojit anonymně, jednoduše nechte toto pole prázdné. Password - + Heslo Password for proxy authentication - + Heslo pro ověření na proxy <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - + <b>Heslo pro ověření na proxy.</b><br />Toto určuje heslo, které má být použito pro Vaše ověření na proxy. V případě, že proxy ověření na proxy, nebo se chcete připojit anonymně, jednoduše nechte toto pole prázdné. Misc - + Ostatní Prevent log from downloading images - + Zakáže záznamu stahovat obrázky <b>Disable image download</b><br/> Prevents the client from downloading images embedded into chat messages with the img tag. - + <b>Zakázat stahování obrázků</b><br/> +Zakáže klientu stahovat obrázky vnořené do zpráv chatu pomocí tagu img. Disable image download - + Zakázat stahování obrázků Mumble services - + Služby Mumble Check for new releases of Mumble automatically. - + Automaticky zkontrolovat, jestli jsou nové verze Mumble k dispozici. This will check for new releases of Mumble every time you start the program, and notify you if one is available. - + Toto zkontroluje nové verze Mumble pokaždé, když spustíte program, a upozorní Vás, je-li nová verze dostupná. Check for application updates on startup - + Při startu zkontrolovat aktualizace aplikace Check for new releases of plugins automatically. - + Automaticky zkontrolovat nové verze zásuvných modulů. This will check for new releases of plugins every time you start the program, and download them automatically. - + Toto zkontroluje nové verze zásuvných modulů pokaždé, když spustíte program, a automaticky je stáhne. <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus its development where it is needed most. By submitting a bit of statistics you help the project determine where to focus development. - + <b>Posílat anonymní statistiky.</b><br />Mumble má malý tým vývojářů, a tak potřebuje svůj vývoj soustředit tam, kde je ho nejvíc třeba. Posíláním trošky statistiky pomáháte projektu rozhodnout, kam zaměřit svůj vývoj. Submit anonymous statistics to the Mumble project - + Posílat anonymní statistiky projektu Mumble Submit anonymous statistics - + Posílat anonymní statistiky Reconnect to last used server when starting Mumble - + Při spuštení Mumble se znovu připojit na poslední server Reconnect to last server on startup - + Při startu se znovu připojit na poslední server Download plugin and overlay updates on startup - + Při startu stáhnout aktualizace zásuvných modulů a překryvů @@ -7227,46 +7320,46 @@ Silent - + Mlčící Talking - + Mluvící Whisper - + Šeptající Shout - + Křičící Channel - + Kanál Failed to create communication with overlay at %2: %1. No overlay will be available. - + Nelze vytvořit komunikaci s překryvem v %2: %1. Nebude dostupný žádný překryv. Skipping overlay update in debug mode. - + V režimu ladění přeskakuji aktualizaci překryvu. Downloaded new or updated overlay support file to %1. - + Nový nebo aktualizovaný soubor podpory překryvu stáhnut do%1. Failed to load overlay library. This means either that: @@ -7285,47 +7378,77 @@ Filter - + Filtr Only talking - Pouze mluvící + Pouze mluvící + + + + Talking and recently active + Mluvící a nedávno aktivní All in current channel - + Všichni v současném kanálu All in linked channels - + Všichni v propojených kanálech Always show yourself - + Sebe zobrazovat vždy - + + Configure recently active time (%1 seconds)... + Nastavit čas pro nedávnou aktivitu (%1 sekund)... + + + Columns - + Sloupce + Sort + Seřadit + + + + Alphabetically + Podle abecedy + + + + Last state change + Podle poslední změny stavu + + + Edit... - + Upravit... Reset Zoom - + Resetovat Přiblížení - - FPS: %1 - + + Configure recently active time + Nastavit čas pro nedávnou aktivitu + + + + Amount of seconds users remain active after talking: + Počet sekund, kdy poté, co uživatelé domluví zůstanou aktivní: @@ -7347,12 +7470,12 @@ Enable Overlay - Zapnout Overlay + Zapnout Překryv Enable overlay. - Zapnout overlay. + Zapnout překryv. This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. @@ -7470,7 +7593,7 @@ This sets whether the overlay is enabled or not. This setting is only checked when applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start Mumble after starting the application, or if you disable the overlay while the application is running, there is no safe way to restart the overlay without also restarting the application. This sets whether the overlay is enabled or not. This setting is only checked when applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - + Toto nastavuje, zda je překryv zapnut či nikoliv. Toto nastavení se kontroluje pouze při startu aplikací, takže se ujistěte, že Mumble běží a tato volba je zapnuta předtím, než aplikaci spustíte.<br />Uvědomte si, prosím, že pokud spustíte Mumble až po spuštění aplikace, nebo překryv vypnete, zatímco aplikace běží, není žádný bezpečný způsob, jak překryv restartovat, aniž byste restartovali aplikaci. This sets the relative Y position of the overlay. @@ -7523,86 +7646,81 @@ To move the users, drag the little red dot. - + Pro přesun uživatelů, táhněte malou červenou tečkou. To resize the users, mouse wheel over a user. To resize the users, mousewheel over a user. - + Pro změnu velikosti uživatelů použijte kolečko myši. For more options, right click a user. For more options, rightclick a user. - + Pro více možností, na ně klikněte pravým tlačítkem. - - FPS: %1 - - - - + Overlay - Overlay + Překryv Choose executable - + Zvolte spustitelný soubor Choose application - + Zvolte aplikaci Mumble has deemed the installer valid. - + Mumble považuje tento instalátor za platný. Mumble was unable to verify the authenticity of the installer. Mumble was unable to validate authenticity of the installer. - + Mumble nemohl ověřit pravost tohoto instalátoru. Load Overlay Presets - + Nahrát Předvolby Překryvu Mumble overlay presets (*.mumblelay) - + Předvolby překryvu Mumble (*.mumblelay) Save Overlay Presets - + Uložit Předvolby Překryvu Layout - + Rozvržení Overlay exceptions - + Výjimky překryvu Blacklist - + Nikdy Nezobrazit Whitelist - + Vždy Zobrazit Add @@ -7611,61 +7729,65 @@ Remove - Odstranit + Odstranit Uninstall Overlay - + Odinstalovat Překryv Overlay Installation - + Instalace Překryvu Mumble has detected that you do not have the Mumble Overlay installed. Click the button below to install the overlay. - + Mumble zjistil, že nemáte Překryv Mumble nainstalovaný. + +klikněte na tlačítko níže pro instalaci překryvu. Install Mumble Overlay - + Instalovat Překryv Mumble Overlay Upgrade - + Aktualizace Překryvu Mumble has detected an old version of the overlay support files installed on your computer. To upgrade these files to their latest versions, click the button below. - + Mumble zjistil starou verzi souboru podpory překryvu instalovaného na Vašem počítači. + +Pro aktualizaci těchto souborů na jejich poslední verzi, klikněte na tlačítko níže. Upgrade Mumble Overlay - + Aktualizovat Překryv Mumble Display a frame counter in the overlay - + Zobrazí v překryvu počítadlo snímků Show FPS counter - + Zobrazit počítadlo FPS View Certificates - + Zobrazit Certifikáty &Remove @@ -7674,52 +7796,52 @@ Load an overlay preset from file - + Nahrát předvolby překryvu ze souboru Load… - + Nahrát... Save your overlay settings to file - + Uložit předvolby překryvu do souboru Save… - + Uložit... FPS Display - + Displej FPS Set the overlay font. - + Nastavit typ písma překryvu. Font - + Písmo Set the overlay text color. - + Nastavit barvu textu překryvu. Color - + Barva Add... - + Přidat... @@ -7727,117 +7849,117 @@ State - + Stav User is not talking - + Uživtel nemluví Passive - + Pasivní User is talking in your channel or a linked channel - + Uživatel mluví ve Vašem nebo propojeném kanálu Talking - + Mluví User is whispering to you privately - + Uživatel k Vám soukromě šeptá Private Whisper - + Soukromý Šepot User is shouting to your channel - + Uživatel křiči do Vašeho kanálu Channel Whisper - + Šepot v Kanálu Zoom - + Přiblížit Zoom Factor - + Faktor Přiblížení Enabled Elements - + Povolené Prvky User avatar, chosen by each user - + Avatar uživatele, zvolen každým uživatelem Avatar - + Avatar User's name - + Jméno uživatele Username - + Uživatelské jméno Name of user's channel, if outside your current channel - + Jméno kanálu uživatele, je-li mimo Váš současný kanál Channel - + Kanál Muted or deafened - + Zeslaben nebo ohlušen Mute state - + Stav zeslabení Bounding box, automatically shrunk to minimum size to contain all visible elements - + Ohraničující rámeček, automaticky zmenšen na minimální velikost pro obsažení všech viditelných prvků Bounding box - + Ohraničující rámeček Overlay Editor - + Editor Překryvu @@ -7845,119 +7967,119 @@ Layout preset - + Předvolba rozvržení Large square avatar - + Avatar ve velkém čtverečku Avatar and Name - + Avatar a Jméno User Opacity - + Průhlednost Uživatele %1% - %1% + %1% Object Opacity - + Průhlednost Objektu Alignment - + Zarovnání Left - + Doleva Center - + Na střed Right - + Doprava Top - + Nahoru Bottom - + Dolů Color... - + Barva... Font... - + Písmo... Bounding box - + Ohraničující rámeček Pen width - + Šířka pera Padding - + Výplň Pen color - + Barva Pera Fill color - + Barva výplně Pick pen color - + Vybrat barvu pera Pick fill color - + Vybrat barvu výplně Pick color - + Vybrat barvu Pick font - + Vybrat typ písma @@ -7967,11 +8089,13 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 - + Nelze načíst knihovnu překryvu. To znamená, že buď: +- knihovna (mumble_ol.dll) nebyla v adresáři, z kterého byl Mumble spuštěn, nalezena +- jste OS starším než WinXP SP2 @@ -8025,73 +8149,73 @@ Options - Volby + Volby Plugins - + Zásuvné Moduly Link to Game and Transmit Position - + Propojit s Hrou a Vysílat Pozici Enable plugins and transmit positional information - + Zapne zásuvné moduly a vysílá informace o pozici &Reload plugins - + Znovu nahrát &zásuvné moduly Reloads all plugins - + Znovu nahraje všechny zásuvné moduly This allows plugins for supported games to fetch your in-game position and transmit it with each voice packet. This enables other users to hear your voice in-game from the direction your character is in relation to their own. - + Toto umožňuje zásuvným modulům pro podporované hry získat Vaši pozici ve hře a vysílat ji s každým hlasovým paketem. Tím můžou ostatní uživatelé slyšet Váš hlas ve hře ze směru, ve kterém se Vaše postava nachází v souvislosti jejich vlastní pozicí. This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - + Toto opětovně skenuje a znovu nahraje zásuvné moduly. Toto použijte, pokud jste právě přidali nebo změnili zásuvné moduly v jejich adresáři. &About - &O aplikaci + O &modulu Information about plugin - + Informace o zásuvném modulu This shows a small information message about the plugin. - + Toto zobrazí malou informační zprávu o zásuvném modulu. &Configure - + &Nastavit Show configuration page of plugin - + Zobrazit stránku nastavení zásuvného modulu This shows the configuration page of the plugin, if any. - + Toto zobrazí informační stránku zásuvného modulu, pokud existuje. Mumble @@ -8100,27 +8224,27 @@ Plugin has no configure function. - + Zásuvný modul nemá žádnou funkci nastavení. Plugin has no about function. - + Zásuvný modul nemá žádnou funkci O modul. Form - Písmo + Formulář Name - Jméno + Jméno Enabled - + Povoleno @@ -8128,28 +8252,28 @@ Skipping plugin update in debug mode. - + V režimu ladění přeskakuji aktualizaci zásuvných modulů. Downloaded new or updated plugin to %1. - + Aktualizován nebo stáhnut nový zásuvný modul do %1. Failed to install new plugin to %1. - + Nelze instalovat nový zásuvný modul do %1. %1 lost link. - + %1 ztraceno propojení. %1 linked. - + %1 propojen. @@ -8157,7 +8281,7 @@ Default Device - + Výchozí Zařízení @@ -8198,14 +8322,14 @@ PulseAudioSystem - + Default Input - + Výchozí Vstup Default Output - + Výchozí Výstup @@ -8213,82 +8337,82 @@ Failed to load image - + Nelze načíst obrázek Image file too large to embed in document. Please use images smaller than %1 kB. - + Obrázkový soubor je příliš velký pro vnoření do dokumentu. Použijte, prosím, obrázky menší než %1 kB. Message is too long. - + Zpráva je příliš dlouhá. Display - + Zobrazení Source Text - + Zdrojový Text &Bold - + &Tučné Ctrl+B - + Ctrl+B &Italic - + &Kurzíva Italic - + Kurzíva Ctrl+I - + Ctrl+I Underline - + Podtržení Ctrl+U - + Ctrl+U Color - + Barva Insert Link - + Vložit odkaz Ctrl+L - + Ctrl+L Insert Image - + Vložit Obrázek @@ -8296,17 +8420,17 @@ Add Link - + Přidat Odkaz URL - URL + URL Text - + Text @@ -8314,75 +8438,75 @@ UDP packets cannot be sent to or received from the server. Switching to TCP mode. - + Pakety UDP nelze na server odeslat ani je ze serveru přijímat. Přepínám na režim TCP. UDP packets cannot be sent to the server. Switching to TCP mode. - + Pakety UDP nelze odeslat na server. Přepínám na režim TCP. UDP packets cannot be received from the server. Switching to TCP mode. - + Pakety UDP nelze ze serveru přijmout. Přepínám na režim TCP. UDP packets can be sent to and received from the server. Switching back to UDP mode. - + Pakety UDP lze na server odeslat i je ze serveru přijímat. Přepínám zpět na režim UDP. Connection timed out - + Spojení vypršelo ServerView - + Favorite - + Oblíbené LAN - + LAN Public Internet - + Veřejný Internet Africa - + Afrika Asia - + Asie North America - + Severní Amerika South America - + Jižní Amerika Europe - + Evropa Oceania - + Oceánie @@ -8390,7 +8514,7 @@ Unassigned - + Nepřiřazeno @@ -8398,22 +8522,22 @@ On - + Zapnuto Off - + Vypnuto Toggle - + Sepnout Unassigned - + Nepřiřazeno @@ -8421,7 +8545,7 @@ Press Shortcut - + Zmáčkněte Zkratku @@ -8429,22 +8553,22 @@ Root - Kořen + Kořen Parent - + Nadřazený Current - + Současný Subchannel #%1 - + Podkanál #%1 @@ -8452,43 +8576,43 @@ ... - ... + ... , - + , Root - Kořen + Kořen Parent - + Nadřazený Current - + Současný Subchannel #%1 - + Podkanál #%1 Invalid - + Neplatný Empty <Empty> - + Prázdný @@ -8496,17 +8620,17 @@ Off - + Vypnuto Toggle - + Sepnout On - + Zapnuto @@ -8514,17 +8638,17 @@ Enter text - + Zadat text If checked the message is recursively sent to all subchannels - + Je-li zaškrtnuto, zpráva bude rekurzivně poslána do všech podkanálů Send recursively to subchannels - + Poslat rekurzivně do podkanálů @@ -8532,17 +8656,17 @@ Empty Token - + Prázdný Znak Mumble - Access Tokens - + Mumble - Znaky Přístupu List of access tokens on current server - + Seznam znaků přístupu na současném serveru @@ -8550,27 +8674,30 @@ <br /> An access token is a text string, which can be used as a password for very simple access management on channels. Mumble will remember the tokens you've used and resend them to the server next time you reconnect, so you don't have to enter these every time. - + <b>Toto je upravitelný seznam znaků přístupu na připojeném serveru.</b> +<br /> +Znak přístupu je textový řetězec, který může být použit jako heslo pro velmi jednoduchou správu přístupu v kanálech. Mumble si zapamatuje znaky, které jste použili a pošle je znovu na server, když se příště připojíte znovu, takže je nemusíte pokaždé zadávat. + Add a token - + Přidat znak &Add - + &Přidat Remove a token - + Odstranit znak &Remove - Odst&ranit + &Odstranit @@ -8578,18 +8705,18 @@ Registered Users - + Registrovaní Uživatelé Remove - Odstranit + Odstranit Rename - + Přejmenovat @@ -8597,175 +8724,180 @@ User Information - + Informace O Uživateli Connection Information - + Informace O Připojení Version - + Verze OS - + OS Certificate - + Certifikáty IP Address - + IP Adresa CELT Versions - + Verze CELT Details... - + Podrobnosti... Ping Statistics - + Statistiky Ping Pings received - + Přijaté pingy Average ping - + Průmerný ping + + + + Ping deviation + Odchylka pingu TCP (Control) - + TCP (Kontrola) UDP (Voice) - + UDP (Hlas) UDP Network statistics - + Statistiky Sítě UDP Good - + Dobré Late - + Ztracené Lost - + Zpožděné Resync - + Resynch From Client - + Od Klientu To Client - + Ke Klientu Connection time - + Čas připojení %1w - %1% {1w?} + %1w %1d - %1% {1d?} + %1d %1h - %1% {1h?} + %1h %1m - %1% {1m?} + %1m %1s - %1% {1s?} + %1s , - + , %1.%2.%3 (%4) - + %1.%2.%3 (%4) %1 (%2) - + %1 (%2) - + %1 online (%2 idle) - + %1 online (%2 nečinný) %1 online - + %1 online %1 kbit/s - + %1 kbit/s Bandwidth GroupBox - + Šířka pásma Bandwidth Label - + Šířka pásma @@ -8773,128 +8905,128 @@ This is a user connected to the server. The icon to the left of the user indicates whether or not they are talking: - + Toto je uživatel připojený k serveru. Ikona nalevo od uživatele udává, jestli mluví nebo ne: Talking to your channel. - + Mluví s Vaším kanálem. Shouting directly to your channel. Whispering directly to your channel. - + Křičí přímo do Vašeho kanálu. Whispering directly to you. - + Šeptá přímo k Vám. Not talking. - + Nemluví. This is a channel on the server. The icon indicates the state of the channel: - + Toto je kanál na serveru. Ikona udává stav kanálu: Your current channel. - + Váš současný kanál. A channel that is linked with your channel. Linked channels can talk to each other. - + Kanál, který je propojen s Vaším. Propojené kanály si můžou povídat k sobě navzájem. A channel on the server that you are not linked to. - + Kanál na serveru, s kterým nejste propojen. This shows the flags the user has on the server, if any: - + Toto zobrazí indikátory, které uživatel na serveru má, jestli vůbec: On your friend list - + Na Vašem seznamu příátel Authenticated user - + Ověřený uživatel Muted (manually muted by self) - + Zeslaben (ručně sebe zeslabil) Muted (manually muted by admin) - + Zeslaben (ručně zeslaben administrátorem) Muted (not allowed to speak in current channel) - + Zeslaben (není mu v současném kanálu dovoleno mluvit) Muted (muted by you, only on your machine) - + Zeslaben (zeslaben Vámi, pouze na Vašem počítači) Deafened (by self) - + Ohlušen (sám sebe) Deafened (by admin) - + Ohlušen (administrátorem) User has a new comment set (click to show) - + Uživatel má nastaven nový komentář (klikněte pro zobrazení) User has a comment set, which you've already seen. (click to show) - + Uživatel má nastaven komentář, který jste už viděli (klikněte pro zobrazení) This shows the flags the channel has, if any: - + Toto zobrazí indikátory, které kanál má, jestli vůbec: Channel has a new comment set (click to show) - + Kanál má nastaven nový komentář (klikněte pro zobrazení) Channel has a comment set, which you've already seen. (click to show) - + Kanál má nastaven komentář, který jste už viděli (klikněte pro zobrazení) Name - Jméno + Jméno Flags - Příznaky + Příznaky Mumble @@ -8903,13 +9035,13 @@ Are you sure you want to drag this channel? - + Jste si jisti, že chcete tento kanál přetáhnout? Cannot perform this movement automatically, please reset the numeric sorting indicators or adjust it manually. - + Nelze provést tento pohyb automaticky, restartujte, prosím, indikátory číselného řazení nebo ho upravte ručně. @@ -8925,38 +9057,38 @@ Upgrade Mumble - + Aktualizovat Mumble A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - + Byla zjištěna a automaticky stáhnuta nová verze Mumble. Je doporučeno buď aktualizovat na tuto verzi, nebo přeinstalovat na poslední stabilní verzi. Chcete teď spustit instalátor? Failed to launch snapshot installer. - + Nelze spustit instalátor vývojové verze. Corrupt download of new version detected. Automatically removed. - + Zjištěno poškození stáhnuté nové verze. Byla automaticky odstraněna. - + Downloading new snapshot from %1 to %2 - + Stahuji novou vývojovou verzi z %1 do %2 Failed to write new version to disk. Failed to write new version to disc. - + Nelze zapsat novou verzi na disk. Mumble failed to retrieve version information from the central server. - + Mumble nemohl z centrálního serveru získat informace o verzi. @@ -8964,112 +9096,112 @@ Certificate Chain Details - + Podrobnosti Řetězu Certifikátů Certificate chain - + Řetěz certifikátů Certificate details - + Podrobnosti certifikátu %1 %2 - %1% {1 %2?} + %1% %2 Common Name: %1 - + Běžné Jméno: %1 Organization: %1 - + Organizace: %1 Subunit: %1 - + Podjednotka: %1 Country: %1 - + Země: %1 Locality: %1 - + Kraj: %1 State: %1 - + Stát: %1 Valid from: %1 - + Platný od: %1 Valid to: %1 - + Platný do: %1 Serial: %1 - + Sériové Číslo: %1 Public Key: %1 bits %2 - + Veřejný Klíč %1 bitů %2 RSA - + RSA DSA - + DSA Digest (MD5): %1 - + Digest (MD5): %1 Email: %1 - + E-mail: %1 DNS: %1 - + DNS: %1 Issued by: - + Vydal: Unit Name: %1 - + Jméno Jednotky: %1 @@ -9077,37 +9209,37 @@ Invalid sample rate given to recorder - + Nahrávači předána neplatná vzorkovací frekvence Recorder failed to create directory '%1' - + Nahrávač nemohl vytvořit adresář '%1' Recorder failed to open file '%s' - + Nahrávač nemohl otevřít soubor '%s' .wav - Uncompressed - + .wav - Nekomprimováno .ogg (Vorbis) - Compressed - + .ogg (Vorbis) - Komprimováno .au - Uncompressed - + .au - Nekomprimováno .flac - Lossless compressed - + .flac - Komprimováno bezeztrátově @@ -9121,123 +9253,124 @@ Recorder - + Nahrávač Control - + Ovládání 00:00:00 - 00:00:00 + 00:00:00 &Start - + &Spustit S&top - + &Zastavit Mode - + Režim Multichannel - + Vícekanálové Output - Výstup + Výstup Output format - + Výstupní formát Target directory - + Cílový adresář Filename - + Jméno souboru &Browse... - + &Procházet... Closing the recorder will stop your current recording. Do you really want to close the recorder? - + Zavřením nahrávače zastavíte současné nahrávání. Opravdu chcete nahrávač zavřít? Valid variables are: - + Platné proměnné jsou: Inserts the user's name - + Vloží jméno uživatele Inserts the current date - + Vloží aktuální datum Inserts the current time - + Vloží aktuální čas Inserts the hostname - + Vloží jméno hostitele Unable to start recording. Not connected to a server. - + Nelze spustit nahrávání. Nejste připojeni k serveru. The server you are currently connected to is version 1.2.2 or older. For privacy reasons, recording on servers of versions older than 1.2.3 is not possible. Please contact your server administrator for further information. - + Server, na kterém jste nyní připojeni, je verze 1.2.2 nebo starší. Z důvodů soukromí, nahrávání na serverech verze starší než 1.2.3 není možné. +Prosím kontaktujte Vašeho administrátora serveru pro další informace. There is already a recorder active for this server. - + Pro tento server již existuje aktivní nahrávání. Please select a recording format. - + Prosím zvolte formát nahrávání. Select target directory - + Zvolte cílový adresář Downmix - + Smíšení Kanálů @@ -9264,7 +9397,7 @@ Default Device - + Výchozí zařízení diff -Nru mumble-1.2.3/src/mumble/mumble_da.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_da.ts --- mumble-1.2.3/src/mumble/mumble_da.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_da.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2493,7 +2493,7 @@ Mumble bruger - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Certifikat Udløb:</b> Dit certifikat er ved at udløbe. Du skal fornye det, ellers vil du ikke længere være i stand til at forbinde til servere du registreret på. @@ -3007,7 +3007,7 @@ ClientUser - + Friend Ven @@ -3055,7 +3055,7 @@ ConfigDialog - + Accept changes Acceptér ændringer @@ -3174,18 +3174,18 @@ ConnectDialog - + Connecting to %1 Opretter forbindelse til %1 - - + + Enter username Skriv brugernavn - + Adding host %1 Tilføjer vært %1 @@ -3252,7 +3252,7 @@ %1 kbit/s - + &Connect &Opret forbindelse @@ -3263,7 +3263,7 @@ - + Users Brugere @@ -3278,7 +3278,7 @@ - + &Add New... Add New... &Tilføj ny... @@ -3569,7 +3569,7 @@ Det her er ikke sjovt, for der er tilsyneladende en fejl i nedbrudsrapporterings-koden, og rapporten kunne derfor ikke uploades. Du må gerne informere en udvikler om fejlen %1 - + Uploading crash report Uploader nedbrudsrapport @@ -3648,7 +3648,7 @@ DockTitleBar - + Drag here Træk hér @@ -3748,9 +3748,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble har detekteret at det ikke er i stand til at modtage globale genvejshændelser, når det er i baggrunden.<br /><br />Dette er fordi at Universaladgangs-egenskaben 'Aktivér adgang for hjælpeenheder' i øjeblikket er deaktiveret<br /><br />Aktivér venligst <a href=" ">denne indstilling</a> og fortsæt når du er færdig. + Mumble har detekteret at det ikke er i stand til at modtage globale genvejshændelser, når det er i baggrunden.<br /><br />Dette er fordi at Universaladgangs-egenskaben 'Aktivér adgang for hjælpeenheder' i øjeblikket er deaktiveret<br /><br />Aktivér venligst <a href=" ">denne indstilling</a> og fortsæt når du er færdig. @@ -3851,7 +3850,7 @@ GlobalShortcutX - + Mouse %1 Mus %1 @@ -3949,7 +3948,7 @@ Log - + Debug Fejlfinding @@ -4049,7 +4048,7 @@ Bruger forlod kanal - + the server serveren @@ -4094,7 +4093,7 @@ LogConfig - + Toggle console for %1 events Slå konsol til/fra for %1-hændelser @@ -4236,6 +4235,36 @@ Only accept whispers from friends Acceptér kun hvisken fra venner + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4570,12 +4599,12 @@ MainWindow - + Root Rod - + Push-to-Talk Global Shortcut Tryk-for-snak @@ -4654,28 +4683,28 @@ - + Mumble -- %1 Mumble -- %1 - + &Window &Vindue - + Minimize Minimér - + Ctrl+M Ctrl+M - + Close Luk @@ -4685,7 +4714,7 @@ Mumble har i øjeblikket forbindelse til en server. Vil du lukke eller minimere det? - + Mute Self Global Shortcut Deaktivér din mikrofon @@ -4732,14 +4761,14 @@ Hvisk/råb - - + + <center>Not connected</center> Not connected <center>Ingen forbindelse oprettet</center> - + Clear Ryd @@ -4769,7 +4798,7 @@ URL ordning er ikke 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Denne version af Mumble kan ikke håndtere URLs for Mumble version %1.%2.%3 @@ -4873,13 +4902,13 @@ Til kanal %1: %2 - - + + Message to channel %1 Besked til kanal %1 - + Connected. Forbindelse oprettet. @@ -4889,17 +4918,15 @@ SSL-version uoverenstemmelse - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Denne server bruger en ældre krypteringstandard. Det kan være en ældre version 1.1-baseret Mumble server.<br />Vil du start kompatibilitetsprogrammet for at oprette forbindelse til den? + Denne server bruger en ældre krypteringstandard. Det kan være en ældre version 1.1-baseret Mumble server.<br />Vil du start kompatibilitetsprogrammet for at oprette forbindelse til den? - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Kompatibilitetsprogrammet kunne ikke findes, eller kunne ikke starte.<br />Dette kan skyldes at kompatibilitetsprogrammet er et valgfrit komponent, som muligvis ikke er installeret. + Kompatibilitetsprogrammet kunne ikke findes, eller kunne ikke starte.<br />Dette kan skyldes at kompatibilitetsprogrammet er et valgfrit komponent, som muligvis ikke er installeret. - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Skriv besked til kanalen '%1' hér</center> @@ -4936,18 +4963,18 @@ Billedformatet blev ikke genkendt. - + Voice channel is sent over control channel. Lydkanal er sendt over kontrolkanal. - + This will switch the states of the in-game overlay. Global Shortcut Dette vil skifte tilstanden for overlægningen i spillet. - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> <h2>Kontrol kanal</h2><p>Krypteret med %1 bit %2<br />%3 ms gennemsnitlig forsinkelse (%4 deviation)</p><p>Ekstern vært %5 (port %6)</p> @@ -4993,12 +5020,12 @@ - + &View Certificate &Se certifikat - + Enter reason Skriv begrundelse @@ -5010,20 +5037,20 @@ - + - + To %1: %2 Til %1: %2 - - + + Message to %1 Besked til %1 - + View comment on user %1 Vis kommentar på bruger %1 @@ -5033,7 +5060,7 @@ Er du sikker på, at du vil nulstille kommentaren for brugeren %1? - + Are you sure you want to delete %1 and all its sub-channels? Er du sikker på, at du vil slette %1 og alle dens underkanaler? @@ -5043,11 +5070,16 @@ Sender besked til kanalen %1 + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + To tree %1: %2 Til træet %1: %2 - + Message to tree %1 Besked til træet %1 @@ -5058,7 +5090,7 @@ Til %1 (træ): %2 - + Unmuted and undeafened. Mikrofon og lyd aktiveret. @@ -5113,12 +5145,11 @@ <p>%1.<br />Den specifikke fejl med dette certifikat er: </p><ol>%2</ol><p>Vil du acceptere certifikatet alligevel?<br />(Det vil blive gemt, så du ikke bliver spurgt igen.)</p> - Failed to launch compatibility client - Start af kompatibilitetsklient mislykkedes + Start af kompatibilitetsklient mislykkedes - + Server connection failed: %1. Serverforbindelse fejlede: %1. @@ -5167,7 +5198,7 @@ &Server - + &Channel &Kanal @@ -6214,6 +6245,11 @@ Velkommen til Mumble. + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? Dette er første gang du åbner Mumble.<br />Kunne du tænke dig at gennemgå lydguiden for at konfigurere dit lydkort? @@ -6321,6 +6357,16 @@ Priority Speaker Prioriteret taler + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6664,6 +6710,11 @@ + Talking and recently active + + + + All in current channel Alle i nuværende kanal @@ -6678,12 +6729,32 @@ Vis altid dig selv - + + Configure recently active time (%1 seconds)... + + + + Columns Kolonner + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Redigér... @@ -6693,9 +6764,18 @@ Nulstil zoom - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -6750,12 +6830,11 @@ For flere valgmuligheder, højreklik på en bruger. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Overlægning @@ -7345,7 +7424,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -7504,7 +7583,7 @@ PulseAudioSystem - + Default Input Standardindspilning @@ -7650,7 +7729,7 @@ ServerView - + Favorite Favoritter @@ -8066,7 +8145,7 @@ - + %1 online (%2 idle) %1 online (%2 borte) @@ -8264,7 +8343,7 @@ Nyeste downloadede version er korrupt og blev automatisk fjernet. - + Downloading new snapshot from %1 to %2 Downloader nyt snapshot fra %1 til %2 diff -Nru mumble-1.2.3/src/mumble/mumble_de.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_de.ts --- mumble-1.2.3/src/mumble/mumble_de.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_de.ts 2011-04-02 22:20:48.000000000 +0000 @@ -3354,7 +3354,7 @@ Mumble-Benutzer - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Ablauf des Zertifikats:</b> Ihr Zertifikat wird bald ablaufen. Sie müssen es erneuern oder Sie werden nicht mehr in der Lage sein sich auf Server zu verbinden auf denen Sie registriert sind. @@ -4008,7 +4008,7 @@ ClientUser - + Friend Freund @@ -4071,7 +4071,7 @@ &OK - + Accept changes Änderungen übernehmen @@ -4229,7 +4229,7 @@ &Passwort - + &Connect &Verbinden @@ -4282,7 +4282,7 @@ LAN - + Hostname Hostname @@ -4354,7 +4354,7 @@ - + &Add New... Add New... &Server hinzufügen... @@ -4369,13 +4369,13 @@ Verbinde zu %1 - - + + Enter username Benutzername eingeben - + Adding host %1 Host %1 hinzufügen @@ -4386,7 +4386,7 @@ Servername - + &Filters &Filter @@ -4726,7 +4726,7 @@ Das ist wirklich nicht witzig, aber es scheint einen Bug im Absturz-Bericht-Melden-Code zu geben und das Hochladen des Berichts schlug fehl. Sie können einen Entwickler über den Fehler %1 informieren - + Uploading crash report Absturzbericht wird hochladen @@ -4987,7 +4987,7 @@ DockTitleBar - + Drag here Hier ziehen @@ -5111,9 +5111,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble hat festgestellt, dass es keine globalen Tastenkürzel Ereignisse erhalten kann, wenn es im Hintergrund läuft.<br /><br />Dies wird durch die Deaktivierung des Universal Access Features "Enable access for assitive devices" verursacht.<br /><br />Bitte <a href="">aktivieren sie diese Einstellung</a>. + Mumble hat festgestellt, dass es keine globalen Tastenkürzel Ereignisse erhalten kann, wenn es im Hintergrund läuft.<br /><br />Dies wird durch die Deaktivierung des Universal Access Features "Enable access for assitive devices" verursacht.<br /><br />Bitte <a href="">aktivieren sie diese Einstellung</a>. @@ -5241,7 +5240,7 @@ GlobalShortcutX - + Mouse %1 Maus %1 @@ -5430,7 +5429,7 @@ [%2] %1 - + Debug Debug @@ -5567,7 +5566,7 @@ Benutzer verließ den Kanal - + the server den Server @@ -5612,7 +5611,7 @@ LogConfig - + Toggle console for %1 events Wechsle Einstellung für Konsole für %1 Ereignisse @@ -5785,6 +5784,36 @@ Characters Zeichen + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -6196,7 +6225,7 @@ MainWindow - + Root Hauptkanal @@ -6760,9 +6789,9 @@ Verbindet sich mit der Mumble-Webseite um zu überprüfen ob eine neue Version verfügbar ist. Ist eine neue Version verfügbar wird mit einer passenden Download-URL darauf hingewiesen. - + - + Mumble -- %1 Mumble -- %1 @@ -6784,7 +6813,7 @@ B&enutzer - + &Channel &Kanal @@ -6807,7 +6836,7 @@ Kicke Benutzer %1 - + Enter reason Grund eingeben @@ -6830,7 +6859,7 @@ Sind Sie sicher Kanal %1 und all seine Unterkanäle zu löschen? - + Unmuted and undeafened. Stumm- und Taubstellen deaktiviert. @@ -6873,7 +6902,7 @@ Mit Server verbunden. - + Server connection failed: %1. Serververbindung fehlgeschlagen: %1. @@ -6883,7 +6912,7 @@ Verbindung zum Server unterbrochen. - + Reconnecting. Neuverbindung. @@ -7250,7 +7279,12 @@ Willkommen in Mumble. - + + Skipping version check in debug mode. + + + + Push-to-Talk Global Shortcut Push-To-Talk @@ -7371,12 +7405,12 @@ Dies wechselt den Modus des Ingame-Overlays. - + File is not a configuration file. Die Datei ist keine Konfigurationsdatei. - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Diese Version von Mumble kann keine URLs von Mumble Version %1.%2.%3 verarbeiten @@ -7402,7 +7436,12 @@ <p>%1 (%2)<br />%3</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + Images (*.png *.jpg *.jpeg *.svg) Bilder (*.png *.jpg *.jpeg *.svg) @@ -7411,7 +7450,7 @@ <h2>Kontrollkanal</h2><p>Verschlüsselt mit %1 bit %2<br />%3 ms Durchschnittslatenz (%4 Abweichung)</p> - + <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 deviation)</p> <h2>Sprachkanal</h2><p>Verschlüsselt mit 128 bit OCB-AES128<br />%1 ms Durchschnittslatenz (%4 Abweichung)</p> @@ -7431,24 +7470,23 @@ Wollen Sie wirklich den Kommentar des Benutzers %1 löschen? - + To %1 (Tree): %2 (Tree) %1: %2 An %1 (Baum): %2 - - + + - + To %1: %2 %1: %2 An %1: %2 - Failed to launch compatibility client - Starten des Kompatibilitätsclienten fehlgeschlagen + Starten des Kompatibilitätsclienten fehlgeschlagen Images (*.png *.jpg) @@ -7463,7 +7501,7 @@ Öffnen der Bilddatei fehlgeschlagen. - + Register yourself as %1 Sich selbst als %1 registrieren @@ -7505,8 +7543,8 @@ An den Kanal %1: %2 - - + + Message to channel %1 Nachricht an den Kanal %1 @@ -7516,7 +7554,7 @@ Sind Sie sicher, dass Sie %1 und alle Unterkanäle löschen möchten? - + Connected. Verbunden. @@ -7527,9 +7565,8 @@ SSL Versions Diskrepanz - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Dieser Server verwendet einen älteren Verschlüsselungsstandard. Es könnte ein älterer 1.1 basierter Mumble Server sein.<br/> + Dieser Server verwendet einen älteren Verschlüsselungsstandard. Es könnte ein älterer 1.1 basierter Mumble Server sein.<br/> Möchten Sie die Kompatibilitätsversion starten und zu ihm verbinden? @@ -7537,13 +7574,12 @@ Konnte die Kompatibilitätsversion nicht starten - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Die Kompatibilitätsversion konnte nicht gefunden oder nicht gestartet werden.<br/> + Die Kompatibilitätsversion konnte nicht gefunden oder nicht gestartet werden.<br/> Beachten Sie, dass die Kompatibilitätsversion eine optionale Komponente bei den meisten Installationen ist und möglicherweise nicht mit installiert wurde. - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Geben Sie hier Ihre Nachricht an den Kanal '%1' ein</center> @@ -7613,13 +7649,13 @@ Sende eine Text-Nachricht an einen anderen Benutzer. - + Sending message to %1 Sende Nachricht an %1 - + Message to %1 Nachricht an %1 @@ -7628,7 +7664,7 @@ Ändere Beschreibung von Kanal %1 - + Invalid username Ungültiger Benutzername @@ -7677,7 +7713,7 @@ Schickt eine Textnachricht an einen anderen Benutzer. - + &User &Benutzer @@ -7779,7 +7815,7 @@ Dies leitet Sie durch den Hardware-Konfigurationsprozess. - + SSL Verification failed: %1 SSL-Überprüfung fehlgeschlagen: %1 @@ -7838,7 +7874,7 @@ Dies zeigt erweitertete Informationen über die Verbindung zum Server an. - + Mumble Server Information Mumble - Server Informationen @@ -7848,17 +7884,17 @@ - + &View Certificate &Zertifikat zeigen - + Opening URL %1 Öffne URL %1 - + Mute Self Global Shortcut Selbst stumm stellen @@ -7905,19 +7941,19 @@ Flüstern/Rufen - - + + <center>Not connected</center> Not connected <center>Nicht verbunden</center> - + File does not exist Datei existiert nicht - + Change your comment Ändere deinen Kommentar @@ -7931,7 +7967,7 @@ Diese Datei ist keine Konfigurationsdatei. - + Settings merged from file. Einstellungen aus Datei eingelesen. @@ -7941,7 +7977,7 @@ URL-Schema ist nicht 'mumble' - + Connecting to %1 Verbinde zu %1 @@ -8053,7 +8089,7 @@ Über &Qt - + Sending message to channel %1 Sende Nachricht an den Kanal %1 @@ -8110,13 +8146,13 @@ Schließen - - + + Minimize Minimieren - + &Window &Fenster @@ -8168,7 +8204,7 @@ Leiser (-10%) - + Clear Löschen @@ -8306,6 +8342,11 @@ Priority Speaker Bevorzugter Sprecher + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -8739,6 +8780,11 @@ + Talking and recently active + + + + All in current channel Alle im aktuellen Kanal @@ -8753,12 +8799,32 @@ Sich selbst immer anzeigen - + + Configure recently active time (%1 seconds)... + + + + Columns Spalten + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Bearbeiten... @@ -8768,9 +8834,18 @@ Zoom zurücksetzen - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -8968,12 +9043,11 @@ Für mehr Optionen klicken Sie mit der rechten Maustaste auf einen Benutzer. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Overlay @@ -9461,7 +9535,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -9730,7 +9804,7 @@ PulseAudioSystem - + Default Input Standardeingabe @@ -9880,7 +9954,7 @@ ServerView - + Favorite Favoriten @@ -10319,7 +10393,7 @@ %1 (%2) - + %1 online (%2 idle) %1 online (%2 untätig) @@ -10521,7 +10595,7 @@ Der Download der neuen Mumble-Version war fehlerhaft und wurde gelöscht. - + Downloading new snapshot from %1 to %2 Neuer Snapshot wird heruntergeladen von %1 nach %2 diff -Nru mumble-1.2.3/src/mumble/mumble_en.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_en.ts --- mumble-1.2.3/src/mumble/mumble_en.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_en.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2269,7 +2269,7 @@ - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. @@ -2750,7 +2750,7 @@ ClientUser - + Friend @@ -2798,7 +2798,7 @@ ConfigDialog - + Accept changes @@ -2917,18 +2917,18 @@ ConnectDialog - + Connecting to %1 - - + + Enter username - + Adding host %1 @@ -2995,7 +2995,7 @@ - + &Connect @@ -3006,7 +3006,7 @@ - + Users @@ -3016,7 +3016,7 @@ - + Failed to fetch server list @@ -3281,7 +3281,7 @@ - + Uploading crash report @@ -3355,7 +3355,7 @@ DockTitleBar - + Drag here @@ -3453,14 +3453,6 @@ - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - - - - GlobalShortcutTarget @@ -3546,7 +3538,7 @@ GlobalShortcutX - + Mouse %1 @@ -3637,7 +3629,7 @@ Log - + Debug @@ -3737,7 +3729,7 @@ - + the server @@ -3781,7 +3773,7 @@ LogConfig - + Toggle console for %1 events @@ -3923,6 +3915,36 @@ Only accept whispers from friends + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4223,12 +4245,12 @@ MainWindow - + Root - + Push-to-Talk Global Shortcut @@ -4307,28 +4329,28 @@ - + Mumble -- %1 - + &Window - + Minimize - + Ctrl+M - + Close @@ -4338,7 +4360,7 @@ - + Mute Self Global Shortcut @@ -4380,14 +4402,14 @@ - - + + <center>Not connected</center> Not connected - + Clear @@ -4417,7 +4439,7 @@ - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 @@ -4505,13 +4527,13 @@ - - + + Message to channel %1 - + Connected. @@ -4521,17 +4543,7 @@ - - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - - - - - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - - - - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here @@ -4569,12 +4581,12 @@ - + Voice channel is sent over control channel. - + &User @@ -4584,13 +4596,13 @@ - + This will switch the states of the in-game overlay. Global Shortcut - + Change your comment @@ -4641,12 +4653,12 @@ - + &View Certificate - + Enter reason @@ -4658,25 +4670,25 @@ - + - + To %1: %2 - - + + Message to %1 - + Are you sure you want to reset the comment of user %1? - + Are you sure you want to delete %1 and all its sub-channels? @@ -4697,7 +4709,7 @@ - + Unmuted and undeafened. @@ -4752,12 +4764,12 @@ - - Failed to launch compatibility client + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. - + Server connection failed: %1. @@ -5714,6 +5726,11 @@ + + Skipping version check in debug mode. + + + Hide Frame @@ -5848,6 +5865,16 @@ Priority Speaker + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6166,6 +6193,11 @@ + Talking and recently active + + + + All in current channel @@ -6180,12 +6212,32 @@ - + + Configure recently active time (%1 seconds)... + + + + Columns + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... @@ -6195,8 +6247,13 @@ - - FPS: %1 + + Configure recently active time + + + + + Amount of seconds users remain active after talking: @@ -6220,12 +6277,7 @@ - - FPS: %1 - - - - + Overlay @@ -6658,7 +6710,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -6804,7 +6856,7 @@ PulseAudioSystem - + Default Input @@ -6946,7 +6998,7 @@ ServerView - + Favorite @@ -7347,7 +7399,7 @@ - + %1 online (%2 idle) @@ -7537,7 +7589,7 @@ - + Downloading new snapshot from %1 to %2 diff -Nru mumble-1.2.3/src/mumble/mumble_es.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_es.ts --- mumble-1.2.3/src/mumble/mumble_es.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_es.ts 2011-04-02 22:20:48.000000000 +0000 @@ -3374,7 +3374,7 @@ Usuario Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Vencimiento del certificado:</b> Su certificado está a punto de caducar. Debe renovarlo, o de lo contrario no podrá conectarse a los servidores en los que se haya registrado. @@ -3996,7 +3996,7 @@ ClientUser - + Friend Amigo @@ -4059,7 +4059,7 @@ &Aceptar - + Accept changes Aceptar cambios @@ -4215,7 +4215,7 @@ &Contraseña - + &Connect &Conectar @@ -4265,13 +4265,13 @@ Conectando a %1 - - + + Enter username Introduzca el nombre de usuario - + Adding host %1 Agregando anfitrión %1 @@ -4338,13 +4338,13 @@ %1 kbit/s - + &Filters &Filtros - + Users Usuarios @@ -4370,7 +4370,7 @@ Mumble - + Failed to fetch server list No se pudo obtener la lista de servidores @@ -4702,7 +4702,7 @@ Realmente esto no es nada divertido, pero aparentemente hay un error en el código de informe de errores, y no hemos conseguido enviar el informe. Puede informar a un desarrollador acerca del error %1 - + Uploading crash report Enviando informe de error @@ -4967,7 +4967,7 @@ DockTitleBar - + Drag here Arrastre aquí @@ -5091,9 +5091,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble ha detectado que es incapaz de recibir eventos de los Métodos Abreviados Globales cuando se ejecuta en segundo plano.<br /><br />Esto ocurre porque la característica de Acceso Universal llamada 'Habilitar acceso para dispositivos de asistencia' actualmente está deshabilitada.<br /><br />Por favor <a href=" ">habilite esta opción</a> y continúe cuando lo haya hecho. + Mumble ha detectado que es incapaz de recibir eventos de los Métodos Abreviados Globales cuando se ejecuta en segundo plano.<br /><br />Esto ocurre porque la característica de Acceso Universal llamada 'Habilitar acceso para dispositivos de asistencia' actualmente está deshabilitada.<br /><br />Por favor <a href=" ">habilite esta opción</a> y continúe cuando lo haya hecho. @@ -5221,7 +5220,7 @@ GlobalShortcutX - + Mouse %1 Raton %1 @@ -5424,7 +5423,7 @@ [%2] %1 - + Debug Depuración @@ -5564,7 +5563,7 @@ Usuario dejó el canal - + the server el servidor @@ -5609,7 +5608,7 @@ LogConfig - + Toggle console for %1 events Conmutar consola para eventos "%1" @@ -5778,6 +5777,36 @@ Characters Caracteres + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -6199,8 +6228,13 @@ Bienvenido a Mumble. + + Skipping version check in debug mode. + + + - + Root Root @@ -6707,9 +6741,9 @@ Elimina la textura actual definida por el usuario. - + - + Mumble -- %1 Mumble -- %1 @@ -6726,7 +6760,7 @@ &Jugador - + &Channel &Canal @@ -6749,7 +6783,7 @@ Expulsando al jugador %1 - + Enter reason Introduzca el motivo @@ -6772,7 +6806,7 @@ ¿Está seguro de que desa borrar %1 y todos sus subcanales? - + Unmuted and undeafened. Con voz y escucha. @@ -6815,7 +6849,7 @@ Conectado al servidor. - + Server connection failed: %1. Falló la conexión con el servidor: %1. @@ -6825,7 +6859,7 @@ Desconectado del servidor. - + Reconnecting. Volviendo a conectar. @@ -7197,7 +7231,7 @@ %1 ensordecido por %2. - + Push-to-Talk Global Shortcut Presionar-para-Hablar (PTT) @@ -7276,7 +7310,7 @@ %2 mudó a %1. - + Are you sure you want to delete %1 and all its sub-channels? ¿Está seguro de que desa borrar %1 y todos sus subcanales? @@ -7310,7 +7344,7 @@ Enviar un mensaje de texto - + Sending message to %1 Enviando mensaje a %1 @@ -7320,15 +7354,15 @@ - + - + To %1: %2 A %1: %2 - - + + Message to %1 Mensaje para %1 @@ -7342,22 +7376,21 @@ - + Message to channel %1 Mensaje al canal %1 - + Connected. Conectado. - Failed to launch compatibility client - No se pudo iniciar el cliente de compatibilidad + No se pudo iniciar el cliente de compatibilidad - + Invalid username Nombre de usuario inválido @@ -7406,7 +7439,7 @@ Envía un mensaje de texto a otro usuario. - + &User &Usuario @@ -7497,7 +7530,7 @@ Le guiará a través del proceso de configuración de su hardware de audio. - + SSL Verification failed: %1 Falló la verificación SSL: %1 @@ -7556,7 +7589,7 @@ Muestra información extendida acerca de la conexión con el servidor. - + Opening URL %1 Abriendo URL %1 @@ -7581,7 +7614,7 @@ El esquema del URL no es 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Esta versión de Mumble no puede manejar URLs para la versión %1.%2.%3 de Mumble @@ -7622,7 +7655,12 @@ <p>%1 (%2)<br />%3</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + Images (*.png *.jpg *.jpeg *.svg) Imágenes (*.png *.jpg *.jpeg *.svg) @@ -7635,7 +7673,7 @@ <h2>Canal de control</h2><p>Cifrado con %2 de %1 bit<br />%3 ms de latencia media (desviación %4)</p> - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> <h2>Canal de control</h2><p>Cifrado con %2 de %1 bit<br />%3 ms de latencia media (desviación %4)</p><p>Anfitrión remoto %5 (puerto %6)</p> @@ -7661,13 +7699,13 @@ Registrarse como %1 - + This will switch the states of the in-game overlay. Global Shortcut Esto conmutará el estado de la sobreimpresión durante el juego. - + <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> <p>Está a punto de registrarse en este servidor. Esta acción no puede deshacerse, y su nombre de usuario no puede cambiarse una vez que se complete. Será conocido para siempre como '%1' en este servidor.</p><p>¿Está seguro de que desea registrarse?</p> @@ -7703,32 +7741,30 @@ ¿Está seguro de que desea reiniciar el comentario sobre el usuario %1? - + To %1 (Tree): %2 (Tree) %1: %2 Al (Árbol) %1: %2 - + SSL Version mismatch Las versiones de SSL no coinciden - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Este servidor está usando un estándar de cifrado antiguo. Podría tratarse de un viejo servidor Mumble 1.1.<br />¿Le gustaría iniciar el cliente de compatibilidad para conectarse a él? + Este servidor está usando un estándar de cifrado antiguo. Podría tratarse de un viejo servidor Mumble 1.1.<br />¿Le gustaría iniciar el cliente de compatibilidad para conectarse a él? Failed to launch compatibilty client No se pudo iniciar el cliente de compatibilidad - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - No se pudo encontrar el cliente de compatibilidad, o este no se pudo iniciar.<br />Fíjese en que el cliente de compatibilidad es un componente opcional para la mayoría de instalaciones, y podría no estar instalado. + No se pudo encontrar el cliente de compatibilidad, o este no se pudo iniciar.<br />Fíjese en que el cliente de compatibilidad es un componente opcional para la mayoría de instalaciones, y podría no estar instalado. - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Escriba aquí el mensaje al canal '%1'</center> @@ -7769,8 +7805,8 @@ Canal de control: latencia %1 ms, Cifrado con %3 bit %4<br />Canal de voz: latencia %2 ms, Sin cifrar - - + + &View Certificate &Ver certificado @@ -7779,7 +7815,7 @@ <h2>Canal de control</h2><p>Cifrado con %2 de %1 bits<br />%3 ms de latencia media (%4 de varianza)</p> - + Push and hold this button to send voice. Global Shortcut Mantenga pulsado este botón para enviar la voz. @@ -7822,7 +7858,7 @@ Esto conmutará el estado de la sobreimpresión durante el juego entre mostrar a todos, sólo mostrar los jugadores que están hablando, y no mostrar a nadie. - + Voice channel is sent over control channel. El canal de voz se envía a través del canal de control. @@ -7870,7 +7906,7 @@ Cambiar descripción del canal %1 - + Sending message to channel %1 Enviando mensaje al canal %1 @@ -7977,13 +8013,13 @@ Cerrar - - + + Minimize Minimizar - + Mute Self Global Shortcut Enmudecerse @@ -8077,14 +8113,14 @@ Disminuir el volúmen (-10%) - - + + <center>Not connected</center> Not connected <center>Desconectado</center> - + Clear Borrar @@ -8276,6 +8312,11 @@ Priority Speaker Orador prioritario + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -8732,6 +8773,11 @@ + Talking and recently active + + + + All in current channel Todos en el canal actual @@ -8746,12 +8792,32 @@ Siempre mostrarse a sí mismo - + + Configure recently active time (%1 seconds)... + + + + Columns Columnas + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Editar... @@ -8761,9 +8827,18 @@ Restaurar zoom - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -8954,12 +9029,11 @@ Para más opciones, haga clic con el botón derecho sobre un usuario. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Sobreimpresión @@ -9485,7 +9559,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -9793,7 +9867,7 @@ PulseAudioSystem - + Default Input Entrada por defecto @@ -9939,7 +10013,7 @@ ServerView - + Favorite Favorito @@ -10367,7 +10441,7 @@ %1 (%2) - + %1 online (%2 idle) %1 conectado (%2 inactivo) @@ -10573,7 +10647,7 @@ Se ha detectado una descarga corrupta de la nueva versión. Se ha eliminado automáticamente. - + Downloading new snapshot from %1 to %2 Descargando nueva versión en desarrollo desde %1 en %2 diff -Nru mumble-1.2.3/src/mumble/mumble_fr.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_fr.ts --- mumble-1.2.3/src/mumble/mumble_fr.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_fr.ts 2011-04-02 22:20:48.000000000 +0000 @@ -3157,7 +3157,7 @@ Utilisateur Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Expiration du certificat :</b> Votre certificat va bientôt expirer. Vous devez le renouveler ou vous ne pourrez plus vous connecter aux serveurs auxquels vous êtes enregistrés. @@ -3765,7 +3765,7 @@ ClientUser - + Friend Ami @@ -3828,7 +3828,7 @@ &Valider - + Accept changes Accepter les modifications @@ -3980,7 +3980,7 @@ Mot de &passe - + &Connect &Connexion @@ -4030,13 +4030,13 @@ Connexion à %1 - - + + Enter username Entrer le nom d'utilisateur - + Adding host %1 Ajout de l'hôte %1 @@ -4115,7 +4115,7 @@ - + &Add New... Add New... &Ajouter un nouveau... @@ -4457,7 +4457,7 @@ Ce n'est vraiment pas drôle, mais il semblerait qu'il y ait un bogue dans le code du rapport d'erreur, et donc, le rapport n'a pu être envoyé. Vous devriez informer un développeur à propos de l'erreur %1 - + Uploading crash report Envoi du rapport d'erreur @@ -4694,7 +4694,7 @@ DockTitleBar - + Drag here Glisser ici @@ -4818,9 +4818,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble a détecté qu'il n'est pas capable de recevoir l'évènements de raccourcis global quand il est en arrière plan.<br/><br/>C'est parce que la fonction d'Accès Universel nommée 'Activer l'accès pour les périphériques d'aide' est actuellement désactivée.<br/><br/>Veuillez <a href=" ">activer ce paramètre</a> et continuer quand c'est fait. + Mumble a détecté qu'il n'est pas capable de recevoir l'évènements de raccourcis global quand il est en arrière plan.<br/><br/>C'est parce que la fonction d'Accès Universel nommée 'Activer l'accès pour les périphériques d'aide' est actuellement désactivée.<br/><br/>Veuillez <a href=" ">activer ce paramètre</a> et continuer quand c'est fait. @@ -4944,7 +4943,7 @@ GlobalShortcutX - + Mouse %1 Souris %1 @@ -5075,7 +5074,7 @@ Log - + Debug Debogage @@ -5219,7 +5218,7 @@ Message texte - + the server le serveur @@ -5263,7 +5262,7 @@ LogConfig - + Toggle console for %1 events Active/désactive la console pour les événements %1 @@ -5418,6 +5417,36 @@ Characters Caractères + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -5815,8 +5844,13 @@ Bienvenue sur Mumble. + + Skipping version check in debug mode. + + + - + Root Racine @@ -6008,7 +6042,7 @@ &Délier - + &User &Utilisateur @@ -6413,9 +6447,9 @@ Se connecte au site web de Mumble, vérifie si une nouvelle version est disponible, et vous propose un lien de téléchargement approprié le cas échéant. - + - + Mumble -- %1 Mumble -- %1 @@ -6437,7 +6471,7 @@ &Joueur - + &Channel &Salon @@ -6456,7 +6490,7 @@ &Aide - + Push-to-Talk Global Shortcut Appuyez-pour-parler @@ -6549,7 +6583,7 @@ Expulsion du joueur %1 - + Enter reason Entrez la raison @@ -6568,12 +6602,12 @@ Nom du canal - + Are you sure you want to delete %1 and all its sub-channels? Etes-vous sûr(e) de vouloir supprimer %1 ainsi que tous ses sous-salons ? - + Unmuted and undeafened. N'est pas sourd(e) et muet(te). @@ -6616,7 +6650,7 @@ Connecté au serveur. - + Server connection failed: %1. La connexion au serveur à échoué : %1. @@ -6626,7 +6660,7 @@ Déconnecté du serveur. - + Reconnecting. Reconnexion. @@ -7003,20 +7037,20 @@ - + - + To %1: %2 À %1: %2 - - + + Message to %1 Message à %1 - + View comment on user %1 Voir le commentaire de l'utilisateur %1 @@ -7026,18 +7060,17 @@ Êtes-vous sûr(e) de vouloir réinitialiser le commentaire de l'utilisateur %1 ? - + To %1 (Tree): %2 (Tree) %1: %2 A l'arborescence %1 : %2 - Failed to launch compatibility client - Erreur lors du lancement du client de compatibilité + Erreur lors du lancement du client de compatibilité - + Invalid username Nom d'utilisateur invalide @@ -7100,7 +7133,7 @@ Ceci vous guidera dans la configuration de votre matériel audio. - + SSL Verification failed: %1 Vérification SSL échoué: %1 @@ -7130,7 +7163,7 @@ Ceci affiche des informations supplémentaires sur la connexion au serveur. - + Opening URL %1 Ouvrir l'URL %1 @@ -7155,7 +7188,7 @@ Le schéma d'URL n'est pas 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Cette version de Mumble ne peut pas manipuler les URLs pour Mumble version %1.%2.%3 @@ -7196,7 +7229,12 @@ <p>%1 (%2)<br />%3</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + Images (*.png *.jpg *.jpeg *.svg) Images (*.png *.jpg *.jpeg *.svg) @@ -7205,7 +7243,7 @@ <h2>Canal de contrôle</h2><p>Chiffré en %2 %1 bits<br/>%3 ms de latence moyenne (déviation de %4)</p> - + <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 deviation)</p> <h2>Canal de voix</h2><p>Chiffré en OCB-AES128 128 bits<br/>%1 ms de latence moyenne (déviation de %4)</p> @@ -7221,12 +7259,12 @@ - + &View Certificate &Voir le certificat - + Register yourself as %1 S'enregistrement en tant que %1 @@ -7266,13 +7304,13 @@ Du salon %1: %2 - - + + Message to channel %1 Message pour le salon %1 - + Connected. Connecté. @@ -7282,26 +7320,24 @@ Incompatibilité de version SSL - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Ce serveur utilse un vieux standard de chiffrage. Ce doit être un serveur Mumble basé sur la version 1.1<br/>Voulez-vous lancer le client de compatibilité pour vous y connecter ? + Ce serveur utilse un vieux standard de chiffrage. Ce doit être un serveur Mumble basé sur la version 1.1<br/>Voulez-vous lancer le client de compatibilité pour vous y connecter ? Failed to launch compatibilty client Impossible de lancer le client de compatibilité - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Le client de compatibilité n'a pas pu être trouvé, ou n'a pas pu être lancé.<br/>Celui-ci étant un composant optionnel pour la majorité des installations, il peut ne pas être installé. + Le client de compatibilité n'a pas pu être trouvé, ou n'a pas pu être lancé.<br/>Celui-ci étant un composant optionnel pour la majorité des installations, il peut ne pas être installé. - + <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> <p>%1.<br />Les erreurs de ce certificat sont les suivantes: </p><ol>%2</ol><p>Voulez-vous quand même accepter ce certificat ?<br />(Il sera également stocké et ne vous sera pas redemandé.)</p> - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Saisir un message pour le salon '%1' ici</center> @@ -7338,18 +7374,18 @@ Format d'image non reconnu. - + Voice channel is sent over control channel. La voix est envoyée au dessus du canal de contrôle. - + This will switch the states of the in-game overlay. Global Shortcut Ceci changera l'état de l'overlay. - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> <h2>Canal de contrôle</h2><p>Chiffré en %2 %1 bits<br/>%3 ms de latence moyenne (déviation de %4)</p><p>Hôte distant %5 (port %6)</p> @@ -7389,7 +7425,7 @@ Resynchronise - + Sending message to channel %1 Envoyé un message au salon %1 @@ -7484,13 +7520,13 @@ Fermer - - + + Minimize Réduire - + Mute Self Global Shortcut Se rendre muet(te) @@ -7584,14 +7620,14 @@ Diminuer le volume (-10%) - - + + <center>Not connected</center> Not connected <center>Non connecté</center> - + Clear Effacer @@ -7767,6 +7803,16 @@ Priority Speaker Parole prioritaire + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -8194,6 +8240,11 @@ + Talking and recently active + + + + All in current channel Tous dans le salon courant @@ -8208,12 +8259,32 @@ Toujours s'afficher - + + Configure recently active time (%1 seconds)... + + + + Columns Colonnes + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Éditer... @@ -8223,9 +8294,18 @@ Réinitialiser le zoom - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS : %1 + FPS : %1 @@ -8420,12 +8500,11 @@ Pour plus d'options, faites un clic-droit sur un utilisateur. - FPS: %1 - FPS : %1 + FPS : %1 - + Overlay Overlay @@ -8937,7 +9016,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -9221,7 +9300,7 @@ PulseAudioSystem - + Default Input Entrée par défaut @@ -9367,7 +9446,7 @@ ServerView - + Favorite Favoris @@ -9785,7 +9864,7 @@ %1 (%2) - + %1 online (%2 idle) %1 en ligne (%2 au repos) @@ -9987,7 +10066,7 @@ Détection d'un téléchargement corrompu d'une nouvelle version. Suppression automatique. - + Downloading new snapshot from %1 to %2 Téléchargement du nouveau snapshot de %1 à %2 diff -Nru mumble-1.2.3/src/mumble/mumble_he.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_he.ts --- mumble-1.2.3/src/mumble/mumble_he.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_he.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2299,7 +2299,7 @@ - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. @@ -2780,7 +2780,7 @@ ClientUser - + Friend חבר @@ -2828,7 +2828,7 @@ ConfigDialog - + Accept changes <p dir="RTL">הסכם לשינויים</p> @@ -2945,18 +2945,18 @@ ConnectDialog - + Connecting to %1 מתחבר ל %1 - - + + Enter username הכנס שם משתמש - + Adding host %1 <p dir="RTL">הוספת מארח %1</p> @@ -3023,7 +3023,7 @@ <p dir="RTL">%1 ק"ב/ש</p> - + &Connect &התחבר @@ -3034,7 +3034,7 @@ - + Users משתמשים @@ -3048,7 +3048,7 @@ <p dir="RTL">ממבל</p> - + Failed to fetch server list <p dir="RTL">השגת רשימת שרתים נכשלה</p> @@ -3328,7 +3328,7 @@ - + Uploading crash report @@ -3402,7 +3402,7 @@ DockTitleBar - + Drag here @@ -3500,14 +3500,6 @@ - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - - - - GlobalShortcutTarget @@ -3601,7 +3593,7 @@ GlobalShortcutX - + Mouse %1 @@ -3692,7 +3684,7 @@ Log - + Debug @@ -3792,7 +3784,7 @@ משתמש עזב את החדר - + the server השרת @@ -3837,7 +3829,7 @@ LogConfig - + Toggle console for %1 events @@ -3979,6 +3971,36 @@ Only accept whispers from friends + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4279,12 +4301,12 @@ MainWindow - + Root - + Push-to-Talk Global Shortcut לחץ-כדי-לדבר @@ -4363,28 +4385,28 @@ - + Mumble -- %1 ממבל -- %1 - + &Window &חלון - + Minimize מזער - + Ctrl+M - + Close סגור @@ -4394,7 +4416,7 @@ <p dir="RTL">ממבל מחובר כרגע לשרת, האם אתה רוצה לסגור או למזער אותו?</p> - + Mute Self Global Shortcut השתק את עצמך @@ -4438,7 +4460,7 @@ לא מחובר - + Clear נקה @@ -4468,7 +4490,7 @@ <p dir="RTL">צורת הכתובת היא לא 'ממבל'</p> - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 <p dir="RTL">הגירסא הזאת של ממבל לא יכולה לטפל בכתובות לממבל מגירסא %1.%2.%3</p> @@ -4556,8 +4578,8 @@ - - + + Message to channel %1 <p dir="RTL">הודעה לחדר %1</p> @@ -4567,7 +4589,7 @@ - + Connected. מחובר. @@ -4577,16 +4599,6 @@ <p dir="RTL">גירסאת SSL לא תואמת</p> - - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - - - - - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - - - Type message to channel '%1' here <p dir="RTL">רשום הודעה לחדר %1 כאן</p> @@ -4595,7 +4607,7 @@ <p dir="RTL">רשום הודעה למשתמש %1 כאן</p> - + Choose image file בחר קובץ תמונה @@ -4620,12 +4632,12 @@ <p dir="RTL">פורמט התמונה לא מזוהה.</p> - + Voice channel is sent over control channel. - + &User &משתמש @@ -4635,7 +4647,7 @@ &חדר - + This will switch the states of the in-game overlay. Global Shortcut @@ -4646,13 +4658,13 @@ לחש/צעק - - + + <center>Not connected</center> <center><p dir="RTL">לא מחובר</p></center> - + Change your comment @@ -4703,12 +4715,12 @@ - + &View Certificate - + Enter reason הכנס סיבה @@ -4720,25 +4732,25 @@ - + - + To %1: %2 <p dir="RTL">ל %1: %2</p> - - + + Message to %1 <p dir="RTL">הודעה ל %1</p> - + Are you sure you want to reset the comment of user %1? - + Are you sure you want to delete %1 and all its sub-channels? <p dir="RTL">האם אתה בטוח שאתה רוצה למחוק %1 ואת כל תת-החדרים שלו?</p> @@ -4753,7 +4765,12 @@ - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + <center>Type message to channel '%1' here</center> <center><p dir="RTL">רשום הודעה לחדר %1 כאן</p></center> @@ -4768,7 +4785,7 @@ - + Unmuted and undeafened. @@ -4823,12 +4840,7 @@ - - Failed to launch compatibility client - - - - + Server connection failed: %1. <p dir="RTL">התחברות לשרת נכשלה: %1.</p> @@ -5785,6 +5797,11 @@ <p dir="RTL">ברוך הבא לממבל.</p> + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? <p dir="RTL">זאת הפעם הראשונה שאתה מפעיל את ממבל.<br />האם תרצה לעבור על אשף כיוון הצלילים כדי להגדיר את כרטיס הקול שלך?</p> @@ -5923,6 +5940,16 @@ Recording + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6241,6 +6268,11 @@ + Talking and recently active + + + + All in current channel @@ -6255,12 +6287,32 @@ - + + Configure recently active time (%1 seconds)... + + + + Columns + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... @@ -6270,8 +6322,13 @@ - - FPS: %1 + + Configure recently active time + + + + + Amount of seconds users remain active after talking: @@ -6293,12 +6350,7 @@ - - FPS: %1 - - - - + Overlay @@ -6730,7 +6782,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -6876,7 +6928,7 @@ PulseAudioSystem - + Default Input @@ -7018,7 +7070,7 @@ ServerView - + Favorite @@ -7417,7 +7469,7 @@ - + %1 online (%2 idle) @@ -7611,7 +7663,7 @@ - + Downloading new snapshot from %1 to %2 diff -Nru mumble-1.2.3/src/mumble/mumble_it.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_it.ts --- mumble-1.2.3/src/mumble/mumble_it.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_it.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2721,7 +2721,7 @@ Utente Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Scadenza certificato:</b> Il tuo certificato sta per scadere. Devi rinnovarlo, o non sarai più in grado di connetterti ai server a cui ti sei registrato. @@ -3331,7 +3331,7 @@ ClientUser - + Friend Amico @@ -3379,7 +3379,7 @@ ConfigDialog - + Accept changes Accetta i cambiamenti @@ -3506,13 +3506,13 @@ ConnectDialog - + Connecting to %1 Connessione a %1 - - + + Enter username Inserisci il nome utente @@ -3521,7 +3521,7 @@ Sconosciuto - + Adding host %1 Aggiunta host %1 @@ -3588,13 +3588,13 @@ %1 kbit/s - + &Filters &Filtri - + Users Utenti @@ -3620,7 +3620,7 @@ Mumble - + Failed to fetch server list Errore nello scaricamento della lista dei server @@ -4005,7 +4005,7 @@ Questo veramente non è divertente, ma apparentemente c'è un bug nel codice del rapporto, e abbiamo fallito ad inviare il rapporto. Puoi informare uno sviluppatore sull'errore %1 - + Uploading crash report Invio rapporto errore in corso @@ -4084,7 +4084,7 @@ DockTitleBar - + Drag here Trascina qui @@ -4184,9 +4184,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble ha rilevato che non è in grado di ricevere i segnali delle Scorciatoie Globali quando è in background.<br /><br />Questo è dovuto alla funzione di Accesso Universale chiamata 'Abilita accesso per i dispositivi di assistenza' che è attualmente disattivata.<br /><br />Si prega di <a href="">abilitare questa impostazione</a> e proseguire quando terminato. + Mumble ha rilevato che non è in grado di ricevere i segnali delle Scorciatoie Globali quando è in background.<br /><br />Questo è dovuto alla funzione di Accesso Universale chiamata 'Abilita accesso per i dispositivi di assistenza' che è attualmente disattivata.<br /><br />Si prega di <a href="">abilitare questa impostazione</a> e proseguire quando terminato. @@ -4287,7 +4286,7 @@ GlobalShortcutX - + Mouse %1 Mouse %1 @@ -4465,7 +4464,7 @@ Log - + Debug Debug @@ -4605,7 +4604,7 @@ Utente uscito dal canale - + the server il server @@ -4650,7 +4649,7 @@ LogConfig - + Toggle console for %1 events Imposta console per gli eventi %1 @@ -4807,6 +4806,36 @@ Only accept whispers from friends Accetta sussurri solo dagli amici + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -5184,12 +5213,12 @@ MainWindow - + Root Radice - + Push-to-Talk Global Shortcut Premi-per-parlare @@ -5328,28 +5357,28 @@ - + Mumble -- %1 Mumble -- %1 - + &Window &Finestra - + Minimize Minimizza - + Ctrl+M Ctrl+M - + Close Chiudi @@ -5359,7 +5388,7 @@ Mumble è attualmente connesso ad un server. Vuoi Chiuderlo o Minimizzarlo? - + Mute Self Global Shortcut Mutati @@ -5406,14 +5435,14 @@ Sussurra/Urla - - + + <center>Not connected</center> Not connected <center>Disconnesso</center> - + Clear Cancella @@ -5443,7 +5472,7 @@ Lo schema dell'URL non è 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Questa versione di Mumble non può utilizzare gli URL di Mumble versione %1.%2.%3 @@ -5495,7 +5524,12 @@ <h2>Canale di controllo</h2><p>Crittografato con %1 bit %2<br/>%3 ms latenza media (%4 deviazione)</p><p>Host remoto %5 (porta%6)</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + Images (*.png *.jpg *.jpeg *.svg) @@ -5508,7 +5542,7 @@ <h2>Canale di controllo</h2><p>Crittografato con %1 bit %2<br/>%3 ms latenza media (%4 deviazione)</p> - + <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 deviation)</p> <h2>Canale di voce</h2><p>Crittografato con 128 bit OCB-AES128<br/>%1 ms latenza media (%4 deviazione)</p> @@ -5524,13 +5558,13 @@ Registrati come %1 - + This will switch the states of the in-game overlay. Global Shortcut Cambia lo stato della sovrapposizione in gioco. - + <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> <p>Stai per registrarti sul server. Quest'azione non può essere annullata, il tuo nome utente non potrà essere cambiato. Sarai per sempre conosciuto come '%1' su questo server.<p>Se sicuro di volerti registrare?</p> @@ -5574,8 +5608,8 @@ Al canale %1: %2 - - + + Message to channel %1 Messaggio al canale %1 @@ -5586,16 +5620,16 @@ Al canale %1 e ai suoi sottocanali:%2 - - + + - + To %1: %2 %1: %2 Per %1: %2 - + Connected. Connesso. @@ -5605,17 +5639,15 @@ Versione SSL diversa - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Questo server utilizza un vecchio standard di cifratura. Potrebbe essere un vecchio server basato su Mumble 1.1 .<br />Vorresti aprire il client retrocompatibile per connetterti a questo server? + Questo server utilizza un vecchio standard di cifratura. Potrebbe essere un vecchio server basato su Mumble 1.1 .<br />Vorresti aprire il client retrocompatibile per connetterti a questo server? - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Il client retrocompatibile non è stato trovato, o la sua apertura è fallita.<br />Nota che il client retrocompatibile è un componente facoltativo in molte installazioni, e potrebbe non essere installato. + Il client retrocompatibile non è stato trovato, o la sua apertura è fallita.<br />Nota che il client retrocompatibile è un componente facoltativo in molte installazioni, e potrebbe non essere installato. - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Inserisci qui il messaggio per il canale '%1'</center> @@ -5656,7 +5688,7 @@ <h2>Canale di controllo</h2><p>Crittografato con %1 bit %2<br/>%3 ms latenza media (%4 variazione)</p> - + Voice channel is sent over control channel. Il canale di voce è trasmesso sul canale di controllo. @@ -5710,7 +5742,7 @@ - + &View Certificate &Visualizza certificato @@ -5719,7 +5751,7 @@ Espulsione giocatore %1 - + Enter reason Inserisci motivazione @@ -5735,7 +5767,7 @@ - + Message to %1 Messaggio a %1 @@ -5744,7 +5776,7 @@ Nome canale - + Are you sure you want to delete %1 and all its sub-channels? Sei sicuro di voler cancellare %1 e tutti i suoi sottocanali? @@ -5771,7 +5803,7 @@ Messaggio al canale %1 ed ai suoi sottocanali - + Unmuted and undeafened. Ti sei riattivato. @@ -5834,12 +5866,11 @@ <p>%1.<br />L'errore specifico con il certificato è: </p><ol>%2</ol><p>Vuoi accettare questo certificato ugualmente?<br />(Questo sarà anche salvato quindi non ti sarà chiesto di nuovo.)</p> - Failed to launch compatibility client - Apertura client retrocompatibile fallita + Apertura client retrocompatibile fallita - + Server connection failed: %1. Connessione al server fallita: %1. @@ -5887,7 +5918,7 @@ &Giocatore - + &Channel &Canale @@ -7005,6 +7036,11 @@ Benvenuto su Mumble. + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? Questa è la prima volta che avvii Mumble.<br />Vorresti essere aiutato dall'Audio Wizard per configurare la tua scheda audio e le impostazioni audio? @@ -7163,6 +7199,16 @@ Priority Speaker Priorità sugli altri + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -7537,6 +7583,11 @@ + Talking and recently active + + + + All in current channel Tutti quelli nel canale attuale @@ -7551,12 +7602,32 @@ Visualizza sempre se stessi - + + Configure recently active time (%1 seconds)... + + + + Columns Colonne + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Modifica... @@ -7566,9 +7637,18 @@ Reimposta zoom - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -7623,12 +7703,11 @@ Per le impostazioni avanzate, fare click con il pulsante destro su di un utente. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Sovrapposizione @@ -8233,7 +8312,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -8431,7 +8510,7 @@ PulseAudioSystem - + Default Input Ingresso predefinito @@ -8577,7 +8656,7 @@ ServerView - + Favorite Preferiti @@ -9000,7 +9079,7 @@ %1 (%2) - + %1 online (%2 idle) %1 online (%2 inattivo) @@ -9198,7 +9277,7 @@ La nuova versione scaricata si è rivelata corrotta ed è quindi stata automaticamente rimossa. - + Downloading new snapshot from %1 to %2 Download in corso della Snapshot %2 (attuale %1) diff -Nru mumble-1.2.3/src/mumble/mumble_ja.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_ja.ts --- mumble-1.2.3/src/mumble/mumble_ja.ts 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_ja.ts 2011-04-02 22:20:48.000000000 +0000 @@ -3343,7 +3343,7 @@ Mumble ユーザ - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>証明書の有効期限:</b>あなたの証明書の有効期限がもうすぐ切れます。証明書を更新する必要があります。さもないとあなたはユーザ登録したサーバに接続できなくなるでしょう。 @@ -3960,7 +3960,7 @@ ClientUser - + Friend フレンド @@ -4023,7 +4023,7 @@ &OK - + Accept changes 変更を確定 @@ -4179,7 +4179,7 @@ パスワード(&P) - + &Connect 接続(&C) @@ -4229,13 +4229,13 @@ %1に接続中 - - + + Enter username ユーザ名を入力してください - + Adding host %1 ホスト %1 を追加中 @@ -4302,13 +4302,13 @@ - + &Filters フィルタ(&F) - + Users ユーザ @@ -4334,7 +4334,7 @@ Mumble - + Failed to fetch server list サーバリストを取得出来ませんでした @@ -4675,7 +4675,7 @@ - + Uploading crash report @@ -4925,7 +4925,7 @@ DockTitleBar - + Drag here ここにドラッグ @@ -5049,9 +5049,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - バックグラウンドでグローバルなショートカットイベントが発生し、受け入れることができませんでした。<br /><br />'補助デバイスへのアクセス' のようなユニバーサルアクセス機能が無効になっているのが原因です。<br /><br /><a href=" ">この設定を有効にして</a> その後、再び設定してください。 + バックグラウンドでグローバルなショートカットイベントが発生し、受け入れることができませんでした。<br /><br />'補助デバイスへのアクセス' のようなユニバーサルアクセス機能が無効になっているのが原因です。<br /><br /><a href=" ">この設定を有効にして</a> その後、再び設定してください。 @@ -5175,7 +5174,7 @@ GlobalShortcutX - + Mouse %1 マウス %1 @@ -5312,7 +5311,7 @@ Log - + Debug デバッグ @@ -5452,7 +5451,7 @@ ユーザがチャンネルから退出 - + the server サーバ @@ -5496,7 +5495,7 @@ LogConfig - + Toggle console for %1 events イベント「%1」 のためのコンソールを切り替える @@ -5667,6 +5666,36 @@ Characters 文字 + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -6072,7 +6101,7 @@ MainWindow - + Root ルート @@ -6588,9 +6617,9 @@ Mumbleのウェブページに接続して新しいバージョンが出ているかを確認します。もし新しいのが出ていたら適切なダウンロードURLを通知します。 - + - + Mumble -- %1 Mumble -- %1 @@ -6612,7 +6641,7 @@ プレイヤー(&P) - + &Channel チャンネル(&C) @@ -6631,7 +6660,7 @@ ヘルプ(&H) - + Push-to-Talk Global Shortcut プッシュ・トゥ・トーク @@ -6749,7 +6778,7 @@ プレイヤー %1 をキックしました。 - + Enter reason 理由を入力してください @@ -6768,12 +6797,12 @@ チャンネル名 - + Are you sure you want to delete %1 and all its sub-channels? %1 とそのサブチャンネルを全て削除します。よろしいですか? - + Unmuted and undeafened. 発言禁止と聴取禁止も解除しました。 @@ -6816,7 +6845,7 @@ サーバに接続しました。 - + Server connection failed: %1. サーバへの接続に失敗しました: %1. @@ -6826,7 +6855,7 @@ サーバから切断しました。 - + Reconnecting. 再接続中です。 @@ -7193,6 +7222,11 @@ Mumbleへようこそ。 + + Skipping version check in debug mode. + + + &Quit Mumble 終了(&Q) @@ -7223,20 +7257,20 @@ - + - + To %1: %2 %1 宛: %2 - - + + Message to %1 %1 へのメッセージ - + View comment on user %1 ユーザ %1 のコメントを見ます @@ -7246,18 +7280,17 @@ ユーザ %1 のコメントをリセットしますか? - + To %1 (Tree): %2 (Tree) %1: %2 (ツリー) %1宛: %2 - Failed to launch compatibility client - 互換クライアントの起動に失敗しました + 互換クライアントの起動に失敗しました - + Invalid username 無効なユーザ名 @@ -7315,7 +7348,7 @@ 他のユーザにテキストメッセージを送信します。 - + &User ユーザ(&U) @@ -7407,7 +7440,7 @@ サウンドハードウェアの設定プロセスに案内します。 - + SSL Verification failed: %1 SSL検証エラー: %1 @@ -7437,7 +7470,7 @@ サーバとの接続についての詳細な情報を表示します。 - + Opening URL %1 URL %1 を開きます @@ -7462,7 +7495,7 @@ URLスキームは 'mumble' ではありません - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 このバージョンのMumble は Mumble %1.%2.%3 のための URL を扱えません @@ -7523,24 +7556,24 @@ - + &View Certificate 証明書を見る(&V) - + Register yourself as %1 %1 の名前で自分をユーザ登録します - + This will switch the states of the in-game overlay. Global Shortcut ゲームオーバレイの状態を切り替えます。 - + <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> <p>サーバ上で自分自身をユーザ登録しようとしています。このアクションは取り消せません。このサーバでのあなたのユーザ名をこの操作の後に変更できなくなります。あなたはこのサーバ上で '%1' のユーザ名を使うことになります。</p><p>本当に自分自身を登録しますか?</p> @@ -7574,13 +7607,13 @@ チャンネル %1 宛: %2 - - + + Message to channel %1 チャンネル %1 へのメッセージ - + Connected. サーバに接続しました。 @@ -7590,31 +7623,34 @@ SSL のバージョンが一致しません - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - このサーバはより古い暗号化手順を使用しています。 1.1 ベースの Mumble サーバである可能性があります。<br />このサーバに接続するために互換クライアントを起動しますか? + このサーバはより古い暗号化手順を使用しています。 1.1 ベースの Mumble サーバである可能性があります。<br />このサーバに接続するために互換クライアントを起動しますか? Failed to launch compatibilty client 互換クライアントの起動に失敗 - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - 互換クライアントが見つからないか起動に失敗しました。<br />互換クライアントはほとんどのインストールに置いて任意の項目であり、インストールされていない可能性があります。 + 互換クライアントが見つからないか起動に失敗しました。<br />互換クライアントはほとんどのインストールに置いて任意の項目であり、インストールされていない可能性があります。 - + <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> <p>%1.<br />詳細な証明書エラーの内容: </p><ol>%2</ol><p>この証明書を受け入れますか?<br />(同時に証明書を保存するので、今後この質問は表示されません。)</p> - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> <h2>制御チャンネル</h2><p>%1 bit %2 で暗号化されています。<br />平均 %3 ms の遅延 (平方偏差 %4)</p><p>リモートホスト %5 (ポート %6)</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + <center>Type message to channel '%1' here</center> Type message to channel '%1' here チャンネル '%1' へのメッセージをここに入力 @@ -7655,7 +7691,7 @@ <h2>制御チャンネル</h2><p>%1 bit %2 で暗号化されています。<br />平均 %3 ms の遅延 (平方偏差 %4)</p> - + Voice channel is sent over control channel. 音声チャンネルは管理チャンネルを通して送信されます。 @@ -7703,7 +7739,7 @@ チャンネル 「%1」 の説明を変更する - + Sending message to channel %1 チャンネル %1 に送信するメッセージ @@ -7810,13 +7846,13 @@ 閉じる - - + + Minimize 最小化 - + Mute Self Global Shortcut 発言禁止状態 @@ -7910,14 +7946,14 @@ 音量を下げる(-10%) - - + + <center>Not connected</center> Not connected 接続されていません - + Clear クリア @@ -8113,6 +8149,11 @@ Priority Speaker 優先度スピーカ + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -8556,6 +8597,11 @@ + Talking and recently active + + + + All in current channel 同じチャンネルにいる人全て @@ -8570,12 +8616,32 @@ 自分自身を常に表示する - + + Configure recently active time (%1 seconds)... + + + + Columns + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... 編集... @@ -8585,9 +8651,14 @@ ズームをリセット - - FPS: %1 - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + @@ -8782,12 +8853,7 @@ 更なる設定をするには、ユーザを右クリックしてください。 - - FPS: %1 - - - - + Overlay オーバーレイ @@ -9305,7 +9371,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -9657,7 +9723,7 @@ PulseAudioSystem - + Default Input デフォルト入力 @@ -9803,7 +9869,7 @@ ServerView - + Favorite お気に入り @@ -10226,7 +10292,7 @@ - + %1 online (%2 idle) オンライン時間 %1 (アイドル時間 %2) @@ -10424,7 +10490,7 @@ 新しいバージョンの破損したダウンロードが検知されました。自動的に削除されました。 - + Downloading new snapshot from %1 to %2 %1 から %2 に新しい snapshot をダウンロード中です diff -Nru mumble-1.2.3/src/mumble/mumble_pch.hpp mumble-1.2.3-87-gf7d8711/src/mumble/mumble_pch.hpp --- mumble-1.2.3/src/mumble/mumble_pch.hpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_pch.hpp 2011-04-02 22:20:48.000000000 +0000 @@ -3,8 +3,8 @@ #define _MUMBLE_PCH_H #define QT_NO_DEBUG_STREAM -#define QT_ASCII_CAST_WARNINGS #define QT_NO_CAST_TO_ASCII +#define QT_NO_CAST_FROM_ASCII #define QT_USE_FAST_CONCATENATION #define QT_USE_FAST_OPERATOR_PLUS @@ -33,7 +33,6 @@ #include #endif #include -#include #include #include @@ -46,7 +45,6 @@ /* OpenSSL defines set_key. This breaks our protobuf-generated setters. */ #undef set_key -#ifndef COMPAT_CLIENT #ifdef Q_OS_WIN #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1 #endif @@ -55,10 +53,6 @@ #undef __int64_t #include #include -#else -#include -#include -#endif #include #include #include diff -Nru mumble-1.2.3/src/mumble/mumble.plist mumble-1.2.3-87-gf7d8711/src/mumble/mumble.plist --- mumble-1.2.3/src/mumble/mumble.plist 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble.plist 2011-04-02 22:20:48.000000000 +0000 @@ -26,7 +26,7 @@ CFBundleVersion - 1.2.3 + 1.2.4 NSHumanReadableCopyright Copyright (c) 2005-2010 Thorvald Natvig <slicer@users.sourceforge.net> diff -Nru mumble-1.2.3/src/mumble/mumble_pl.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_pl.ts --- mumble-1.2.3/src/mumble/mumble_pl.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_pl.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2724,7 +2724,7 @@ Użytkownik Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Wygaśnięcie certyfikatu:</b>Twój certyfikat niedługo straci ważność. Musisz go odnowić, jeżeli tego nie zrobisz nie będziesz w stanie połączyć się z serwerami, na których jesteś zarejestrowany. @@ -3319,7 +3319,7 @@ ClientUser - + Friend Znajomy @@ -3378,7 +3378,7 @@ Zaawansowane - + Accept changes Akceptuj zmiany @@ -3522,7 +3522,7 @@ &Hasło - + &Connect &Połącz @@ -3568,13 +3568,13 @@ Łączenie do %1 - - + + Enter username Podaj nazwę użytkownika - + Adding host %1 Dodawanie hosta %1 @@ -3641,13 +3641,13 @@ %1 kbit/s - + &Filters &Filtry - + Users Użytkowników @@ -3673,7 +3673,7 @@ Mumble - + Failed to fetch server list Nie udało się załadować listy @@ -4000,7 +4000,7 @@ To zapewne nie jest śmieszne, ale wygląda na to, że istnieje mały błąd w narzędziu do wysyłania raportów. Możesz powiadomić twórców programu o błędzie %1 - + Uploading crash report Wysyłanie raportu @@ -4078,7 +4078,7 @@ DockTitleBar - + Drag here Przeciągnij tutaj @@ -4201,9 +4201,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble wykrył, że nie jest w stanie odebrać Global Shortcut events kiedy działa w tle.<br /><br />To dlatego, że Universal Access zwany "Uaktywnij dostęp dla assitive devices" jest obecnie wyłączony.<br /><br />Prosimy <a href=" ">o włączenie tego ustawienia</a> by kontynuować. + Mumble wykrył, że nie jest w stanie odebrać Global Shortcut events kiedy działa w tle.<br /><br />To dlatego, że Universal Access zwany "Uaktywnij dostęp dla assitive devices" jest obecnie wyłączony.<br /><br />Prosimy <a href=" ">o włączenie tego ustawienia</a> by kontynuować. @@ -4304,7 +4303,7 @@ GlobalShortcutX - + Mouse %1 Mysz %1 @@ -4453,7 +4452,7 @@ Log - + Debug Debug @@ -4593,7 +4592,7 @@ Opuszczenie kanału - + the server serwer @@ -4637,7 +4636,7 @@ LogConfig - + Toggle console for %1 events Włącz konsolę dla zdarzeń: %1 @@ -4796,6 +4795,36 @@ Characters liter(y) + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -5175,7 +5204,7 @@ MainWindow - + Root Źródło @@ -5675,9 +5704,9 @@ Usuwa obecną teksturę z nakładki. - + - + Mumble -- %1 Mumble -- %1 @@ -5695,7 +5724,7 @@ &Użytkownik - + &Channel &Kanał @@ -5718,7 +5747,7 @@ Wykopywanie użytkownika %1 - + Enter reason Podaj powód @@ -5733,7 +5762,7 @@ Mumble - + Push and hold this button to send voice. Global Shortcut Naciśnij i przytrzymaj ten przycisk, aby transmitować głos. @@ -5779,7 +5808,7 @@ Zmień opis kanału %1 - + Unmuted and undeafened. Wyłączono ogłuszenie oraz wyciszenie mikrofonu. @@ -5818,7 +5847,7 @@ Dołączam %1. - + Server connection failed: %1. Połączenie z serwerem zostało przerwane z powodu: %1. @@ -5828,7 +5857,7 @@ Rozłączony od serwera. - + Reconnecting. Ponowne łączenie. @@ -6197,7 +6226,12 @@ Witamy w Mumble. - + + Skipping version check in debug mode. + + + + Push-to-Talk Global Shortcut Aktywacja przyciskiem @@ -6268,7 +6302,7 @@ Wyłącz wtyczki - + Connecting to server %1. Łączenie z serwerem <b>%1</b>. @@ -6343,8 +6377,8 @@ Do kanału %1: %2 - - + + Message to channel %1 Wiadomość do kanału %1 @@ -6354,7 +6388,12 @@ Czy jesteś pewien, że chcesz usunąć %1 oraz wszystkie pod-kanały? - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Wiadomość do kanału '%1'</center> @@ -6415,7 +6454,7 @@ Wyślij wiadomość tekstową - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> <h2>Kanał kontrolny</h2><p>Szyfrowanie %1 bit %2<br />Średnie opóźnienie %3 ms (%4 odchylenie)</p><p>Zdalny host %5 (port %6)</p> @@ -6426,20 +6465,20 @@ - + - + To %1: %2 Do %1: %2 - - + + Message to %1 Wiadomość do %1 - + View comment on user %1 Podgląd komentarza użytkownika %1 @@ -6449,13 +6488,13 @@ Czy jesteś pewny, że chcesz usunąć komentarz użytkownika %1? - + To %1 (Tree): %2 (Tree) %1: %2 (Do drzewa kanałów) %1: %2 - + Connected. Połączono. @@ -6465,22 +6504,19 @@ Nieprawidłowa wersja SSL - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Ten serwer używa starszej wersji szyfrowania. Być może jest to starszy serwer bazujący na wersji 1.1 Mumble.<br />Czy chcesz uruchomić klient kompatybilny wstecz, aby się połączyć? + Ten serwer używa starszej wersji szyfrowania. Być może jest to starszy serwer bazujący na wersji 1.1 Mumble.<br />Czy chcesz uruchomić klient kompatybilny wstecz, aby się połączyć? - Failed to launch compatibility client - Nie udało się włączyć klienta kompatybilnego wstecz + Nie udało się włączyć klienta kompatybilnego wstecz - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Klient kompatybilny wstecz nie został odnaleziony lub nie udało się go uruchomić.<br />Pamiętaj, że klient kompatybilny wstecz to opcjonalny składnik instalacji i może wcale nie być zainstalowany. + Klient kompatybilny wstecz nie został odnaleziony lub nie udało się go uruchomić.<br />Pamiętaj, że klient kompatybilny wstecz to opcjonalny składnik instalacji i może wcale nie być zainstalowany. - + Invalid username Niepoprawna nazwa użytkownika @@ -6534,7 +6570,7 @@ Wysyła wiadomość tekstową do innego użytkownika. - + &User &Użytkownik @@ -6624,7 +6660,7 @@ Ten kreator poprowadzi cię przez proces konfiguracji ustawień dźwięku. - + SSL Verification failed: %1 Weryfikacja SSL nie powiodła się: %1 @@ -6659,23 +6695,23 @@ Wyświetla zaawansowane informacje na temat połączenia z serwerem. - + Mumble Server Information Serwer Mumble - Informacje - + &View Certificate &Zobacz certyfikat - + Opening URL %1 Otwieranie adresu %1 - + Mute Self Global Shortcut Wyciszenie @@ -6722,14 +6758,14 @@ Szept/Krzyk - - + + <center>Not connected</center> Not connected <center>Niepołączony</center> - + File does not exist Plik nie istnieje @@ -6749,7 +6785,7 @@ Adres URL nie jest obsługiwany przez Mumble (brak mumble:// w adresie) - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Ta wersja Mumble nie obsługuje URL starszych wersji Mumble %1.%2.%3 @@ -6846,7 +6882,7 @@ O &Qt - + Sending message to channel %1 Wysyłanie wiadomości do kanału: %1 @@ -6903,13 +6939,13 @@ Zakończ - - + + Minimize Minimalizuj - + &Window &Okno @@ -6961,7 +6997,7 @@ Głośność w dół (-10%) - + Clear Wyczyść @@ -7129,7 +7165,7 @@ Usuwa aktualnie zdefiniowany awatar. - + Change your comment Edycja własnego komentarza @@ -7148,7 +7184,7 @@ Zmień swój komentarz - + This will switch the states of the in-game overlay. Global Shortcut Przełącza stany nakładki. @@ -7167,6 +7203,11 @@ Priority Speaker Nadrzędny mówca + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -7538,6 +7579,11 @@ + Talking and recently active + + + + All in current channel Wszyscy na aktualnym kanale @@ -7552,12 +7598,32 @@ Zawsze wyświetlaj moją nazwę na nakładce - + + Configure recently active time (%1 seconds)... + + + + Columns Kolumny + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Edytuj... @@ -7567,9 +7633,18 @@ Resetuj powiekszenie - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -7749,12 +7824,11 @@ Aby uzyskać więcej opcji, kliknij prawym przyciskiem myszy na użytkowniku. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Nakładka @@ -8243,7 +8317,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -8441,7 +8515,7 @@ PulseAudioSystem - + Default Input Domyślne wejście @@ -8587,7 +8661,7 @@ ServerView - + Favorite Ulubione @@ -9020,7 +9094,7 @@ %1 (%2) - + %1 online (%2 idle) %1 online (%2 bezczynny) @@ -9206,7 +9280,7 @@ Pobrany plik jest uszkodzony. Został on automatycznie usunięty. - + Downloading new snapshot from %1 to %2 Pobieranie nowej wersji testowej z %1 do %2 @@ -9222,7 +9296,7 @@ Mumble nie był w stanie pobrać informacji o wersji z serwera głównego. - + Failed to launch snapshot installer. Uruchomienie instalatora wersji testowej nie powiodło się. diff -Nru mumble-1.2.3/src/mumble/mumble.pro mumble-1.2.3-87-gf7d8711/src/mumble/mumble.pro --- mumble-1.2.3/src/mumble/mumble.pro 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble.pro 2011-04-02 22:20:48.000000000 +0000 @@ -2,10 +2,10 @@ DEFINES *= MUMBLE TEMPLATE = app -QT *= network sql opengl xml svg +QT *= network sql xml svg TARGET = mumble -HEADERS *= BanEditor.h ACLEditor.h ConfigWidget.h Log.h AudioConfigDialog.h AudioStats.h AudioInput.h AudioOutput.h CustomElements.h MainWindow.h ServerHandler.h About.h ConnectDialog.h GlobalShortcut.h TextToSpeech.h Settings.h Database.h VersionCheck.h Global.h UserModel.h Audio.h ConfigDialog.h Plugins.h LookConfig.h Overlay.h OverlayText.h SharedMemory.h AudioWizard.h ViewCert.h TextMessage.h NetworkConfig.h LCD.h Usage.h Cert.h ClientUser.h UserEdit.h Tokens.h UserView.h RichTextEditor.h UserInformation.h FileEngine.h SocketRPC.h VoiceRecorder.h VoiceRecorderDialog.h -SOURCES *= BanEditor.cpp ACLEditor.cpp ConfigWidget.cpp Log.cpp AudioConfigDialog.cpp AudioStats.cpp AudioInput.cpp AudioOutput.cpp main.cpp CustomElements.cpp MainWindow.cpp ServerHandler.cpp About.cpp ConnectDialog.cpp Settings.cpp Database.cpp VersionCheck.cpp Global.cpp UserModel.cpp Audio.cpp ConfigDialog.cpp Plugins.cpp LookConfig.cpp OverlayClient.cpp OverlayConfig.cpp OverlayEditor.cpp OverlayEditorScene.cpp OverlayUser.cpp OverlayUserGroup.cpp Overlay.cpp OverlayText.cpp SharedMemory.cpp AudioWizard.cpp ViewCert.cpp Messages.cpp TextMessage.cpp GlobalShortcut.cpp NetworkConfig.cpp LCD.cpp Usage.cpp Cert.cpp ClientUser.cpp UserEdit.cpp Tokens.cpp UserView.cpp RichTextEditor.cpp UserInformation.cpp FileEngine.cpp SocketRPC.cpp VoiceRecorder.cpp VoiceRecorderDialog.cpp +HEADERS *= BanEditor.h ACLEditor.h ConfigWidget.h Log.h AudioConfigDialog.h AudioStats.h AudioInput.h AudioOutput.h CustomElements.h MainWindow.h ServerHandler.h About.h ConnectDialog.h GlobalShortcut.h TextToSpeech.h Settings.h Database.h VersionCheck.h Global.h UserModel.h Audio.h ConfigDialog.h Plugins.h LookConfig.h Overlay.h OverlayText.h SharedMemory.h AudioWizard.h ViewCert.h TextMessage.h NetworkConfig.h LCD.h Usage.h Cert.h ClientUser.h UserEdit.h Tokens.h UserView.h RichTextEditor.h UserInformation.h FileEngine.h SocketRPC.h VoiceRecorder.h VoiceRecorderDialog.h WebFetch.h +SOURCES *= BanEditor.cpp ACLEditor.cpp ConfigWidget.cpp Log.cpp AudioConfigDialog.cpp AudioStats.cpp AudioInput.cpp AudioOutput.cpp main.cpp CustomElements.cpp MainWindow.cpp ServerHandler.cpp About.cpp ConnectDialog.cpp Settings.cpp Database.cpp VersionCheck.cpp Global.cpp UserModel.cpp Audio.cpp ConfigDialog.cpp Plugins.cpp LookConfig.cpp OverlayClient.cpp OverlayConfig.cpp OverlayEditor.cpp OverlayEditorScene.cpp OverlayUser.cpp OverlayUserGroup.cpp Overlay.cpp OverlayText.cpp SharedMemory.cpp AudioWizard.cpp ViewCert.cpp Messages.cpp TextMessage.cpp GlobalShortcut.cpp NetworkConfig.cpp LCD.cpp Usage.cpp Cert.cpp ClientUser.cpp UserEdit.cpp Tokens.cpp UserView.cpp RichTextEditor.cpp UserInformation.cpp FileEngine.cpp SocketRPC.cpp VoiceRecorder.cpp VoiceRecorderDialog.cpp WebFetch.cpp SOURCES *= smallft.cpp DIST *= ../../icons/mumble.ico licenses.h smallft.h ../../icons/mumble.xpm murmur_pch.h mumble.plist RESOURCES *= mumble.qrc mumble_flags.qrc @@ -76,8 +76,8 @@ win32 { RC_FILE = mumble.rc HEADERS *= GlobalShortcut_win.h TaskList.h - SOURCES *= GlobalShortcut_win.cpp TextToSpeech_win.cpp Overlay_win.cpp SharedMemory_win.cpp os_win.cpp TaskList.cpp ../../overlay/HardHook.cpp - LIBS *= -l"$$(DXSDK_DIR)Lib/x86/dxguid" -l"$$(DXSDK_DIR)Lib/x86/dinput8" -lsapi -lole32 -lws2_32 -ladvapi32 -lwintrust -ldbghelp -llibsndfile-1 -lshell32 -lshlwapi + SOURCES *= GlobalShortcut_win.cpp TextToSpeech_win.cpp Overlay_win.cpp SharedMemory_win.cpp os_win.cpp TaskList.cpp ../../overlay/HardHook.cpp ../../overlay/ods.cpp + LIBS *= -l"$$(DXSDK_DIR)Lib/x86/dxguid" -l"$$(DXSDK_DIR)Lib/x86/dinput8" -lsapi -lole32 -lws2_32 -ladvapi32 -lwintrust -ldbghelp -llibsndfile-1 -lshell32 -lshlwapi -luser32 -lgdi32 LIBS *= -ldelayimp -delayload:speex.dll -delayload:shell32.dll DEFINES *= WIN32 @@ -91,8 +91,10 @@ CONFIG *= wasapi } - CONFIG(release, debug|release) { - QMAKE_LFLAGS *= /MANIFESTUAC:\"level=\'asInvoker\' uiAccess=\'true\'\" + !CONFIG(no-elevation) { + CONFIG(release, debug|release) { + QMAKE_LFLAGS *= /MANIFESTUAC:\"level=\'asInvoker\' uiAccess=\'true\'\" + } } } @@ -251,7 +253,7 @@ win32 { LIBS *= -llgLcd - QMAKE_LIBDIR *= "$$G15SDK_PATH/Libs/x86" + QMAKE_LIBDIR *= "$$G15SDK_PATH/Lib/x86" INCLUDEPATH *= "$$G15SDK_PATH/Src" DEFINES *= WIN32 diff -Nru mumble-1.2.3/src/mumble/mumble_pt_BR.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_pt_BR.ts --- mumble-1.2.3/src/mumble/mumble_pt_BR.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_pt_BR.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2308,7 +2308,7 @@ Usuário do Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Expiração do certificado:</b> Seu certificado está para expirar. Você precisa renová-lo, ou você não será mais capaz de conectar aos servidores em que está registrado. @@ -2801,7 +2801,7 @@ ClientUser - + Friend Amigo @@ -2849,7 +2849,7 @@ ConfigDialog - + Accept changes Aceitar alterações @@ -2968,18 +2968,18 @@ ConnectDialog - + Connecting to %1 Conectando a %1 - - + + Enter username Especifique um nome de usuário - + Adding host %1 Adicionando servidor %1 @@ -3046,7 +3046,7 @@ %1 kbit/s - + &Connect &Connectar @@ -3057,7 +3057,7 @@ - + Users Usuários @@ -3067,7 +3067,7 @@ Versão - + Failed to fetch server list Falha ao obter lista de servidores @@ -3337,7 +3337,7 @@ Isto realmente não é nada divertido, mas aparentemente há uma falha no código para reportar falhas, e nós não pudemos enviar o informe. Você pode informar um desenvolver sobre o erro %1 - + Uploading crash report Enviando informe de erro @@ -3412,7 +3412,7 @@ DockTitleBar - + Drag here Arrastar aqui @@ -3512,9 +3512,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - O Mumble detectou que é incapaz de receber eventos de Atalhos Globais quendo esta em segundo plano.<br /><br />Isto é devido ao recurso de Acesso Universao chamada 'Permitir acesso para dispositivos de assistência' está atualmente desativada.<br /><br />Por favor <a href=" ">ative esta configuração</a> e prossiga quando o tiver feito. + O Mumble detectou que é incapaz de receber eventos de Atalhos Globais quendo esta em segundo plano.<br /><br />Isto é devido ao recurso de Acesso Universao chamada 'Permitir acesso para dispositivos de assistência' está atualmente desativada.<br /><br />Por favor <a href=" ">ative esta configuração</a> e prossiga quando o tiver feito. @@ -3603,7 +3602,7 @@ GlobalShortcutX - + Mouse %1 Mouse %1 @@ -3700,7 +3699,7 @@ Log - + Debug Depuração @@ -3800,7 +3799,7 @@ Usuário deixou o canal - + the server o servidor @@ -3845,7 +3844,7 @@ LogConfig - + Toggle console for %1 events Alternar console para eventos %1 @@ -3987,6 +3986,36 @@ Only accept whispers from friends Só aceitar sussurros de amigos + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4287,12 +4316,12 @@ MainWindow - + Root Raíz - + Push-to-Talk Global Shortcut Pressionar-para-Falar @@ -4371,28 +4400,28 @@ - + Mumble -- %1 Mumble -- %1 - + &Window &Janela - + Minimize Minimizar - + Ctrl+M Ctrl+M - + Close Fechar @@ -4402,7 +4431,7 @@ O Mumble está conectado a um servidor atualmente. Você gostaria de fechá-lo ou minimizá-lo? - + Mute Self Global Shortcut Ficar mudo @@ -4444,14 +4473,14 @@ Sussurrar/Gritar - - + + <center>Not connected</center> Not connected <center>Não conectado</center> - + Clear Limpar @@ -4481,7 +4510,7 @@ Forma de URL não é 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Esta versão do Mumble não pode lidar com URLs para o Mumble versão %1.%2.%3 @@ -4569,13 +4598,13 @@ Ver comentário no usuário %1 - - + + Message to channel %1 Mensagem para canal %1 - + Connected. Conectado. @@ -4585,17 +4614,15 @@ Versões SSL não coincidem - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Este servidor está usando um padrão mais velho de criptografia. Ele pode ser um servidor mais antigo baseado no Mumble 1.1.<br />Você gostaria de executar o cliente de compatibilidade para conectar a ele? + Este servidor está usando um padrão mais velho de criptografia. Ele pode ser um servidor mais antigo baseado no Mumble 1.1.<br />Você gostaria de executar o cliente de compatibilidade para conectar a ele? - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - O cliente de compatibilidade não pôde ser encontrado, ou falhou ao iniciar.<br />Note que o cliente de compatibilidade é um componente opcional para a maioria das instalações, e pode não ter sido instalado. + O cliente de compatibilidade não pôde ser encontrado, ou falhou ao iniciar.<br />Note que o cliente de compatibilidade é um componente opcional para a maioria das instalações, e pode não ter sido instalado. - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Digite a mensagem para o canal '%1' aqui</center> @@ -4633,12 +4660,12 @@ Formato de imagem não reconhecido. - + Voice channel is sent over control channel. Vanal de voz é enviado pelo canal de controle. - + &User &Usuário @@ -4648,13 +4675,13 @@ &Canal - + This will switch the states of the in-game overlay. Global Shortcut Alterna os estados da sobreimpressão em-jogo. - + Change your comment Alterar seu comentário @@ -4705,12 +4732,12 @@ - + &View Certificate &Ver certificado - + Enter reason Especifique a razão @@ -4722,25 +4749,25 @@ - + - + To %1: %2 Para %1: %2 - - + + Message to %1 Mensagem para %1 - + Are you sure you want to reset the comment of user %1? Você tem certeza de que quer resetar o comentário do usuário %1? - + Are you sure you want to delete %1 and all its sub-channels? Você tem certeza de que quer eliminar %1 e todos os seus subcanais? @@ -4761,7 +4788,7 @@ Para %1 (Árvore): %2 - + Unmuted and undeafened. Desmudecido e desensurdecido. @@ -4816,12 +4843,16 @@ <p>%1.<br />Os erros específicos com este certificado são: </p><ol>%2</ol><p>Você quer aceitar este certificado mesmo assim?<br />(Ele também será armazenado e você nãos erá perguntado novamente.)</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + Failed to launch compatibility client - Falha ao executar o cliente de compatibilidade + Falha ao executar o cliente de compatibilidade - + Server connection failed: %1. Conexão com o servidor falhou: %1. @@ -5782,6 +5813,11 @@ Bem-vindo ao Mumble. + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? Esta é a primeira vez que você inicia o Mumble.<br />Você gostaria de iniciar o Assistente de Áudio para configurar sua placa de som? @@ -5920,6 +5956,16 @@ Priority Speaker Falante prioritário + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6239,6 +6285,11 @@ + Talking and recently active + + + + All in current channel Todos no canal atual @@ -6253,12 +6304,32 @@ Sempre mostrar a si - + + Configure recently active time (%1 seconds)... + + + + Columns Colunas + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Editar... @@ -6268,9 +6339,18 @@ Resetar aproximação - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -6293,12 +6373,11 @@ Para mais opções, clique com o botão inverso em um usuário. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Sobreimpressão @@ -6735,7 +6814,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -6883,7 +6962,7 @@ PulseAudioSystem - + Default Input Entrada padrão @@ -7025,7 +7104,7 @@ ServerView - + Favorite Favorito @@ -7428,7 +7507,7 @@ %1 (%2) - + %1 online (%2 idle) %1 conectado (%2 inativo) @@ -7618,7 +7697,7 @@ Download corrupto da nova versão detectada. Eliminada automaticamente. - + Downloading new snapshot from %1 to %2 Baixando nova versão de %1 em %2 diff -Nru mumble-1.2.3/src/mumble/mumble.rc mumble-1.2.3-87-gf7d8711/src/mumble/mumble.rc --- mumble-1.2.3/src/mumble/mumble.rc 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble.rc 2011-04-02 22:20:48.000000000 +0000 @@ -8,15 +8,15 @@ #define VER_DEBUG VS_FF_DEBUG #endif -#ifndef RELEASE_BUILD +#ifdef SNAPSHOT_BUILD #define VER_RELEASE VS_FF_SPECIALBUILD|VS_FF_PRERELEASE #else #define VER_RELEASE 0L #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,2,3,0 - PRODUCTVERSION 1,2,3,0 + FILEVERSION 1,2,4,0 + PRODUCTVERSION 1,2,4,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS (VER_DEBUG|VER_RELEASE) FILEOS VOS_NT_WINDOWS32 @@ -29,12 +29,12 @@ BEGIN VALUE "CompanyName", "Thorvald Natvig" VALUE "FileDescription", "Mumble - Low-latency VoIP client" - VALUE "FileVersion", "1.2.3" - VALUE "ProductVersion", "1.2.3" - VALUE "LegalCopyright", "Copyright (C) 2005-2010, Thorvald Natvig " + VALUE "FileVersion", "1.2.4" + VALUE "ProductVersion", "1.2.4" + VALUE "LegalCopyright", "Copyright (C) 2005-2011, Thorvald Natvig " VALUE "OriginalFilename", "mumble.exe" VALUE "ProductName", "Mumble" -#ifndef RELEASE_BUILD +#ifdef SNAPSHOT_BUILD VALUE "SpecialBuild", "Snapshot development release" #endif END diff -Nru mumble-1.2.3/src/mumble/mumble_ru.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_ru.ts --- mumble-1.2.3/src/mumble/mumble_ru.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_ru.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2834,7 +2834,7 @@ Пользователь Mumble - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Сертификат просрочен:</b> Срок действия Вашего сертификата скоро истечет. Вам необходимо обновить его, иначе Вы не сможете подключиться к серверам, на которых зарегистрированы. @@ -3399,7 +3399,7 @@ ClientUser - + Friend Друг @@ -3462,7 +3462,7 @@ &Ок - + Accept changes Применить изменения @@ -3598,7 +3598,7 @@ П&ароль - + &Connect &Подключиться @@ -3624,13 +3624,13 @@ Подключение к %1 - - + + Enter username Введите имя пользователя - + Adding host %1 Добавление хоста %1 @@ -3697,13 +3697,13 @@ %1 кбит/с - + &Filters &Фильтры - + Users Пользователей @@ -3717,7 +3717,7 @@ Mumble - + Failed to fetch server list Ошибка при получении списка серверов @@ -3997,7 +3997,7 @@ Это действительно не смешно. Очевидно, имеется ошибка в коде отправке отчета и его отправка не удалась. Вы можете проинформировать разработчика об ошибке %1 - + Uploading crash report Отправка отчета об ошибке @@ -4238,7 +4238,7 @@ DockTitleBar - + Drag here Перетащить сюда @@ -4354,9 +4354,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble обнаружил, что не может распознавать Ярлыки, когда свернут.<br /><br />Это происходит потому, что функция Универсального Доступа, называемая "Включить доступ для вспомогательных устройств", в настоящее время отключена.<br /><br />Пожалуйста, <a href=" ">включите эту настройку</a> и продолжите, когда это будет сделано. + Mumble обнаружил, что не может распознавать Ярлыки, когда свернут.<br /><br />Это происходит потому, что функция Универсального Доступа, называемая "Включить доступ для вспомогательных устройств", в настоящее время отключена.<br /><br />Пожалуйста, <a href=" ">включите эту настройку</a> и продолжите, когда это будет сделано. @@ -4476,7 +4475,7 @@ GlobalShortcutX - + Mouse %1 Мышь %1 @@ -4590,7 +4589,7 @@ Log - + Debug Отладка @@ -4730,7 +4729,7 @@ Пользователь покинул канал - + the server Сервер @@ -4774,7 +4773,7 @@ LogConfig - + Toggle console for %1 events Включение/выключение лога для событий "%1" @@ -4928,6 +4927,36 @@ Characters символов + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -5236,7 +5265,7 @@ MainWindow - + Root Корень @@ -5700,9 +5729,9 @@ Соединиться с веб-страницей Mumble, чтобы проверить доступность новой версии и уведомить Вас о ссылке для ее закачки. - + - + Mumble -- %1 Mumble -- %1 @@ -5724,7 +5753,7 @@ &Игрок - + &Channel &Канал @@ -5743,7 +5772,7 @@ П&омощь - + Push-to-Talk Global Shortcut Активация по кнопке @@ -5837,7 +5866,7 @@ Выкидывание игрока %1 - + Enter reason Введите причину @@ -5856,12 +5885,12 @@ Имя канала - + Are you sure you want to delete %1 and all its sub-channels? Вы уверены, что хотите удалить %1 и все его подканалы? - + Unmuted and undeafened. Онемение и глушение снято. @@ -5904,7 +5933,7 @@ Соединен с сервером. - + Server connection failed: %1. Попытка соединения с сервером не удалась: %1. @@ -5914,7 +5943,7 @@ Отключен от сервера. - + Reconnecting. Повтор связи. @@ -6267,6 +6296,11 @@ Добро пожаловать в Mumble. Перевод и русскоязычная поддержка: B0nuse <a href="http://Mumble.ru/">http://mumble.ru</a> . + + Skipping version check in debug mode. + + + &Quit Mumble В&ыход из Mumble @@ -6293,36 +6327,35 @@ - + - + To %1: %2 Для %1: %2 - - + + Message to %1 Сообщение для %1 - + Are you sure you want to reset the comment of user %1? Вы уверены, что хотите очистить комментарий пользователя %1? - + To %1 (Tree): %2 (Tree) %1: %2 Для %1 (Дерево): %2 - Failed to launch compatibility client - Ошибка при запуске совместимого клиента + Ошибка при запуске совместимого клиента - + Invalid username Недопустимое имя пользователя @@ -6453,7 +6486,7 @@ Проведет Вас через процесс настройки звукового оборудования. - + SSL Verification failed: %1 Проверка SSL не удалась: %1 @@ -6483,7 +6516,7 @@ Показывает расширенную информацию о соединении с сервером. - + Opening URL %1 Открывается URL %1 @@ -6508,7 +6541,7 @@ Схема ссылки не 'mumble' - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Эта версия Mumble не может использовать ссылки из Mumble версий %1.%2.%3 @@ -6565,7 +6598,7 @@ - + &View Certificate &Посмотреть сертификат @@ -6574,19 +6607,19 @@ Картинки (*.png *.jpg *.svg) - + Register yourself as %1 Зарегистрироваться как %1 - + This will switch the states of the in-game overlay. Global Shortcut Переключает состояние Замещения в игре. - + <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> <p>Вы собираетесь зарегистрироваться на этом сервере. Невозможно будет отметить данное действие и изменить Ваше имя для данного сертификата. Вы всегда будете известны как <b>'%1'</b> на этом сервере.</p><p>Вы действительно желаете зарегистрироваться?</p> @@ -6617,13 +6650,13 @@ Посмотреть комментарий пользователя %1 - - + + Message to channel %1 Сообщение в канал %1 - + Connected. Подключено. @@ -6633,22 +6666,25 @@ Версия SSL не совпадает - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Этот сервер использует устаревший стандарт шифрования. Возможно это устаревший сервер версии 1.1.<br />Хотите запустить совместимый клиент для подключения? + Этот сервер использует устаревший стандарт шифрования. Возможно это устаревший сервер версии 1.1.<br />Хотите запустить совместимый клиент для подключения? - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Совместимый клиент не найден или произошла ошибка при его запуске.<br />Также возможно, что совместимый клиент не установлен. + Совместимый клиент не найден или произошла ошибка при его запуске.<br />Также возможно, что совместимый клиент не установлен. - + <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> <p>%1.<br />Ошибки данного сертификата:</p><ol>%2</ol><p>Вы хотите принять этот сертификат?<br />(Он будет сохранен и этот вопрос задаваться больше не будет.)</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Напечатайте здесь сообщение для канала '%1'</center> @@ -6686,17 +6722,17 @@ Формат изображения не поддерживается. - + Voice channel is sent over control channel. Голосовой канал отправлен через канал управления. - + &User &Пользователь - + <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 deviation)</p><p>Remote host %5 (port %6)</p> <h2>Канал управления</h2><p>Шифрование %1 бит %2<br />%3 мс среднее время задержки (%4 отклонение)</p><p>Адрес %5 (порт %6)</p> @@ -6736,7 +6772,7 @@ Реcинхронизированные - + Sending message to channel %1 Отправка сообщения в канал %1 @@ -6775,13 +6811,13 @@ Закрыть - - + + Minimize Свернуть в трей - + Mute Self Global Shortcut Сделать себя немым @@ -6866,14 +6902,14 @@ Уменьшить громкость (-10%) - - + + <center>Not connected</center> Not connected <center>Нет соединения с сервером</center> - + Clear Очистить @@ -7042,6 +7078,11 @@ Priority Speaker Приоритетный разговор + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -7417,6 +7458,11 @@ + Talking and recently active + + + + All in current channel Все из этого канала @@ -7431,12 +7477,32 @@ Всегда показывать себя - + + Configure recently active time (%1 seconds)... + + + + Columns Колонок + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Редактировать... @@ -7446,9 +7512,18 @@ Сбросить масштаб - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -7643,12 +7718,11 @@ Для других настроек правый клик на пользователе. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Замещение @@ -8086,7 +8160,7 @@ Mumble - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -8323,7 +8397,7 @@ PulseAudioSystem - + Default Input Вход по умолчанию @@ -8465,7 +8539,7 @@ ServerView - + Favorite Избранные @@ -8868,7 +8942,7 @@ %1 (%2) - + %1 online (%2 idle) %1 онлайн (%2 простой) @@ -9070,7 +9144,7 @@ Обнаружены повреждения при загрузке новой версии. Она была автоматически удалена. - + Downloading new snapshot from %1 to %2 Загружается новая тестовая сборка из %1 в %2 diff -Nru mumble-1.2.3/src/mumble/mumble_sv.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_sv.ts --- mumble-1.2.3/src/mumble/mumble_sv.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_sv.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2384,7 +2384,7 @@ Mumbleanvändare - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. <b>Certifikatutgång:</b> Ditt certifikat håller på att gå ut. Du måste förnya det, annars kan du inte längre ansluta till servrar du är registrerad på. @@ -2884,7 +2884,7 @@ ClientUser - + Friend Vän @@ -2932,7 +2932,7 @@ ConfigDialog - + Accept changes Acceptera ändringar @@ -3051,18 +3051,18 @@ ConnectDialog - + Connecting to %1 Ansluten till %1 - - + + Enter username Ange användarnamn - + Adding host %1 Lägger till värd %1 @@ -3129,7 +3129,7 @@ %1 kbit/s - + &Connect &Anslut @@ -3140,7 +3140,7 @@ - + Users Användare @@ -3150,7 +3150,7 @@ Version - + Failed to fetch server list Serverlistan kunde inte hämtas @@ -3426,7 +3426,7 @@ Det finns tydligen en bugg i koden för att rapportera krascher, vi kunde heller inte ladda upp rapporten. Du borde informera en utvecklare om felet %1 - + Uploading crash report Laddar upp kraschrapportering @@ -3501,7 +3501,7 @@ DockTitleBar - + Drag here Dra här @@ -3601,9 +3601,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble har hittat att globala genvägar i bakgrunden inte kan tas emot.<br /><br />Detta är på grund av att funktionen "Universell tillgång" som kallas "Aktivera tillgång för hjälpenheter" för närvarande är avaktiverad.<br /><br /><a href=" ">Aktivera den här inställningen</a> och fortsätt vid avslut. + Mumble har hittat att globala genvägar i bakgrunden inte kan tas emot.<br /><br />Detta är på grund av att funktionen "Universell tillgång" som kallas "Aktivera tillgång för hjälpenheter" för närvarande är avaktiverad.<br /><br /><a href=" ">Aktivera den här inställningen</a> och fortsätt vid avslut. @@ -3700,7 +3699,7 @@ GlobalShortcutX - + Mouse %1 Mus %1 @@ -3798,7 +3797,7 @@ Log - + Debug Felsök @@ -3898,7 +3897,7 @@ Användare lämnade kanalen - + the server servern @@ -3943,7 +3942,7 @@ LogConfig - + Toggle console for %1 events Växla konsoll för %1 händelser @@ -4085,6 +4084,36 @@ Only accept whispers from friends Acceptera endast viskningar från vänner + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4385,12 +4414,12 @@ MainWindow - + Root Rot - + Push-to-Talk Global Shortcut Tryck-för-att-Tala @@ -4469,28 +4498,28 @@ - + Mumble -- %1 Mumble - %1 - + &Window &Fönster - + Minimize Minimera - + Ctrl+M Ctrl+M - + Close Stäng @@ -4500,7 +4529,7 @@ Mumble är för närvarande ansluten till en server. Vill du stänga eller minimera? - + Mute Self Global Shortcut Avaktivera mikrofon @@ -4542,14 +4571,14 @@ Viska/Skrik - - + + <center>Not connected</center> Not connected <center>Ej ansluten</center> - + Clear Rensa @@ -4579,7 +4608,7 @@ URL schemat kan inte användas av Mumble - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 Den här versionen av Mumble kan inte hantera URLer för Mumble version %1.%2.%3 @@ -4667,13 +4696,13 @@ Visa kommentar på %1 - - + + Message to channel %1 Meddelande till kanalen %1 - + Connected. Ansluten. @@ -4683,17 +4712,15 @@ SSL version matchar inte - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - Den här servern använder en äldre krypteringsstandard. Det kan vara en äldre 1.1-baserad Mumble server.<br />Vill du starta kompatibilitetsklienten för att ansluta till den? + Den här servern använder en äldre krypteringsstandard. Det kan vara en äldre 1.1-baserad Mumble server.<br />Vill du starta kompatibilitetsklienten för att ansluta till den? - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - Kompatibilitetsklienten hittades inte eller kunde inte startas.<br />Notera att kompatibilitetsklienten är en frivillig komponent fö de flesta installationer och kanske inte installerats. + Kompatibilitetsklienten hittades inte eller kunde inte startas.<br />Notera att kompatibilitetsklienten är en frivillig komponent fö de flesta installationer och kanske inte installerats. - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here <center>Skicka ett meddelande till kanalen "%1" här</center> @@ -4731,12 +4758,12 @@ Bildformatet stöds ej. - + Voice channel is sent over control channel. Röstkanal skickas över kontrollkanal. - + &User &Användare @@ -4746,13 +4773,13 @@ &Kanal - + This will switch the states of the in-game overlay. Global Shortcut Detta kommer ändra i-spelet läget. - + Change your comment Ändra din kommentar @@ -4803,12 +4830,12 @@ - + &View Certificate &Visa certifikat - + Enter reason Ange anledning @@ -4820,25 +4847,25 @@ - + - + To %1: %2 Till %1: %2 - - + + Message to %1 Meddelande till %1 - + Are you sure you want to reset the comment of user %1? Är du säker på att du vill återställa kommentaren av användaren %1? - + Are you sure you want to delete %1 and all its sub-channels? Är du säker på att du vill ta bort %1 och alla dess underkanaler? @@ -4859,7 +4886,7 @@ Till %1 (Träd): %2 - + Unmuted and undeafened. Ljud och mikrofon aktiverad. @@ -4914,12 +4941,16 @@ <p>%1.<br />Detaljerad felinformation om detta certifikat är: </p><ol>%2</ol><p>Vill du acceptera detta certifikat ändå?<br />(Det kommer även att lagras, så du kommer inte att bli tillfrågad igen.)</p> - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + Failed to launch compatibility client - Kunde inte starta kompatibilitetsklient + Kunde inte starta kompatibilitetsklient - + Server connection failed: %1. Serveranslutning misslyckades: %1. @@ -5880,6 +5911,11 @@ Välkommen till Mumble. + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? Detta är den första gången du startar Mumble.<br />Vill du gå igenom "Ljudkonfiguration" för att konfigurera ditt ljudkort? @@ -6022,6 +6058,16 @@ Priority Speaker Prioritetstalare + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6341,6 +6387,11 @@ + Talking and recently active + + + + All in current channel Alla i den nuvarande kanalen @@ -6355,12 +6406,32 @@ Visa alltid dig själv - + + Configure recently active time (%1 seconds)... + + + + Columns Kolumner + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... Ändra... @@ -6370,9 +6441,18 @@ Återställ zoom - + + Configure recently active time + + + + + Amount of seconds users remain active after talking: + + + FPS: %1 - FPS: %1 + FPS: %1 @@ -6395,12 +6475,11 @@ Högerklicka på en användare för att få fler alternativ. - FPS: %1 - FPS: %1 + FPS: %1 - + Overlay Överlag @@ -6849,7 +6928,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -6997,7 +7076,7 @@ PulseAudioSystem - + Default Input Standardingång @@ -7139,7 +7218,7 @@ ServerView - + Favorite Favorit @@ -7543,7 +7622,7 @@ %1 (%2) - + %1 online (%2 idle) %1 tillgänglig (%2 inaktiv) @@ -7733,7 +7812,7 @@ Korrupt nedladdning av ny version upptäckt. Automatiskt borttagen. - + Downloading new snapshot from %1 to %2 Laddar ner ny utvecklarversion från %1 till %2 diff -Nru mumble-1.2.3/src/mumble/mumble_zh_CN.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_zh_CN.ts --- mumble-1.2.3/src/mumble/mumble_zh_CN.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_zh_CN.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2539,7 +2539,7 @@ - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. @@ -3055,7 +3055,7 @@ ClientUser - + Friend @@ -3103,7 +3103,7 @@ ConfigDialog - + Accept changes 确定 @@ -3230,13 +3230,13 @@ ConnectDialog - + Connecting to %1 正在连接到 %1 - - + + Enter username 输入用户名 @@ -3245,7 +3245,7 @@ 未知 - + Adding host %1 @@ -3312,13 +3312,13 @@ - + &Filters - + Users @@ -3328,7 +3328,7 @@ - + Failed to fetch server list 无法获取服务器列表 @@ -3678,7 +3678,7 @@ - + Uploading crash report @@ -3752,7 +3752,7 @@ DockTitleBar - + Drag here @@ -3852,9 +3852,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble 检测到当它位于后台时它不能接收到全局快捷键事件。<br /><br />这是因为被称为‘允许辅助设备的使用’的辅助使用功能当前被禁用。<br /><br />请<a href=" ">启用该选项</a>然后继续。 + Mumble 检测到当它位于后台时它不能接收到全局快捷键事件。<br /><br />这是因为被称为‘允许辅助设备的使用’的辅助使用功能当前被禁用。<br /><br />请<a href=" ">启用该选项</a>然后继续。 @@ -3943,7 +3942,7 @@ GlobalShortcutX - + Mouse %1 鼠标 %1 @@ -4050,7 +4049,7 @@ Log - + Debug 调试 @@ -4190,7 +4189,7 @@ - + the server @@ -4234,7 +4233,7 @@ LogConfig - + Toggle console for %1 events 为 %1 事件启用控制台 @@ -4391,6 +4390,36 @@ Only accept whispers from friends + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4747,12 +4776,12 @@ MainWindow - + Root - + Push-to-Talk Global Shortcut 按键通话 @@ -4891,28 +4920,28 @@ - + Mumble -- %1 - + &Window &窗口 - + Minimize 最小化 - + Ctrl+M - + Close 关闭 @@ -4922,12 +4951,12 @@ Mumble 现在连接到了一个服务器。你想要关闭还是最小化它? - + &User - + Mute Self Global Shortcut @@ -4969,14 +4998,14 @@ - - + + <center>Not connected</center> Not connected 未连接 - + Clear 清除 @@ -5006,7 +5035,7 @@ 'Mumble' 不支持的网址方案 - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 @@ -5067,19 +5096,24 @@ - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + Register yourself as %1 - + This will switch the states of the in-game overlay. Global Shortcut - + <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> @@ -5115,8 +5149,8 @@ - - + + Message to channel %1 @@ -5127,16 +5161,16 @@ - - + + - + To %1: %2 %1: %2 发送给 %1: %2 - + Connected. @@ -5146,17 +5180,7 @@ - - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - - - - - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - - - - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here @@ -5198,7 +5222,7 @@ <h2>控制信道</h2><p>使用 %1 比特 %2 加密<br />平均延迟 %3 毫秒(%4 方差)</p> - + Voice channel is sent over control channel. 语音频道通过控制信道发送。 @@ -5252,7 +5276,7 @@ - + &View Certificate &查看认证 @@ -5261,7 +5285,7 @@ 踢出玩家 %1 - + Enter reason 输入原因 @@ -5277,7 +5301,7 @@ - + Message to %1 发送消息给 %1 @@ -5286,7 +5310,7 @@ 频道名 - + Are you sure you want to delete %1 and all its sub-channels? 你确信要删除 %1和它的子频道吗? @@ -5313,7 +5337,7 @@ 发送消息给树 %1 - + Unmuted and undeafened. 解除静音并解除耳聋。 @@ -5376,12 +5400,7 @@ <p>%1.<br /> 认证中的错误是:</p><ol>%2</ol><p>你希望接受认证吗?<br />(认证将被保存从而你不会被再次索要认证。)</p> - - Failed to launch compatibility client - - - - + Server connection failed: %1. 连接服务器失败: %1. @@ -5429,7 +5448,7 @@ &玩家 - + &Channel &频道 @@ -6493,6 +6512,11 @@ 欢迎来到 Mumble。 + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? 这是你第一次启动 Mumble.<br />你想用音频精灵配置声卡吗? @@ -6638,6 +6662,16 @@ Priority Speaker + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6991,6 +7025,11 @@ + Talking and recently active + + + + All in current channel @@ -7005,12 +7044,32 @@ - + + Configure recently active time (%1 seconds)... + + + + Columns + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... @@ -7020,8 +7079,13 @@ - - FPS: %1 + + Configure recently active time + + + + + Amount of seconds users remain active after talking: @@ -7057,12 +7121,7 @@ - - FPS: %1 - - - - + Overlay @@ -7663,7 +7722,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -7847,7 +7906,7 @@ PulseAudioSystem - + Default Input 默认输入 @@ -7989,7 +8048,7 @@ ServerView - + Favorite @@ -8406,7 +8465,7 @@ - + %1 online (%2 idle) @@ -8600,7 +8659,7 @@ - + Downloading new snapshot from %1 to %2 diff -Nru mumble-1.2.3/src/mumble/mumble_zh_TW.ts mumble-1.2.3-87-gf7d8711/src/mumble/mumble_zh_TW.ts --- mumble-1.2.3/src/mumble/mumble_zh_TW.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/mumble_zh_TW.ts 2011-04-02 22:20:48.000000000 +0000 @@ -2539,7 +2539,7 @@ - + <b>Certificate Expiry:</b> Your certificate is about to expire. You need to renew it, or you will no longer be able to connect to servers you are registered on. @@ -3055,7 +3055,7 @@ ClientUser - + Friend @@ -3103,7 +3103,7 @@ ConfigDialog - + Accept changes 確定 @@ -3230,13 +3230,13 @@ ConnectDialog - + Connecting to %1 正在連接到 %1 - - + + Enter username 輸入用戶名 @@ -3245,7 +3245,7 @@ 未知 - + Adding host %1 @@ -3312,13 +3312,13 @@ - + &Filters - + Users @@ -3328,7 +3328,7 @@ - + Failed to fetch server list 無法獲取服務器列表 @@ -3678,7 +3678,7 @@ - + Uploading crash report @@ -3752,7 +3752,7 @@ DockTitleBar - + Drag here @@ -3852,9 +3852,8 @@ GlobalShortcutMacInit - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble 檢測到當它位于后台時它不能接收到全局快捷鍵事件。<br /><br />這是因為被稱為‘允許輔助設備的使用’的輔助使用功能當前被禁用。<br /><br />請<a href=" ">啟用該選項</a>然后繼續。 + Mumble 檢測到當它位于后台時它不能接收到全局快捷鍵事件。<br /><br />這是因為被稱為‘允許輔助設備的使用’的輔助使用功能當前被禁用。<br /><br />請<a href=" ">啟用該選項</a>然后繼續。 @@ -3943,7 +3942,7 @@ GlobalShortcutX - + Mouse %1 鼠標 %1 @@ -4050,7 +4049,7 @@ Log - + Debug 調試 @@ -4190,7 +4189,7 @@ - + the server @@ -4234,7 +4233,7 @@ LogConfig - + Toggle console for %1 events 為 %1 事件啟用控制台 @@ -4391,6 +4390,36 @@ Only accept whispers from friends + + + If enabled text messages you send will be read back to you with TTS + + + + + Read back own messages + + + + + Chat Log + + + + + Maximum chat length + + + + + Unlimited + + + + + Lines + + LookConfig @@ -4747,12 +4776,12 @@ MainWindow - + Root - + Push-to-Talk Global Shortcut 按鍵通話 @@ -4891,28 +4920,28 @@ - + Mumble -- %1 - + &Window &窗口 - + Minimize 最小化 - + Ctrl+M - + Close 關閉 @@ -4922,12 +4951,12 @@ Mumble 現在連接到了一個服務器。你想要關閉還是最小化它? - + &User - + Mute Self Global Shortcut @@ -4969,14 +4998,14 @@ - - + + <center>Not connected</center> Not connected 未連接 - + Clear 清除 @@ -5006,7 +5035,7 @@ 'Mumble' 不支持的網址方案 - + This version of Mumble can't handle URLs for Mumble version %1.%2.%3 @@ -5067,19 +5096,24 @@ - + + This server is using an older encryption standard, and is no longer supported by modern versions of Mumble. + + + + Register yourself as %1 - + This will switch the states of the in-game overlay. Global Shortcut - + <p>You are about to register yourself on this server. This action cannot be undone, and your username cannot be changed once this is done. You will forever be known as '%1' on this server.</p><p>Are you sure you want to register yourself?</p> @@ -5115,8 +5149,8 @@ - - + + Message to channel %1 @@ -5127,16 +5161,16 @@ - - + + - + To %1: %2 %1: %2 發送給 %1: %2 - + Connected. @@ -5146,17 +5180,7 @@ - - This server is using an older encryption standard. It might be an older 1.1 based Mumble server.<br />Would you like to launch the compatibility client to connect to it? - - - - - The compatibility client could not be found, or failed to start.<br />Note that the compatibility client is an optional component for most installations, and might not be installed. - - - - + <center>Type message to channel '%1' here</center> Type message to channel '%1' here @@ -5198,7 +5222,7 @@ <h2>控制信道</h2><p>使用 %1 比特 %2 加密<br />平均延遲 %3 毫秒(%4 方差)</p> - + Voice channel is sent over control channel. 語音頻道通過控制信道發送。 @@ -5252,7 +5276,7 @@ - + &View Certificate &查看認証 @@ -5261,7 +5285,7 @@ 踢出玩家 %1 - + Enter reason 輸入原因 @@ -5277,7 +5301,7 @@ - + Message to %1 發送消息給 %1 @@ -5286,7 +5310,7 @@ 頻道名 - + Are you sure you want to delete %1 and all its sub-channels? 你確信要刪除 %1和它的子頻道嗎? @@ -5313,7 +5337,7 @@ 發送消息給樹 %1 - + Unmuted and undeafened. 解除靜音并解除耳聾。 @@ -5376,12 +5400,7 @@ <p>%1.<br /> 認証中的錯誤是:</p><ol>%2</ol><p>你希望接受認証嗎?<br />(認証將被保存從而你不會被再次索要認証。)</p> - - Failed to launch compatibility client - - - - + Server connection failed: %1. 連接服務器失敗: %1. @@ -5429,7 +5448,7 @@ &玩家 - + &Channel &頻道 @@ -6493,6 +6512,11 @@ 歡迎來到 Mumble。 + + Skipping version check in debug mode. + + + This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? 這是你第一次啟動 Mumble.<br />你想用音頻精靈配置聲卡嗎? @@ -6638,6 +6662,16 @@ Priority Speaker + + + &Copy URL + + + + + Copies a link to this channel to the clipboard. + + NetworkConfig @@ -6991,6 +7025,11 @@ + Talking and recently active + + + + All in current channel @@ -7005,12 +7044,32 @@ - + + Configure recently active time (%1 seconds)... + + + + Columns + Sort + + + + + Alphabetically + + + + + Last state change + + + + Edit... @@ -7020,8 +7079,13 @@ - - FPS: %1 + + Configure recently active time + + + + + Amount of seconds users remain active after talking: @@ -7057,12 +7121,7 @@ - - FPS: %1 - - - - + Overlay @@ -7663,7 +7722,7 @@ OverlayPrivateWin - + Failed to load overlay library. This means either that: - the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from - you're on an OS earlier than WinXP SP2 @@ -7847,7 +7906,7 @@ PulseAudioSystem - + Default Input 默認輸入 @@ -7989,7 +8048,7 @@ ServerView - + Favorite @@ -8406,7 +8465,7 @@ - + %1 online (%2 idle) @@ -8600,7 +8659,7 @@ - + Downloading new snapshot from %1 to %2 diff -Nru mumble-1.2.3/src/mumble/NetworkConfig.cpp mumble-1.2.3-87-gf7d8711/src/mumble/NetworkConfig.cpp --- mumble-1.2.3/src/mumble/NetworkConfig.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/NetworkConfig.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/NetworkConfig.h mumble-1.2.3-87-gf7d8711/src/mumble/NetworkConfig.h --- mumble-1.2.3/src/mumble/NetworkConfig.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/NetworkConfig.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/os_macx.mm mumble-1.2.3-87-gf7d8711/src/mumble/os_macx.mm --- mumble-1.2.3/src/mumble/os_macx.mm 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/os_macx.mm 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. @@ -31,12 +31,9 @@ #include "mumble_pch.hpp" #include "Global.h" -#ifndef COMPAT_CLIENT #include "Overlay.h" -#endif #include "MainWindow.h" -char *os_url = NULL; // fixme(mkrautz): Remove this when mumble11x is gone. char *os_lang = NULL; static FILE *fConsole = NULL; @@ -128,11 +125,7 @@ } static void crashhandler_init() { -#ifdef COMPAT_CLIENT - QString dump = QDir::homePath() + QLatin1String("/Library/Preferences/Mumble/mumble11x.dmp"); -#else QString dump = g.qdBasePath.filePath(QLatin1String("mumble.dmp")); -#endif if (strncpy(crashhandler_fn, dump.toUtf8().data(), PATH_MAX)) { crashhandler_signals_setup(); /* todo: Change the behavior of the Apple crash dialog? Maybe? */ @@ -150,11 +143,7 @@ crashhandler_init(); const char *home = getenv("HOME"); -#ifdef COMPAT_CLIENT - const char *logpath = "/Library/Logs/Mumble11x.log"; -#else const char *logpath = "/Library/Logs/Mumble.log"; -#endif if (home) { size_t len = strlen(home) + strlen(logpath) + 1; diff -Nru mumble-1.2.3/src/mumble/OSS.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OSS.cpp --- mumble-1.2.3/src/mumble/OSS.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OSS.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -237,7 +237,7 @@ } iMicFreq = ival; - qWarning("OSSInput: Staring audio capture from %s", device.constData()); + qWarning("OSSInput: Starting audio capture from %s", device.constData()); eMicFormat = SampleShort; initializeMixer(); @@ -342,7 +342,7 @@ int iOutputBlock = (iFrameSize * iMixerFreq) / SAMPLE_RATE; - qWarning("OSSOutput: Staring audio playback to %s", device.constData()); + qWarning("OSSOutput: Starting audio playback to %s", device.constData()); ssize_t blocklen = iOutputBlock * iChannels * sizeof(short); short mbuffer[iOutputBlock * iChannels]; diff -Nru mumble-1.2.3/src/mumble/OSS.h mumble-1.2.3-87-gf7d8711/src/mumble/OSS.h --- mumble-1.2.3/src/mumble/OSS.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OSS.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/os_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble/os_win.cpp --- mumble-1.2.3/src/mumble/os_win.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/os_win.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -197,27 +197,8 @@ mumble_speex_init(); #ifdef QT_NO_DEBUG -#ifdef COMPAT_CLIENT - errno_t res = 0; - size_t reqSize; - _wgetenv_s(&reqSize, NULL, 0, L"APPDATA"); - if (reqSize > 0) { - reqSize += strlen("/Mumble/Console11x.txt"); - size_t bSize = reqSize; - - STACKVAR(wchar_t, buff, reqSize+1); - - _wgetenv_s(&reqSize, buff, bSize, L"APPDATA"); - wcscat_s(buff, bSize, L"/Mumble/Console11x.txt"); - res = _wfopen_s(&fConsole, buff, L"a+"); - } - if ((res != 0) || (! fConsole)) { - res=_wfopen_s(&fConsole, L"Console11x.txt", L"a+"); - } -#else QString console = g.qdBasePath.filePath(QLatin1String("Console.txt")); fConsole = _wfsopen(console.utf16(), L"a+", _SH_DENYWR); -#endif if (fConsole) qInstallMsgHandler(mumbleMessageOutput); @@ -242,11 +223,7 @@ musComment.Buffer = wcComment; musComment.BufferSize = wcslen(wcComment) * sizeof(wchar_t); -#ifdef COMPAT_CLIENT - QString dump = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + QLatin1String("\\mumble11x.dmp"); -#else QString dump = g.qdBasePath.filePath(QLatin1String("mumble.dmp")); -#endif QFileInfo fi(dump); QDir::root().mkpath(fi.absolutePath()); @@ -259,10 +236,8 @@ qWarning("Application: Failed to set priority!"); #endif -#ifndef COMPAT_CLIENT g.qdBasePath.mkpath(QLatin1String("Snapshots")); if (bIsWin7) SetCurrentProcessExplicitAppUserModelID(QString::fromLatin1("net.sourceforge.mumble.Mumble").utf16()); -#endif } diff -Nru mumble-1.2.3/src/mumble/OverlayClient.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayClient.cpp --- mumble-1.2.3/src/mumble/OverlayClient.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayClient.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -105,7 +105,7 @@ void OverlayClient::updateFPS() { if (g.s.os.bFps) { - const BasepointPixmap &pm = OverlayTextLine(tr("FPS: %1").arg(iroundf(fFps + 0.5f)), g.s.os.qfFps).createPixmap(g.s.os.qcFps); + const BasepointPixmap &pm = OverlayTextLine(QString(QLatin1String("%1")).arg(iroundf(fFps + 0.5f)), g.s.os.qfFps).createPixmap(g.s.os.qcFps); qgpiFPS->setPixmap(pm); // offset to use basepoint //TODO: settings are providing a top left anchor, so shift down by ascent diff -Nru mumble-1.2.3/src/mumble/OverlayConfig.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayConfig.cpp --- mumble-1.2.3/src/mumble/OverlayConfig.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayConfig.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -107,7 +107,7 @@ } void OverlayConfig::refreshFpsDemo() { - bpFpsDemo = OverlayTextLine(tr("FPS: %1").arg(42), s.os.qfFps).createPixmap(s.os.qcFps); + bpFpsDemo = OverlayTextLine(QString::fromLatin1("%1").arg(42), s.os.qfFps).createPixmap(s.os.qcFps); qgpiFpsDemo->setPixmap(bpFpsDemo); qgvFpsPreview->centerOn(qgpiFpsDemo); } @@ -230,7 +230,7 @@ CFDictionaryRef plist = NULL; CFDataRef data = NULL; - QFile qfAppBundle(QString("%1/Contents/Info.plist").arg(path)); + QFile qfAppBundle(QString::fromLatin1("%1/Contents/Info.plist").arg(path)); if (qfAppBundle.exists()) { qfAppBundle.open(QIODevice::ReadOnly); QByteArray qbaPlistData = qfAppBundle.readAll(); diff -Nru mumble-1.2.3/src/mumble/Overlay.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Overlay.cpp --- mumble-1.2.3/src/mumble/Overlay.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Overlay.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -35,7 +35,7 @@ #include "Global.h" #include "Message.h" #include "Database.h" -#include "NetworkConfig.h" +#include "WebFetch.h" #include "ServerHandler.h" #include "MainWindow.h" #include "GlobalShortcut.h" @@ -335,8 +335,6 @@ #endif QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(g.qsRegionalHost); url.setPath(QLatin1String("/overlay.php")); url.addQueryItem(QLatin1String("ver"), QLatin1String(QUrl::toPercentEncoding(QLatin1String(MUMBLE_RELEASE)))); @@ -349,89 +347,74 @@ #endif #ifdef QT_NO_DEBUG - QNetworkReply *rep = Network::get(url); - connect(rep, SIGNAL(finished()), this, SLOT(finished())); + WebFetch::fetch(url, this, SLOT(fetched(QByteArray,QUrl))); #else g.mw->msgBox(tr("Skipping overlay update in debug mode.")); #endif } -void Overlay::finished() { - QNetworkReply *rep = qobject_cast(sender()); - QUrl url = rep->request().url(); - - if (rep->error() == QNetworkReply::NoError) { - const QString &path = url.path(); - if (path == QLatin1String("/overlay.php")) { - qmOverlayHash.clear(); - QDomDocument doc; - doc.setContent(rep->readAll()); - - QDomElement root=doc.documentElement(); - QDomNode n = root.firstChild(); - while (!n.isNull()) { - QDomElement e = n.toElement(); - if (!e.isNull()) { - if (e.tagName() == QLatin1String("file")) { - QString name = QFileInfo(e.attribute(QLatin1String("name"))).fileName(); - QString hash = e.attribute(QLatin1String("hash")); - qmOverlayHash.insert(name, hash); - } +void Overlay::fetched(QByteArray data, QUrl url) { + if (data.isEmpty()) + return; + + const QString &path = url.path(); + if (path == QLatin1String("/overlay.php")) { + qmOverlayHash.clear(); + QDomDocument doc; + doc.setContent(data); + + QDomElement root=doc.documentElement(); + QDomNode n = root.firstChild(); + while (!n.isNull()) { + QDomElement e = n.toElement(); + if (!e.isNull()) { + if (e.tagName() == QLatin1String("file")) { + QString name = QFileInfo(e.attribute(QLatin1String("name"))).fileName(); + QString hash = e.attribute(QLatin1String("hash")); + qmOverlayHash.insert(name, hash); } - n = n.nextSibling(); } + n = n.nextSibling(); + } #ifdef Q_OS_MAC - QMap::const_iterator i; - for (i = qmOverlayHash.constBegin(); i != qmOverlayHash.constEnd(); ++i) { - QString val = i.value(); - QString key = i.key(); - if (! val.isEmpty() && key.startsWith(QLatin1String("MumbleOverlay")) && key.endsWith(QLatin1String(".pkg"))) { - bool update = true; - QFile f(g.qdBasePath.absolutePath() + QLatin1String("/Overlay/MumbleOverlay.pkg")); - if (f.exists() && f.open(QIODevice::ReadOnly)) { - QString h = QLatin1String(sha1(f.readAll()).toHex()); - if (val == qmOverlayHash.value(QLatin1String("MumbleOverlay.pkg"))) - update = false; - } - if (update) { - QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(rep->url().host()); - url.setPath(QString::fromLatin1("overlay/%1").arg(key)); + QMap::const_iterator i; + for (i = qmOverlayHash.constBegin(); i != qmOverlayHash.constEnd(); ++i) { + QString val = i.value(); + QString key = i.key(); + if (! val.isEmpty() && key.startsWith(QLatin1String("MumbleOverlay")) && key.endsWith(QLatin1String(".pkg"))) { + bool update = true; + QFile f(g.qdBasePath.absolutePath() + QLatin1String("/Overlay/MumbleOverlay.pkg")); + if (f.exists() && f.open(QIODevice::ReadOnly)) { + QString h = QLatin1String(sha1(f.readAll()).toHex()); + if (val == qmOverlayHash.value(QLatin1String("MumbleOverlay.pkg"))) + update = false; + } + if (update) { + QUrl url; + url.setPath(QString::fromLatin1("overlay/%1").arg(key)); - QNetworkReply *r = Network::get(url); - connect(r, SIGNAL(finished()), this, SLOT(finished())); - } + WebFetch::fetch(url, this, SLOT(fetched(QByteArray,QUrl))); } } + } #endif - } else { - QString fname = QFileInfo(path).fileName(); - if (qmOverlayHash.contains(fname)) { - QByteArray qba = rep->readAll(); - if (qmOverlayHash.value(fname) == QLatin1String(sha1(qba).toHex())) { + } else { + QString fname = QFileInfo(path).fileName(); + if (qmOverlayHash.contains(fname)) { + if (qmOverlayHash.value(fname) == QLatin1String(sha1(data).toHex())) { #ifdef Q_OS_MAC - if (fname.startsWith(QLatin1String("MumbleOverlay")) && fname.endsWith(QLatin1String(".pkg"))) { - QFile f; - f.setFileName(g.qdBasePath.absolutePath() + QLatin1String("/Overlay/MumbleOverlay.pkg")); - if (f.open(QIODevice::WriteOnly)) { - f.write(qba); - f.close(); - g.mw->msgBox(tr("Downloaded new or updated overlay support file to %1.").arg(f.fileName())); - } + if (fname.startsWith(QLatin1String("MumbleOverlay")) && fname.endsWith(QLatin1String(".pkg"))) { + QFile f; + f.setFileName(g.qdBasePath.absolutePath() + QLatin1String("/Overlay/MumbleOverlay.pkg")); + if (f.open(QIODevice::WriteOnly)) { + f.write(data); + f.close(); + g.mw->msgBox(tr("Downloaded new or updated overlay support file to %1.").arg(f.fileName())); } -#endif } +#endif } } - } else { - if (url.host() == g.qsRegionalHost) { - url.setHost(QLatin1String("mumble.info")); - QNetworkReply *nrep = Network::get(url); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - } } - - rep->deleteLater(); } diff -Nru mumble-1.2.3/src/mumble/OverlayEditor.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayEditor.cpp --- mumble-1.2.3/src/mumble/OverlayEditor.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayEditor.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/OverlayEditorScene.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayEditorScene.cpp --- mumble-1.2.3/src/mumble/OverlayEditorScene.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayEditorScene.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Overlay.h mumble-1.2.3-87-gf7d8711/src/mumble/Overlay.h --- mumble-1.2.3/src/mumble/Overlay.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Overlay.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -395,7 +395,24 @@ void toggleShow(); void forceSettings(); void checkUpdates(); - void finished(); + void fetched(QByteArray, QUrl); }; +#ifdef Q_OS_WIN +typedef void (__cdecl *HooksProc)(); +class OverlayPrivateWin : public OverlayPrivate { + private: + Q_OBJECT + Q_DISABLE_COPY(OverlayPrivateWin) + protected: + QLibrary *qlOverlay; + public: + HooksProc hpInstall, hpRemove; + + void setActive(bool); + OverlayPrivateWin(QObject *); + ~OverlayPrivateWin(); +}; +#endif + #endif diff -Nru mumble-1.2.3/src/mumble/Overlay_macx.mm mumble-1.2.3-87-gf7d8711/src/mumble/Overlay_macx.mm --- mumble-1.2.3/src/mumble/Overlay_macx.mm 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Overlay_macx.mm 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2010, Mikkel Krautz +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2010-2011, Mikkel Krautz All rights reserved. @@ -40,12 +40,6 @@ #include } -// This is a temporary solution. We don't want the list of our trusted -// intermediate certificates to be tampered with, and the easiest way -// to achieve that is to embed them into the binary (since it gets -// codesigned.) -#include "../../macx/overlay-installer/intermediate.h" - static const NSString *MumbleOverlayLoaderBundle = @"/Library/ScriptingAdditions/MumbleOverlay.osax"; static const NSString *MumbleOverlayLoaderBundleIdentifier = @"net.sourceforge.mumble.OverlayScriptingAddition"; @@ -474,7 +468,7 @@ } // Extract the TOC signed data - if (xar_signature_copy_signed_data(sig, &plaindata, &plainlen, &signdata, &signlen) != 0) { + if (xar_signature_copy_signed_data(sig, &plaindata, &plainlen, &signdata, &signlen, NULL) != 0) { qWarning("validateInstallerSignature: Could not get signed data from XARchive."); goto err; } @@ -517,44 +511,6 @@ return ret; } -// Get an NSArray of the system anchors + our bundled intermediate certs. -static bool getAnchorCerts(NSArray **anchors) { - bool ret = false; - OSStatus err = noErr; - CFArrayRef systemAnchors = NULL; - - if (anchors == NULL) { - qWarning("getAnchorCerts: Invalid argument."); - goto err; - } - - err = SecTrustCopyAnchorCertificates(&systemAnchors); - if (err != noErr) { - qWarning("Unable to copy system anchor certificates"); - goto err; - } - - *anchors = [[NSMutableArray alloc] initWithArray:(NSArray *)systemAnchors]; - for (int i = 0; i < sizeof(intermediate_cas)/sizeof(intermediate_cas[0]); i++) { - QSslCertificate cert(intermediate_cas[i]); - QByteArray qbaIntermediate = cert.toDer(); - - SecCertificateRef tmp = NULL; - const CSSM_DATA crt = { (CSSM_SIZE) qbaIntermediate.length(), (uint8_t *) qbaIntermediate.constData() }; - err = SecCertificateCreateFromData(&crt, CSSM_CERT_X_509v3, CSSM_CERT_ENCODING_DER, &tmp); - if (err != noErr) { - qWarning("getAnchorCerts: Couldn't SecCertificateCreateFromData(). Skipping."); - continue; - } - - [(NSMutableArray *) *anchors addObject:(id)tmp]; - } - - ret = true; -err: - return ret; -} - // First, validate the signature of the installer XAR archive. Then, check // that the certificate chain is trusted by the system. bool validateInstaller(const char *path) { @@ -597,30 +553,6 @@ goto err; } - if (QSysInfo::MacintoshVersion < QSysInfo::MV_SNOWLEOPARD) { - qWarning("validateInstaller: Non-Snow Leopard install detected. Including bundled intermediate certificates when " - "verifying installer."); - - // Get system anchors with our bundled intermediate certificates included. - if (! getAnchorCerts(&anchors)) { - qWarning("validateInstaller: Unable to fetch anchors."); - goto err; - } - - // Set the anchors for the trust object - // - // Note: By doing this, we're actually circumventing the user trust settings for the system anchors. - // - // There's only really a way around this for Snow Leopard, where a `SecTrustSetAnchorCertificatesOnly' - // function was introduced. With this, you can trust the anchor certificates set for the trust object - // AND trust the system anchors using the user's *own* trust settings for them. - err = SecTrustSetAnchorCertificates(trust, (CFArrayRef)anchors); - if (err != noErr) { - qWarning("validateInstaller: Unable to set bundled anchor certificates."); - goto err; - } - } - // Do we trust this certificate? err = SecTrustEvaluate(trust, &result); if (err != noErr) { @@ -644,7 +576,6 @@ err: [certs release]; - [anchors release]; if (search) CFRelease(search); if (policy) diff -Nru mumble-1.2.3/src/mumble/OverlayText.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayText.cpp --- mumble-1.2.3/src/mumble/OverlayText.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayText.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/OverlayText.h mumble-1.2.3-87-gf7d8711/src/mumble/OverlayText.h --- mumble-1.2.3/src/mumble/OverlayText.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayText.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Overlay_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Overlay_unix.cpp --- mumble-1.2.3/src/mumble/Overlay_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Overlay_unix.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/OverlayUser.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayUser.cpp --- mumble-1.2.3/src/mumble/OverlayUser.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayUser.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/OverlayUserGroup.cpp mumble-1.2.3-87-gf7d8711/src/mumble/OverlayUserGroup.cpp --- mumble-1.2.3/src/mumble/OverlayUserGroup.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/OverlayUserGroup.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -98,6 +98,11 @@ if (os->osShow == OverlaySettings::Talking) qaShowTalking->setChecked(true); + QAction *qaShowActive = qmShow->addAction(OverlayClient::tr("Talking and recently active")); + qaShowActive->setCheckable(true); + if (os->osShow == OverlaySettings::Active) + qaShowActive->setChecked(true); + QAction *qaShowHome = qmShow->addAction(OverlayClient::tr("All in current channel")); qaShowHome->setCheckable(true); if (os->osShow == OverlaySettings::HomeChannel) @@ -112,10 +117,15 @@ QAction *qaShowSelf = qmShow->addAction(OverlayClient::tr("Always show yourself")); qaShowSelf->setCheckable(true); - qaShowSelf->setEnabled(os->osShow == OverlaySettings::Talking); + qaShowSelf->setEnabled(os->osShow == OverlaySettings::Talking || os->osShow == OverlaySettings::Active); if (os->bAlwaysSelf) qaShowSelf->setChecked(true); + qmShow->addSeparator(); + + QAction *qaConfigureRecentlyActiveTime = qmShow->addAction(OverlayClient::tr("Configure recently active time (%1 seconds)...").arg(os->iActiveTime)); + qaConfigureRecentlyActiveTime->setEnabled(os->osShow == OverlaySettings::Active); + QMenu *qmColumns = qm.addMenu(OverlayClient::tr("Columns")); QAction *qaColumns[6]; for (unsigned int i=1;i<=5;++i) { @@ -124,6 +134,18 @@ qaColumns[i]->setChecked(i == os->uiColumns); } + QMenu *qmSort = qm.addMenu(OverlayClient::tr("Sort")); + + QAction *qaSortAlphabetically = qmSort->addAction(OverlayClient::tr("Alphabetically")); + qaSortAlphabetically->setCheckable(true); + if (os->osSort == OverlaySettings::Alphabetical) + qaSortAlphabetically->setChecked(true); + + QAction *qaSortLastStateChange = qmSort->addAction(OverlayClient::tr("Last state change")); + qaSortLastStateChange->setCheckable(true); + if (os->osSort == OverlaySettings::LastStateChange) + qaSortLastStateChange->setChecked(true); + QAction *qaEdit = qm.addAction(OverlayClient::tr("Edit...")); QAction *qaZoom = qm.addAction(OverlayClient::tr("Reset Zoom")); @@ -146,6 +168,9 @@ } else if (act == qaShowTalking) { os->osShow = OverlaySettings::Talking; updateUsers(); + } else if (act == qaShowActive) { + os->osShow = OverlaySettings::Active; + updateUsers(); } else if (act == qaShowHome) { os->osShow = OverlaySettings::HomeChannel; updateUsers(); @@ -155,6 +180,27 @@ } else if (act == qaShowSelf) { os->bAlwaysSelf = ! os->bAlwaysSelf; updateUsers(); + } else if (act == qaConfigureRecentlyActiveTime) { + // FIXME: This might not be the best place to configure this setting, but currently + // there's not really a suitable place to put this. In the future an additional tab + // might be added for some advanced overlay options, which could then include this + // setting. + bool ok; + int newValue = QInputDialog::getInt( + qm.parentWidget(), + OverlayClient::tr("Configure recently active time"), + OverlayClient::tr("Amount of seconds users remain active after talking:"), + os->iActiveTime, 1, 2147483647, 1, &ok); + if (ok) { + os->iActiveTime = newValue; + } + updateUsers(); + } else if (act == qaSortAlphabetically) { + os->osSort = OverlaySettings::Alphabetical; + updateUsers(); + } else if (act == qaSortLastStateChange) { + os->osSort = OverlaySettings::LastStateChange; + updateUsers(); } else { for (int i=1;i<=5;++i) { if (act == qaColumns[i]) { @@ -276,6 +322,11 @@ if (! showusers.contains(cu)) showusers << cu; break; + case OverlaySettings::Active: + showusers = ClientUser::getActive(); + if (os->bAlwaysSelf && !showusers.contains(self)) + showusers << self; + break; default: showusers = ClientUser::getTalking(); if (os->bAlwaysSelf && (self->tsState == Settings::Passive)) diff -Nru mumble-1.2.3/src/mumble/Overlay_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Overlay_win.cpp --- mumble-1.2.3/src/mumble/Overlay_win.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Overlay_win.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -34,21 +34,12 @@ #include "MainWindow.h" #include "Global.h" -typedef void (__cdecl *HooksProc)(); typedef unsigned int (__cdecl *GetOverlayMagicVersionProc)(); typedef void (__cdecl *PrepProc)(); typedef void (__cdecl *PrepDXGIProc)(); -class OverlayPrivateWin : public OverlayPrivate { - protected: - QLibrary *qlOverlay; - public: - HooksProc hpInstall, hpRemove; - - void setActive(bool); - OverlayPrivateWin(QObject *); - ~OverlayPrivateWin(); -}; +// Used by the overlay to detect whether we injected into ourselve +extern "C" __declspec(dllexport) void mumbleSelfDetection() {}; OverlayPrivateWin::OverlayPrivateWin(QObject *p) : OverlayPrivate(p) { QString path=QString::fromLatin1("%1/mumble_ol.dll").arg(qApp->applicationDirPath()); diff -Nru mumble-1.2.3/src/mumble/PAAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble/PAAudio.cpp --- mumble-1.2.3/src/mumble/PAAudio.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/PAAudio.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig Copyright (C) 2007, Stefan Gehn All rights reserved. diff -Nru mumble-1.2.3/src/mumble/PAAudio.h mumble-1.2.3-87-gf7d8711/src/mumble/PAAudio.h --- mumble-1.2.3/src/mumble/PAAudio.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/PAAudio.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig Copyright (C) 2007, Stefan Gehn All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Plugins.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Plugins.cpp --- mumble-1.2.3/src/mumble/Plugins.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Plugins.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -33,7 +33,7 @@ #include "Message.h" #include "ServerHandler.h" #include "MainWindow.h" -#include "NetworkConfig.h" +#include "WebFetch.h" #include "../../plugins/mumble_plugin.h" #include "Global.h" @@ -456,8 +456,6 @@ void Plugins::checkUpdates() { QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(g.qsRegionalHost); url.setPath(QLatin1String("/plugins.php")); url.addQueryItem(QLatin1String("ver"), QLatin1String(QUrl::toPercentEncoding(QLatin1String(MUMBLE_RELEASE)))); @@ -471,44 +469,75 @@ #endif #ifdef QT_NO_DEBUG - QNetworkReply *rep = Network::get(url); - connect(rep, SIGNAL(finished()), this, SLOT(finished())); + WebFetch::fetch(url, this, SLOT(fetched(QByteArray,QUrl))); #else g.mw->msgBox(tr("Skipping plugin update in debug mode.")); #endif } -void Plugins::finished() { - QNetworkReply *rep = qobject_cast(sender()); - QUrl url = rep->request().url(); +void Plugins::fetched(QByteArray data, QUrl url) { + if (data.isNull()) + return; bool rescan = false; + const QString &path = url.path(); + if (path == QLatin1String("/plugins.php")) { + qmPluginHash.clear(); + QDomDocument doc; + doc.setContent(data); + + QDomElement root=doc.documentElement(); + QDomNode n = root.firstChild(); + while (!n.isNull()) { + QDomElement e = n.toElement(); + if (!e.isNull()) { + if (e.tagName() == QLatin1String("plugin")) { + QString name = QFileInfo(e.attribute(QLatin1String("name"))).fileName(); + QString hash = e.attribute(QLatin1String("hash")); + qmPluginHash.insert(name, hash); + } + } + n = n.nextSibling(); + } + + QDir qd(qsSystemPlugins, QString(), QDir::Name, QDir::Files | QDir::Readable); + QDir qdu(qsUserPlugins, QString(), QDir::Name, QDir::Files | QDir::Readable); - if (rep->error() == QNetworkReply::NoError) { - const QString &path = url.path(); - if (path == QLatin1String("/plugins.php")) { - qmPluginHash.clear(); - QDomDocument doc; - doc.setContent(rep->readAll()); - - QDomElement root=doc.documentElement(); - QDomNode n = root.firstChild(); - while (!n.isNull()) { - QDomElement e = n.toElement(); - if (!e.isNull()) { - if (e.tagName() == QLatin1String("plugin")) { - QString name = QFileInfo(e.attribute(QLatin1String("name"))).fileName(); - QString hash = e.attribute(QLatin1String("hash")); - qmPluginHash.insert(name, hash); + QFileInfoList libs = qd.entryInfoList(); + foreach(const QFileInfo &libinfo, libs) { + QString libname = libinfo.absoluteFilePath(); + QString filename = libinfo.fileName(); + QString wanthash = qmPluginHash.value(filename); + if (! wanthash.isNull() && QLibrary::isLibrary(libname)) { + QFile f(libname); + if (wanthash.isEmpty()) { + // Outdated plugin + if (f.exists()) { + clearPlugins(); + f.remove(); + rescan=true; + } + } else if (f.open(QIODevice::ReadOnly)) { + QString h = QLatin1String(sha1(f.readAll()).toHex()); + f.close(); + if (h == wanthash) { + if (qd != qdu) { + QFile qfuser(qsUserPlugins + QString::fromLatin1("/") + filename); + if (qfuser.exists()) { + clearPlugins(); + qfuser.remove(); + rescan=true; + } + } + // Mark for removal from userplugins + qmPluginHash.insert(filename, QString()); } } - n = n.nextSibling(); } + } - QDir qd(qsSystemPlugins, QString(), QDir::Name, QDir::Files | QDir::Readable); - QDir qdu(qsUserPlugins, QString(), QDir::Name, QDir::Files | QDir::Readable); - - QFileInfoList libs = qd.entryInfoList(); + if (qd != qdu) { + libs = qdu.entryInfoList(); foreach(const QFileInfo &libinfo, libs) { QString libname = libinfo.absoluteFilePath(); QString filename = libinfo.fileName(); @@ -526,136 +555,89 @@ QString h = QLatin1String(sha1(f.readAll()).toHex()); f.close(); if (h == wanthash) { - if (qd != qdu) { - QFile qfuser(qsUserPlugins + QString::fromLatin1("/") + filename); - if (qfuser.exists()) { - clearPlugins(); - qfuser.remove(); - rescan=true; - } - } - // Mark for removal from userplugins - qmPluginHash.insert(filename, QString()); - } - } - } - } - - if (qd != qdu) { - libs = qdu.entryInfoList(); - foreach(const QFileInfo &libinfo, libs) { - QString libname = libinfo.absoluteFilePath(); - QString filename = libinfo.fileName(); - QString wanthash = qmPluginHash.value(filename); - if (! wanthash.isNull() && QLibrary::isLibrary(libname)) { - QFile f(libname); - if (wanthash.isEmpty()) { - // Outdated plugin - if (f.exists()) { - clearPlugins(); - f.remove(); - rescan=true; - } - } else if (f.open(QIODevice::ReadOnly)) { - QString h = QLatin1String(sha1(f.readAll()).toHex()); - f.close(); - if (h == wanthash) { - qmPluginHash.remove(filename); - } + qmPluginHash.remove(filename); } } } } - QMap::const_iterator i; - for (i = qmPluginHash.constBegin(); i != qmPluginHash.constEnd(); ++i) { - if (! i.value().isEmpty()) { - QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(g.qsRegionalHost); - url.setPath(QString::fromLatin1("plugins/%1").arg(i.key())); + } + QMap::const_iterator i; + for (i = qmPluginHash.constBegin(); i != qmPluginHash.constEnd(); ++i) { + if (! i.value().isEmpty()) { + QUrl url; + url.setPath(QString::fromLatin1("plugins/%1").arg(i.key())); - QNetworkReply *r = Network::get(url); - connect(r, SIGNAL(finished()), this, SLOT(finished())); - } + WebFetch::fetch(url, this, SLOT(fetched(QByteArray,QUrl))); } - } else { - QString fname = QFileInfo(path).fileName(); - if (qmPluginHash.contains(fname)) { - QByteArray qba = rep->readAll(); - if (qmPluginHash.value(fname) == QLatin1String(sha1(qba).toHex())) { - bool verified = true; + } + } else { + QString fname = QFileInfo(path).fileName(); + if (qmPluginHash.contains(fname)) { + if (qmPluginHash.value(fname) == QLatin1String(sha1(data).toHex())) { + bool verified = true; #ifdef Q_OS_WIN - verified = false; - QString tempname, tempnative; - { - QTemporaryFile temp(QDir::tempPath() + QLatin1String("/plugin_XXXXXX.dll")); - if (temp.open()) { - tempname = temp.fileName(); - tempnative = QDir::toNativeSeparators(tempname); - temp.write(qba); - temp.setAutoRemove(false); - } - } - if (! tempname.isNull()) { - WINTRUST_FILE_INFO file; - ZeroMemory(&file, sizeof(file)); - file.cbStruct = sizeof(file); - file.pcwszFilePath = tempnative.utf16(); - - WINTRUST_DATA data; - ZeroMemory(&data, sizeof(data)); - data.cbStruct = sizeof(data); - data.dwUIChoice = WTD_UI_NONE; - data.fdwRevocationChecks = WTD_REVOKE_NONE; - data.dwUnionChoice = WTD_CHOICE_FILE; - data.pFile = &file; - data.dwProvFlags = WTD_SAFER_FLAG | WTD_USE_DEFAULT_OSVER_CHECK | WTD_LIFETIME_SIGNING_FLAG; - data.dwUIContext = WTD_UICONTEXT_INSTALL; - - static GUID guid = WINTRUST_ACTION_GENERIC_VERIFY_V2; - - LONG ts = WinVerifyTrust(0, &guid , &data); - - QFile deltemp(tempname); - deltemp.remove(); - verified = (ts == 0); + verified = false; + QString tempname, tempnative; + { + QTemporaryFile temp(QDir::tempPath() + QLatin1String("/plugin_XXXXXX.dll")); + if (temp.open()) { + tempname = temp.fileName(); + tempnative = QDir::toNativeSeparators(tempname); + temp.write(data); + temp.setAutoRemove(false); } + } + if (! tempname.isNull()) { + WINTRUST_FILE_INFO file; + ZeroMemory(&file, sizeof(file)); + file.cbStruct = sizeof(file); + file.pcwszFilePath = tempnative.utf16(); + + WINTRUST_DATA data; + ZeroMemory(&data, sizeof(data)); + data.cbStruct = sizeof(data); + data.dwUIChoice = WTD_UI_NONE; + data.fdwRevocationChecks = WTD_REVOKE_NONE; + data.dwUnionChoice = WTD_CHOICE_FILE; + data.pFile = &file; + data.dwProvFlags = WTD_SAFER_FLAG | WTD_USE_DEFAULT_OSVER_CHECK | WTD_LIFETIME_SIGNING_FLAG; + data.dwUIContext = WTD_UICONTEXT_INSTALL; + + static GUID guid = WINTRUST_ACTION_GENERIC_VERIFY_V2; + + LONG ts = WinVerifyTrust(0, &guid , &data); + + QFile deltemp(tempname); + deltemp.remove(); + verified = (ts == 0); + } #endif - if (verified) { - clearPlugins(); + if (verified) { + clearPlugins(); - QFile f; - f.setFileName(qsSystemPlugins + QLatin1String("/") + fname); + QFile f; + f.setFileName(qsSystemPlugins + QLatin1String("/") + fname); + if (f.open(QIODevice::WriteOnly)) { + f.write(data); + f.close(); + g.mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName())); + } else { + f.setFileName(qsUserPlugins + QLatin1String("/") + fname); if (f.open(QIODevice::WriteOnly)) { - f.write(qba); + f.write(data); f.close(); g.mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName())); } else { - f.setFileName(qsUserPlugins + QLatin1String("/") + fname); - if (f.open(QIODevice::WriteOnly)) { - f.write(qba); - f.close(); - g.mw->msgBox(tr("Downloaded new or updated plugin to %1.").arg(f.fileName())); - } else { - g.mw->msgBox(tr("Failed to install new plugin to %1.").arg(f.fileName())); - } + g.mw->msgBox(tr("Failed to install new plugin to %1.").arg(f.fileName())); } - - rescan=true; } + + rescan=true; } } } - } else { - if (url.host() == g.qsRegionalHost) { - url.setHost(QLatin1String("mumble.info")); - QNetworkReply *nrep = Network::get(url); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - } } if (rescan) rescanPlugins(); - - rep->deleteLater(); } diff -Nru mumble-1.2.3/src/mumble/Plugins.h mumble-1.2.3-87-gf7d8711/src/mumble/Plugins.h --- mumble-1.2.3/src/mumble/Plugins.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Plugins.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -93,7 +93,7 @@ void rescanPlugins(); bool fetch(); void checkUpdates(); - void finished(); + void fetched(QByteArray, QUrl); }; #else diff -Nru mumble-1.2.3/src/mumble/PulseAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble/PulseAudio.cpp --- mumble-1.2.3/src/mumble/PulseAudio.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/PulseAudio.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -99,7 +99,16 @@ pam = pa_threaded_mainloop_new(); pa_mainloop_api *api = pa_threaded_mainloop_get_api(pam); - pacContext = pa_context_new(api, "Mumble"); + pa_proplist *proplist; + + proplist = pa_proplist_new (); + pa_proplist_sets (proplist, PA_PROP_APPLICATION_NAME, "Mumble"); + pa_proplist_sets (proplist, PA_PROP_APPLICATION_ID, "net.sourceforge.mumble.mumble"); + pa_proplist_sets (proplist, PA_PROP_APPLICATION_ICON_NAME, "mumble"); + pa_proplist_sets (proplist, PA_PROP_MEDIA_ROLE, "phone"); + + pacContext = pa_context_new_with_proplist (api, NULL, proplist); + pa_proplist_free (proplist); pa_context_set_subscribe_callback(pacContext, subscribe_callback, this); @@ -162,14 +171,17 @@ case PA_STREAM_TERMINATED: { if (pasOutput) pa_stream_unref(pasOutput); + pa_sample_spec pss = qhSpecMap.value(odev); + pa_channel_map pcm = qhChanMap.value(odev); + if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) + pss.format = PA_SAMPLE_FLOAT32NE; if (pss.rate == 0) pss.rate = SAMPLE_RATE; if ((pss.channels == 0) || (! g.s.doPositionalAudio())) pss.channels = 1; - if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) - pss.format = PA_SAMPLE_FLOAT32NE; - pasOutput = pa_stream_new(pacContext, "Mumble Speakers", &pss, NULL); + + pasOutput = pa_stream_new(pacContext, "Mumble Speakers", &pss, (pss.channels == 1) ? NULL : &pcm); pa_stream_set_state_callback(pasOutput, stream_callback, this); pa_stream_set_write_callback(pasOutput, write_callback, this); } @@ -227,11 +239,11 @@ pa_stream_unref(pasInput); pa_sample_spec pss = qhSpecMap.value(idev); + if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) + pss.format = PA_SAMPLE_FLOAT32NE; if (pss.rate == 0) pss.rate = SAMPLE_RATE; pss.channels = 1; - if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) - pss.format = PA_SAMPLE_FLOAT32NE; pasInput = pa_stream_new(pacContext, "Microphone", &pss, NULL); pa_stream_set_state_callback(pasInput, stream_callback, this); @@ -286,12 +298,15 @@ pa_stream_unref(pasSpeaker); pa_sample_spec pss = qhSpecMap.value(edev); - if (pss.rate == 0) - pss.rate = SAMPLE_RATE; - pss.channels = 1; + pa_channel_map pcm = qhChanMap.value(edev); if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) pss.format = PA_SAMPLE_FLOAT32NE; - pasSpeaker = pa_stream_new(pacContext, "Mumble Speakers (Echo)", &pss, NULL); + if (pss.rate == 0) + pss.rate = SAMPLE_RATE; + if ((pss.channels == 0) || (! g.s.bEchoMulti)) + pss.channels = 1; + + pasSpeaker = pa_stream_new(pacContext, "Mumble Speakers (Echo)", &pss, (pss.channels == 1) ? NULL : &pcm); pa_stream_set_state_callback(pasSpeaker, stream_callback, this); pa_stream_set_read_callback(pasSpeaker, read_callback, this); } @@ -299,7 +314,9 @@ do_start = true; break; case PA_STREAM_READY: { - if (edev != qsEchoCache) { + if (g.s.bEchoMulti != bEchoMultiCache) { + do_stop = true; + } else if (edev != qsEchoCache) { do_stop = true; } break; @@ -322,6 +339,7 @@ buff.prebuf = -1; buff.fragsize = iBlockLen; + bEchoMultiCache = g.s.bEchoMulti; qsEchoCache = edev; pa_stream_connect_record(pasSpeaker, qPrintable(edev), &buff, PA_STREAM_ADJUST_LATENCY); @@ -364,8 +382,8 @@ const QString name = QLatin1String(i->name); - pas->qhIndexMap.insert(name, i->index); pas->qhSpecMap.insert(name, i->sample_spec); + pas->qhChanMap.insert(name, i->channel_map); pas->qhOutput.insert(name, QLatin1String(i->description)); pas->qhEchoMap.insert(name, QLatin1String(i->monitor_source_name)); } @@ -380,8 +398,8 @@ const QString name = QLatin1String(i->name); - pas->qhIndexMap.insert(name, i->index); pas->qhSpecMap.insert(name, i->sample_spec); + pas->qhChanMap.insert(name, i->channel_map); if (i->monitor_of_sink == PA_INVALID_INDEX) pas->qhInput.insert(QLatin1String(i->name), QLatin1String(i->description)); @@ -542,6 +560,8 @@ qhInput.clear(); qhOutput.clear(); qhEchoMap.clear(); + qhSpecMap.clear(); + qhChanMap.clear(); qhInput.insert(QString(), tr("Default Input")); qhOutput.insert(QString(), tr("Default Output")); pa_operation_unref(pa_context_get_server_info(pacContext, server_callback, this)); diff -Nru mumble-1.2.3/src/mumble/PulseAudio.h mumble-1.2.3-87-gf7d8711/src/mumble/PulseAudio.h --- mumble-1.2.3/src/mumble/PulseAudio.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/PulseAudio.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -56,9 +56,10 @@ int iDelayCache; QString qsOutputCache, qsInputCache, qsEchoCache; bool bPositionalCache; + bool bEchoMultiCache; QHash qhEchoMap; QHash qhSpecMap; - QHash qhIndexMap; + QHash qhChanMap; static void defer_event_callback(pa_mainloop_api *a, pa_defer_event *e, void *userdata); static void context_state_callback(pa_context *c, void *userdata); diff -Nru mumble-1.2.3/src/mumble/RichTextEditor.cpp mumble-1.2.3-87-gf7d8711/src/mumble/RichTextEditor.cpp --- mumble-1.2.3/src/mumble/RichTextEditor.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/RichTextEditor.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* copyright (C) 2005-2010, Thorvald Natvig +/* copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/RichTextEditor.h mumble-1.2.3-87-gf7d8711/src/mumble/RichTextEditor.h --- mumble-1.2.3/src/mumble/RichTextEditor.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/RichTextEditor.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ServerHandler.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ServerHandler.cpp --- mumble-1.2.3/src/mumble/ServerHandler.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ServerHandler.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ServerHandler.h mumble-1.2.3-87-gf7d8711/src/mumble/ServerHandler.h --- mumble-1.2.3/src/mumble/ServerHandler.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ServerHandler.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Settings.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Settings.cpp --- mumble-1.2.3/src/mumble/Settings.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Settings.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -128,6 +128,8 @@ osShow = LinkedChannels; bAlwaysSelf = true; + iActiveTime = 5; + osSort = Alphabetical; qcUserName[Settings::Passive] = QColor(170, 170, 170); qcUserName[Settings::Talking] = QColor(255, 255, 255); @@ -249,6 +251,7 @@ bTransmitPosition = false; bMute = bDeaf = false; bTTS = true; + bTTSMessageReadBack = false; iTTSVolume = 75; iTTSThreshold = 250; iQuality = 40000; @@ -364,6 +367,8 @@ dPacketLoss = 0; dMaxPacketDelay = 0.0f; + iMaxLogBlocks = 0; + for (int i=Log::firstMsgType;i<=Log::lastMsgType;++i) qmMessages.insert(i, Settings::LogConsole | Settings::LogBalloon | Settings::LogTTS); @@ -446,6 +451,8 @@ LOADENUM(osShow, "show"); SAVELOAD(bAlwaysSelf, "alwaysself"); + SAVELOAD(iActiveTime, "activetime"); + LOADENUM(osSort, "sort"); SAVELOAD(fX, "x"); SAVELOAD(fY, "y"); @@ -574,6 +581,7 @@ SAVELOAD(bTTS, "tts/enable"); SAVELOAD(iTTSVolume, "tts/volume"); SAVELOAD(iTTSThreshold, "tts/threshold"); + SAVELOAD(bTTSMessageReadBack, "tts/readback"); // Network settings SAVELOAD(bTCPCompat, "net/tcponly"); @@ -589,6 +597,7 @@ SAVELOAD(iMaxImageSize, "net/maximagesize"); SAVELOAD(iMaxImageWidth, "net/maximagewidth"); SAVELOAD(iMaxImageHeight, "net/maximageheight"); + SAVELOAD(qsRegionalHost, "net/region"); SAVELOAD(bExpert, "ui/expert"); SAVELOAD(qsLanguage, "ui/language"); @@ -625,6 +634,7 @@ SAVELOAD(qbaConnectDialogGeometry, "ui/connect/geometry"); SAVELOAD(qbaConnectDialogHeader, "ui/connect/header"); SAVELOAD(bHighContrast, "ui/HighContrast"); + SAVELOAD(iMaxLogBlocks, "ui/MaxLogBlocks"); // Recording SAVELOAD(qsRecordingPath, "recording/path"); @@ -702,6 +712,8 @@ SAVELOAD(osShow, "show"); SAVELOAD(bAlwaysSelf, "alwaysself"); + SAVELOAD(iActiveTime, "activetime"); + SAVELOAD(osSort, "sort"); SAVELOAD(fX, "x"); SAVELOAD(fY, "y"); SAVELOAD(fZoom, "zoom"); @@ -828,6 +840,7 @@ SAVELOAD(bTTS, "tts/enable"); SAVELOAD(iTTSVolume, "tts/volume"); SAVELOAD(iTTSThreshold, "tts/threshold"); + SAVELOAD(bTTSMessageReadBack, "tts/readback"); // Network settings SAVELOAD(bTCPCompat, "net/tcponly"); @@ -842,6 +855,7 @@ SAVELOAD(iMaxImageSize, "net/maximagesize"); SAVELOAD(iMaxImageWidth, "net/maximagewidth"); SAVELOAD(iMaxImageHeight, "net/maximageheight"); + SAVELOAD(qsRegionalHost, "net/region"); SAVELOAD(bExpert, "ui/expert"); SAVELOAD(qsLanguage, "ui/language"); @@ -876,6 +890,7 @@ SAVELOAD(qbaConnectDialogGeometry, "ui/connect/geometry"); SAVELOAD(qbaConnectDialogHeader, "ui/connect/header"); SAVELOAD(bHighContrast, "ui/HighContrast"); + SAVELOAD(iMaxLogBlocks, "ui/MaxLogBlocks"); // Recording SAVELOAD(qsRecordingPath, "recording/path"); diff -Nru mumble-1.2.3/src/mumble/Settings.h mumble-1.2.3-87-gf7d8711/src/mumble/Settings.h --- mumble-1.2.3/src/mumble/Settings.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Settings.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -76,7 +76,9 @@ struct OverlaySettings { enum OverlayPresets { AvatarAndName, LargeSquareAvatar }; - enum OverlayShow { Talking, HomeChannel, LinkedChannels }; + enum OverlayShow { Talking, Active, HomeChannel, LinkedChannels }; + + enum OverlaySort { Alphabetical, LastStateChange }; bool bEnable; @@ -84,6 +86,8 @@ OverlayShow osShow; bool bAlwaysSelf; + int iActiveTime; // Time in seconds for a user to stay active after talking + OverlaySort osSort; float fX; float fY; @@ -169,6 +173,7 @@ bool bTTS; bool bUserTop; bool bWhisperFriends; + bool bTTSMessageReadBack; int iTTSVolume, iTTSThreshold; int iQuality, iMinLoudness, iVoiceHold, iJitterBufferSize; int iNoiseSuppress; @@ -211,6 +216,7 @@ QList qlShortcuts; enum MessageLog { LogNone = 0x00, LogConsole = 0x01, LogTTS = 0x02, LogBalloon = 0x04, LogSoundfile = 0x08}; + int iMaxLogBlocks; QMap qmMessageSounds; QMap qmMessages; @@ -253,6 +259,7 @@ ProxyType ptProxyType; QString qsProxyHost, qsProxyUsername, qsProxyPassword; unsigned short usProxyPort; + QString qsRegionalHost; static const int ciDefaultMaxImageSize = 50 * 1024; // Restrict to 50KiB as a default int iMaxImageSize; diff -Nru mumble-1.2.3/src/mumble/SharedMemory.cpp mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory.cpp --- mumble-1.2.3/src/mumble/SharedMemory.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/SharedMemory.h mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory.h --- mumble-1.2.3/src/mumble/SharedMemory.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/SharedMemory_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory_unix.cpp --- mumble-1.2.3/src/mumble/SharedMemory_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory_unix.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/SharedMemory_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory_win.cpp --- mumble-1.2.3/src/mumble/SharedMemory_win.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/SharedMemory_win.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/SocketRPC.cpp mumble-1.2.3-87-gf7d8711/src/mumble/SocketRPC.cpp --- mumble-1.2.3/src/mumble/SocketRPC.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/SocketRPC.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -33,11 +33,7 @@ #include "MainWindow.h" #include "ServerHandler.h" #include "Channel.h" -#ifdef COMPAT_CLIENT -#include "Player.h" -#else #include "ClientUser.h" -#endif SocketRPCClient::SocketRPCClient(QLocalSocket *s, QObject *p) : QObject(p), qlsSocket(s), qbBuffer(NULL) { qlsSocket->setParent(this); @@ -161,11 +157,7 @@ u.setUserName(user); u.addQueryItem(QLatin1String("version"), QLatin1String("1.2.0")); QStringList path; -#ifdef COMPAT_CLIENT - Channel *c = ClientPlayer::get(g.uiSession)->cChannel; -#else Channel *c = ClientUser::get(g.uiSession)->cChannel; -#endif while (c->cParent) { path.prepend(c->qsName); c = c->cParent; @@ -178,14 +170,8 @@ if (iter != qmRequest.constEnd()) { QUrl u = iter.value().toUrl(); if (u.isValid() && u.scheme() == QLatin1String("mumble")) { -#ifdef COMPAT_CLIENT - if (u.userName().isEmpty()) - u.setUserName(QLatin1String("Unknown")); - g.mw->openUrl(u); -#else OpenURLEvent *oue = new OpenURLEvent(u); qApp->postEvent(g.mw, oue); -#endif ack = true; } } else { diff -Nru mumble-1.2.3/src/mumble/SocketRPC.h mumble-1.2.3-87-gf7d8711/src/mumble/SocketRPC.h --- mumble-1.2.3/src/mumble/SocketRPC.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/SocketRPC.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TaskList.cpp mumble-1.2.3-87-gf7d8711/src/mumble/TaskList.cpp --- mumble-1.2.3/src/mumble/TaskList.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TaskList.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Benjamin Jemlich +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Benjamin Jemlich All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TaskList.h mumble-1.2.3-87-gf7d8711/src/mumble/TaskList.h --- mumble-1.2.3/src/mumble/TaskList.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TaskList.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Benjamin Jemlich +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Benjamin Jemlich All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TextMessage.cpp mumble-1.2.3-87-gf7d8711/src/mumble/TextMessage.cpp --- mumble-1.2.3/src/mumble/TextMessage.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TextMessage.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TextMessage.h mumble-1.2.3-87-gf7d8711/src/mumble/TextMessage.h --- mumble-1.2.3/src/mumble/TextMessage.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TextMessage.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TextToSpeech.h mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech.h --- mumble-1.2.3/src/mumble/TextToSpeech.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TextToSpeech_macx.cpp mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech_macx.cpp --- mumble-1.2.3/src/mumble/TextToSpeech_macx.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech_macx.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig Copyright (C) 2007, Sebastian Schlingmann - Copyright (C) 2008-2009, Mikkel Krautz + Copyright (C) 2008-2011, Mikkel Krautz All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TextToSpeech_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech_unix.cpp --- mumble-1.2.3/src/mumble/TextToSpeech_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech_unix.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/TextToSpeech_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech_win.cpp --- mumble-1.2.3/src/mumble/TextToSpeech_win.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/TextToSpeech_win.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Tokens.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Tokens.cpp --- mumble-1.2.3/src/mumble/Tokens.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Tokens.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* copyright (C) 2005-2010, Thorvald Natvig +/* copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Tokens.h mumble-1.2.3-87-gf7d8711/src/mumble/Tokens.h --- mumble-1.2.3/src/mumble/Tokens.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Tokens.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Usage.cpp mumble-1.2.3-87-gf7d8711/src/mumble/Usage.cpp --- mumble-1.2.3/src/mumble/Usage.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Usage.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/Usage.h mumble-1.2.3-87-gf7d8711/src/mumble/Usage.h --- mumble-1.2.3/src/mumble/Usage.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/Usage.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserEdit.cpp mumble-1.2.3-87-gf7d8711/src/mumble/UserEdit.cpp --- mumble-1.2.3/src/mumble/UserEdit.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserEdit.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* copyright (C) 2005-2010, Thorvald Natvig +/* copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserEdit.h mumble-1.2.3-87-gf7d8711/src/mumble/UserEdit.h --- mumble-1.2.3/src/mumble/UserEdit.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserEdit.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserInformation.cpp mumble-1.2.3-87-gf7d8711/src/mumble/UserInformation.cpp --- mumble-1.2.3/src/mumble/UserInformation.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserInformation.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -196,6 +196,17 @@ qlToLate->setText(QString::number(to.late())); qlToLost->setText(QString::number(to.lost())); qlToResync->setText(QString::number(to.resync())); + + float allFromPackets = (from.good() + from.late() + from.lost()); + float allToPackets = (to.good() + to.late() + to.lost()); + if (allFromPackets != 0.0f) { + qlFromLate_percent->setText(QString::number(from.late() * 100.0f / allFromPackets, 'f', 2)); + qlFromLost_percent->setText(QString::number(from.lost() * 100.0f / allFromPackets, 'f', 2)); + } + if (allToPackets != 0.0f) { + qlToLate_percent->setText(QString::number(to.late() * 100.0f / allToPackets, 'f', 2)); + qlToLost_percent->setText(QString::number(to.lost() * 100.0f / allToPackets, 'f', 2)); + } } else { qgbUDP->setVisible(false); } diff -Nru mumble-1.2.3/src/mumble/UserInformation.h mumble-1.2.3-87-gf7d8711/src/mumble/UserInformation.h --- mumble-1.2.3/src/mumble/UserInformation.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserInformation.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserInformation.ui mumble-1.2.3-87-gf7d8711/src/mumble/UserInformation.ui --- mumble-1.2.3/src/mumble/UserInformation.ui 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserInformation.ui 2011-04-02 22:20:48.000000000 +0000 @@ -326,7 +326,7 @@ - + Lost @@ -336,7 +336,7 @@ - + Resync @@ -379,7 +379,7 @@ - + @@ -392,7 +392,7 @@ - + @@ -438,7 +438,7 @@ - + @@ -451,7 +451,7 @@ - + @@ -464,6 +464,66 @@ + + + + % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + % + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0.00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0.00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0.00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + 0.00 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + diff -Nru mumble-1.2.3/src/mumble/UserModel.cpp mumble-1.2.3-87-gf7d8711/src/mumble/UserModel.cpp --- mumble-1.2.3/src/mumble/UserModel.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserModel.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserModel.h mumble-1.2.3-87-gf7d8711/src/mumble/UserModel.h --- mumble-1.2.3/src/mumble/UserModel.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserModel.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserView.cpp mumble-1.2.3-87-gf7d8711/src/mumble/UserView.cpp --- mumble-1.2.3/src/mumble/UserView.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserView.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/UserView.h mumble-1.2.3-87-gf7d8711/src/mumble/UserView.h --- mumble-1.2.3/src/mumble/UserView.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/UserView.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/VersionCheck.cpp mumble-1.2.3-87-gf7d8711/src/mumble/VersionCheck.cpp --- mumble-1.2.3/src/mumble/VersionCheck.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/VersionCheck.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,14 +31,12 @@ #include "VersionCheck.h" #include "Global.h" #include "MainWindow.h" -#include "NetworkConfig.h" +#include "WebFetch.h" VersionCheck::VersionCheck(bool autocheck, QObject *p, bool focus) : QObject(p) { bSilent = autocheck; QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(g.qsRegionalHost); url.setPath(focus ? QLatin1String("/focus.php") : QLatin1String("/ver.php")); url.addQueryItem(QLatin1String("ver"), QLatin1String(QUrl::toPercentEncoding(QLatin1String(MUMBLE_RELEASE)))); @@ -72,18 +70,13 @@ } } - QNetworkReply *rep = Network::get(url); - connect(rep, SIGNAL(finished()), this, SLOT(finished())); + WebFetch::fetch(url, this, SLOT(fetched(QByteArray,QUrl))); } -void VersionCheck::finished() { - QNetworkReply *rep = qobject_cast(sender()); - QUrl url = rep->request().url(); - - if (rep->error() == QNetworkReply::NoError) { - const QByteArray &a=rep->readAll(); +void VersionCheck::fetched(QByteArray a, QUrl url) { + if (! a.isNull()) { if (! a.isEmpty()) { -#if defined(SNAPSHOT_BUILD) && ! defined(COMPAT_CLIENT) +#ifdef SNAPSHOT_BUILD if (url.path() == QLatin1String("/focus.php")) { g.mw->msgBox(QString::fromUtf8(a)); } else if (url.path() == QLatin1String("/ver.php")) { @@ -97,6 +90,8 @@ elem = elem.firstChildElement(QLatin1String("a")); QUrl fetch = QUrl(elem.attribute(QLatin1String("href"))); + fetch.setHost(QString()); + fetch.setScheme(QString()); if (! fetch.isValid()) { g.mw->msgBox(QString::fromUtf8(a)); } else { @@ -149,14 +144,23 @@ g.mw->msgBox(tr("Corrupt download of new version detected. Automatically removed.")); qf.remove(); } + + // Delete snapshots older than 30 days + QDir snapdir(g.qdBasePath.absolutePath() + QLatin1String("/Snapshots/"), + QString(), + QDir::Name, + QDir::Files); + + foreach(const QFileInfo fileInfo, snapdir.entryInfoList()) { + if (fileInfo.created().daysTo(QDateTime::currentDateTime()) > 30) { + qWarning() << "Purging old snapshot" << fileInfo.fileName(); + QFile file(fileInfo.absoluteFilePath()); + file.remove(); + } + } } else { - fetch.setHost(g.qsRegionalHost); g.mw->msgBox(tr("Downloading new snapshot from %1 to %2").arg(fetch.toString(), filename)); - - QNetworkReply *nrep = Network::get(fetch); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - - rep->deleteLater(); + WebFetch::fetch(fetch, this, SLOT(fetched(QByteArray,QUrl))); return; } } @@ -177,19 +181,9 @@ g.mw->msgBox(QString::fromUtf8(a)); #endif } - } else { - if (url.host() == g.qsRegionalHost) { - url.setHost(QLatin1String("mumble.info")); - QNetworkReply *nrep = Network::get(url); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - - rep->deleteLater(); - return; - } else if (bSilent) { - g.mw->msgBox(tr("Mumble failed to retrieve version information from the central server.")); - } + } else if (bSilent) { + g.mw->msgBox(tr("Mumble failed to retrieve version information from the central server.")); } - rep->deleteLater(); deleteLater(); } diff -Nru mumble-1.2.3/src/mumble/VersionCheck.h mumble-1.2.3-87-gf7d8711/src/mumble/VersionCheck.h --- mumble-1.2.3/src/mumble/VersionCheck.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/VersionCheck.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -40,7 +40,7 @@ protected: bool bSilent; public slots: - void finished(); + void fetched(QByteArray data, QUrl url); public: VersionCheck(bool autocheck, QObject *parent = NULL, bool focus = false); }; diff -Nru mumble-1.2.3/src/mumble/ViewCert.cpp mumble-1.2.3-87-gf7d8711/src/mumble/ViewCert.cpp --- mumble-1.2.3/src/mumble/ViewCert.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ViewCert.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/ViewCert.h mumble-1.2.3-87-gf7d8711/src/mumble/ViewCert.h --- mumble-1.2.3/src/mumble/ViewCert.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/ViewCert.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/VoiceRecorder.cpp mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorder.cpp --- mumble-1.2.3/src/mumble/VoiceRecorder.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorder.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2010, Benjamin Jemlich - Copyright (C) 2010, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2010-2011, Benjamin Jemlich + Copyright (C) 2010-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/mumble/VoiceRecorderDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorderDialog.cpp --- mumble-1.2.3/src/mumble/VoiceRecorderDialog.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorderDialog.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2010, Stefan Hacker - Copyright (C) 2010, Benjamin Jemlich +/* Copyright (C) 2010-2011, Stefan Hacker + Copyright (C) 2010-2011, Benjamin Jemlich All rights reserved. diff -Nru mumble-1.2.3/src/mumble/VoiceRecorderDialog.h mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorderDialog.h --- mumble-1.2.3/src/mumble/VoiceRecorderDialog.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorderDialog.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2010, Stefan Hacker - Copyright (C) 2010, Benjamin Jemlich +/* Copyright (C) 2010-2011, Stefan Hacker + Copyright (C) 2010-2011, Benjamin Jemlich All rights reserved. diff -Nru mumble-1.2.3/src/mumble/VoiceRecorder.h mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorder.h --- mumble-1.2.3/src/mumble/VoiceRecorder.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/VoiceRecorder.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,6 +1,6 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2010, Benjamin Jemlich - Copyright (C) 2010, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2010-2011, Benjamin Jemlich + Copyright (C) 2010-2011, Stefan Hacker All rights reserved. @@ -36,10 +36,10 @@ #pragma once #include "mumble_pch.hpp" +#include "Timer.h" class ClientUser; class RecordUser; -struct Timer; namespace VoiceRecorderFormat { diff -Nru mumble-1.2.3/src/mumble/WASAPI.cpp mumble-1.2.3-87-gf7d8711/src/mumble/WASAPI.cpp --- mumble-1.2.3/src/mumble/WASAPI.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/WASAPI.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/WASAPI.h mumble-1.2.3-87-gf7d8711/src/mumble/WASAPI.h --- mumble-1.2.3/src/mumble/WASAPI.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/WASAPI.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/mumble/WebFetch.cpp mumble-1.2.3-87-gf7d8711/src/mumble/WebFetch.cpp --- mumble-1.2.3/src/mumble/WebFetch.cpp 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/WebFetch.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,110 @@ +/* Copyright (C) 2005-2011, Thorvald Natvig + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "WebFetch.h" +#include "NetworkConfig.h" +#include "Global.h" + +WebFetch::WebFetch(QUrl url, QObject *obj, const char *slot) : QObject(), qoObject(obj), cpSlot(slot) { + url.setScheme(QLatin1String("http")); + + // Fix in case the regional host is broken + url.setHost(g.s.qsRegionalHost); + if (url.host() != g.s.qsRegionalHost) + url.setHost(QLatin1String("mumble.info")); + + qnr = Network::get(url); + connect(qnr, SIGNAL(finished()), this, SLOT(finished())); + connect(this, SIGNAL(fetched(QByteArray,QUrl,QMap)), obj, slot); +} + +static QString fromUtf8(const QByteArray &qba) { + if (qba.isEmpty()) + return QString(); + return QString::fromUtf8(qba.constData(), qba.length()); +} + +void WebFetch::finished() { + // Note that if this functions succeeds, it should deleteLater() itself, as this is a temporary object. + Q_ASSERT(qobject_cast(sender()) == qnr); + qnr->disconnect(); + qnr->deleteLater(); + + QUrl url = qnr->request().url(); + + if (qnr->error() == QNetworkReply::NoError) { + const QByteArray &a=qnr->readAll(); + + QMap headers; + + foreach(const QNetworkReply::RawHeaderPair &pair, qnr->rawHeaderPairs()) { + QString name = fromUtf8(pair.first); + QString value = fromUtf8(pair.second); + if (! name.isEmpty() && ! value.isEmpty()) { + headers.insert(name, value); + if (name == QLatin1String("Geo-Country-Code")) + g.s.qsRegionalHost = value.toLower() + QLatin1String(".mumble.info"); + } + } + + emit fetched(a, url, headers); + deleteLater(); + } else if (url.host() == g.s.qsRegionalHost) { + url.setHost(QLatin1String("mumble.info")); + + qnr = Network::get(url); + connect(qnr, SIGNAL(finished()), this, SLOT(finished())); + } else if (url.host() == QLatin1String("mumble.info")) { + url.setHost(QLatin1String("panic.mumble.info")); + + qnr = Network::get(url); + connect(qnr, SIGNAL(finished()), this, SLOT(finished())); + } else { + emit fetched(QByteArray(), url, QMap()); + deleteLater(); + } +} + +/*! + * \brief Fetch URL from mumble servers. + * + * If fetching fails, the slot is invoked with a null QByteArray. + * \param url URL to fetch. Hostname and scheme must be blank. + * \param obj Object to invoke slot on. + * \param slot Slot to be triggered, invoked with the signature of \link fetched. + */ +void WebFetch::fetch(const QUrl &url, QObject *obj, const char *slot) { + Q_ASSERT(url.scheme().isEmpty()); + Q_ASSERT(url.host().isEmpty()); + Q_ASSERT(obj); + Q_ASSERT(slot); + + new WebFetch(url, obj, slot); +} diff -Nru mumble-1.2.3/src/mumble/WebFetch.h mumble-1.2.3-87-gf7d8711/src/mumble/WebFetch.h --- mumble-1.2.3/src/mumble/WebFetch.h 1970-01-01 00:00:00.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble/WebFetch.h 2011-04-02 22:20:48.000000000 +0000 @@ -0,0 +1,58 @@ +/* Copyright (C) 2005-2011, Thorvald Natvig + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + - Neither the name of the Mumble Developers nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _WEBFETCH_H +#define _WEBFETCH_H + +/*! + * \brief Utility class to fetch data from mumble servers. + * + * This prefers regional servers, followed + * by the global server, then finally the global backup server. + */ +class WebFetch : public QObject { + private: + Q_OBJECT + Q_DISABLE_COPY(WebFetch) + protected: + QObject *qoObject; + const char *cpSlot; + QNetworkReply *qnr; + + WebFetch(QUrl url, QObject *obj, const char *slot); + signals: + void fetched(QByteArray data, QUrl url, QMap headers); + protected slots: + void finished(); + public: + static void fetch(const QUrl &url, QObject *obj, const char *slot); +}; + +#endif diff -Nru mumble-1.2.3/src/mumble11x/About.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/About.cpp --- mumble-1.2.3/src/mumble11x/About.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/About.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "About.h" -#include "Global.h" -#include "MainWindow.h" -#include "licenses.h" - -AboutDialog::AboutDialog(QWidget *p) : QDialog(p) { - setWindowTitle(tr("About Mumble")); - - QTabWidget *qtwTab = new QTabWidget(this); - QVBoxLayout *vblMain = new QVBoxLayout(this); - - QTextEdit *qteLicense=new QTextEdit(qtwTab); - qteLicense->setReadOnly(true); - qteLicense->setPlainText(QLatin1String(licenseMumble)); - - QWidget *about=new QWidget(qtwTab); - - QLabel *icon=new QLabel(about); - icon->setPixmap(g.mw->qiIcon.pixmap(g.mw->qiIcon.actualSize(QSize(128,128)))); - - QLabel *text=new QLabel(about); - text->setOpenExternalLinks(true); - text->setText(tr( - "

Mumble (%1)

" - "

Copyright %3 Thorvald Natvig
slicer@users.sourceforge.net

" - "

A voice-chat utility for gamers

" - "

%2

" - ).arg(QLatin1String(MUMBLE_RELEASE)).arg(QLatin1String("http://mumble.sourceforge.net/")).arg(QLatin1String("2005-2008"))); - QHBoxLayout *qhbl=new QHBoxLayout(about); - qhbl->addWidget(icon); - qhbl->addWidget(text); - - qtwTab->addTab(about, tr("&About Mumble")); - qtwTab->addTab(qteLicense, tr("&License")); - - QPushButton *okButton = new QPushButton(tr("OK"), this); - connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); - - vblMain->addWidget(qtwTab); - vblMain->addWidget(okButton); -} - -AboutSpeexDialog::AboutSpeexDialog(QWidget *p) : QDialog(p) { - char *verptr; - speex_lib_ctl(SPEEX_LIB_GET_VERSION_STRING, &verptr); - - setWindowTitle(tr("About Speex")); - - QLabel *text=new QLabel(this); - text->setOpenExternalLinks(true); - text->setText(tr( - "

About Speex

" - "

%2

" - "

This program uses Speex version %1

" - "

Speex is used for echo cancellation, noise
" - "filtering, voice activity detection and speech
" - "compression.

" - ).arg(QLatin1String(verptr)).arg(QLatin1String("http://www.speex.org/"))); - - QPushButton *okButton = new QPushButton(tr("OK"), this); - connect(okButton, SIGNAL(clicked()), this, SLOT(accept())); - - QVBoxLayout *vblMain = new QVBoxLayout(this); - QHBoxLayout *qhbl=new QHBoxLayout(); - qhbl->addWidget(text); - - vblMain->addLayout(qhbl); - vblMain->addWidget(okButton); -} diff -Nru mumble-1.2.3/src/mumble11x/About.h mumble-1.2.3-87-gf7d8711/src/mumble11x/About.h --- mumble-1.2.3/src/mumble11x/About.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/About.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,52 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _ABOUT_H -#define _ABOUT_H - -#include "mumble_pch.hpp" - -class AboutDialog : public QDialog { - private: - Q_OBJECT - Q_DISABLE_COPY(AboutDialog) - public: - AboutDialog(QWidget *parent); -}; - -class AboutSpeexDialog : public QDialog { - private: - Q_OBJECT - Q_DISABLE_COPY(AboutSpeexDialog) - public: - AboutSpeexDialog(QWidget *parent); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/ACL.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ACL.cpp --- mumble-1.2.3/src/mumble11x/ACL.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ACL.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,141 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ACL.h" -#include "Channel.h" -#include "Group.h" -#include "Player.h" - -ChanACL::ChanACL(Channel *chan) { - bApplyHere = true; - bApplySubs = true; - - iPlayerId = -1; - - c = chan; - c->qlACL << this; -} - -QString ChanACL::shortName(Perm p) { - switch (p) { - case Write: - return tr("W"); - case Traverse: - return tr("T"); - case Enter: - return tr("E"); - case Speak: - return tr("S"); - case AltSpeak: - return tr("A"); - case MuteDeafen: - return tr("M"); - case MoveKick: - return tr("K"); - case MakeChannel: - return tr("C"); - case LinkChannel: - return tr("L"); - default: - break; - } - return QString(); -} - -QString ChanACL::permName(Perm p) { - switch (p) { - case None: - return tr("None"); - case Write: - return tr("Write ACL"); - case Traverse: - return tr("Traverse"); - case Enter: - return tr("Enter"); - case Speak: - return tr("Speak"); - case AltSpeak: - return tr("AltSpeak"); - case MuteDeafen: - return tr("Mute/Deafen"); - case MoveKick: - return tr("Move/Kick"); - case MakeChannel: - return tr("Make channel"); - case LinkChannel: - return tr("Link channel"); - default: - break; - } - return QString(); -} - -QString ChanACL::whatsThis(Perm p) { - switch (p) { - case None: - return tr("This represents no privileges."); - case Write: - return tr("This represents total access to the channel, including the ability to change group and ACL information. " - "This privilege implies all other privileges."); - case Traverse: - return tr("This represents the permission to traverse the channel. If a user is denied this privilege, he will be " - "unable to access this channel and any sub-channels in any way, regardless of other permissions in the " - "sub-channels."); - case Enter: - return tr("This represents the permission to join the channel. If you have a hierarchical channel structure, you " - "might want to give everyone Traverse, but restrict Enter in the root of your hierarchy."); - case Speak: - return tr("This represents the permission to speak in a channel. Users without this privilege will be suppressed by " - "the server (seen as muted), and will be unable to speak until they are unmuted by someone with the " - "appropriate privileges."); - case AltSpeak: - return tr("This represents the permission to speak in a channel with flagged speech. This works exactly like the speak " - "privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy " - "of channels without linking."); - case MuteDeafen: - return tr("This represents the permission to mute and deafen other players. Once muted, a player will stay muted " - "until he is unmuted by another privileged player or reconnects to the server."); - case MoveKick: - return tr("This represents the permission to move a player to another channel or kick him from the server. To actually " - "move the player, either the moving player must have Move/Kick privileges in the destination channel, or " - "the player must normally be allowed to enter the channel. Players with this privilege can move players " - "into channels the target player normally wouldn't have permission to enter."); - case MakeChannel: - return tr("This represents the permission to make sub-channels. The player making the sub-channel will be added to the " - "admin group of the sub-channel."); - case LinkChannel: - return tr("This represents the permission to link channels. Players in linked channels hear each other, as long as " - "the speaking player has the speak privilege in the channel of the listener. You need the link " - "privilege in both channels to create a link, but just in either channel to remove it."); - default: - break; - } - return QString(); -} diff -Nru mumble-1.2.3/src/mumble11x/ACLEditor.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ACLEditor.cpp --- mumble-1.2.3/src/mumble11x/ACLEditor.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ACLEditor.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,810 +0,0 @@ -/* copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ACLEditor.h" -#include "ACL.h" -#include "ServerHandler.h" -#include "Channel.h" -#include "Global.h" - -ACLEditor::ACLEditor(const MessageEditACL *mea, QWidget *p) : QDialog(p) { - QLabel *l; - MessageEditACL::ACLStruct as; - MessageEditACL::GroupStruct gs; - MessageEditACL::ACLStruct *asp; - MessageEditACL::GroupStruct *gsp; - - setupUi(this); - - iId = mea->iId; - setWindowTitle(tr("Mumble - Edit ACL for %1").arg(Channel::get(iId)->qsName)); - - QGridLayout *grid = new QGridLayout(qgbACLpermissions); - - l=new QLabel(tr("Deny"), qgbACLpermissions); - grid->addWidget(l,0,1); - l=new QLabel(tr("Allow"), qgbACLpermissions); - grid->addWidget(l,0,2); - - int perm=1; - int idx=1; - QString name; - while (!(name = ChanACL::permName(static_cast(perm))).isEmpty()) { - QCheckBox *qcb; - l = new QLabel(name, qgbACLpermissions); - grid->addWidget(l,idx,0); - qcb=new QCheckBox(qgbACLpermissions); - connect(qcb, SIGNAL(clicked(bool)), this, SLOT(ACLPermissions_clicked())); - grid->addWidget(qcb,idx,1); - qlACLDeny << qcb; - qcb=new QCheckBox(qgbACLpermissions); - connect(qcb, SIGNAL(clicked(bool)), this, SLOT(ACLPermissions_clicked())); - grid->addWidget(qcb,idx,2); - qlACLAllow << qcb; - - idx++; - perm = perm * 2; - } - - MessageEditACL::ACLStruct *def = new MessageEditACL::ACLStruct(); - def->bApplyHere = true; - def->bApplySubs = true; - def->bInherited = true; - def->iPlayerId = -1; - def->qsGroup = QLatin1String("all"); - def->pAllow = ChanACL::Traverse | ChanACL::Enter | ChanACL::Speak | ChanACL::AltSpeak; - def->pDeny = 0; - - acls << def; - - foreach(as, mea->acls) { - asp = new MessageEditACL::ACLStruct(as); - acls << asp; - } - foreach(gs, mea->groups) { - gsp = new MessageEditACL::GroupStruct(gs); - groups << gsp; - } - - numInheritACL = -1; - - bInheritACL = mea->bInheritACL; - qcbACLInherit->setChecked(bInheritACL); - - foreach(asp, acls) { - if (asp->bInherited) - numInheritACL++; - if (asp->iPlayerId != -1) - addQuery(ACLList, asp->iPlayerId); - } - foreach(gsp, groups) { - int id; - foreach(id, gsp->qsAdd) - addQuery(GroupAdd, id); - foreach(id, gsp->qsRemove) - addQuery(GroupRemove, id); - foreach(id, gsp->qsInheritedMembers) - addQuery(GroupInherit, id); - } - - refill(GroupAdd); - refill(GroupRemove); - refill(GroupInherit); - refill(ACLList); - - doneQuery(); - - refillGroupNames(); - - ACLEnableCheck(); - groupEnableCheck(); - - addToolTipsWhatsThis(); -} - -ACLEditor::~ACLEditor() { - MessageEditACL::ACLStruct *asp; - MessageEditACL::GroupStruct *gsp; - - foreach(asp, acls) { - delete asp; - } - foreach(gsp, groups) { - delete gsp; - } -} - -void ACLEditor::showEvent(QShowEvent *evt) { - ACLEnableCheck(); - QDialog::showEvent(evt); -} - -void ACLEditor::addToolTipsWhatsThis() { - int idx; - int p = 0x1; - for (idx=0;idx(p); - QString perm = ChanACL::permName(prm); - qlACLAllow[idx]->setToolTip(tr("Allow %1").arg(perm)); - qlACLDeny[idx]->setToolTip(tr("Deny %1").arg(perm)); - qlACLAllow[idx]->setWhatsThis(tr("This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.
%2").arg(perm).arg(ChanACL::whatsThis(prm))); - qlACLDeny[idx]->setWhatsThis(tr("This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.
%2").arg(perm).arg(ChanACL::whatsThis(prm))); - p = p * 2; - } -} - - -void ACLEditor::accept() { - MessageEditACL::ACLStruct as; - MessageEditACL::GroupStruct gs; - MessageEditACL::ACLStruct *asp; - MessageEditACL::GroupStruct *gsp; - MessageEditACL mea; - - mea.iId = iId; - mea.bQuery = false; - mea.bInheritACL = bInheritACL; - - foreach(asp, acls) { - as = *asp; - if (as.bInherited) - continue; - mea.acls << as; - } - - foreach(gsp, groups) { - gs = *gsp; - if (gs.bInherited && gs.bInherit && gs.bInheritable && (gs.qsAdd.count() == 0) && (gs.qsRemove.count() == 0)) - continue; - gs.qsInheritedMembers.clear(); - mea.groups << gs; - } - - g.sh->sendMessage(&mea); - QDialog::accept(); -} - -void ACLEditor::addQuery(WaitID me, int id) { - qhIDWait[id].insert(me); -} - -void ACLEditor::addQuery(WaitID me, QString name) { - qhNameWait[name].insert(me); -} - -void ACLEditor::doneQuery() { - MessageQueryUsers mqu; - - cleanQuery(); - - foreach(int id, qhIDWait.keys()) { - mqu.qlIds << id; - mqu.qlNames << QString(); - } - foreach(QString name, qhNameWait.keys()) { - mqu.qlIds << -1; - mqu.qlNames << name; - } - if (mqu.qlIds.count() > 0) - g.sh->sendMessage(&mqu); -} - -void ACLEditor::cleanQuery() { - QSet notify; - - foreach(int id, qhIDWait.keys()) { - if (qhNameCache.contains(id)) { - notify = notify.unite(qhIDWait.value(id)); - qhIDWait.remove(id); - } - } - foreach(QString name, qhNameWait.keys()) { - if (qhIDCache.contains(name)) { - notify = notify.unite(qhNameWait.value(name)); - qhNameWait.remove(name); - } - } - foreach(WaitID wid, notify) { - refill(wid); - } -} - -void ACLEditor::returnQuery(const MessageQueryUsers *mqu) { - int i; - for (i=0;iqlIds.count();i++) { - int id = mqu->qlIds[i]; - QString name = mqu->qlNames[i]; - qhIDCache[name] = id; - qhNameCache[id] = name; - } - cleanQuery(); -} - -void ACLEditor::refill(WaitID wid) { - switch (wid) { - case ACLList: - refillACL(); - break; - case GroupInherit: - refillGroupInherit(); - break; - case GroupRemove: - refillGroupRemove(); - break; - case GroupAdd: - refillGroupAdd(); - break; - } -} - -QString ACLEditor::userName(int id) { - if (qhNameCache.contains(id)) - return qhNameCache.value(id); - else - return QString::fromLatin1("#%1").arg(id); -} - -void ACLEditor::refillACL() { - MessageEditACL::ACLStruct *as; - - foreach(as, qhACLNameWait.keys()) { - if (acls.indexOf(as) >= 0) { - QString name = qhACLNameWait.value(as); - if (qhIDCache.contains(name)) { - int id = qhIDCache.value(name); - if (id != -1) { - as->iPlayerId = id; - as->qsGroup = QString(); - } - qhACLNameWait.remove(as); - } - } - } - - int idx = qlwACLs->currentRow(); - bool previnh = bInheritACL; - bInheritACL = qcbACLInherit->isChecked(); - - qlwACLs->clear(); - - bool first = true; - - foreach(as, acls) { - if (first) - first = false; - else if (! bInheritACL && as->bInherited) - continue; - QString text; - if (as->iPlayerId == -1) - text=QString::fromLatin1("@%1").arg(as->qsGroup); - else - text=userName(as->iPlayerId); - QListWidgetItem *item=new QListWidgetItem(text, qlwACLs); - if (as->bInherited) { - QFont f = item->font(); - f.setItalic(true); - item->setFont(f); - } - } - if (bInheritACL && ! previnh && (idx != 0)) - idx += numInheritACL; - if (! bInheritACL && previnh) - idx -= numInheritACL; - - qlwACLs->setCurrentRow(idx); -} - -void ACLEditor::refillGroupNames() { - MessageEditACL::GroupStruct *gsp; - - QString text = qcbGroupList->currentText().toLower(); - QStringList qsl; - - foreach(gsp, groups) { - qsl << gsp->qsName; - } - qsl.sort(); - - qcbGroupList->clear(); - - foreach(QString name, qsl) { - qcbGroupList->addItem(name); - } - - int wantindex = qcbGroupList->findText(text, Qt::MatchExactly); - qcbGroupList->setCurrentIndex(wantindex); -} - -MessageEditACL::GroupStruct *ACLEditor::currentGroup() { - QString group = qcbGroupList->currentText().toLower(); - MessageEditACL::GroupStruct *gs; - - foreach(gs, groups) { - if (gs->qsName == group) { - return gs; - } - } - - return NULL; -} - -MessageEditACL::ACLStruct *ACLEditor::currentACL() { - int idx = qlwACLs->currentRow(); - if (idx < 0) - return NULL; - - if (! bInheritACL) - idx += numInheritACL; - return acls[idx]; -} - -void ACLEditor::refillGroupAdd() { - MessageEditACL::GroupStruct *gs; - - foreach(gs, qhAddNameWait.keys()) { - if (groups.indexOf(gs) >= 0) { - QString name = qhAddNameWait.value(gs); - if (qhIDCache.contains(name)) { - int id = qhIDCache.value(name); - if (id != -1) { - gs->qsAdd.insert(id); - } - qhAddNameWait.remove(gs); - } - } - } - - gs = currentGroup(); - - if (! gs) - return; - - - QStringList qsl; - foreach(int id, gs->qsAdd) { - qsl << userName(id); - } - qsl.sort(); - qlwGroupAdd->clear(); - foreach(QString name, qsl) { - qlwGroupAdd->addItem(name); - } -} - -void ACLEditor::refillGroupRemove() { - MessageEditACL::GroupStruct *gs; - - foreach(gs, qhRemoveNameWait.keys()) { - if (groups.indexOf(gs) >= 0) { - QString name = qhRemoveNameWait.value(gs); - if (qhIDCache.contains(name)) { - int id = qhIDCache.value(name); - if (id != -1) { - gs->qsRemove.insert(id); - } - qhRemoveNameWait.remove(gs); - } - } - } - - gs = currentGroup(); - if (! gs) - return; - - QStringList qsl; - foreach(int id, gs->qsRemove) { - qsl << userName(id); - } - qsl.sort(); - qlwGroupRemove->clear(); - foreach(QString name, qsl) { - qlwGroupRemove->addItem(name); - } -} - -void ACLEditor::refillGroupInherit() { - MessageEditACL::GroupStruct *gs = currentGroup(); - - if (! gs) - return; - - QStringList qsl; - foreach(int id, gs->qsInheritedMembers) { - qsl << userName(id); - } - qsl.sort(); - qlwGroupInherit->clear(); - foreach(QString name, qsl) { - qlwGroupInherit->addItem(name); - } -} - -void ACLEditor::groupEnableCheck() { - MessageEditACL::GroupStruct *gs = currentGroup(); - - bool ena = true; - - if (! gs) - ena = false; - else - ena = gs->bInherit; - - qlwGroupRemove->setEnabled(ena); - qlwGroupInherit->setEnabled(ena); - qleGroupRemove->setEnabled(ena); - qpbGroupRemoveAdd->setEnabled(ena); - qpbGroupRemoveRemove->setEnabled(ena); - qpbGroupInheritRemove->setEnabled(ena); - - ena = (gs != NULL); - qlwGroupAdd->setEnabled(ena); - qpbGroupAddAdd->setEnabled(ena); - qpbGroupAddRemove->setEnabled(ena); - qcbGroupInherit->setEnabled(ena); - qcbGroupInheritable->setEnabled(ena); - - if (gs) { - qcbGroupInherit->setChecked(gs->bInherit); - qcbGroupInheritable->setChecked(gs->bInheritable); - qcbGroupInherited->setChecked(gs->bInherited); - } -} - -void ACLEditor::ACLEnableCheck() { - MessageEditACL::ACLStruct *as = currentACL(); - MessageEditACL::GroupStruct *gs;; - - bool ena = true; - if (! as) - ena = false; - else - ena = ! as->bInherited; - - qpbACLRemove->setEnabled(ena); - qpbACLUp->setEnabled(ena); - qpbACLDown->setEnabled(ena); - qcbACLApplyHere->setEnabled(ena); - qcbACLApplySubs->setEnabled(ena); - qcbACLGroup->setEnabled(ena); - qleACLUser->setEnabled(ena); - - int idx; - for (idx=0;idxsetEnabled(ena); - qlACLDeny[idx]->setEnabled(ena); - } - - if (as) { - qcbACLApplyHere->setChecked(as->bApplyHere); - qcbACLApplySubs->setChecked(as->bApplySubs); - int p = 0x1; - for (idx=0;idxsetChecked(static_cast(as->pAllow) & p); - qlACLDeny[idx]->setChecked(static_cast(as->pDeny) & p); - p = p * 2; - } - qcbACLGroup->clear(); - qcbACLGroup->addItem(QString()); - qcbACLGroup->addItem(QLatin1String("all")); - qcbACLGroup->addItem(QLatin1String("auth")); - qcbACLGroup->addItem(QLatin1String("in")); - qcbACLGroup->addItem(QLatin1String("sub")); - qcbACLGroup->addItem(QLatin1String("out")); - qcbACLGroup->addItem(QLatin1String("~in")); - qcbACLGroup->addItem(QLatin1String("~sub")); - qcbACLGroup->addItem(QLatin1String("~out")); - foreach(gs, groups) - qcbACLGroup->addItem(gs->qsName); - if (as->iPlayerId == -1) { - qleACLUser->setText(QString()); - qcbACLGroup->addItem(as->qsGroup); - qcbACLGroup->setCurrentIndex(qcbACLGroup->findText(as->qsGroup, Qt::MatchExactly)); - } else { - qleACLUser->setText(userName(as->iPlayerId)); - } - } - foreach(QAbstractButton *b, qdbbButtons->buttons()) { - QPushButton *qpb = qobject_cast(b); - if (qpb) { - qpb->setAutoDefault(false); - qpb->setDefault(false); - } - } -} - -void ACLEditor::on_qlwACLs_currentRowChanged() { - ACLEnableCheck(); -} - -void ACLEditor::on_qpbACLAdd_clicked() { - MessageEditACL::ACLStruct *as = new MessageEditACL::ACLStruct; - as->bApplyHere = true; - as->bApplySubs = true; - as->bInherited = false; - as->qsGroup = QLatin1String("all"); - as->iPlayerId = -1; - as->pAllow = ChanACL::None; - as->pDeny = ChanACL::None; - acls << as; - refillACL(); - qlwACLs->setCurrentRow(qlwACLs->count() - 1); -} - -void ACLEditor::on_qpbACLRemove_clicked() { - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - acls.removeAll(as); - delete as; - refillACL(); -} - -void ACLEditor::on_qpbACLUp_clicked() { - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - int idx = acls.indexOf(as); - if (idx <= numInheritACL) - return; - acls.swap(idx - 1, idx); - qlwACLs->setCurrentRow(qlwACLs->currentRow() - 1); - refillACL(); -} - -void ACLEditor::on_qpbACLDown_clicked() { - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - int idx = acls.indexOf(as) + 1; - if (idx >= acls.count()) - return; - acls.swap(idx - 1, idx); - qlwACLs->setCurrentRow(qlwACLs->currentRow() + 1); - refillACL(); -} - -void ACLEditor::on_qcbACLInherit_clicked(bool) { - refillACL(); -} - -void ACLEditor::on_qcbACLApplyHere_clicked(bool checked) { - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - as->bApplyHere = checked; -} - -void ACLEditor::on_qcbACLApplySubs_clicked(bool checked) { - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - as->bApplySubs = checked; -} - -void ACLEditor::on_qcbACLGroup_activated(const QString &text) { - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - as->iPlayerId = -1; - - if (text.isEmpty()) { - qcbACLGroup->setCurrentIndex(1); - as->qsGroup=QLatin1String("all"); - } else { - qleACLUser->setText(QString()); - as->qsGroup=text; - } - refillACL(); -} - -void ACLEditor::on_qleACLUser_editingFinished() { - QString text = qleACLUser->text(); - - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - if (text.isEmpty()) { - as->iPlayerId = -1; - if (qcbACLGroup->currentIndex() == 0) { - qcbACLGroup->setCurrentIndex(1); - as->qsGroup=QLatin1String("all"); - } - refillACL(); - } else { - qcbACLGroup->setCurrentIndex(0); - qhACLNameWait[as] = text; - addQuery(ACLList, text); - doneQuery(); - } -} - -void ACLEditor::ACLPermissions_clicked() { - QCheckBox *source = qobject_cast(sender()); - - MessageEditACL::ACLStruct *as = currentACL(); - if (! as || as->bInherited) - return; - - int a, d, p, idx; - a = 0; - d = 0; - - p = 0x1; - for (idx=0;idxisChecked() && qlACLDeny[idx]->isChecked()) { - if (source == qlACLAllow[idx]) - qlACLDeny[idx]->setChecked(false); - else - qlACLAllow[idx]->setChecked(false); - } - if (qlACLAllow[idx]->isChecked()) - a |= p; - if (qlACLDeny[idx]->isChecked()) - d |= p; - p = p * 2; - } - - as->pAllow=static_cast(a); - as->pDeny=static_cast(d); -} - -void ACLEditor::on_qcbGroupList_activated(const QString &text) { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (text.isEmpty()) - return; - if (! gs) { - QString name = text.toLower(); - gs = new MessageEditACL::GroupStruct; - gs->bInherited = false; - gs->bInherit = true; - gs->bInheritable = true; - gs->qsName = name; - groups << gs; - } - - refillGroupNames(); - refillGroupAdd(); - refillGroupRemove(); - refillGroupInherit(); - groupEnableCheck(); -} - -void ACLEditor::on_qpbGroupRemove_clicked() { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - if (gs->bInherited) { - gs->bInheritable = true; - gs->bInherit = true; - gs->qsAdd.clear(); - gs->qsRemove.clear(); - } else { - groups.removeAll(gs); - delete gs; - } - refillGroupNames(); - refillGroupAdd(); - refillGroupRemove(); - refillGroupInherit(); - groupEnableCheck(); -} - -void ACLEditor::on_qcbGroupInherit_clicked(bool checked) { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - gs->bInherit = checked; - groupEnableCheck(); -} - -void ACLEditor::on_qcbGroupInheritable_clicked(bool checked) { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - gs->bInheritable = checked; -} - -void ACLEditor::on_qpbGroupAddAdd_clicked() { - QString text = qleGroupAdd->text(); - - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - - if (text.isEmpty()) - return; - - qhAddNameWait[gs] = text; - addQuery(GroupAdd, text); - doneQuery(); -} - -void ACLEditor::on_qpbGroupAddRemove_clicked() { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - - QListWidgetItem *item= qlwGroupAdd->currentItem(); - if (! item) - return; - - int id = qhIDCache.value(item->text()); - gs->qsAdd.remove(id); - refillGroupAdd(); -} - -void ACLEditor::on_qpbGroupRemoveAdd_clicked() { - QString text = qleGroupRemove->text(); - - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - - if (text.isEmpty()) - return; - - qhRemoveNameWait[gs] = text; - addQuery(GroupRemove, text); - doneQuery(); -} - -void ACLEditor::on_qpbGroupRemoveRemove_clicked() { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - - QListWidgetItem *item= qlwGroupRemove->currentItem(); - if (! item) - return; - - int id = qhIDCache.value(item->text()); - gs->qsRemove.remove(id); - refillGroupRemove(); -} - -void ACLEditor::on_qpbGroupInheritRemove_clicked() { - MessageEditACL::GroupStruct *gs = currentGroup(); - if (! gs) - return; - - QListWidgetItem *item= qlwGroupInherit->currentItem(); - if (! item) - return; - - int id = qhIDCache.value(item->text()); - gs->qsRemove.insert(id); - refillGroupRemove(); -} diff -Nru mumble-1.2.3/src/mumble11x/ACLEditor.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ACLEditor.h --- mumble-1.2.3/src/mumble11x/ACLEditor.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ACLEditor.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _ACLEDITOR_H -#define _ACLEDITOR_H - -#include "mumble_pch.hpp" -#include "Message.h" - -#include "ui_ACLEditor.h" - -class ACLEditor : public QDialog, public Ui::ACLEditor { - private: - Q_OBJECT - Q_DISABLE_COPY(ACLEditor) - protected: - enum WaitID { - GroupAdd, GroupRemove, GroupInherit, ACLList - }; - int iId; - QHash qhNameCache; - QHash qhIDCache; - - QHash > qhIDWait; - QHash > qhNameWait; - - void addQuery(WaitID me, int id); - void addQuery(WaitID me, QString name); - void doneQuery(); - void cleanQuery(); - void refill(WaitID what); - - QHash qhACLNameWait; - QHash qhAddNameWait; - QHash qhRemoveNameWait; - - MessageEditACL::GroupStruct *currentGroup(); - MessageEditACL::ACLStruct *currentACL(); - - bool bInheritACL; - QList acls; - QList groups; - int numInheritACL; - - QString userName(int id); - - QList qlACLAllow; - QList qlACLDeny; - - void addToolTipsWhatsThis(); - - void showEvent(QShowEvent *); - public: - ACLEditor(const MessageEditACL *mea, QWidget *p = NULL); - ~ACLEditor(); - void returnQuery(const MessageQueryUsers *mqu); - public slots: - void accept(); - public slots: - void refillACL(); - void refillGroupNames(); - void refillGroupAdd(); - void refillGroupRemove(); - void refillGroupInherit(); - void groupEnableCheck(); - void ACLEnableCheck(); - - void on_qlwACLs_currentRowChanged(); - void on_qpbACLAdd_clicked(); - void on_qpbACLRemove_clicked(); - void on_qpbACLUp_clicked(); - void on_qpbACLDown_clicked(); - void on_qcbACLInherit_clicked(bool checked); - void on_qcbACLApplyHere_clicked(bool checked); - void on_qcbACLApplySubs_clicked(bool checked); - void on_qcbACLGroup_activated(const QString &text); - void on_qleACLUser_editingFinished(); - void ACLPermissions_clicked(); - - void on_qcbGroupList_activated(const QString &text); - void on_qpbGroupRemove_clicked(); - void on_qcbGroupInherit_clicked(bool checked); - void on_qcbGroupInheritable_clicked(bool checked); - void on_qpbGroupAddAdd_clicked(); - void on_qpbGroupAddRemove_clicked(); - void on_qpbGroupRemoveAdd_clicked(); - void on_qpbGroupRemoveRemove_clicked(); - void on_qpbGroupInheritRemove_clicked(); -}; - -#else -class ACLEditor; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ACLEditor.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/ACLEditor.ui --- mumble-1.2.3/src/mumble11x/ACLEditor.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ACLEditor.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,505 +0,0 @@ - - ACLEditor - - - - 0 - 0 - 607 - 509 - - - - Dialog - - - - - - 1 - - - - &Groups - - - - - - Group - - - - - - List of groups - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - - - true - - - - - - - Remove selected group - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - - - Remove - - - false - - - - - - - Inherit group members from parent - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - - - Inherit - - - - - - - Make group inheritable to sub-channels - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - - - Inheritable - - - - - - - false - - - Group was inherited from parent channel - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - - - Inherited - - - - - - - - - - Members - - - - - - Add - - - qlwGroupAdd - - - - - - - Remove - - - qlwGroupRemove - - - - - - - Inherit - - - qlwGroupInherit - - - - - - - - - - - - - - - - Add to Remove - - - - - - - Remove - - - - - - - Remove - - - - - - - Add member to group - - - Type in the name of a player you wish to add to the group and click Add. - - - - - - - Remove member from group - - - Type in the name of a player you wish to remove from the group and click Add. - - - - - - - Add - - - - - - - Add - - - - - - - - - - - &ACL - - - - - - Active ACLs - - - - - - List of entries - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - - - - - - - Inherit ACL of parent? - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - - - Inherit ACLs - - - - - - - Move entry up - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - - - &Up - - - false - - - - - - - Move entry down - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - - - &Down - - - false - - - - - - - Add new entry - - - This adds a new entry, initially set with no permissions and applying to all. - - - &Add - - - false - - - - - - - Remove entry - - - This removes the currently selected entry. - - - &Remove - - - false - - - - - - - - - - Context - - - - - - Entry should apply to this channel. - - - This makes the entry apply to this channel. - - - Applies to this channel - - - - - - - Entry should apply to sub-channels. - - - This makes the entry apply to sub-channels of this channel. - - - Applies to sub-channels - - - - - - - - - - Permissions - - - - - - - User/Group - - - - - - Group - - - qcbACLGroup - - - - - - - Group this entry applies to - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - - - true - - - - - - - User ID - - - qleACLUser - - - - - - - User this entry applies to - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok - - - - - - - - - qdbbButtons - accepted() - ACLEditor - accept() - - - 227 - 583 - - - 157 - 274 - - - - - qdbbButtons - rejected() - ACLEditor - reject() - - - 295 - 589 - - - 286 - 274 - - - - - qleGroupAdd - returnPressed() - qpbGroupAddAdd - animateClick() - - - 82 - 494 - - - 176 - 493 - - - - - qleGroupRemove - returnPressed() - qpbGroupRemoveAdd - animateClick() - - - 268 - 494 - - - 365 - 495 - - - - - qlwGroupInherit - doubleClicked(QModelIndex) - qpbGroupInheritRemove - animateClick() - - - 476 - 316 - - - 481 - 525 - - - - - diff -Nru mumble-1.2.3/src/mumble11x/ACL.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ACL.h --- mumble-1.2.3/src/mumble11x/ACL.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ACL.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _ACL_H -#define _ACL_H - -#include "murmur_pch.h" - -class Channel; -class Player; - -class ChanACL : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(ChanACL); - public: - enum Perm { - None = 0x0, - Write = 0x1, - Traverse = 0x2, - Enter = 0x4, - Speak = 0x8, - MuteDeafen = 0x10, - MoveKick = 0x20, - MakeChannel = 0x40, - LinkChannel = 0x80, - AltSpeak = 0x100, - Cached = 0x8000000, - All = 0xffff - }; - - Q_DECLARE_FLAGS(Permissions, Perm) - - typedef QHash ChanCache; - typedef QHash ACLCache; - - Channel *c; - bool bApplyHere; - bool bApplySubs; - - int iPlayerId; - QString qsGroup; - Permissions pAllow; - Permissions pDeny; - - ChanACL(Channel *c); - static QString shortName(Perm p); - static QString permName(Perm p); - static QString whatsThis(Perm p); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(ChanACL::Permissions) - -#else -class ChanACL; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ALSAAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ALSAAudio.cpp --- mumble-1.2.3/src/mumble11x/ALSAAudio.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ALSAAudio.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,581 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ALSAAudio.h" -#include "User.h" -#include "Global.h" -#include "MainWindow.h" -#include - -#define NBLOCKS 8 - -class ALSAEnumerator { - public: - QHash qhInput; - QHash qhOutput; - static QString getHint(void *hint, const char *id); - ALSAEnumerator(); -}; - -static ALSAEnumerator *cards = NULL; - -class ALSAAudioInputRegistrar : public AudioInputRegistrar { - public: - ALSAAudioInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; -}; - - -class ALSAAudioOutputRegistrar : public AudioOutputRegistrar { - public: - ALSAAudioOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); -}; - -class ALSAInit : public DeferInit { - protected: - ALSAAudioInputRegistrar *pairALSA; - ALSAAudioOutputRegistrar *paorALSA; - public: - void initialize(); - void destroy(); -}; - -static ALSAInit aiInit; -QMutex qmALSA; - -void ALSAInit::initialize() { - pairALSA = NULL; - paorALSA = NULL; - cards = NULL; - - int card = -1; - snd_card_next(&card); - if (card != -1) { - pairALSA = new ALSAAudioInputRegistrar(); - paorALSA = new ALSAAudioOutputRegistrar(); - cards = new ALSAEnumerator(); - } else { - qWarning("ALSAInit: No cards found, not initializing"); - } -} - -void ALSAInit::destroy() { - QMutexLocker qml(&qmALSA); - delete pairALSA; - delete paorALSA; - delete cards; -} - -ALSAAudioInputRegistrar::ALSAAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("ALSA"),5) { -} - -AudioInput *ALSAAudioInputRegistrar::create() { - return new ALSAAudioInput(); -} - -const QList ALSAAudioInputRegistrar::getDeviceChoices() { - QList qlReturn; - - QStringList qlInputDevs = cards->qhInput.keys(); - qSort(qlInputDevs); - - if (qlInputDevs.contains(g.s.qsALSAInput)) { - qlInputDevs.removeAll(g.s.qsALSAInput); - qlInputDevs.prepend(g.s.qsALSAInput); - } - - foreach(const QString &dev, qlInputDevs) { - QString t=QString::fromLatin1("[%1] %2").arg(dev, cards->qhInput.value(dev)); - qlReturn << audioDevice(t, dev); - } - - return qlReturn; -} - -void ALSAAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsALSAInput = choice.toString(); -} - -bool ALSAAudioInputRegistrar::canEcho(const QString &) const { - return false; -} - -ALSAAudioOutputRegistrar::ALSAAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("ALSA"), 5) { -} - -AudioOutput *ALSAAudioOutputRegistrar::create() { - return new ALSAAudioOutput(); -} - -const QList ALSAAudioOutputRegistrar::getDeviceChoices() { - QList qlReturn; - - QStringList qlOutputDevs = cards->qhOutput.keys(); - qSort(qlOutputDevs); - - if (qlOutputDevs.contains(g.s.qsALSAOutput)) { - qlOutputDevs.removeAll(g.s.qsALSAOutput); - qlOutputDevs.prepend(g.s.qsALSAOutput); - } - - foreach(const QString &dev, qlOutputDevs) { - QString t=QString::fromLatin1("[%1] %2").arg(dev, cards->qhOutput.value(dev)); - qlReturn << audioDevice(t, dev); - } - - return qlReturn; -} - -void ALSAAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsALSAOutput = choice.toString(); -} - -ALSAEnumerator::ALSAEnumerator() { - QMutexLocker qml(&qmALSA); - - qhInput.insert(QLatin1String("default"), ALSAAudioInput::tr("Default ALSA Card")); - qhOutput.insert(QLatin1String("default"), ALSAAudioOutput::tr("Default ALSA Card")); - -#if SND_LIB_VERSION >= 0x01000e - void **hints = NULL; - void **hint; - snd_config_t *basic = NULL; - int r; - - snd_config_update(); - r = snd_config_search(snd_config, "defaults.namehint.extended", &basic); - if ((r==0) && basic) { - if (snd_config_set_ascii(basic, "on")) - qWarning("ALSAEnumerator: Failed to set namehint"); - } else { - qWarning("ALSAEnumerator: Namehint not found"); - } - - r = snd_device_name_hint(-1, "pcm", &hints); - - if (r || ! hints) { - qWarning("ALSAEnumerator: snd_device_name_hint: %d", r); - } else { - hint = hints; - while (*hint) { - const QString name = getHint(*hint, "NAME"); - const QString ioid = getHint(*hint, "IOID"); - QString desc = getHint(*hint, "DESC"); - - desc.replace(QLatin1Char('\n'), QLatin1Char(' ')); - - - // ALSA, in it's infinite wisdom, claims "dmix" is an input/output device. - // Since there seems to be no way to fetch the ctl interface for a matching device string - // without actually opening it, we'll simply have to start guessing. - - bool caninput = (ioid.isNull() || (ioid.compare(QLatin1String("Input"), Qt::CaseInsensitive)==0)); - bool canoutput = (ioid.isNull() || (ioid.compare(QLatin1String("Output"), Qt::CaseInsensitive)==0)); - - if (name.startsWith(QLatin1String("dmix:"))) - caninput = false; - else if (name.startsWith(QLatin1String("dsnoop:"))) - canoutput = false; - - if (caninput) - qhInput.insert(name, desc); - if (canoutput) - qhOutput.insert(name, desc); - - ++hint; - } - snd_device_name_free_hint(hints); - } - - snd_config_update_free_global(); - snd_config_update(); -#else - int card=-1; - snd_card_next(&card); - while (card != -1) { - char *name; - snd_ctl_t *ctl=NULL; - snd_card_get_longname(card, &name); - QByteArray dev=QString::fromLatin1("hw:%1").arg(card).toUtf8(); - if (snd_ctl_open(&ctl, dev.data(), SND_CTL_READONLY) >= 0) { - snd_pcm_info_t *info = NULL; - snd_pcm_info_malloc(&info); - - char *cname = NULL; - snd_card_get_name(card, &cname); - - int device = -1; - snd_ctl_pcm_next_device(ctl, &device); - - bool play = false; - bool cap = false; - - while (device != -1) { - QString devname=QString::fromLatin1("hw:%1,%2").arg(card).arg(device); - snd_pcm_info_set_device(info, device); - snd_pcm_info_set_stream(info, SND_PCM_STREAM_CAPTURE); - if (snd_ctl_pcm_info(ctl,info) == 0) { - QString fname=QString::fromLatin1(snd_pcm_info_get_name(info)); - qhInput.insert(devname,fname); - cap = true; - } - - snd_pcm_info_set_stream(info, SND_PCM_STREAM_PLAYBACK); - if (snd_ctl_pcm_info(ctl,info) == 0) { - QString fname=QString::fromLatin1(snd_pcm_info_get_name(info)); - qhOutput.insert(devname,fname); - play = true; - } - - snd_ctl_pcm_next_device(ctl, &device); - } - if (play) { - qhOutput.insert(QString::fromLatin1("dmix:CARD=%1").arg(card),QLatin1String(cname)); - } - if (cap) { - qhInput.insert(QString::fromLatin1("dsnoop:CARD=%1").arg(card),QLatin1String(cname)); - } - snd_pcm_info_free(info); - snd_ctl_close(ctl); - } - snd_card_next(&card); - } -#endif -} - -QString ALSAEnumerator::getHint(void *hint, const char *id) { - QString s; -#if SND_LIB_VERSION >= 0x01000e - char *value = snd_device_name_get_hint(hint, id); - if (value) { - s = QLatin1String(value); - free(value); - } -#endif - return s; -} - - -ALSAAudioInput::ALSAAudioInput() { - bRunning = true; -} - -ALSAAudioInput::~ALSAAudioInput() { - // Signal input thread to end - bRunning = false; - wait(); -} - -#define ALSA_ERRBAIL(x) if (!bOk) {} else if ((err=(x)) < 0) { bOk = false; qWarning("ALSAAudio: %s: %s", #x, snd_strerror(err));} -#define ALSA_ERRCHECK(x) if (!bOk) {} else if ((err=(x)) < 0) {qWarning("ALSAAudio: Non-critical: %s: %s", #x, snd_strerror(err));} - -void ALSAAudioInput::run() { - QMutexLocker qml(&qmALSA); - snd_pcm_sframes_t readblapp; - - QByteArray device_name = g.s.qsALSAInput.toLatin1(); - snd_pcm_hw_params_t *hw_params = NULL; - snd_pcm_t *capture_handle = NULL; - - unsigned int rrate = SAMPLE_RATE; - bool bOk = true; - - int err = 0; - - unsigned int iChannels = 1; - - qWarning("ALSAAudioInput: Initing audiocapture %s.",device_name.data()); - - snd_pcm_hw_params_alloca(&hw_params); - - ALSA_ERRBAIL(snd_pcm_open(&capture_handle, device_name.data(), SND_PCM_STREAM_CAPTURE, 0)); - ALSA_ERRCHECK(snd_pcm_hw_params_any(capture_handle, hw_params)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_access(capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_format(capture_handle, hw_params, SND_PCM_FORMAT_S16)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_rate_near(capture_handle, hw_params, &rrate, NULL)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_channels_near(capture_handle, hw_params, &iChannels)); - - snd_pcm_uframes_t wantPeriod = (rrate * iFrameSize) / SAMPLE_RATE; - snd_pcm_uframes_t wantBuff = wantPeriod * 8; - - ALSA_ERRBAIL(snd_pcm_hw_params_set_period_size_near(capture_handle, hw_params, &wantPeriod, NULL)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_buffer_size_near(capture_handle, hw_params, &wantBuff)); - ALSA_ERRBAIL(snd_pcm_hw_params(capture_handle, hw_params)); - - qWarning("ALSAAudioInput: Actual buffer %d hz, %d channel %ld samples [%ld per period]",rrate,iChannels,wantBuff,wantPeriod); - - ALSA_ERRBAIL(snd_pcm_hw_params_current(capture_handle, hw_params)); - ALSA_ERRBAIL(snd_pcm_hw_params_get_channels(hw_params, &iMicChannels)); - ALSA_ERRBAIL(snd_pcm_hw_params_get_rate(hw_params, &iMicFreq, NULL)); - -#ifdef ALSA_VERBOSE - snd_output_t *log; - snd_output_stdio_attach(&log, stderr,0); - if (capture_handle) - snd_pcm_dump(capture_handle, log); -#endif - - ALSA_ERRBAIL(snd_pcm_prepare(capture_handle)); - ALSA_ERRBAIL(snd_pcm_start(capture_handle)); - - if (! bOk) { - if (capture_handle) { - snd_pcm_drain(capture_handle); - snd_pcm_close(capture_handle); - capture_handle = NULL; - } - g.mw->msgBox(tr("Opening chosen ALSA Input failed: %1").arg(QLatin1String(snd_strerror(err)))); - return; - } - - eMicFormat = SampleShort; - initializeMixer(); - - char inbuff[wantPeriod * iChannels * sizeof(short)]; - - qml.unlock(); - - while (bRunning) { -#ifdef ALSA_VERBOSE - snd_pcm_status_malloc(&status); - snd_pcm_status(capture_handle, status); - snd_pcm_status_dump(status, log); - snd_pcm_status_free(status); -#endif - readblapp = snd_pcm_readi(capture_handle, inbuff, static_cast(wantPeriod)); - if (readblapp == -ESTRPIPE) { - // suspend event - what to do? - qWarning("ALSAAudioInput: %s", snd_strerror(static_cast(readblapp))); - } else if (readblapp == -EPIPE) { - err = snd_pcm_prepare(capture_handle); - qWarning("ALSAAudioInput: %s: %s", snd_strerror(static_cast(readblapp)), snd_strerror(err)); - } else if (readblapp < 0) { - err = snd_pcm_prepare(capture_handle); - qWarning("ALSAAudioInput: %s: %s", snd_strerror(static_cast(readblapp)), snd_strerror(err)); - } else if (wantPeriod == static_cast(readblapp)) { - addMic(inbuff, static_cast(readblapp)); - } - } - - snd_pcm_drain(capture_handle); - snd_pcm_close(capture_handle); - - qWarning("ALSAAudioInput: Releasing ALSA Mic."); -} - -ALSAAudioOutput::ALSAAudioOutput() { - qWarning("ALSAAudioOutput: Initialized"); - bRunning = true; -} - -ALSAAudioOutput::~ALSAAudioOutput() { - bRunning = false; - // Call destructor of all children - wipe(); - // Wait for terminate - wait(); - qWarning("ALSAAudioOutput: Destroyed"); -} - -void ALSAAudioOutput::run() { - QMutexLocker qml(&qmALSA); - snd_pcm_t *pcm_handle = NULL; - struct pollfd fds[16]; - int count; - bool stillRun = true; - int err = 0; - bool bOk = true; - - - snd_pcm_hw_params_t *hw_params = NULL; - snd_pcm_sw_params_t *sw_params = NULL; - QByteArray device_name = g.s.qsALSAOutput.toLatin1(); - - snd_pcm_hw_params_alloca(&hw_params); - snd_pcm_sw_params_alloca(&sw_params); - - ALSA_ERRBAIL(snd_pcm_open(&pcm_handle, device_name.data(), SND_PCM_STREAM_PLAYBACK, 0)); - ALSA_ERRCHECK(snd_pcm_hw_params_any(pcm_handle, hw_params)); - - if (g.s.doPositionalAudio()) { - iChannels = 1; - ALSA_ERRBAIL(snd_pcm_hw_params_get_channels_max(hw_params, &iChannels)); - if (iChannels > 9) { - qWarning("ALSAAudioOutput: ALSA reports %d output channels. Clamping to 2.",iChannels); - iChannels = 2; - } - } else { - iChannels = 1; - } - - ALSA_ERRBAIL(snd_pcm_hw_params_set_access(pcm_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_format(pcm_handle, hw_params, SND_PCM_FORMAT_S16)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_channels_near(pcm_handle, hw_params, &iChannels)); - unsigned int rrate = SAMPLE_RATE; - ALSA_ERRBAIL(snd_pcm_hw_params_set_rate_near(pcm_handle, hw_params, &rrate, NULL)); - - unsigned int iOutputSize = (iFrameSize * rrate) / SAMPLE_RATE; - - snd_pcm_uframes_t period_size = iOutputSize; - snd_pcm_uframes_t buffer_size = iOutputSize * (g.s.iOutputDelay + 1); - - int dir = 1; - ALSA_ERRBAIL(snd_pcm_hw_params_set_period_size_near(pcm_handle, hw_params, &period_size, &dir)); - ALSA_ERRBAIL(snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hw_params, &buffer_size)); - - ALSA_ERRBAIL(snd_pcm_hw_params(pcm_handle, hw_params)); - ALSA_ERRBAIL(snd_pcm_hw_params_current(pcm_handle, hw_params)); - ALSA_ERRBAIL(snd_pcm_hw_params_get_period_size(hw_params, &period_size, &dir)); - ALSA_ERRBAIL(snd_pcm_hw_params_get_buffer_size(hw_params, &buffer_size)); - - qWarning("ALSAAudioOutput: Actual buffer %d hz, %d channel %ld samples [%ld per period]",rrate,iChannels,buffer_size,period_size); - - ALSA_ERRBAIL(snd_pcm_sw_params_current(pcm_handle, sw_params)); - ALSA_ERRBAIL(snd_pcm_sw_params_set_avail_min(pcm_handle, sw_params, period_size)); - ALSA_ERRBAIL(snd_pcm_sw_params_set_start_threshold(pcm_handle, sw_params, buffer_size - period_size)); - ALSA_ERRBAIL(snd_pcm_sw_params_set_stop_threshold(pcm_handle, sw_params, buffer_size)); - ALSA_ERRBAIL(snd_pcm_sw_params(pcm_handle, sw_params)); - -#ifdef ALSA_VERBOSE - snd_output_t *log; - snd_output_stdio_attach(&log, stderr,0); - if (pcm_handle) - snd_pcm_dump(pcm_handle, log); -#endif - - ALSA_ERRBAIL(snd_pcm_prepare(pcm_handle)); - - const unsigned int buffsize = static_cast(period_size * iChannels); - - float zerobuff[buffsize]; - float outbuff[buffsize]; - - for (unsigned int i=0;imsgBox(tr("Opening chosen ALSA Output failed: %1").arg(QLatin1String(snd_strerror(err)))); - if (pcm_handle) { - snd_pcm_close(pcm_handle); - pcm_handle = NULL; - } - return; - } - - const unsigned int chanmasks[32] = { - SPEAKER_FRONT_LEFT, - SPEAKER_FRONT_RIGHT, - SPEAKER_BACK_LEFT, - SPEAKER_BACK_RIGHT, - SPEAKER_FRONT_CENTER, - SPEAKER_LOW_FREQUENCY, - SPEAKER_SIDE_LEFT, - SPEAKER_SIDE_RIGHT, - SPEAKER_BACK_CENTER - }; - - ALSA_ERRBAIL(snd_pcm_hw_params_current(pcm_handle, hw_params)); - ALSA_ERRBAIL(snd_pcm_hw_params_get_channels(hw_params, &iChannels)); - ALSA_ERRBAIL(snd_pcm_hw_params_get_rate(hw_params, &rrate, NULL)); - iMixerFreq = rrate; - eSampleFormat = SampleShort; - - qWarning("ALSAAudioOutput: Initializing %d channel, %d hz mixer", iChannels, iMixerFreq); - initializeMixer(chanmasks); - - count = snd_pcm_poll_descriptors_count(pcm_handle); - snd_pcm_poll_descriptors(pcm_handle, fds, count); - - qml.unlock(); - - while (bRunning && bOk) { - poll(fds, count, 20); - unsigned short revents; - - snd_pcm_poll_descriptors_revents(pcm_handle, fds, count, &revents); - if (revents & POLLERR) { - snd_pcm_prepare(pcm_handle); - } else if (revents & POLLOUT) { - snd_pcm_sframes_t avail; - ALSA_ERRCHECK(avail = snd_pcm_avail_update(pcm_handle)); - while (avail >= static_cast(period_size)) { - stillRun = mix(outbuff, static_cast(period_size)); - if (stillRun) { - snd_pcm_sframes_t w = 0; - ALSA_ERRCHECK(w=snd_pcm_writei(pcm_handle, outbuff, period_size)); - if (w < 0) { - avail = w; - break; - } - } else - break; - ALSA_ERRCHECK(avail = snd_pcm_avail_update(pcm_handle)); - } - - if (avail == -EPIPE) { - snd_pcm_drain(pcm_handle); - ALSA_ERRCHECK(snd_pcm_prepare(pcm_handle)); - for (unsigned int i=0;i< buffer_size / period_size;++i) - ALSA_ERRCHECK(snd_pcm_writei(pcm_handle, zerobuff, period_size)); - } - - if (! stillRun) { - snd_pcm_drain(pcm_handle); - - while (bRunning && !mix(outbuff, period_size)) { - this->msleep(10); - } - - if (! bRunning) - break; - - snd_pcm_prepare(pcm_handle); - - // Fill one frame - for (unsigned int i = 0; i < (buffer_size / period_size) - 1 ; i++) - snd_pcm_writei(pcm_handle, zerobuff, period_size); - - snd_pcm_writei(pcm_handle, outbuff, period_size); - } - } - } - snd_pcm_close(pcm_handle); -} diff -Nru mumble-1.2.3/src/mumble11x/ALSAAudio.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ALSAAudio.h --- mumble-1.2.3/src/mumble11x/ALSAAudio.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ALSAAudio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _ALSAAUDIO_H -#define _ALSAAUDIO_H - -#include "AudioInput.h" -#include "AudioOutput.h" -#include - -class ALSAAudioOutput; -class ALSAAudioInput; - -class ALSAAudioInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(ALSAAudioInput) - public: - ALSAAudioInput(); - ~ALSAAudioInput(); - void run(); -}; - -class ALSAAudioOutput : public AudioOutput { - private: - Q_OBJECT - Q_DISABLE_COPY(ALSAAudioOutput) - protected: - public: - ALSAAudioOutput(); - ~ALSAAudioOutput(); - void run(); -}; - -#else -class ALSAAudioInput; -class ALSAAudioOutput; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ASIOInput.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ASIOInput.cpp --- mumble-1.2.3/src/mumble11x/ASIOInput.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ASIOInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,648 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ASIOInput.h" -#include "MainWindow.h" -#include "Global.h" - -class ASIOAudioInputRegistrar : public AudioInputRegistrar { - public: - ASIOAudioInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; - -}; - -ASIOAudioInputRegistrar::ASIOAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("ASIO")) { -} - -AudioInput *ASIOAudioInputRegistrar::create() { - return new ASIOInput(); -} -const QList ASIOAudioInputRegistrar::getDeviceChoices() { - QList qlReturn; - return qlReturn; -} - -bool ASIOAudioInputRegistrar::canEcho(const QString &) const { - return true; -} - -void ASIOAudioInputRegistrar::setDeviceChoice(const QVariant &, Settings &) { -} - -static ConfigWidget *ASIOConfigDialogNew(Settings &st) { - return new ASIOConfig(st); -} - -class ASIOInit : public DeferInit { - ASIOAudioInputRegistrar *airASIO; - ConfigRegistrar *crASIO; - public: - void initialize(); - void destroy(); -}; - -void ASIOInit::initialize() { - HKEY hkDevs; - HKEY hk; - WCHAR keyname[255]; - DWORD keynamelen = 255; - FILETIME ft; - HRESULT hr; - - airASIO = NULL; - crASIO = NULL; - - bool bFound = false; - - // List of devices known to misbehave or be totally useless - QStringList blacklist; - blacklist << QLatin1String("{a91eaba1-cf4c-11d3-b96a-00a0c9c7b61a}"); // ASIO DirectX - blacklist << QLatin1String("{e3186861-3a74-11d1-aef8-0080ad153287}"); // ASIO Multimedia -#ifdef QT_NO_DEBUG - blacklist << QLatin1String("{232685c6-6548-49d8-846d-4141a3ef7560}"); // ASIO4ALL -#endif - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\ASIO", 0, KEY_READ, &hkDevs) == ERROR_SUCCESS) { - DWORD idx = 0; - while (RegEnumKeyEx(hkDevs, idx++, keyname, &keynamelen, NULL, NULL, NULL, &ft) == ERROR_SUCCESS) { - QString name=QString::fromUtf16(reinterpret_cast(keyname),keynamelen); - if (RegOpenKeyEx(hkDevs, keyname, 0, KEY_READ, &hk) == ERROR_SUCCESS) { - DWORD dtype = REG_SZ; - WCHAR wclsid[255]; - DWORD datasize = 255; - CLSID clsid; - if (RegQueryValueEx(hk, L"CLSID", 0, &dtype, reinterpret_cast(wclsid), &datasize) == ERROR_SUCCESS) { - if (datasize > 76) - datasize = 76; - QString qsCls = QString::fromUtf16(reinterpret_cast(wclsid), datasize / 2).toLower().trimmed(); - if (! blacklist.contains(qsCls.toLower()) && ! FAILED(hr =CLSIDFromString(wclsid, &clsid))) { - bFound = true; - } - } - RegCloseKey(hk); - } - keynamelen = 255; - } - RegCloseKey(hkDevs); - } - - if (bFound) { - airASIO = new ASIOAudioInputRegistrar(); - crASIO = new ConfigRegistrar(2002, ASIOConfigDialogNew); - } else { - qWarning("ASIO: No valid devices found, disabling"); - } -} - -void ASIOInit::destroy() { - delete airASIO; - delete crASIO; -} - -static class ASIOInit asioinit; - -ASIOInput *ASIOInput::aiSelf; - -ASIOConfig::ASIOConfig(Settings &st) : ConfigWidget(st) { - HKEY hkDevs; - HKEY hk; - DWORD idx = 0; - WCHAR keyname[255]; - DWORD keynamelen = 255; - FILETIME ft; - HRESULT hr; - - setupUi(this); - - // List of devices known to misbehave or be totally useless - QStringList blacklist; - blacklist << QLatin1String("{a91eaba1-cf4c-11d3-b96a-00a0c9c7b61a}"); // ASIO DirectX - blacklist << QLatin1String("{e3186861-3a74-11d1-aef8-0080ad153287}"); // ASIO Multimedia -#ifdef QT_NO_DEBUG - blacklist << QLatin1String("{232685c6-6548-49d8-846d-4141a3ef7560}"); // ASIO4ALL -#endif - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Software\\ASIO", 0, KEY_READ, &hkDevs) == ERROR_SUCCESS) { - while (RegEnumKeyEx(hkDevs, idx++, keyname, &keynamelen, NULL, NULL, NULL, &ft) == ERROR_SUCCESS) { - QString name=QString::fromUtf16(reinterpret_cast(keyname),keynamelen); - if (RegOpenKeyEx(hkDevs, keyname, 0, KEY_READ, &hk) == ERROR_SUCCESS) { - DWORD dtype = REG_SZ; - WCHAR wclsid[255]; - DWORD datasize = 255; - CLSID clsid; - if (RegQueryValueEx(hk, L"CLSID", 0, &dtype, reinterpret_cast(wclsid), &datasize) == ERROR_SUCCESS) { - if (datasize > 76) - datasize = 76; - QString qsCls = QString::fromUtf16(reinterpret_cast(wclsid), datasize / 2).toLower().trimmed(); - if (! blacklist.contains(qsCls) && ! FAILED(hr =CLSIDFromString(wclsid, &clsid))) { - ASIODev ad(name, qsCls); - qlDevs << ad; - } - } - RegCloseKey(hk); - } - keynamelen = 255; - } - RegCloseKey(hkDevs); - } - - bOk = false; - - ASIODev ad; - - foreach(ad, qlDevs) { - qcbDevice->addItem(ad.first, QVariant(ad.second)); - } - - if (qlDevs.count() == 0) { - qpbQuery->setEnabled(false); - qpbConfig->setEnabled(false); - } -} - -void ASIOConfig::on_qpbQuery_clicked() { - QString qsCls = qcbDevice->itemData(qcbDevice->currentIndex()).toString(); - CLSID clsid; - IASIO *iasio; - - clearQuery(); - - CLSIDFromString(const_cast(reinterpret_cast(qsCls.utf16())), &clsid); - if (CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, clsid, reinterpret_cast(&iasio)) == S_OK) { - SleepEx(10, false); - if (iasio->init(winId())) { - SleepEx(10, false); - char buff[512]; - memset(buff, 0, 512); - - iasio->getDriverName(buff); - SleepEx(10, false); - - long ver = iasio->getDriverVersion(); - SleepEx(10, false); - - ASIOSampleRate srate = 0.0; - iasio->setSampleRate(48000.0); - iasio->getSampleRate(&srate); - SleepEx(10, false); - - long minSize, maxSize, prefSize, granSize; - iasio->getBufferSize(&minSize, &maxSize, &prefSize, &granSize); - SleepEx(10, false); - - QString str = tr("%1 (version %2)").arg(QLatin1String(buff)).arg(ver); - qlName->setText(str); - - str = tr("%1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz").arg(minSize).arg(maxSize).arg(granSize).arg(prefSize).arg(srate,0,'f',0); - - qlBuffers->setText(str); - - long ichannels, ochannels; - iasio->getChannels(&ichannels, &ochannels); - SleepEx(10, false); - long cnum; - - bool match = (s.qsASIOclass == qsCls); - - for (cnum=0;cnumgetChannelInfo(&aci); - SleepEx(10, false); - switch (aci.type) { - case ASIOSTFloat32LSB: - case ASIOSTInt32LSB: - case ASIOSTInt24LSB: - case ASIOSTInt16LSB: { - QListWidget *widget = qlwUnused; - QVariant v = static_cast(cnum); - if (match && s.qlASIOmic.contains(v)) - widget = qlwMic; - else if (match && s.qlASIOspeaker.contains(v)) - widget = qlwSpeaker; - QListWidgetItem *item = new QListWidgetItem(QLatin1String(aci.name), widget); - item->setData(Qt::UserRole, static_cast(cnum)); - } - break; - default: - qWarning("ASIOInput: Channel %ld %s (Unusable format %ld)", cnum, aci.name,aci.type); - } - } - - bOk = true; - } else { - SleepEx(10, false); - char err[255]; - iasio->getErrorMessage(err); - SleepEx(10, false); - QMessageBox::critical(this, QLatin1String("Mumble"), tr("ASIO Initialization failed: %1").arg(QLatin1String(err)), QMessageBox::Ok, QMessageBox::NoButton); - } - iasio->Release(); - } else { - QMessageBox::critical(this, QLatin1String("Mumble"), tr("Failed to instantiate ASIO driver"), QMessageBox::Ok, QMessageBox::NoButton); - } -} - -void ASIOConfig::on_qpbConfig_clicked() { - QString qsCls = qcbDevice->itemData(qcbDevice->currentIndex()).toString(); - CLSID clsid; - IASIO *iasio; - - CLSIDFromString(const_cast(reinterpret_cast(qsCls.utf16())), &clsid); - if (CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, clsid, reinterpret_cast(&iasio)) == S_OK) { - SleepEx(10, false); - if (iasio->init(winId())) { - SleepEx(10, false); - iasio->controlPanel(); - SleepEx(10, false); - } else { - SleepEx(10, false); - char err[255]; - iasio->getErrorMessage(err); - SleepEx(10, false); - QMessageBox::critical(this, QLatin1String("Mumble"), tr("ASIO Initialization failed: %1").arg(QLatin1String(err)), QMessageBox::Ok, QMessageBox::NoButton); - } - iasio->Release(); - } else { - QMessageBox::critical(this, QLatin1String("Mumble"), tr("Failed to instantiate ASIO driver"), QMessageBox::Ok, QMessageBox::NoButton); - } -} - -void ASIOConfig::on_qcbDevice_activated(int) { - clearQuery(); -} - -void ASIOConfig::on_qpbAddMic_clicked() { - int row = qlwUnused->currentRow(); - if (row < 0) - return; - qlwMic->addItem(qlwUnused->takeItem(row)); -} - -void ASIOConfig::on_qpbRemMic_clicked() { - int row = qlwMic->currentRow(); - if (row < 0) - return; - qlwUnused->addItem(qlwMic->takeItem(row)); -} - -void ASIOConfig::on_qpbAddSpeaker_clicked() { - int row = qlwUnused->currentRow(); - if (row < 0) - return; - qlwSpeaker->addItem(qlwUnused->takeItem(row)); -} - -void ASIOConfig::on_qpbRemSpeaker_clicked() { - int row = qlwSpeaker->currentRow(); - if (row < 0) - return; - qlwUnused->addItem(qlwSpeaker->takeItem(row)); -} - -QString ASIOConfig::title() const { - return tr("ASIO"); -} - -QIcon ASIOConfig::icon() const { - return QIcon(QLatin1String("skin:config_asio.png")); -} - -void ASIOConfig::save() const { - if (! bOk) - return; - - s.qsASIOclass = qcbDevice->itemData(qcbDevice->currentIndex()).toString(); - - QList list; - - for (int i=0;icount();i++) { - QListWidgetItem *item = qlwMic->item(i); - list << item->data(Qt::UserRole); - } - - s.qlASIOmic = list; - - list.clear(); - - for (int i=0;icount();i++) { - QListWidgetItem *item = qlwSpeaker->item(i); - list << item->data(Qt::UserRole); - } - - s.qlASIOspeaker = list; -} - -void ASIOConfig::load(const Settings &r) { - int i = 0; - ASIODev ad; - foreach(ad, qlDevs) { - if (ad.second == r.qsASIOclass) { - loadComboBox(qcbDevice, i); - } - i++; - } - s.qlASIOmic = r.qlASIOmic; - s.qlASIOspeaker = r.qlASIOspeaker; - - qlName->setText(QString()); - qlBuffers->setText(QString()); - qlwMic->clear(); - qlwUnused->clear(); - qlwSpeaker->clear(); -} - -bool ASIOConfig::expert(bool) { - return false; -} - -void ASIOConfig::clearQuery() { - bOk = false; - qlName->setText(QString()); - qlBuffers->setText(QString()); - qlwMic->clear(); - qlwUnused->clear(); - qlwSpeaker->clear(); -} - -ASIOInput::ASIOInput() { - QString qsCls = g.s.qsASIOclass; - CLSID clsid; - - iasio = NULL; - abiInfo = NULL; - aciInfo = NULL; - - int i, idx; - - // Sanity check things first. - - iNumMic=g.s.qlASIOmic.count(); - iNumSpeaker=g.s.qlASIOspeaker.count(); - - if ((iNumMic == 0) || (iNumSpeaker == 0)) { - QMessageBox::warning(NULL, QLatin1String("Mumble"), tr("You need to select at least one microphone and one speaker source to use ASIO. " - "If you just need microphone sampling, use DirectSound."), QMessageBox::Ok, QMessageBox::NoButton); - return; - } - - CLSIDFromString(const_cast(reinterpret_cast(qsCls.utf16())), &clsid); - if (CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, clsid, reinterpret_cast(&iasio)) == S_OK) { - if (iasio->init(NULL)) { - iasio->setSampleRate(48000.0); - ASIOSampleRate srate = 0.0; - iasio->getSampleRate(&srate); - - if (srate <= 0.0) - return; - - long minSize, maxSize, prefSize, granSize; - iasio->getBufferSize(&minSize, &maxSize, &prefSize, &granSize); - - bool halfit = true; - - double wbuf = (srate / 100.0); - long wantBuf = lround(wbuf); - lBufSize = wantBuf; - - if (static_cast(wantBuf) == wbuf) { - qWarning("ASIOInput: Exact buffer match possible."); - if ((wantBuf >= minSize) && (wantBuf <= maxSize)) { - if (wantBuf == minSize) - halfit = false; - else if ((granSize >= 1) && (((wantBuf-minSize)%granSize)==0)) - halfit = false; - } - } - - if (halfit) { - if (granSize == 0) { - qWarning("ASIOInput: Single buffer size"); - lBufSize = minSize; - } else { - long target = wantBuf / 2; - lBufSize = target; - while (lBufSize < target) { - if (granSize < 0) - lBufSize *= 2; - else - lBufSize += granSize; - } - } - qWarning("ASIOInput: Buffer mismatch mode. Wanted %d, got %d", wantBuf, lBufSize); - } - - - abiInfo = new ASIOBufferInfo[iNumMic + iNumSpeaker]; - aciInfo = new ASIOChannelInfo[iNumMic + iNumSpeaker]; - idx = 0; - for (i=0;igetChannelInfo(&aciInfo[idx]); - SleepEx(10, false); - - idx++; - } - for (i=0;igetChannelInfo(&aciInfo[idx]); - SleepEx(10, false); - - idx++; - } - - iEchoChannels = iNumSpeaker; - iMicChannels = iNumMic; - iEchoFreq = iMicFreq = iroundf(srate); - - initializeMixer(); - - ASIOCallbacks asioCallbacks; - ZeroMemory(&asioCallbacks, sizeof(asioCallbacks)); - asioCallbacks.bufferSwitch = &bufferSwitch; - asioCallbacks.sampleRateDidChange = &sampleRateChanged; - asioCallbacks.asioMessage = &asioMessages; - asioCallbacks.bufferSwitchTimeInfo = &bufferSwitchTimeInfo; - - if (iasio->createBuffers(abiInfo, idx, lBufSize, &asioCallbacks) == ASE_OK) { - bRunning = true; - return; - } - } - } - - if (iasio) { - iasio->Release(); - iasio = NULL; - } - - QMessageBox::critical(NULL, QLatin1String("Mumble"), tr("Opening selected ASIO device failed. No input will be done."), - QMessageBox::Ok, QMessageBox::NoButton); - -} - -ASIOInput::~ASIOInput() { - qwDone.wakeAll(); - wait(); - if (iasio) { - iasio->stop(); - iasio->disposeBuffers(); - iasio->Release(); - iasio = NULL; - } - - delete [] abiInfo; - abiInfo = NULL; - - delete [] aciInfo; - aciInfo = NULL; -} - -void ASIOInput::run() { - QMutex m; - m.lock(); - if (iasio) { - aiSelf = this; - iasio->start(); - qwDone.wait(&m); - } -} - -ASIOTime *ASIOInput::bufferSwitchTimeInfo(ASIOTime *, long index, ASIOBool) { - aiSelf->bufferReady(index); - return 0L; -} - -void -ASIOInput::addBuffer(ASIOSampleType sampType, int interleave, void *src, float * RESTRICT dst) { - switch (sampType) { - case ASIOSTInt16LSB: { - const float m = 1.0f / 32768.f; - const short * RESTRICT buf=static_cast(src); - for (int i=0;i(src); - for (int i=0;i(0x7FFFFFFF - 0xFF); - const unsigned char * RESTRICT buf=static_cast(src); - for (int i=0;i(src); - for (int i=0;iiasio->getSamplePosition(&timeInfo.timeInfo.samplePosition, &timeInfo.timeInfo.systemTime) == ASE_OK) - timeInfo.timeInfo.flags = kSystemTimeValid | kSamplePositionValid; - - bufferSwitchTimeInfo(&timeInfo, index, processNow); -} - -void ASIOInput::sampleRateChanged(ASIOSampleRate) { - qFatal("ASIOInput: sampleRateChanged"); -} - -long ASIOInput::asioMessages(long selector, long value, void*, double*) { - long ret = 0; - switch (selector) { - case kAsioSelectorSupported: - if (value == kAsioResetRequest - || value == kAsioEngineVersion - || value == kAsioResyncRequest - || value == kAsioLatenciesChanged - || value == kAsioSupportsTimeInfo - || value == kAsioSupportsTimeCode - || value == kAsioSupportsInputMonitor) - ret = 1L; - break; - case kAsioResetRequest: - qFatal("ASIOInput: kAsioResetRequest"); - ret = 1L; - break; - case kAsioResyncRequest: - ret = 1L; - break; - case kAsioLatenciesChanged: - ret = 1L; - break; - case kAsioEngineVersion: - ret = 2L; - break; - case kAsioSupportsTimeInfo: - ret = 1; - break; - case kAsioSupportsTimeCode: - ret = 0; - break; - } - return ret; -} diff -Nru mumble-1.2.3/src/mumble11x/ASIOInput.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ASIOInput.h --- mumble-1.2.3/src/mumble11x/ASIOInput.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ASIOInput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _ASIOINPUT_H -#define _ASIOINPUT_H - -#include -#include -#include "AudioInput.h" -#include "ConfigDialog.h" -#include "ui_ASIOInput.h" - -typedef QPair ASIODev; - -class ASIOConfig : public ConfigWidget, public Ui::ASIOConfig { - private: - Q_OBJECT - Q_DISABLE_COPY(ASIOConfig) - protected: - QList qlDevs; - bool bOk; - public: - ASIOConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void save() const; - void load(const Settings &r); - bool expert(bool); - void clearQuery(); - void on_qcbDevice_activated(int index); - void on_qpbQuery_clicked(); - void on_qpbConfig_clicked(); - void on_qpbAddMic_clicked(); - void on_qpbRemMic_clicked(); - void on_qpbAddSpeaker_clicked(); - void on_qpbRemSpeaker_clicked(); -}; - -#define IEEE754_64FLOAT 1 -#include "asio.h" - -class ASIOInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(ASIOInput) - protected: - IASIO *iasio; - - int iNumMic, iNumSpeaker; - long lBufSize; - ASIOBufferInfo *abiInfo; - ASIOChannelInfo *aciInfo; - - // ASIO Callbacks - static ASIOInput *aiSelf; - - static void sampleRateChanged(ASIOSampleRate sRate); - static long asioMessages(long selector, long value, void* message, double* opt); - static void bufferSwitch(long index, ASIOBool processNow); - static ASIOTime *bufferSwitchTimeInfo(ASIOTime *timeInfo, long index, ASIOBool processNow); - - void addBuffer(long sampType, int interleave, void *src, float * RESTRICT dst); - void bufferReady(long index); - bool initializeDriver(); - - QWaitCondition qwDone; - public: - ASIOInput(); - ~ASIOInput(); - void run(); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/ASIOInput.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/ASIOInput.ui --- mumble-1.2.3/src/mumble11x/ASIOInput.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ASIOInput.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,374 +0,0 @@ - - - ASIOConfig - - - - 0 - 0 - 506 - 434 - - - - Form - - - - - - Device selection - - - - - - Device - - - qcbDevice - - - - - - - - 1 - 0 - - - - Device to use for microphone - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - - - - - - - Query selected device - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - - - &Query - - - - - - - Configure selected device - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - - - &Configure - - - - - - - - - - Capabilities - - - - - - Driver name - - - - - - - - 1 - 0 - - - - - - - - - - - Buffer size - - - - - - - - 1 - 0 - - - - - - - - - - - - - - Configure input channels - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - Channels - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Microphone - - - qlwMic - - - - - - - - 0 - 0 - - - - - 120 - 16777215 - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 30 - 16777215 - - - - <- - - - - - - - - 30 - 16777215 - - - - -> - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Unused - - - qlwUnused - - - - - - - - 0 - 0 - - - - - 120 - 16777215 - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 30 - 16777215 - - - - -> - - - - - - - - 30 - 16777215 - - - - <- - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Speakers - - - qlwSpeaker - - - - - - - - 0 - 0 - - - - - 120 - 16777215 - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/AudioConfigDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioConfigDialog.cpp --- mumble-1.2.3/src/mumble11x/AudioConfigDialog.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioConfigDialog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,484 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008, Andreas Messer - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "AudioInput.h" -#include "AudioOutput.h" -#include "AudioConfigDialog.h" -#include "Global.h" -#include "NetworkConfig.h" - -static ConfigWidget *AudioInputDialogNew(Settings &st) { - return new AudioInputDialog(st); -} - -static ConfigWidget *AudioOutputDialogNew(Settings &st) { - return new AudioOutputDialog(st); -} - -static ConfigRegistrar iregistrar(1000, AudioInputDialogNew); -static ConfigRegistrar oregistrar(1010, AudioOutputDialogNew); - -void AudioInputDialog::hideEvent(QHideEvent *) { - qtTick->stop(); -} - -void AudioInputDialog::showEvent(QShowEvent *) { - qtTick->start(20); -} - -AudioInputDialog::AudioInputDialog(Settings &st) : ConfigWidget(st) { - QList keys; - QString key; - - qtTick = new QTimer(this); - qtTick->setObjectName(QLatin1String("Tick")); - - setupUi(this); - - if (AudioInputRegistrar::qmNew) { - keys=AudioInputRegistrar::qmNew->keys(); - foreach(key, keys) { - qcbSystem->addItem(key); - } - } - qcbSystem->setEnabled(qcbSystem->count() > 1); - - qcbTransmit->addItem(tr("Continuous"), Settings::Continous); - qcbTransmit->addItem(tr("Voice Activity"), Settings::VAD); - qcbTransmit->addItem(tr("Push To Talk"), Settings::PushToTalk); - - abSpeech->qcBelow = Qt::red; - abSpeech->qcInside = Qt::yellow; - abSpeech->qcAbove = Qt::green; - - qcbDevice->view()->setTextElideMode(Qt::ElideRight); - - on_Tick_timeout(); -} - -QString AudioInputDialog::title() const { - return tr("Audio Input"); -} - -QIcon AudioInputDialog::icon() const { - return QIcon(QLatin1String("skin:config_basic.png")); -} - -void AudioInputDialog::load(const Settings &r) { - int i; - QList keys; - - if (AudioInputRegistrar::qmNew) - keys=AudioInputRegistrar::qmNew->keys(); - else - keys.clear(); - i=keys.indexOf(AudioInputRegistrar::current); - if (i >= 0) - loadComboBox(qcbSystem, i); - - loadComboBox(qcbTransmit, r.atTransmit); - loadSlider(qsTransmitHold, r.iVoiceHold); - loadSlider(qsTransmitMin, iroundf(r.fVADmin * 32767.0f)); - loadSlider(qsTransmitMax, iroundf(r.fVADmax * 32767.0f)); - loadSlider(qsFrames, r.iFramesPerPacket); - loadSlider(qsDoublePush, iroundf(static_cast(r.uiDoublePush) / 1000.f)); - - if (r.vsVAD == Settings::Amplitude) - qrbAmplitude->setChecked(true); - else - qrbSNR->setChecked(true); - - loadCheckBox(qcbPushClick, r.bPushClick); - loadSlider(qsQuality, r.iQuality); - loadSlider(qsNoise, - r.iNoiseSuppress); - loadSlider(qsAmp, 20000 - r.iMinLoudness); - loadSlider(qsIdle, r.iIdleTime); - loadCheckBox(qcbEcho, r.bEcho); -} - -void AudioInputDialog::save() const { - s.iQuality = qsQuality->value(); - s.iNoiseSuppress = - qsNoise->value(); - s.iMinLoudness = 18000 - qsAmp->value() + 2000; - s.iVoiceHold = qsTransmitHold->value(); - s.fVADmin = static_cast(qsTransmitMin->value()) / 32767.0f; - s.fVADmax = static_cast(qsTransmitMax->value()) / 32767.0f; - s.vsVAD = qrbSNR->isChecked() ? Settings::SignalToNoise : Settings::Amplitude; - s.iFramesPerPacket = qsFrames->value(); - s.uiDoublePush = qsDoublePush->value() * 1000; - s.bPushClick = qcbPushClick->isChecked(); - s.atTransmit = static_cast(qcbTransmit->currentIndex()); - s.iIdleTime = qsIdle->value(); - - s.qsAudioInput = qcbSystem->currentText(); - s.bEcho = qcbEcho->isChecked(); - - if (AudioInputRegistrar::qmNew) { - AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbSystem->currentText()); - int idx = qcbDevice->currentIndex(); - if (idx > -1) { - air->setDeviceChoice(qcbDevice->itemData(idx), s); - } - } -} - -bool AudioInputDialog::expert(bool b) { - qgbInterfaces->setVisible(b); - qgbAudio->setVisible(b); - qliFrames->setVisible(b); - qsFrames->setVisible(b); - qlFrames->setVisible(b); - qswTransmit->setVisible(b); - qliIdle->setVisible(b); - qsIdle->setVisible(b); - qlIdle->setVisible(b); - return true; -} - -void AudioInputDialog::on_qsFrames_valueChanged(int v) { - qlFrames->setText(tr("%1 ms").arg(v*20)); - updateBitrate(); -} - -void AudioInputDialog::on_qsDoublePush_valueChanged(int v) { - if (v == 0) - qlDoublePush->setText(tr("Off")); - else - qlDoublePush->setText(tr("%1 ms").arg(v)); -} - -void AudioInputDialog::on_qsTransmitHold_valueChanged(int v) { - float val = static_cast(v * 20); - val = val / 1000.0f; - qlTransmitHold->setText(tr("%1 s").arg(val, 0, 'f', 2)); -} - -void AudioInputDialog::on_qsQuality_valueChanged(int v) { - qlQuality->setText(QString::number(v)); - updateBitrate(); -} - -void AudioInputDialog::on_qsNoise_valueChanged(int v) { - qlNoise->setText(tr("-%1 dB").arg(v)); -} - -void AudioInputDialog::on_qsAmp_valueChanged(int v) { - v = 18000 - v + 2000; - float d = 20000.0f/static_cast(v); - qlAmp->setText(QString::fromLatin1("%1").arg(d, 0, 'f', 2)); -} - -void AudioInputDialog::on_qsIdle_valueChanged(int v) { - if (v > 0) - qlIdle->setText(tr("%1 min").arg(v / 60)); - else - qlIdle->setText(tr("Off")); -} - -void AudioInputDialog::updateBitrate() { - if (! qsQuality || ! qsFrames || ! qlBitrate) - return; - int q = qsQuality->value(); - int p = qsFrames->value(); - - int audiorate, overhead, posrate; - float f = static_cast(q); - void *es; - - es = speex_encoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - speex_encoder_ctl(es,SPEEX_SET_VBR_QUALITY, &f); - speex_encoder_ctl(es,SPEEX_GET_BITRATE,&audiorate); - speex_encoder_destroy(es); - - // 50 packets, in bits, IP + UDP + Crypt + type/id (Message header) + flags + seq - overhead = 50 * 8 * (20 + 8 + 4 + 3 + 1 + 2); - - // TCP is 12 more bytes than UDP - if (NetworkConfig::TcpModeEnabled()) - overhead += 50 * 8 * 12; - - if (g.s.bTransmitPosition) - posrate = 12; - else - posrate = 0; - - posrate = posrate * 50 * 8; - - overhead = overhead / p; - posrate = posrate / p; - - int total = audiorate + overhead + posrate; - - QPalette pal; - - if ((total / 8 > g.iMaxBandwidth) && g.uiSession) { - pal.setColor(qlBitrate->foregroundRole(), Qt::red); - } - - qlBitrate->setPalette(pal); - - QString v = tr("%1kbit/s (Audio %2, Position %4, Overhead %3)").arg(total / 1000.0, 0, 'f', 1).arg(audiorate / 1000.0, 0, 'f', 1).arg(overhead / 1000.0, 0, 'f', 1).arg(posrate / 1000.0, 0, 'f', 1); - qlBitrate->setText(v); -} - -void AudioInputDialog::on_qcbTransmit_currentIndexChanged(int v) { - switch (v) { - case 0: - qswTransmit->setCurrentWidget(qwContinuous); - break; - case 1: - qswTransmit->setCurrentWidget(qwVAD); - break; - case 2: - qswTransmit->setCurrentWidget(qwPTT); - break; - } -} - -void AudioInputDialog::on_qcbSystem_currentIndexChanged(int) { - qcbDevice->clear(); - - QList ql; - - if (AudioInputRegistrar::qmNew) { - AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbSystem->currentText()); - ql = air->getDeviceChoices(); - - int idx = 0; - - foreach(audioDevice d, ql) { - qcbDevice->addItem(d.first, d.second); - qcbDevice->setItemData(idx, d.first, Qt::ToolTipRole); - ++idx; - } - - qcbEcho->setEnabled(air->canEcho(s.qsAudioOutput)); - } - - qcbDevice->setEnabled(ql.count() > 1); -} - -void AudioInputDialog::on_Tick_timeout() { - AudioInputPtr ai = g.ai; - - if (ai.get() == NULL || ! ai->sppPreprocess) - return; - - abSpeech->iBelow = qsTransmitMin->value(); - abSpeech->iAbove = qsTransmitMax->value(); - - if (qrbAmplitude->isChecked()) { - abSpeech->iValue = iroundf((32767.f/96.0f) * (96.0f + ai->dPeakMic)); - } else { - abSpeech->iValue = iroundf(ai->fSpeechProb * 32767.0f); - } - abSpeech->update(); -} - -AudioOutputDialog::AudioOutputDialog(Settings &st) : ConfigWidget(st) { - QList keys; - QString key; - - setupUi(this); - - if (AudioOutputRegistrar::qmNew) { - keys=AudioOutputRegistrar::qmNew->keys(); - foreach(key, keys) { - qcbSystem->addItem(key); - } - } - qcbSystem->setEnabled(qcbSystem->count() > 1); - - qcbLoopback->addItem(tr("None"), Settings::None); - qcbLoopback->addItem(tr("Local"), Settings::Local); - qcbLoopback->addItem(tr("Server"), Settings::Server); - - qcbDevice->view()->setTextElideMode(Qt::ElideRight); -} - -QString AudioOutputDialog::title() const { - return tr("Audio Output"); -} - -QIcon AudioOutputDialog::icon() const { - return QIcon(QLatin1String("skin:config_basic.png")); -} - -void AudioOutputDialog::load(const Settings &r) { - int i; - QList keys; - - if (AudioOutputRegistrar::qmNew) - keys=AudioOutputRegistrar::qmNew->keys(); - else - keys.clear(); - i=keys.indexOf(AudioOutputRegistrar::current); - if (i >= 0) - loadComboBox(qcbSystem, i); - - loadSlider(qsDelay, r.iOutputDelay); - loadSlider(qsVolume, static_cast(lroundf(r.fVolume * 100.0f))); - loadSlider(qsOtherVolume, static_cast(lroundf(r.fOtherVolume * 100.0f))); - loadSlider(qsJitter, r.iJitterBufferSize); - loadComboBox(qcbLoopback, r.lmLoopMode); - loadSlider(qsPacketDelay, static_cast(r.dMaxPacketDelay)); - loadSlider(qsPacketLoss, static_cast(lroundf(r.dPacketLoss * 100.0f))); - loadSlider(qsMinDistance, iroundf(r.fAudioMinDistance * 10.0f)); - loadSlider(qsMaxDistance, iroundf(r.fAudioMaxDistance * 10.0f)); - loadSlider(qsMaxDistVolume, iroundf(r.fAudioMaxDistVolume * 100.0f)); - loadSlider(qsBloom, iroundf(r.fAudioBloom * 100.0f)); - loadCheckBox(qcbHeadphones, r.bPositionalHeadphone); - loadCheckBox(qcbPositional, r.bPositionalAudio); -} - -void AudioOutputDialog::save() const { - s.iOutputDelay = qsDelay->value(); - s.fVolume = static_cast(qsVolume->value()) / 100.0f; - s.fOtherVolume = static_cast(qsOtherVolume->value()) / 100.0f; - s.iJitterBufferSize = qsJitter->value(); - s.qsAudioOutput = qcbSystem->currentText(); - s.lmLoopMode = static_cast(qcbLoopback->currentIndex()); - s.dMaxPacketDelay = static_cast(qsPacketDelay->value()); - s.dPacketLoss = static_cast(qsPacketLoss->value()) / 100.0f; - s.fAudioMinDistance = static_cast(qsMinDistance->value()) / 10.0f; - s.fAudioMaxDistance = static_cast(qsMaxDistance->value()) / 10.0f; - s.fAudioMaxDistVolume = static_cast(qsMaxDistVolume->value()) / 100.0f; - s.fAudioBloom = static_cast(qsBloom->value()) / 100.0f; - s.bPositionalAudio = qcbPositional->isChecked(); - s.bPositionalHeadphone = qcbHeadphones->isChecked(); - - - if (AudioOutputRegistrar::qmNew) { - AudioOutputRegistrar *aor = AudioOutputRegistrar::qmNew->value(qcbSystem->currentText()); - int idx = qcbDevice->currentIndex(); - if (idx > -1) { - aor->setDeviceChoice(qcbDevice->itemData(idx), s); - } - } -} - -bool AudioOutputDialog::expert(bool b) { - return b; -} - -void AudioOutputDialog::on_qcbSystem_currentIndexChanged(int) { - qcbDevice->clear(); - - QList ql; - - if (AudioOutputRegistrar::qmNew) { - AudioOutputRegistrar *aor = AudioOutputRegistrar::qmNew->value(qcbSystem->currentText()); - ql = aor->getDeviceChoices(); - - int idx = 0; - - foreach(audioDevice d, ql) { - qcbDevice->addItem(d.first, d.second); - qcbDevice->setItemData(idx, d.first, Qt::ToolTipRole); - ++idx; - } - bool canmute = aor->canMuteOthers(); - qsOtherVolume->setEnabled(canmute); - qlOtherVolume->setEnabled(canmute); - - bool usesdelay = aor->usesOutputDelay(); - qsDelay->setEnabled(usesdelay); - qlDelay->setEnabled(usesdelay); - } - - qcbDevice->setEnabled(ql.count() > 1); -} - -void AudioOutputDialog::on_qsJitter_valueChanged(int v) { - qlJitter->setText(tr("%1 ms").arg(v*20)); -} - -void AudioOutputDialog::on_qsVolume_valueChanged(int v) { - QPalette pal; - - if (v > 100) { - pal.setColor(qlVolume->foregroundRole(), Qt::red); - } - qlVolume->setPalette(pal); - - qlVolume->setText(tr("%1%").arg(v)); -} - -void AudioOutputDialog::on_qsOtherVolume_valueChanged(int v) { - qlOtherVolume->setText(tr("%1%").arg(v)); -} - -void AudioOutputDialog::on_qsPacketDelay_valueChanged(int v) { - qlPacketDelay->setText(tr("%1 ms").arg(v)); -} - -void AudioOutputDialog::on_qsPacketLoss_valueChanged(int v) { - qlPacketLoss->setText(tr("%1%").arg(v)); -} - -void AudioOutputDialog::on_qsDelay_valueChanged(int v) { - qlDelay->setText(tr("%1ms").arg(v*20)); -} - -void AudioOutputDialog::on_qcbLoopback_currentIndexChanged(int v) { - bool ena = false; - if (v == 1) - ena = true; - - qsPacketDelay->setEnabled(ena); - qlPacketDelay->setEnabled(ena); - qsPacketLoss->setEnabled(ena); - qlPacketLoss->setEnabled(ena); -} - -void AudioOutputDialog::on_qsMinDistance_valueChanged(int v) { - qlMinDistance->setText(tr("%1m").arg(v/10.0, 0, 'f', 1)); - if (qsMaxDistance->value() < v) - qsMaxDistance->setValue(v); -} - -void AudioOutputDialog::on_qsMaxDistance_valueChanged(int v) { - qlMaxDistance->setText(tr("%1m").arg(v/10.0, 0, 'f', 1)); - if (qsMinDistance->value() > v) - qsMinDistance->setValue(v); -} - -void AudioOutputDialog::on_qsMaxDistVolume_valueChanged(int v) { - qlMaxDistVolume->setText(tr("%1%").arg(v)); -} - -void AudioOutputDialog::on_qsBloom_valueChanged(int v) { - qlBloom->setText(tr("%1%").arg(v+100)); -} - -void AudioOutputDialog::on_qcbPositional_stateChanged(int v) { - qgbVolume->setEnabled(v); -} diff -Nru mumble-1.2.3/src/mumble11x/AudioConfigDialog.h mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioConfigDialog.h --- mumble-1.2.3/src/mumble11x/AudioConfigDialog.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioConfigDialog.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,95 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _AUDIOCONFIGDIALOG_H -#define _AUDIOCONFIGDIALOG_H - -#include "ConfigDialog.h" - -#include "ui_AudioInput.h" -#include "ui_AudioOutput.h" - -class AudioInputDialog : public ConfigWidget, public Ui::AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioInputDialog) - protected: - QTimer *qtTick; - void hideEvent(QHideEvent *event); - void showEvent(QShowEvent *event); - public: - AudioInputDialog(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void save() const; - void load(const Settings &r); - bool expert(bool); - void updateBitrate(); - void on_qsTransmitHold_valueChanged(int v); - void on_qsFrames_valueChanged(int v); - void on_qsQuality_valueChanged(int v); - void on_qsAmp_valueChanged(int v); - void on_qsDoublePush_valueChanged(int v); - void on_qsNoise_valueChanged(int v); - void on_qsIdle_valueChanged(int v); - void on_qcbTransmit_currentIndexChanged(int v); - void on_qcbSystem_currentIndexChanged(int); - void on_Tick_timeout(); -}; - -class AudioOutputDialog : public ConfigWidget, public Ui::AudioOutput { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioOutputDialog) - public: - AudioOutputDialog(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void save() const; - void load(const Settings &r); - bool expert(bool); - void on_qsDelay_valueChanged(int v); - void on_qsJitter_valueChanged(int v); - void on_qsVolume_valueChanged(int v); - void on_qsOtherVolume_valueChanged(int v); - void on_qsPacketDelay_valueChanged(int v); - void on_qsPacketLoss_valueChanged(int v); - void on_qcbLoopback_currentIndexChanged(int v); - void on_qsMinDistance_valueChanged(int v); - void on_qsMaxDistance_valueChanged(int v); - void on_qsBloom_valueChanged(int v); - void on_qsMaxDistVolume_valueChanged(int v); - void on_qcbSystem_currentIndexChanged(int); - void on_qcbPositional_stateChanged(int); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/Audio.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Audio.cpp --- mumble-1.2.3/src/mumble11x/Audio.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Audio.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,168 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include - -#include "Audio.h" -#include "AudioInput.h" -#include "AudioOutput.h" -#include "Global.h" - -#define DOUBLE_RAND (rand()/static_cast(RAND_MAX)) - -LoopPlayer LoopPlayer::lpLoopy; - -LoopPlayer::LoopPlayer() { - qsName = QLatin1String("Loopy"); - uiSession = 0; - iId = 0; - sState = Player::Authenticated; - bMute = bDeaf = bSuppressed = false; - bLocalMute = bSelfDeaf = false; - bTalking = false; - bAltSpeak = false; - cChannel = NULL; - qtTicker.start(); -} - -void LoopPlayer::addFrame(const QByteArray &packet, int seq) { - if (DOUBLE_RAND < g.s.dPacketLoss) { - qWarning("Drop"); - return; - } - - bool restart = (qtLastFetch.elapsed() > 100); - - { - QMutexLocker l(&qmLock); - - double time = qtTicker.elapsed(); - - double r; - if (restart) - r = 0.0; - else - r = DOUBLE_RAND * g.s.dMaxPacketDelay; - - qmPackets.insert(static_cast(time + r), Packet(seq, packet)); - } - - // Restart check - if (qtLastFetch.elapsed() > 100) { - AudioOutputPtr ao = g.ao; - if (ao) { - ao->addFrameToBuffer(this, QByteArray(), 0); - } - } - -} - -void LoopPlayer::fetchFrames() { - QMutexLocker l(&qmLock); - - AudioOutputPtr ao = g.ao; - if (!ao || qmPackets.isEmpty()) - return; - - double cmp = qtTicker.elapsed(); - - QMultiMap::iterator i = qmPackets.begin(); - - while (i != qmPackets.end()) { - if (i.key() > cmp) - break; - ao->addFrameToBuffer(this, i.value().second, i.value().first); - i = qmPackets.erase(i); - } - - qtLastFetch.restart(); -} - -void Audio::startOutput(const QString &output) { - g.ao = AudioOutputRegistrar::newFromChoice(output); - if (g.ao) - g.ao->start(QThread::HighPriority); -} - -void Audio::stopOutput() { - AudioOutputPtr ao = g.ao; - - g.ao.reset(); - - while (ao.get() && ! ao.unique()) { -#if QT_VERSION >= 0x040500 - QThread::yieldCurrentThread(); -#endif - } - - ao.reset(); -} - -void Audio::startInput(const QString &input) { - g.ai = AudioInputRegistrar::newFromChoice(input); - if (g.ai) - g.ai->start(QThread::HighestPriority); -} - -void Audio::stopInput() { - AudioInputPtr ai = g.ai; - - g.ai.reset(); - - while (ai.get() && ! ai.unique()) { -#if QT_VERSION >= 0x040500 - QThread::yieldCurrentThread(); -#endif - } - - ai.reset(); -} - -void Audio::start(const QString &input, const QString &output) { - startInput(input); - startOutput(output); -} - -void Audio::stop() { - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; - - g.ao.reset(); - g.ai.reset(); - - while ((ai.get() && ! ai.unique()) || (ao.get() && ! ao.unique())) { -#if QT_VERSION >= 0x040500 - QThread::yieldCurrentThread(); -#endif - } - - ai.reset(); - ao.reset(); -} diff -Nru mumble-1.2.3/src/mumble11x/Audio.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Audio.h --- mumble-1.2.3/src/mumble11x/Audio.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Audio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _AUDIO_H -#define _AUDIO_H - -#include "mumble_pch.hpp" -#include "Player.h" - -#define SAMPLE_RATE 16000 - -typedef QPair audioDevice; - -class LoopPlayer : public ClientPlayer { - private: - Q_DISABLE_COPY(LoopPlayer) - protected: - typedef QPair Packet; - QMutex qmLock; - QTime qtTicker; - QTime qtLastFetch; - QMultiMap qmPackets; - LoopPlayer(); - public: - static LoopPlayer lpLoopy; - void addFrame(const QByteArray &packet, int seq); - void fetchFrames(); -}; - -namespace Audio { - void startInput(const QString &input = QString()); - void stopInput(); - - void startOutput(const QString &output = QString()); - void stopOutput(); - - void start(const QString &input = QString(), const QString &output = QString()); - void stop(); -} - -#endif diff -Nru mumble-1.2.3/src/mumble11x/AudioInput.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioInput.cpp --- mumble-1.2.3/src/mumble11x/AudioInput.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioInput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,756 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "AudioInput.h" -#include "AudioOutput.h" -#include "ServerHandler.h" -#include "MainWindow.h" -#include "Player.h" -#include "Plugins.h" -#include "Message.h" -#include "Global.h" -#include "NetworkConfig.h" - -// Remember that we cannot use static member classes that are not pointers, as the constructor -// for AudioInputRegistrar() might be called before they are initialized, as the constructor -// is called from global initialization. -// Hence, we allocate upon first call. - -QMap *AudioInputRegistrar::qmNew; -QString AudioInputRegistrar::current = QString(); - -AudioInputRegistrar::AudioInputRegistrar(const QString &n, int p) : name(n), priority(p) { - if (! qmNew) - qmNew = new QMap(); - qmNew->insert(name,this); -} - -AudioInputRegistrar::~AudioInputRegistrar() { - qmNew->remove(name); -} - -AudioInputPtr AudioInputRegistrar::newFromChoice(QString choice) { - if (! qmNew) - return AudioInputPtr(); - - if (!choice.isEmpty() && qmNew->contains(choice)) { - g.s.qsAudioInput = choice; - current = choice; - return AudioInputPtr(qmNew->value(current)->create()); - } - choice = g.s.qsAudioInput; - if (qmNew->contains(choice)) { - current = choice; - return AudioInputPtr(qmNew->value(choice)->create()); - } - - AudioInputRegistrar *r = NULL; - foreach(AudioInputRegistrar *air, *qmNew) - if (!r || (air->priority > r->priority)) - r = air; - if (r) { - current = r->name; - return AudioInputPtr(r->create()); - } - return AudioInputPtr(); -} - - -AudioInput::AudioInput() { - speex_bits_init(&sbBits); - speex_bits_reset(&sbBits); - iFrames = 0; - - iSampleRate = SAMPLE_RATE; - - esEncState=speex_encoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - speex_encoder_ctl(esEncState,SPEEX_GET_FRAME_SIZE,&iFrameSize); - - mumble_drft_init(&fftTable, iFrameSize); - - iFrameCounter = 0; - iSilentFrames = 0; - iHoldFrames = 0; - iBestBin = 0; - - int iArg=1; - float fArg=0.0; - speex_encoder_ctl(esEncState,SPEEX_SET_VBR, &iArg); - - iArg = 0; - - speex_encoder_ctl(esEncState,SPEEX_SET_VAD, &iArg); - speex_encoder_ctl(esEncState,SPEEX_SET_DTX, &iArg); - - fArg = static_cast(g.s.iQuality); - speex_encoder_ctl(esEncState,SPEEX_SET_VBR_QUALITY, &fArg); - speex_encoder_ctl(esEncState,SPEEX_GET_BITRATE, &iArg); - speex_encoder_ctl(esEncState, SPEEX_SET_VBR_MAX_BITRATE, &iArg); - - iArg = 5; - speex_encoder_ctl(esEncState,SPEEX_SET_COMPLEXITY, &iArg); - - bResetProcessor = true; - - sppPreprocess = NULL; - sesEcho = NULL; - srsMic = srsEcho = NULL; - jb = jitter_buffer_init(10); - iJitterSeq = 1; - - psMic = new short[iFrameSize]; - psSpeaker = new short[iFrameSize]; - psClean = new short[iFrameSize]; - - iEchoChannels = iMicChannels = 0; - iEchoFreq = iMicFreq = SAMPLE_RATE; - iEchoFilled = iMicFilled = 0; - eMicFormat = eEchoFormat = SampleFloat; - iMicSampleSize = iEchoSampleSize = 0; - - bPreviousVoice = false; - - pfMicInput = pfEchoInput = pfOutput = NULL; - - iBitrate = 0; - dPeakMic = dPeakSignal = dPeakSpeaker = 0.0; - - if (g.uiSession) { - setMaxBandwidth(g.iMaxBandwidth); - } - - bRunning = true; - - connect(this, SIGNAL(doMute()), g.mw->qaAudioMute, SLOT(trigger()), Qt::QueuedConnection); -} - -AudioInput::~AudioInput() { - bRunning = false; - wait(); - speex_bits_destroy(&sbBits); - speex_encoder_destroy(esEncState); - mumble_drft_clear(&fftTable); - jitter_buffer_destroy(jb); - - if (sppPreprocess) - speex_preprocess_state_destroy(sppPreprocess); - if (sesEcho) - speex_echo_state_destroy(sesEcho); - - if (srsMic) - speex_resampler_destroy(srsMic); - if (srsEcho) - speex_resampler_destroy(srsEcho); - - delete [] psMic; - delete [] psSpeaker; - delete [] psClean; - - if (pfMicInput) - delete [] pfMicInput; - if (pfEchoInput) - delete [] pfEchoInput; - if (pfOutput) - delete [] pfOutput; -} - - -#define IN_MIXER_FLOAT(channels) \ -static void inMixerFloat##channels ( float * RESTRICT buffer, const void * RESTRICT ipt, unsigned int nsamp, unsigned int N) { \ - const float * RESTRICT input = reinterpret_cast(ipt); \ - register const float m = 1.0f / static_cast(channels); \ - Q_UNUSED(N); \ - for(unsigned int i=0;i(ipt); \ - register const float m = 1.0f / (32768.f * static_cast(channels)); \ - Q_UNUSED(N); \ - for(unsigned int i=0;i(input[i*channels+j]); \ - buffer[i] = v * m; \ - } \ -} - -IN_MIXER_FLOAT(1) -IN_MIXER_FLOAT(2) -IN_MIXER_FLOAT(3) -IN_MIXER_FLOAT(4) -IN_MIXER_FLOAT(5) -IN_MIXER_FLOAT(6) -IN_MIXER_FLOAT(7) -IN_MIXER_FLOAT(8) -IN_MIXER_FLOAT(N) - -IN_MIXER_SHORT(1) -IN_MIXER_SHORT(2) -IN_MIXER_SHORT(3) -IN_MIXER_SHORT(4) -IN_MIXER_SHORT(5) -IN_MIXER_SHORT(6) -IN_MIXER_SHORT(7) -IN_MIXER_SHORT(8) -IN_MIXER_SHORT(N) - -AudioInput::inMixerFunc AudioInput::chooseMixer(const unsigned int nchan, SampleFormat sf) { - inMixerFunc r = NULL; - if (sf == SampleFloat) { - switch (nchan) { - case 1: - r = inMixerFloat1; - break; - case 2: - r = inMixerFloat2; - break; - case 3: - r = inMixerFloat3; - break; - case 4: - r = inMixerFloat4; - break; - case 5: - r = inMixerFloat5; - break; - case 6: - r = inMixerFloat6; - break; - case 7: - r = inMixerFloat7; - break; - case 8: - r = inMixerFloat8; - break; - default: - r = inMixerFloatN; - break; - } - } else { - switch (nchan) { - case 1: - r = inMixerShort1; - break; - case 2: - r = inMixerShort2; - break; - case 3: - r = inMixerShort3; - break; - case 4: - r = inMixerShort4; - break; - case 5: - r = inMixerShort5; - break; - case 6: - r = inMixerShort6; - break; - case 7: - r = inMixerShort7; - break; - case 8: - r = inMixerShort8; - break; - default: - r = inMixerShortN; - break; - } - } - return r; -} - -void AudioInput::initializeMixer() { - int err; - - if (srsMic) - speex_resampler_destroy(srsMic); - if (srsEcho) - speex_resampler_destroy(srsEcho); - if (pfMicInput) - delete [] pfMicInput; - if (pfEchoInput) - delete [] pfEchoInput; - if (pfOutput) - delete [] pfOutput; - - if (iMicFreq != SAMPLE_RATE) - srsMic = speex_resampler_init(1, iMicFreq, SAMPLE_RATE, 3, &err); - - iMicLength = (iFrameSize * iMicFreq) / SAMPLE_RATE; - - pfMicInput = new float[iMicLength]; - pfOutput = new float[iFrameSize]; - - if (iEchoChannels > 0) { - if (iEchoFreq != SAMPLE_RATE) - srsEcho = speex_resampler_init(1, iEchoFreq, SAMPLE_RATE, 3, &err); - iEchoLength = (iFrameSize * iEchoFreq) / SAMPLE_RATE; - pfEchoInput = new float[iEchoLength]; - } else { - srsEcho = NULL; - pfEchoInput = NULL; - } - - imfMic = chooseMixer(iMicChannels, eMicFormat); - imfEcho = chooseMixer(iEchoChannels, eEchoFormat); - - iMicSampleSize = iMicChannels * ((eMicFormat == SampleFloat) ? sizeof(float) : sizeof(short)); - iEchoSampleSize = iEchoChannels * ((eEchoFormat == SampleFloat) ? sizeof(float) : sizeof(short)); - - bResetProcessor = true; - - qWarning("AudioInput: Initialized mixer for %d channel %d hz mic and %d channel %d hz echo", iMicChannels, iMicFreq, iEchoChannels, iEchoFreq); -} - -void AudioInput::addMic(const void *data, unsigned int nsamp) { - while (nsamp > 0) { - unsigned int left = qMin(nsamp, iMicLength - iMicFilled); - - imfMic(pfMicInput + iMicFilled, data, left, iMicChannels); - - iMicFilled += left; - nsamp -= left; - - if (nsamp > 0) { - if (eMicFormat == SampleFloat) - data = reinterpret_cast(data) + left * iMicChannels; - else - data = reinterpret_cast(data) + left * iMicChannels; - } - - if (iMicFilled == iMicLength) { - iMicFilled = 0; - - float *ptr = srsMic ? pfOutput : pfMicInput; - if (srsMic) { - spx_uint32_t inlen = iMicLength; - spx_uint32_t outlen = iFrameSize; - speex_resampler_process_float(srsMic, 0, pfMicInput, &inlen, pfOutput, &outlen); - } - const float mul = 32768.f; - for (int j=0;j(ptr[j] * mul); - - if (iEchoChannels > 0) { - JitterBufferPacket jbp; - jbp.data = reinterpret_cast(psSpeaker); - jbp.len = iFrameSize * sizeof(short); - jbp.timestamp = 0; - jbp.span = 0; - jbp.sequence = 0; - jbp.user_data = 0; - - spx_int32_t offs; - - jitter_buffer_get(jb, &jbp, 10, &offs); - jitter_buffer_tick(jb); - } - encodeAudioFrame(); - } - } -} - -void AudioInput::addEcho(const void *data, unsigned int nsamp) { - while (nsamp > 0) { - unsigned int left = qMin(nsamp, iEchoLength - iEchoFilled); - - imfEcho(pfEchoInput + iEchoFilled, data, left, iEchoChannels); - - iEchoFilled += left; - nsamp -= left; - - if (nsamp > 0) { - if (eEchoFormat == SampleFloat) - data = reinterpret_cast(data) + left * iEchoChannels; - else - data = reinterpret_cast(data) + left * iEchoChannels; - } - - if (iEchoFilled == iEchoLength) { - iEchoFilled = 0; - - STACKVAR(short, outbuff, iFrameSize); - float *ptr = srsEcho ? pfOutput : pfEchoInput; - if (srsEcho) { - spx_uint32_t inlen = iEchoLength; - spx_uint32_t outlen = iFrameSize; - speex_resampler_process_float(srsEcho, 0, pfEchoInput, &inlen, pfOutput, &outlen); - } - const float mul = 32768.f; - for (int j=0;j(ptr[j] * mul); - - JitterBufferPacket jbp; - jbp.data = reinterpret_cast(outbuff); - jbp.len = iFrameSize * sizeof(short); - jbp.timestamp = ++iJitterSeq * 10; - jbp.span = 10; - jbp.sequence = static_cast(iJitterSeq); - jbp.user_data = 0; - - jitter_buffer_put(jb, &jbp); - } - } -} - -int AudioInput::getMaxBandwidth() { - int audiorate; - - void *es; - float f = static_cast(g.s.iQuality); - es = speex_encoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - speex_encoder_ctl(es,SPEEX_SET_VBR_QUALITY, &f); - speex_encoder_ctl(es,SPEEX_GET_BITRATE,&audiorate); - speex_encoder_destroy(es); - - audiorate /= 400/g.s.iFramesPerPacket; - - // Overhead - audiorate += 20 + 8 + 4 + 3 + 1 + 2; - - if (g.s.bTransmitPosition) - audiorate += 12; - - if (NetworkConfig::TcpModeEnabled()) - audiorate += 12; - - audiorate = (audiorate * 50) / g.s.iFramesPerPacket; - - return audiorate; -} - -void AudioInput::setMaxBandwidth(int bytespersec) { - int audiorate; - int baserate; - - void *es; - es = speex_encoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - - float f = static_cast(g.s.iQuality); - - do { - speex_encoder_ctl(es, SPEEX_SET_VBR_QUALITY, &f); - speex_encoder_ctl(es, SPEEX_GET_BITRATE, &baserate); - audiorate = baserate; - - audiorate /= 400/g.s.iFramesPerPacket; - - // Overhead - audiorate += 20 + 8 + 4 + 3 + 1 + 2; - - if (g.s.bTransmitPosition) - audiorate += 12; - - if (NetworkConfig::TcpModeEnabled()) - audiorate += 12; - - audiorate = (audiorate * 50) / g.s.iFramesPerPacket; - - if (f <= 1.9) - break; - - if (audiorate > bytespersec) { - f -= 1.0f; - } - } while (audiorate > bytespersec); - - speex_encoder_destroy(es); - - speex_encoder_ctl(esEncState, SPEEX_SET_VBR_QUALITY, &f); - speex_encoder_ctl(esEncState, SPEEX_SET_VBR_MAX_BITRATE, &baserate); - - g.iAudioBandwidth = audiorate; - g.iAudioQuality = lroundf(f); -} - -void AudioInput::encodeAudioFrame() { - int iArg; - ClientPlayer *p=ClientPlayer::get(g.uiSession); - int i; - float sum; - short max; - - short *psSource; - - iFrameCounter++; - - if (! bRunning) { - return; - } - - sum=1.0f; - for (i=0;i(psMic[i] * psMic[i]); - dPeakMic=20.0f*log10f(sqrtf(sum / static_cast(iFrameSize)) / 32768.0f); - if (dPeakMic < -96.0f) - dPeakMic = -96.0f; - - max = 1; - for (i=0;i(abs(psMic[i]) > max ? abs(psMic[i]) : max); - dMaxMic = max; - - if (g.bEchoTest) { - STACKVAR(float, fft, iFrameSize); - STACKVAR(float, power, iFrameSize); - float scale = 1.f / static_cast(iFrameSize); - for (i=0;i(psMic[i]) * scale; - mumble_drft_forward(&fftTable, fft); - float mp = 0.0f; - int bin = 0; - power[0]=power[1]=0.0f; - for (i=2;i < iFrameSize / 2;i++) { - power[i] = sqrtf(fft[2*i]*fft[2*i]+fft[2*i-1]*fft[2*i-1]); - if (power[i] > mp) { - bin = i; - mp = power[i]; - } - } - for (i=2;i< iFrameSize / 2;i++) { - if (power[i] * 2 > mp) { - if (i != bin) - bin = 0; - } - } - iBestBin = bin * 2; - } - - if (iEchoChannels > 0) { - sum=1.0f; - for (i=0;i(psSpeaker[i] * psSpeaker[i]); - dPeakSpeaker=20.0f*log10f(sqrtf(sum / static_cast(iFrameSize)) / 32768.0f); - if (dPeakSpeaker < -96.0f) - dPeakSpeaker = -96.0f; - } else { - dPeakSpeaker = 0.0; - } - - QMutexLocker l(&qmSpeex); - - if (bResetProcessor) { - if (sppPreprocess) - speex_preprocess_state_destroy(sppPreprocess); - if (sesEcho) - speex_echo_state_destroy(sesEcho); - - sppPreprocess = speex_preprocess_state_init(iFrameSize, SAMPLE_RATE); - - iArg = 1; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_VAD, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_DENOISE, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_DEREVERB, &iArg); - - iArg = 30000; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_TARGET, &iArg); - - float v = 30000.0f / static_cast(g.s.iMinLoudness); - iArg = lroundf(floorf(20.0f * log10f(v))); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_AGC_MAX_GAIN, &iArg); - - iArg = g.s.iNoiseSuppress; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_NOISE_SUPPRESS, &iArg); - - if (iEchoChannels > 0) { - sesEcho = speex_echo_state_init(iFrameSize, iFrameSize*10); - iArg = SAMPLE_RATE; - speex_echo_ctl(sesEcho, SPEEX_SET_SAMPLING_RATE, &iArg); - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_SET_ECHO_STATE, sesEcho); - - jitter_buffer_reset(jb); - qWarning("AudioInput: ECHO CANCELLER ACTIVE"); - } else { - sesEcho = NULL; - } - - iFrames = 0; - speex_bits_reset(&sbBits); - - bResetProcessor = false; - } - - int iIsSpeech; - - if (sesEcho) { - speex_echo_cancellation(sesEcho, psMic, psSpeaker, psClean); - iIsSpeech=speex_preprocess_run(sppPreprocess, psClean); - psSource = psClean; - } else { - iIsSpeech=speex_preprocess_run(sppPreprocess, psMic); - psSource = psMic; - } - - sum=1.0f; - for (i=0;i(psSource[i] * psSource[i]); - float micLevel = sqrtf(sum / static_cast(iFrameSize)); - dPeakSignal=20.0f*log10f(micLevel / 32768.0f); - if (dPeakSignal < -96.0f) - dPeakSignal = -96.0f; - - spx_int32_t prob = 0; - speex_preprocess_ctl(sppPreprocess, SPEEX_PREPROCESS_GET_PROB, &prob); - fSpeechProb = static_cast(prob) / 100.0f; - - float level = (g.s.vsVAD == Settings::SignalToNoise) ? fSpeechProb : (1.0f + dPeakMic / 96.0f); - - if (level > g.s.fVADmax) - iIsSpeech = 1; - else if (level > g.s.fVADmin && bPreviousVoice) - iIsSpeech = 1; - else - iIsSpeech = 0; - - if (! iIsSpeech) { - iHoldFrames++; - if (iHoldFrames < g.s.iVoiceHold) - iIsSpeech=1; - } else { - iHoldFrames = 0; - } - - if (g.s.atTransmit == Settings::Continous) - iIsSpeech = 1; - else if (g.s.atTransmit == Settings::PushToTalk) - iIsSpeech = g.s.uiDoublePush && ((g.uiDoublePush < g.s.uiDoublePush) || (g.tDoublePush.elapsed() < g.s.uiDoublePush)); - - iIsSpeech = iIsSpeech || (g.iPushToTalk > 0) || (g.iAltSpeak > 0); - - if (g.s.bMute || ((g.s.lmLoopMode != Settings::Local) && p && p->bMute) || g.bPushToMute) { - iIsSpeech = 0; - } - - if (iIsSpeech) { - iSilentFrames = 0; - } else { - iSilentFrames++; - if (iSilentFrames > 200) - iFrameCounter = 0; - } - - if (p) - p->setTalking(iIsSpeech, (g.iAltSpeak > 0)); - - if (g.s.bPushClick && (g.s.atTransmit == Settings::PushToTalk)) { - AudioOutputPtr ao = g.ao; - if (iIsSpeech && ! bPreviousVoice && ao) - ao->playSine(400.0f,1200.0f,5); - else if (ao && !iIsSpeech && bPreviousVoice && ao) - ao->playSine(620.0f,-1200.0f,5); - } - if (! iIsSpeech && ! bPreviousVoice) { - iBitrate = 0; - if (g.s.iIdleTime && ! g.s.bMute && ((tIdle.elapsed() / 1000000ULL) > g.s.iIdleTime)) { - emit doMute(); - tIdle.restart(); - } - return; - } - - bPreviousVoice = iIsSpeech; - - tIdle.restart(); - - if (! iIsSpeech) { - memset(psMic, 0, sizeof(short) * iFrameSize); - } - - if (g.s.bTransmitPosition && g.p && ! g.bCenterPosition && (iFrames == 0) && g.p->fetch()) { - QByteArray q; - QDataStream ds(&q, QIODevice::WriteOnly); - ds << g.p->fPosition[0]; - ds << g.p->fPosition[1]; - ds << g.p->fPosition[2]; - - speex_bits_pack(&sbBits, 13, 5); - speex_bits_pack(&sbBits, q.size(), 4); - - const unsigned char *d=reinterpret_cast(q.data()); - for (i=0;i 0) - flags += MessageSpeex::AltSpeak; - if (g.s.lmLoopMode == Settings::Server) - flags += MessageSpeex::LoopBack; - - if (! bPreviousVoice) - flags += MessageSpeex::EndSpeech; - - flags += (iFrames - 1) << 4; - - int len = speex_bits_nbytes(&sbBits); - QByteArray qba(len + 1, 0); - qba[0] = static_cast(flags); - - speex_bits_write(&sbBits, qba.data() + 1, len); - - MessageSpeex msPacket; - msPacket.qbaSpeexPacket = qba; - msPacket.iSeq = iFrameCounter; - - if (g.s.lmLoopMode == Settings::Local) { - LoopPlayer::lpLoopy.addFrame(qba, msPacket.iSeq); - } else if (g.sh) { - g.sh->sendMessage(&msPacket); - } - - iFrames = 0; - speex_bits_reset(&sbBits); -} - -bool AudioInput::isAlive() const { - return isRunning(); -} diff -Nru mumble-1.2.3/src/mumble11x/AudioInput.h mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioInput.h --- mumble-1.2.3/src/mumble11x/AudioInput.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioInput.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,152 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _AUDIOINPUT_H -#define _AUDIOINPUT_H - -#include "Audio.h" -#include "Settings.h" -#include "Timer.h" -#include "smallft.h" - -class AudioInput; -typedef boost::shared_ptr AudioInputPtr; - -class AudioInputRegistrar { - private: - Q_DISABLE_COPY(AudioInputRegistrar) - public: - static QMap *qmNew; - static QString current; - static AudioInputPtr newFromChoice(QString choice = QString()); - - const QString name; - int priority; - - AudioInputRegistrar(const QString &n, int priority = 0); - virtual ~AudioInputRegistrar(); - virtual AudioInput *create() = 0; - virtual const QList getDeviceChoices() = 0; - virtual void setDeviceChoice(const QVariant &, Settings &) = 0; - virtual bool canEcho(const QString &outputsys) const = 0; -}; - -class AudioInput : public QThread { - friend class AudioNoiseWidget; - friend class AudioEchoWidget; - friend class AudioStats; - friend class AudioInputDialog; - friend class FMODSystem; - private: - Q_OBJECT - Q_DISABLE_COPY(AudioInput) - protected: - typedef enum { SampleShort, SampleFloat } SampleFormat; - typedef void (*inMixerFunc)(float * RESTRICT, const void * RESTRICT, unsigned int, unsigned int); - private: - SpeexResamplerState *srsMic, *srsEcho; - JitterBuffer *jb; - unsigned int iJitterSeq; - unsigned int iMicFilled, iEchoFilled; - inMixerFunc imfMic, imfEcho; - inMixerFunc chooseMixer(const unsigned int nchan, SampleFormat sf); - protected: - SampleFormat eMicFormat, eEchoFormat; - - unsigned int iSampleRate; - unsigned int iMicChannels, iEchoChannels; - unsigned int iMicFreq, iEchoFreq; - unsigned int iMicLength, iEchoLength; - unsigned int iMicSampleSize, iEchoSampleSize; - - int iFrameSize; - - QMutex qmSpeex; - SpeexBits sbBits; - SpeexPreprocessState *sppPreprocess; - SpeexEchoState *sesEcho; - - void *esEncState; - drft_lookup fftTable; - - short *psMic; - short *psSpeaker; - short *psClean; - - float *pfMicInput; - float *pfEchoInput; - float *pfOutput; - - void encodeAudioFrame(); - void addMic(const void *data, unsigned int nsamp); - void addEcho(const void *data, unsigned int nsamp); - - volatile bool bRunning; - bool bPreviousVoice; - - int iFrameCounter; - int iSilentFrames; - int iHoldFrames; - - int iFrames; - - void flushCheck(); - - void initializeMixer(); - signals: - void doMute(); - public: - bool bResetProcessor; - - Timer tIdle; - - int iBitrate; - float dPeakMic, dPeakSpeaker, dPeakSignal, dMaxMic; - float fSpeechProb; - - unsigned int iBestBin; - - virtual bool isAlive() const; - - bool isTransmitting() { - return bPreviousVoice; - }; - - static int getMaxBandwidth(); - void setMaxBandwidth(int bytespersec); - - AudioInput(); - ~AudioInput(); - void run() = 0; -}; - -#else -class AudioInput; -#endif diff -Nru mumble-1.2.3/src/mumble11x/AudioInput.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioInput.ui --- mumble-1.2.3/src/mumble11x/AudioInput.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioInput.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,658 +0,0 @@ - - AudioInput - - - - 0 - 0 - 340 - 555 - - - - Form - - - - - - Interface - - - - - - System - - - qcbSystem - - - - - - - - 0 - 0 - - - - Input method for audio - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - - - Qt::Horizontal - - - QSizePolicy::Maximum - - - - 24 - 16 - - - - - - - - Device - - - qcbDevice - - - - - - - - 1 - 0 - - - - Input device for audio - - - <b>This is the input device to use for audio.</b> - - - QComboBox::AdjustToMinimumContentsLength - - - 16 - - - - - - - Cancel Echo - - - - - - - - - - - 0 - 0 - - - - Transmission - - - - - - &Transmit - - - qcbTransmit - - - - - - - When to transmit your speech - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - - - - - - - 2 - - - - - - - DoublePush Time - - - qsDoublePush - - - - - - - 1000 - - - 10 - - - 100 - - - Qt::Horizontal - - - - - - - TextLabel - - - - - - - Audible audio cue when push-to-talk is activated or deactivated - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - - - PTT Audio cue - - - - - - - - - - - - - Use SNR based speech detection - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - - - Signal to Noise - - - - - - - Use Amplitude based speech detection. - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - - - Amplitude - - - - - - - - - Voice &Hold - - - qsTransmitHold - - - - - - - How long to keep transmitting after silence - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - - - 20 - - - 250 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - - 16777215 - 10 - - - - Current speech detection chance - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - - - Silence Below - - - - - - - Signal values below this counts as silence - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - - - 1 - - - 32767 - - - 100 - - - 1000 - - - Qt::Horizontal - - - - - - - Speech Above - - - - - - - Signal values above this count as voice - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - - - 1 - - - 32767 - - - 100 - - - 1000 - - - Qt::Horizontal - - - - - - - - - - - - Idle AutoMute - - - - - - - How long to remain idle before auto-mute. - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - - - 1800 - - - 60 - - - 300 - - - 1800 - - - Qt::Horizontal - - - - - - - TextLabel - - - - - - - - - - Compression - - - - - - &Quality - - - qsQuality - - - - - - - Quality of compression (peak bandwidth) - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - - - 1 - - - 10 - - - 2 - - - 5 - - - Qt::Horizontal - - - - - - - - 30 - 0 - - - - TextLabel - - - - - - - Audio per packet - - - qsFrames - - - - - - - How many audio frames to send per packet - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - - - 1 - - - 4 - - - 2 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - - true - - - - Maximum bandwidth used for sending audio - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - - - TextLabel - - - Qt::AlignCenter - - - - - - - - - - Audio Processing - - - - - - Noise Suppression - - - qsNoise - - - - - - - Noise suppression - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - - - 15 - - - 60 - - - 5 - - - Qt::Horizontal - - - - - - - - 30 - 0 - - - - TextLabel - - - - - - - Amplification - - - qsAmp - - - - - - - Maximum amplification of input sound - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - - - 19500 - - - 500 - - - 2000 - - - Qt::Horizontal - - - - - - - - 30 - 0 - - - - TextLabel - - - - - - - - - - Qt::Vertical - - - - 1 - 151 - - - - - - - - - AudioBar - QWidget -
AudioStats.h
- 1 -
-
- - qcbSystem - qcbDevice - qcbEcho - qcbTransmit - qsDoublePush - qcbPushClick - qrbSNR - qrbAmplitude - qsTransmitHold - qsTransmitMin - qsTransmitMax - qsQuality - qsFrames - qsNoise - qsAmp - - - -
diff -Nru mumble-1.2.3/src/mumble11x/AudioOutput.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioOutput.cpp --- mumble-1.2.3/src/mumble11x/AudioOutput.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioOutput.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,903 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "AudioOutput.h" -#include "AudioInput.h" -#include "Player.h" -#include "Global.h" -#include "Message.h" -#include "Plugins.h" - -// Remember that we cannot use static member classes that are not pointers, as the constructor -// for AudioOutputRegistrar() might be called before they are initialized, as the constructor -// is called from global initialization. -// Hence, we allocate upon first call. - -QMap *AudioOutputRegistrar::qmNew; -QString AudioOutputRegistrar::current = QString(); - -AudioOutputRegistrar::AudioOutputRegistrar(const QString &n, int p) : name(n), priority(p) { - if (! qmNew) - qmNew = new QMap(); - qmNew->insert(name,this); -} - -AudioOutputRegistrar::~AudioOutputRegistrar() { - qmNew->remove(name); -} - -AudioOutputPtr AudioOutputRegistrar::newFromChoice(QString choice) { - if (! qmNew) - return AudioOutputPtr(); - - if (!choice.isEmpty() && qmNew->contains(choice)) { - g.s.qsAudioOutput = choice; - current = choice; - return AudioOutputPtr(qmNew->value(choice)->create()); - } - choice = g.s.qsAudioOutput; - if (qmNew->contains(choice)) { - current = choice; - return AudioOutputPtr(qmNew->value(choice)->create()); - } - - AudioOutputRegistrar *r = NULL; - foreach(AudioOutputRegistrar *aor, *qmNew) - if (!r || (aor->priority > r->priority)) - r = aor; - if (r) { - current = r->name; - return AudioOutputPtr(r->create()); - } - return AudioOutputPtr(); -} - -bool AudioOutputRegistrar::canMuteOthers() const { - return false; -} - -bool AudioOutputRegistrar::usesOutputDelay() const { - return true; -} - -AudioOutputPlayer::AudioOutputPlayer(const QString name) : qsName(name) { - iBufferSize = 0; - pfBuffer = NULL; - pfVolume = NULL; - fPos[0]=fPos[1]=fPos[2]=0.0; -} - -AudioOutputPlayer::~AudioOutputPlayer() { - if (pfBuffer) - delete [] pfBuffer; - if (pfVolume) - delete [] pfVolume; -} - -void AudioOutputPlayer::resizeBuffer(unsigned int newsize) { - if (newsize > iBufferSize) { - float *n = new float[newsize]; - if (pfBuffer) { - memcpy(n, pfBuffer, sizeof(float) * iBufferSize); - delete [] pfBuffer; - } - pfBuffer = n; - iBufferSize = newsize; - } -} - -AudioOutputSample::AudioOutputSample(const QString &filename, const QList &packets, bool loop, unsigned int freq) : AudioOutputPlayer(filename) { - dsDecState=speex_decoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - - int iArg=1; - int err; - - speex_decoder_ctl(dsDecState, SPEEX_SET_ENH, &iArg); - speex_decoder_ctl(dsDecState, SPEEX_GET_FRAME_SIZE, &iFrameSize); - - if (freq != SAMPLE_RATE) - srs = speex_resampler_init(1, SAMPLE_RATE, freq, 3, &err); - else - srs = NULL; - - iOutputSize = lroundf(ceilf(static_cast(iFrameSize * freq) / static_cast(SAMPLE_RATE))); - - iBufferOffset = iBufferFilled = iLastConsume = 0; - - bLoop = false; - - iPacketIndex = -1; - - qlPackets = packets; - - speex_bits_init(&sbBits); - - bLoop = loop; -} - -AudioOutputSample::~AudioOutputSample() { - speex_decoder_destroy(dsDecState); - speex_bits_destroy(&sbBits); -} - -QList AudioOutputSample::getPacketsFromFile(const QString &filename) { - QList packets; - - QFile f(filename); - if (! f.open(QIODevice::ReadOnly)) { - qWarning("AudioOutputSample: Failed to open %s for reading", qPrintable(filename)); - return QList(); - } - - QByteArray qbaSample = f.readAll(); - f.close(); - - if (qbaSample.startsWith(QString::fromLatin1("OggS").toUtf8())) { - ogg_sync_state sync; - ogg_page page; - ogg_packet packet; - ogg_stream_state stream; - bool stream_init = false; - bool eos = false; - int speex_serialno = -1; - int packetno = -1; - bool header_ok = false; - int nframes = -1; - int extra_headers = 0; - - ogg_sync_init(&sync); - char *data = ogg_sync_buffer(&sync, qbaSample.length()); - memcpy(data, qbaSample.constData(), qbaSample.length()); - ogg_sync_wrote(&sync, qbaSample.length()); - - while (ogg_sync_pageout(&sync, &page)==1) { - if (! stream_init) { - ogg_stream_init(&stream, ogg_page_serialno(&page)); - stream_init = true; - } else if (ogg_page_serialno(&page) != stream.serialno) { - ogg_stream_reset_serialno(&stream, ogg_page_serialno(&page)); - } - ogg_stream_pagein(&stream, &page); - while (! eos && ogg_stream_packetout(&stream, &packet) == 1) { - if (packet.bytes >= 5 && memcmp(packet.packet, "Speex", 5)==0) { - speex_serialno = stream.serialno; - } - if (speex_serialno == -1 || stream.serialno != speex_serialno) - break; - - ++packetno; - - if (packetno == 0) { - SpeexHeader *header = speex_packet_to_header(reinterpret_cast(packet.packet), packet.bytes); - - if (header && header->speex_version_id == 1 && header->rate == 16000 && header->nb_channels == 1) { - header_ok = true; - extra_headers = header->extra_headers; - nframes = header->frames_per_packet; - } else { - break; - } - } else if (packetno <= 1 + extra_headers) { - } else { - if (packet.e_o_s) - eos = true; - packets << QByteArray(reinterpret_cast(packet.packet), packet.bytes); - } - } - } - ogg_sync_clear(&sync); - if (stream_init) - ogg_stream_clear(&stream); - - if (! header_ok) { - qWarning("AudioOutputSample: %s contained invalid data", qPrintable(filename)); - } - } else { - qWarning("AudioOutputSample: %s is not an ogg file", qPrintable(filename)); - } - return packets; -} - -bool AudioOutputSample::needSamples(unsigned int snum) { - for (unsigned int i=iLastConsume;i= snum) - return bLastAlive; - - float *pOut; - STACKVAR(float, fOut, iFrameSize); - - - while (iBufferFilled < snum) { - resizeBuffer(iBufferFilled + iOutputSize); - - pOut = (srs) ? fOut : pfBuffer + iBufferFilled; - - if (speex_bits_remaining(&sbBits) < 43) { - ++iPacketIndex; - if (iPacketIndex >= qlPackets.count()) { - if (qlPackets.isEmpty() || !bLoop) { - memset(pfBuffer + iBufferFilled, 0, sizeof(float) * (snum-iBufferFilled)); - return false; - } else { - iPacketIndex = 0; - } - } - - const QByteArray &qba = qlPackets[iPacketIndex]; - - speex_bits_set_bit_buffer(&sbBits, reinterpret_cast(const_cast(qba.constData())), qba.length()); - speex_bits_rewind(&sbBits); - } - - if (speex_decode(dsDecState, &sbBits, pOut) != 0) { - memset(pfBuffer + iBufferFilled, 0, sizeof(float) * (snum-iBufferFilled)); - return false; - } - - spx_uint32_t inlen = iFrameSize; - spx_uint32_t outlen = iOutputSize; - if (srs) - speex_resampler_process_float(srs, 0, fOut, &inlen, pfBuffer + iBufferFilled, &outlen); - iBufferFilled += outlen; - } - - return true; -} - -AudioOutputSpeech::AudioOutputSpeech(ClientPlayer *player, unsigned int freq) : AudioOutputPlayer(player->qsName) { - p = player; - - dsDecState=speex_decoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - - int iArg=1; - int err; - - speex_decoder_ctl(dsDecState, SPEEX_SET_ENH, &iArg); - speex_decoder_ctl(dsDecState, SPEEX_GET_FRAME_SIZE, &iFrameSize); - - if (freq != SAMPLE_RATE) - srs = speex_resampler_init(1, SAMPLE_RATE, freq, 3, &err); - else - srs = NULL; - - iOutputSize = lroundf(ceilf(static_cast(iFrameSize * freq) / static_cast(SAMPLE_RATE))); - - iBufferOffset = iBufferFilled = iLastConsume = 0; - bLastAlive = true; - - SpeexCallback sc; - sc.callback_id = 1; - sc.func = speexCallback; - sc.data = this; - - speex_decoder_ctl(dsDecState, SPEEX_SET_USER_HANDLER, &sc); - - iMissCount = 0; - iMissedFrames = 0; - - jbJitter = jitter_buffer_init(iFrameSize); - int margin = g.s.iJitterBufferSize * iFrameSize; - jitter_buffer_ctl(jbJitter, JITTER_BUFFER_SET_MARGIN, &margin); - - speex_bits_init(&sbBits); -} - -AudioOutputSpeech::~AudioOutputSpeech() { - speex_decoder_destroy(dsDecState); - jitter_buffer_destroy(jbJitter); - speex_bits_destroy(&sbBits); -} - -int AudioOutputSpeech::speexCallback(SpeexBits *bits, void *, void *data) { - AudioOutputSpeech *aos=reinterpret_cast(data); - - int len=speex_bits_unpack_unsigned(bits, 4); - - QByteArray qba(len, 0); - unsigned char *ptr = reinterpret_cast(qba.data()); - - for (int i=0;i(speex_bits_unpack_unsigned(bits, 8)); - QDataStream ds(qba); - ds >> aos->fPos[0]; - ds >> aos->fPos[1]; - ds >> aos->fPos[2]; - aos->iMissCount = 0; - - return 0; -} - -void AudioOutputSpeech::addFrameToBuffer(const QByteArray &qbaPacket, unsigned int iSeq) { - QMutexLocker lock(&qmJitter); - - if (qbaPacket.size() < 1) - return; - - unsigned int flags = qbaPacket.at(0); - unsigned int frames = (flags >> 4) + 1; - - JitterBufferPacket jbp; - jbp.data = const_cast(qbaPacket.constData()); - jbp.len = qbaPacket.size(); - jbp.span = iFrameSize * frames; - jbp.timestamp = iFrameSize * iSeq; - - jitter_buffer_put(jbJitter, &jbp); -} - -bool AudioOutputSpeech::needSamples(unsigned int snum) { - for (unsigned int i=iLastConsume;i= snum) - return bLastAlive; - - float *pOut; - STACKVAR(float, fOut, iFrameSize); - - - while (iBufferFilled < snum) { - resizeBuffer(iBufferFilled + iOutputSize); - - pOut = (srs) ? fOut : pfBuffer + iBufferFilled; - - if (p == &LoopPlayer::lpLoopy) - LoopPlayer::lpLoopy.fetchFrames(); - - - if (speex_decode(dsDecState, &sbBits, pOut) == 0) { - jitter_buffer_tick(jbJitter); - bLastAlive = true; - } else { - QMutexLocker lock(&qmJitter); - - - char data[4096]; - JitterBufferPacket jbp; - jbp.data = data; - jbp.len = 4096; - - spx_int32_t startofs = 0; - - if (jitter_buffer_get(jbJitter, &jbp, iFrameSize, &startofs) == JITTER_BUFFER_OK) { - ucFlags = jbp.data[0]; - fPos[0] = fPos[1] = fPos[2] = 0.0; - speex_bits_read_from(&sbBits, jbp.data + 1, jbp.len - 1); - speex_decode(dsDecState, &sbBits, pOut); - bLastAlive = true; - } else { - if (ucFlags & MessageSpeex::EndSpeech) { - memset(pOut, 0, sizeof(float) * iFrameSize); - bLastAlive = false; - } else { - iMissCount++; - if (iMissCount < 5) { - speex_decode(dsDecState, NULL, pOut); - } else { - memset(pOut, 0, sizeof(float) * iFrameSize); - bLastAlive = false; - } - } - } - - int activity; - speex_decoder_ctl(dsDecState, SPEEX_GET_ACTIVITY, &activity); - if (activity < 30) - jitter_buffer_update_delay(jbJitter, &jbp, NULL); - - jitter_buffer_tick(jbJitter); - } - spx_uint32_t inlen = iFrameSize; - spx_uint32_t outlen = iOutputSize; - if (srs) - speex_resampler_process_float(srs, 0, fOut, &inlen, pfBuffer + iBufferFilled, &outlen); - iBufferFilled += outlen; - } - - if (p) - p->setTalking(bLastAlive, ((ucFlags & MessageSpeex::AltSpeak) ? true : false)); - return bLastAlive; -} - - -AudioOutput::AudioOutput() { - void *ds=speex_decoder_init(speex_lib_get_mode(SPEEX_MODEID_WB)); - speex_decoder_ctl(ds, SPEEX_GET_FRAME_SIZE, &iFrameSize); - speex_decoder_destroy(ds); - bRunning = true; - - iChannels = 0; - fSpeakers = NULL; - fSpeakerVolume = NULL; - bSpeakerPositional = NULL; - - iMixerFreq = 0; - eSampleFormat = SampleFloat; - iSampleSize = 0; -} - -AudioOutput::~AudioOutput() { - bRunning = false; - wait(); - wipe(); - - if (fSpeakers) - delete [] fSpeakers; - if (fSpeakerVolume) - delete [] fSpeakerVolume; - if (bSpeakerPositional) - delete [] bSpeakerPositional; -} - -// Here's the theory. -// We support sound "bloom"ing. That is, if sound comes directly from the left, if it is sufficiently -// close, we'll hear it full intensity from the left side, and "bloom" intensity from the right side. - -float AudioOutput::calcGain(float dotproduct, float distance) { - - float dotfactor = (dotproduct + 1.0f) / 2.0f; - float att; - - - // No distance attenuation - if (g.s.fAudioMaxDistVolume > 0.99f) { - att = qMin(1.0f, dotfactor + g.s.fAudioBloom); - } else if (distance < g.s.fAudioMinDistance) { - float bloomfac = g.s.fAudioBloom * (1.0f - distance/g.s.fAudioMinDistance); - - att = qMin(1.0f, bloomfac + dotfactor); - } else { - float datt; - - if (distance >= g.s.fAudioMaxDistance) { - datt = g.s.fAudioMaxDistVolume; - } else { - float mvol = g.s.fAudioMaxDistVolume; - if (mvol < 0.01f) - mvol = 0.01f; - - float drel = (distance-g.s.fAudioMinDistance) / (g.s.fAudioMaxDistance - g.s.fAudioMinDistance); - datt = powf(10.0f, log10f(mvol) * drel); - } - - att = datt * dotfactor; - } - return att; -} - -void AudioOutput::wipe() { - foreach(AudioOutputPlayer *aop, qmOutputs) - removeBuffer(aop); -} - -const float *AudioOutput::getSpeakerPos(unsigned int &speakers) { - if ((iChannels > 0) && fSpeakers) { - speakers = iChannels; - return fSpeakers; - } - return NULL; -} - -AudioSine *AudioOutput::playSine(float hz, float i, unsigned int frames, float volume) { - while ((iMixerFreq == 0) && isAlive()) {} - if (! iMixerFreq) - return NULL; - - qrwlOutputs.lockForWrite(); - AudioSine *as = new AudioSine(hz,i,frames, volume, iMixerFreq); - qmOutputs.insert(NULL, as); - qrwlOutputs.unlock(); - return as; -} - -AudioOutputSample *AudioOutput::playSample(const QString &filename, bool loop) { - QList packets = AudioOutputSample::getPacketsFromFile(filename); - if (packets.isEmpty()) - return NULL; - - while ((iMixerFreq == 0) && isAlive()) {} - if (! iMixerFreq) - return NULL; - - qrwlOutputs.lockForWrite(); - AudioOutputSample *aos = new AudioOutputSample(filename, packets, loop, iMixerFreq); - qmOutputs.insert(NULL, aos); - qrwlOutputs.unlock(); - return aos; - -} - -void AudioOutput::addFrameToBuffer(ClientPlayer *player, const QByteArray &qbaPacket, unsigned int iSeq) { - if (iChannels == 0) - return; - qrwlOutputs.lockForRead(); - AudioOutputSpeech *aop = dynamic_cast(qmOutputs.value(player)); - if (! aop) { - qrwlOutputs.unlock(); - - while ((iMixerFreq == 0) && isAlive()) {} - if (! iMixerFreq) - return; - - qrwlOutputs.lockForWrite(); - aop = new AudioOutputSpeech(player, iMixerFreq); - qmOutputs.replace(player,aop); - } - - aop->addFrameToBuffer(qbaPacket, iSeq); - - qrwlOutputs.unlock(); -} - -void AudioOutput::removeBuffer(const ClientPlayer *player) { - removeBuffer(qmOutputs.value(player)); -} - -void AudioOutput::removeBuffer(AudioOutputPlayer *aop) { - QWriteLocker locker(&qrwlOutputs); - QMultiHash::iterator i; - for (i=qmOutputs.begin(); i != qmOutputs.end(); ++i) { - if (i.value() == aop) { - qmOutputs.erase(i); - delete aop; - break; - } - } -} - -void AudioOutput::initializeMixer(const unsigned int *chanmasks, bool forceheadphone) { - if (fSpeakers) - delete fSpeakers; - if (bSpeakerPositional) - delete bSpeakerPositional; - if (fSpeakerVolume) - delete fSpeakerVolume; - - fSpeakers = new float[iChannels * 3]; - bSpeakerPositional = new bool[iChannels]; - fSpeakerVolume = new float[iChannels]; - - memset(fSpeakers, 0, sizeof(float) * iChannels * 3); - memset(bSpeakerPositional, 0, sizeof(bool) * iChannels); - - for (unsigned int i=0;i 1)) { - for (unsigned int i=0;i 0.0f) { - fSpeakers[3*i+0] /= d; - fSpeakers[3*i+1] /= d; - fSpeakers[3*i+2] /= d; - } - } - } - iSampleSize = iChannels * ((eSampleFormat == SampleFloat) ? sizeof(float) : sizeof(short)); - qWarning("AudioOutput: Initialized %d channel %d hz mixer", iChannels, iMixerFreq); -} - -bool AudioOutput::mix(void *outbuff, unsigned int nsamp) { - AudioOutputPlayer *aop; - QList qlMix; - QList qlDel; - - - if (g.s.fVolume < 0.01) - return false; - - const float mul = g.s.fVolume / 32768.0f; - const unsigned int nchan = iChannels; - - qrwlOutputs.lockForRead(); - foreach(aop, qmOutputs) { - if (! aop->needSamples(nsamp)) { - qlDel.append(aop); - } else { - qlMix.append(aop); - } - } - - if (! qlMix.isEmpty()) { - STACKVAR(float, speaker, iChannels*3); - STACKVAR(float, svol, iChannels); - - STACKVAR(float, fOutput, iChannels * nsamp); - float *output = (eSampleFormat == SampleFloat) ? reinterpret_cast(outbuff) : fOutput; - bool validListener = false; - - memset(output, 0, sizeof(float) * nsamp * iChannels); - - for (unsigned int i=0;i 1) && g.p->fetch() && (g.bPosTest || g.p->fPosition[0] != 0 || g.p->fPosition[1] != 0 || g.p->fPosition[2] != 0)) { - float front[3] = { g.p->fFront[0], g.p->fFront[1], g.p->fFront[2] }; - float top[3] = { g.p->fTop[0], g.p->fTop[1], g.p->fTop[2] }; - - if (fabs(front[0] * top[0] + front[1] * top[1] + front[2] * top[2]) > 0.01f) { - // Not perpendicular. Ditch Y and point top up. - front[1] = 0; - top[0] = 0; - top[1] = 1; - top[2] = 0; - } - - // Normalize - float flen = sqrtf(front[0]*front[0]+front[1]*front[1]+front[2]*front[2]); - float tlen = sqrtf(top[0]*top[0]+top[1]*top[1]+top[2]*top[2]); - - if (flen > 0.0f) { - front[0] /= flen; - front[1] /= flen; - front[2] /= flen; - } - - if (tlen > 0.0f) { - top[0] /= tlen; - top[1] /= tlen; - top[2] /= tlen; - } - - // Calculate right vector as front X top - float right[3] = {top[1]*front[2] - top[2]*front[1], top[2]*front[0] - top[0]*front[2], top[0]*front[1] - top[1] * front[0] }; - - /* - qWarning("Front: %f %f %f", front[0], front[1], front[2]); - qWarning("Top: %f %f %f", top[0], top[1], top[2]); - qWarning("Right: %f %f %f", right[0], right[1], right[2]); - */ - // Rotate speakers to match orientation - for (unsigned int i=0;ipfBuffer; - - if (validListener && ((aop->fPos[0] != 0.0f) || (aop->fPos[1] != 0.0f) || (aop->fPos[2] != 0.0f))) { - float dir[3] = { aop->fPos[0] - g.p->fPosition[0], aop->fPos[1] - g.p->fPosition[1], aop->fPos[2] - g.p->fPosition[2] }; - float len = sqrtf(dir[0] * dir[0] + dir[1] * dir[1] + dir[2] * dir[2]); - if (len > 0.0f) { - dir[0] /= len; - dir[1] /= len; - dir[2] /= len; - } - /* - qWarning("Voice pos: %f %f %f", aop->fPos[0], aop->fPos[1], aop->fPos[2]); - qWarning("Voice dir: %f %f %f", dir[0], dir[1], dir[2]); - */ - if (! aop->pfVolume) { - aop->pfVolume = new float[nchan]; - for (unsigned int s=0;spfVolume[s] = -1.0; - } - for (unsigned int s=0;spfVolume[s] >= 0.0) ? aop->pfVolume[s] : str; - const float inc = (str - old) / static_cast(nsamp); - aop->pfVolume[s] = str; - /* - qWarning("%d: Pos %f %f %f : Dot %f Len %f Str %f", s, speaker[s*3+0], speaker[s*3+1], speaker[s*3+2], dot, len, str); - */ - if ((old >= 0.00000001f) || (str >= 0.00000001f)) - for (unsigned int i=0;i(i)); - } - } else { - for (unsigned int s=0;s 1.0f ? 1.0f : output[i]); - else - for (unsigned int i=0;i(outbuff)[i] = static_cast(32768.f * (output[i] < -1.0f ? -1.0f : (output[i] > 1.0f ? 1.0f : output[i]))); - } - - qrwlOutputs.unlock(); - - foreach(aop, qlDel) - removeBuffer(aop); - - return (! qlMix.isEmpty()); -} - -AudioSine::AudioSine(float hz, float i, unsigned int frm, float vol, unsigned int freq) : AudioOutputPlayer(QLatin1String("Sine")) { - float hfreq = static_cast(freq) / 2.0f; - v = 0.0; - inc = static_cast(M_PI * hz / hfreq); - dinc = static_cast(M_PI * i / (hfreq * hfreq)); - volume = vol * 32768.f; - frames = frm; - cntr = 0; - tbin = 4; - - if (inc == 0.0) - g.iAudioPathTime = 0; -} - -AudioSine::~AudioSine() { -} - -bool AudioSine::needSamples(unsigned int snum) { - resizeBuffer(snum); - if (frames > 0) { - frames--; - - if (inc == 0.0) { - if (++cntr == 50) { - bSearch = true; - cntr = 0; - tbin *= 2; - if (tbin >= 64) - tbin = 4; - } - - AudioInputPtr ai = g.ai; - if (ai && bSearch && ai->iBestBin == tbin) { - bSearch = false; - g.iAudioPathTime = cntr; - } - - // FIXME: Not * snum, * something else - const float m = static_cast(M_PI * static_cast(tbin) / static_cast(snum)); - for (unsigned int i=0;i(i)); - - return true; - } - - float t = v; - - for (unsigned int i=0;i - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _AUDIOOUTPUT_H -#define _AUDIOOUTPUT_H - -// AudioOutput depends on Player being valid. This means it's important -// to removeBuffer from here BEFORE MainWindow gets any PlayerLeft -// messages. Any decendant player should feel free to remove unused -// AudioOutputPlayer objects; it's better to recreate them than -// having them use resources while unused. - -#ifndef SPEAKER_FRONT_LEFT -#define SPEAKER_FRONT_LEFT 0x1 -#define SPEAKER_FRONT_RIGHT 0x2 -#define SPEAKER_FRONT_CENTER 0x4 -#define SPEAKER_LOW_FREQUENCY 0x8 -#define SPEAKER_BACK_LEFT 0x10 -#define SPEAKER_BACK_RIGHT 0x20 -#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 -#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 -#define SPEAKER_BACK_CENTER 0x100 -#define SPEAKER_SIDE_LEFT 0x200 -#define SPEAKER_SIDE_RIGHT 0x400 -#define SPEAKER_TOP_CENTER 0x800 -#define SPEAKER_TOP_FRONT_LEFT 0x1000 -#define SPEAKER_TOP_FRONT_CENTER 0x2000 -#define SPEAKER_TOP_FRONT_RIGHT 0x4000 -#define SPEAKER_TOP_BACK_LEFT 0x8000 -#define SPEAKER_TOP_BACK_CENTER 0x10000 -#define SPEAKER_TOP_BACK_RIGHT 0x20000 -#endif - -#include "Audio.h" -#include "Settings.h" -#include "smallft.h" - -class AudioOutput; -class ClientPlayer; - -typedef boost::shared_ptr AudioOutputPtr; - -class AudioOutputRegistrar { - private: - Q_DISABLE_COPY(AudioOutputRegistrar) - public: - static QMap *qmNew; - static QString current; - static AudioOutputPtr newFromChoice(QString choice = QString()); - - const QString name; - int priority; - - AudioOutputRegistrar(const QString &n, int priority = 0); - virtual ~AudioOutputRegistrar(); - virtual AudioOutput *create() = 0; - virtual const QList getDeviceChoices() = 0; - virtual void setDeviceChoice(const QVariant &, Settings &) = 0; - virtual bool canMuteOthers() const; - virtual bool usesOutputDelay() const; -}; - -class AudioOutputPlayer : public QObject { - friend class AudioOutput; - private: - Q_OBJECT - Q_DISABLE_COPY(AudioOutputPlayer) - protected: - unsigned int iBufferSize; - void resizeBuffer(unsigned int newsize); - public: - AudioOutputPlayer(const QString name); - ~AudioOutputPlayer(); - const QString qsName; - float *pfBuffer; - float *pfVolume; - float fPos[3]; - virtual bool needSamples(unsigned int snum) = 0; -}; - -class AudioOutputSpeech : public AudioOutputPlayer { - friend class AudioOutput; - private: - Q_OBJECT - Q_DISABLE_COPY(AudioOutputSpeech) - protected: - unsigned int iBufferOffset; - unsigned int iBufferFilled; - unsigned int iOutputSize; - unsigned int iLastConsume; - unsigned int iFrameSize; - bool bLastAlive; - - SpeexResamplerState *srs; - - SpeexBits sbBits; - QMutex qmJitter; - JitterBuffer *jbJitter; - void *dsDecState; - int iMissCount; - - unsigned char ucFlags; - - static int speexCallback(SpeexBits *bits, void *state, void *data); - public: - int iMissedFrames; - ClientPlayer *p; - - virtual bool needSamples(unsigned int snum); - - void addFrameToBuffer(const QByteArray &, unsigned int iBaseSeq); - AudioOutputSpeech(ClientPlayer *, unsigned int freq); - ~AudioOutputSpeech(); -}; - -class AudioOutputSample : public AudioOutputPlayer { - friend class AudioOutput; - private: - Q_OBJECT - Q_DISABLE_COPY(AudioOutputSample) - protected: - unsigned int iBufferOffset; - unsigned int iBufferFilled; - unsigned int iOutputSize; - unsigned int iLastConsume; - unsigned int iFrameSize; - int iPacketIndex; - QList qlPackets; - SpeexBits sbBits; - void *dsDecState; - SpeexResamplerState *srs; - bool bLastAlive; - bool bLoop; - public: - static QList getPacketsFromFile(const QString &filename); - virtual bool needSamples(unsigned int snum); - AudioOutputSample(const QString &filename, const QList &packets, bool repeat, unsigned int freq); - ~AudioOutputSample(); -}; - -class AudioSine : public AudioOutputPlayer { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioSine) - protected: - float v; - float inc; - float dinc; - float volume; - unsigned int frames; - unsigned int cntr; - unsigned int tbin; - bool bSearch; - public: - virtual bool needSamples(unsigned int snum); - AudioSine(float hz, float i, unsigned int frm, float v, unsigned int freq); - ~AudioSine(); -}; - -class AudioOutput : public QThread { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioOutput) - private: - float *fSpeakers; - float *fSpeakerVolume; - bool *bSpeakerPositional; - protected: - enum { SampleShort, SampleFloat } eSampleFormat; - volatile bool bRunning; - unsigned int iFrameSize; - volatile unsigned int iMixerFreq; - unsigned int iChannels; - unsigned int iSampleSize; - QReadWriteLock qrwlOutputs; - QMultiHash qmOutputs; - - virtual void removeBuffer(AudioOutputPlayer *); - void initializeMixer(const unsigned int *chanmasks, bool forceheadphone = false); - bool mix(void *output, unsigned int nsamp); - public: - void wipe(); - - AudioOutput(); - ~AudioOutput(); - void addFrameToBuffer(ClientPlayer *, const QByteArray &, unsigned int iSeq); - void removeBuffer(const ClientPlayer *); - AudioSine *playSine(float hz, float i = 0.0, unsigned int frames = 0xffffff, float volume = 0.3f); - AudioOutputSample *playSample(const QString &filename, bool loop); - void run() = 0; - virtual bool isAlive() const; - const float *getSpeakerPos(unsigned int &nspeakers); - static float calcGain(float dotproduct, float distance); -}; - -#else -class AudioInput; -#endif diff -Nru mumble-1.2.3/src/mumble11x/AudioOutput.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioOutput.ui --- mumble-1.2.3/src/mumble11x/AudioOutput.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioOutput.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,597 +0,0 @@ - - AudioOutput - - - - 0 - 0 - 435 - 602 - - - - Form - - - - - - Interface - - - - - - System - - - qcbSystem - - - - - - - - 0 - 0 - - - - Output method for audio - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - - - Qt::Horizontal - - - QSizePolicy::Maximum - - - - 24 - 16 - - - - - - - - Device - - - qcbDevice - - - - - - - - 1 - 0 - - - - Output device for audio - - - <b>This is the output device to use for audio.</b> - - - QComboBox::AdjustToMinimumContentsLength - - - 16 - - - - - - - Positional Audio - - - - - - - - - - Audio Output - - - - - - Default &Jitter Buffer - - - qsJitter - - - - - - - Safety margin for jitter buffer - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - - - 1 - - - 5 - - - 2 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - Volume - - - qsVolume - - - - - - - Volume of incoming speech - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - - - 0 - - - 200 - - - 100 - - - Qt::Horizontal - - - - - - - TextLabel - - - - - - - Output Delay - - - qsDelay - - - - - - - Amount of data to buffer - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - 1 - - - 10 - - - 3 - - - Qt::Horizontal - - - - - - - TextLabel - - - - - - - TextLabel - - - - - - - Other Applications - - - qsVolume - - - - - - - Volume of other applications during speech - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - - - 0 - - - 100 - - - Qt::Horizontal - - - - - - - - - - true - - - Positional Audio - - - - - - The connected "speakers" are actually headphones. - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - - - Headphones - - - - - - - Minimum Distance - - - qsMinDistance - - - - - - - Minimum distance to player before sound volume decreases - - - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - - - 10 - - - 200 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - Maximum Distance - - - qsMaxDistance - - - - - - - Maximum distance, beyond which speech volume won't decrease - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - - - 10 - - - 1000 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - Minimum Volume - - - qsMaxDistVolume - - - - - - - Factor for sound volume decrease - - - What should the volume be at the maximum distance? - - - 100 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - Bloom - - - qsMaxDistVolume - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - Factor for sound volume increase - - - How much should sound volume increase for sources that are really close? - - - 0 - - - 75 - - - Qt::Horizontal - - - - - - - - - - Loopback Test - - - - - - Delay Variance - - - qsPacketDelay - - - - - - - Variance in packet latency - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - - - 100 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - Packet Loss - - - qsPacketLoss - - - - - - - Packet loss for loopback mode - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - - - 50 - - - 5 - - - 20 - - - Qt::Horizontal - - - - - - - - 40 - 0 - - - - TextLabel - - - - - - - &Loopback - - - qcbLoopback - - - - - - - Desired loopback mode - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/AudioStats.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioStats.cpp --- mumble-1.2.3/src/mumble11x/AudioStats.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioStats.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,428 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "AudioStats.h" -#include "AudioInput.h" -#include "Global.h" -#include "smallft.h" - -AudioBar::AudioBar(QWidget *p) : QWidget(p) { - qcBelow = Qt::yellow; - qcAbove = Qt::red; - qcInside = Qt::green; - - iMin = 0; - iMax = 32768; - iBelow = 2000; - iAbove = 22000; - iValue = 1000; - iPeak = -1; - setMinimumSize(100,20); - - qlReplacableColors << Qt::yellow << Qt::red << Qt::green << Qt::blue; - qlReplacementBrushes << Qt::BDiagPattern << Qt::DiagCrossPattern << Qt::NoBrush << Qt::FDiagPattern; -} - -void AudioBar::paintEvent(QPaintEvent *) { - QPainter p(this); - - if (isEnabled()) { - qcBelow.setAlphaF(1.0f); - qcAbove.setAlphaF(1.0f); - qcInside.setAlphaF(1.0f); - } else { - qcBelow.setAlphaF(0.5f); - qcAbove.setAlphaF(0.5f); - qcInside.setAlphaF(0.5f); - } - - if (iBelow > iAbove) - iBelow = iAbove; - - if (iValue < iMin) - iValue = iMin; - else if (iValue > iMax) - iValue = iMax; - - float scale = static_cast(width()) / static_cast(iMax - iMin); - int h = height(); - - int val = iroundf(static_cast(iValue) * scale + 0.5f); - int below = iroundf(static_cast(iBelow) * scale + 0.5f); - int above = iroundf(static_cast(iAbove) * scale + 0.5f); - int max = iroundf(static_cast(iMax) * scale + 0.5f); - int min = iroundf(static_cast(iMin) * scale + 0.5f); - int peak = iroundf(static_cast(iPeak) * scale + 0.5f); - - if (g.s.bHighContrast) { - // Draw monochrome representation - QColor fg = QPalette().foreground().color(); - - p.fillRect(0, 0, below, h, QBrush(fg, qlReplacementBrushes.value(qlReplacableColors.indexOf(qcBelow), Qt::CrossPattern))); - p.fillRect(below, 0, above - below, h, QBrush(fg, qlReplacementBrushes.value(qlReplacableColors.indexOf(qcInside), Qt::NoBrush))); - p.fillRect(above, 0, max - above, h, QBrush(fg, qlReplacementBrushes.value(qlReplacableColors.indexOf(qcAbove), Qt::CrossPattern))); - p.fillRect(0, 0, val, h, QBrush(fg, Qt::SolidPattern)); - - p.drawRect(0, 0, max - 1, h - 1); - p.drawLine(below, 0, below, h); - p.drawLine(above, 0, above, h); - } else { - if (val <= below) { - p.fillRect(0, 0, val, h, qcBelow); - p.fillRect(val, 0, below-val, h, qcBelow.darker(300)); - p.fillRect(below, 0, above-below, h, qcInside.darker(300)); - p.fillRect(above, 0, max-above, h, qcAbove.darker(300)); - } else if (val <= above) { - p.fillRect(0, 0, below, h, qcBelow); - p.fillRect(below, 0, val-below, h, qcInside); - p.fillRect(val, 0, above-val, h, qcInside.darker(300)); - p.fillRect(above, 0, max-above, h, qcAbove.darker(300)); - } else { - p.fillRect(0, 0, below, h, qcBelow); - p.fillRect(below, 0, above-below, h, qcInside); - p.fillRect(above, 0, val-above, h, qcAbove); - p.fillRect(val, 0, max-val, h, qcAbove.darker(300)); - } - - if ((peak >= min) && (peak <= max)) { - if (peak <= below) - p.setPen(qcBelow.lighter(150)); - else if (peak <= above) - p.setPen(qcInside.lighter(150)); - else - p.setPen(qcAbove.lighter(150)); - p.drawLine(peak, 0, peak, h); - } - } - -} - -AudioEchoWidget::AudioEchoWidget(QWidget *p) : QGLWidget(p) { - setMinimumSize(100, 60); -} - -void AudioEchoWidget::initializeGL() { - glDisable(GL_LIGHTING); - - glClearColor(0,0,0,0); - glShadeModel(GL_SMOOTH); - - glEnable(GL_COLOR_MATERIAL); - glDisable(GL_CULL_FACE); -} - -void AudioEchoWidget::resizeGL(int w, int h) { - glViewport(0, 0, w, h); - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); -} - -static inline void mapEchoToColor(float echo) { - bool neg = (echo < 0.0f); - echo = fabsf(echo); - - float a, b, c; - - if (echo > 1.0f) { - echo = 1.0f; - c = 0.5f; - } else { - c = 0.0f; - } - - if (echo < 0.5f) { - a = echo * 2.0f; - b = 0; - } else { - a = 1; - b = (echo - 0.5f) * 2.0f; - } - - if (neg) - glColor3f(a, b, c); - else - glColor3f(c, b, a); -} - -#define WGT(x,y) st->W[(y)*N + 2*(x)+1] - -void AudioEchoWidget::paintGL() { - AudioInputPtr ai = g.ai; - if (! ai || ! ai->sesEcho) - return; - - ai->qmSpeex.lock(); - - spx_int32_t sz; - speex_echo_ctl(ai->sesEcho, SPEEX_ECHO_GET_IMPULSE_RESPONSE_SIZE, &sz); - - STACKVAR(spx_int32_t, w, sz); - STACKVAR(float, W, sz); - - speex_echo_ctl(ai->sesEcho, SPEEX_ECHO_GET_IMPULSE_RESPONSE, w); - - ai->qmSpeex.unlock(); - - int N = 160; - int n = 2 * N; - int M = sz / n; - - drft_lookup d; - mumble_drft_init(&d, n); - - for (int j=0;j(w[j*n+i]) / static_cast(n); - mumble_drft_forward(&d, & W[j*n]); - } - - mumble_drft_clear(&d); - - float xscale = 1.0f / static_cast(N); - float yscale = 1.0f / static_cast(M); - - glBegin(GL_QUADS); - - for (int j = 0; j < M; j++) { - for (int i=1;i < N; i++) { - float xa = static_cast(i) * xscale; - float ya = static_cast(j) * yscale; - - float xb = xa + xscale; - float yb = ya + yscale; - - mapEchoToColor(sqrtf(W[j*n+2*i]*W[j*n+2*i]+W[j*n+2*i-1]*W[j*n+2*i-1]) / 65536.f); - glVertex2f(xa, ya); - glVertex2f(xb, ya); - glVertex2f(xb, yb); - glVertex2f(xa, yb); - } - } - - glEnd(); - - glBegin(GL_LINE_STRIP); - glColor3f(1.0f, 0.0f, 1.0f); - xscale = 1.0f / (2.0f*static_cast(n)); - yscale = 1.0f / (200.0f * 32767.0f); - for (int i=0;i<2*n;i++) { - glVertex2f(static_cast(i)*xscale, 0.5f + static_cast(w[i]) * yscale); - } - glEnd(); -} - -AudioNoiseWidget::AudioNoiseWidget(QWidget *p) : QWidget(p) { - setMinimumSize(100,60); -} - -void AudioNoiseWidget::paintEvent(QPaintEvent *) { - QPainter paint(this); - QPalette pal; - - paint.fillRect(rect(), pal.color(QPalette::Background)); - - AudioInputPtr ai = g.ai; - if (ai.get() == NULL || ! ai->sppPreprocess) - return; - - QPolygonF poly; - - ai->qmSpeex.lock(); - - spx_int32_t ps_size = 0; - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_PSD_SIZE, &ps_size); - - STACKVAR(spx_int32_t, noise, ps_size); - STACKVAR(spx_int32_t, ps, ps_size); - - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_PSD, ps); - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_NOISE_PSD, noise); - - ai->qmSpeex.unlock(); - - qreal sx, sy; - - sx = (static_cast(width()) - 1.0f) / static_cast(ps_size); - sy = static_cast(height()) - 1.0f; - - poly << QPointF(0.0f, height() - 1); - float fftmul = 1.0 / (32768.0); - for (int i=0; i < ps_size; i++) { - qreal xp, yp; - xp = i * sx; - yp = sqrtf(sqrtf(static_cast(noise[i]))) - 1.0f; - yp = yp * fftmul; - yp = qMin(yp * 3000.0f, 1.0f); - yp = (1 - yp) * sy; - poly << QPointF(xp, yp); - } - - poly << QPointF(width() - 1, height() - 1); - poly << QPointF(0.0f, height() - 1); - - paint.setPen(Qt::blue); - paint.setBrush(Qt::blue); - paint.drawPolygon(poly); - - poly.clear(); - - for (int i=0;i < ps_size; i++) { - qreal xp, yp; - xp = i * sx; - yp = sqrtf(sqrtf(static_cast(ps[i]))) - 1.0f; - yp = yp * fftmul; - yp = qMin(yp * 3000.0, 1.0); - yp = (1 - yp) * sy; - poly << QPointF(xp, yp); - } - - paint.setPen(Qt::red); - paint.drawPolyline(poly); -} - -AudioStats::AudioStats(QWidget *p) : QDialog(p) { - setAttribute(Qt::WA_DeleteOnClose, true); - - qtTick = new QTimer(this); - qtTick->setObjectName(QLatin1String("Tick")); - qtTick->start(50); - - setupUi(this); - AudioInputPtr ai = g.ai; - - if (ai && ai->sesEcho) { - qgbEcho->setVisible(true); - } else { - qgbEcho->setVisible(false); - } - - - bTalking = false; - - abSpeech->iPeak = -1; - abSpeech->qcBelow = Qt::red; - abSpeech->qcInside = Qt::yellow; - abSpeech->qcAbove = Qt::green; - - on_Tick_timeout(); -} - -AudioStats::~AudioStats() { -} - -void AudioStats::on_Tick_timeout() { - AudioInputPtr ai = g.ai; - - if (ai.get() == NULL || ! ai->sppPreprocess) - return; - - bool nTalking = ai->isTransmitting(); - - QString txt; - - txt.sprintf("%06.2f dB",ai->dPeakMic); - qlMicLevel->setText(txt); - - txt.sprintf("%06.2f dB",ai->dPeakSpeaker); - qlSpeakerLevel->setText(txt); - - txt.sprintf("%06.2f dB",ai->dPeakSignal); - qlSignalLevel->setText(txt); - - spx_int32_t ps_size = 0; - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_PSD_SIZE, &ps_size); - - STACKVAR(spx_int32_t, noise, ps_size); - STACKVAR(spx_int32_t, ps, ps_size); - - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_PSD, ps); - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_NOISE_PSD, noise); - - float s = 0.0f; - float n = 0.0001f; - - int start = (ps_size * 300) / SAMPLE_RATE; - int stop = (ps_size * 2000) / SAMPLE_RATE; - - for (int i=start;i(ps[i])); - n += sqrtf(static_cast(noise[i])); - } - - txt.sprintf("%06.3f",s / n); - qlMicSNR->setText(txt); - - spx_int32_t v; - speex_preprocess_ctl(ai->sppPreprocess, SPEEX_PREPROCESS_GET_AGC_GAIN, &v); - float fv = powf(10.0f, (static_cast(v) / 20.0f)); - txt.sprintf("%03.0f%%",100.0f / fv); - qlMicVolume->setText(txt); - - txt.sprintf("%03.0f%%",ai->fSpeechProb * 100.0f); - qlSpeechProb->setText(txt); - - txt.sprintf("%04.1f kbit/s",static_cast(ai->iBitrate) / 1000.0f); - qlBitrate->setText(txt); - - if (nTalking != bTalking) { - bTalking = nTalking; - QFont f = qlSpeechProb->font(); - f.setBold(bTalking); - qlSpeechProb->setFont(f); - } - - if (g.uiDoublePush > 1000000) - txt = tr(">1000 ms"); - else - txt.sprintf("%04llu ms",g.uiDoublePush / 1000); - qlDoublePush->setText(txt); - - abSpeech->iBelow = iroundf(g.s.fVADmin * 32767.0f + 0.5f); - abSpeech->iAbove = iroundf(g.s.fVADmax * 32767.0f + 0.5f); - - if (g.s.vsVAD == Settings::Amplitude) { -#ifndef COMPAT_CLIENT - abSpeech->iValue = iroundf((32767.f/96.0f) * (96.0f + ai->dPeakCleanMic) + 0.5f); -#else - abSpeech->iValue = iroundf((32767.f/96.0f) * (96.0f + ai->dPeakMic) + 0.5f); -#endif - } else { - abSpeech->iValue = iroundf(ai->fSpeechProb * 32767.0f + 0.5f); - } - - abSpeech->update(); - - anwNoise->update(); - if (aewEcho) - aewEcho->updateGL(); -} diff -Nru mumble-1.2.3/src/mumble11x/AudioStats.h mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioStats.h --- mumble-1.2.3/src/mumble11x/AudioStats.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioStats.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _AUDIOSTATS_H -#define _AUDIOSTATS_H - -#include "mumble_pch.hpp" - -class AudioBar : public QWidget { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioBar) - protected: - void paintEvent(QPaintEvent *event); - public: - AudioBar(QWidget *parent = NULL); - int iMin, iMax; - int iBelow, iAbove; - int iValue, iPeak; - QColor qcBelow, qcInside, qcAbove; - - QList qlReplacableColors; - QList qlReplacementBrushes; -}; - -class AudioEchoWidget : public QGLWidget { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioEchoWidget) - public: - AudioEchoWidget(QWidget *parent); - protected: - void initializeGL(); - void resizeGL(int w, int h); - void paintGL(); -}; - -class AudioNoiseWidget : public QWidget { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioNoiseWidget) - public: - AudioNoiseWidget(QWidget *parent); - protected slots: - void paintEvent(QPaintEvent *event); -}; - -#include "ui_AudioStats.h" - -class AudioStats : public QDialog, public Ui::AudioStats { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioStats) - protected: - QTimer *qtTick; - bool bTalking; - public: - AudioStats(QWidget *parent); - ~AudioStats(); - public slots: - void on_Tick_timeout(); -}; - -#else -class AudioStats; -#endif diff -Nru mumble-1.2.3/src/mumble11x/AudioStats.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioStats.ui --- mumble-1.2.3/src/mumble11x/AudioStats.ui 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioStats.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ - - - AudioStats - - - - 0 - 0 - 598 - 548 - - - - Audio Statistics - - - - - - - - Input Levels - - - - - - Peak microphone level - - - - - - - Peak power in last frame - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - - - - - - - Peak speaker level - - - - - - - Peak power in last frame - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - - - - - - - - - - Peak clean level - - - - - - - Peak power in last frame - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - - - - - - - - - Signal Analysis - - - - - - Microphone power - - - - - - - How close the current input level is to ideal - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - - - - - - Signal-To-Noise ratio - - - - - - - Signal-To-Noise ratio from the microphone - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - - - - - - - - - - Speech Probability - - - - - - - Probability of speech - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - - - - - - - - - - - - - - - Configuration feedback - - - - - - Current audio bitrate - - - - - - - - 20 - 0 - - - - Bitrate of last frame - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - - - - - - DoublePush interval - - - - - - - - 20 - 0 - - - - Time between last two Push-To-Talk presses - - - - - - - - - - Speech Detection - - - - - - - Current speech detection chance - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - Signal and noise power spectrum - - - - - - Power spectrum of input signal and noise estimate - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - - - - - - - - - - - 0 - 0 - - - - Echo Analysis - - - - - - - 0 - 0 - - - - Weights of the echo canceller - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - - - - - - - - AudioBar - QWidget -
AudioStats.h
- 1 -
- - AudioNoiseWidget - QWidget -
AudioStats.h
- 1 -
- - AudioEchoWidget - QWidget -
AudioStats.h
- 1 -
-
- - -
diff -Nru mumble-1.2.3/src/mumble11x/AudioWizard.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioWizard.cpp --- mumble-1.2.3/src/mumble11x/AudioWizard.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioWizard.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,902 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "AudioWizard.h" -#include "AudioInput.h" -#include "Global.h" -#include "Settings.h" -#include "MainWindow.h" - -CompletablePage::CompletablePage(QWizard *p) : QWizardPage(p) { - bComplete = true; -} - -void CompletablePage::setComplete(bool b) { - bComplete = b; - emit completeChanged(); -} - -bool CompletablePage::isComplete() const { - return bComplete; -} - -AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { - bInit = true; - - setOption(QWizard::NoCancelButton, false); -#ifndef Q_OS_MAC - resize(700, 500); -#endif - - addPage(qwpIntro = introPage()); - addPage(qwpDevice = devicePage()); - addPage(qwpDeviceTuning = deviceTuningPage()); - addPage(qwpVolume = volumePage()); - addPage(qwpTrigger = triggerPage()); - addPage(qwpPositional = positionalPage()); - addPage(qwpDone = donePage()); - setWindowTitle(tr("Audio Tuning Wizard")); - - updateTriggerWidgets(qrPTT->isChecked()); - - sOldSettings = g.s; - - g.s.lmLoopMode = Settings::Local; - g.s.dPacketLoss = 0.0; - g.s.dMaxPacketDelay = 0.0; - g.s.bMute = true; - g.s.bDeaf = false; - - g.s.atTransmit = Settings::Continous; - bTransmitChanged = false; - - iMaxPeak = 0; - iTicks = 0; - - g.bEchoTest = true; - - ticker = new QTimer(this); - ticker->setObjectName(QLatin1String("Ticker")); - - setObjectName(QLatin1String("Wizard")); - connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(showPage(int))); - - QMetaObject::connectSlotsByName(this); - bInit = false; - - ticker->setSingleShot(false); - ticker->start(20); -} - -bool AudioWizard::eventFilter(QObject *obj, QEvent *evt) { - if ((evt->type() == QEvent::MouseButtonPress) || - (evt->type() == QEvent::MouseMove)) { - QMouseEvent *qme = dynamic_cast(evt); - if (qme) { - if (qme->buttons() & Qt::LeftButton) { - QPointF qpf = qgvView->mapToScene(qme->pos()); - fX = static_cast(qpf.x()); - fY = static_cast(qpf.y()); - } - } - } - return QWizard::eventFilter(obj, evt); -} - -CompletablePage *AudioWizard::introPage() { - CompletablePage *qwpage = new CompletablePage(this); - qwpage->setTitle(tr("Introduction")); - qwpage->setSubTitle(tr("Welcome to the Mumble Audio Wizard")); - QVBoxLayout *v=new QVBoxLayout(qwpage); - QLabel *label=new QLabel(tr("This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct " - "parameters for sound processing in Mumble."), qwpage); - label->setWordWrap(true); - v->addWidget(label); - - label=new QLabel(tr("Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the " - "server."), qwpage); - label->setWordWrap(true); - v->addWidget(label); - - return qwpage; -} - -CompletablePage *AudioWizard::donePage() { - CompletablePage *qwpage = new CompletablePage(this); - qwpage->setTitle(tr("Finished")); - qwpage->setSubTitle(tr("Enjoy using Mumble")); - QVBoxLayout *v=new QVBoxLayout(qwpage); - - QLabel *label=new QLabel(tr("Congratulations. You should now be ready to enjoy a richer sound experience with Mumble."), qwpage); - label->setWordWrap(true); - v->addWidget(label); - - label=new QLabel(tr("Mumble is under continuous development, and the development team wants to focus on the features " - "that benefit the most users. To this end, Mumble supports submitting anonymous statistics " - "about your configuration to the developers. These statistcs are essential for future development, and also " - "make sure the features you use aren't deprecated.")); - label->setWordWrap(true); - v->addWidget(label); - - qcbUsage = new QCheckBox(tr("Submit anonymous statistics to the Mumble project")); - qcbUsage->setChecked(g.s.bUsage); - v->addWidget(qcbUsage); - - return qwpage; -} - -CompletablePage *AudioWizard::devicePage() { - CompletablePage *qwpage = new CompletablePage(this); - QLabel *l; - QGridLayout *grid; - - qwpage->setTitle(tr("Device selection")); - qwpage->setSubTitle(tr("Selecting the input and output device to use with Mumble.")); - - QGroupBox *qgbInput = new QGroupBox(tr("Input device"), qwpage); - grid = new QGridLayout(qgbInput); - - l = new QLabel(tr("This is the device your microphone is connected to."), qgbInput); - l->setWordWrap(true); - grid->addWidget(l, 0, 0, 1, 2); - - qcbInput = new QComboBox(qgbInput); - if (AudioInputRegistrar::qmNew) { - foreach(AudioInputRegistrar *air, *AudioInputRegistrar::qmNew) { - qcbInput->addItem(air->name); - if (air->name == AudioInputRegistrar::current) - qcbInput->setCurrentIndex(qcbInput->count() - 1); - QList ql= air->getDeviceChoices(); - } - } - - l = new QLabel(tr("System"), qgbInput); - l->setBuddy(qcbInput); - - qcbInput->setToolTip(tr("Input method for audio")); - qcbInput->setWhatsThis(tr("This is the input method to use for audio.
Most likely you want to use DirectSound.")); - qcbInput->setObjectName(QLatin1String("Input")); - - if (qcbInput->count() < 2) { - qcbInput->setEnabled(false); - } - - grid->addWidget(l, 1, 0); - grid->addWidget(qcbInput, 1, 1); - - - qcbInputDevice = new QComboBox(qgbInput); - l = new QLabel(tr("Device"), qgbInput); - l->setBuddy(qcbInputDevice); - - qcbInputDevice->setToolTip(tr("Input device to use")); - qcbInputDevice->setWhatsThis(tr("Selects which sound card to use for audio input.")); - qcbInputDevice->setObjectName(QLatin1String("InputDevice")); - - grid->addWidget(l, 2, 0); - grid->addWidget(qcbInputDevice, 2, 1); - - qcbEcho = new QCheckBox(tr("Use echo cancellation"), qgbInput); - qcbEcho->setToolTip(tr("Cancel echo from headset or speakers.")); - qcbEcho->setWhatsThis(tr("This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets.")); - qcbEcho->setObjectName(QLatin1String("Echo")); - qcbEcho->setChecked(g.s.bEcho); - grid->addWidget(qcbEcho, 3, 1); - - QGroupBox *qgbOutput = new QGroupBox(tr("Output device"), qwpage); - grid = new QGridLayout(qgbOutput); - - l = new QLabel(tr("This is the device your speakers or headphones are connected to."), qgbOutput); - l->setWordWrap(true); - grid->addWidget(l, 0, 0, 1, 2); - - qcbOutput = new QComboBox(qgbOutput); - if (AudioOutputRegistrar::qmNew) { - foreach(AudioOutputRegistrar *aor, *AudioOutputRegistrar::qmNew) { - qcbOutput->addItem(aor->name); - if (aor->name == AudioOutputRegistrar::current) { - qcbOutput->setCurrentIndex(qcbOutput->count() - 1); - bDelay = aor->usesOutputDelay(); - } - QList ql= aor->getDeviceChoices(); - } - } - - l = new QLabel(tr("System"), qgbOutput); - l->setBuddy(qcbOutput); - - qcbOutput->setToolTip(tr("Output method for audio")); - qcbOutput->setWhatsThis(tr("This is the Output method to use for audio.
Most likely you want to use DirectSound.")); - qcbOutput->setObjectName(QLatin1String("Output")); - - if (qcbOutput->count() < 2) { - qcbOutput->setEnabled(false); - } - - grid->addWidget(l, 1, 0); - grid->addWidget(qcbOutput, 1, 1); - - - qcbOutputDevice = new QComboBox(qgbOutput); - l = new QLabel(tr("Device"), qgbOutput); - l->setBuddy(qcbOutputDevice); - - qcbOutputDevice->setToolTip(tr("Output device to use")); - qcbOutputDevice->setWhatsThis(tr("Selects which sound card to use for audio Output.")); - qcbOutputDevice->setObjectName(QLatin1String("OutputDevice")); - - grid->addWidget(l, 2, 0); - grid->addWidget(qcbOutputDevice, 2, 1); - - qcbPositional = new QCheckBox(tr("Enable positional audio"), qgbOutput); - qcbPositional->setToolTip(tr("Allows positioning of sound.")); - qcbPositional->setWhatsThis(tr("This allows Mumble to use positional audio to place voices.")); - qcbPositional->setObjectName(QLatin1String("Positional")); - qcbPositional->setChecked(g.s.bPositionalAudio); - grid->addWidget(qcbPositional, 3, 1); - - QVBoxLayout *v=new QVBoxLayout(qwpage); - v->addWidget(qgbInput); - v->addWidget(qgbOutput); - - on_Input_activated(qcbInput->currentIndex()); - on_Output_activated(qcbOutput->currentIndex()); - - return qwpage; -} - -CompletablePage *AudioWizard::positionalPage() { - CompletablePage *qwpage = new CompletablePage(this); - qwpage->setTitle(tr("Positional Audio")); - qwpage->setSubTitle(tr("Adjusting attenuation of positional audio.")); - - QVBoxLayout *v = new QVBoxLayout(qwpage); - QLabel *l; - - l = new QLabel(tr("Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the " - "volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker " - "configuration being correct in your operating system, so a test is done here."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - l = new QLabel(tr("The graph below shows the position of you, the speakers and a moving sound source as if seen from above. You should hear the audio move between the channels."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - qcbHeadphone = new QCheckBox(tr("Use headphones"), qwpage); - qcbHeadphone->setToolTip(tr("Use headphones instead of speakers.")); - qcbHeadphone->setWhatsThis(tr("This ignores the OS speaker configuration and configures the positioning for headphones instead.")); - qcbHeadphone->setObjectName(QLatin1String("Headphone")); - qcbHeadphone->setChecked(g.s.bPositionalHeadphone); - v->addWidget(qcbHeadphone); - - - fAngle = 0.0f; - fX = fY = 0.0f; - qgsScene = NULL; - qgiSource = NULL; - aosSource = NULL; - qgvView = new QGraphicsView(qwpage); - qgvView->scale(1.0f, -1.0f); - qgvView->viewport()->installEventFilter(this); - - v->addWidget(qgvView); - - return qwpage; -} - -CompletablePage *AudioWizard::volumePage() { - CompletablePage *qwpage = new CompletablePage(this); - qwpage->setTitle(tr("Volume tuning")); - qwpage->setSubTitle(tr("Tuning microphone hardware volume to optimal settings.")); - - QVBoxLayout *v = new QVBoxLayout(qwpage); - QLabel *l; - - l = new QLabel(tr("Open your sound control panel and go to the recording settings. " - "Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a \"Microphone boost\" make sure it's checked."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - l = new QLabel(tr("Speak loudly, as when you are annoyed or excited. " - "Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green " - "but not the red " - "zone while you speak."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - abAmplify = new AudioBar(qwpage); - abAmplify->qcBelow = Qt::blue; - v->addWidget(abAmplify); - - l = new QLabel(tr("Now talk softly, as you would when talking late at night and you don't want to disturb anyone. " - "Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - qsMaxAmp = new QSlider(Qt::Horizontal, qwpage); - qsMaxAmp->setRange(1, 32767); - qsMaxAmp->setSingleStep(100); - qsMaxAmp->setPageStep(1000); - qsMaxAmp->setValue(g.s.iMinLoudness); - qsMaxAmp->setObjectName(QLatin1String("MaxAmp")); - - v->addWidget(qsMaxAmp); - - return qwpage; -} - -CompletablePage *AudioWizard::triggerPage() { - CompletablePage *qwpage = new CompletablePage(this); - qwpage->setTitle(tr("Voice Activity Detection")); - qwpage->setSubTitle(tr("Letting Mumble figure out when you're talking and when you're silent.")); - - QHBoxLayout *h; - QVBoxLayout *v; - - v= new QVBoxLayout(qwpage); - QLabel *l; - - l = new QLabel(tr("This will help Mumble figure out when you are talking. The first step is selecting which data value to use."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - h = new QHBoxLayout; - - qrPTT = new QRadioButton(tr("Push To Talk:"), qwpage); - qrPTT->setObjectName(QLatin1String("PTT")); - h->addWidget(qrPTT); - - skwPTT = new ShortcutKeyWidget(qwpage); - skwPTT->setObjectName(QLatin1String("PTTKey")); - foreach(const Shortcut &s, g.s.qlShortcuts) { - if (s.iIndex == g.mw->gsPushTalk->idx) { - skwPTT->setShortcut(s.qlButtons); - break; - } - } - h->addWidget(skwPTT); - - v->addLayout(h); - - qrSNR = new QRadioButton(tr("Signal-To-Noise ratio"), qwpage); - qrSNR->setObjectName(QLatin1String("SNR")); - v->addWidget(qrSNR); - - qrAmplitude = new QRadioButton(tr("Raw amplitude from input"), qwpage); - qrAmplitude->setObjectName(QLatin1String("Amplitude")); - v->addWidget(qrAmplitude); - - if (g.s.atTransmit == Settings::PushToTalk) - qrPTT->setChecked(true); - else if (g.s.vsVAD == Settings::Amplitude) - qrAmplitude->setChecked(true); - else - qrSNR->setChecked(true); - - qwVAD = new QWidget(qwpage); - v->addWidget(qwVAD); - - v = new QVBoxLayout(qwVAD); - - abVAD = new AudioBar(qwpage); - abVAD->qcBelow = Qt::red; - abVAD->qcInside = Qt::yellow; - abVAD->qcAbove = Qt::green; - - v->addWidget(abVAD); - - l = new QLabel(tr("Next you need to adjust the following two sliders. The first few utterances you say should end up in the " - "green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're " - "not talking, everything should be in the red (definitively not speech)."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - qsMinVAD = new QSlider(Qt::Horizontal, qwpage); - qsMinVAD->setRange(1, 32767); - qsMinVAD->setSingleStep(100); - qsMinVAD->setPageStep(1000); - qsMinVAD->setValue(static_cast(g.s.fVADmin * 32767.0)); - qsMinVAD->setObjectName(QLatin1String("VADmin")); - - v->addWidget(qsMinVAD); - - qsMaxVAD = new QSlider(Qt::Horizontal, qwpage); - qsMaxVAD->setRange(1, 32767); - qsMaxVAD->setSingleStep(100); - qsMaxVAD->setPageStep(1000); - qsMaxVAD->setValue(static_cast(g.s.fVADmax * 32767)); - qsMaxVAD->setObjectName(QLatin1String("VADmax")); - - v->addWidget(qsMaxVAD); - - l = new QLabel(tr("Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before " - "it breaks off. This allows you to catch your breath while speaking."), qwpage); - l->setWordWrap(true); - v->addWidget(l); - - h = new QHBoxLayout; - - qsHoldtime = new QSlider(Qt::Horizontal, qwpage); - qsHoldtime->setRange(20, 250); - qsHoldtime->setSingleStep(5); - qsHoldtime->setPageStep(25); - qsHoldtime->setValue(g.s.iVoiceHold); - qsHoldtime->setObjectName(QLatin1String("Holdtime")); - - qlHoldtime = new QLabel(qwpage); - qlHoldtime->setMinimumWidth(40); - on_Holdtime_valueChanged(qsHoldtime->value()); - - h->addWidget(qsHoldtime); - h->addWidget(qlHoldtime); - - v->addLayout(h); - - return qwpage; -} - -CompletablePage *AudioWizard::deviceTuningPage() { - CompletablePage *qwpage = new CompletablePage(this); - qwpage->setTitle(tr("Device tuning")); - qwpage->setSubTitle(tr("Changing hardware output delays to their minimum value.")); - - QGridLayout *grid = new QGridLayout(qwpage); - - QLabel *l = new QLabel(tr("To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. " - "However, many soundcards report that they require a much smaller buffer than what they can actually work with, " - "so the only way to set this value is to try and fail."), qwpage); - l->setWordWrap(true); - grid->addWidget(l, 0, 0, 1, 2); - - l = new QLabel(tr("You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives no interruptions or jitter " - "in the sound. Please note that local echo is disabled during this test to " - "improve audio path recognition."), qwpage); - l->setWordWrap(true); - grid->addWidget(l, 1, 0, 1, 2); - - qsOutputDelay = new QSlider(Qt::Horizontal, qwpage); - qsOutputDelay->setRange(1, 6); - - qsOutputDelay->setSingleStep(1); - qsOutputDelay->setPageStep(2); - qsOutputDelay->setValue(g.s.iOutputDelay); - qsOutputDelay->setObjectName(QLatin1String("OutputDelay")); - - qlOutputDelay=new QLabel(qwpage); - qlOutputDelay->setMinimumWidth(30); - on_OutputDelay_valueChanged(qsOutputDelay->value()); - qsOutputDelay->setToolTip(tr("Amount of data to buffer.")); - qsOutputDelay->setWhatsThis(tr("This sets the amount of data to prebuffer in the output buffer. " - "Experiment with different values and set it to the lowest which doesn't " - "cause rapid jitter in the sound.")); - grid->addWidget(qsOutputDelay, 2, 1); - grid->addWidget(qlOutputDelay, 2, 2); - - l = new QLabel(tr("If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path " - "delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in " - "a matching incoming buffer."), qwpage); - l->setWordWrap(true); - grid->addWidget(l, 3, 0, 1, 2); - - qlAudioPath = new QLabel(qwpage); - grid->addWidget(qlAudioPath, 4, 0, 1, 2); - - return qwpage; -} - -void AudioWizard::on_Input_activated(int) { - qcbInputDevice->clear(); - - if (! AudioInputRegistrar::qmNew) - return; - - AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbInput->currentText()); - QList ql = air->getDeviceChoices(); - - foreach(audioDevice d, ql) { - qcbInputDevice->addItem(d.first, d.second); - } - - qcbInputDevice->setEnabled(ql.count() > 1); - - on_InputDevice_activated(0); -} - -void AudioWizard::on_InputDevice_activated(int) { - if (bInit) - return; - - if (! AudioInputRegistrar::qmNew) - return; - - AudioInputPtr ai = g.ai; - g.ai.reset(); - - while (! ai.unique()) {} - ai.reset(); - - AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbInput->currentText()); - int idx = qcbInputDevice->currentIndex(); - if (idx > -1) { - air->setDeviceChoice(qcbInputDevice->itemData(idx), g.s); - } - - qcbEcho->setEnabled(air->canEcho(qcbOutput->currentText())); - - g.ai = AudioInputPtr(air->create()); - g.ai->start(QThread::HighestPriority); -} - -void AudioWizard::on_Output_activated(int) { - qcbOutputDevice->clear(); - - if (! AudioOutputRegistrar::qmNew) - return; - - AudioOutputRegistrar *aor = AudioOutputRegistrar::qmNew->value(qcbOutput->currentText()); - QList ql = aor->getDeviceChoices(); - - foreach(audioDevice d, ql) { - qcbOutputDevice->addItem(d.first, d.second); - } - - qcbOutputDevice->setEnabled(ql.count() > 1); - - on_OutputDevice_activated(0); -} - -void AudioWizard::on_OutputDevice_activated(int) { - if (bInit) - return; - - if (! AudioOutputRegistrar::qmNew) - return; - - AudioOutputPtr ao = g.ao; - g.ao.reset(); - - while (! ao.unique()) {} - ao.reset(); - - aosSource = NULL; - - AudioOutputRegistrar *aor = AudioOutputRegistrar::qmNew->value(qcbOutput->currentText()); - int idx = qcbOutputDevice->currentIndex(); - if (idx > -1) { - aor->setDeviceChoice(qcbOutputDevice->itemData(idx), g.s); - bDelay = aor->usesOutputDelay(); - } - - AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qcbInput->currentText()); - qcbEcho->setEnabled(air->canEcho(qcbOutput->currentText())); - - g.ao = AudioOutputPtr(aor->create()); - g.ao->start(QThread::HighPriority); -} - -void AudioWizard::on_OutputDelay_valueChanged(int v) { - qlOutputDelay->setText(tr("%1ms").arg(v*20)); - g.s.iOutputDelay = v; - on_OutputDevice_activated(0); - if (! bInit) { - playChord(); - } -} - -void AudioWizard::on_MaxAmp_valueChanged(int v) { - g.s.iMinLoudness = qMin(v, 30000); -} - -void AudioWizard::showPage(int) { - CompletablePage *cp = qobject_cast(currentPage()); - - AudioOutputPtr ao = g.ao; - if (ao) - ao->wipe(); - aosSource = NULL; - - g.bPosTest = false; - - if (cp == qwpIntro) { - g.s.bMute = true; - } else if (cp == qwpDone) { - g.s.bMute = true; - } else if (cp == qwpDeviceTuning) { - g.s.bMute = true; - playChord(); - } else if (cp == qwpPositional) { - fX = fY = 0.0f; - g.s.bMute = true; - g.bPosTest = true; - if (qgsScene) { - delete qgsScene; - qgiSource = NULL; - qgsScene = NULL; - } - playChord(); - } else { - g.s.bMute = false; - } -} - -int AudioWizard::nextId() const { - AudioOutputPtr ao = g.ao; - - int nextid = QWizard::nextId(); - if (currentPage() == qwpTrigger && ! g.s.bPositionalAudio) - nextid++; - else if ((currentPage() == qwpDevice) && ! bDelay) - nextid++; - return nextid; -} - -void AudioWizard::playChord() { - qWarning("RequestPlayChord"); - AudioOutputPtr ao = g.ao; - qWarning("%p %p", ao.get(), aosSource); - if (! ao || aosSource) - return; - aosSource = ao->playSample(QLatin1String("skin:wb_male.spx"), true); -} - -void AudioWizard::restartAudio() { - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; - - aosSource = NULL; - - g.ai.reset(); - g.ao.reset(); - - while (! ai.unique() || ! ao.unique()) {} - ai.reset(); - ao.reset(); - - g.s.qsAudioInput = qcbInput->currentText(); - g.s.qsAudioOutput = qcbOutput->currentText(); - - g.ai = AudioInputRegistrar::newFromChoice(g.s.qsAudioInput); - if (g.ai) - g.ai->start(QThread::HighestPriority); - g.ao = AudioOutputRegistrar::newFromChoice(g.s.qsAudioOutput); - if (g.ao) - g.ao->start(QThread::HighPriority); - - if (qgsScene) { - delete qgsScene; - qgiSource = NULL; - qgsScene = NULL; - } - - if (currentPage() == qwpPositional) - playChord(); -} - -void AudioWizard::reject() { - g.s = sOldSettings; - - g.s.lmLoopMode = Settings::None; - g.bEchoTest = false; - restartAudio(); - - QWizard::reject(); -} - -void AudioWizard::accept() { - if (! bTransmitChanged) - g.s.atTransmit = sOldSettings.atTransmit; - else if (qrPTT->isChecked()) - g.s.atTransmit = Settings::PushToTalk; - else - g.s.atTransmit = Settings::VAD; - - g.s.bMute = sOldSettings.bMute; - g.s.bDeaf = sOldSettings.bDeaf; - g.s.lmLoopMode = Settings::None; - - const QList &buttons = skwPTT->getShortcut(); - QList ql; - bool found = false; - foreach(Shortcut s, g.s.qlShortcuts) { - if (s.iIndex == g.mw->gsPushTalk->idx) { - if (buttons.isEmpty()) - continue; - else if (! found) { - s.qlButtons = buttons; - found = true; - } - } - ql << s; - } - if (! found && ! buttons.isEmpty()) { - Shortcut s; - s.iIndex = g.mw->gsPushTalk->idx; - s.bSuppress = false; - s.qlButtons = buttons; - ql << s; - } - g.s.qlShortcuts = ql; - - g.s.bUsage = qcbUsage->isChecked(); - g.bEchoTest = false; - g.bPosTest = false; - GlobalShortcutEngine::engine->bNeedRemap = true; - GlobalShortcutEngine::engine->needRemap(); - restartAudio(); - QWizard::accept(); -} - -bool AudioWizard::validateCurrentPage() { - if (currentId() == 1) { - if ((qcbInput->currentIndex() < 0) || (qcbOutput->currentIndex() < 0)) - return false; - } - return true; -} - -void AudioWizard::on_Ticker_timeout() { - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; - if (! ai || ! ao) - return; - - int iPeak = static_cast(ai->dMaxMic); - - if (iTicks++ >= 50) { - iMaxPeak = 0; - iTicks = 0; - } - if (iPeak > iMaxPeak) - iMaxPeak = iPeak; - - abAmplify->iBelow = qsMaxAmp->value(); - abAmplify->iValue = iPeak; - abAmplify->iPeak = iMaxPeak; - abAmplify->update(); - - abVAD->iBelow = qsMinVAD->value(); - abVAD->iAbove = qsMaxVAD->value(); - - if (g.s.vsVAD == Settings::Amplitude) { - abVAD->iValue = lroundf((32767.f/96.0f) * (96.0f + ai->dPeakMic)); - } else { - abVAD->iValue = static_cast(ai->fSpeechProb * 32767.0); - } - abVAD->update(); - - QString txt; - if (g.iAudioPathTime) - txt=tr("Audio path is %1ms long.").arg(g.iAudioPathTime*20); - else - txt=tr("Audio path cannot be determined. Input not recognized."); - qlAudioPath->setText(txt); - - if (! qgsScene) { - unsigned int nspeaker = 0; - const float *spos = ao->getSpeakerPos(nspeaker); - if ((nspeaker > 0) && spos) { - qgsScene = new QGraphicsScene(QRectF(-4.0f, -4.0f, 8.0f, 8.0f), this); - qgsScene->addEllipse(QRectF(-0.12f, -0.12f, 0.24f, 0.24f), QPen(Qt::black), QBrush(Qt::darkRed)); - for (unsigned int i=0;iaddEllipse(QRectF(spos[3*i] - 0.1f, spos[3*i+2] - 0.1f, 0.2f, 0.2f), QPen(Qt::black), QBrush(Qt::yellow)); - } - qgiSource = qgsScene->addEllipse(QRectF(-.15f, -.15f, 0.3f, 0.3f), QPen(Qt::black), QBrush(Qt::green)); - qgvView->setScene(qgsScene); - qgvView->fitInView(-4.0f, -4.0f, 8.0f, 8.0f, Qt::KeepAspectRatio); - } - } else if (currentPage() == qwpPositional) { - float xp, yp; - if ((fX == 0.0f) && (fY == 0.0f)) { - fAngle += 0.05f; - - xp = sinf(fAngle) * 2.0f; - yp = cosf(fAngle) * 2.0f; - } else { - xp = fX; - yp = fY; - } - - qgiSource->setPos(xp, yp); - if (aosSource) { - aosSource->fPos[0] = xp; - aosSource->fPos[1] = 0; - aosSource->fPos[2] = yp; - } - } -} - -void AudioWizard::on_VADmin_valueChanged(int v) { - g.s.fVADmin = static_cast(v) / 32767.0f; -} - -void AudioWizard::on_VADmax_valueChanged(int v) { - g.s.fVADmax = static_cast(v) / 32767.0f; -} - -void AudioWizard::on_Holdtime_valueChanged(int v) { - g.s.iVoiceHold = v; - - float val = static_cast(v) * 20.0f; - val = val / 1000.0f; - qlHoldtime->setText(tr("%1 s").arg(val, 0, 'f', 2)); -} - -void AudioWizard::on_SNR_clicked(bool on) { - if (on) { - g.s.vsVAD = Settings::SignalToNoise; - updateTriggerWidgets(false); - bTransmitChanged = true; - } -} - -void AudioWizard::on_Amplitude_clicked(bool on) { - if (on) { - g.s.vsVAD = Settings::Amplitude; - updateTriggerWidgets(false); - bTransmitChanged = true; - } -} - -void AudioWizard::on_PTT_clicked(bool on) { - if (on) { - updateTriggerWidgets(true); - bTransmitChanged = true; - } -} - -void AudioWizard::on_PTTKey_keySet(bool valid) { - if (valid) - qrPTT->setChecked(true); - else if (qrPTT->isChecked()) - qrSNR->setChecked(true); - updateTriggerWidgets(valid); - bTransmitChanged = true; -} - -void AudioWizard::on_Echo_clicked(bool on) { - g.s.bEcho = on; - restartAudio(); -} - -void AudioWizard::on_Headphone_clicked(bool on) { - g.s.bPositionalHeadphone = on; - restartAudio(); -} - -void AudioWizard::on_Positional_clicked(bool on) { - g.s.bPositionalAudio = on; - restartAudio(); -} - -void AudioWizard::updateTriggerWidgets(bool ptt) { - qwVAD->setEnabled(!ptt); - qwpTrigger->setComplete(!ptt || (skwPTT->qlButtons.count() > 0)); -} diff -Nru mumble-1.2.3/src/mumble11x/AudioWizard.h mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioWizard.h --- mumble-1.2.3/src/mumble11x/AudioWizard.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/AudioWizard.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,140 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _AUDIOWIZARD_H -#define _AUDIOWIZARD_H - -#include "Settings.h" -#include "AudioStats.h" -#include "AudioOutput.h" -#include "GlobalShortcut.h" - -class CompletablePage : public QWizardPage { - Q_OBJECT - protected: - bool bComplete; - public: - CompletablePage(QWizard *p = NULL); - void setComplete(bool); - bool isComplete() const; -}; - -class AudioWizard: public QWizard { - private: - Q_OBJECT - Q_DISABLE_COPY(AudioWizard) - protected: - QComboBox *qcbInput, *qcbInputDevice; - QComboBox *qcbOutput, *qcbOutputDevice; - QCheckBox *qcbEcho; - QCheckBox *qcbPositional; - - QSlider *qsOutputDelay; - QLabel *qlOutputDelay; - - AudioBar *abAmplify; - QSlider *qsMaxAmp; - - QWidget *qwVAD; - AudioBar *abVAD; - QRadioButton *qrAmplitude, *qrSNR, *qrPTT; - QSlider *qsMinVAD, *qsMaxVAD; - ShortcutKeyWidget *skwPTT; - bool bTransmitChanged; - - QSlider *qsHoldtime; - QLabel *qlHoldtime; - - QLabel *qlAudioPath; - - QGraphicsView *qgvView; - QGraphicsScene *qgsScene; - QGraphicsItem *qgiSource; - QCheckBox *qcbHeadphone; - AudioOutputSample *aosSource; - float fAngle; - float fX, fY; - - QCheckBox *qcbUsage; - - CompletablePage *qwpIntro, *qwpDevice, *qwpVolume, *qwpTrigger, *qwpDeviceTuning, *qwpPositional, *qwpDone; - - CompletablePage *introPage(); - CompletablePage *devicePage(); - CompletablePage *volumePage(); - CompletablePage *triggerPage(); - CompletablePage *deviceTuningPage(); - CompletablePage *positionalPage(); - CompletablePage *donePage(); - - Settings sOldSettings; - - QTimer *ticker; - - bool bInit; - - bool bDelay; - - int iMaxPeak; - int iTicks; - - void restartAudio(); - void playChord(); - - bool eventFilter(QObject *, QEvent *); - public slots: - void on_Input_activated(int); - void on_InputDevice_activated(int); - void on_Output_activated(int); - void on_OutputDevice_activated(int); - void on_OutputDelay_valueChanged(int); - void on_MaxAmp_valueChanged(int); - void on_Ticker_timeout(); - void on_VADmin_valueChanged(int); - void on_VADmax_valueChanged(int); - void on_Holdtime_valueChanged(int); - void on_Amplitude_clicked(bool); - void on_SNR_clicked(bool); - void on_PTT_clicked(bool); - void on_Echo_clicked(bool); - void on_Headphone_clicked(bool); - void on_Positional_clicked(bool); - void on_PTTKey_keySet(bool); - void showPage(int); - void updateTriggerWidgets(bool); - public: - AudioWizard(QWidget *parent); - void reject(); - void accept(); - bool validateCurrentPage(); - virtual int nextId() const; -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/BanEditor.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/BanEditor.cpp --- mumble-1.2.3/src/mumble11x/BanEditor.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/BanEditor.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +0,0 @@ -/* copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "BanEditor.h" -#include "ServerHandler.h" -#include "Channel.h" -#include "Global.h" - -BanEditor::BanEditor(const MessageServerBanList *msbl, QWidget *p) : QDialog(p) { - setupUi(this); - - QRegExp rx(QLatin1String("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}")); - QValidator *validator = new QRegExpValidator(rx, this); - qleIP->setValidator(validator); - - qlBans = msbl->qlBans; - refreshBanList(); - -} - -void BanEditor::accept() { - MessageServerBanList msbl; - - msbl.bQuery = false; - msbl.qlBans = qlBans; - - g.sh->sendMessage(&msbl); - QDialog::accept(); -} - -void BanEditor::on_qlwBans_currentRowChanged() { - QPair ban; - int idx = qlwBans->currentRow(); - if (idx < 0) - return; - ban = qlBans[idx]; - - QHostAddress addr(ban.first); - qleIP->setText(addr.toString()); - qsbMask->setValue(ban.second); -} - -void BanEditor::on_qpbAdd_clicked() { - QPair ban; - QHostAddress addr; - - bool ok; - - ok = addr.setAddress(qleIP->text()); - if (ok) { - quint32 base = addr.toIPv4Address(); - quint32 nmask = qsbMask->value(); - quint32 bitmask = (1<<(32-nmask))-1; - ban.first = base & ~bitmask; - ban.second = nmask; - qlBans << ban; - refreshBanList(); - qlwBans->setCurrentRow(qlBans.indexOf(ban)); - } -} - -void BanEditor::on_qpbUpdate_clicked() { - on_qpbRemove_clicked(); - on_qpbAdd_clicked(); -} - -void BanEditor::on_qpbRemove_clicked() { - int idx = qlwBans->currentRow(); - if (idx >= 0) - qlBans.removeAt(idx); - refreshBanList(); -} - -void BanEditor::refreshBanList() { - QPair ban; - - qlwBans->clear(); - - qSort(qlBans); - - foreach(ban,qlBans) { - QHostAddress addr(ban.first); - QString qs = QString::fromLatin1("%1/%2").arg(addr.toString()).arg(ban.second); - qlwBans->addItem(qs); - } -} diff -Nru mumble-1.2.3/src/mumble11x/BanEditor.h mumble-1.2.3-87-gf7d8711/src/mumble11x/BanEditor.h --- mumble-1.2.3/src/mumble11x/BanEditor.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/BanEditor.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _BANEDITOR_H -#define _BANEDITOR_H - -#include "mumble_pch.hpp" -#include "ui_BanEditor.h" -#include "Message.h" - -class BanEditor : public QDialog, public Ui::BanEditor { - private: - Q_OBJECT; - Q_DISABLE_COPY(BanEditor) - protected: - QList > qlBans; - public: - BanEditor(const MessageServerBanList *msbl, QWidget *p = NULL); - public slots: - void accept(); - public slots: - void on_qlwBans_currentRowChanged(); - void on_qpbAdd_clicked(); - void on_qpbUpdate_clicked(); - void on_qpbRemove_clicked(); - void refreshBanList(); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/BanEditor.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/BanEditor.ui --- mumble-1.2.3/src/mumble11x/BanEditor.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/BanEditor.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,156 +0,0 @@ - - BanEditor - - - - 0 - 0 - 357 - 163 - - - - Mumble - Edit Bans - - - - - - - - - - - - - - - &Address - - - qleIP - - - - - - - &Mask - - - qsbMask - - - - - - - 0.0.0.0 - - - - - - - 8 - - - 32 - - - 24 - - - - - - - - - - - &Add - - - - - - - &Update - - - - - - - &Remove - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - BanEditor - accept() - - - 227 - 617 - - - 157 - 274 - - - - - buttonBox - rejected() - BanEditor - reject() - - - 295 - 623 - - - 286 - 274 - - - - - diff -Nru mumble-1.2.3/src/mumble11x/Channel.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Channel.cpp --- mumble-1.2.3/src/mumble11x/Channel.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Channel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,210 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Channel.h" -#include "Player.h" -#include "Group.h" -#include "ACL.h" - -QHash Channel::c_qhChannels; -QReadWriteLock Channel::c_qrwlChannels; - -uint qHash(const Channel::qpPlayerLink & pl) { - return qHash(pl.first) + qHash(pl.second); -} - -Channel::Channel(int id, const QString &name, const QString &desc, QObject *p) : QObject(p) { - iId = id; - qsName = name; - qsDesc = desc; - bInheritACL = true; - cParent = qobject_cast(p); - if (cParent) - cParent->addChannel(this); -} - -Channel::~Channel() { - if (cParent) - cParent->removeChannel(this); - - foreach(Channel *c, qlChannels) - delete c; - - foreach(ChanACL *acl, qlACL) - delete acl; - foreach(Group *g, qhGroups) - delete g; - foreach(Channel *l, qhLinks.keys()) - unlink(l); - - Q_ASSERT(qlChannels.count() == 0); - Q_ASSERT(children().count() == 0); -} - -Channel *Channel::get(int id) { - QReadLocker lock(&c_qrwlChannels); - return c_qhChannels.value(id); -} - -Channel *Channel::add(int id, const QString &name, const QString &desc) { - QWriteLocker lock(&c_qrwlChannels); - - if (c_qhChannels.contains(id)) - return NULL; - - Channel *c = new Channel(id,name, desc, NULL); - c_qhChannels.insert(id, c); - return c; -} - -void Channel::remove(Channel *c) { - QWriteLocker lock(&c_qrwlChannels); - c_qhChannels.remove(c->iId); -} - -bool Channel::isLinked(Channel *l) { - return qhLinks.contains(l); -} - -void Channel::link(Channel *l) { - if (qsPermLinks.contains(l)) - return; - qsPermLinks.insert(l); - qhLinks[l]++; - l->qsPermLinks.insert(this); - l->qhLinks[this]++; -} - -void Channel::unlink(Channel *l) { - if (l) { - qsPermLinks.remove(l); - qhLinks.remove(l); - l->qsPermLinks.remove(this); - l->qhLinks.remove(this); - - foreach(qpPlayerLink pl, qsPlayerLinks) { - if (pl.second == l) - qsPlayerLinks.remove(pl); - } - foreach(qpPlayerLink pl, l->qsPlayerLinks) { - if (pl.second == l) - qsPlayerLinks.remove(pl); - } - } else { - foreach(Channel *c, qhLinks.keys()) - unlink(c); - } -} - -void Channel::playerLink(Channel *l, Player *p) { - qpPlayerLink pl(p, l); - if (qsPlayerLinks.contains(pl)) - return; - - qsPlayerLinks.insert(pl); - l->qsPlayerLinks.insert(pl); - qhLinks[l]++; - l->qhLinks[this]++; -} - -void Channel::playerUnlink(Channel *l, Player *p) { - qpPlayerLink pl(p, l); - if (! qsPlayerLinks.contains(pl)) - return; - - qsPlayerLinks.remove(pl); - l->qsPlayerLinks.remove(qpPlayerLink(p, this)); - qhLinks[l]--; - l->qhLinks[this]--; - - if (qhLinks[l] == 0) - qhLinks.remove(l); - if (l->qhLinks[this] == 0) - l->qhLinks.remove(this); -} - -QSet Channel::allLinks() { - QSet seen; - seen.insert(this); - if (qhLinks.isEmpty()) - return seen; - - Channel *l, *lnk; - QStack stack; - stack.push(this); - - while (! stack.isEmpty()) { - lnk = stack.pop(); - foreach(l, lnk->qhLinks.keys()) { - if (! seen.contains(l)) { - seen.insert(l); - stack.push(l); - } - } - } - return seen; -} - -void Channel::addChannel(Channel *c) { - c->cParent = this; - c->setParent(this); - qlChannels << c; -} - -void Channel::removeChannel(Channel *c) { - c->cParent = NULL; - c->setParent(NULL); - qlChannels.removeAll(c); -} - -void Channel::addPlayer(Player *p) { - if (p->cChannel) - p->cChannel->removePlayer(p); - ClientPlayer *cp = dynamic_cast(p); - if (cp) - cp->setParent(this); - p->cChannel = this; - qlPlayers << p; -} - -void Channel::removePlayer(Player *p) { - foreach(qpPlayerLink pl, qsPlayerLinks) { - if (pl.first == p) { - qsPlayerLinks.remove(pl); - pl.second->qsPlayerLinks.remove(qpPlayerLink(p, this)); - } - } - - qlPlayers.removeAll(p); -} - -Channel::operator const QString() const { - return QString::fromLatin1("%1[%2:%3]").arg(qsName).arg(iId).arg(cParent ? cParent->iId : -1); -} diff -Nru mumble-1.2.3/src/mumble11x/Channel.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Channel.h --- mumble-1.2.3/src/mumble11x/Channel.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Channel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _CHANNEL_H -#define _CHANNEL_H - -#include "murmur_pch.h" - -class Player; -class Group; -class ChanACL; - -class Channel : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(Channel) - private: - QSet qsUnseen; - public: - int iId; - Channel *cParent; - QString qsName; - QString qsDesc; - QList qlChannels; - QList qlPlayers; - QHash qhGroups; - QList qlACL; - - QSet qsPermLinks; - QHash qhLinks; - - typedef QPair qpPlayerLink; - QSet qsPlayerLinks; - - bool bInheritACL; - - static QHash c_qhChannels; - static QReadWriteLock c_qrwlChannels; - - Channel(int id, const QString &name, const QString &desc, QObject *p = NULL); - ~Channel(); - - static Channel *get(int); - static Channel *add(int, const QString &, const QString & = QString()); - static void remove(Channel *); - - void addChannel(Channel *c); - void removeChannel(Channel *c); - void addPlayer(Player *p); - void removePlayer(Player *p); - - bool isLinked(Channel *c); - void link(Channel *c); - void unlink(Channel *c); - - void playerLink(Channel *c, Player *p); - void playerUnlink(Channel *c, Player *p); - - QSet allLinks(); - - operator const QString() const; -}; - -#else -class Channel; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ConfigDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigDialog.cpp --- mumble-1.2.3/src/mumble11x/ConfigDialog.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigDialog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,238 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ConfigDialog.h" -#include "AudioInput.h" -#include "AudioOutput.h" -#ifndef COMPAT_CLIENT -#include "Overlay.h" -#endif -#include "Global.h" - -ConfigDialog::ConfigDialog(QWidget *p) : QDialog(p) { - setupUi(this); - - s = g.s; - - unsigned int idx = 0; - ConfigWidgetNew cwn; - foreach(cwn, *ConfigRegistrar::c_qmNew) { - addPage(cwn(s), ++idx); - } - - qcbExpert->setChecked(g.s.bExpert); - on_qcbExpert_clicked(g.s.bExpert); - - QPushButton *okButton = dialogButtonBox->button(QDialogButtonBox::Ok); - okButton->setToolTip(tr("Accept changes")); - okButton->setWhatsThis(tr("This button will accept current settings and return to the application.
" - "The settings will be stored to disk when you leave the application.")); - - QPushButton *cancelButton = dialogButtonBox->button(QDialogButtonBox::Cancel); - cancelButton->setToolTip(tr("Reject changes")); - cancelButton->setWhatsThis(tr("This button will reject all changes and return to the application.
" - "The settings will be reset to the previous positions.")); - - QPushButton *applyButton = dialogButtonBox->button(QDialogButtonBox::Apply); - applyButton->setToolTip(tr("Apply changes")); - applyButton->setWhatsThis(tr("This button will immediately apply all changes.")); - - QPushButton *resetButton = pageButtonBox->button(QDialogButtonBox::Reset); - resetButton->setToolTip(tr("Undo changes for current page")); - resetButton->setWhatsThis(tr("This button will revert any changes done on the current page to the most recent applied settings.")); - - QPushButton *restoreButton = pageButtonBox->button(QDialogButtonBox::RestoreDefaults); - restoreButton->setToolTip(tr("Restore defaults for current page")); - restoreButton->setWhatsThis(tr("This button will restore the defaults for the settings on the current page. Other pages will not be changed.
" - "To restore all settings to their defaults, you will have to use this button on every page." - )); - - if (! g.s.qbaConfigGeometry.isEmpty()) { -#ifndef COMPAT_CLIENT - if (! g.ocIntercept) -#endif - restoreGeometry(g.s.qbaConfigGeometry); - } -} - -void ConfigDialog::addPage(ConfigWidget *cw, unsigned int idx) { - QDesktopWidget dw; - - int w = INT_MAX, h = INT_MAX; - - for (int i=0;iminimumSizeHint(); - cw->resize(ms); - cw->setMinimumSize(ms); - - ms.rwidth() += 128; - ms.rheight() += 192; - if ((ms.width() > w) || (ms.height() > h)) { - QScrollArea *qsa=new QScrollArea(); - qsa->setFrameShape(QFrame::NoFrame); - qsa->setWidgetResizable(true); - qsa->setWidget(cw); - qhPages.insert(cw, qsa); - qswPages->addWidget(qsa); - } else { - qhPages.insert(cw, cw); - qswPages->addWidget(cw); - } - qmWidgets.insert(idx, cw); - cw->load(g.s); -} - -ConfigDialog::~ConfigDialog() { - foreach(QWidget *qw, qhPages) - delete qw; -} - -void ConfigDialog::on_pageButtonBox_clicked(QAbstractButton *b) { - ConfigWidget *conf = qobject_cast(qswPages->currentWidget()); - if (! conf) { - QScrollArea *qsa = qobject_cast(qswPages->currentWidget()); - if (qsa) - conf = qobject_cast(qsa->widget()); - } - if (! conf) - return; - switch (pageButtonBox->standardButton(b)) { - case QDialogButtonBox::RestoreDefaults: { - Settings def; - conf->load(def); - break; - } - case QDialogButtonBox::Reset: { - conf->load(g.s); - break; - } - default: - break; - } -} - -void ConfigDialog::on_dialogButtonBox_clicked(QAbstractButton *b) { - switch (dialogButtonBox->standardButton(b)) { - case QDialogButtonBox::Apply: { - apply(); - break; - } - default: - break; - } -} - -void ConfigDialog::on_qlwIcons_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { - if (!current) - current = previous; - - if (current) { - QWidget *w = qhPages.value(qmIconWidgets.value(current)); - if (w) - qswPages->setCurrentWidget(w); - } -} - -void ConfigDialog::on_qcbExpert_clicked(bool b) { - QWidget *ccw = qmIconWidgets.value(qlwIcons->currentItem()); - QListWidgetItem *sel = NULL; - - qmIconWidgets.clear(); - qlwIcons->clear(); - - QFontMetrics qfm(qlwIcons->font()); - int width = 0; - - foreach(ConfigWidget *cw, qmWidgets) { - bool showit = cw->expert(b); - width = qMax(width, qfm.width(cw->title())); - if (showit || b) { - QListWidgetItem *i = new QListWidgetItem(qlwIcons); - i->setIcon(cw->icon()); - i->setText(cw->title()); - i->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); - - - qmIconWidgets.insert(i, cw); - if (cw == ccw) - sel = i; - } - } - - // Add space for icon and some padding. - width += qlwIcons->iconSize().width() + 25; - - qlwIcons->setMinimumWidth(width); - qlwIcons->setMaximumWidth(width); - - if (sel) - qlwIcons->setCurrentItem(sel); - else - qlwIcons->setCurrentRow(0); -} - -void ConfigDialog::apply() { - Audio::stop(); - - foreach(ConfigWidget *cw, qmWidgets) - cw->save(); - - g.s = s; - - foreach(ConfigWidget *cw, qmWidgets) - cw->accept(); - - if (!g.s.bAttenuateOthersOnTalk) - g.bAttenuateOthers = false; - - // They might have changed their keys. - g.iPushToTalk = 0; - g.s.bExpert = qcbExpert->isChecked(); - - Audio::start(); -} - -void ConfigDialog::accept() { - apply(); - -#ifndef COMPAT_CLIENT - if (! g.ocIntercept) -#endif - g.s.qbaConfigGeometry=saveGeometry(); - - QDialog::accept(); -} diff -Nru mumble-1.2.3/src/mumble11x/ConfigDialog.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigDialog.h --- mumble-1.2.3/src/mumble11x/ConfigDialog.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigDialog.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _CONFIGDIALOG_H -#define _CONFIGDIALOG_H - -#include "mumble_pch.hpp" -#include "ui_ConfigDialog.h" -#include "ConfigWidget.h" -#include "Settings.h" - -class ConfigDialog : public QDialog, public Ui::ConfigDialog { - private: - Q_OBJECT - Q_DISABLE_COPY(ConfigDialog) - protected: - QHash qhPages; - QMap qmWidgets; - QMap qmIconWidgets; - void addPage(ConfigWidget *aw, unsigned int idx); - Settings s; - - public: - ConfigDialog(QWidget *p = NULL); - ~ConfigDialog(); -#ifdef Q_OS_MAC - protected: - void setupMacToolbar(bool expert); - void removeMacToolbar(); - public: - void updateExpert(bool expert); - void on_widgetSelected(ConfigWidget *); -#endif - public slots: - void on_pageButtonBox_clicked(QAbstractButton *); - void on_dialogButtonBox_clicked(QAbstractButton *); - void on_qlwIcons_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous); - void on_qcbExpert_clicked(bool); - void apply(); - void accept(); -}; - -#else -class ConfigDialog; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ConfigDialog.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigDialog.ui --- mumble-1.2.3/src/mumble11x/ConfigDialog.ui 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigDialog.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,144 +0,0 @@ - - - ConfigDialog - - - - 0 - 0 - 709 - 505 - - - - Mumble Configuration - - - true - - - - - - - 0 - 0 - - - - - 24 - 24 - - - - QListView::Adjust - - - QListView::Batched - - - true - - - - - - - - 0 - 0 - - - - Advanced - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Reset|QDialogButtonBox::RestoreDefaults - - - - - - - Qt::Horizontal - - - - 474 - 22 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - - 1 - 0 - - - - - - - - - - - - dialogButtonBox - accepted() - ConfigDialog - accept() - - - 167 - 344 - - - 191 - 319 - - - - - dialogButtonBox - rejected() - ConfigDialog - reject() - - - 260 - 356 - - - 284 - 319 - - - - - diff -Nru mumble-1.2.3/src/mumble11x/ConfigWidget.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigWidget.cpp --- mumble-1.2.3/src/mumble11x/ConfigWidget.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigWidget.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,89 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ConfigWidget.h" - -QMap *ConfigRegistrar::c_qmNew; - -ConfigRegistrar::ConfigRegistrar(int priority, ConfigWidgetNew n) { - if (! c_qmNew) - c_qmNew = new QMap(); - iPriority = priority; - c_qmNew->insert(priority,n); -} - -ConfigRegistrar::~ConfigRegistrar() { - c_qmNew->remove(iPriority); - if (c_qmNew->isEmpty()) { - delete c_qmNew; - c_qmNew = NULL; - } -} - -ConfigWidget::ConfigWidget(Settings &st) : s(st) { -} - -QIcon ConfigWidget::icon() const { - return qApp->windowIcon(); -} - -void ConfigWidget::accept() const { -} - -void ConfigWidget::loadSlider(QSlider *slider, int v) { - if (v != slider->value()) { - slider->setValue(v); - } else { - connect(this, SIGNAL(intSignal(int)), slider, SIGNAL(valueChanged(int))); - emit intSignal(v); - disconnect(SIGNAL(intSignal(int))); - } -} - -void ConfigWidget::loadCheckBox(QAbstractButton *c, bool v) { - if (v != c->isChecked()) { - c->setChecked(v); - } else { - connect(this, SIGNAL(intSignal(int)), c, SIGNAL(stateChanged(int))); - emit intSignal(v ? 1 : 0); - disconnect(SIGNAL(intSignal(int))); - } -} - -void ConfigWidget::loadComboBox(QComboBox *c, int v) { - if (c->currentIndex() != v) { - c->setCurrentIndex(v); - } else { - connect(this, SIGNAL(intSignal(int)), c, SIGNAL(currentIndexChanged(int))); - emit intSignal(v); - disconnect(SIGNAL(intSignal(int))); - } -} - diff -Nru mumble-1.2.3/src/mumble11x/ConfigWidget.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigWidget.h --- mumble-1.2.3/src/mumble11x/ConfigWidget.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConfigWidget.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ - -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _CONFIGWIDGET_H -#define _CONFIGWIDGET_H - -#include "Settings.h" - -class ConfigDialog; - -class ConfigWidget : public QWidget { - private: - Q_OBJECT - Q_DISABLE_COPY(ConfigWidget) - protected: - void loadSlider(QSlider *, int); - void loadCheckBox(QAbstractButton *, bool); - void loadComboBox(QComboBox *, int); - signals: - void intSignal(int); - public: - Settings &s; - ConfigWidget(Settings &st); - virtual QString title() const = 0; - virtual QIcon icon() const; - public slots: - virtual void accept() const; - virtual void save() const = 0; - virtual void load(const Settings &r) = 0; - virtual bool expert(bool) = 0; -}; - -typedef ConfigWidget *(*ConfigWidgetNew)(Settings &st); - -class ConfigRegistrar { - friend class ConfigDialog; - friend class ConfigDialogMac; - private: - Q_DISABLE_COPY(ConfigRegistrar) - protected: - int iPriority; - static QMap *c_qmNew; - public: - ConfigRegistrar(int priority, ConfigWidgetNew n); - ~ConfigRegistrar(); -}; - -#else -class ConfigWidget; -class ConfigRegistrar; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ConnectDialog.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ConnectDialog.cpp --- mumble-1.2.3/src/mumble11x/ConnectDialog.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConnectDialog.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,385 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ConnectDialog.h" -#include "Global.h" -#include "ServerHandler.h" -#include "Channel.h" - -TextSortedItem::TextSortedItem(QTreeWidget *p, const QStringList &strings) : QTreeWidgetItem(p, strings) { -} - -bool TextSortedItem::operator <(const QTreeWidgetItem &other) const { - const QTreeWidget *w = treeWidget(); - - int column = w ? w ->sortColumn() : 0; - - QString a = text(column).toLower(); - QString b = other.text(column).toLower(); - - QRegExp re(QLatin1String("[^0-9a-z]")); - a.remove(re); - b.remove(re); - return a < b; -} - -QList ConnectDialog::qlPublicServers; -Timer ConnectDialog::tPublicServers; - -ConnectDialog::ConnectDialog(QWidget *p) : QDialog(p) { - - qhList = new QHttp(QLatin1String("mumble.hive.no"), 80, this); - qhList->setObjectName(QLatin1String("Request")); - - setupUi(this); -#ifdef Q_OS_MAC - setWindowFlags(Qt::Sheet); -#endif - - bPublicInit = false; - bDirty = false; - - if (tPublicServers.elapsed() >= 60 * 24 * 1000000ULL) { - qlPublicServers.clear(); - } - - qtwServers->sortItems(0, Qt::AscendingOrder); - - qstmServers = new QSqlTableModel(this); - qstmServers->setTable(QLatin1String("servers")); - qstmServers->setSort(1, Qt::AscendingOrder); - if (! qstmServers->select()) { - qWarning("ConnectDialog: Failed to reselect table"); - } - qstmServers->setEditStrategy(QSqlTableModel::OnManualSubmit); - - qlwServers->setModel(qstmServers); - qlwServers->setModelColumn(1); - - QItemSelectionModel *selectionModel = qlwServers->selectionModel(); - - connect(selectionModel, SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(onSelection_Changed(const QModelIndex &, const QModelIndex &))); - connect(qleName, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); - connect(qleServer, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); - connect(qleUsername, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); - connect(qlePassword, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); - connect(qlePort, SIGNAL(textEdited(const QString &)), this, SLOT(onDirty(const QString &))); - - qlePort->setValidator(new QIntValidator(1, 65535, qlePort)); - - if (g.sh && g.sh->isRunning()) { - fillEmpty(); - } else { - QModelIndex idx = qstmServers->index(g.s.iServerRow, 0); - if (idx.isValid()) { - qlwServers->setCurrentIndex(idx); - } else if (qstmServers->rowCount() > 0) { - qlwServers->setCurrentIndex(qstmServers->index(0,0)); - } - } - - fillList(); - qtwTab->setCurrentIndex(0); - - if (qstmServers->rowCount() < 1) { - on_qpbAdd_clicked(); - qtwTab->setCurrentIndex(1); - } -} - -void ConnectDialog::accept() { - if (qtwTab->currentIndex() == 1) { - QTreeWidgetItem *item = qtwServers->currentItem(); - if (! item) - return; - - bool ok; - QString defUserName = QInputDialog::getText(this, tr("Connecting to %1").arg(item->text(0)), tr("Enter username"), QLineEdit::Normal, g.s.qsUsername, &ok); - if (! ok) - return; - - g.s.qsUsername = defUserName; - qsUsername = defUserName; - qsPassword = QString(); - QStringList a = item->text(1).split(QLatin1Char(':')); - qsServer = a.at(0); - usPort = a.at(1).toUShort(); - } else { - qsServer = qleServer->text(); - qsUsername = qleUsername->text(); - qsPassword = qlePassword->text(); - usPort = qlePort->text().toUShort(); - - int row = qlwServers->currentIndex().row(); - g.s.iServerRow = (row >= 0) ? row : 0; - } - QDialog::accept(); -} - -QSqlRecord ConnectDialog::toRecord() const { - QSqlRecord r = qstmServers->record(); - - QString name = qleName->text(); - QString host = qleServer->text(); - QString user = qleUsername->text(); - QString pw = qlePassword->text(); - int port = qlePort->text().toInt(); - - if (name.isEmpty() || host.isEmpty() || user.isEmpty() || (port == 0)) { - return QSqlRecord(); - } - r.setValue(QLatin1String("name"), name); - r.setValue(QLatin1String("hostname"), host); - r.setValue(QLatin1String("port"), port); - r.setValue(QLatin1String("username"), user); - r.setValue(QLatin1String("password"), pw); - return r; -} - -void ConnectDialog::initList() { - if (bPublicInit || (qlPublicServers.count() > 0)) - return; - - bPublicInit = true; - - qhList->get(QString::fromLatin1("/list.cgi?qcompress=1&version=%1").arg(QLatin1String(MUMBLE_RELEASE))); -} - -void ConnectDialog::fillList() { - qtwServers->clear(); - - QList ql; - - foreach(PublicInfo pi, qlPublicServers) { - QStringList qsl; - qsl << pi.name; - qsl << QString::fromLatin1("%1:%2").arg(pi.ip).arg(pi.port); - qsl << pi.url.toString(); - ql << new TextSortedItem(NULL,qsl); - } - qtwServers->addTopLevelItems(ql); -} - -void ConnectDialog::on_qpbURL_clicked() { - QTreeWidgetItem *item = qtwServers->currentItem(); - if (! item) - return; - QDesktopServices::openUrl(QUrl(item->text(2))); -} - -void ConnectDialog::on_qpbCopy_clicked() { - QTreeWidgetItem *item = qtwServers->currentItem(); - if (! item) - return; - - qlwServers->setCurrentIndex(QModelIndex()); - - QStringList a = item->text(1).split(QLatin1Char(':')); - - qleName->setText(item->text(0)); - qleServer->setText(a.at(0)); - if (g.s.qsUsername.isEmpty()) - qleUsername->setText(tr("Unknown")); - else - qleUsername->setText(g.s.qsUsername); - qlePassword->setText(QString()); - qlePort->setText(a.at(1)); - - qtwTab->setCurrentIndex(0); - - bDirty = true; - on_qpbAdd_clicked(); -} - -void ConnectDialog::on_Request_done(bool err) { - if (err) { - QMessageBox::warning(this, QLatin1String("Mumble"), tr("Failed to fetch server list"), QMessageBox::Ok); - return; - } - - QDomDocument doc; - doc.setContent(qUncompress(qhList->readAll())); - - qlPublicServers.clear(); - - QDomElement root=doc.documentElement(); - QDomNode n = root.firstChild(); - while (!n.isNull()) { - QDomElement e = n.toElement(); - if (!e.isNull()) { - if (e.tagName() == QLatin1String("server")) { - PublicInfo pi; - pi.name = e.attribute(QLatin1String("name")); - pi.url = e.attribute(QLatin1String("url")); - pi.ip = e.attribute(QLatin1String("ip")); - pi.port = e.attribute(QLatin1String("port")).toUShort(); - qlPublicServers << pi; - } - } - n = n.nextSibling(); - } - - tPublicServers.restart(); - - fillList(); -} - -void ConnectDialog::onSelection_Changed(const QModelIndex &index, const QModelIndex &) { - if (index.isValid()) { - QSqlRecord r = qstmServers->record(index.row()); - qleName->setText(r.value(QLatin1String("name")).toString()); - qleServer->setText(r.value(QLatin1String("hostname")).toString()); - qleUsername->setText(r.value(QLatin1String("username")).toString()); - qlePassword->setText(r.value(QLatin1String("password")).toString()); - qlePort->setText(r.value(QLatin1String("port")).toString()); - bDirty = false; - qpbRemove->setEnabled(true); - qpbAdd->setEnabled(true); - qpbAdd->setText(tr("New")); - } else { - qpbRemove->setEnabled(false); - } -} - -void ConnectDialog::on_qpbAdd_clicked() { - if (bDirty) { - bDirty = false; - QSqlRecord r = toRecord(); - if (! r.isEmpty()) { - const QModelIndex &previndex = qlwServers->currentIndex(); - if (previndex.row() >= 0) { - // FIXME: setRecord is bugged in 4.4.1 - // qstmServers->setRecord(previndex.row(), r); - qstmServers->removeRows(previndex.row(), 1, QModelIndex()); - qstmServers->insertRecord(-1, r); - } else { - qstmServers->insertRecord(-1, r); - } - qstmServers->submitAll(); - - qpbAdd->setText(tr("New")); - - QSqlRecord rec; - int nrec = qstmServers->rowCount(); - - QStringList qslFields; - qslFields << QLatin1String("name"); - qslFields << QLatin1String("hostname"); - qslFields << QLatin1String("username"); - qslFields << QLatin1String("password"); - qslFields << QLatin1String("port"); - - for (int i=0; i < nrec;++i) { - rec = qstmServers->record(i); - bool match = true; - foreach(const QString &s, qslFields) { - if (rec.value(s) != r.value(s)) - match = false; - } - if (match) { - qlwServers->setCurrentIndex(qstmServers->index(i, 0)); - break; - } - } - - return; - } else { - return; - } - } - - fillEmpty(); -} - -void ConnectDialog::fillEmpty() { - qlwServers->setCurrentIndex(QModelIndex()); - - QString host, user, pw; - QString name = tr("-Unnamed entry-"); - unsigned short port = 64738; - bool ready = false; - - if (g.sh && g.sh->isRunning()) { - g.sh->getConnectionInfo(host, port, user, pw); - Channel *c = Channel::get(0); - if (c) { - if (c->qsName != QLatin1String("Root")) { - name = c->qsName; - ready = true; - } - } - } else { - user = g.s.qsUsername; - pw = QString(); - host = QLatin1String("host"); - } - qleName->setText(name); - qleServer->setText(host); - qleUsername->setText(user); - qlePassword->setText(pw); - qlePort->setText(QString::number(port)); - - qpbAdd->setText(tr("Add")); - qpbAdd->setEnabled(ready); - - bDirty = ready; -} - -void ConnectDialog::on_qpbRemove_clicked() { - int row = qlwServers->currentIndex().row(); - if (row < 0) - return; - if (!qstmServers->removeRows(row, 1, QModelIndex())) { - qWarning("Failed row remove: %s", qPrintable(qstmServers->lastError().text())); - } - qstmServers->submitAll(); - qstmServers->select(); - - fillEmpty(); -} - -void ConnectDialog::onDirty(const QString &) { - const QModelIndex &previndex = qlwServers->currentIndex(); - - QSqlRecord r = toRecord(); - qpbAdd->setEnabled(! r.isEmpty()); - if (previndex.row() >= 0) - qpbAdd->setText(tr("Update")); - else - qpbAdd->setText(tr("Add")); - bDirty = true; -} - -void ConnectDialog::on_qtwTab_currentChanged(int idx) { - if (idx != 1) - return; - - initList(); -} diff -Nru mumble-1.2.3/src/mumble11x/ConnectDialog.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ConnectDialog.h --- mumble-1.2.3/src/mumble11x/ConnectDialog.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConnectDialog.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _CONNECTDIALOG_H -#define _CONNECTDIALOG_H - -#include "mumble_pch.hpp" -#include "ui_ConnectDialog.h" -#include "Timer.h" - -struct PublicInfo { - QString name; - QUrl url; - QString ip; - unsigned short port; -}; - -class TextSortedItem : public QTreeWidgetItem { - public: - TextSortedItem(QTreeWidget *, const QStringList &); - bool operator< (const QTreeWidgetItem &) const; -}; - -class ConnectDialog : public QDialog, public Ui::ConnectDialog { - private: - Q_OBJECT - Q_DISABLE_COPY(ConnectDialog) - protected: - static QList qlPublicServers; - static Timer tPublicServers; - bool bPublicInit; - QSqlTableModel *qstmServers; - QModelIndex qmiDirty; - QSqlRecord toRecord() const; - bool bDirty; - QHttp *qhList; - - void initList(); - void fillList(); - void fillEmpty(); - public slots: - void accept(); - void on_qpbAdd_clicked(); - void on_qpbRemove_clicked(); - void onSelection_Changed(const QModelIndex &n, const QModelIndex &p); - void onDirty(const QString &qs = QString()); - - void on_qtwTab_currentChanged(int); - void on_Request_done(bool); - void on_qpbURL_clicked(); - void on_qpbCopy_clicked(); - public: - QString qsServer, qsUsername, qsPassword; - unsigned short usPort; - ConnectDialog(QWidget *parent); -}; - -#else -class ConnectDialog; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ConnectDialog.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/ConnectDialog.ui --- mumble-1.2.3/src/mumble11x/ConnectDialog.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ConnectDialog.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,332 +0,0 @@ - - ConnectDialog - - - - 0 - 0 - 505 - 296 - - - - Mumble Server Connect - - - - - - 0 - - - - &Custom Servers - - - - - - - - QAbstractItemView::NoEditTriggers - - - - - - - - - &Label - - - qleName - - - - - - - A&ddress - - - qleServer - - - - - - - &Port - - - qlePort - - - - - - - &Username - - - qleUsername - - - - - - - &Password - - - qlePassword - - - - - - - - - - - - - - - - - - - QLineEdit::Password - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - - - &Connect - - - true - - - - - - - &Cancel - - - - - - - &Add - - - - - - - false - - - &Remove - - - - - - - - - - Server &Browser - - - - - - true - - - false - - - true - - - false - - - true - - - - Label - - - - - Address - - - - - URL - - - - - - - - - - &Connect - - - true - - - - - - - Cancel - - - - - - - C&opy to custom - - - - - - - &View Webpage - - - - - - - - - - - - - - - qpbConnect - clicked() - ConnectDialog - accept() - - - 21 - 246 - - - 199 - 541 - - - - - qpbCancel - clicked() - ConnectDialog - reject() - - - 248 - 246 - - - 444 - 541 - - - - - qlwServers - doubleClicked(QModelIndex) - ConnectDialog - accept() - - - 109 - 196 - - - 133 - 654 - - - - - qpbBrowserConnect - clicked() - ConnectDialog - accept() - - - 119 - 263 - - - 117 - 370 - - - - - qpbBrowserCancel - clicked() - ConnectDialog - reject() - - - qtwServers - doubleClicked(QModelIndex) - ConnectDialog - accept() - - - 158 - 128 - - - 185 - 436 - - - - - diff -Nru mumble-1.2.3/src/mumble11x/Connection.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Connection.cpp --- mumble-1.2.3/src/mumble11x/Connection.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Connection.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,304 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Message.h" -#include "Connection.h" -#include "PacketDataStream.h" - -#ifdef Q_OS_UNIX -#include -#include -#include -#include -#endif - -int Connection::iReceiveLevel = 0; -QSet Connection::qsReceivers; - -#ifdef Q_OS_WIN -HANDLE Connection::hQoS = NULL; -#endif - -Connection::Connection(QObject *p, QSslSocket *qtsSock) : QObject(p) { - qtsSocket = qtsSock; - qtsSocket->setParent(this); - iPacketLength = -1; - bDisconnectedEmitted = false; - - dUDPPingAvg = dUDPPingVar = 0.0L; - dTCPPingAvg = dTCPPingVar = 0.0L; - uiUDPPackets = uiTCPPackets = 0; - - connect(qtsSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError))); - connect(qtsSocket, SIGNAL(readyRead()), this, SLOT(socketRead())); - connect(qtsSocket, SIGNAL(disconnected()), this, SLOT(socketDisconnected())); - connect(qtsSocket, SIGNAL(sslErrors(const QList &)), this, SLOT(socketSslErrors(const QList &))); - qtLastPacket.restart(); -#ifdef Q_OS_WIN - dwFlow = 0; -#endif -} - -Connection::~Connection() { - qsReceivers.remove(this); -#ifdef Q_OS_WIN - if (dwFlow && hQoS) { - if (! QOSRemoveSocketFromFlow(hQoS, 0, dwFlow, 0)) - qWarning("Connection: Failed to remove flow from QoS"); - } -#endif -} - -void Connection::setToS() { -#if defined(Q_OS_WIN) - if (dwFlow || ! hQoS) - return; - - dwFlow = 0; - if (! QOSAddSocketToFlow(hQoS, qtsSocket->socketDescriptor(), NULL, QOSTrafficTypeAudioVideo, QOS_NON_ADAPTIVE_FLOW, &dwFlow)) - qWarning("Connection: Failed to add flow to QOS"); -#elif defined(Q_OS_UNIX) - int val = 0xa0; - if (setsockopt(qtsSocket->socketDescriptor(), IPPROTO_IP, IP_TOS, &val, sizeof(val))) { - int val = 0x60; - if (setsockopt(qtsSocket->socketDescriptor(), IPPROTO_IP, IP_TOS, &val, sizeof(val))) - qWarning("Connection: Failed to set TOS for TCP Socket"); - } -#endif -} - -int Connection::activityTime() const { - return qtLastPacket.elapsed(); -} - -void Connection::socketRead() { - // QSslSocket will, during writes, emit readyRead. Meaning we'd reenter from the message handlers. - // At the same time, DBus connections don't like getting multiple concurrent requests. - // So, this is a big workaround to serialize user requests. - -#if (QT_VERSION < 0x040400) - int iPrevLevel = iReceiveLevel; - - iReceiveLevel = 2; - - if (iPrevLevel == 2) { - // Recursive entry. Put on list and ignore. - qsReceivers.insert(this); - return; - } else if (iPrevLevel == 1) { - // We're iterating from the topmost one. - qsReceivers.remove(this); - } - - int iAvailable = qtsSocket->bytesAvailable(); - - - if (iPacketLength == -1) { - if (iAvailable < 3) { - iReceiveLevel = iPrevLevel; - return; - } - - unsigned char a_ucBuffer[3]; - - qtsSocket->read(reinterpret_cast(a_ucBuffer), 3); - iPacketLength = ((a_ucBuffer[0] << 16) & 0xff0000) + ((a_ucBuffer[1] << 8) & 0xff00) + a_ucBuffer[2]; - iAvailable -= 3; - } - - if ((iPacketLength != -1) && (iAvailable >= iPacketLength)) { - QByteArray qbaBuffer = qtsSocket->read(iPacketLength); - iPacketLength = -1; - qtLastPacket.restart(); - iAvailable -= iPacketLength; - if (iAvailable >= 3) - qsReceivers.insert(this); - - emit message(qbaBuffer); - } - - // At this point, the current *this might be destroyed. - - if (iPrevLevel == 0) { - iReceiveLevel = 1; - QSet::const_iterator i = qsReceivers.constBegin(); - while (i != qsReceivers.constEnd()) { - (*i)->socketRead(); - i = qsReceivers.constBegin(); - } - } - iReceiveLevel = iPrevLevel; -#else - while (true) { - qint64 iAvailable = qtsSocket->bytesAvailable(); - if (iPacketLength == -1) { - if (iAvailable < 3) - return; - - unsigned char a_ucBuffer[3]; - - qtsSocket->read(reinterpret_cast(a_ucBuffer), 3); - iPacketLength = ((a_ucBuffer[0] << 16) & 0xff0000) + ((a_ucBuffer[1] << 8) & 0xff00) + a_ucBuffer[2]; - iAvailable -= 3; - } - - if ((iPacketLength == -1) || (iAvailable < iPacketLength)) - return; - - QByteArray qbaBuffer = qtsSocket->read(iPacketLength); - iPacketLength = -1; - qtLastPacket.restart(); - iAvailable -= iPacketLength; - - emit message(qbaBuffer); - } -#endif -} - -void Connection::socketError(QAbstractSocket::SocketError) { - if (! bDisconnectedEmitted) { - bDisconnectedEmitted = true; - emit connectionClosed(qtsSocket->errorString()); - } -} - -void Connection::socketSslErrors(const QList &qlErr) { - emit handleSslErrors(qlErr); -} - -void Connection::proceedAnyway() { - qtsSocket->ignoreSslErrors(); -} - -void Connection::socketDisconnected() { - if (! bDisconnectedEmitted) { - bDisconnectedEmitted = true; - emit connectionClosed(QString()); - } -} - -void Connection::sendMessage(const Message *mMsg) { - QByteArray qbaBuffer; - mMsg->messageToNetwork(qbaBuffer); - - sendMessage(qbaBuffer); -} - -void Connection::sendMessage(const QByteArray &qbaMsg) { - STACKVAR(unsigned char, a_ucBuffer, 3 + qbaMsg.size()); - - if (qtsSocket->state() != QAbstractSocket::ConnectedState) - return; - - if (! qtsSocket->isEncrypted()) - return; - - if (qbaMsg.size() > 0xfffff) { - qFatal("Connection: Oversized message (%d bytes)", qbaMsg.size()); - } - - a_ucBuffer[0]=static_cast((qbaMsg.size() >> 16) & 0xff); - a_ucBuffer[1]=static_cast((qbaMsg.size() >> 8) & 0xff); - a_ucBuffer[2]=static_cast(qbaMsg.size() & 0xff); - memcpy(a_ucBuffer + 3, qbaMsg.constData(), qbaMsg.size()); - -#if (QT_VERSION < 0x040400) - int iPrevLevel = iReceiveLevel; - iReceiveLevel = 2; -#endif - - qtsSocket->write(reinterpret_cast(a_ucBuffer), 3 + qbaMsg.size()); - -#if (QT_VERSION < 0x040400) - if (iPrevLevel == 0) { - iReceiveLevel = 1; - QSet::const_iterator i = qsReceivers.constBegin(); - while (i != qsReceivers.constEnd()) { - (*i)->socketRead(); - i = qsReceivers.constBegin(); - } - } - iReceiveLevel = iPrevLevel; -#endif -} - -void Connection::forceFlush() { - if (qtsSocket->state() != QAbstractSocket::ConnectedState) - return; - - if (! qtsSocket->isEncrypted()) - return; - - int nodelay; - - qtsSocket->flush(); - - nodelay = 1; - setsockopt(qtsSocket->socketDescriptor(), IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&nodelay), sizeof(nodelay)); - nodelay = 0; - setsockopt(qtsSocket->socketDescriptor(), IPPROTO_TCP, TCP_NODELAY, reinterpret_cast(&nodelay), sizeof(nodelay)); -} - -void Connection::disconnectSocket(bool force) { - if (force) - qtsSocket->abort(); - else - qtsSocket->disconnectFromHost(); -} - -void Connection::updatePing(double &avg, double &var, quint32 &samples, quint64 usec) { - samples++; - double x = static_cast(usec) / 1000.0; - double delta = x - avg; - avg += delta / static_cast(samples); - var += delta * (x - avg); -}; - -QHostAddress Connection::peerAddress() const { - return qtsSocket->peerAddress(); -} - -quint16 Connection::peerPort() const { - return qtsSocket->peerPort(); -} - -QList Connection::peerCertificateChain() const { - return qtsSocket->peerCertificateChain(); -} - -QSslCipher Connection::sessionCipher() const { - return qtsSocket->sessionCipher(); -} - -#ifdef Q_OS_WIN -void Connection::setQoS(HANDLE hParentQoS) { - hQoS = hParentQoS; -} -#endif diff -Nru mumble-1.2.3/src/mumble11x/Connection.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Connection.h --- mumble-1.2.3/src/mumble11x/Connection.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Connection.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _CONNECTION_H -#define _CONNECTION_H - -#include "murmur_pch.h" -#include "CryptState.h" - -class Message; - -class Connection : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(Connection) - private: - static int iReceiveLevel; - static QSet qsReceivers; - protected: - QSslSocket *qtsSocket; - QTime qtLastPacket; - int iPacketLength; - bool bDisconnectedEmitted; -#ifdef Q_OS_WIN - static HANDLE hQoS; - DWORD dwFlow; -#endif - protected slots: - void socketRead(); - void socketError(QAbstractSocket::SocketError); - void socketDisconnected(); - void socketSslErrors(const QList &errors); - public slots: - void proceedAnyway(); - signals: - void connectionClosed(QString reason); - void message(QByteArray &); - void handleSslErrors(const QList &); - - void recheckBuffer(); - public: - Connection(QObject *parent, QSslSocket *qtsSocket); - ~Connection(); - void sendMessage(const Message *mMsg); - void sendMessage(const QByteArray &qbaMsg); - void disconnectSocket(bool force=false); - void forceFlush(); - int activityTime() const; - - CryptState csCrypt; - - double dUDPPingAvg; - double dUDPPingVar; - quint32 uiUDPPackets; - double dTCPPingAvg; - double dTCPPingVar; - quint32 uiTCPPackets; - - static void updatePing(double &avg, double &var, quint32 &samples, quint64 usec); - - QList peerCertificateChain() const; - QSslCipher sessionCipher() const; - QHostAddress peerAddress() const; - quint16 peerPort() const; - - void setToS(); -#ifdef Q_OS_WIN - static void setQoS(HANDLE hParentQoS); -#endif -}; - -#else -class Connection; -#endif diff -Nru mumble-1.2.3/src/mumble11x/CoreAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/CoreAudio.cpp --- mumble-1.2.3/src/mumble11x/CoreAudio.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/CoreAudio.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,649 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009-2010, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "CoreAudio.h" -#include "User.h" -#include "Global.h" - -class CoreAudioInputRegistrar : public AudioInputRegistrar { - public: - CoreAudioInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; -}; - -class CoreAudioOutputRegistrar : public AudioOutputRegistrar { - public: - CoreAudioOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - bool canMuteOthers() const; -}; - -class CoreAudioInit : public DeferInit { - CoreAudioInputRegistrar *cairReg; - CoreAudioOutputRegistrar *caorReg; - public: - void initialize(); - void destroy(); -}; - -static CoreAudioInit cainit; - -void CoreAudioInit::initialize() { - cairReg = new CoreAudioInputRegistrar(); - caorReg = new CoreAudioOutputRegistrar(); -} - -void CoreAudioInit::destroy() { - delete cairReg; - delete caorReg; -} - -CFStringRef CoreAudioSystem::QStringToCFString(const QString &str) { - return CFStringCreateWithCharacters(kCFAllocatorDefault, reinterpret_cast(str.unicode()), str.length()); -} - -const QList CoreAudioSystem::getDeviceChoices(bool input) { - QHash qhDevices = CoreAudioSystem::getDevices(input); - QList qlReturn; - QStringList qlDevices; - - qhDevices.insert(QString(), tr("Default Device")); - qlDevices = qhDevices.keys(); - - const QString &qsDev = input ? g.s.qsCoreAudioInput : g.s.qsCoreAudioOutput; - if (qlDevices.contains(qsDev)) { - qlDevices.removeAll(qsDev); - qlDevices.prepend(qsDev); - } - - foreach(const QString &qsIdentifier, qlDevices) { - qlReturn << audioDevice(qhDevices.value(qsIdentifier), qsIdentifier); - } - - return qlReturn; -} - -const QHash CoreAudioSystem::getDevices(bool input) { - QHash qhReturn; - UInt32 len, ndevs; - OSStatus err; - - err = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &len, NULL); - if (err != noErr) - return qhReturn; - - ndevs = len / sizeof(AudioDeviceID); - AudioDeviceID devs[ndevs]; - - err = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &len, devs); - if (err != noErr) - return qhReturn; - - for (UInt32 i = 0; i < ndevs; i++) { - QString qsDeviceName; - QString qsDeviceIdentifier; - char buf[4096]; - - /* Get number of channels, to determine whether we're an input or an output... */ - AudioBufferList *bufs = NULL; - - err = AudioDeviceGetPropertyInfo(devs[i], 0, input, kAudioDevicePropertyStreamConfiguration, &len, NULL); - if (err != noErr) { - qWarning("CoreAudioSystem: Failed to get length of AudioStreamConfiguration. Unable to allocate."); - continue; - } - - bufs = reinterpret_cast(malloc(len)); - err = AudioDeviceGetProperty(devs[i], 0, input, kAudioDevicePropertyStreamConfiguration, &len, bufs); - if (! bufs || err != noErr) { - qWarning("CoreAudioSystem: Failed to get AudioStreamConfiguration from device."); - free(bufs); - continue; - } - - UInt32 channels = 0; - for (int j = 0; j < bufs->mNumberBuffers; j++) { - channels += bufs->mBuffers[j].mNumberChannels; - } - - free(bufs); - - if (! channels) - continue; - - /* Get device name. */ - len = sizeof(CFStringRef); - CFStringRef devName = NULL; - err = AudioDeviceGetProperty(devs[i], 0, 0, kAudioDevicePropertyDeviceNameCFString, &len, &devName); - if (! devName || err != noErr) { - qWarning("CoreAudioSystem: Failed to get device name. Skipping device."); - } - CFStringGetCString(devName, buf, 4096, kCFStringEncodingUTF8); - qsDeviceName = QString::fromUtf8(buf); - CFRelease(devName); - - /* Device UID. */ - CFStringRef devUid = NULL; - err = AudioDeviceGetProperty(devs[i], 0, 0, kAudioDevicePropertyDeviceUID, &len, &devUid); - if (! devUid || err != noErr) { - qWarning("CoreAudioSystem: Failed to get device UID. Skipping device."); - } - CFStringGetCString(devUid, buf, 4096, kCFStringEncodingUTF8); - qsDeviceIdentifier = QString::fromUtf8(buf); - CFRelease(devUid); - - qhReturn.insert(qsDeviceIdentifier, qsDeviceName); - } - - return qhReturn; -} - -CoreAudioInputRegistrar::CoreAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("CoreAudio"), 10) { -} - -AudioInput *CoreAudioInputRegistrar::create() { - return new CoreAudioInput(); -} - -const QList CoreAudioInputRegistrar::getDeviceChoices() { - return CoreAudioSystem::getDeviceChoices(true); -} - -void CoreAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsCoreAudioInput = choice.toString(); -} - -bool CoreAudioInputRegistrar::canEcho(const QString &outputsys) const { - return false; -} - -CoreAudioOutputRegistrar::CoreAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("CoreAudio"), 10) { -} - -AudioOutput *CoreAudioOutputRegistrar::create() { - return new CoreAudioOutput(); -} - -const QList CoreAudioOutputRegistrar::getDeviceChoices() { - return CoreAudioSystem::getDeviceChoices(false); -} - -void CoreAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsCoreAudioOutput = choice.toString(); -} - -bool CoreAudioOutputRegistrar::canMuteOthers() const { - return false; -} - -CoreAudioInput::CoreAudioInput() { - OSStatus err; - AudioStreamBasicDescription fmt; - AudioDeviceID devId = 0; - CFStringRef devUid = NULL; - UInt32 val, len; - - memset(&buflist, 0, sizeof(AudioBufferList)); - - if (! g.s.qsCoreAudioInput.isEmpty()) { - qWarning("CoreAudioInput: Set device to '%s'.", qPrintable(g.s.qsCoreAudioInput)); - devUid = CoreAudioSystem::QStringToCFString(g.s.qsCoreAudioInput); - - AudioValueTranslation avt; - avt.mInputData = const_cast(&devUid); - avt.mInputDataSize = sizeof(CFStringRef *); - avt.mOutputData = &devId; - avt.mOutputDataSize = sizeof(AudioDeviceID); - - len = sizeof(AudioValueTranslation); - err = AudioHardwareGetProperty(kAudioHardwarePropertyDeviceForUID, &len, &avt); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to query for AudioDeviceID."); - return; - } - } else { - qWarning("CoreAudioInput: Set device to 'Default Device'."); - - len = sizeof(AudioDeviceID); - err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultInputDevice, &len, &devId); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to query for default input AudioDeviceID."); - return; - } - - len = sizeof(CFStringRef); - err = AudioDeviceGetProperty(devId, 0, true, kAudioDevicePropertyDeviceUID, &len, &devUid); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to get default device UID."); - return; - } - } - - Component comp; - ComponentDescription desc; - - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_HALOutput; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; - - comp = FindNextComponent(NULL, &desc); - if (comp == NULL) { - qWarning("CoreAudioInput: Unable to find AudioUnit."); - return; - } - - err = OpenAComponent(comp, &au); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to open AudioUnit component."); - return; - } - - err = AudioUnitInitialize(au); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to initialize AudioUnit."); - return; - } - - val = 1; - err = AudioUnitSetProperty(au, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &val, sizeof(UInt32)); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to configure input scope on AudioUnit."); - return; - } - - val = 0; - err = AudioUnitSetProperty(au, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, 0, &val, sizeof(UInt32)); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to configure output scope on AudioUnit."); - return; - } - - len = sizeof(AudioDeviceID); - err = AudioUnitSetProperty(au, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &devId, len); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to set device of AudioUnit."); - return; - } - - len = sizeof(AudioStreamBasicDescription); - err = AudioUnitGetProperty(au, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 1, &fmt, &len); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to query device for stream info."); - return; - } - - if (fmt.mFormatFlags & kAudioFormatFlagIsFloat) { - eMicFormat = SampleFloat; - } else if (fmt.mFormatFlags & kAudioFormatFlagIsSignedInteger) { - eMicFormat = SampleShort; - } - - if (fmt.mChannelsPerFrame > 1) { - qWarning("CoreAudioInput: Input device with more than one channel detected. Defaulting to 1."); - } - - iMicFreq = static_cast(fmt.mSampleRate); - iMicChannels = 1; - initializeMixer(); - - if (eMicFormat == SampleFloat) { - fmt.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; - fmt.mBitsPerChannel = sizeof(float) * 8; - } else if (eMicFormat == SampleShort) { - fmt.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; - fmt.mBitsPerChannel = sizeof(short) * 8; - } - - fmt.mFormatID = kAudioFormatLinearPCM; - fmt.mSampleRate = iMicFreq; - fmt.mChannelsPerFrame = iMicChannels; - fmt.mBytesPerFrame = iMicSampleSize; - fmt.mBytesPerPacket = iMicSampleSize; - fmt.mFramesPerPacket = 1; - - len = sizeof(AudioStreamBasicDescription); - err = AudioUnitSetProperty(au, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &fmt, len); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to set stream format for output device."); - return; - } - - err = AudioUnitAddPropertyListener(au, kAudioUnitProperty_StreamFormat, CoreAudioInput::propertyChange, this); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to create input property change listener. Unable to listen to property change events."); - } - - AURenderCallbackStruct cb; - cb.inputProc = CoreAudioInput::inputCallback; - cb.inputProcRefCon = this; - len = sizeof(AURenderCallbackStruct); - err = AudioUnitSetProperty(au, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, 0, &cb, len); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to setup callback."); - return; - } - - AudioValueRange range; - len = sizeof(AudioValueRange); - err = AudioDeviceGetProperty(devId, 0, true, kAudioDevicePropertyBufferFrameSizeRange, &len, &range); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to query for allowed buffer size ranges."); - } else { - qWarning("CoreAudioInput: BufferFrameSizeRange = (%.2f, %.2f)", range.mMinimum, range.mMaximum); - } - - int iActualBufferLength = iMicLength; - val = iMicLength; - err = AudioDeviceSetProperty(devId, NULL, 0, true, kAudioDevicePropertyBufferFrameSize, sizeof(UInt32), &val); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to set preferred buffer size on device. Querying for device default."); - len = sizeof(UInt32); - err = AudioDeviceGetProperty(devId, 0, true, kAudioDevicePropertyBufferFrameSize, &len, &val); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to query device for buffer size."); - return; - } - - iActualBufferLength = (int) val; - } - - buflist.mNumberBuffers = 1; - AudioBuffer *b = buflist.mBuffers; - b->mNumberChannels = iMicChannels; - b->mDataByteSize = iMicSampleSize * iActualBufferLength; - b->mData = calloc(1, b->mDataByteSize); - - err = AudioOutputUnitStart(au); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to start AudioUnit."); - return; - } - - bRunning = true; -}; - -CoreAudioInput::~CoreAudioInput() { - OSStatus err; - - bRunning = false; - wait(); - - if (au) { - err = AudioOutputUnitStop(au); - if (err != noErr) { - qWarning("CoreAudioInput: Unable to stop AudioUnit."); - } - } - - AudioBuffer *b = buflist.mBuffers; - if (b && b->mData) - free(b->mData); - - qWarning("CoreAudioInput: Shutting down."); -} - -OSStatus CoreAudioInput::inputCallback(void *udata, AudioUnitRenderActionFlags *flags, const AudioTimeStamp *ts, - UInt32 busnum, UInt32 nframes, AudioBufferList *buflist) { - CoreAudioInput *i = reinterpret_cast(udata); - OSStatus err; - - err = AudioUnitRender(i->au, flags, ts, busnum, nframes, &i->buflist); - if (err != noErr) { - qWarning("CoreAudioInput: AudioUnitRender failed."); - return err; - } - - i->addMic(i->buflist.mBuffers->mData, nframes); - - return noErr; -} - -void CoreAudioInput::propertyChange(void *udata, AudioUnit au, AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement element) { - if (prop == kAudioUnitProperty_StreamFormat) { - qWarning("CoreAudioInput: Stream format change detected. Restarting AudioInput."); - Audio::stopInput(); - Audio::startInput(); - } else { - qWarning("CoreAudioInput: Unexpected property changed event received."); - } -} - -void CoreAudioInput::run() { -} - -CoreAudioOutput::CoreAudioOutput() { - OSStatus err; - AudioStreamBasicDescription fmt; - unsigned int chanmasks[32]; - AudioDeviceID devId = 0; - CFStringRef devUid = NULL; - UInt32 len; - - if (! g.s.qsCoreAudioOutput.isEmpty()) { - devUid = CoreAudioSystem::QStringToCFString(g.s.qsCoreAudioOutput); - qWarning("CoreAudioOutput: Set device to '%s'.", qPrintable(g.s.qsCoreAudioOutput)); - - AudioValueTranslation avt; - avt.mInputData = const_cast(&devUid); - avt.mInputDataSize = sizeof(CFStringRef *); - avt.mOutputData = &devId; - avt.mOutputDataSize = sizeof(AudioDeviceID); - - len = sizeof(AudioValueTranslation); - err = AudioHardwareGetProperty(kAudioHardwarePropertyDeviceForUID, &len, &avt); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to query for AudioDeviceID."); - return; - } - } else { - qWarning("CoreAudioOutput: Set device to 'Default Device'."); - - len = sizeof(AudioDeviceID); - err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &len, &devId); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to query for default output AudioDeviceID"); - return; - } - - len = sizeof(CFStringRef); - err = AudioDeviceGetProperty(devId, 0, false, kAudioDevicePropertyDeviceUID, &len, &devUid); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to get default device UID."); - return; - } - - } - - Component comp; - ComponentDescription desc; - - desc.componentType = kAudioUnitType_Output; - desc.componentSubType = kAudioUnitSubType_HALOutput; - desc.componentManufacturer = kAudioUnitManufacturer_Apple; - desc.componentFlags = 0; - desc.componentFlagsMask = 0; - - comp = FindNextComponent(NULL, &desc); - if (comp == NULL) { - qWarning("CoreAudioOuput: Unable to find AudioUnit."); - return; - } - - err = OpenAComponent(comp, &au); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to open AudioUnit component."); - return; - } - - err = AudioUnitInitialize(au); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to initialize output AudioUnit"); - return; - } - - len = sizeof(AudioDeviceID); - err = AudioUnitSetProperty(au, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Global, 0, &devId, len); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to set CurrentDevice property on AudioUnit."); - return; - } - - len = sizeof(AudioStreamBasicDescription); - err = AudioUnitGetProperty(au, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &fmt, &len); - if (err != noErr) { - qWarning("CoreAudioOuptut: Unable to query device for stream info."); - return; - } - - iMixerFreq = static_cast(fmt.mSampleRate); - iChannels = static_cast(fmt.mChannelsPerFrame); - - if (fmt.mFormatFlags & kAudioFormatFlagIsFloat) { - eSampleFormat = SampleFloat; - } else if (fmt.mFormatFlags & kAudioFormatFlagIsSignedInteger) { - eSampleFormat = SampleShort; - } - - chanmasks[0] = SPEAKER_FRONT_LEFT; - chanmasks[1] = SPEAKER_FRONT_RIGHT; - initializeMixer(chanmasks); - - if (eSampleFormat == SampleFloat) { - fmt.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagIsPacked; - fmt.mBitsPerChannel = sizeof(float) * 8; - } else if (eSampleFormat == SampleShort) { - fmt.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; - fmt.mBitsPerChannel = sizeof(short) * 8; - } - - fmt.mFormatID = kAudioFormatLinearPCM; - fmt.mSampleRate = iMixerFreq; - fmt.mChannelsPerFrame = iChannels; - fmt.mBytesPerFrame = iSampleSize; - fmt.mBytesPerPacket = iSampleSize; - fmt.mFramesPerPacket = 1; - - len = sizeof(AudioStreamBasicDescription); - err = AudioUnitSetProperty(au, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &fmt, len); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to set stream format for output device."); - return; - } - - err = AudioUnitAddPropertyListener(au, kAudioUnitProperty_StreamFormat, CoreAudioOutput::propertyChange, this); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to create output property change listener. Unable to listen to property change events."); - } - - AURenderCallbackStruct cb; - cb.inputProc = CoreAudioOutput::outputCallback; - cb.inputProcRefCon = this; - len = sizeof(AURenderCallbackStruct); - err = AudioUnitSetProperty(au, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Global, 0, &cb, len); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to setup callback."); - return; - } - - AudioValueRange range; - len = sizeof(AudioValueRange); - err = AudioDeviceGetProperty(devId, 0, false, kAudioDevicePropertyBufferFrameSizeRange, &len, &range); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to query for allowed buffer size ranges."); - } else { - qWarning("CoreAudioOutput: BufferFrameSizeRange = (%.2f, %.2f)", range.mMinimum, range.mMaximum); - } - - UInt32 val = (iFrameSize * iMixerFreq) / SAMPLE_RATE; - err = AudioDeviceSetProperty(devId, NULL, 0, false, kAudioDevicePropertyBufferFrameSize, sizeof(UInt32), &val); - if (err != noErr) { - qWarning("CoreAudioOutput: Could not set requested buffer size for device. Continuing with default."); - } - - err = AudioOutputUnitStart(au); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to start AudioUnit"); - return; - } - - bRunning = true; -} - -CoreAudioOutput::~CoreAudioOutput() { - OSStatus err; - - bRunning = false; - wait(); - - if (au) { - err = AudioOutputUnitStop(au); - if (err != noErr) { - qWarning("CoreAudioOutput: Unable to stop AudioUnit."); - } - } - - qWarning("CoreAudioOutput: Shutting down."); -} - -OSStatus CoreAudioOutput::outputCallback(void *udata, AudioUnitRenderActionFlags *flags, const AudioTimeStamp *ts, - UInt32 busnum, UInt32 nframes, AudioBufferList *buflist) { - CoreAudioOutput *o = reinterpret_cast(udata); - AudioBuffer *buf = buflist->mBuffers; - OSStatus err; - - bool done = o->mix(buf->mData, nframes); - if (! done) { - buf->mDataByteSize = 0; - return -1; - } - - return noErr; -} - -void CoreAudioOutput::propertyChange(void *udata, AudioUnit au, AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement element) { - if (prop == kAudioUnitProperty_StreamFormat) { - qWarning("CoreAudioOuptut: Stream format change detected. Restarting AudioOutput."); - Audio::stopOutput(); - Audio::startOutput(); - } else { - qWarning("CoreAudioOutput: Unexpected property changed event received."); - } -} - -void CoreAudioOutput::run() { -} diff -Nru mumble-1.2.3/src/mumble11x/CoreAudio.h mumble-1.2.3-87-gf7d8711/src/mumble11x/CoreAudio.h --- mumble-1.2.3/src/mumble11x/CoreAudio.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/CoreAudio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,87 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _COREAUDIO_H -#define _COREAUDIO_H - -#include "AudioInput.h" -#include "AudioOutput.h" - -#include - -class CoreAudioSystem : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(CoreAudioSystem) - public: - static CFStringRef QStringToCFString(const QString &str); - static const QHash getDevices(bool input); - static const QList getDeviceChoices(bool input); -}; - -class CoreAudioInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(CoreAudioInput) - protected: - AudioUnit au; - AUEventListenerRef el; - AudioBufferList buflist; - static void propertyChange(void *udata, AudioUnit au, AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement element); - static OSStatus inputCallback(void *udata, AudioUnitRenderActionFlags *flags, const AudioTimeStamp *ts, - UInt32 busnum, UInt32 npackets, AudioBufferList *buflist); - public: - CoreAudioInput(); - ~CoreAudioInput(); - void run(); -}; - -class CoreAudioOutput : public AudioOutput { - private: - Q_OBJECT - Q_DISABLE_COPY(CoreAudioOutput) - protected: - AudioUnit au; - AUEventListenerRef el; - static void propertyChange(void *udata, AudioUnit au, AudioUnitPropertyID prop, AudioUnitScope scope, AudioUnitElement element); - static OSStatus outputCallback(void *udata, AudioUnitRenderActionFlags *flags, const AudioTimeStamp *ts, - UInt32 busnum, UInt32 npackets, AudioBufferList *buflist); - public: - CoreAudioOutput(); - ~CoreAudioOutput(); - void run(); -}; - -#else -class CoreAudioSystem; -class CoreAudioInput; -class CoreAudioOutput; -#endif diff -Nru mumble-1.2.3/src/mumble11x/CrashReporter.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/CrashReporter.cpp --- mumble-1.2.3/src/mumble11x/CrashReporter.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/CrashReporter.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,241 +0,0 @@ -/* Copyright (C) 2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "CrashReporter.h" -#include "Global.h" -#include "OSInfo.h" -#include "NetworkConfig.h" - -CrashReporter::CrashReporter(QWidget *p) : QDialog(p) { - setWindowTitle(tr("Mumble Crash Report")); - - QVBoxLayout *vbl= new QVBoxLayout(this); - - QLabel *l; - - l = new QLabel(tr("

We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?

" - "

The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.

")); - - vbl->addWidget(l); - - QHBoxLayout *hbl = new QHBoxLayout(); - - qleEmail = new QLineEdit(g.qs->value(QLatin1String("crashemail")).toString()); - l = new QLabel(tr("Email address (optional)")); - l->setBuddy(qleEmail); - - hbl->addWidget(l); - hbl->addWidget(qleEmail, 1); - vbl->addLayout(hbl); - - qteDescription=new QTextEdit(); - l->setBuddy(qteDescription); - l = new QLabel(tr("Please describe briefly, in English, what you were doing at the time of the crash")); - - vbl->addWidget(l); - vbl->addWidget(qteDescription, 1); - - QPushButton *pbOk = new QPushButton(tr("Send Report")); - pbOk->setDefault(true); - - QPushButton *pbCancel = new QPushButton(tr("Don't send report")); - pbCancel->setAutoDefault(false); - - QDialogButtonBox *dbb = new QDialogButtonBox(Qt::Horizontal); - dbb->addButton(pbOk, QDialogButtonBox::AcceptRole); - dbb->addButton(pbCancel, QDialogButtonBox::RejectRole); - connect(dbb, SIGNAL(accepted()), this, SLOT(accept())); - connect(dbb, SIGNAL(rejected()), this, SLOT(reject())); - vbl->addWidget(dbb); - - qelLoop = new QEventLoop(this); - qpdProgress = NULL; - qnrReply = NULL; -} - -CrashReporter::~CrashReporter() { - g.qs->setValue(QLatin1String("crashemail"), qleEmail->text()); - delete qnrReply; -} - -void CrashReporter::uploadFinished() { - qpdProgress->reset(); - if (qnrReply->error() == QNetworkReply::NoError) { - if (qnrReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() == 200) - QMessageBox::information(NULL, tr("Crash upload successful"), tr("Thank you for helping make Mumble better!")); - else - QMessageBox::critical(NULL, tr("Crash upload failed"), tr("We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer.").arg(qnrReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()).arg(qnrReply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString())); - } else { - QMessageBox::critical(NULL, tr("Crash upload failed"), tr("This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1").arg(qnrReply->error())); - } - qelLoop->exit(0); -} - -void CrashReporter::uploadProgress(qint64 sent, qint64 total) { - qpdProgress->setMaximum(static_cast(total)); - qpdProgress->setValue(static_cast(sent)); -} - -void CrashReporter::run() { - QByteArray qbaDumpContents; -#ifdef COMPAT_CLIENT -#ifdef Q_OS_MAC - QFile qfCrashDump(QDir::homePath() + QLatin1String("/Library/Preferences/Mumble/mumble11x.dmp")); -#else - QFile qfCrashDump(QDesktopServices::storageLocation(QDesktopServices::DataLocation) + QLatin1String("/mumble11x.dmp")); -#endif -#else - QFile qfCrashDump(g.qdBasePath.filePath(QLatin1String("mumble.dmp"))); -#endif - if (! qfCrashDump.exists()) - return; - - qfCrashDump.open(QIODevice::ReadOnly); - -#if defined(Q_OS_WIN) - /* On Windows, the .dmp file is a real minidump. */ - - if (qfCrashDump.peek(4) != "MDMP") - return; - qbaDumpContents = qfCrashDump.readAll(); - -#elif defined(Q_OS_MAC) - /* - * On OSX, the .dmp file is simply a dummy file that we - * use to find the *real* crash dump, made by the OSX - * built in crash reporter. - */ - QFileInfo qfiDump(qfCrashDump); - QDateTime qdtModification = qfiDump.lastModified(); - - /* Find the real crash report. */ - QDir qdCrashReports(QDir::home().absolutePath() + QLatin1String("/Library/Logs/DiagnosticReports/")); - if (! qdCrashReports.exists()) { - qdCrashReports = QDir::home().absolutePath() + QLatin1String("/Library/Logs/CrashReporter/"); - } - - QStringList qslFilters; -#ifdef COMPAT_CLIENT - qslFilters << QString::fromLatin1("Mumble11x_*.crash"); -#else - qslFilters << QString::fromLatin1("Mumble_*.crash"); -#endif - qdCrashReports.setNameFilters(qslFilters); - qdCrashReports.setSorting(QDir::Time); - QFileInfoList qfilEntries = qdCrashReports.entryInfoList(); - - /* - * Figure out if our delta is sufficiently close to the Apple crash dump, or - * if something weird happened. - */ - foreach(QFileInfo fi, qfilEntries) { - int delta = abs(qdtModification.secsTo(fi.lastModified())); - if (delta < 8) { - QFile f(fi.absoluteFilePath()); - f.open(QIODevice::ReadOnly); - qbaDumpContents = f.readAll(); - break; - } - } -#endif - - QString details; -#ifdef Q_OS_WIN - { - QTemporaryFile qtf; - if (qtf.open()) { - qtf.close(); - - QProcess qp; - QStringList qsl; - - qsl << QLatin1String("/t"); - qsl << qtf.fileName(); - - QString app = QLatin1String("dxdiag.exe"); - wchar_t *sr = NULL; - size_t srsize = 0; - if (_wdupenv_s(&sr, &srsize, L"SystemRoot") == 0) { - app = QDir::fromNativeSeparators(QString::fromWCharArray(sr)) + QLatin1String("/System32/dxdiag.exe"); - free(sr); - } - - qp.start(app, qsl); - if (qp.waitForFinished(30000)) { - if (qtf.open()) { - QByteArray qba = qtf.readAll(); - details = QString::fromLocal8Bit(qba); - } - } else { - details = QLatin1String("Failed to run dxdiag"); - } - qp.kill(); - } - } -#endif - - if (qbaDumpContents.isEmpty()) { - qWarning("CrashReporter: Empty crash dump file, not reporting."); - return; - } - - if (exec() == QDialog::Accepted) { - qpdProgress = new QProgressDialog(tr("Uploading crash report"), tr("Abort upload"), 0, 100, this); - qpdProgress->setMinimumDuration(500); - qpdProgress->setValue(0); - connect(qpdProgress, SIGNAL(canceled()), qelLoop, SLOT(quit())); - - QString boundary = QString::fromLatin1("---------------------------%1").arg(QDateTime::currentDateTime().toTime_t()); - - QString os = QString::fromLatin1("--%1\r\nContent-Disposition: form-data; name=\"os\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%2 %3\r\n").arg(boundary, OSInfo::getOS(), OSInfo::getOSVersion()); - QString ver = QString::fromLatin1("--%1\r\nContent-Disposition: form-data; name=\"ver\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%2 %3\r\n").arg(boundary, QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING)), QLatin1String(MUMBLE_RELEASE)); - QString email = QString::fromLatin1("--%1\r\nContent-Disposition: form-data; name=\"email\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%2\r\n").arg(boundary, qleEmail->text()); - QString descr = QString::fromLatin1("--%1\r\nContent-Disposition: form-data; name=\"desc\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%2\r\n").arg(boundary, qteDescription->toPlainText()); - QString det = QString::fromLatin1("--%1\r\nContent-Disposition: form-data; name=\"details\"\r\nContent-Transfer-Encoding: 8bit\r\n\r\n%2\r\n").arg(boundary, details); - QString head = QString::fromLatin1("--%1\r\nContent-Disposition: form-data; name=\"dump\"; filename=\"mumble.dmp\"\r\nContent-Type: binary/octet-stream\r\n\r\n").arg(boundary); - QString end = QString::fromLatin1("\r\n--%1--\r\n").arg(boundary); - - QByteArray post = os.toUtf8() + ver.toUtf8() + email.toUtf8() + descr.toUtf8() + det.toUtf8() + head.toUtf8() + qbaDumpContents + end.toUtf8(); - - QUrl url(QLatin1String("https://mumble.hive.no/crashreport.php")); - QNetworkRequest req(url); - req.setHeader(QNetworkRequest::ContentTypeHeader, QString::fromLatin1("multipart/form-data; boundary=%1").arg(boundary)); - req.setHeader(QNetworkRequest::ContentLengthHeader, QString::number(post.size())); - Network::prepareRequest(req); - qnrReply = g.nam->post(req, post); - connect(qnrReply, SIGNAL(finished()), this, SLOT(uploadFinished())); - connect(qnrReply, SIGNAL(uploadProgress(qint64, qint64)), this, SLOT(uploadProgress(qint64, qint64))); - - qelLoop->exec(QEventLoop::DialogExec); - } - - if (! qfCrashDump.remove()) - qWarning("CrashReporeter: Unable to remove crash file."); -} diff -Nru mumble-1.2.3/src/mumble11x/CrashReporter.h mumble-1.2.3-87-gf7d8711/src/mumble11x/CrashReporter.h --- mumble-1.2.3/src/mumble11x/CrashReporter.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/CrashReporter.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* Copyright (C) 2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef CRASHREPORTER_H -#define CRASHREPORTER_H - -#include "mumble_pch.hpp" - -class CrashReporter : QDialog { - Q_OBJECT - Q_DISABLE_COPY(CrashReporter) - - public: - CrashReporter(QWidget *p = 0); - ~CrashReporter(); - void run(); - protected: - QEventLoop *qelLoop; - QProgressDialog *qpdProgress; - QNetworkReply *qnrReply; - QLineEdit *qleEmail; - QTextEdit *qteDescription; - public slots: - void uploadFinished(); - void uploadProgress(qint64, qint64); -}; - -#else -class CrashReporter; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Database.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Database.cpp --- mumble-1.2.3/src/mumble11x/Database.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Database.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,180 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Database.h" -#include "Global.h" - -Database::Database() { - QSqlDatabase db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE")); - QSettings qs; - QStringList datapaths; - int i; - -#if defined(Q_OS_WIN) - // Check if running with local .ini file (Roaming mode) - if (g.qs->fileName().endsWith(QLatin1String("mumble.ini"), Qt::CaseInsensitive)) - datapaths << qApp->applicationDirPath(); - else if (g.qs->fileName().endsWith(QLatin1String("mumble11x.ini"), Qt::CaseInsensitive)) - datapaths << qApp->applicationDirPath(); - - size_t reqSize; - _wgetenv_s(&reqSize, NULL, 0, L"APPDATA"); - if (reqSize > 0) { - STACKVAR(wchar_t, buff, reqSize+1); - _wgetenv_s(&reqSize, buff, reqSize, L"APPDATA"); - - QDir appdir = QDir(QDir::fromNativeSeparators(QString::fromWCharArray(buff))); - - datapaths << appdir.absolutePath() + QLatin1String("/Mumble"); - } -#elif defined(Q_OS_MAC) - datapaths << QDir::homePath() + QLatin1String("/Library/Preferences/Mumble/"); -#else - datapaths << QDir::homePath() + QLatin1String("/.config/Mumble"); -#endif - - datapaths << QDir::homePath(); - datapaths << QDir::currentPath(); - datapaths << qApp->applicationDirPath(); - datapaths << qs.value(QLatin1String("InstPath")).toString(); - bool found = false; - - for (i = 0; (i < datapaths.size()) && ! found; i++) { - if (!datapaths[i].isEmpty()) { - { - QFile f(datapaths[i] + QLatin1String("/mumble11x.sqlite")); - if (f.exists()) { - db.setDatabaseName(f.fileName()); - found = db.open(); - } - } - - { - QFile f(datapaths[i] + QLatin1String("/.mumble11x.sqlite")); - if (f.exists()) { - db.setDatabaseName(f.fileName()); - found = db.open(); - } - } - - { - QFile f(datapaths[i] + QLatin1String("/mumble.sqlite")); - if (f.exists()) { - QFile f2(datapaths[i] + QLatin1String("/mumble11x.sqlite")); - if (QFile::copy(f.fileName(), f2.fileName())) { - db.setDatabaseName(f2.fileName()); - found = db.open(); - } - } - } - - { - QFile f(datapaths[i] + QLatin1String("/.mumble.sqlite")); - if (f.exists()) { - QFile f2(datapaths[i] + QLatin1String("/.mumble11x.sqlite")); - if (QFile::copy(f.fileName(), f2.fileName())) { - db.setDatabaseName(f2.fileName()); - found = db.open(); - } - } - } - } - } - - if (! found) { - for (i = 0; (i < datapaths.size()) && ! found; i++) { - if (!datapaths[i].isEmpty()) { - QDir::root().mkpath(datapaths[i]); -#ifdef Q_OS_WIN - QFile f(datapaths[i] + QLatin1String("/mumble11x.sqlite")); -#else - QFile f(datapaths[i] + QLatin1String("/.mumble11x.sqlite")); -#endif - db.setDatabaseName(f.fileName()); - found = db.open(); - } - } - } - - if (! found) { - QMessageBox::critical(NULL, QLatin1String("Mumble"), tr("Mumble failed to initialize a database in any\nof the possible locations."), QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton); - qFatal("Database: Failed initialization"); - } - - QSqlQuery query; - // query.exec("DROP TABLE servers"); - query.exec(QLatin1String("CREATE TABLE servers (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, hostname TEXT, port INTEGER DEFAULT 64738, username TEXT, password TEXT)")); - query.exec(QLatin1String("CREATE TABLE cert (id INTEGER PRIMARY KEY AUTOINCREMENT, hostname TEXT, port INTEGER, digest TEXT)")); - query.exec(QLatin1String("CREATE UNIQUE INDEX cert_host_port ON cert(hostname,port)")); -} - -const QString Database::getDigest(const QString &hostname, unsigned short port) { - QSqlQuery query; - - query.prepare(QLatin1String("SELECT digest FROM cert WHERE hostname = ? AND port = ?")); - query.addBindValue(hostname);; - query.addBindValue(port); - query.exec(); - if (query.next()) { - return query.value(0).toString(); - } - return QString(); -} - -void Database::setDigest(const QString &hostname, unsigned short port, const QString &digest) { - QSqlQuery query; - query.prepare(QLatin1String("REPLACE INTO cert (hostname,port,digest) VALUES (?,?,?)")); - query.addBindValue(hostname); - query.addBindValue(port); - query.addBindValue(digest); - query.exec(); -} - -bool Database::fuzzyMatch(QString &user, QString &pw, QString &hostname, unsigned short port) { - QSqlQuery query; - if (! user.isEmpty()) { - query.prepare(QLatin1String("SELECT username, password, hostname FROM servers WHERE username LIKE ? AND hostname LIKE ? AND port=?")); - query.addBindValue(user); - } else { - query.prepare(QLatin1String("SELECT username, password, hostname FROM servers WHERE hostname LIKE ? AND port=?")); - } - query.addBindValue(hostname); - query.addBindValue(port); - query.exec(); - if (query.next()) { - user = query.value(0).toString(); - if (pw.isEmpty()) - pw = query.value(1).toString(); - hostname = query.value(2).toString(); - return true; - } else { - return false; - } -} diff -Nru mumble-1.2.3/src/mumble11x/Database.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Database.h --- mumble-1.2.3/src/mumble11x/Database.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Database.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _DATABASE_H -#define _DATABASE_H - -#include "mumble_pch.hpp" - -class Database : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(Database) - public: - Database(); - static const QString getDigest(const QString &hostname, unsigned short port); - static void setDigest(const QString &hostname, unsigned short port, const QString &digest); - static bool fuzzyMatch(QString &user, QString &pw, QString &hostname, unsigned short port); -}; - -#else -class Database; -#endif diff -Nru mumble-1.2.3/src/mumble11x/DBus.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/DBus.cpp --- mumble-1.2.3/src/mumble11x/DBus.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/DBus.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Global.h" -#include "MainWindow.h" -#include "DBus.h" -#include "ServerHandler.h" -#include "Channel.h" -#include "Player.h" - - -MumbleDBus::MumbleDBus(QObject *mw) : QDBusAbstractAdaptor(mw) { -} - -void MumbleDBus::openUrl(const QString &url, const QDBusMessage &msg) { - QUrl u = QUrl::fromEncoded(url.toLatin1()); - bool valid = u.isValid(); - valid = valid && (u.scheme() == QLatin1String("mumble")); - if (! valid) { - QDBusConnection::sessionBus().send(msg.createErrorReply(QLatin1String("net.sourceforge.mumble.Error.url"), QLatin1String("Invalid URL"))); - } else { - g.mw->openUrl(u); - } -} - -void MumbleDBus::getCurrentUrl(const QDBusMessage &msg) { - if (!g.sh || !g.sh->isRunning() || ! g.uiSession) { - QDBusConnection::sessionBus().send(msg.createErrorReply(QLatin1String("net.sourceforge.mumble.Error.connection"), QLatin1String("Not connected"))); - return; - } - QString host, user, pw; - unsigned short port; - QUrl u; - - g.sh->getConnectionInfo(host, port, user, pw); - u.setScheme(QLatin1String("mumble")); - u.setHost(host); - u.setPort(port); - u.setUserName(user); - QStringList path; - Channel *c = ClientPlayer::get(g.uiSession)->cChannel; - while (c->cParent) { - path.prepend(c->qsName); - c = c->cParent; - } - u.setPath(path.join(QLatin1String("/"))); - QDBusConnection::sessionBus().send(msg.createReply(QString::fromLatin1(u.toEncoded()))); -} - -void MumbleDBus::focus() { - g.mw->show(); - g.mw->raise(); - g.mw->activateWindow(); -} - -void MumbleDBus::setSelfMuted(bool mute) { - g.mw->qaAudioMute->setChecked(!mute); - g.mw->qaAudioMute->trigger(); -} - -void MumbleDBus::setSelfDeaf(bool deafen) { - g.mw->qaAudioDeaf->setChecked(!deafen); - g.mw->qaAudioDeaf->trigger(); -} - -bool MumbleDBus::isSelfMuted() { - return g.s.bMute; -} - -bool MumbleDBus::isSelfDeaf() { - return g.s.bDeaf; -} diff -Nru mumble-1.2.3/src/mumble11x/DBus.h mumble-1.2.3-87-gf7d8711/src/mumble11x/DBus.h --- mumble-1.2.3/src/mumble11x/DBus.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/DBus.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _DBUS_H -#define _DBUS_H - -#include "mumble_pch.hpp" - -class MumbleDBus : public QDBusAbstractAdaptor { - private: - Q_OBJECT - Q_CLASSINFO("D-Bus Interface", "net.sourceforge.mumble.Mumble") - Q_DISABLE_COPY(MumbleDBus) - Q_PROPERTY(bool mute READ isSelfMuted WRITE setSelfMuted) - Q_PROPERTY(bool deaf READ isSelfDeaf WRITE setSelfDeaf) - public: - MumbleDBus(QObject *parent); - public slots: - void openUrl(const QString &url, const QDBusMessage &); - void getCurrentUrl(const QDBusMessage &); - void focus(); - void setSelfMuted(bool mute); - void setSelfDeaf(bool deafen); - bool isSelfMuted(); - bool isSelfDeaf(); -}; - -#else -class MumbleDBus; -#endif diff -Nru mumble-1.2.3/src/mumble11x/DirectSound.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/DirectSound.cpp --- mumble-1.2.3/src/mumble11x/DirectSound.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/DirectSound.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,641 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "DirectSound.h" -#include "MainWindow.h" -#include "Plugins.h" -#include "User.h" -#include "Global.h" - -#undef FAILED -#define FAILED(Status) (static_cast(Status)<0) - -// #define MY_DEFERRED DS3D_DEFERRED -#define MY_DEFERRED DS3D_IMMEDIATE - - -#define NBLOCKS 50 -#define MAX(a,b) ( (a) > (b) ? (a) : (b) ) -#define MIN(a,b) ( (a) < (b) ? (a) : (b) ) - -class DXAudioOutputRegistrar : public AudioOutputRegistrar { - public: - DXAudioOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - -}; - -class DXAudioInputRegistrar : public AudioInputRegistrar { - public: - DXAudioInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; - -}; - -class DirectSoundInit : public DeferInit { - DXAudioInputRegistrar *airReg; - DXAudioOutputRegistrar *aorReg; - public: - void initialize(); - void destroy(); -}; - -static DirectSoundInit dsinit; - -void DirectSoundInit::initialize() { - airReg = NULL; - aorReg = NULL; - -#ifdef USE_WASAPI - OSVERSIONINFOEXW ovi; - memset(&ovi, 0, sizeof(ovi)); - - ovi.dwOSVersionInfoSize=sizeof(ovi); - GetVersionEx(reinterpret_cast(&ovi)); - -#ifdef QT_NO_DEBUG - if ((ovi.dwMajorVersion > 6) || ((ovi.dwMajorVersion == 6) && (ovi.dwBuildNumber >= 6001))) { - HMODULE hLib = LoadLibrary(L"AVRT.DLL"); - if (hLib != NULL) { - FreeLibrary(hLib); - qWarning("DirectSound: Disabled as WASAPI is available"); - return; - } - } -#endif -#endif - - airReg = new DXAudioInputRegistrar(); - aorReg = new DXAudioOutputRegistrar(); -} - -void DirectSoundInit::destroy() { - delete airReg; - delete aorReg; -} - - -DXAudioOutputRegistrar::DXAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("DirectSound")) { -} - -AudioOutput *DXAudioOutputRegistrar::create() { - return new DXAudioOutput(); -} - -typedef QPair dsDevice; - -static BOOL CALLBACK DSEnumProc(LPGUID lpGUID, const WCHAR* lpszDesc, - const WCHAR*, void *ctx) { - if (lpGUID) { - QList *l =reinterpret_cast *>(ctx); - *l << dsDevice(QString::fromUtf16(reinterpret_cast(lpszDesc)), *lpGUID); - } - - return(true); -} - -const QList DXAudioOutputRegistrar::getDeviceChoices() { - QList qlOutput; - - qlOutput << dsDevice(DXAudioOutput::tr("Default DirectSound Voice Output"), DSDEVID_DefaultVoicePlayback); - DirectSoundEnumerate(DSEnumProc, reinterpret_cast(&qlOutput)); - - QList qlReturn; - - const GUID *lpguid = NULL; - - if (! g.s.qbaDXOutput.isEmpty()) { - lpguid = reinterpret_cast(g.s.qbaDXOutput.data()); - } else { - lpguid = &DSDEVID_DefaultVoicePlayback; - } - - foreach(dsDevice d, qlOutput) { - if (d.second == *lpguid) { - qlReturn << audioDevice(d.first, QByteArray(reinterpret_cast(&d.second), sizeof(GUID))); - } - } - foreach(dsDevice d, qlOutput) { - if (d.second != *lpguid) { - qlReturn << audioDevice(d.first, QByteArray(reinterpret_cast(&d.second), sizeof(GUID))); - } - } - return qlReturn; -} - -void DXAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qbaDXOutput = choice.toByteArray(); -} - -DXAudioInputRegistrar::DXAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("DirectSound")) { -} - -AudioInput *DXAudioInputRegistrar::create() { - return new DXAudioInput(); -} - -const QList DXAudioInputRegistrar::getDeviceChoices() { - QList qlInput; - - qlInput << dsDevice(DXAudioInput::tr("Default DirectSound Voice Input"), DSDEVID_DefaultVoiceCapture); - DirectSoundCaptureEnumerate(DSEnumProc, reinterpret_cast(&qlInput)); - - QList qlReturn; - - const GUID *lpguid = NULL; - - if (! g.s.qbaDXInput.isEmpty()) { - lpguid = reinterpret_cast(g.s.qbaDXInput.data()); - } else { - lpguid = &DSDEVID_DefaultVoiceCapture; - } - - foreach(dsDevice d, qlInput) { - if (d.second == *lpguid) { - qlReturn << audioDevice(d.first, QByteArray(reinterpret_cast(&d.second), sizeof(GUID))); - } - } - foreach(dsDevice d, qlInput) { - if (d.second != *lpguid) { - qlReturn << audioDevice(d.first, QByteArray(reinterpret_cast(&d.second), sizeof(GUID))); - } - } - return qlReturn; -} - -void DXAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qbaDXInput = choice.toByteArray(); -} - -bool DXAudioInputRegistrar::canEcho(const QString &) const { - return false; -} - -DXAudioOutput::DXAudioOutput() { -} - -DXAudioOutput::~DXAudioOutput() { - bRunning = false; - wait(); -} - -void DXAudioOutput::run() { - HRESULT hr; - DSBUFFERDESC dsbdesc; - WAVEFORMATEXTENSIBLE wfx; - WAVEFORMATEXTENSIBLE wfxSet; - int ns = 0; - unsigned int chanmasks[32]; - - LPDIRECTSOUND8 pDS = NULL; - LPDIRECTSOUNDBUFFER pDSBPrimary = NULL; - LPDIRECTSOUNDBUFFER pDSBOutput = NULL; - LPDIRECTSOUNDNOTIFY8 pDSNotify = NULL; - - DWORD dwBufferSize; - DWORD dwLastWritePos; - DWORD dwLastPlayPos; - DWORD dwTotalPlayPos; - int iLastwriteblock; - LPVOID aptr1, aptr2; - DWORD nbytes1, nbytes2; - - int playblock; - int nowriteblock; - DWORD dwPlayPosition, dwWritePosition; - - unsigned int iByteSize; - - bool bOk; - DWORD dwSpeakerConfig; - - bool failed = false; - - bOk = false; - DWORD dwMask = 0; - bool bHead = false; - - ZeroMemory(&dsbdesc, sizeof(DSBUFFERDESC)); - dsbdesc.dwSize = sizeof(DSBUFFERDESC); - dsbdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; - - if (! g.s.qbaDXOutput.isEmpty()) { - LPGUID lpguid = reinterpret_cast(g.s.qbaDXOutput.data()); - if (FAILED(hr = DirectSoundCreate8(lpguid, &pDS, NULL))) { - failed = true; - } - } - - if (! pDS && FAILED(hr = DirectSoundCreate8(&DSDEVID_DefaultVoicePlayback, &pDS, NULL))) { - qWarning("DXAudioOutput: DirectSoundCreate failed: hr=0x%08lx", hr); - goto cleanup; - } else if (FAILED(hr = pDS->SetCooperativeLevel(g.mw->winId(), DSSCL_PRIORITY))) { - qWarning("DXAudioOutput: SetCooperativeLevel failed: hr=0x%08lx", hr); - goto cleanup; - } else if (FAILED(hr = pDS->CreateSoundBuffer(&dsbdesc, &pDSBPrimary, NULL))) { - qWarning("DXAudioOutput: CreateSoundBuffer (Primary) failed: hr=0x%08lx", hr); - goto cleanup; - } - - pDS->GetSpeakerConfig(&dwSpeakerConfig); - - - switch (DSSPEAKER_CONFIG(dwSpeakerConfig)) { - case DSSPEAKER_HEADPHONE: - dwMask = KSAUDIO_SPEAKER_STEREO; - bHead = true; - break; - case DSSPEAKER_MONO: - dwMask = KSAUDIO_SPEAKER_MONO; - break; - case DSSPEAKER_QUAD: - dwMask = KSAUDIO_SPEAKER_QUAD; - break; - case DSSPEAKER_STEREO: - dwMask = KSAUDIO_SPEAKER_STEREO; - break; - case DSSPEAKER_SURROUND: - dwMask = KSAUDIO_SPEAKER_SURROUND; - break; - case DSSPEAKER_5POINT1: - dwMask = KSAUDIO_SPEAKER_5POINT1; - break; - case DSSPEAKER_7POINT1: - dwMask = KSAUDIO_SPEAKER_7POINT1; - break; - case DSSPEAKER_7POINT1_SURROUND: - dwMask = KSAUDIO_SPEAKER_7POINT1_SURROUND; - break; - case DSSPEAKER_5POINT1_SURROUND: - dwMask = KSAUDIO_SPEAKER_5POINT1_SURROUND; - break; - default: - dwMask = 0; - break; - } - - if (! g.s.doPositionalAudio()) - dwMask = KSAUDIO_SPEAKER_MONO; - - for (int i=0;i<32;i++) { - if (dwMask & (1 << i)) { - chanmasks[ns++] = 1 << i; - } - } - - iMixerFreq = SAMPLE_RATE; - iChannels = ns; - eSampleFormat = SampleShort; - - iByteSize = iFrameSize * sizeof(short) * ns; - - ZeroMemory(&wfxSet, sizeof(wfxSet)); - wfxSet.Format.wFormatTag = WAVE_FORMAT_PCM; - - ZeroMemory(&wfx, sizeof(wfx)); - wfx.Format.wFormatTag = WAVE_FORMAT_PCM; - wfx.Format.nChannels = qMax(ns, 1); - wfx.Format.nSamplesPerSec = SAMPLE_RATE; - wfx.Format.nBlockAlign = sizeof(short) * wfx.Format.nChannels; - wfx.Format.nAvgBytesPerSec = wfx.Format.nSamplesPerSec * wfx.Format.nBlockAlign; - wfx.Format.wBitsPerSample = 16; - - if (FAILED(hr = pDSBPrimary->SetFormat(reinterpret_cast(&wfx)))) { - qWarning("DXAudioOutput: SetFormat failed: hr=0x%08lx", hr); - goto cleanup; - } - if (FAILED(hr = pDSBPrimary->GetFormat(reinterpret_cast(&wfxSet), sizeof(wfxSet), NULL))) { - qWarning("DXAudioOutput: GetFormat failed: hr=0x%08lx", hr); - goto cleanup; - } - - qWarning("DXAudioOutput: Primary buffer of %ld Hz, %d channels, %d bits",wfxSet.Format.nSamplesPerSec,wfxSet.Format.nChannels,wfxSet.Format.wBitsPerSample); - - ZeroMemory(&wfx, sizeof(wfx)); - wfx.Format.wFormatTag = WAVE_FORMAT_EXTENSIBLE; - wfx.Format.nChannels = ns; - wfx.Format.nSamplesPerSec = SAMPLE_RATE; - wfx.Format.nBlockAlign = sizeof(short) * wfx.Format.nChannels; - wfx.Format.nAvgBytesPerSec = wfx.Format.nSamplesPerSec * wfx.Format.nBlockAlign; - wfx.Format.wBitsPerSample = 16; - wfx.Format.cbSize = 32; - wfx.Samples.wValidBitsPerSample = wfx.Format.wBitsPerSample; - wfx.dwChannelMask = dwMask; - wfx.SubFormat = KSDATAFORMAT_SUBTYPE_PCM; - - ZeroMemory(&dsbdesc, sizeof(DSBUFFERDESC)); - dsbdesc.dwSize = sizeof(DSBUFFERDESC); - dsbdesc.dwFlags = DSBCAPS_GLOBALFOCUS|DSBCAPS_GETCURRENTPOSITION2; - dsbdesc.dwFlags |= DSBCAPS_CTRLPOSITIONNOTIFY; - dsbdesc.dwBufferBytes = wfx.Format.nChannels * iFrameSize * sizeof(short) * NBLOCKS; - dsbdesc.lpwfxFormat = reinterpret_cast(&wfx); - - if (FAILED(hr = pDS->CreateSoundBuffer(&dsbdesc, &pDSBOutput, NULL))) { - qWarning("DXAudioOutputUser: CreateSoundBuffer (Secondary) failed: hr=0x%08lx", hr); - goto cleanup; - } - - - if (FAILED(hr = pDSBOutput->QueryInterface(IID_IDirectSoundNotify, reinterpret_cast(&pDSNotify)))) { - qWarning("DXAudioOutputUser: QueryInterface (Notify) failed: hr=0x%08lx", hr); - goto cleanup; - } - - qWarning("DXAudioOutputUser: New %dHz output buffer of %ld bytes", SAMPLE_RATE, dsbdesc.dwBufferBytes); - - if (failed) - g.mw->msgBox(tr("Opening chosen DirectSound Output failed. Default device will be used.")); - - initializeMixer(chanmasks, bHead); - - if (FAILED(hr = pDSBOutput->Lock(0, 0, &aptr1, &nbytes1, &aptr2, &nbytes2, DSBLOCK_ENTIREBUFFER))) { - qWarning("DXAudioOutputUser: Initial Lock failed: hr=0x%08lx", hr); - goto cleanup; - } - - dwBufferSize = nbytes1 + nbytes2; - if (aptr1) - ZeroMemory(aptr1, nbytes1); - if (aptr2) - ZeroMemory(aptr2, nbytes2); - - if (FAILED(hr = pDSBOutput->Unlock(aptr1, nbytes1, aptr2, nbytes2))) { - qWarning("DXAudioOutputUser: Initial Unlock failed: hr=0x%08lx", hr); - goto cleanup; - } - - if (FAILED(hr = pDSBOutput->Play(0, 0, DSBPLAY_LOOPING))) { - qWarning("DXAudioOutputUser: Play failed: hr=0x%08lx", hr); - goto cleanup; - } - - dwLastWritePos = 0; - dwLastPlayPos = 0; - dwTotalPlayPos = 0; - - iLastwriteblock = (NBLOCKS - 1 + g.s.iOutputDelay) % NBLOCKS; - - bOk = true; - - while (bRunning && ! FAILED(hr)) { - if (FAILED(hr = pDSBOutput->GetCurrentPosition(&dwPlayPosition, &dwWritePosition))) { - qWarning("DXAudioOutputUser: GetCurrentPosition failed: hr=0x%08lx", hr); - break; - } - - playblock = dwWritePosition / iByteSize; - nowriteblock = (playblock + g.s.iOutputDelay + 1) % NBLOCKS; - - for (int block=(iLastwriteblock + 1) % NBLOCKS;(!FAILED(hr)) && (block!=nowriteblock);block=(block + 1) % NBLOCKS) { - iLastwriteblock = block; - - if (FAILED(hr = pDSBOutput->Lock(block * iByteSize, iByteSize, &aptr1, &nbytes1, &aptr2, &nbytes2, 0))) { - qWarning("DXAudioOutput: Lock block %u (%d bytes) failed: hr=0x%08lx",block, iByteSize, hr); - break; - } - if (aptr2 || nbytes2) { - qWarning("DXAudioOutput: Split buffer"); - break; - } - if (!aptr1 || ! nbytes1) { - qWarning("DXAudioOutput: Zerolock"); - break; - } - if (! mix(reinterpret_cast(aptr1), iFrameSize)) - ZeroMemory(aptr1, iByteSize); - - if (FAILED(hr = pDSBOutput->Unlock(aptr1, nbytes1, aptr2, nbytes2))) { - qWarning("DXAudioOutput: Unlock %p(%lu) %p(%lu) failed: hr=0x%08lx",aptr1,nbytes1,aptr2,nbytes2,hr); - break; - } - - if (FAILED(hr = pDSBOutput->GetCurrentPosition(&dwPlayPosition, &dwWritePosition))) { - qWarning("DXAudioOutputUser: GetCurrentPosition failed: hr=0x%08lx", hr); - break; - } - - playblock = dwWritePosition / iByteSize; - nowriteblock = (playblock + g.s.iOutputDelay + 1) % NBLOCKS; - } - if (! FAILED(hr)) - msleep(19); - } - - if (FAILED(hr)) { - g.mw->msgBox(tr("Lost DirectSound output device.")); - } -cleanup: - if (! bOk) { - g.mw->msgBox(tr("Opening chosen DirectSound Output failed. No audio will be heard.")); - return; - } - - if (pDSNotify) - pDSNotify->Release(); - if (pDSBOutput) { - pDSBOutput->Stop(); - pDSBOutput->Release(); - } - if (pDSBPrimary) - pDSBPrimary->Release(); - if (pDS) - pDS->Release(); -} - -#define NBUFFBLOCKS 50 - -DXAudioInput::DXAudioInput() { -} - -DXAudioInput::~DXAudioInput() { - bRunning = false; - wait(); -} - -void DXAudioInput::run() { - LPDIRECTSOUNDCAPTURE8 pDSCapture; - LPDIRECTSOUNDCAPTUREBUFFER pDSCaptureBuffer; - LPDIRECTSOUNDNOTIFY8 pDSNotify; - - DWORD dwBufferSize; - bool bOk; - DWORD dwReadyBytes = 0; - DWORD dwLastReadPos = 0; - DWORD dwReadPosition; - DWORD dwCapturePosition; - - LPVOID aptr1, aptr2; - DWORD nbytes1, nbytes2; - - HRESULT hr; - WAVEFORMATEX wfx; - DSCBUFFERDESC dscbd; - - pDSCapture = NULL; - pDSCaptureBuffer = NULL; - pDSNotify = NULL; - - bOk = false; - - bool failed = false; - float safety = 2.0f; - bool didsleep = false; - bool firstsleep = false; - - Timer t; - - ZeroMemory(&wfx, sizeof(wfx)); - wfx.wFormatTag = WAVE_FORMAT_PCM; - - ZeroMemory(&dscbd, sizeof(dscbd)); - dscbd.dwSize = sizeof(dscbd); - - dscbd.dwBufferBytes = dwBufferSize = iFrameSize * sizeof(short) * NBUFFBLOCKS; - dscbd.lpwfxFormat = &wfx; - - wfx.nChannels = 1; - wfx.nSamplesPerSec = iSampleRate; - wfx.nBlockAlign = 2; - wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; - wfx.wBitsPerSample = 16; - - // Create IDirectSoundCapture using the preferred capture device - if (! g.s.qbaDXInput.isEmpty()) { - LPGUID lpguid = reinterpret_cast(g.s.qbaDXInput.data()); - if (FAILED(hr = DirectSoundCaptureCreate8(lpguid, &pDSCapture, NULL))) { - failed = true; - } - } - - if (! pDSCapture && FAILED(hr = DirectSoundCaptureCreate8(&DSDEVID_DefaultVoiceCapture, &pDSCapture, NULL))) - qWarning("DXAudioInput: DirectSoundCaptureCreate failed: hr=0x%08lx", hr); - else if (FAILED(hr = pDSCapture->CreateCaptureBuffer(&dscbd, &pDSCaptureBuffer, NULL))) - qWarning("DXAudioInput: CreateCaptureBuffer failed: hr=0x%08lx", hr); - else if (FAILED(hr = pDSCaptureBuffer->QueryInterface(IID_IDirectSoundNotify, reinterpret_cast(&pDSNotify)))) - qWarning("DXAudioInput: QueryInterface (Notify) failed: hr=0x%08lx", hr); - else - bOk = true; - - - - if (failed) - g.mw->msgBox(tr("Opening chosen DirectSound Input failed. Default device will be used.")); - - qWarning("DXAudioInput: Initialized"); - - if (! bOk) - goto cleanup; - - if (FAILED(hr = pDSCaptureBuffer->Start(DSCBSTART_LOOPING))) { - qWarning("DXAudioInput: Start failed: hr=0x%08lx", hr); - } else { - while (bRunning) { - firstsleep = true; - didsleep = false; - - do { - if (FAILED(hr = pDSCaptureBuffer->GetCurrentPosition(&dwCapturePosition, &dwReadPosition))) { - qWarning("DXAudioInput: GetCurrentPosition failed: hr=0x%08lx", hr); - bRunning = false; - break; - } - if (dwReadPosition < dwLastReadPos) - dwReadyBytes = (dwBufferSize - dwLastReadPos) + dwReadPosition; - else - dwReadyBytes = dwReadPosition - dwLastReadPos; - - if (static_cast(dwReadyBytes) < sizeof(short) * iFrameSize) { - double msecleft = 20.0 - (dwReadyBytes * 20.0) / (sizeof(short) * iFrameSize); - - if (didsleep) - safety *= 1.1f; - else if (firstsleep) - safety *= 0.998f; - - int msec = static_cast(msecleft + (firstsleep ? safety : 0.0)); - - msleep(msec); - - didsleep = true; - firstsleep = false; - } - } while (static_cast(dwReadyBytes) < sizeof(short) * iFrameSize); - - // Desynchonized? - if (dwReadyBytes > (dwBufferSize / 2)) { - qWarning("DXAudioInput: Lost synchronization"); - dwLastReadPos = dwReadPosition; - } else if (bRunning) { - if (FAILED(hr = pDSCaptureBuffer->Lock(dwLastReadPos, sizeof(short) * iFrameSize, &aptr1, &nbytes1, &aptr2, &nbytes2, 0))) { - qWarning("DXAudioInput: Lock from %ld (%d bytes) failed: hr=0x%08lx",dwLastReadPos, sizeof(short) * iFrameSize, hr); - bRunning = false; - break; - } - - if (aptr1 && nbytes1) - CopyMemory(psMic, aptr1, nbytes1); - - if (aptr2 && nbytes2) - CopyMemory(psMic+nbytes1/2, aptr2, nbytes2); - - if (FAILED(hr = pDSCaptureBuffer->Unlock(aptr1, nbytes1, aptr2, nbytes2))) { - qWarning("DXAudioInput: Unlock failed: hr=0x%08lx", hr); - bRunning = false; - break; - } - - dwLastReadPos = (dwLastReadPos + sizeof(short) * iFrameSize) % dwBufferSize; - - encodeAudioFrame(); - } - } - if (! FAILED(hr)) - pDSCaptureBuffer->Stop(); - } - if (FAILED(hr)) { - g.mw->msgBox(tr("Lost DirectSound input device.")); - } - -cleanup: - if (! bOk) { - g.mw->msgBox(tr("Opening chosen DirectSound Input device failed. No microphone capture will be done.")); - } - if (pDSNotify) - pDSNotify->Release(); - if (pDSCaptureBuffer) - pDSCaptureBuffer->Release(); - if (pDSCapture) - pDSCapture->Release(); -} diff -Nru mumble-1.2.3/src/mumble11x/DirectSound.h mumble-1.2.3-87-gf7d8711/src/mumble11x/DirectSound.h --- mumble-1.2.3/src/mumble11x/DirectSound.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/DirectSound.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _DIRECTSOUND_H -#define _DIRECTSOUND_H - -#include "AudioInput.h" -#include "AudioOutput.h" -#define DIRECTSOUND_VERSION 0x1000 - -#include -#include -#include - -class DXAudioOutput : public AudioOutput { - private: - Q_OBJECT - Q_DISABLE_COPY(DXAudioOutput) - public: - DXAudioOutput(); - ~DXAudioOutput(); - void run(); -}; - -class DXAudioInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(DXAudioInput) - public: - DXAudioInput(); - ~DXAudioInput(); - void run(); -}; - -#else -class DXAudioOutput; -class DXAudioInput; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Global.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Global.cpp --- mumble-1.2.3/src/mumble11x/Global.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Global.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Global.h" - -Global *Global::g_global_struct; - -Global::Global() { - mw = 0; - sh = 0; - db = 0; - p = 0; - nam = 0; - uiSession = 0; - uiDoublePush = 1000000; - iPushToTalk = 0; - iAltSpeak = 0; - bPushToMute = false; - bCenterPosition = false; - bEchoTest = false; - bPosTest = false; - iAudioPathTime = 0; - qsRegionalHost = QLatin1String("mumble.info"); - bAttenuateOthers = false; -} - -QMultiMap *DeferInit::qmDeferers = NULL; - -void DeferInit::add(int priority) { - if (qmDeferers == NULL) { - qmDeferers = new QMultiMap(); - } - qmDeferers->insert(priority, this); -} - -DeferInit::~DeferInit() { -} - -void DeferInit::run_initializers() { - if (! qmDeferers) - return; - foreach(DeferInit *d, *qmDeferers) { - d->initialize(); - } -} - -void DeferInit::run_destroyers() { - if (! qmDeferers) - return; - foreach(DeferInit *d, *qmDeferers) { - d->destroy(); - } -} diff -Nru mumble-1.2.3/src/mumble11x/Global.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Global.h --- mumble-1.2.3/src/mumble11x/Global.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Global.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,115 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _GLOBAL_H -#define _GLOBAL_H - -#include "Settings.h" -#include "Timer.h" -#include "Version.h" - -// Global helper class to spread variables around across threads. - -class MainWindow; -class ServerHandler; -class AudioInput; -class AudioOutput; -class Database; -class Log; -class Plugins; -class QSettings; -class LCD; - -struct Global { -private: - Q_DISABLE_COPY(Global) -public: - static Global *g_global_struct; - MainWindow *mw; - Settings s; - ServerHandler *sh; - boost::shared_ptr ai; - boost::shared_ptr ao; - Database *db; - Log *l; - Plugins *p; - QSettings *qs; - LCD *lcd; - QNetworkAccessManager *nam; - int iPushToTalk; - Timer tDoublePush; - quint64 uiDoublePush; - int iAltSpeak; - bool bPushToMute; - bool bCenterPosition; - bool bEchoTest; - bool bPosTest; - int iAudioPathTime; - unsigned int uiSession; - int iMaxBandwidth; - int iAudioBandwidth; - int iAudioQuality; - QString qsRegionalHost; - bool bAttenuateOthers; - Global(); -}; - -// Class to handle ordered initialization of globals. -// This allows the same link-time magic as used everywhere else -// for globals that need an init before the GUI starts, but -// after we reach main(). - -class DeferInit { - private: - Q_DISABLE_COPY(DeferInit) - protected: - static QMultiMap *qmDeferers; - void add(int priority); - public: - DeferInit(int priority) { - add(priority); - }; - DeferInit() { - add(0); - }; - virtual ~DeferInit(); - virtual void initialize() { }; - virtual void destroy() { }; - static void run_initializers(); - static void run_destroyers(); -}; - -// -Wshadow is bugged. If an inline function of a class uses a variable or -// parameter named 'g', that will generate a warning even if the class header -// is included long before this definition. - -#define g (*Global::g_global_struct) - -#endif diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut.cpp --- mumble-1.2.3/src/mumble11x/GlobalShortcut.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,463 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "GlobalShortcut.h" -#include "MainWindow.h" -#include "Global.h" - -GlobalShortcutEngine *GlobalShortcutEngine::engine = NULL; - -static ConfigWidget *GlobalShortcutConfigDialogNew(Settings &st) { - return new GlobalShortcutConfig(st); -} - -static ConfigRegistrar registrar(1200, GlobalShortcutConfigDialogNew); - -ShortcutKeyWidget::ShortcutKeyWidget(QWidget *p) : QLineEdit(p) { - setReadOnly(true); - clearFocus(); - bModified = false; - displayKeys(); -} - -QList ShortcutKeyWidget::getShortcut() const { - return qlButtons; -} - -void ShortcutKeyWidget::setShortcut(const QList &buttons) { - qlButtons = buttons; - displayKeys(); -} - -void ShortcutKeyWidget::focusInEvent(QFocusEvent *) { - setText(tr("Press Shortcut")); - - QPalette pal=parentWidget()->palette(); - pal.setColor(QPalette::Base, pal.color(QPalette::Base).dark(120)); - setPalette(pal); - - setForegroundRole(QPalette::Button); - GlobalShortcutEngine::engine->resetMap(); - connect(GlobalShortcutEngine::engine, SIGNAL(buttonPressed(bool)), this, SLOT(updateKeys(bool))); - installEventFilter(this); -} - -void ShortcutKeyWidget::focusOutEvent(QFocusEvent *e) { - if ((e->reason() == Qt::TabFocusReason) || (e->reason() == Qt::BacktabFocusReason)) - return; - - setPalette(parentWidget()->palette()); - clearFocus(); - disconnect(GlobalShortcutEngine::engine, SIGNAL(buttonPressed(bool)), this, SLOT(updateKeys(bool))); - displayKeys(); - removeEventFilter(this); -} - -bool ShortcutKeyWidget::eventFilter(QObject *, QEvent *evt) { - if ((evt->type() == QEvent::KeyPress) || (evt->type() == QEvent::MouseButtonPress)) - return true; - return false; -} - -void ShortcutKeyWidget::mouseDoubleClickEvent(QMouseEvent *) { - bModified = true; - qlButtons.clear(); - clearFocus(); - displayKeys(); -} - -void ShortcutKeyWidget::updateKeys(bool last) { - qlButtons = GlobalShortcutEngine::engine->qlActiveButtons; - bModified = true; - - if (qlButtons.isEmpty()) - return; - - if (last) - clearFocus(); - else - displayKeys(); -} - -void ShortcutKeyWidget::displayKeys() { - QStringList keys; - - foreach(QVariant button, qlButtons) { - QString id = GlobalShortcutEngine::engine->buttonName(button); - if (! id.isEmpty()) - keys << id; - } - setText(keys.join(QLatin1String(" + "))); - emit keySet(keys.count() > 0); -} - -ShortcutActionWidget::ShortcutActionWidget(QWidget *p) : QComboBox(p) { - int idx = 0; - - insertItem(idx, tr("Unassigned")); - setItemData(idx, -1); - - idx++; - - bool expert = true; - while (p) { - GlobalShortcutConfig *gsc = qobject_cast(p); - if (gsc) { - expert = gsc->bExpert; - break; - } - p = p->parentWidget(); - } - foreach(GlobalShortcut *gs, GlobalShortcutEngine::engine->qmShortcuts) { - if (expert || ! gs->bExpert) { - insertItem(idx, gs->name); - setItemData(idx, gs->idx); - if (! gs->qsToolTip.isEmpty()) - setItemData(idx, gs->qsToolTip, Qt::ToolTipRole); - if (! gs->qsWhatsThis.isEmpty()) - setItemData(idx, gs->qsWhatsThis, Qt::WhatsThisRole); - idx++; - } - } -} - -void ShortcutActionWidget::setIndex(int idx) { - setCurrentIndex(findData(idx)); -} - -int ShortcutActionWidget::index() const { - return itemData(currentIndex()).toInt(); -} - -ShortcutDelegate::ShortcutDelegate(QObject *p) : QStyledItemDelegate(p) { - QItemEditorFactory *factory = new QItemEditorFactory; - QItemEditorCreatorBase *shortcutCreator = new QStandardItemEditorCreator(); - QItemEditorCreatorBase *indexCreator = new QStandardItemEditorCreator(); - - factory->registerEditor(QVariant::List, shortcutCreator); - factory->registerEditor(QVariant::Int, indexCreator); - setItemEditorFactory(factory); -} - -ShortcutDelegate::~ShortcutDelegate() { - delete itemEditorFactory(); - setItemEditorFactory(NULL); -} - -QString ShortcutDelegate::displayText(const QVariant &item, const QLocale &loc) const { - if (item.type() == QVariant::List) - return GlobalShortcutEngine::buttonText(item.toList()); - else if (item.type() == QVariant::Int) { - GlobalShortcut *gs = GlobalShortcutEngine::engine->qmShortcuts.value(item.toInt()); - if (gs) - return gs->name; - else - return tr("Unassigned"); - } - - return QStyledItemDelegate::displayText(item,loc); -} - -GlobalShortcutConfig::GlobalShortcutConfig(Settings &st) : ConfigWidget(st) { - setupUi(this); - - bool canSuppress = GlobalShortcutEngine::engine->canSuppress(); - - qtwShortcuts->setColumnCount(canSuppress ? 3 : 2); - qtwShortcuts->setItemDelegate(new ShortcutDelegate(qtwShortcuts)); - - qtwShortcuts->header()->setResizeMode(QHeaderView::ResizeToContents); -} - -void GlobalShortcutConfig::on_qpbAdd_clicked(bool) { - Shortcut sc; - sc.iIndex = -1; - sc.bSuppress = false; - qlShortcuts << sc; - reload(); -} - -void GlobalShortcutConfig::on_qpbRemove_clicked(bool) { - QTreeWidgetItem *qtwi = qtwShortcuts->currentItem(); - if (! qtwi) - return; - qlShortcuts.removeAt(qtwShortcuts->indexOfTopLevelItem(qtwi)); - delete qtwi; -} - -void GlobalShortcutConfig::on_qtwShortcuts_currentItemChanged(QTreeWidgetItem *item, QTreeWidgetItem *) { - qpbRemove->setEnabled(item ? true : false); -} - -void GlobalShortcutConfig::on_qtwShortcuts_itemChanged(QTreeWidgetItem *item, int) { - int idx = qtwShortcuts->indexOfTopLevelItem(item); - Shortcut &sc = qlShortcuts[idx]; - sc.iIndex = item->data(0, Qt::DisplayRole).toInt(); - sc.qlButtons = item->data(1, Qt::DisplayRole).toList(); - sc.bSuppress = item->checkState(2) == Qt::Checked; -} - -QString GlobalShortcutConfig::title() const { - return tr("Shortcuts"); -} - -QIcon GlobalShortcutConfig::icon() const { - return QIcon(QLatin1String("skin:config_shortcuts.png")); -} - -void GlobalShortcutConfig::load(const Settings &r) { - qlShortcuts = r.qlShortcuts; - bExpert = r.bExpert; - reload(); -} - -void GlobalShortcutConfig::save() const { - s.qlShortcuts = qlShortcuts; -} - -QTreeWidgetItem *GlobalShortcutConfig::itemForShortcut(const Shortcut &sc) const { - QTreeWidgetItem *item = new QTreeWidgetItem(); - item->setData(0, Qt::DisplayRole, sc.iIndex); - item->setData(1, Qt::DisplayRole, sc.qlButtons); - item->setCheckState(2, sc.bSuppress ? Qt::Checked : Qt::Unchecked); - item->setFlags(item->flags() | Qt::ItemIsEditable); - - ::GlobalShortcut *gs = GlobalShortcutEngine::engine->qmShortcuts.value(sc.iIndex); - - if (gs) { - if (! gs->qsToolTip.isEmpty()) - item->setData(0, Qt::ToolTipRole, gs->qsToolTip); - if (! gs->qsWhatsThis.isEmpty()) - item->setData(0, Qt::WhatsThisRole, gs->qsWhatsThis); - } - - item->setData(1, Qt::ToolTipRole, tr("Shortcut button combination.")); - item->setData(1, Qt::WhatsThisRole, tr("This is the global shortcut key combination.
" - "Double-click this field and then the desired key/button combo " - "to rebind.")); - - item->setData(2, Qt::ToolTipRole, tr("Suppress keys from other applications")); - item->setData(2, Qt::WhatsThisRole, tr("This hides the button presses from other applications.
" - "Enabling this will hide the button (or the last button of a multi-button combo) " - "from other applications. Note that not all buttons can be suppressed.")); - - return item; -} - -void GlobalShortcutConfig::reload() { - qStableSort(qlShortcuts); - qtwShortcuts->clear(); - foreach(const Shortcut &sc, qlShortcuts) { - QTreeWidgetItem *item = itemForShortcut(sc); - ::GlobalShortcut *gs = GlobalShortcutEngine::engine->qmShortcuts.value(sc.iIndex); - qtwShortcuts->addTopLevelItem(item); - if (gs && gs->bExpert && ! bExpert) - item->setHidden(true); - } -} - -void GlobalShortcutConfig::accept() const { - GlobalShortcutEngine::engine->bNeedRemap = true; - GlobalShortcutEngine::engine->needRemap(); -} - -bool GlobalShortcutConfig::expert(bool exp) { - bExpert = exp; - reload(); - return true; -} - - -GlobalShortcutEngine::GlobalShortcutEngine(QObject *p) : QThread(p) { - bNeedRemap = true; - needRemap(); -} - -GlobalShortcutEngine::~GlobalShortcutEngine() { - QSet qs; - foreach(const QList &ql, qlShortcutList) - qs += ql.toSet(); - - foreach(ShortcutKey *sk, qs) - delete sk; -} - -void GlobalShortcutEngine::remap() { - bNeedRemap = false; - - QSet qs; - foreach(const QList &ql, qlShortcutList) - qs += ql.toSet(); - - foreach(ShortcutKey *sk, qs) - delete sk; - - qlButtonList.clear(); - qlShortcutList.clear(); - qlDownButtons.clear(); - - foreach(const Shortcut &sc, g.s.qlShortcuts) { - GlobalShortcut *gs = qmShortcuts.value(sc.iIndex); - if (gs && ! sc.qlButtons.isEmpty()) { - ShortcutKey *sk = new ShortcutKey; - sk->s = sc; - sk->iNumUp = sc.qlButtons.count(); - sk->gs = gs; - - foreach(const QVariant &button, sc.qlButtons) { - int idx = qlButtonList.indexOf(button); - if (idx == -1) { - qlButtonList << button; - qlShortcutList << QList(); - idx = qlButtonList.count() - 1; - } - qlShortcutList[idx] << sk; - } - } - } -} - -void GlobalShortcutEngine::run() { -} - -bool GlobalShortcutEngine::canSuppress() { - return false; -} - -void GlobalShortcutEngine::resetMap() { - tReset.restart(); - qlActiveButtons.clear(); -} - -void GlobalShortcutEngine::needRemap() { -} - -bool GlobalShortcutEngine::handleButton(const QVariant &button, bool down) { - bool already = qlDownButtons.contains(button); - if (already == down) - return qlSuppressed.contains(button); - if (down) - qlDownButtons << button; - else - qlDownButtons.removeAll(button); - - if (tReset.elapsed() > 100000) { - if (down) { - qlActiveButtons.removeAll(button); - qlActiveButtons << button; - } - emit buttonPressed(! down); - } - - int idx = qlButtonList.indexOf(button); - if (idx == -1) - return false; - - bool suppress = false; - - foreach(ShortcutKey *sk, qlShortcutList.at(idx)) { - if (down) { - sk->iNumUp--; - if (sk->iNumUp == 0) { - GlobalShortcut *gs = sk->gs; - if (sk->s.bSuppress) { - suppress = true; - qlSuppressed << button; - } - if (! gs->bActive) { - gs->bActive = true; - emit gs->triggered(sk->gs->bActive); - emit gs->down(); - } - } else if (sk->iNumUp < 0) { - sk->iNumUp = 0; - } - } else { - if (qlSuppressed.contains(button)) { - suppress = true; - qlSuppressed.removeAll(button); - } - sk->iNumUp++; - if (sk->iNumUp == 1) { - GlobalShortcut *gs = sk->gs; - if (gs->bActive) { - gs->bActive = false; - emit gs->triggered(sk->gs->bActive); - emit gs->up(); - } - } else if (sk->iNumUp > sk->s.qlButtons.count()) { - sk->iNumUp = sk->s.qlButtons.count(); - } - } - } - return suppress; -} - -void GlobalShortcutEngine::add(GlobalShortcut *gs) { - if (! GlobalShortcutEngine::engine) - GlobalShortcutEngine::engine = GlobalShortcutEngine::platformInit(); - - GlobalShortcutEngine::engine->qmShortcuts.insert(gs->idx, gs); - GlobalShortcutEngine::engine->bNeedRemap = true; - GlobalShortcutEngine::engine->needRemap(); -} - -void GlobalShortcutEngine::remove(GlobalShortcut *gs) { - engine->qmShortcuts.remove(gs->idx); - engine->bNeedRemap = true; - engine->needRemap(); - if (engine->qmShortcuts.isEmpty()) { - delete engine; - GlobalShortcutEngine::engine = NULL; - } -} - -QString GlobalShortcutEngine::buttonText(const QList &list) { - QStringList keys; - - foreach(QVariant button, list) { - QString id = GlobalShortcutEngine::engine->buttonName(button); - if (! id.isEmpty()) - keys << id; - } - return keys.join(QLatin1String(" + ")); -} - -GlobalShortcut::GlobalShortcut(QObject *p, int index, QString qsName, bool expert) : QObject(p) { - idx = index; - name=qsName; - bExpert = expert; - bActive = false; - GlobalShortcutEngine::add(this); -} - -GlobalShortcut::~GlobalShortcut() { - GlobalShortcutEngine::remove(this); -} diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut.h mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut.h --- mumble-1.2.3/src/mumble11x/GlobalShortcut.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,181 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -#ifndef _GLOBALSHORTCUT_H -#define _GLOBALSHORTCUT_H - -#include "mumble_pch.hpp" -#include "ConfigDialog.h" -#include "Timer.h" -#include "ui_GlobalShortcut.h" - -class GlobalShortcut : public QObject { - friend class GlobalShortcutEngine; - friend class GlobalShortcutConfig; - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcut) - protected: - bool bActive; - signals: - void down(); - void up(); - void triggered(bool); - public: - QString qsToolTip; - QString qsWhatsThis; - QString name; - QVariant data; - bool bExpert; - int idx; - - GlobalShortcut(QObject *parent, int index, QString qsName, bool expert = true); - ~GlobalShortcut(); - - bool active() const { - return bActive; - }; -}; - -class ShortcutKeyWidget : public QLineEdit { - private: - Q_OBJECT - Q_DISABLE_COPY(ShortcutKeyWidget) - Q_PROPERTY(QList shortcut READ getShortcut WRITE setShortcut USER true) - protected: - virtual void focusInEvent(QFocusEvent *event); - virtual void focusOutEvent(QFocusEvent *event); - virtual void mouseDoubleClickEvent(QMouseEvent *e); - virtual bool eventFilter(QObject *, QEvent *); - public: - QList qlButtons; - bool bModified; - ShortcutKeyWidget(QWidget *p = NULL); - QList getShortcut() const; - public slots: - void updateKeys(bool last); - void displayKeys(); - void setShortcut(const QList &shortcut); - signals: - void keySet(bool); -}; - -class ShortcutActionWidget : public QComboBox { - private: - Q_OBJECT - Q_DISABLE_COPY(ShortcutActionWidget) - Q_PROPERTY(int index READ index WRITE setIndex USER true) - public: - ShortcutActionWidget(QWidget *p = NULL); - int index() const; - void setIndex(int); -}; - -class ShortcutDelegate : public QStyledItemDelegate { - Q_OBJECT - Q_DISABLE_COPY(ShortcutDelegate) - public: - ShortcutDelegate(QObject *); - ~ShortcutDelegate(); - QString displayText(const QVariant &, const QLocale &) const; -}; - -class GlobalShortcutConfig : public ConfigWidget, public Ui::GlobalShortcut { - friend class ShortcutActionWidget; - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutConfig) - protected: - QList qlShortcuts; - QTreeWidgetItem *itemForShortcut(const Shortcut &) const; - bool bExpert; - public: - GlobalShortcutConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void accept() const; - void save() const; - void load(const Settings &r); - void reload(); - bool expert(bool); - void on_qpbAdd_clicked(bool); - void on_qpbRemove_clicked(bool); - void on_qtwShortcuts_currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *); - void on_qtwShortcuts_itemChanged(QTreeWidgetItem *, int); -}; - -struct ShortcutKey { - Shortcut s; - int iNumUp; - GlobalShortcut *gs; -}; - -class GlobalShortcutEngine : public QThread { - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutEngine) - public: - bool bNeedRemap; - Timer tReset; - - static GlobalShortcutEngine *engine; - static GlobalShortcutEngine *platformInit(); - - QHash qmShortcuts; - QList qlActiveButtons; - QList qlDownButtons; - QList qlSuppressed; - - QList qlButtonList; - QList > qlShortcutList; - - GlobalShortcutEngine(QObject *p = NULL); - ~GlobalShortcutEngine(); - void resetMap(); - void remap(); - virtual void needRemap(); - void run(); - - bool handleButton(const QVariant &, bool); - static void add(GlobalShortcut *); - static void remove(GlobalShortcut *); - static QString buttonText(const QList &); - virtual QString buttonName(const QVariant &) = 0; - virtual bool canSuppress(); - signals: - void buttonPressed(bool last); -}; - - -#else -class GlobalShortcut; -#endif diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut_macx.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_macx.cpp --- mumble-1.2.3/src/mumble11x/GlobalShortcut_macx.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_macx.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,448 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "GlobalShortcut_macx.h" -#ifndef COMPAT_CLIENT -#include "Overlay.h" -#endif - -#define MOD_OFFSET 0x10000 -#define MOUSE_OFFSET 0x20000 - -/* - * We use DeferInit in here to pop up a dialog box if their system isn't - * properly set up to receieve global keyboard/mouse events. - */ - -GlobalShortcutMacInit::GlobalShortcutMacInit() : QObject(NULL) { -} - -void GlobalShortcutMacInit::initialize() { - if (!accessibilityApiEnabled()) - accessibilityDialog(); -} - -bool GlobalShortcutMacInit::accessibilityApiEnabled() const { - return QFile::exists("/private/var/db/.AccessibilityAPIEnabled"); -} - -void GlobalShortcutMacInit::openPrefsPane(const QString &) const { - system("open /Applications/System\\ Preferences.app/ /System/Library/PreferencePanes/UniversalAccessPref.prefPane/"); -} - -void GlobalShortcutMacInit::accessibilityDialog() const { - QMessageBox mb("Mumble", - tr("Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.

" - "This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.

" - "Please enable this setting and continue when done."), - QMessageBox::Question, QMessageBox::Ok | QMessageBox::Default, QMessageBox::NoButton, QMessageBox::NoButton); - - QLabel *label = mb.findChild(QLatin1String("qt_msgbox_label")); - label->setOpenExternalLinks(false); - connect(label, SIGNAL(linkActivated(const QString &)), this, SLOT(openPrefsPane(const QString &))); - - mb.exec(); -} - -static GlobalShortcutMacInit gsminit; - -/* --- */ - -GlobalShortcutEngine *GlobalShortcutEngine::platformInit() { - return new GlobalShortcutMac(); -} - -#ifndef COMPAT_CLIENT -static void forwardEvent(NSEvent *evt) { - SEL sel = nil; - - switch ([evt type]) { - case NSLeftMouseDown: -sel = @selector(mouseDown:); - break; - case NSLeftMouseUp: -sel = @selector(mouseUp:); - break; - case NSLeftMouseDragged: -sel = @selector(mouseDragged:); - break; - case NSRightMouseDown: -sel = @selector(rightMouseDown:); - break; - case NSRightMouseUp: -sel = @selector(rightMouseUp:); - break; - case NSRightMouseDragged: -sel = @selector(rightMouseDragged:); - break; - case NSOtherMouseDown: -sel = @selector(otherMouseDown:); - break; - case NSOtherMouseUp: -sel = @selector(otherMouseUp:); - break; - case NSOtherMouseDragged: -sel = @selector(otherMouseDragged:); - break; - case NSMouseEntered: -sel = @selector(mouseEntered:); - break; - case NSMouseExited: -sel = @selector(mouseExited:); - break; - case NSMouseMoved: -sel = @selector(mouseMoved:); - break; - } - - if (sel) { - NSPoint p; - p.x = (CGFloat) g.ocIntercept->iMouseX; - p.y = (CGFloat)(g.ocIntercept->uiHeight - g.ocIntercept->iMouseY); -NSEvent *mouseEvent = [NSEvent mouseEventWithType:[evt type] location:p modifierFlags:[evt modifierFlags] timestamp:[evt timestamp] - windowNumber:0 context:nil eventNumber:[evt eventNumber] clickCount:[evt clickCount] - pressure:[evt pressure]]; - NSApplication *app = [NSApplication sharedApplication]; - NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; -[dict setObject:NSStringFromSelector(sel) forKey:@"selector"]; -[dict setObject:mouseEvent forKey:@"event"]; -[app performSelector:@selector(forwardEvent:) onThread:[NSThread mainThread] withObject:dict waitUntilDone:NO]; - [dict release]; - return; - } - - switch ([evt type]) { - case NSKeyDown: -sel = @selector(keyDown:); - break; - case NSKeyUp: -sel = @selector(keyUp:); - break; - case NSFlagsChanged: -sel = @selector(flagsChanged:); - break; - case NSScrollWheel: -sel = @selector(scrollWheel:); - break; - default: - break; - } - - if (sel) { - NSApplication *app = [NSApplication sharedApplication]; - NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; -[dict setObject:NSStringFromSelector(sel) forKey:@"selector"]; -[dict setObject:evt forKey:@"event"]; -[app performSelector:@selector(forwardEvent:) onThread:[NSThread mainThread] withObject:dict waitUntilDone:NO]; - [dict release]; - } -} -#endif - -CGEventRef GlobalShortcutMac::callback(CGEventTapProxy proxy, CGEventType type, - CGEventRef event, void *udata) { - GlobalShortcutMac *gs = reinterpret_cast(udata); - unsigned int keycode; - bool suppress = false; - bool forward = false; - bool down = false; - int64_t repeat = 0; - - switch (type) { - case kCGEventLeftMouseDown: - case kCGEventRightMouseDown: - case kCGEventOtherMouseDown: - down = true; - case kCGEventLeftMouseUp: - case kCGEventRightMouseUp: - case kCGEventOtherMouseUp: { - keycode = static_cast(CGEventGetIntegerValueField(event, kCGMouseEventButtonNumber)); - suppress = gs->handleButton(MOUSE_OFFSET+keycode, down); - /* Suppressing "the" mouse button is probably not a good idea :-) */ - if (keycode == 0) - suppress = false; -#ifndef COMPAT_CLIENT - forward = !suppress; -#endif - break; - } - -#ifndef COMPAT_CLIENT - case kCGEventMouseMoved: - case kCGEventLeftMouseDragged: - case kCGEventRightMouseDragged: - case kCGEventOtherMouseDragged: { - if (g.ocIntercept) { - int64_t dx = CGEventGetIntegerValueField(event, kCGMouseEventDeltaX); - int64_t dy = CGEventGetIntegerValueField(event, kCGMouseEventDeltaY); - g.ocIntercept->iMouseX = qBound(0, g.ocIntercept->iMouseX + static_cast(dx), g.ocIntercept->uiWidth - 1); - g.ocIntercept->iMouseY = qBound(0, g.ocIntercept->iMouseY + static_cast(dy), g.ocIntercept->uiHeight - 1); - QMetaObject::invokeMethod(g.ocIntercept, "updateMouse", Qt::QueuedConnection); - forward = true; - } - break; - } - - case kCGEventScrollWheel: - forward = true; - break; -#endif - - case kCGEventKeyDown: - down = true; - case kCGEventKeyUp: - repeat = CGEventGetIntegerValueField(event, kCGKeyboardEventAutorepeat); - if (! repeat) { - keycode = static_cast(CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode)); - suppress = gs->handleButton(keycode, down); - } - forward = true; - break; - - case kCGEventFlagsChanged: - suppress = gs->handleModButton(CGEventGetFlags(event)); - forward = !suppress; - break; - - case kCGEventTapDisabledByTimeout: - qWarning("GlobalShortcutMac: EventTap disabled by timeout. Re-enabling."); - /* - * On Snow Leopard, we get this event type quite often. It disables our event - * tap completely. Possible Apple bug. - * - * For now, simply call CGEventTapEnable() to enable our event tap again. - * - * See: http://lists.apple.com/archives/quartz-dev/2009/Sep/msg00007.html - */ - CGEventTapEnable(gs->port, true); - break; - case kCGEventTapDisabledByUserInput: - qWarning("GlobalShortcutMac: EventTap disabled by user input."); - break; - - default: - break; - } - -#ifndef COMPAT_CLIENT - if (forward && g.ocIntercept) { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; -NSEvent *evt = [NSEvent eventWithCGEvent:event]; - forwardEvent(evt); - [pool release]; - return NULL; - } -#endif - - return suppress ? NULL : event; -} - -GlobalShortcutMac::GlobalShortcutMac() : modmask(0) { -#ifndef QT_NO_DEBUG - qWarning("GlobalShortcutMac: Debug build detected. Disabling shortcut engine."); - return; -#endif - - CGEventMask evmask = kCGEventMaskForAllEvents; - port = CGEventTapCreate(kCGSessionEventTap, - kCGHeadInsertEventTap, - 0, evmask, GlobalShortcutMac::callback, - this); - - if (! port) { - qWarning("GlobalShortcutMac: Unable to create EventTap. Global Shortcuts will not be available."); - return; - } - - kbdLayout = NULL; - -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 - if (TISCopyCurrentKeyboardInputSource && TISGetInputSourceProperty) { - TISInputSourceRef inputSource = TISCopyCurrentKeyboardInputSource(); - if (inputSource) { - CFDataRef data = static_cast(TISGetInputSourceProperty(inputSource, kTISPropertyUnicodeKeyLayoutData)); - if (data) - kbdLayout = reinterpret_cast(const_cast(CFDataGetBytePtr(data))); - } - } -#endif -#ifndef __LP64__ - if (! kbdLayout) { - SInt16 currentKeyScript = GetScriptManagerVariable(smKeyScript); - SInt16 lastKeyLayoutID = GetScriptVariable(currentKeyScript, smScriptKeys); - Handle handle = GetResource('uchr', lastKeyLayoutID); - if (handle) - kbdLayout = reinterpret_cast(*handle); - } -#endif - if (! kbdLayout) - qWarning("GlobalShortcutMac: No keyboard layout mapping available. Unable to perform key translation."); - - start(QThread::TimeCriticalPriority); -} - -GlobalShortcutMac::~GlobalShortcutMac() { -#ifndef QT_NO_DEBUG - return; -#endif - CFRunLoopStop(loop); - loop = NULL; - wait(); -} - -void GlobalShortcutMac::run() { - loop = CFRunLoopGetCurrent(); - CFRunLoopSourceRef src = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, port, 0); - CFRunLoopAddSource(loop, src, kCFRunLoopCommonModes); - CFRunLoopRun(); -} - -void GlobalShortcutMac::needRemap() { - remap(); -} - -bool GlobalShortcutMac::handleModButton(const CGEventFlags newmask) { - bool down; - bool suppress = false; - -#define MOD_CHANGED(mask, btn) do { \ - if ((newmask & mask) != (modmask & mask)) { \ - down = newmask & mask; \ - suppress = handleButton(MOD_OFFSET+btn, down); \ - modmask = newmask; \ - return suppress; \ - }} while (0) - - MOD_CHANGED(kCGEventFlagMaskAlphaShift, 0); - MOD_CHANGED(kCGEventFlagMaskShift, 1); - MOD_CHANGED(kCGEventFlagMaskControl, 2); - MOD_CHANGED(kCGEventFlagMaskAlternate, 3); - MOD_CHANGED(kCGEventFlagMaskCommand, 4); - MOD_CHANGED(kCGEventFlagMaskHelp, 5); - MOD_CHANGED(kCGEventFlagMaskSecondaryFn, 6); - MOD_CHANGED(kCGEventFlagMaskNumericPad, 7); -} - -QString GlobalShortcutMac::translateMouseButton(const unsigned int keycode) const { - return QString("Mouse Button %1").arg(keycode-MOUSE_OFFSET+1); -} - -QString GlobalShortcutMac::translateModifierKey(const unsigned int keycode) const { - unsigned int key = keycode - MOD_OFFSET; - switch (key) { - case 0: - return QString("Caps Lock"); - case 1: - return QString("Shift"); - case 2: - return QString("Control"); - case 3: - return QString("Alt/Option"); - case 4: - return QString("Command"); - case 5: - return QString("Help"); - case 6: - return QString("Fn"); - case 7: - return QString("Num Lock"); - } - return QString("Modifier %1").arg(key); -} - -QString GlobalShortcutMac::translateKeyName(const unsigned int keycode) const { - UInt32 junk = 0; - UniCharCount len = 64; - UniChar unicodeString[len]; - - if (! kbdLayout) - return QString(); - - OSStatus err = UCKeyTranslate(kbdLayout, static_cast(keycode), - kUCKeyActionDisplay, 0, LMGetKbdType(), - kUCKeyTranslateNoDeadKeysBit, &junk, - len, &len, unicodeString); - if (err != noErr) - return QString(); - - if (len == 1) { - switch (unicodeString[0]) { - case '\t': - return QString("Tab"); - case '\r': - return QString("Enter"); - case '\b': - return QString("Backspace"); - case '\e': - return QString("Escape"); - case ' ': - return QString("Space"); - case 28: - return QString("Left"); - case 29: - return QString("Right"); - case 30: - return QString("Up"); - case 31: - return QString("Down"); - } - - if (unicodeString[0] < ' ') { - qWarning("GlobalShortcutMac: Unknown translation for keycode %u: %u", keycode, unicodeString[0]); - return QString(); - } - } - - return QString(reinterpret_cast(unicodeString), len).toUpper(); -} - -QString GlobalShortcutMac::buttonName(const QVariant &v) { - bool ok; - unsigned int key = v.toUInt(&ok); - if (!ok) - return QString(); - - if (key >= MOUSE_OFFSET) - return translateMouseButton(key); - else if (key >= MOD_OFFSET) - return translateModifierKey(key); - else { - QString str = translateKeyName(key); - if (!str.isEmpty()) - return str; - } - - return QString("Keycode %1").arg(key); -} - -bool GlobalShortcutMac::canSuppress() { - return true; -} diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut_macx.h mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_macx.h --- mumble-1.2.3/src/mumble11x/GlobalShortcut_macx.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_macx.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,79 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include "GlobalShortcut.h" -#include "Global.h" - -class GlobalShortcutMacInit : public QObject, public DeferInit { - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutMacInit) - public: - GlobalShortcutMacInit(); - void initialize(); - public slots: - void openPrefsPane(const QString &) const; - protected: - bool accessibilityApiEnabled() const; - void accessibilityDialog() const; -}; - -class GlobalShortcutMac : public GlobalShortcutEngine { - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutMac) - public: - GlobalShortcutMac(); - ~GlobalShortcutMac(); - QString buttonName(const QVariant &); - void needRemap(); - bool handleModButton(CGEventFlags newmask); - virtual bool canSuppress(); - -#ifndef COMPAT_CLIENT - public slots: - void forwardEvent(void *evt); -#endif - - protected: - CFRunLoopRef loop; - CFMachPortRef port; - CGEventFlags modmask; - UCKeyboardLayout *kbdLayout; - - void run(); - - static CGEventRef callback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *udata); - QString translateMouseButton(const unsigned int keycode) const; - QString translateModifierKey(const unsigned int keycode) const; - QString translateKeyName(const unsigned int keycode) const; -}; diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut.ui --- mumble-1.2.3/src/mumble11x/GlobalShortcut.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ - - - GlobalShortcut - - - - 0 - 0 - 266 - 261 - - - - - - - Shortcuts - - - - - - List of configured shortcuts - - - true - - - false - - - false - - - 300 - - - 200 - - - 300 - - - 200 - - - - Function - - - - - Shortcut - - - - - Suppress - - - - - - - - Add new shortcut - - - This will add a new global shortcut - - - &Add - - - - - - - false - - - Remove selected shortcut - - - This will permanently remove a selected shortcut. - - - &Remove - - - - - - - Qt::Horizontal - - - - 59 - 20 - - - - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_unix.cpp --- mumble-1.2.3/src/mumble11x/GlobalShortcut_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_unix.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,327 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "GlobalShortcut_unix.h" - -GlobalShortcutEngine *GlobalShortcutEngine::platformInit() { - return new GlobalShortcutX(); -} - -GlobalShortcutX::GlobalShortcutX() { - bRunning=false; - bXInput = false; - - display = NULL; - - iKeyPress = iKeyRelease = iButtonPress = iButtonRelease = -1; - -#ifdef Q_OS_LINUX - QString dir = QLatin1String("/dev/input"); - QFileSystemWatcher *fsw = new QFileSystemWatcher(QStringList(dir), this); - connect(fsw, SIGNAL(directoryChanged(const QString &)), this, SLOT(directoryChanged(const QString &))); - directoryChanged(dir); - - if (qsKeyboards.isEmpty()) { - foreach(QFile *f, qmInputDevices) - delete f; - qmInputDevices.clear(); - - delete fsw; - qWarning("GlobalShortcutX: Unable to open any keyboard input devices under /dev/input, falling back to XInput"); - } else { - return; - } -#endif - - display = XOpenDisplay(NULL); - - if (! display) { - qWarning("GlobalShortcutX: Unable to open dedicated display connection."); - return; - } - - XExtensionVersion *version = XGetExtensionVersion(display, INAME); - if (version && (version != reinterpret_cast(NoSuchExtension))) { - qWarning("GlobalShortcutX: Using XInput %d.%d", version->major_version, version->minor_version); - bXInput = true; - XFree(version); - initXInput(); - if (qmXDevices.isEmpty()) { - qWarning("GlobalShortcutX: No XInput devices"); - } else { - connect(new QSocketNotifier(ConnectionNumber(display), QSocketNotifier::Read, this), SIGNAL(activated(int)), this, SLOT(displayReadyRead(int))); - return; - } - } else { - qWarning("GlobalShortcutX: No XInput support, falling back to polled input. This wastes a lot of CPU resources, so please enable one of the other methods."); - bRunning=true; - start(QThread::TimeCriticalPriority); - } -} - -GlobalShortcutX::~GlobalShortcutX() { - bRunning = false; - wait(); - foreach(XDevice *dev, qmXDevices) - XCloseDevice(display, dev); - if (display) - XCloseDisplay(display); -} - -void GlobalShortcutX::initXInput() { - foreach(XDevice *dev, qmXDevices) - XCloseDevice(display, dev); - - qmXDevices.clear(); - - int numdev; - XDeviceInfo *infolist = XListInputDevices(display, &numdev); - if (! infolist) - return; - for (int i=0;iid); - if (dev) { - bool key = false, button = false; - for (int j=0;jnum_classes;++j) { - XInputClassInfo *ici = dev->classes + j; - key = key || (ici->input_class == KeyClass); - button = button || (ici->input_class == ButtonClass); - } - - XEventClass events[4]; - int nevents = 0; - if (key) { - DeviceKeyPress(dev, iKeyPress, events[nevents]); - ++nevents; - DeviceKeyRelease(dev, iKeyRelease, events[nevents]); - ++nevents; - } - if (button) { - DeviceButtonPress(dev, iButtonPress, events[nevents]); - ++nevents; - DeviceButtonRelease(dev, iButtonRelease, events[nevents]); - ++nevents; - } - - if ((nevents != 0) && ! XSelectExtensionEvent(display, XDefaultRootWindow(display), events, nevents)) { - qWarning("GlobalShortcutX: XInput %ld:%s", info->id, info->name); - qmXDevices.insert(info->id, dev); - } else { - XCloseDevice(display, dev); - } - } - } - XFree(infolist); -} - -void GlobalShortcutX::run() { - Window root = XDefaultRootWindow(display); - Window root_ret, child_ret; - int root_x, root_y; - int win_x, win_y; - unsigned int mask[2]; - int idx = 0; - int next = 0; - char keys[2][32]; - - memset(keys[0], 0, 32); - memset(keys[1], 0, 32); - mask[0] = mask[1] = 0; - - while (bRunning) { - if (bNeedRemap) - remap(); - - msleep(10); - - idx = next; - next = idx ^ 1; - if (XQueryPointer(display, root, &root_ret, &child_ret, &root_x, &root_y, &win_x, &win_y, &mask[next]) && XQueryKeymap(display, keys[next])) { - for (int i=0;i<256;++i) { - int index = i / 8; - int keymask = 1 << (i % 8); - bool oldstate = (keys[idx][index] & keymask) != 0; - bool newstate = (keys[next][index] & keymask) != 0; - if (oldstate != newstate) { - handleButton(i, newstate); - } - } - for (int i=8;i<=12;++i) { - bool oldstate = (mask[idx] & (1 << i)) != 0; - bool newstate = (mask[next] & (1 << i)) != 0; - if (oldstate != newstate) { - handleButton(0x110 + i, newstate); - } - } - } - } -} - -void GlobalShortcutX::displayReadyRead(int) { - XEvent evt; - - if (bNeedRemap) - remap(); - - while (XPending(display)) { - XNextEvent(display, &evt); - if ((evt.type == iButtonPress) || (evt.type == iButtonRelease)) { - XDeviceButtonEvent *be = reinterpret_cast(&evt); - handleButton(be->button + 0x117, evt.type == iButtonPress); - } else if ((evt.type == iKeyPress) || (evt.type == iKeyRelease)) { - XDeviceKeyEvent *ke = reinterpret_cast(&evt); - if ((evt.type == iKeyRelease) && XPending(display)) { - // Is it a silly key repeat? - XEvent nxt; - XPeekEvent(display, &nxt); - if (nxt.type == iKeyPress) { - XDeviceKeyEvent *ne = reinterpret_cast(&nxt); - if (ke->keycode == ne->keycode) { - XNextEvent(display, &nxt); - continue; - } - } - } - handleButton(ke->keycode, evt.type == iKeyPress); - } - } -} - -void GlobalShortcutX::inputReadyRead(int) { -#ifdef Q_OS_LINUX - struct input_event ev; - - if (bNeedRemap) - remap(); - - QFile *f=qobject_cast(sender()->parent()); - if (!f) - return; - - bool found = false; - - while (f->read(reinterpret_cast(&ev), sizeof(ev)) == sizeof(ev)) { - found = true; - if (ev.type != EV_KEY) - continue; - bool down; - switch (ev.value) { - case 0: - down = false; - break; - case 1: - down = true; - break; - default: - continue; - } - int evtcode = ev.code + 8; - handleButton(evtcode, down); - } - - if (! found) { - int fd = f->handle(); - int version = 0; - if ((ioctl(fd, EVIOCGVERSION, &version) < 0) || (((version >> 16) & 0xFF) < 1)) { - qWarning("GlobalShortcutX: Removing dead input device %s", qPrintable(f->fileName())); - qmInputDevices.remove(f->fileName()); - qsKeyboards.remove(f->fileName()); - delete f; - } - } -#endif -} - -#define test_bit(bit, array) (array[bit/8] & (1<<(bit%8))) - -void GlobalShortcutX::directoryChanged(const QString &dir) { -#ifdef Q_OS_LINUX - QDir d(dir, QLatin1String("event*"), 0, QDir::System); - foreach(QFileInfo fi, d.entryInfoList()) { - QString path = fi.absoluteFilePath(); - if (! qmInputDevices.contains(path)) { - QFile *f = new QFile(path, this); - if (f->open(QIODevice::ReadOnly)) { - int fd = f->handle(); - int version; - char name[256]; - uint8_t events[EV_MAX/8 + 1]; - memset(events, 0, sizeof(events)); - if ((ioctl(fd, EVIOCGVERSION, &version) >= 0) && (ioctl(fd, EVIOCGNAME(sizeof(name)), name)>=0) && (ioctl(fd, EVIOCGBIT(0,sizeof(events)), &events) >= 0) && test_bit(EV_KEY, events) && (((version >> 16) & 0xFF) > 0)) { - name[255]=0; - qWarning("GlobalShortcutX: %s: %s", qPrintable(f->fileName()), name); - // Is it grabbed by someone else? - if ((ioctl(fd, EVIOCGRAB, 1) < 0)) { - qWarning("GlobalShortcutX: Device exclusively grabbed by someone else (X11 using exclusive-mode evdev?)"); - delete f; - } else { - ioctl(fd, EVIOCGRAB, 0); - uint8_t keys[KEY_MAX/8 + 1]; - if ((ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keys)), &keys) >= 0) && test_bit(KEY_SPACE, keys)) - qsKeyboards.insert(f->fileName()); - - fcntl(f->handle(), F_SETFL, O_NONBLOCK); - connect(new QSocketNotifier(f->handle(), QSocketNotifier::Read, f), SIGNAL(activated(int)), this, SLOT(inputReadyRead(int))); - - qmInputDevices.insert(f->fileName(), f); - } - } else { - delete f; - } - } else { - delete f; - } - } - } -#endif -} - -QString GlobalShortcutX::buttonName(const QVariant &v) { - bool ok; - unsigned int key=v.toUInt(&ok); - if (!ok) - return QString(); - if ((key < 0x118) || (key >= 0x128)) { - KeySym ks=XKeycodeToKeysym(QX11Info::display(), static_cast(key), 0); - if (ks == NoSymbol) { - return QLatin1String("0x")+QString::number(key,16); - } else { - const char *str=XKeysymToString(ks); - if (*str == '\0') { - return QLatin1String("KS0x")+QString::number(ks, 16); - } else { - return QLatin1String(str); - } - } - } else { - return tr("Mouse %1").arg(key-0x118); - } -} diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut_unix.h mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_unix.h --- mumble-1.2.3/src/mumble11x/GlobalShortcut_unix.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_unix.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,71 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "GlobalShortcut.h" -#include "ConfigDialog.h" -#include "Global.h" - -#include -#include -#include -#include -#include -#ifdef Q_OS_LINUX -#include -#include -#endif - -#define NUM_BUTTONS 0x2ff - -class GlobalShortcutX : public GlobalShortcutEngine { - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutX) - public: - Display *display; - volatile bool bRunning; - bool bXInput; - QSet qsKeyboards; - QMap qmInputDevices; - QMap qmXDevices; - - GlobalShortcutX(); - ~GlobalShortcutX(); - void run(); - QString buttonName(const QVariant &); - - int iKeyPress, iKeyRelease, iButtonPress, iButtonRelease; - - void initXInput(); - public slots: - void displayReadyRead(int); - void inputReadyRead(int); - void directoryChanged(const QString &); -}; diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_win.cpp --- mumble-1.2.3/src/mumble11x/GlobalShortcut_win.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_win.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,576 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "GlobalShortcut_win.h" -#include "MainWindow.h" -#ifndef COMPAT_CLIENT -#include "Overlay.h" -#endif -#include "Global.h" -#include "../../overlay/HardHook.h" - -#undef FAILED -#define FAILED(Status) (static_cast(Status)<0) - -#define DX_SAMPLE_BUFFER_SIZE 512 - -static uint qHash(const GUID &a) { - uint val = a.Data1 ^ a.Data2 ^ a.Data3; - for (int i=0;i<8;i++) - val += a.Data4[i]; - return val; -} - -#ifndef COMPAT_CLIENT - -static HWND WINAPI HookWindowFromPoint(POINT p); -static BOOL WINAPI HookSetForegroundWindow(HWND hwnd); - -static HardHook hhWindowFromPoint(reinterpret_cast(::WindowFromPoint), reinterpret_cast(HookWindowFromPoint)); -static HardHook hhSetForegroundWindow(reinterpret_cast(::SetForegroundWindow), reinterpret_cast(HookSetForegroundWindow)); - -typedef HWND(__stdcall *WindowFromPointType)(POINT); -static HWND WINAPI HookWindowFromPoint(POINT p) { - if (g.ocIntercept) - return g.ocIntercept->qgv.winId(); - - WindowFromPointType oWindowFromPoint = (WindowFromPointType) hhWindowFromPoint.call; - hhWindowFromPoint.restore(); - - HWND hwnd = oWindowFromPoint(p); - - hhWindowFromPoint.inject(); - return hwnd; -} - -typedef BOOL(__stdcall *SetForegroundWindowType)(HWND); -static BOOL WINAPI HookSetForegroundWindow(HWND hwnd) { - if (g.ocIntercept) - return TRUE; - - SetForegroundWindowType oSetForegroundWindow = (SetForegroundWindowType) hhSetForegroundWindow.call; - hhSetForegroundWindow.restore(); - - BOOL ret = oSetForegroundWindow(hwnd); - - hhSetForegroundWindow.inject(); - return ret; -} - -#endif - -GlobalShortcutEngine *GlobalShortcutEngine::platformInit() { - return new GlobalShortcutWin(); -} - - -GlobalShortcutWin::GlobalShortcutWin() { - pDI = NULL; - uiHardwareDevices = 0; - - GetKeyboardState(ucKeyState); - - moveToThread(this); - start(QThread::LowestPriority); -} - -GlobalShortcutWin::~GlobalShortcutWin() { - quit(); - wait(); -} - -void GlobalShortcutWin::run() { - HMODULE hSelf; - HRESULT hr; - QTimer *timer; - - if (FAILED(hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, reinterpret_cast(&pDI), NULL))) { - qFatal("GlobalShortcutWin: Failed to create d8input"); - return; - } - - /* - * Wait for MainWindow's constructor to finish before we enumerate DirectInput devices. - * We need to do this because adding a new device requires a Window handle. (SetCooperativeLevel()) - */ - while (! g.mw) - this->yieldCurrentThread(); - - GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, (wchar_t *) &HookKeyboard, &hSelf); - - hhKeyboard = SetWindowsHookEx(WH_KEYBOARD_LL, HookKeyboard, hSelf, 0); - hhMouse = SetWindowsHookEx(WH_MOUSE_LL, HookMouse, hSelf, 0); - -#ifdef QT_NO_DEBUG -#endif - - timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(timeTicked())); - timer->start(20); - - setPriority(QThread::TimeCriticalPriority); - - exec(); - - UnhookWindowsHookEx(hhKeyboard); - UnhookWindowsHookEx(hhMouse); - - foreach(InputDevice *id, qhInputDevices) { - if (id->pDID) { - id->pDID->Unacquire(); - id->pDID->Release(); - } - delete id; - } - pDI->Release(); -} - -LRESULT CALLBACK GlobalShortcutWin::HookKeyboard(int nCode, WPARAM wParam, LPARAM lParam) { - GlobalShortcutWin *gsw=static_cast(engine); - KBDLLHOOKSTRUCT *key=reinterpret_cast(lParam); - BYTE *ucKeyState = gsw->ucKeyState; - -#ifndef QT_NO_DEBUG - static int safety = 0; - - if ((++safety < 100) && (nCode >= 0)) { -#else - if (nCode >= 0) { -#endif - UINT msg = wParam; - WPARAM w = key->vkCode; - LPARAM l = 1 | (key->scanCode << 16); - if (key->flags & LLKHF_EXTENDED) - l |= 0x1000000; - if (wParam == WM_KEYUP) - l |= 0xC0000000; - - bool nomsg = false; - - switch (w) { - case VK_LCONTROL: - case VK_RCONTROL: - if ((msg == WM_KEYDOWN) || (msg == WM_SYSKEYDOWN)) - ucKeyState[w] |= 0x80; - else { - ucKeyState[w] &= 0x7f; - - if ((ucKeyState[VK_LCONTROL] & 0x80) || (ucKeyState[VK_RCONTROL] & 0x80)) { - nomsg = true; - break; - } - } - - w = VK_CONTROL; - break; - case VK_LSHIFT: - case VK_RSHIFT: - if ((msg == WM_KEYDOWN) || (msg == WM_SYSKEYDOWN)) - ucKeyState[w] |= 0x80; - else { - ucKeyState[w] &= 0x7f; - - if ((ucKeyState[VK_LSHIFT] & 0x80) || (ucKeyState[VK_RSHIFT] & 0x80)) { - nomsg = true; - break; - } - } - - w = VK_SHIFT; - break; - case VK_LMENU: - case VK_RMENU: - if ((msg == WM_KEYDOWN) || (msg == WM_SYSKEYDOWN)) - ucKeyState[w] |= 0x80; - else { - ucKeyState[w] &= 0x7f; - - if ((ucKeyState[VK_LMENU] & 0x80) || (ucKeyState[VK_RMENU] & 0x80)) { - nomsg = true; - break; - } - } - - w = VK_MENU; - break; - default: - break; - } - - if ((msg == WM_KEYDOWN) || (msg == WM_SYSKEYDOWN)) { - if (ucKeyState[w] & 0x80) - l |= 0x40000000; - ucKeyState[w] |= 0x80; - } else if (((msg == WM_KEYUP) || (msg == WM_SYSKEYUP)) && !nomsg) { - ucKeyState[w] &= 0x7f; - } - - QList ql; - unsigned int keyid = static_cast((key->scanCode << 8) | 0x4); - if (key->flags & LLKHF_EXTENDED) - keyid |= 0x8000U; - ql << keyid; - ql << QVariant(QUuid(GUID_SysKeyboard)); - bool suppress = gsw->handleButton(ql, !(key->flags & LLKHF_UP)); - -#ifndef COMPAT_CLIENT - if (! suppress && g.ocIntercept) { - HWND hwnd = g.ocIntercept->qgv.winId(); - - GUITHREADINFO gti; - ZeroMemory(>i, sizeof(gti)); - gti.cbSize = sizeof(gti); - ::GetGUIThreadInfo(::GetWindowThreadProcessId(hwnd, NULL), >i); - - if (gti.hwndFocus) - hwnd = gti.hwndFocus; - - if (! nomsg) - ::PostMessage(hwnd, msg, w, l); - - suppress = true; - } -#endif - - if (suppress) - return 1; - - } - return CallNextHookEx(gsw->hhKeyboard, nCode, wParam, lParam); -} - -LRESULT CALLBACK GlobalShortcutWin::HookMouse(int nCode, WPARAM wParam, LPARAM lParam) { - GlobalShortcutWin *gsw=static_cast(engine); - MSLLHOOKSTRUCT *mouse=reinterpret_cast(lParam); - BYTE *ucKeyState = gsw->ucKeyState; - - if (nCode >= 0) { - bool suppress = false; - UINT msg = wParam; - - switch (msg) { - case WM_LBUTTONDOWN: - ucKeyState[VK_LBUTTON] |= 0x80; - if (gsw->tDoubleClick.restart() < (QApplication::doubleClickInterval() * 1000ULL)) - msg = WM_LBUTTONDBLCLK; - break; - case WM_LBUTTONUP: - ucKeyState[VK_LBUTTON] &= 0x7f; - break; - case WM_RBUTTONDOWN: - ucKeyState[VK_RBUTTON] |= 0x80; - break; - case WM_RBUTTONUP: - ucKeyState[VK_RBUTTON] &= 0x7f; - break; - case WM_MBUTTONDOWN: - ucKeyState[VK_MBUTTON] |= 0x80; - break; - case WM_MBUTTONUP: - ucKeyState[VK_MBUTTON] &= 0x7f; - break; - case WM_XBUTTONDOWN: - if ((mouse->mouseData >> 16) == XBUTTON1) - ucKeyState[VK_XBUTTON1] |= 0x80; - else if ((mouse->mouseData >> 16) == XBUTTON2) - ucKeyState[VK_XBUTTON2] |= 0x80; - break; - case WM_XBUTTONUP: - if ((mouse->mouseData >> 16) == XBUTTON1) - ucKeyState[VK_XBUTTON1] &= 0x7f; - else if ((mouse->mouseData >> 16) == XBUTTON2) - ucKeyState[VK_XBUTTON2] &= 0x7f; - break; - default: - break; - } - -#ifndef COMPAT_CLIENT - if (g.ocIntercept) { - POINT p; - GetCursorPos(&p); - - int dx = mouse->pt.x - p.x; - int dy = mouse->pt.y - p.y; - - g.ocIntercept->iMouseX = qBound(0, g.ocIntercept->iMouseX + dx, g.ocIntercept->uiWidth - 1); - g.ocIntercept->iMouseY = qBound(0, g.ocIntercept->iMouseY + dy, g.ocIntercept->uiHeight - 1); - - WPARAM w = 0; - LPARAM l = (static_cast(g.ocIntercept->iMouseX) & 0xFFFF) | ((g.ocIntercept->iMouseY << 16) & 0xFFFF0000); - - if (ucKeyState[VK_CONTROL] & 0x80) - w |= MK_CONTROL; - if (ucKeyState[VK_LBUTTON] & 0x80) - w |= MK_LBUTTON; - if (ucKeyState[VK_MBUTTON] & 0x80) - w |= MK_MBUTTON; - if (ucKeyState[VK_RBUTTON] & 0x80) - w |= MK_RBUTTON; - if (ucKeyState[VK_SHIFT] & 0x80) - w |= MK_SHIFT; - if (ucKeyState[VK_XBUTTON1] & 0x80) - w |= MK_XBUTTON1; - if (ucKeyState[VK_XBUTTON2] & 0x80) - w |= MK_XBUTTON2; - - w |= (mouse->mouseData & 0xFFFF0000); - - HWND hwnd = g.ocIntercept->qgv.winId(); - - GUITHREADINFO gti; - ZeroMemory(>i, sizeof(gti)); - gti.cbSize = sizeof(gti); - ::GetGUIThreadInfo(::GetWindowThreadProcessId(hwnd, NULL), >i); - - if (gti.hwndCapture) - hwnd = gti.hwndCapture; - - ::PostMessage(hwnd, msg, w, l); - - QMetaObject::invokeMethod(g.ocIntercept, "updateMouse", Qt::QueuedConnection); - - suppress = true; - } -#endif - - bool down = false; - unsigned int btn = 0; - switch (wParam) { - case WM_LBUTTONDOWN: - down = true; - case WM_LBUTTONUP: - btn = 3; - break; - case WM_RBUTTONDOWN: - down = true; - case WM_RBUTTONUP: - btn = 4; - break; - case WM_MBUTTONDOWN: - down = true; - case WM_MBUTTONUP: - btn = 5; - break; - case WM_XBUTTONDOWN: - down = true; - case WM_XBUTTONUP: - btn = 5 + (mouse->mouseData >> 16); - default: - break; - } - if (btn) { - QList ql; - ql << static_cast((btn << 8) | 0x4); - ql << QVariant(QUuid(GUID_SysMouse)); - bool wantsuppress = gsw->handleButton(ql, down); - if (! suppress) - suppress = wantsuppress && (btn != 3); - } - if (suppress) - return 1; - } - return CallNextHookEx(gsw->hhMouse, nCode, wParam, lParam); -} - -BOOL CALLBACK GlobalShortcutWin::EnumDeviceObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef) { - InputDevice *id=static_cast(pvRef); - QString name = QString::fromUtf16(reinterpret_cast(lpddoi->tszName)); - id->qhNames[lpddoi->dwType] = name; - - return DIENUM_CONTINUE; -} - -BOOL GlobalShortcutWin::EnumDevicesCB(LPCDIDEVICEINSTANCE pdidi, LPVOID pContext) { - GlobalShortcutWin *cbgsw=static_cast(pContext); - HRESULT hr; - - QString name = QString::fromUtf16(reinterpret_cast(pdidi->tszProductName)); - QString sname = QString::fromUtf16(reinterpret_cast(pdidi->tszInstanceName)); - - InputDevice *id = new InputDevice; - id->pDID = NULL; - id->name = name; - id->guid = pdidi->guidInstance; - id->vguid = QVariant(QUuid(id->guid).toString()); - - foreach(InputDevice *dev, cbgsw->qhInputDevices) { - if (dev->guid == id->guid) { - delete id; - return DIENUM_CONTINUE; - } - } - - if (FAILED(hr = cbgsw->pDI->CreateDevice(pdidi->guidInstance, &id->pDID, NULL))) - qFatal("GlobalShortcutWin: CreateDevice: %lx", hr); - - if (FAILED(hr = id->pDID->EnumObjects(EnumDeviceObjectsCallback, static_cast(id), DIDFT_BUTTON))) - qFatal("GlobalShortcutWin: EnumObjects: %lx", hr); - - if (id->qhNames.count() > 0) { - QList types = id->qhNames.keys(); - qSort(types); - - int nbuttons = types.count(); - STACKVAR(DIOBJECTDATAFORMAT, rgodf, nbuttons); - DIDATAFORMAT df; - ZeroMemory(&df, sizeof(df)); - df.dwSize = sizeof(df); - df.dwObjSize = sizeof(DIOBJECTDATAFORMAT); - df.dwFlags=DIDF_ABSAXIS; - df.dwDataSize = (nbuttons + 3) & (~0x3); - df.dwNumObjs = nbuttons; - df.rgodf = rgodf; - for (int i=0;iqhOfsToType[dwOfs] = dwType; - id->qhTypeToOfs[dwType] = dwOfs; - } - - if (FAILED(hr = id->pDID->SetCooperativeLevel(g.mw->winId(), DISCL_NONEXCLUSIVE|DISCL_BACKGROUND))) - qFatal("GlobalShortcutWin: SetCooperativeLevel: %lx", hr); - - if (FAILED(hr = id->pDID->SetDataFormat(&df))) - qFatal("GlobalShortcutWin: SetDataFormat: %lx", hr); - - DIPROPDWORD dipdw; - - dipdw.diph.dwSize = sizeof(DIPROPDWORD); - dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER); - dipdw.diph.dwObj = 0; - dipdw.diph.dwHow = DIPH_DEVICE; - dipdw.dwData = DX_SAMPLE_BUFFER_SIZE; - - if (FAILED(hr = id->pDID->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph))) - qFatal("GlobalShortcutWin: SetProperty: %lx", hr); - - qWarning("Adding device %s %s %s:%d", qPrintable(QUuid(id->guid).toString()),qPrintable(name),qPrintable(sname),id->qhNames.count()); - cbgsw->qhInputDevices[id->guid] = id; - } else { - id->pDID->Release(); - delete id; - } - - return DIENUM_CONTINUE; -} - -void GlobalShortcutWin::timeTicked() { - if (g.mw->uiNewHardware != uiHardwareDevices) { - uiHardwareDevices = g.mw->uiNewHardware; - - pDI->EnumDevices(DI8DEVCLASS_ALL, EnumDevicesCB, static_cast(this), DIEDFL_ATTACHEDONLY); - } - - if (bNeedRemap) - remap(); - - foreach(InputDevice *id, qhInputDevices) { - DIDEVICEOBJECTDATA rgdod[DX_SAMPLE_BUFFER_SIZE]; - DWORD dwItems = DX_SAMPLE_BUFFER_SIZE; - HRESULT hr; - - hr = id->pDID->Acquire(); - - switch (hr) { - case DI_OK: - case S_FALSE: - break; - case DIERR_UNPLUGGED: - case DIERR_GENERIC: - qWarning("Removing device %s", qPrintable(QUuid(id->guid).toString())); - id->pDID->Release(); - qhInputDevices.remove(id->guid); - delete id; - return; - case DIERR_OTHERAPPHASPRIO: - continue; - default: - break; - } - id->pDID->Poll(); - - hr = id->pDID->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), rgdod, &dwItems, 0); - if (FAILED(hr)) - continue; - - if (dwItems <= 0) - continue; - - for (DWORD j=0; j ql; - - quint32 uiType = id->qhOfsToType.value(rgdod[j].dwOfs); - ql << uiType; - ql << id->vguid; - handleButton(ql, rgdod[j].dwData & 0x80); - } - } -} - -QString GlobalShortcutWin::buttonName(const QVariant &v) { - GlobalShortcutWin *gsw = static_cast(GlobalShortcutEngine::engine); - - const QList &sublist = v.toList(); - if (sublist.count() != 2) - return QString(); - - bool ok = false; - DWORD type = sublist.at(0).toUInt(&ok); - QUuid guid(sublist.at(1).toString()); - - if (guid.isNull() || (!ok)) - return QString(); - - QString device=guid.toString(); - QString name=QLatin1String("Unknown"); - InputDevice *id = gsw->qhInputDevices.value(guid); - if (guid == GUID_SysMouse) - device=QLatin1String("M:"); - else if (guid == GUID_SysKeyboard) - device=QLatin1String("K:"); - else if (id) - device=id->name+QLatin1String(":"); - if (id) { - name=id->qhNames.value(type); - } - return device+name; -} - -bool GlobalShortcutWin::canSuppress() { - return true; -} - -void GlobalShortcutWin::prepareInput() { - SetKeyboardState(ucKeyState); -} diff -Nru mumble-1.2.3/src/mumble11x/GlobalShortcut_win.h mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_win.h --- mumble-1.2.3/src/mumble11x/GlobalShortcut_win.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/GlobalShortcut_win.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,88 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "GlobalShortcut.h" -#include "Timer.h" - -#define DIRECTINPUT_VERSION 0x0800 -#include - -typedef QPair qpButton; - -struct InputDevice { - LPDIRECTINPUTDEVICE8 pDID; - GUID guid; - QVariant vguid; - QString name; - - // dwType to name - QHash qhNames; - - // Map dwType to dwOfs in our structure - QHash qhTypeToOfs; - - // Map dwOfs in our structure to dwType - QHash qhOfsToType; - - // Buttons active since last reset - QSet activeMap; -}; - -class GlobalShortcutWin : public GlobalShortcutEngine { - private: - Q_OBJECT - Q_DISABLE_COPY(GlobalShortcutWin) - public: - BYTE ucKeyState[256]; - LPDIRECTINPUT8 pDI; - QHash qhInputDevices; - HHOOK hhMouse, hhKeyboard; - unsigned int uiHardwareDevices; - Timer tDoubleClick; - static BOOL CALLBACK EnumSuitableDevicesCB(LPCDIDEVICEINSTANCE, LPDIRECTINPUTDEVICE8, DWORD, DWORD, LPVOID); - static BOOL CALLBACK EnumDevicesCB(LPCDIDEVICEINSTANCE, LPVOID); - static BOOL CALLBACK EnumDeviceObjectsCallback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVOID pvRef); - static LRESULT CALLBACK HookKeyboard(int, WPARAM, LPARAM); - static LRESULT CALLBACK HookMouse(int, WPARAM, LPARAM); - - virtual bool canSuppress(); - void run(); - public slots: - void timeTicked(); - public: - GlobalShortcutWin(); - ~GlobalShortcutWin(); - void unacquire(); - QString buttonName(const QVariant &); - - virtual void prepareInput(); -}; - -uint qHash(const GUID &); diff -Nru mumble-1.2.3/src/mumble11x/Group.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Group.cpp --- mumble-1.2.3/src/mumble11x/Group.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Group.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Group.h" -#include "Channel.h" -#include "Player.h" - -Group::Group(Channel *assoc, QString name) { - c = assoc; - bInherit = true; - bInheritable = true; - qsName = name; - c->qhGroups[name] = this; -} diff -Nru mumble-1.2.3/src/mumble11x/LCD.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/LCD.cpp --- mumble-1.2.3/src/mumble11x/LCD.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/LCD.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,435 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "LCD.h" -#include "Player.h" -#include "Channel.h" -#include "Global.h" -#include "Message.h" -#include "ServerHandler.h" - -QList *LCDEngineRegistrar::qlInitializers; - -LCDEngineRegistrar::LCDEngineRegistrar(LCDEngineNew cons) { - if (! qlInitializers) - qlInitializers = new QList(); - n = cons; - qlInitializers->append(n); -} - -LCDEngineRegistrar::~LCDEngineRegistrar() { - qlInitializers->removeAll(n); -} - -static ConfigWidget *LCDConfigDialogNew(Settings &st) { - return new LCDConfig(st); -} - -class LCDDeviceManager : public DeferInit { - protected: - ConfigRegistrar *crLCD; - public: - QList qlEngines; - QList qlDevices; - void initialize(); - void destroy(); -}; - -void LCDDeviceManager::initialize() { - if (LCDEngineRegistrar::qlInitializers) { - foreach(LCDEngineNew engine, *LCDEngineRegistrar::qlInitializers) { - LCDEngine *e = engine(); - qlEngines.append(e); - - foreach(LCDDevice *d, e->devices()) { - qlDevices << d; - } - } - } - if (qlDevices.count() > 0) { - crLCD = new ConfigRegistrar(5900, LCDConfigDialogNew); - } else { - crLCD = NULL; - } -} - -void LCDDeviceManager::destroy() { - qlDevices.clear(); - foreach(LCDEngine *e, qlEngines) { - delete e; - } - if (crLCD) - delete crLCD; -} - -static LCDDeviceManager devmgr; - -/* --- */ - - -LCDConfig::LCDConfig(Settings &st) : ConfigWidget(st) { - setupUi(this); - - QTreeWidgetItem *qtwi; - foreach(LCDDevice *d, devmgr.qlDevices) { - qtwi = new QTreeWidgetItem(qtwDevices); - - qtwi->setFlags(Qt::ItemIsEnabled |Qt::ItemIsUserCheckable); - - qtwi->setText(0, d->name()); - qtwi->setToolTip(0, d->name()); - - LCDDevice::Type type = d->type(); - QString qsType; - if (type == LCDDevice::GraphicLCD) - qsType = tr("Graphic"); - else if (type == LCDDevice::CharacterLCD) - qsType = tr("Character"); - - qtwi->setText(1, qsType); - qtwi->setToolTip(1, qsType); - - QSize lcdsize = d->size(); - QString qsSize = QString::fromLatin1("%1x%2").arg(lcdsize.width()).arg(lcdsize.height()); - qtwi->setText(2, qsSize); - qtwi->setToolTip(2, qsSize); - - qtwi->setCheckState(3, Qt::Unchecked); - qtwi->setToolTip(3, tr("Enable this device")); - } -} - -bool LCDConfig::expert(bool) { - return false; -} - -QString LCDConfig::title() const { - return tr("LCD"); -} - -QIcon LCDConfig::icon() const { - return QIcon(QLatin1String("skin:config_lcd.png")); -} - -void LCDConfig::load(const Settings &r) { - QList qlItems = qtwDevices->findItems(QString(), Qt::MatchContains); - foreach(QTreeWidgetItem *qtwi, qlItems) { - QString qsName = qtwi->text(0); - bool enabled = r.qmLCDDevices.contains(qsName) ? r.qmLCDDevices.value(qsName) : true; - qtwi->setCheckState(3, enabled ? Qt::Checked : Qt::Unchecked); - } - - loadSlider(qsMinColWidth, r.iLCDPlayerViewMinColWidth); - loadSlider(qsSplitterWidth, r.iLCDPlayerViewSplitterWidth); -} - -void LCDConfig::save() const { - QList qlItems = qtwDevices->findItems(QString(), Qt::MatchContains); - - foreach(QTreeWidgetItem *qtwi, qlItems) { - QString qsName = qtwi->text(0); - s.qmLCDDevices.insert(qsName, qtwi->checkState(3) == Qt::Checked); - } - - s.iLCDPlayerViewMinColWidth = qsMinColWidth->value(); - s.iLCDPlayerViewSplitterWidth = qsSplitterWidth->value(); -} - -void LCDConfig::accept() const { - foreach(LCDDevice *d, devmgr.qlDevices) { - bool enabled = s.qmLCDDevices.value(d->name()); - d->setEnabled(enabled); - } - g.lcd->updatePlayerView(); -} - -void LCDConfig::on_qsMinColWidth_valueChanged(int v) { - qlMinColWidth->setText(QString::number(v)); -} - -void LCDConfig::on_qsSplitterWidth_valueChanged(int v) { - qlSplitterWidth->setText(QString::number(v)); -} - -/* --- */ - -LCD::LCD() : QObject() { - qfNormal = QFont(QString::fromLatin1("Arial"), 7); - qfItalic = qfNormal; - qfItalic.setItalic(true); - - qfBold = qfNormal; - qfBold.setWeight(QFont::Black); - qfItalicBold = qfBold; - qfItalic.setItalic(true); - - QFontMetrics qfm(qfNormal); - - iFontHeight = 10; - - initBuffers(); - - iFrameIndex = 0; - - qtTimer = new QTimer(this); - connect(qtTimer, SIGNAL(timeout()), this, SLOT(tick())); - - foreach(LCDDevice *d, devmgr.qlDevices) { - bool enabled = g.s.qmLCDDevices.contains(d->name()) ? g.s.qmLCDDevices.value(d->name()) : true; - d->setEnabled(enabled); - } - qiLogo = QImage(QLatin1String("skin:mumble.48x48.png")).convertToFormat(QImage::Format_MonoLSB); - updatePlayerView(); -} - -void LCD::tick() { - iFrameIndex ++; - updatePlayerView(); -} - -void LCD::initBuffers() { - foreach(LCDDevice *d, devmgr.qlDevices) { - QSize size = d->size(); - if (! qhImageBuffers.contains(size)) { - size_t buflen = (size.width() * size.height()) / 8; - qhImageBuffers[size] = new unsigned char[buflen]; - qhImages[size] = new QImage(qhImageBuffers[size], size.width(), size.height(), QImage::Format_MonoLSB); - } - } -} - -void LCD::destroyBuffers() { - foreach(QImage *img, qhImages) - delete img; - qhImages.clear(); - - foreach(unsigned char *buf, qhImageBuffers) - delete buf; - qhImageBuffers.clear(); -} - -struct ListEntry { - QString qsString; - bool bBold; - bool bItalic; - ListEntry(const QString &qs, bool bB, bool bI) : qsString(qs), bBold(bB), bItalic(bI) {}; -}; - -static bool entriesSort(const ListEntry &a, const ListEntry &b) { - return a.qsString < b.qsString; -} - -void LCD::updatePlayerView() { - if (qhImages.count() == 0) - return; - - QStringList qslTalking; - Player *me = g.uiSession ? ClientPlayer::get(g.uiSession) : NULL; - Channel *home = me ? me->cChannel : NULL; - bool alert = false; - - foreach(const QSize &size, qhImages.keys()) { - QImage *img = qhImages.value(size); - QPainter painter(img); - painter.setRenderHints(0, true); - painter.setPen(Qt::color1); - painter.setFont(qfNormal); - - img->fill(Qt::color0); - - if (! me) { - qmNew.clear(); - qmOld.clear(); - qmSpeaking.clear(); - qmNameCache.clear(); - painter.drawImage(0,0,qiLogo); - painter.drawText(60,20, tr("Not connected")); - continue; - } - - foreach(Player *p, me->cChannel->qlPlayers) { - if (! qmNew.contains(p->uiSession)) { - qmNew.insert(p->uiSession, Timer()); - qmNameCache.insert(p->uiSession, p->qsName); - qmOld.remove(p->uiSession); - } - } - - foreach(unsigned int session, qmNew.keys()) { - Player *p = ClientPlayer::get(session); - if (!p || (p->cChannel != me->cChannel)) { - qmNew.remove(session); - qmOld.insert(session, Timer()); - } - } - - QMap old; - - foreach(unsigned int session, qmOld.keys()) { - Timer t = qmOld.value(session); - if (t.elapsed() > 3000000) { - qmNameCache.remove(session); - } else { - old.insert(session, qmOld.value(session)); - } - } - qmOld = old; - - QList entries; - entries << ListEntry(QString::fromLatin1("[%1]").arg(me->cChannel->qsName), false, false); - - bool hasnew = false; - - QMap speaking; - - foreach(Channel *c, home->allLinks()) { - foreach(Player *p, c->qlPlayers) { - bool bTalk = p->bTalking; - if (bTalk) { - speaking.insert(p->uiSession, Timer()); - } else if (qmSpeaking.contains(p->uiSession)) { - Timer t = qmSpeaking.value(p->uiSession); - if (t.elapsed() > 1000000) - qmSpeaking.remove(p->uiSession); - else { - speaking.insert(p->uiSession, t); - bTalk = true; - } - } - if (bTalk) { - alert = true; - entries << ListEntry(p->qsName, true, (p->cChannel != me->cChannel)); - } else if (c == me->cChannel) { - if (qmNew.value(p->uiSession).elapsed() < 3000000) { - entries << ListEntry(QLatin1String("+") + p->qsName, false, false); - hasnew = true; - } - } - } - } - qmSpeaking = speaking; - - foreach(unsigned int session, qmOld.keys()) { - entries << ListEntry(QLatin1String("-") + qmNameCache.value(session), false, false); - } - - if (! qmOld.isEmpty() || hasnew || ! qmSpeaking.isEmpty()) - qtTimer->start(500); - else - qtTimer->stop(); - - qSort(++ entries.begin(), entries.end(), entriesSort); - - const int iWidth = size.width(); - const int iHeight = size.height(); - const int iPlayersPerColumn = iHeight / iFontHeight; - const int iSplitterWidth = g.s.iLCDPlayerViewSplitterWidth; - const int iPlayerColumns = (entries.count() + iPlayersPerColumn - 1) / iPlayersPerColumn; - - int iColumns = iPlayerColumns; - int iColumnWidth = 1; - - while (iColumns >= 1) { - iColumnWidth = (iWidth - (iColumns-1)*iSplitterWidth) / iColumns; - if (iColumnWidth >= g.s.iLCDPlayerViewMinColWidth) - break; - --iColumns; - } - - QRect bound; - int row = 0, col = 0; - - - foreach(const ListEntry &le, entries) { - if (row >= iPlayersPerColumn) { - row = 0; - ++col; - } - if (col > iColumns) - break; - - if (! le.qsString.isEmpty()) { - if (le.bBold && le.bItalic) - painter.setFont(qfItalicBold); - else if (le.bBold) - painter.setFont(qfBold); - else if (le.bItalic) - painter.setFont(qfItalic); - else - painter.setFont(qfNormal); - painter.drawText(QRect(col * (iColumnWidth + iSplitterWidth), - row * iFontHeight, iColumnWidth, iFontHeight+2), Qt::AlignLeft, le.qsString); - } - ++row; - } - } - - foreach(LCDDevice *d, devmgr.qlDevices) { - LCDDevice::Type type = d->type(); - if (type == LCDDevice::GraphicLCD) { - QImage *img = qhImages[d->size()]; - if (! img) - continue; - d->blitImage(img, alert); - } else if (type == LCDDevice::CharacterLCD) { - /* TODO. */ - qWarning("LCD: Unable to draw to Character LCD."); - } - } -} - -LCD::~LCD() { - destroyBuffers(); -} - -bool LCD::hasDevices() { - return (! devmgr.qlDevices.isEmpty()); -} - -/* --- */ - -LCDEngine::LCDEngine() : QObject() { -} - -LCDEngine::~LCDEngine() { -} - -LCDDevice::LCDDevice() { -} - -LCDDevice::~LCDDevice() { -} - -/* --- */ - -uint qHash(const QSize &size) { - return ((size.width() & 0xffff) << 16) | (size.height() & 0xffff); -} diff -Nru mumble-1.2.3/src/mumble11x/LCD.h mumble-1.2.3-87-gf7d8711/src/mumble11x/LCD.h --- mumble-1.2.3/src/mumble11x/LCD.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/LCD.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,131 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _LCD_H -#define _LCD_H - -#include "ConfigDialog.h" -#include "Timer.h" -#include "ui_LCD.h" - -class Player; -class LCDDevice; - -class LCDConfig : public ConfigWidget, public Ui::LCDConfig { - private: - Q_OBJECT - Q_DISABLE_COPY(LCDConfig) - public: - LCDConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void on_qsMinColWidth_valueChanged(int v); - void on_qsSplitterWidth_valueChanged(int v); - void accept() const; - void save() const; - void load(const Settings &r); - bool expert(bool); -}; - -class LCDEngine : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(LCDEngine) - protected: - QList qlDevices; - public: - LCDEngine(); - virtual ~LCDEngine(); - virtual QList devices() const = 0; -}; - -class LCDDevice { - public: - enum Type { GraphicLCD, CharacterLCD }; - LCDDevice(); - virtual ~LCDDevice(); - virtual bool enabled() = 0; - virtual void setEnabled(bool e) = 0; - virtual void blitImage(QImage *img, bool alert = false) = 0; - virtual QString name() const = 0; - virtual Type type() const = 0; - virtual QSize size() const = 0; -}; - -typedef LCDEngine *(*LCDEngineNew)(void); - -class LCDEngineRegistrar { - protected: - LCDEngineNew n; - public: - static QList *qlInitializers; - LCDEngineRegistrar(LCDEngineNew n); - ~LCDEngineRegistrar(); -}; - -class LCD : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(LCD) - protected: - QFont qfNormal, qfBold, qfItalic, qfItalicBold; - QMap qmSpeaking; - QMap qmNew; - QMap qmOld; - QMap qmNameCache; - - int iFontHeight; - int iFrameIndex; - QHash qhImageBuffers; - QHash qhImages; - void initBuffers(); - void destroyBuffers(); - QImage qiLogo; - QTimer *qtTimer; - public slots: - void tick(); - public: - LCD(); - ~LCD(); - void updatePlayerView(); - bool hasDevices(); -}; - -uint qHash(const QSize &size); - -#else -class LCDConfig; -class LCDDevice; -class LCDEngine; -class LCDEngineRegistrar; -class LCD; -#endif diff -Nru mumble-1.2.3/src/mumble11x/LCD.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/LCD.ui --- mumble-1.2.3/src/mumble11x/LCD.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/LCD.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,187 +0,0 @@ - - LCDConfig - - - - 0 - 0 - 426 - 694 - - - - Form - - - - - - - 160 - 43 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - Devices - - - - - - - 0 - 0 - - - - false - - - - Name - - - - - Type - - - - - Size - - - - - Enabled - - - - - - - - - - - - 0 - 0 - - - - Views - - - - - - Minimum Column Width - - - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - 40 - - - 200 - - - Qt::Horizontal - - - - - - - TextLabel - - - - - - - Splitter Width - - - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - 0 - - - 5 - - - Qt::Horizontal - - - - - - - TextLabel - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/licenses.h mumble-1.2.3-87-gf7d8711/src/mumble11x/licenses.h --- mumble-1.2.3/src/mumble11x/licenses.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/licenses.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -static const char *licenseMumble = "Copyright (C) 2005-2010, Thorvald Natvig \n" - "Copyright (C) 2007, Stefan Gehn \n" - "Copyright (C) 2007, Sebastian Schlingmann \n" - "Copyright (C) 2008-2010, Mikkel Krautz \n" - "Copyright (C) 2008, Andreas Messer \n" - "Copyright (C) 2007, Trenton Schulz\n" - "Copyright (C) 2008-2010, Stefan Hacker \n" - "Copyright (C) 2008-2010, Snares \n" - "Copyright (C) 2009-2010, Benjamin Jemlich \n" - "\n" - "All rights reserved.\n" - "\n" - "Redistribution and use in source and binary forms, with or without\n" - "modification, are permitted provided that the following conditions\n" - "are met:\n" - "\n" - "- Redistributions of source code must retain the above copyright notice,\n" - " this list of conditions and the following disclaimer.\n" - "- Redistributions in binary form must reproduce the above copyright notice,\n" - " this list of conditions and the following disclaimer in the documentation\n" - " and/or other materials provided with the distribution.\n" - "- Neither the name of the Mumble Developers nor the names of its\n" - " contributors may be used to endorse or promote products derived from this\n" - " software without specific prior written permission.\n" - "\n" - "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n" - "`AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n" - "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n" - "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR\n" - "CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n" - "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n" - "PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n" - "PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n" - "LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n" - "NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n" - "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"; - - diff -Nru mumble-1.2.3/src/mumble11x/Log.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Log.cpp --- mumble-1.2.3/src/mumble11x/Log.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Log.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,426 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Log.h" -#include "TextToSpeech.h" -#include "MainWindow.h" -#include "Global.h" - -#ifdef Q_OS_MAC -extern bool qt_mac_execute_apple_script(const QString &script, AEDesc *ret); - -static bool growl_available(void) { - OSStatus err = LSFindApplicationForInfo('GRRR', CFSTR("com.Growl.GrowlHelperApp"), CFSTR("GrowlHelperApp.app"), NULL, NULL); - return err != kLSApplicationNotFoundErr; -} -#endif - -static ConfigWidget *LogConfigDialogNew(Settings &st) { - return new LogConfig(st); -} - -static ConfigRegistrar registrar(4000, LogConfigDialogNew); - -LogConfig::LogConfig(Settings &st) : ConfigWidget(st) { - setupUi(this); - - - qtwMessages->header()->setResizeMode(ColMessage, QHeaderView::Stretch); - qtwMessages->header()->setResizeMode(ColConsole, QHeaderView::ResizeToContents); - qtwMessages->header()->setResizeMode(ColNotification, QHeaderView::ResizeToContents); - qtwMessages->header()->setResizeMode(ColTTS, QHeaderView::ResizeToContents); - qtwMessages->header()->setResizeMode(ColStaticSound, QHeaderView::ResizeToContents); - - QTreeWidgetItem *twi; - for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { - Log::MsgType t = static_cast(i); - const QString messageName = g.l->msgName(t); - - twi = new QTreeWidgetItem(qtwMessages); - twi->setData(ColMessage, Qt::UserRole, i); - twi->setText(ColMessage, messageName); - twi->setCheckState(ColConsole, Qt::Unchecked); - twi->setCheckState(ColNotification, Qt::Unchecked); - twi->setCheckState(ColTTS, Qt::Unchecked); - twi->setCheckState(ColStaticSound, Qt::Unchecked); - - twi->setToolTip(ColConsole, tr("Toggle console for %1 events").arg(messageName)); - twi->setToolTip(ColNotification, tr("Toggle pop-up notifications for %1 events").arg(messageName)); - twi->setToolTip(ColTTS, tr("Toggle Text-To-Speech for %1 events").arg(messageName)); - twi->setToolTip(ColStaticSound, tr("Click here to toggle sound notification for %1 events").arg(messageName)); - twi->setToolTip(ColStaticSoundPath, tr("Path to soundfile used for sound notifications in the case of %1 events
Single click to play
Doubleclick to change").arg(messageName)); - - twi->setWhatsThis(ColConsole, tr("Click here to toggle console output for %1 events.
If checked, this option makes Mumble output all %1 events in its message log.").arg(messageName)); - twi->setWhatsThis(ColNotification, tr("Click here to toggle pop-up notifications for %1 events.
If checked, a notification pop-up will be created by Mumble for every %1 event.").arg(messageName)); - twi->setWhatsThis(ColTTS, tr("Click here to toggle Text-To-Speech for %1 events.
If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time.").arg(messageName)); - twi->setWhatsThis(ColStaticSound, tr("Click here to toggle sound notification for %1 events.
If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time.").arg(messageName)); - twi->setWhatsThis(ColStaticSoundPath, tr("Path to soundfile used for sound notifications in the case of %1 events.
Single click to play
Doubleclick to change
Be sure that sound notifications for these events are enabled or this field will not have any effect.").arg(messageName)); - } -} - -QString LogConfig::title() const { - return windowTitle(); -} - -QIcon LogConfig::icon() const { - return QIcon(QLatin1String("skin:config_msgs.png")); -} - -void LogConfig::load(const Settings &r) { - QList qlItems = qtwMessages->findItems(QString(), Qt::MatchContains); - foreach(QTreeWidgetItem *i, qlItems) { - Log::MsgType mt = static_cast(i->data(ColMessage, Qt::UserRole).toInt()); - Settings::MessageLog ml = static_cast(r.qmMessages.value(mt)); - - i->setCheckState(ColConsole, (ml & Settings::LogConsole) ? Qt::Checked : Qt::Unchecked); - i->setCheckState(ColNotification, (ml & Settings::LogBalloon) ? Qt::Checked : Qt::Unchecked); - i->setCheckState(ColTTS, (ml & Settings::LogTTS) ? Qt::Checked : Qt::Unchecked); - i->setCheckState(ColStaticSound, (ml & Settings::LogSoundfile) ? Qt::Checked : Qt::Unchecked); - i->setText(ColStaticSoundPath, r.qmMessageSounds.value(mt)); - } - - loadSlider(qsVolume, r.iTTSVolume); - qsbThreshold->setValue(r.iTTSThreshold); -} - -void LogConfig::save() const { - QList qlItems = qtwMessages->findItems(QString(), Qt::MatchContains); - foreach(QTreeWidgetItem *i, qlItems) { - Log::MsgType mt = static_cast(i->data(ColMessage, Qt::UserRole).toInt()); - - int v = 0; - if (i->checkState(ColConsole) == Qt::Checked) - v |= Settings::LogConsole; - if (i->checkState(ColNotification) == Qt::Checked) - v |= Settings::LogBalloon; - if (i->checkState(ColTTS) == Qt::Checked) - v |= Settings::LogTTS; - if (i->checkState(ColStaticSound) == Qt::Checked) - v |= Settings::LogSoundfile; - s.qmMessages[mt] = v; - s.qmMessageSounds[mt] = i->text(ColStaticSoundPath); - } - - s.iTTSVolume=qsVolume->value(); - s.iTTSThreshold=qsbThreshold->value(); -} - -void LogConfig::accept() const { - g.l->tts->setVolume(s.iTTSVolume); -} - -bool LogConfig::expert(bool) { - return false; -} - -void LogConfig::on_qtwMessages_itemChanged(QTreeWidgetItem* i, int column) { - if (! i->isSelected()) return; - switch (column) { - case ColTTS: - if (i->checkState(ColTTS)) - i->setCheckState(ColStaticSound, Qt::Unchecked); - break; - case ColStaticSound: - if (i->checkState(ColStaticSound)) { - i->setCheckState(ColTTS, Qt::Unchecked); - if (i->text(ColStaticSoundPath).isEmpty()) browseForSpxFile(); - } - break; - default: - break; - } -} - -void LogConfig::on_qtwMessages_itemClicked(QTreeWidgetItem * item, int column) { - if (item && column == ColStaticSoundPath) { - AudioOutputPtr ao = g.ao; - if (ao) { - if (!ao->playSample(item->text(ColStaticSoundPath), false)) - browseForSpxFile(); - } - } -} - -void LogConfig::on_qtwMessages_itemDoubleClicked(QTreeWidgetItem * item, int column) { - if (item && column == ColStaticSoundPath) - browseForSpxFile(); -} - -void LogConfig::browseForSpxFile() { - QString file = QFileDialog::getOpenFileName(this, tr("Choose sound file"), QString(), QLatin1String("*.spx")); - if (! file.isEmpty()) { - if (AudioOutputSample::getPacketsFromFile(file).isEmpty()) { - QMessageBox::critical(this, - tr("Invalid sound file"), - tr("The file '%1' does not exist or is not a valid speex file.").arg(file)); - return; - } - QTreeWidgetItem *i = qtwMessages->selectedItems()[0]; - i->setText(ColStaticSoundPath, file); - i->setCheckState(ColStaticSound, Qt::Checked); - - } -} - - -Log::Log(QObject *p) : QObject(p) { - tts=new TextToSpeech(this); - tts->setVolume(g.s.iTTSVolume); - uiLastId = 0; - -#ifdef Q_OS_MAC - QStringList qslAllEvents; - for (int i = Log::firstMsgType; i <= Log::lastMsgType; ++i) { - Log::MsgType t = static_cast(i); - qslAllEvents << QString("\"%1\"").arg(g.l->msgName(t)); - } - QString qsGrowlEvents = QString("{%1}").arg(qslAllEvents.join(",")); - QString qsScript = QString( - "tell application \"GrowlHelperApp\"\n" - " set the allNotificationsList to %1\n" - " set the enabledNotificationsList to %1\n" - " register as application \"Mumble\"" - " all notifications allNotificationsList" - " default notifications enabledNotificationsList" - " icon of application \"Mumble\"\n" - "end tell\n").arg(qsGrowlEvents); - if (growl_available()) - qt_mac_execute_apple_script(qsScript, NULL); -#endif -} - -const char *Log::msgNames[] = { - QT_TR_NOOP("Debug"), - QT_TR_NOOP("Critical"), - QT_TR_NOOP("Warning"), - QT_TR_NOOP("Information"), - QT_TR_NOOP("Server Connected"), - QT_TR_NOOP("Server Disconnected"), - QT_TR_NOOP("Player Joined Server"), - QT_TR_NOOP("Player Left Server"), - QT_TR_NOOP("Player kicked (you or by you)"), - QT_TR_NOOP("Player kicked"), - QT_TR_NOOP("You self-muted/deafened"), - QT_TR_NOOP("Other self-muted/deafened"), - QT_TR_NOOP("Player muted (you)"), - QT_TR_NOOP("Player muted (by you)"), - QT_TR_NOOP("Player muted (other)"), - QT_TR_NOOP("Player Joined Channel"), - QT_TR_NOOP("Player Left Channel"), - QT_TR_NOOP("Permission Denied"), - QT_TR_NOOP("Text Message") -}; - -QString Log::msgName(MsgType t) const { - return tr(msgNames[t]); -} - -void Log::setIgnore(MsgType t, int ignore) { - qmIgnore.insert(t, ignore); -} - -void Log::clearIgnore() { - qmIgnore.clear(); -} - -void Log::log(MsgType mt, const QString &console, const QString &terse) { - QTime now = QTime::currentTime(); - - int ignore = qmIgnore.value(mt); - if (ignore) { - ignore--; - qmIgnore.insert(mt, ignore); - return; - } - - const QString plain = QTextDocumentFragment::fromHtml(console).toPlainText(); - - quint32 flags = g.s.qmMessages.value(mt); - - // Message output on console - if ((flags & Settings::LogConsole)) { - QTextCursor tc=g.mw->qteLog->textCursor(); - tc.movePosition(QTextCursor::End); - if (plain.contains(QRegExp(QLatin1String("[\\r\\n]")))) { - QTextFrameFormat qttf; - qttf.setBorder(1); - qttf.setPadding(2); - qttf.setBorderStyle(QTextFrameFormat::BorderStyle_Solid); - tc.insertFrame(qttf); - } else if (! g.mw->qteLog->document()->isEmpty()) { - tc.insertBlock(); - } - tc.insertHtml(QString::fromLatin1("[%2] %1\n").arg(console).arg(now.toString(Qt::LocalDate))); - tc.movePosition(QTextCursor::End); - g.mw->qteLog->setTextCursor(tc); - g.mw->qteLog->ensureCursorVisible(); - } - - // Message notification with balloon tooltips - if ((flags & Settings::LogBalloon) && !(g.mw->isActiveWindow() && g.mw->qdwLog->isVisible())) { - QString qsIcon; - switch (mt) { - case DebugInfo: - case CriticalError: - qsIcon=QLatin1String("gtk-dialog-error"); - break; - case Warning: - qsIcon=QLatin1String("gtk-dialog-warning"); - break; - case TextMessage: - qsIcon=QLatin1String("gtk-edit"); - break; - default: - qsIcon=QLatin1String("gtk-dialog-info"); - break; - } - -#ifdef USE_DBUS - QDBusMessage response; - QVariantMap hints; - hints.insert(QLatin1String("desktop-entry"), QLatin1String("mumble")); - - - { - QDBusInterface kde(QLatin1String("org.kde.VisualNotifications"), QLatin1String("/VisualNotifications"), QLatin1String("org.kde.VisualNotifications")); - if (kde.isValid()) { - QList args; - args.append(QLatin1String("mumble")); - args.append(uiLastId); - args.append(QString()); - args.append(QLatin1String("mumble")); - args.append(msgName(mt)); - args.append(console); - args.append(QStringList()); - args.append(hints); - args.append(5000); - - response = kde.callWithArgumentList(QDBus::AutoDetect, QLatin1String("Notify"), args); - } - } - - if (response.type()!=QDBusMessage::ReplyMessage || response.arguments().at(0).toUInt()==0) { - QDBusInterface gnome(QLatin1String("org.freedesktop.Notifications"), QLatin1String("/org/freedesktop/Notifications"), QLatin1String("org.freedesktop.Notifications")); - if (gnome.isValid()) - response = gnome.call(QLatin1String("Notify"), QLatin1String("Mumble"), uiLastId, qsIcon, msgName(mt), console, QStringList(), hints, -1); - } - - if (response.type()==QDBusMessage::ReplyMessage && response.arguments().count() == 1) { - uiLastId = response.arguments().at(0).toUInt(); - } else { -#else - if (true) { -#endif - if (g.mw->qstiIcon->isSystemTrayAvailable() && g.mw->qstiIcon->supportsMessages()) { - QSystemTrayIcon::MessageIcon msgIcon; - - switch (mt) { - case DebugInfo: - case CriticalError: - msgIcon=QSystemTrayIcon::Critical; - break; - case Warning: - msgIcon=QSystemTrayIcon::Warning; - break; - default: - msgIcon=QSystemTrayIcon::Information; - break; - } - - g.mw->qstiIcon->showMessage(msgName(mt), plain, msgIcon); - } - } -#ifdef Q_OS_MAC - QString qsScript = QString( - "tell application \"GrowlHelperApp\"\n" - " notify with name \"%1\" title \"%1\" description \"%2\" application name \"Mumble\"\n" - "end tell\n").arg(msgName(mt)).arg(plain); - if (growl_available()) - qt_mac_execute_apple_script(qsScript, NULL); -#endif - } - - // Message notification with static sounds - - if ((flags & Settings::LogSoundfile)) { - QString sSound = g.s.qmMessageSounds.value(mt); - AudioOutputPtr ao = g.ao; - if (!ao || !ao->playSample(sSound, false)) { - qWarning() << "Sound file" << sSound << "is not a valid speex file, fallback to TTS."; - flags ^= Settings::LogSoundfile | Settings::LogTTS; // Fallback to TTS - } - } - - // Message notification with Text-To-Speech - if (! g.s.bTTS || !(flags & Settings::LogTTS)) - return; - - /* TTS threshold limiter. */ - if (plain.length() <= g.s.iTTSThreshold) - tts->say(plain); - else if ((! terse.isEmpty()) && (terse.length() <= g.s.iTTSThreshold)) - tts->say(terse); -} - -LogDocument::LogDocument(QObject *p) : QTextDocument(p) { -} - -QVariant LogDocument::loadResource(int type, const QUrl &url) { - if ((type != QTextDocument::ImageResource)) - return QLatin1String("No external resources allowed."); - - QImage qi(0, 0, QImage::Format_Mono); - - addResource(type, url, qi); - - if (! url.isValid() || url.isRelative()) - return qi; - - if ((url.scheme() != QLatin1String("http")) && (url.scheme() != QLatin1String("https"))) - return qi; - - qWarning() << "LogDocument::loadResource " << url.toString(); - - QNetworkRequest req(url); - QNetworkReply *rep = g.nam->get(req); - connect(rep, SIGNAL(finished()), this, SLOT(finished())); - return qi; -} - -void LogDocument::finished() { - QNetworkReply *rep = qobject_cast(sender()); - - if (rep->error() == QNetworkReply::NoError) { - QVariant qv = rep->readAll(); - addResource(QTextDocument::ImageResource, rep->request().url(), qv); - g.mw->qteLog->setDocument(this); - } - rep->deleteLater(); -} diff -Nru mumble-1.2.3/src/mumble11x/Log.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Log.h --- mumble-1.2.3/src/mumble11x/Log.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Log.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _LOG_H -#define _LOG_H - -#include "mumble_pch.hpp" -#include "ConfigDialog.h" -#include "AudioOutput.h" -#include "ui_Log.h" - -class TextToSpeech; - -class LogConfig : public ConfigWidget, public Ui::LogConfig { - private: - Q_OBJECT - Q_DISABLE_COPY(LogConfig) - public: - enum Column { ColMessage, ColConsole, ColNotification, ColTTS, ColStaticSound, ColStaticSoundPath }; - LogConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void accept() const; - virtual void save() const; - virtual void load(const Settings &); - virtual bool expert(bool); - - void on_qtwMessages_itemChanged(QTreeWidgetItem*, int); - void on_qtwMessages_itemClicked(QTreeWidgetItem*, int); - void on_qtwMessages_itemDoubleClicked(QTreeWidgetItem*, int); - void browseForSpxFile(); -}; - -class Log : public QObject { - friend class LogConfig; - private: - Q_OBJECT - Q_DISABLE_COPY(Log) - public: - enum MsgType { DebugInfo, CriticalError, Warning, Information, ServerConnected, ServerDisconnected, PlayerJoin, PlayerLeave, YouKicked, PlayerKicked, SelfMute, OtherSelfMute, YouMuted, YouMutedOther, OtherMutedOther, ChannelJoin, ChannelLeave, PermissionDenied, TextMessage }; - static const MsgType firstMsgType = DebugInfo; - static const MsgType lastMsgType = TextMessage; - protected: - QHash qmIgnore; - static const char *msgNames[]; - TextToSpeech *tts; - unsigned int uiLastId; - public: - Log(QObject *p = NULL); - QString msgName(MsgType t) const; - void setIgnore(MsgType t, int ignore = 1 << 30); - void clearIgnore(); - public slots: - void log(MsgType t, const QString &console, const QString &terse=QString()); -}; - -class LogDocument : public QTextDocument { - Q_OBJECT - public: - QVariant qvVariant; - int iType; - QUrl quUrl; - LogDocument(QObject *p); - QVariant loadResource(int, const QUrl &); - public slots: - void finished(); -}; - -#else -class Log; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Log.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/Log.ui --- mumble-1.2.3/src/mumble11x/Log.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Log.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,163 +0,0 @@ - - LogConfig - - - - 0 - 0 - 347 - 191 - - - - Messages - - - - - - true - - - QAbstractItemView::SingleSelection - - - false - - - true - - - false - - - - Message - - - - - Console - - - - - Notification - - - - - Text-To-Speech - - - - - Soundfile - - - - - Path - - - - - - - - Text To Speech - - - - - - Volume - - - qsVolume - - - - - - - Volume of Text-To-Speech Engine - - - <b>This is the volume used for the speech synthesis.</b> - - - 100 - - - 5 - - - 20 - - - Qt::Horizontal - - - QSlider::TicksBelow - - - 5 - - - - - - - Length threshold - - - qsbThreshold - - - - - - - Message length threshold for Text-To-Speech Engine - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - - - QAbstractSpinBox::PlusMinus - - - Characters - - - 5000 - - - 10 - - - - - - - Qt::Horizontal - - - - 8 - 16 - - - - - - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/LookConfig.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/LookConfig.cpp --- mumble-1.2.3/src/mumble11x/LookConfig.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/LookConfig.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,160 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "AudioInput.h" -#include "AudioOutput.h" -#include "LookConfig.h" -#include "Global.h" -#include "MainWindow.h" - -static ConfigWidget *LookConfigNew(Settings &st) { - return new LookConfig(st); -} - -static ConfigRegistrar registrar(1100, LookConfigNew); - -LookConfig::LookConfig(Settings &st) : ConfigWidget(st) { - setupUi(this); - - qcbLanguage->addItem(tr("System default")); - QDir d(QLatin1String(":"),QLatin1String("mumble_*.qm"),QDir::Name,QDir::Files); - QStringList langs; - foreach(QString key, d.entryList()) { - QString cc = key.mid(7,2); - langs << cc; - qcbLanguage->addItem(cc); - } - - QStringList styles = QStyleFactory::keys(); - styles.sort(); - qcbStyle->addItem(tr("System default")); - foreach(QString key, styles) { - qcbStyle->addItem(key); - } - qcbExpand->addItem(tr("None"), Settings::NoChannels); - qcbExpand->addItem(tr("Only with players"), Settings::ChannelsWithPlayers); - qcbExpand->addItem(tr("All"), Settings::AllChannels); - - qcbChannelDrag->insertItem(Settings::Ask, tr("Ask"), Settings::Ask); - qcbChannelDrag->insertItem(Settings::DoNothing, tr("Do Nothing"), Settings::DoNothing); - qcbChannelDrag->insertItem(Settings::Move, tr("Move"), Settings::Move); -} - -QString LookConfig::title() const { - return tr("User Interface"); -} - -QIcon LookConfig::icon() const { - return QIcon(QLatin1String("skin:config_ui.png")); -} - -void LookConfig::load(const Settings &r) { - loadComboBox(qcbLanguage, 0); - loadComboBox(qcbStyle, 0); - loadComboBox(qcbChannelDrag, 0); - - for (int i=0;icount();i++) { - if (qcbLanguage->itemText(i) == r.qsLanguage) { - loadComboBox(qcbLanguage, i); - break; - } - } - for (int i=0;icount();i++) { - if (qcbStyle->itemText(i) == r.qsStyle) { - loadComboBox(qcbStyle, i); - break; - } - } - - qleCSS->setText(r.qsSkin); - loadComboBox(qcbExpand, r.ceExpand); - loadComboBox(qcbChannelDrag, r.ceChannelDrag); - loadCheckBox(qcbPlayersTop, r.bPlayerTop); - loadCheckBox(qcbAlwaysOnTop, r.bAlwaysOnTop); - loadCheckBox(qcbAskOnQuit, r.bAskOnQuit); - loadCheckBox(qcbHideTray, r.bHideTray); -} - -void LookConfig::save() const { - if (qcbLanguage->currentIndex() == 0) - s.qsLanguage = QString(); - else - s.qsLanguage = qcbLanguage->currentText(); - - if (qcbStyle->currentIndex() == 0) - s.qsStyle = QString(); - else - s.qsStyle = qcbStyle->currentText(); - - if (qleCSS->text().isEmpty()) - s.qsSkin = QString(); - else - s.qsSkin = qleCSS->text(); - s.ceExpand=static_cast(qcbExpand->currentIndex()); - s.ceChannelDrag=static_cast(qcbChannelDrag->currentIndex()); - s.bPlayerTop=qcbPlayersTop->isChecked(); - s.bAlwaysOnTop = qcbAlwaysOnTop->isChecked(); - s.bAskOnQuit = qcbAskOnQuit->isChecked(); - s.bHideTray = qcbHideTray->isChecked(); -} - -void LookConfig::accept() const { - if (! s.qsStyle.isEmpty()) { - qApp->setStyle(s.qsStyle); - } - if (s.qsSkin.isEmpty()) { - qApp->setStyleSheet(QString()); - g.mw->qteLog->document()->setDefaultStyleSheet(QString()); - } else { - QFile file(s.qsSkin); - file.open(QFile::ReadOnly); - QString sheet = QLatin1String(file.readAll()); - if (! sheet.isEmpty()) { - qApp->setStyleSheet(sheet); - g.mw->qteLog->document()->setDefaultStyleSheet(sheet); - } - } -} - -bool LookConfig::expert(bool b) { - qcbExpand->setVisible(b); - qliExpand->setVisible(b); - qcbPlayersTop->setVisible(b); - qcbStyle->setVisible(b); - qliStyle->setVisible(b); - return true; -} - -void LookConfig::on_qpbSkinFile_clicked(bool) { - QString file = QFileDialog::getOpenFileName(this, tr("Choose skin file"), QString(), QLatin1String("*.qss")); - if (! file.isEmpty()) { - qleCSS->setText(file); - } -} diff -Nru mumble-1.2.3/src/mumble11x/LookConfig.h mumble-1.2.3-87-gf7d8711/src/mumble11x/LookConfig.h --- mumble-1.2.3/src/mumble11x/LookConfig.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/LookConfig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _LOOKCONFIG_H -#define _LOOKCONFIG_H - -#include "ConfigDialog.h" - -#include "ui_LookConfig.h" - -class LookConfig : public ConfigWidget, Ui::LookConfig { - private: - Q_OBJECT - Q_DISABLE_COPY(LookConfig) - public: - LookConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void accept() const; - void save() const; - void load(const Settings &r); - bool expert(bool); - void on_qpbSkinFile_clicked(bool); -}; - -#else -class LookConfig; -#endif diff -Nru mumble-1.2.3/src/mumble11x/LookConfig.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/LookConfig.ui --- mumble-1.2.3/src/mumble11x/LookConfig.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/LookConfig.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,198 +0,0 @@ - - LookConfig - - - - 0 - 0 - 311 - 353 - - - - Form - - - - - - Language - - - - - - Language - - - qcbLanguage - - - - - - - Language to use (requires restart) - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - - - - - - - - - - Look and Feel - - - - - - Channel Dragging - - - - - - - This changes the behaviour when moving channels. - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - - - - - - - Style - - - - - - - Basic widget style - - - <b>This sets the basic look and feel to use.</b> - - - - - - - Skin - - - - - - - Skin file to use - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - - - - - - - ... - - - - - - - Expand - - - - - - - When to automatically expand channels - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - - - - - - - List players above subchannels (requires restart). - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - - - Players above Channels - - - - - - - Ask whether to close or minimize when quitting Mumble. - - - <b>If set, will verify you want to quit if connected.<b> - - - Ask on quit while connected - - - - - - - Hide the main Mumble window in the tray when it is minimized. - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - - - Hide in tray when minimized - - - - - - - Make the Mumble window appear on top of other windows. - - - <b>This makes the Mumble window a topmost window.</b> - - - Always On Top - - - - - - - - - - Qt::Vertical - - - - 0 - 0 - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/main.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/main.cpp --- mumble-1.2.3/src/mumble11x/main.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/main.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,314 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "MainWindow.h" -#include "ServerHandler.h" -#include "AudioInput.h" -#include "AudioOutput.h" -#include "AudioWizard.h" -#include "Database.h" -#include "Log.h" -#include "Plugins.h" -#include "Global.h" -#include "LCD.h" -#ifdef USE_DBUS -#include "DBus.h" -#endif -#include "VersionCheck.h" -#include "NetworkConfig.h" -#include "CrashReporter.h" -#include "SocketRPC.h" - -#ifdef BOOST_NO_EXCEPTIONS -namespace boost { - void throw_exception(std::exception const &) { - qFatal("Boost exception caught!"); - } -} -#endif - -extern void os_init(); -extern char *os_url; -extern char *os_lang; - -int main(int argc, char **argv) { - int res; - - QT_REQUIRE_VERSION(argc, argv, "4.4.1"); - - // Initialize application object. - QApplication a(argc, argv); - a.setApplicationName(QLatin1String("Mumble11x")); - a.setOrganizationName(QLatin1String("Mumble")); - a.setOrganizationDomain(QLatin1String("mumble.sourceforge.net")); - a.setQuitOnLastWindowClosed(false); - -#if defined(Q_OS_WIN) || defined(Q_OS_MAC) - os_init(); -#endif - - Global::g_global_struct = new Global(); - - QUrl url; - if (a.arguments().count() > 1) { - QUrl u = QUrl::fromEncoded(a.arguments().last().toUtf8()); - if (u.isValid() && (u.scheme() == QLatin1String("mumble"))) - url = u; - } - -#ifdef USE_DBUS -#ifdef Q_OS_WIN - // By default, windbus expects the path to dbus-daemon to be in PATH, and the path - // should contain bin\\, and the path to the config is hardcoded as ..\etc - - { - size_t reqSize; - _wgetenv_s(&reqSize, NULL, 0, L"PATH"); - if (reqSize > 0) { - STACKVAR(wchar_t, buff, reqSize+1); - _wgetenv_s(&reqSize, buff, reqSize, L"PATH"); - QString path = QString::fromLatin1("%1;%2").arg(QDir::toNativeSeparators(a.applicationDirPath())).arg(QString::fromWCharArray(buff)); - STACKVAR(wchar_t, buffout, path.length() + 1); - path.toWCharArray(buffout); - _wputenv_s(L"PATH", buffout); - } - } -#endif - - QDBusInterface qdbi(QLatin1String("net.sourceforge.mumble.mumble11x"), QLatin1String("/"), QLatin1String("net.sourceforge.mumble.Mumble")); - QDBusMessage reply=qdbi.call(QLatin1String("focus")); - if (reply.type() == QDBusMessage::ReplyMessage) { - if (url.isValid()) - qdbi.call(QLatin1String("openUrl"), QLatin1String(url.toEncoded())); - return 0; - } -#else - if (SocketRPC::send(QLatin1String("Mumble11x"), QLatin1String("focus"))) { - if (url.isValid()) { - QMap param; - param.insert(QLatin1String("href"), url); - SocketRPC::send(QLatin1String("Mumble11x"), QLatin1String("url"), param); - } - - return 0; - } -#endif - - QFile oldini(QString::fromLatin1("%1/mumble.ini").arg(a.applicationDirPath())); - QFile inifile(QString::fromLatin1("%1/mumble11x.ini").arg(a.applicationDirPath())); - if (!inifile.exists() && oldini.exists() && oldini.permissions().testFlag(QFile::WriteUser)) - QFile::copy(QString::fromLatin1("%1/mumble.ini").arg(a.applicationDirPath()), QString::fromLatin1("%1/mumble11x.ini").arg(a.applicationDirPath())); - - if (inifile.exists() && inifile.permissions().testFlag(QFile::WriteUser)) - g.qs = new QSettings(inifile.fileName(), QSettings::IniFormat); - else { - g.qs = new QSettings(); - if (! g.qs->value(QLatin1String("ui/firsttime")).isValid()) { - a.setApplicationName(QLatin1String("Mumble")); - QSettings *s = new QSettings(); - if (s->value(QLatin1String("ui/firsttime")).isValid()) { - qSwap(s, g.qs); - g.s.load(); - qSwap(s, g.qs); - g.s.save(); - } - delete s; - a.setApplicationName(QLatin1String("Mumble11x")); - } - } - - // Load preferences - g.s.load(); - - DeferInit::run_initializers(); - - if (! g.s.qsStyle.isEmpty()) { - a.setStyle(g.s.qsStyle); - } - - if (! g.s.qsSkin.isEmpty()) { - QFile file(g.s.qsSkin); - file.open(QFile::ReadOnly); - QString styleSheet=QLatin1String(file.readAll()); - if (! styleSheet.isEmpty()) { - QFileInfo fi(g.s.qsSkin); - QDir::addSearchPath(QLatin1String("skin"), fi.path()); - a.setStyleSheet(styleSheet); - } - } - - QDir::addSearchPath(QLatin1String("skin"),QLatin1String(":/")); - QDir::addSearchPath(QLatin1String("translation"), QLatin1String(":/")); - - QString qsSystemLocale = QLocale::system().name(); - -#ifdef Q_OS_MAC - if (os_lang) { - qWarning("Using Mac OS X system langauge as locale name"); - qsSystemLocale = QString(os_lang); - } -#endif - - qWarning("Locale is %s", qPrintable(qsSystemLocale)); - - QString locale = g.s.qsLanguage.isEmpty() ? qsSystemLocale : g.s.qsLanguage; - - QTranslator translator; - if (translator.load(QLatin1String("translation:mumble_") + locale)) - a.installTranslator(&translator); - - QTranslator loctranslator; - if (loctranslator.load(QLatin1String("mumble_") + locale, a.applicationDirPath())) - a.installTranslator(&loctranslator); - - QTranslator qttranslator; - if (qttranslator.load(QLibraryInfo::location(QLibraryInfo::TranslationsPath) + QLatin1String("/qt_") + locale)) - a.installTranslator(&qttranslator); - else if (qttranslator.load(QLatin1String("translation:qt_") + locale)) - a.installTranslator(&qttranslator); - - // Initialize proxy settings - NetworkConfig::SetupProxy(); - - g.nam = new QNetworkAccessManager(); - -#ifndef NO_CRASH_REPORT - CrashReporter *cr = new CrashReporter(); - cr->run(); - delete cr; -#endif - - SocketRPC *srpc = new SocketRPC(QLatin1String("Mumble11x")); - - // Initialize logger - g.l = new Log(); - - // Initialize database - g.db = new Database(); - - // Initialize the serverhandler - g.sh = new ServerHandler(); - g.sh->moveToThread(g.sh); - - g.lcd = new LCD(); - - // Process any waiting events before initializing our MainWindow. - // The mumble:// URL support for Mac OS X happens through AppleEvents, - // so we need to loop a little before we begin. If we were launched - // through a URL, this should call a platform specific callback - // (in os_macx.cpp) and point the `os_url' global to a valid URL. - a.processEvents(); - - // Main Window - g.mw=new MainWindow(NULL); - g.mw->show(); - -#ifdef USE_DBUS - new MumbleDBus(g.mw); - QDBusConnection::sessionBus().registerObject(QLatin1String("/"), g.mw); - QDBusConnection::sessionBus().registerService(QLatin1String("net.sourceforge.mumble.mumble11x")); -#endif - - g.l->log(Log::Information, MainWindow::tr("Welcome to Mumble.")); - - // Plugins - g.p = new Plugins(NULL); - g.p->rescanPlugins(); - - // And the start the last chosen audio system. - g.ai = AudioInputRegistrar::newFromChoice(); - if (g.ai) - g.ai->start(QThread::HighestPriority); - g.ao = AudioOutputRegistrar::newFromChoice(); - if (g.ao) - g.ao->start(QThread::HighPriority); - - a.setQuitOnLastWindowClosed(false); - - if (g.s.bFirstTime) { - if (QMessageBox::question(g.mw, QLatin1String("Mumble"), MainWindow::tr("This is the first time you're starting Mumble.
Would you like to go through the Audio Wizard to configure your soundcard?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { - AudioWizard *aw = new AudioWizard(g.mw); - aw->exec(); - delete aw; - } - g.s.bFirstTime = false; - } - - if (g.s.bUpdateCheck) - new VersionCheck(true, g.mw); - -#ifdef SNAPSHOT_BUILD - new VersionCheck(false, g.mw, true); -#endif - - if (url.isValid()) { - g.mw->openUrl(url); -#ifdef Q_OS_MAC - } else if (os_url) { - g.mw->openUrl(QUrl::fromEncoded(QByteArray(os_url))); -#endif - } else { - g.mw->on_qaServerConnect_triggered(); - } - - res=a.exec(); - - g.s.save(); - - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; - - g.ao.reset(); - g.ai.reset(); - - while (! ai.unique() || ! ao.unique()) {} - - ai.reset(); - ao.reset(); - - g.sh->disconnect(); - - delete srpc; - - delete g.sh; - delete g.mw; - - delete g.nam; - delete g.lcd; - - delete g.db; - delete g.l; - - delete g.qs; - - DeferInit::run_destroyers(); - - return res; -} diff -Nru mumble-1.2.3/src/mumble11x/MainWindow.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/MainWindow.cpp --- mumble-1.2.3/src/mumble11x/MainWindow.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/MainWindow.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1510 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "MainWindow.h" -#include "AudioWizard.h" -#include "AudioInput.h" -#include "ConnectDialog.h" -#include "Player.h" -#include "Channel.h" -#include "ACLEditor.h" -#include "BanEditor.h" -#include "Connection.h" -#include "ServerHandler.h" -#include "About.h" -#include "GlobalShortcut.h" -#include "VersionCheck.h" -#include "PlayerModel.h" -#include "AudioStats.h" -#include "Plugins.h" -#include "Log.h" -#include "Global.h" -#include "Database.h" -#include "ViewCert.h" -#include "TextMessage.h" -#include "NetworkConfig.h" - -MessageBoxEvent::MessageBoxEvent(QString m) : QEvent(static_cast(MB_QEVENT)) { - msg = m; -} - -LogTitleBar::LogTitleBar() { - qtTick = new QTimer(this); - qtTick->setSingleShot(true); - connect(qtTick, SIGNAL(timeout()), this, SLOT(tick())); - size = newsize = 0; -} - -QSize LogTitleBar::sizeHint() const { - return minimumSizeHint(); -} - -QSize LogTitleBar::minimumSizeHint() const { - return QSize(size,size); -} - -bool LogTitleBar::eventFilter(QObject *, QEvent *evt) { - QDockWidget *qdw = qobject_cast(parentWidget()); - - switch (evt->type()) { - case QEvent::Leave: - case QEvent::Enter: - case QEvent::MouseMove: - case QEvent::MouseButtonRelease: { - newsize = 0; - QPoint p = qdw->mapFromGlobal(QCursor::pos()); - if ((p.x() >= 0) && (p.x() < qdw->width()) && (p.y() >= 0) && (p.y() < 15)) - newsize = 15; - if (newsize > 0 && !qtTick->isActive()) - qtTick->start(500); - else if ((newsize == size) && qtTick->isActive()) - qtTick->stop(); - else if (newsize == 0) - tick(); - } - default: - break; - } - - return false; -} - -void LogTitleBar::tick() { - QDockWidget *qdw = qobject_cast(parentWidget()); - - if (newsize == size) - return; - - size = newsize; - qdw->setTitleBarWidget(this); -} - -MainWindow::MainWindow(QWidget *p) : QMainWindow(p) { - qiIconMute.addFile(QLatin1String("skin:muted_self.png")); - qiIconMute.addFile(QLatin1String("skin:muted_overlay.png")); - qiIconDeaf.addFile(QLatin1String("skin:deafened_self.png")); - qiIconDeaf.addFile(QLatin1String("skin:deafened_overlay.png")); - qiIcon.addFile(QLatin1String("skin:mumble.16x16.png")); - qiIcon.addFile(QLatin1String("skin:mumble.32x32.png")); - qiIcon.addFile(QLatin1String("skin:mumble.64x64.png")); -#ifdef Q_OS_MAC - qiIcon.addFile(QLatin1String("skin:mumble.osx.png")); -#else - // Set application icon except on MacOSX, where the window-icon - // shown in the title-bar usually serves as a draggable version of the - // current open document (i.e. you can copy the open document anywhere - // simply by dragging this icon). - qApp->setWindowIcon(qiIcon); -#endif - - Channel::add(0, tr("Root")); - - aclEdit = NULL; - banEdit = NULL; - bNoHide = false; - - qtReconnect = new QTimer(this); - qtReconnect->setInterval(10000); - qtReconnect->setSingleShot(true); - qtReconnect->setObjectName(QLatin1String("Reconnect")); - - createActions(); - setupUi(this); - setupGui(); - - connect(g.sh, SIGNAL(connected()), this, SLOT(serverConnected())); - connect(g.sh, SIGNAL(disconnected(QString)), this, SLOT(serverDisconnected(QString))); - - // Fix context of all actions. - QList qla = findChildren(); - foreach(QAction *a, qla) - a->setShortcutContext(Qt::ApplicationShortcut); - - on_qmServer_aboutToShow(); - on_qmChannel_aboutToShow(); - on_qmPlayer_aboutToShow(); - on_qmConfig_aboutToShow(); - - setOnTop(g.s.bAlwaysOnTop); -#ifdef NO_UPDATE_CHECK - delete qaHelpVersionCheck; -#endif -} - -void MainWindow::createActions() { - int idx = 1; - gsPushTalk=new GlobalShortcut(this, idx++, tr("Push-to-Talk", "Global Shortcut"), false); - gsPushTalk->setObjectName(QLatin1String("PushToTalk")); - gsPushTalk->qsToolTip = tr("Push and hold this button to send voice.", "Global Shortcut"); - gsPushTalk->qsWhatsThis = tr("This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice.", "Global Shortcut"); - - - gsResetAudio=new GlobalShortcut(this, idx++, tr("Reset Audio Processor", "Global Shortcut")); - gsResetAudio->setObjectName(QLatin1String("ResetAudio")); - - gsMuteSelf=new GlobalShortcut(this, idx++, tr("Toggle Mute Self", "Global Shortcut"), false); - gsMuteSelf->setObjectName(QLatin1String("MuteSelf")); - gsMuteSelf->qsToolTip = tr("Toggle self-mute status.", "Global Shortcut"); - gsMuteSelf->qsWhatsThis = tr("This will toggle your muted status. If you toggle this off, you will also disable self-deafen.", "Global Shortcut"); - - gsDeafSelf=new GlobalShortcut(this, idx++, tr("Toggle Deafen Self", "Global Shortcut"), false); - gsDeafSelf->setObjectName(QLatin1String("DeafSelf")); - gsDeafSelf->qsToolTip = tr("Toggle self-deafen status.", "Global Shortcut"); - gsDeafSelf->qsWhatsThis = tr("This will toggle your deafen status. If you toggle this on, you will also enable self-mute.", "Global Shortcut"); - - gsUnlink=new GlobalShortcut(this, idx++, tr("Unlink Plugin", "Global Shortcut")); - gsUnlink->setObjectName(QLatin1String("UnlinkPlugin")); - - gsCenterPos=new GlobalShortcut(this, idx++, tr("Force Center Position", "Global Shortcut")); - gsCenterPos->setObjectName(QLatin1String("CenterPos")); - - GlobalShortcut *gs; - - gs = new GlobalShortcut(this, idx++, tr("Chan Parent", "Global Shortcut")); - gs->data = 0; - connect(gs, SIGNAL(triggered(bool)), this, SLOT(pushLink(bool))); - - for (int i = 1; i< 10;i++) { - gs = new GlobalShortcut(this, idx++, tr("Chan Sub#%1", "Global Shortcut").arg(i)); - gs->data = i; - connect(gs, SIGNAL(triggered(bool)), this, SLOT(pushLink(bool))); - } - - gs = new GlobalShortcut(this, idx++, tr("Chan All Subs", "Global Shortcut")); - gs->data = 10; - connect(gs, SIGNAL(triggered(bool)), this, SLOT(pushLink(bool))); - - gsPushMute=new GlobalShortcut(this, idx++, tr("Push-to-Mute", "Global Shortcut")); - gsPushMute->setObjectName(QLatin1String("PushToMute")); - - gsMetaChannel=new GlobalShortcut(this, idx++, tr("Join Channel", "Global Shortcut")); - gsMetaChannel->setObjectName(QLatin1String("MetaChannel")); - - gsToggleOverlay=new GlobalShortcut(this, idx++, tr("Toggle Overlay", "Global Shortcut"), false); - gsToggleOverlay->setObjectName(QLatin1String("ToggleOverlay")); - gsToggleOverlay->qsToolTip = tr("Toggle state of in-game overlay.", "Global Shortcut"); - gsToggleOverlay->qsWhatsThis = tr("This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody.", "Global Shortcut"); - - gsAltTalk=new GlobalShortcut(this, idx++, tr("Alt Push-to-Talk", "Global Shortcut")); - gsAltTalk->setObjectName(QLatin1String("AltPushToTalk")); - - gsMinimal=new GlobalShortcut(this, idx++, tr("Toggle Minimal", "Global Shortcut")); - gsMinimal->setObjectName(QLatin1String("ToggleMinimal")); - - gsVolumeUp=new GlobalShortcut(this, idx++, tr("Volume Up (+10%)", "Global Shortcut")); - gsVolumeUp->setObjectName(QLatin1String("VolumeUp")); - - gsVolumeDown=new GlobalShortcut(this, idx++, tr("Volume Down (-10%)", "Global Shortcut")); - gsVolumeDown->setObjectName(QLatin1String("VolumeDown")); - - qstiIcon = new QSystemTrayIcon(qiIcon, this); - qstiIcon->setToolTip(QLatin1String("Mumble")); - qstiIcon->setObjectName(QLatin1String("Icon")); - -#ifndef Q_OS_MAC - qstiIcon->show(); -#endif -} - -void MainWindow::setupGui() { - setWindowTitle(tr("Mumble -- %1").arg(QLatin1String(MUMBLE_RELEASE))); - setCentralWidget(qtvPlayers); - -#ifdef Q_OS_MAC - QMenu *qmWindow = new QMenu(tr("&Window"), this); - menubar->insertMenu(qmHelp->menuAction(), qmWindow); - qmWindow->addAction(tr("Minimize"), this, SLOT(showMinimized()), QKeySequence(tr("Ctrl+M"))); -#endif - - LogDocument *ld = new LogDocument(qteLog); - qteLog->setDocument(ld); - - qteLog->document()->setDefaultStyleSheet(qApp->styleSheet()); - - pmModel = new PlayerModel(qtvPlayers); - - qtvPlayers->setModel(pmModel); - qtvPlayers->setItemDelegate(new PlayerDelegate(qtvPlayers)); - - qtvPlayers->setRowHidden(0, QModelIndex(), true); - - qaServerConnect->setShortcuts(QKeySequence::Open); - qaServerDisconnect->setShortcuts(QKeySequence::Close); - qaAudioMute->setChecked(g.s.bMute); - qaAudioDeaf->setChecked(g.s.bDeaf); - qaAudioTTS->setChecked(g.s.bTTS); - qaHelpWhatsThis->setShortcuts(QKeySequence::WhatsThis); - - qaConfigMinimal->setChecked(g.s.bMinimalView); - qaConfigHideFrame->setChecked(g.s.bHideFrame); - - connect(gsResetAudio, SIGNAL(down()), qaAudioReset, SLOT(trigger())); - connect(gsMuteSelf, SIGNAL(down()), qaAudioMute, SLOT(trigger())); - connect(gsDeafSelf, SIGNAL(down()), qaAudioDeaf, SLOT(trigger())); - connect(gsUnlink, SIGNAL(down()), qaAudioUnlink, SLOT(trigger())); - connect(gsMinimal, SIGNAL(down()), qaConfigMinimal, SLOT(trigger())); - - ltbDockTitle = new LogTitleBar(); - qdwLog->setTitleBarWidget(ltbDockTitle); - - foreach(QWidget *w, qdwLog->findChildren()) { - w->installEventFilter(ltbDockTitle); - w->setMouseTracking(true); - } - - if (g.s.bMinimalView && ! g.s.qbaMinimalViewGeometry.isNull()) - restoreGeometry(g.s.qbaMinimalViewGeometry); - else if (! g.s.bMinimalView && ! g.s.qbaMainWindowGeometry.isNull()) - restoreGeometry(g.s.qbaMainWindowGeometry); - - restoreState(g.s.qbaMainWindowState); - qtvPlayers->header()->restoreState(g.s.qbaHeaderState); - - setupView(false); - - qmTray = new QMenu(this); - qmTray->addAction(qaQuit); - qmTray->addAction(qaHelpAbout); - qmTray->addSeparator(); - qmTray->addAction(qaAudioMute); - qmTray->addAction(qaAudioDeaf); - qstiIcon->setContextMenu(qmTray); - updateTrayIcon(); -} - -MainWindow::~MainWindow() { - delete qdwLog->titleBarWidget(); - delete pmModel; - delete qtvPlayers; - delete Channel::get(0); -} - -void MainWindow::msgBox(QString msg) { - MessageBoxEvent *mbe=new MessageBoxEvent(msg); - QApplication::postEvent(this, mbe); -} - -void MainWindow::closeEvent(QCloseEvent *e) { -#ifndef Q_OS_MAC - if (g.sh && g.sh->isRunning() && g.s.bAskOnQuit) { - QMessageBox mb(QMessageBox::Warning, QLatin1String("Mumble"), tr("Mumble is currently connected to a server. Do you want to Close or Minimize it?"), QMessageBox::NoButton, this); - QPushButton *qpbClose = mb.addButton(tr("Close"), QMessageBox::YesRole); - QPushButton *qpbMinimize = mb.addButton(tr("Minimize"), QMessageBox::NoRole); - mb.setDefaultButton(qpbMinimize); - mb.setEscapeButton(qpbMinimize); - mb.exec(); - if (mb.clickedButton() != qpbClose) { - e->accept(); - return; - } - } -#endif - g.uiSession = 0; - - g.s.qbaMainWindowState = saveState(); - if (g.s.bMinimalView) { - g.s.qbaMinimalViewGeometry = saveGeometry(); - } else { - g.s.qbaMainWindowGeometry = saveGeometry(); - g.s.qbaHeaderState = qtvPlayers->header()->saveState(); - } - QMainWindow::closeEvent(e); - qApp->quit(); -} - -void MainWindow::hideEvent(QHideEvent *e) { -#ifndef Q_OS_MAC - if (g.s.bHideTray && !bNoHide && qstiIcon->isSystemTrayAvailable()) - qApp->postEvent(this, new QEvent(static_cast(TI_QEVENT))); - QMainWindow::hideEvent(e); -#endif -} - -void MainWindow::on_qtvPlayers_customContextMenuRequested(const QPoint &mpos) { - QModelIndex idx = qtvPlayers->indexAt(mpos); - if (! idx.isValid()) - idx = qtvPlayers->currentIndex(); - else - qtvPlayers->setCurrentIndex(idx); - Player *p = pmModel->getPlayer(idx); - - if (p) { - qmPlayer->popup(qtvPlayers->mapToGlobal(mpos), qaPlayerMute); - } else { - qmChannel->popup(qtvPlayers->mapToGlobal(mpos), qaChannelACL); - } -} - -void MainWindow::updateTrayIcon() { - ClientPlayer *p=ClientPlayer::get(g.uiSession); - - if (g.s.bDeaf || (p && p->bDeaf)) { - qstiIcon->setIcon(qiIconDeaf); - } else if (g.s.bMute || (p && p->bMute)) { - qstiIcon->setIcon(qiIconMute); - } else { - qstiIcon->setIcon(qiIcon); - } -} - -void MainWindow::on_qtvPlayers_doubleClicked(const QModelIndex &idx) { - Player *p = pmModel->getPlayer(idx); - if (p) { - on_qaPlayerTextMessage_triggered(); - return; - } - - Channel *c = pmModel->getChannel(idx); - if (!c) - return; - MessagePlayerMove mpm; - mpm.uiVictim = g.uiSession; - mpm.iChannelId = c->iId; - g.sh->sendMessage(&mpm); -} - -void MainWindow::on_qteLog_customContextMenuRequested(const QPoint &mpos) { -#if QT_VERSION >= 0x040400 - QMenu *menu = qteLog->createStandardContextMenu(mpos); -#else - QMenu *menu = qteLog->createStandardContextMenu(); -#endif - menu->addSeparator(); - menu->addAction(tr("Clear"), qteLog, SLOT(clear(void))); - menu->exec(qteLog->mapToGlobal(mpos)); - delete menu; -} - -void MainWindow::openUrl(const QUrl &url) { - g.l->log(Log::Information, tr("Opening URL %1").arg(url.toString())); - if (url.scheme() != QLatin1String("mumble")) { - g.l->log(Log::Warning, tr("URL scheme is not 'mumble'")); - return; - } - QString host = url.host(); - unsigned short port = static_cast(url.port(64738)); - QString user = url.userName(); - QString pw = url.password(); - qsDesiredChannel = url.path(); - - if (g.sh && g.sh->isRunning()) { - QString oHost, oUser, oPw; - unsigned short oport; - g.sh->getConnectionInfo(oHost, oport, oUser, oPw); - - if ((user.isEmpty() || (user == oUser)) && - (host.isEmpty() || ((host == oHost) && (port == oport)))) { - findDesiredChannel(); - return; - } - } - - Database::fuzzyMatch(user, pw, host, port); - - if (user.isEmpty()) { - bool ok; - user = QInputDialog::getText(this, tr("Connecting to %1").arg(url.toString()), tr("Enter username"), QLineEdit::Normal, g.s.qsUsername, &ok); - if (! ok || user.isEmpty()) - return; - g.s.qsUsername = user; - } - - if (g.sh && g.sh->isRunning()) { - on_qaServerDisconnect_triggered(); - g.sh->wait(); - } - - rtLast = MessageServerReject::None; - qaServerDisconnect->setEnabled(true); - g.sh->setConnectionInfo(host, port, user, pw); - g.sh->start(QThread::TimeCriticalPriority); -} - -void MainWindow::findDesiredChannel() { - bool found = false; - QStringList qlChans = qsDesiredChannel.split(QLatin1String("/")); - Channel *chan = Channel::get(0); - QString str = QString(); - while (chan && qlChans.count() > 0) { - QString elem = qlChans.takeFirst().toLower(); - if (elem.isEmpty()) - continue; - if (str.isNull()) - str = elem; - else - str = str + QLatin1String("/") + elem; - foreach(Channel *c, chan->qlChannels) { - if (c->qsName.toLower() == str) { - str = QString(); - found = true; - chan = c; - break; - } - } - } - if (found && (chan != ClientPlayer::get(g.uiSession)->cChannel)) { - MessagePlayerMove mpm; - mpm.uiVictim = g.uiSession; - mpm.iChannelId = chan->iId; - g.sh->sendMessage(&mpm); - } -} - -void MainWindow::setOnTop(bool top) { - Qt::WindowFlags wf = windowFlags(); - if (wf.testFlag(Qt::WindowStaysOnTopHint) != top) { - if (top) - wf |= Qt::WindowStaysOnTopHint; - else - wf &= ~Qt::WindowStaysOnTopHint; - bNoHide = true; - setWindowFlags(wf); - show(); - bNoHide = false; - } -} - -void MainWindow::setupView(bool toggle_minimize) { - bool showit = ! g.s.bMinimalView; - - bNoHide = true; - QRect geom = frameGeometry(); - - if (toggle_minimize) { - if (! showit) { - g.s.qbaMainWindowGeometry = saveGeometry(); - g.s.qbaHeaderState = qtvPlayers->header()->saveState(); - } else { - g.s.qbaMinimalViewGeometry = saveGeometry(); - } - } - - Qt::WindowFlags f = Qt::Window; - if (!showit && g.s.bHideFrame) - f = Qt::Window | Qt::FramelessWindowHint; -#ifndef Q_OS_MAC - else if (!showit) - f = Qt::Tool; -#endif - - if (g.s.bAlwaysOnTop) - f |= Qt::WindowStaysOnTopHint; - - setWindowFlags(f); - - qdwLog->setVisible(showit); - qtvPlayers->header()->setVisible(showit); - menuBar()->setVisible(showit); - - if (toggle_minimize) { - if (! showit && ! g.s.qbaMinimalViewGeometry.isNull()) - restoreGeometry(g.s.qbaMinimalViewGeometry); - else if (showit && ! g.s.qbaMainWindowGeometry.isNull()) - restoreGeometry(g.s.qbaMainWindowGeometry); - } else { - QRect newgeom = frameGeometry(); - resize(geometry().width()-newgeom.width()+geom.width(), - geometry().height()-newgeom.height()+geom.height()); - move(geom.x(), geom.y()); - } - - show(); - activateWindow(); - bNoHide = false; - -} - -void MainWindow::on_qaServerConnect_triggered() { - ConnectDialog *cd = new ConnectDialog(this); - int res = cd->exec(); - - if (cd->qsServer.isEmpty() || (cd->usPort==0) || cd->qsUsername.isEmpty()) - res = QDialog::Rejected; - - if (g.sh && g.sh->isRunning() && res == QDialog::Accepted) { - on_qaServerDisconnect_triggered(); - g.sh->wait(); - } - - if (res == QDialog::Accepted) { - qsDesiredChannel = QString(); - rtLast = MessageServerReject::None; - qaServerDisconnect->setEnabled(true); - g.sh->setConnectionInfo(cd->qsServer, cd->usPort, cd->qsUsername, cd->qsPassword); - g.sh->start(QThread::TimeCriticalPriority); - } - delete cd; -} - -void MainWindow::on_Reconnect_timeout() { - if (g.sh->isRunning()) - return; - g.l->log(Log::ServerDisconnected, tr("Reconnecting.")); - g.sh->start(QThread::TimeCriticalPriority); -} - -void MainWindow::on_qmServer_aboutToShow() { - qmServer->clear(); - qmServer->addAction(qaServerConnect); - qmServer->addAction(qaServerDisconnect); - qmServer->addAction(qaServerBanList); - qmServer->addAction(qaServerInformation); - qmServer->addSeparator(); - qmServer->addAction(qaQuit); - - if (! qlServerActions.isEmpty()) { - qmServer->addSeparator(); - foreach(QAction *a, qlServerActions) - qmServer->addAction(a); - } -} - - -void MainWindow::on_qaServerDisconnect_triggered() { - if (qtReconnect->isActive()) - qtReconnect->stop(); - if (g.sh && g.sh->isRunning()) - g.sh->disconnect(); -} - -void MainWindow::on_qaServerBanList_triggered() { - MessageServerBanList msbl; - msbl.bQuery = true; - g.sh->sendMessage(&msbl); - - if (banEdit) { - banEdit->reject(); - delete banEdit; - banEdit = NULL; - } -} - -void MainWindow::on_qaServerInformation_triggered() { - ConnectionPtr c = g.sh->cConnection; - - if (! c) - return; - - CryptState &cs = c->csCrypt; - - QSslCipher qsc = g.sh->qscCipher; - - QString qsControl=tr("

Control channel

Encrypted with %1 bit %2
%3 ms average latency (%4 variance)

").arg(qsc.usedBits()).arg(qsc.name()).arg(c->dTCPPingAvg, 0, 'f', 2).arg(c->dTCPPingVar / (c->uiTCPPackets - 1),0,'f',2); - QString qsVoice, qsCrypt, qsAudio; - - if (NetworkConfig::TcpModeEnabled()) { - qsVoice = tr("Voice channel is sent over control channel."); - } else { - qsVoice = tr("

Voice channel

Encrypted with 128 bit OCB-AES128
%1 ms average latency (%4 variance)

").arg(c->dUDPPingAvg, 0, 'f', 2).arg(c->dUDPPingVar / (c->uiUDPPackets - 1),0,'f',2); - qsCrypt = QString::fromLatin1("

%1

" - "" - "" - "" - "" - "
%2%3
%4%8%12
%5%9%13
%6%10%14
%7%11%15
") - .arg(tr("UDP Statistics")).arg(tr("To Server")).arg(tr("From Server")).arg(tr("Good")).arg(tr("Late")).arg(tr("Lost")).arg(tr("Resync")) - .arg(cs.uiRemoteGood).arg(cs.uiRemoteLate).arg(cs.uiRemoteLost).arg(cs.uiRemoteResync) - .arg(cs.uiGood).arg(cs.uiLate).arg(cs.uiLost).arg(cs.uiResync); - } - qsAudio=tr("

Audio bandwidth

Maximum %1 kbit/s
Current %2 kbit/s (Quality %3)

").arg(g.iMaxBandwidth / 125.0,0,'f',1).arg(g.iAudioBandwidth / 125.0,0,'f',1).arg(g.iAudioQuality); - - QMessageBox qmb(QMessageBox::Information, tr("Mumble Server Information"), qsControl + qsVoice + qsCrypt + qsAudio, QMessageBox::Ok, this); - qmb.setDefaultButton(QMessageBox::Ok); - qmb.setEscapeButton(QMessageBox::Ok); - - QPushButton *qp = qmb.addButton(tr("&View Certificate"), QMessageBox::ActionRole); - int res = qmb.exec(); - if ((res == 0) && (qmb.clickedButton() == qp)) { - ViewCert vc(g.sh->qscCert, this); - vc.exec(); - } -} - -void MainWindow::on_qmPlayer_aboutToShow() { - Player *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - bool self = p && (p->uiSession == g.uiSession); - - qmPlayer->clear(); - - qmPlayer->addAction(qaPlayerKick); - qmPlayer->addAction(qaPlayerBan); - qmPlayer->addAction(qaPlayerMute); - qmPlayer->addAction(qaPlayerDeaf); - qmPlayer->addAction(qaPlayerLocalMute); - qmPlayer->addAction(qaPlayerTextMessage); - - if (self) { - qmPlayer->addSeparator(); - qmPlayer->addAction(qaAudioMute); - qmPlayer->addAction(qaAudioDeaf); - } - - if (g.s.bMinimalView) { - qmPlayer->addSeparator(); - qmPlayer->addMenu(qmServer); - qmPlayer->addMenu(qmAudio); - qmPlayer->addMenu(qmConfig); - qmPlayer->addMenu(qmHelp); - } - - if (! qlPlayerActions.isEmpty()) { - qmPlayer->addSeparator(); - foreach(QAction *a, qlPlayerActions) - qmPlayer->addAction(a); - } - - if (! p) { - qaPlayerKick->setEnabled(false); - qaPlayerBan->setEnabled(false); - qaPlayerMute->setEnabled(false); - qaPlayerLocalMute->setEnabled(false); - qaPlayerDeaf->setEnabled(false); - qaPlayerTextMessage->setEnabled(false); - } else { - qaPlayerKick->setEnabled(! self); - qaPlayerBan->setEnabled(! self); - qaPlayerMute->setEnabled(! self || p->bMute); - qaPlayerDeaf->setEnabled(! self || p->bDeaf); - qaPlayerTextMessage->setEnabled(true); - qaPlayerLocalMute->setEnabled(! self); - - qaPlayerMute->setChecked(p->bMute); - qaPlayerDeaf->setChecked(p->bDeaf); - qaPlayerLocalMute->setChecked(p->bLocalMute); - } -} - -void MainWindow::on_qaPlayerMute_triggered() { - Player *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - if (!p) - return; - - MessagePlayerMute mpmMsg; - mpmMsg.uiVictim = p->uiSession; - mpmMsg.bMute = ! p->bMute; - g.sh->sendMessage(&mpmMsg); -} - -void MainWindow::on_qaPlayerLocalMute_triggered() { - ClientPlayer *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - if (!p) - return; - - p->setLocalMute(qaPlayerLocalMute->isChecked()); -} - -void MainWindow::on_qaPlayerDeaf_triggered() { - Player *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - if (!p) - return; - - MessagePlayerDeaf mpdMsg; - mpdMsg.uiVictim = p->uiSession; - mpdMsg.bDeaf = ! p->bDeaf; - g.sh->sendMessage(&mpdMsg); -} - -void MainWindow::on_qaPlayerKick_triggered() { - Player *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - if (!p) - return; - - unsigned int session = p->uiSession; - - bool ok; - QString reason = QInputDialog::getText(this, tr("Kicking player %1").arg(p->qsName), tr("Enter reason"), QLineEdit::Normal, QString(), &ok); - - p = ClientPlayer::get(session); - if (!p) - return; - - if (ok) { - MessagePlayerKick mpkMsg; - mpkMsg.uiVictim=p->uiSession; - mpkMsg.qsReason = reason; - g.sh->sendMessage(&mpkMsg); - } -} - -void MainWindow::on_qaPlayerBan_triggered() { - Player *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - if (!p) - return; - - unsigned int session = p->uiSession; - - bool ok; - QString reason = QInputDialog::getText(this, tr("Banning player %1").arg(p->qsName), tr("Enter reason"), QLineEdit::Normal, QString(), &ok); - p = ClientPlayer::get(session); - if (!p) - return; - - if (ok) { - MessagePlayerBan mpbMsg; - mpbMsg.uiVictim=p->uiSession; - mpbMsg.qsReason = reason; - g.sh->sendMessage(&mpbMsg); - } -} - -void MainWindow::on_qaPlayerTextMessage_triggered() { - Player *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - - if (!p) - return; - - unsigned int session = p->uiSession; - - TextMessage *tm = new TextMessage(this); - tm->setWindowTitle(tr("Sending message to %1").arg(p->qsName)); - int res = tm->exec(); - - p = ClientPlayer::get(session); - - if (p && (res==QDialog::Accepted)) { - MessageTextMessage mtxt; - mtxt.iChannel = -1; - mtxt.bTree = false; - mtxt.uiVictim = p->uiSession; - mtxt.qsMessage = tm->message(); - g.l->log(Log::TextMessage, tr("To %1: %2").arg(p->qsName).arg(mtxt.qsMessage), tr("Message to %1").arg(p->qsName)); - g.sh->sendMessage(&mtxt); - } - delete tm; -} - -void MainWindow::on_qaQuit_triggered() { - this->close(); -} - -void MainWindow::on_qmConfig_aboutToShow() { - // Don't remove the config, as that messes up OSX. - foreach(QAction *a, qmConfig->actions()) - if (a != qaConfigDialog) - qmConfig->removeAction(a); - qmConfig->addAction(qaAudioWizard); - qmConfig->addSeparator(); - qmConfig->addAction(qaConfigMinimal); - if (g.s.bMinimalView) - qmConfig->addAction(qaConfigHideFrame); -} - -void MainWindow::on_qmChannel_aboutToShow() { - QModelIndex idx = qtvPlayers->currentIndex(); - - qmChannel->clear(); - qmChannel->addAction(qaChannelAdd); - qmChannel->addAction(qaChannelRemove); - qmChannel->addAction(qaChannelACL); - qmChannel->addAction(qaChannelRename); - qmChannel->addAction(qaChannelDescUpdate); - qmChannel->addSeparator(); - qmChannel->addAction(qaChannelLink); - qmChannel->addAction(qaChannelUnlink); - qmChannel->addAction(qaChannelUnlinkAll); - qmChannel->addSeparator(); - qmChannel->addAction(qaChannelSendMessage); - qmChannel->addAction(qaChannelSendTreeMessage); - - if (g.s.bMinimalView) { - qmChannel->addSeparator(); - qmChannel->addMenu(qmServer); - qmChannel->addMenu(qmAudio); - qmChannel->addMenu(qmConfig); - qmChannel->addMenu(qmHelp); - } - - if (! qlChannelActions.isEmpty()) { - qmChannel->addSeparator(); - foreach(QAction *a, qlChannelActions) - qmChannel->addAction(a); - } - - bool add, remove, acl, rename, descUpdate, link, unlink, unlinkall, msg; - add = remove = acl = rename = descUpdate = link = unlink = unlinkall = msg = false; - - if (g.uiSession != 0) { - add = true; - acl = true; - msg = true; - descUpdate = true; - - Channel *c = pmModel->getChannel(idx); - Channel *home = ClientPlayer::get(g.uiSession)->cChannel; - - if (c && c->iId != 0) { - rename = true; - remove = true; - } - if (! c) - c = Channel::get(0); - unlinkall = (home->qhLinks.count() > 0); - if (home != c) { - if (c->allLinks().contains(home)) - unlink = true; - else - link = true; - } - } - - qaChannelAdd->setEnabled(add); - qaChannelRemove->setEnabled(remove); - qaChannelACL->setEnabled(acl); - qaChannelRename->setEnabled(rename); - qaChannelDescUpdate->setEnabled(descUpdate); - qaChannelLink->setEnabled(link); - qaChannelUnlink->setEnabled(unlink); - qaChannelUnlinkAll->setEnabled(unlinkall); - qaChannelSendMessage->setEnabled(msg); - qaChannelSendTreeMessage->setEnabled(msg); -} - -void MainWindow::on_qaChannelAdd_triggered() { - bool ok; - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - int iParent = c ? c->iId : 0; - QString name = QInputDialog::getText(this, QLatin1String("Mumble"), tr("Channel Name"), QLineEdit::Normal, QString(), &ok); - - c = Channel::get(iParent); - if (! c) - return; - - if (ok) { - MessageChannelAdd mca; - mca.qsName = name; - mca.iParent = iParent; - g.sh->sendMessage(&mca); - } -} - -void MainWindow::on_qaChannelRemove_triggered() { - int ret; - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - if (! c) - return; - - int id = c->iId; - - ret=QMessageBox::question(this, QLatin1String("Mumble"), tr("Are you sure you want to delete %1 and all its sub-channels?").arg(c->qsName), QMessageBox::Yes, QMessageBox::No); - - c = Channel::get(id); - if (!c) - return; - - if (ret == QMessageBox::Yes) { - MessageChannelRemove mcr; - mcr.iId = c->iId; - g.sh->sendMessage(&mcr); - } -} - -void MainWindow::on_qaChannelRename_triggered() { - bool ok; - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - if (! c) - return; - - int id = c->iId; - - QString name = QInputDialog::getText(this, QLatin1String("Mumble"), tr("Channel Name"), QLineEdit::Normal, c->qsName, &ok); - - c = Channel::get(id); - if (! c) - return; - - if (ok) { - MessageChannelRename mcr; - mcr.iId = id; - mcr.qsName = name; - g.sh->sendMessage(&mcr); - } -} - -void MainWindow::on_qaChannelDescUpdate_triggered() { - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - if (! c) - return; - - int id = c->iId; - - TextMessage tm; - tm.setWindowTitle(tr("Change description of channel %1").arg(c->qsName)); - - const QString html = QTextDocumentFragment::fromPlainText(c->qsDesc).toHtml(); - - tm.qteEdit->setText(html); - int res = tm.exec(); - - c = Channel::get(id); - if (!c) - return; - - if (res==QDialog::Accepted) { - MessageChannelDescUpdate mcdu; - mcdu.iId = id; - mcdu.qsDesc = tm.message(); - g.sh->sendMessage(&mcdu); - } -} - -void MainWindow::on_qaChannelACL_triggered() { - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - int id = c ? c->iId : 0; - - MessageEditACL mea; - mea.iId = id; - mea.bQuery = true; - g.sh->sendMessage(&mea); - - if (aclEdit) { - aclEdit->reject(); - delete aclEdit; - aclEdit = NULL; - } -} - -void MainWindow::on_qaChannelLink_triggered() { - Channel *c = ClientPlayer::get(g.uiSession)->cChannel; - Channel *l = pmModel->getChannel(qtvPlayers->currentIndex()); - if (! l) - l = Channel::get(0); - - MessageChannelLink mcl; - mcl.iId = c->iId; - mcl.qlTargets << l->iId; - mcl.ltType = MessageChannelLink::Link; - g.sh->sendMessage(&mcl); -} - -void MainWindow::on_qaChannelUnlink_triggered() { - Channel *c = ClientPlayer::get(g.uiSession)->cChannel; - Channel *l = pmModel->getChannel(qtvPlayers->currentIndex()); - if (! l) - l = Channel::get(0); - - MessageChannelLink mcl; - mcl.iId = c->iId; - mcl.qlTargets << l->iId; - mcl.ltType = MessageChannelLink::Unlink; - g.sh->sendMessage(&mcl); -} - -void MainWindow::on_qaChannelUnlinkAll_triggered() { - Channel *c = ClientPlayer::get(g.uiSession)->cChannel; - - MessageChannelLink mcl; - mcl.iId = c->iId; - mcl.ltType = MessageChannelLink::UnlinkAll; - g.sh->sendMessage(&mcl); -} - -void MainWindow::on_qaChannelSendMessage_triggered() { - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - - if (!c) - return; - - int id = c->iId; - - TextMessage tm; - tm.setWindowTitle(tr("Sending message to channel %1").arg(c->qsName)); - int res = tm.exec(); - - c = Channel::get(id); - if (!c) - return; - - if (res==QDialog::Accepted) { - MessageTextMessage mtxt; - mtxt.iChannel = id; - mtxt.bTree = false; - mtxt.uiVictim = 0; - mtxt.qsMessage = tm.message(); - g.l->log(Log::TextMessage, tr("To %1: %2").arg(c->qsName).arg(mtxt.qsMessage), tr("Message to %1").arg(c->qsName)); - g.sh->sendMessage(&mtxt); - } -} - -void MainWindow::on_qaChannelSendTreeMessage_triggered() { - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - - if (!c) - return; - - int id = c->iId; - - TextMessage tm; - tm.setWindowTitle(tr("Sending message to channel tree %1").arg(c->qsName)); - int res = tm.exec(); - - c = Channel::get(id); - if (!c) - return; - - if (res==QDialog::Accepted) { - MessageTextMessage mtxt; - mtxt.iChannel = id; - mtxt.bTree = true; - mtxt.uiVictim = 0; - mtxt.qsMessage = tm.message(); - g.l->log(Log::TextMessage, tr("To tree %1: %2").arg(c->qsName).arg(mtxt.qsMessage), tr("Message to tree %1").arg(c->qsName)); - g.sh->sendMessage(&mtxt); - } -} - -void MainWindow::on_qaAudioReset_triggered() { - AudioInputPtr ai = g.ai; - if (ai) - ai->bResetProcessor = true; -} - -void MainWindow::on_qaAudioMute_triggered() { - AudioInputPtr ai = g.ai; - if (ai) - ai->tIdle.restart(); - - g.s.bMute = qaAudioMute->isChecked(); - - if (! g.s.bMute && g.s.bDeaf) { - g.s.bDeaf = false; - qaAudioDeaf->setChecked(false); - g.l->log(Log::SelfMute, tr("Unmuted and undeafened.")); - } else if (! g.s.bMute) { - g.l->log(Log::SelfMute, tr("Unmuted.")); - } else { - g.l->log(Log::SelfMute, tr("Muted.")); - } - - MessagePlayerSelfMuteDeaf mpsmd; - mpsmd.bMute = g.s.bMute; - mpsmd.bDeaf = g.s.bDeaf; - g.sh->sendMessage(&mpsmd); - - updateTrayIcon(); -} - -void MainWindow::on_qaAudioDeaf_triggered() { - AudioInputPtr ai = g.ai; - if (ai) - ai->tIdle.restart(); - - g.s.bDeaf = qaAudioDeaf->isChecked(); - if (g.s.bDeaf && ! g.s.bMute) { - g.s.bMute = true; - qaAudioMute->setChecked(true); - g.l->log(Log::SelfMute, tr("Muted and deafened.")); - } else if (g.s.bDeaf) { - g.l->log(Log::SelfMute, tr("Deafened.")); - } else { - g.l->log(Log::SelfMute, tr("Undeafened.")); - } - - MessagePlayerSelfMuteDeaf mpsmd; - mpsmd.bMute = g.s.bMute; - mpsmd.bDeaf = g.s.bDeaf; - g.sh->sendMessage(&mpsmd); - - updateTrayIcon(); -} - -void MainWindow::on_qaAudioTTS_triggered() { - g.s.bTTS = qaAudioTTS->isChecked(); -} - -void MainWindow::on_qaAudioStats_triggered() { - AudioStats *as=new AudioStats(this); - as->show(); -} - -void MainWindow::on_qaAudioUnlink_triggered() { - g.p->bUnlink = true; -} - -void MainWindow::on_qaConfigDialog_triggered() { - ConfigDialog *dlg= new ConfigDialog(this); - if (dlg->exec() == QDialog::Accepted) - setOnTop(g.s.bAlwaysOnTop); - delete dlg; -} - -void MainWindow::on_qaConfigMinimal_triggered() { - g.s.bMinimalView = qaConfigMinimal->isChecked(); - setupView(); -} - -void MainWindow::on_qaConfigHideFrame_triggered() { - g.s.bHideFrame = qaConfigHideFrame->isChecked(); - setupView(false); -} - -void MainWindow::on_qaAudioWizard_triggered() { - AudioWizard *aw = new AudioWizard(this); - aw->exec(); - delete aw; -} - -void MainWindow::on_qaHelpWhatsThis_triggered() { - QWhatsThis::enterWhatsThisMode(); -} - -void MainWindow::on_qaHelpAbout_triggered() { - AboutDialog adAbout(this); - adAbout.exec(); -} - -void MainWindow::on_qaHelpAboutSpeex_triggered() { - AboutSpeexDialog adAbout(this); - adAbout.exec(); -} - -void MainWindow::on_qaHelpAboutQt_triggered() { - QMessageBox::aboutQt(this, tr("About Qt")); -} - -void MainWindow::on_qaHelpVersionCheck_triggered() { - new VersionCheck(false, this); -} - -void MainWindow::on_PushToTalk_triggered(bool down) { - if (down) { - g.uiDoublePush = g.tDoublePush.restart(); - g.iPushToTalk++; - } else if (g.iPushToTalk) { - g.iPushToTalk--; - } -} - -void MainWindow::on_PushToMute_triggered(bool down) { - g.bPushToMute = down; -} - -void MainWindow::on_AltPushToTalk_triggered(bool down) { - if (down) { - g.iAltSpeak++; - g.iPushToTalk++; - } else if (g.iPushToTalk) { - g.iAltSpeak--; - g.iPushToTalk--; - } -} - -void MainWindow::on_CenterPos_triggered(bool down) { - g.bCenterPosition = down; - - if (down) { - g.iAltSpeak++; - g.iPushToTalk++; - } else if (g.iPushToTalk) { - g.iAltSpeak--; - g.iPushToTalk--; - } -} - -void MainWindow::on_VolumeUp_triggered(bool down) { - if (down) { - float v = floorf(g.s.fVolume * 10.0f); - if (v < 20.0f) - g.s.fVolume = ++v / 10.0f; - } -} - -void MainWindow::on_VolumeDown_triggered(bool down) { - if (down) { - float v = ceilf(g.s.fVolume * 10.0f); - if (v > 0.0f) - g.s.fVolume = --v / 10.0f; - } -} - -void MainWindow::pushLink(bool down) { - if (down) { - g.iAltSpeak++; - g.iPushToTalk++; - } else if (g.iPushToTalk) { - g.iAltSpeak--; - g.iPushToTalk--; - } - - if (g.uiSession == 0) - return; - - GlobalShortcut *gs = qobject_cast(sender()); - if (! gs) - return; - int idx = gs->data.toInt(); - Channel *home = ClientPlayer::get(g.uiSession)->cChannel; - - Channel *target = NULL; - switch (idx) { - case 0: - target = home->cParent; - break; - case 10: - break; - default: - target = pmModel->getSubChannel(home, idx-1); - break; - } - - - if (gsMetaChannel->active()) { - if (! target || ! down) - return; - - MessagePlayerMove mpm; - mpm.uiVictim = g.uiSession; - mpm.iChannelId = target->iId; - g.sh->sendMessage(&mpm); - g.l->log(Log::Information, tr("Joining %1.").arg(target->qsName)); - } else { - MessageChannelLink mcl; - mcl.iId = home->iId; - if (down) - mcl.ltType = MessageChannelLink::PushLink; - else - mcl.ltType = MessageChannelLink::PushUnlink; - if (idx == 10) { - foreach(Channel *l, home->qlChannels) - mcl.qlTargets << l->iId; - } else if (target) { - mcl.qlTargets << target->iId; - } - if (mcl.qlTargets.count() == 0) - return; - g.sh->sendMessage(&mcl); - } -} - -void MainWindow::viewCertificate(bool) { - ViewCert vc(g.sh->qscCert, this); - vc.exec(); -} - -void MainWindow::serverConnected() { - g.uiSession = 0; - g.l->clearIgnore(); - g.l->setIgnore(Log::PlayerJoin); - g.l->setIgnore(Log::OtherSelfMute); - QString host, uname, pw; - unsigned short port; - g.sh->getConnectionInfo(host, port, uname, pw); - g.l->log(Log::ServerConnected, tr("Connected to server %1.").arg(host)); - qaServerDisconnect->setEnabled(true); - qaServerInformation->setEnabled(true); - qaServerBanList->setEnabled(true); - - pmModel->renameChannel(Channel::get(0), tr("Root")); - qtvPlayers->setRowHidden(0, QModelIndex(), false); - - if (g.s.bMute || g.s.bDeaf) { - MessagePlayerSelfMuteDeaf mpsmd; - mpsmd.bMute = g.s.bMute; - mpsmd.bDeaf = g.s.bDeaf; - g.sh->sendMessage(&mpsmd); - } -} - -void MainWindow::serverDisconnected(QString reason) { - g.uiSession = 0; - qaServerDisconnect->setEnabled(false); - qaServerInformation->setEnabled(false); - qaServerBanList->setEnabled(false); - updateTrayIcon(); - - QString uname, pw, host; - unsigned short port; - g.sh->getConnectionInfo(host, port, uname, pw); - - if (aclEdit) { - aclEdit->reject(); - delete aclEdit; - aclEdit = NULL; - } - - if (banEdit) { - banEdit->reject(); - delete banEdit; - banEdit = NULL; - } - - QSet qs; - qs += qlServerActions.toSet(); - qs += qlChannelActions.toSet(); - qs += qlPlayerActions.toSet(); - - foreach(QAction *a, qs) - delete a; - - qlServerActions.clear(); - qlChannelActions.clear(); - qlPlayerActions.clear(); - - pmModel->removeAll(); - qtvPlayers->setRowHidden(0, QModelIndex(), true); - - if (! g.sh->qlErrors.isEmpty()) { - foreach(QSslError e, g.sh->qlErrors) - g.l->log(Log::ServerDisconnected, tr("SSL Verification failed: %1").arg(e.errorString())); - if (! g.sh->qscCert.isEmpty()) { - QSslCertificate c = g.sh->qscCert.at(0); - QString basereason; - if (! Database::getDigest(host, port).isNull()) { - basereason = tr("WARNING: The server presented a certificate that was different from the stored one."); - } else { - basereason = tr("Sever presented a certificate which failed verification."); - } - QStringList qsl; - foreach(QSslError e, g.sh->qlErrors) - qsl << QString::fromLatin1("
  • %1
  • ").arg(e.errorString()); - - QMessageBox qmb(QMessageBox::Warning, QLatin1String("Mumble"), - tr("

    %1.
    The specific errors with this certificate are:

      %2
    " - "

    Do you wish to accept this certificate anyway?
    (It will also be stored so you won't be asked this again.)

    " - ).arg(basereason).arg(qsl.join(QString())), QMessageBox::Yes | QMessageBox::No, this); - - qmb.setDefaultButton(QMessageBox::No); - qmb.setEscapeButton(QMessageBox::No); - - QPushButton *qp = qmb.addButton(tr("&View Certificate"), QMessageBox::ActionRole); - forever { - int res = qmb.exec(); - - if ((res == 0) && (qmb.clickedButton() == qp)) { - ViewCert vc(g.sh->qscCert, this); - vc.exec(); - continue; - } else if (res == QMessageBox::Yes) { - Database::setDigest(host, port, QString::fromLatin1(c.digest(QCryptographicHash::Sha1).toHex())); - qaServerDisconnect->setEnabled(true); - g.sh->start(QThread::TimeCriticalPriority); - } - break; - } - } - } else { - bool ok = false; - bool matched = false; - - if (! reason.isEmpty()) { - g.l->log(Log::ServerDisconnected, tr("Server connection failed: %1.").arg(reason)); - } else { - g.l->log(Log::ServerDisconnected, tr("Disconnected from server.")); - } - - - Qt::WindowFlags wf = 0; -#ifdef Q_OS_MAC - wf = Qt::Sheet; -#endif - - switch (rtLast) { - case MessageServerReject::InvalidUsername: - case MessageServerReject::UsernameInUse: - matched = true; - uname = QInputDialog::getText(this, tr("Invalid username"), (rtLast == MessageServerReject::InvalidUsername) ? tr("You connected with an invalid username, please try another one.") : tr("That username is already in use, please try another username."), QLineEdit::Normal, uname, &ok, wf); - break; - case MessageServerReject::WrongUserPW: - case MessageServerReject::WrongServerPW: - matched = true; - pw = QInputDialog::getText(this, tr("Wrong password"), (rtLast == MessageServerReject::WrongUserPW) ? tr("Wrong password for registered users, please try again.") : tr("Wrong server password for unregistered user account, please try again."), QLineEdit::Password, pw, &ok, wf); - break; - default: - break; - } - if (ok && matched) { - qaServerDisconnect->setEnabled(true); - g.sh->setConnectionInfo(host, port, uname, pw); - g.sh->start(QThread::TimeCriticalPriority); - } else if (!matched && g.s.bReconnect && ! reason.isEmpty()) { - qaServerDisconnect->setEnabled(true); - qtReconnect->start(); - } - } -} - -void MainWindow::on_Icon_activated(QSystemTrayIcon::ActivationReason reason) { - if (reason == QSystemTrayIcon::Trigger) { - if (! isVisible()) { - show(); - showNormal(); - activateWindow(); - } else { - hide(); - } - } -} - -void MainWindow::customEvent(QEvent *evt) { - if (evt->type() == TI_QEVENT) { - hide(); - return; - } - if (evt->type() == MB_QEVENT) { - MessageBoxEvent *mbe=static_cast(evt); - g.l->log(Log::Information, mbe->msg); - return; - } - if (evt->type() != SERVERSEND_EVENT) - return; - - ServerHandlerMessageEvent *shme=static_cast(evt); - - Message *mMsg = Message::networkToMessage(shme->qbaMsg); - if (mMsg) { - dispatch(NULL, mMsg); - delete mMsg; - } -} - -void MainWindow::on_qteLog_anchorClicked(const QUrl &url) { - QDesktopServices::openUrl(url); -} - -void MainWindow::on_qteLog_highlighted(const QUrl &url) { - if (! url.isValid()) - QToolTip::hideText(); - else - QToolTip::showText(QCursor::pos(), url.toString(), qteLog, QRect()); -} - -void MainWindow::context_triggered() { - QAction *a = qobject_cast(sender()); - - Channel *c = pmModel->getChannel(qtvPlayers->currentIndex()); - ClientPlayer *p = pmModel->getPlayer(qtvPlayers->currentIndex()); - - MessageContextAction mca; - mca.uiSession = g.uiSession; - mca.qsAction = a->data().toString(); - mca.uiVictim = p ? p->uiSession : 0; - mca.iChannel = c ? c->iId : -1; - - g.sh->sendMessage(&mca); -} diff -Nru mumble-1.2.3/src/mumble11x/MainWindow.h mumble-1.2.3-87-gf7d8711/src/mumble11x/MainWindow.h --- mumble-1.2.3/src/mumble11x/MainWindow.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/MainWindow.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,220 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _MAINWINDOW_H -#define _MAINWINDOW_H - -#include "mumble_pch.hpp" - -#define TI_QEVENT (QEvent::User + 938) -#define MB_QEVENT (QEvent::User + 939) - -class ACLEditor; -class BanEditor; -class ServerHandler; -class GlobalShortcut; -class TextToSpeech; -class PlayerModel; - -#include "Message.h" -#include "Usage.h" -#include "ui_MainWindow.h" - -class MessageBoxEvent : public QEvent { - public: - QString msg; - MessageBoxEvent(QString msg); -}; - -class LogTitleBar : public QWidget { - private: - Q_OBJECT - Q_DISABLE_COPY(LogTitleBar) - protected: - QTimer *qtTick; - int size; - int newsize; - public: - LogTitleBar(); - QSize sizeHint() const; - QSize minimumSizeHint() const; - public slots: - void tick(); - protected: - bool eventFilter(QObject *, QEvent *); -}; - -class MainWindow : public QMainWindow, public MessageHandler, public Ui::MainWindow { - friend class PlayerModel; - private: - Q_OBJECT - Q_DISABLE_COPY(MainWindow) - public: - PlayerModel *pmModel; - QSystemTrayIcon *qstiIcon; - QMenu *qmTray; - QIcon qiIcon, qiIconMute, qiIconDeaf; - - GlobalShortcut *gsPushTalk, *gsResetAudio, *gsMuteSelf, *gsDeafSelf; - GlobalShortcut *gsUnlink, *gsCenterPos, *gsPushMute, *gsMetaChannel, *gsToggleOverlay; - GlobalShortcut *gsAltTalk, *gsMinimal, *gsVolumeUp, *gsVolumeDown; - LogTitleBar *ltbDockTitle; - - ACLEditor *aclEdit; - BanEditor *banEdit; - - MessageServerReject::RejectType rtLast; - QString qsDesiredChannel; - - void recheckTTS(); - void msgBox(QString msg); - void setOnTop(bool top); - void updateTrayIcon(); - -#ifdef Q_OS_WIN - unsigned int uiNewHardware; -#endif - protected: - Usage uUsage; - QTimer *qtReconnect; - - QList qlServerActions; - QList qlChannelActions; - QList qlPlayerActions; - - void createActions(); - void setupGui(); - void customEvent(QEvent *evt); - void findDesiredChannel(); - void setupView(bool toggle_minimize = true); - bool bNoHide; - virtual void closeEvent(QCloseEvent *e); - virtual void hideEvent(QHideEvent *e); - public slots: - void on_qtvPlayers_customContextMenuRequested(const QPoint &pos); - void on_qtvPlayers_doubleClicked(const QModelIndex &idx); - void on_qmServer_aboutToShow(); - void on_qaServerConnect_triggered(); - void on_qaServerDisconnect_triggered(); - void on_qaServerBanList_triggered(); - void on_qaServerInformation_triggered(); - void on_qmPlayer_aboutToShow(); - void on_qaPlayerKick_triggered(); - void on_qaPlayerBan_triggered(); - void on_qaPlayerMute_triggered(); - void on_qaPlayerDeaf_triggered(); - void on_qaPlayerLocalMute_triggered(); - void on_qaPlayerTextMessage_triggered(); - void on_qmChannel_aboutToShow(); - void on_qaChannelAdd_triggered(); - void on_qaChannelRemove_triggered(); - void on_qaChannelACL_triggered(); - void on_qaChannelRename_triggered(); - void on_qaChannelDescUpdate_triggered(); - void on_qaChannelLink_triggered(); - void on_qaChannelUnlink_triggered(); - void on_qaChannelUnlinkAll_triggered(); - void on_qaChannelSendMessage_triggered(); - void on_qaChannelSendTreeMessage_triggered(); - void on_qaAudioReset_triggered(); - void on_qaAudioMute_triggered(); - void on_qaAudioDeaf_triggered(); - void on_qaAudioTTS_triggered(); - void on_qaAudioUnlink_triggered(); - void on_qaAudioStats_triggered(); - void on_qaConfigDialog_triggered(); - void on_qaConfigHideFrame_triggered(); - void on_qmConfig_aboutToShow(); - void on_qaConfigMinimal_triggered(); - void on_qaAudioWizard_triggered(); - void on_qaHelpWhatsThis_triggered(); - void on_qaHelpAbout_triggered(); - void on_qaHelpAboutSpeex_triggered(); - void on_qaHelpAboutQt_triggered(); - void on_qaHelpVersionCheck_triggered(); - void on_qaQuit_triggered(); - void on_qteLog_customContextMenuRequested(const QPoint &pos); - void on_qteLog_anchorClicked(const QUrl &); - void on_qteLog_highlighted(const QUrl & link); - void on_PushToTalk_triggered(bool); - void on_PushToMute_triggered(bool); - void on_AltPushToTalk_triggered(bool); - void on_CenterPos_triggered(bool); - void on_VolumeUp_triggered(bool); - void on_VolumeDown_triggered(bool); - void on_Reconnect_timeout(); - void on_Icon_activated(QSystemTrayIcon::ActivationReason); - void serverConnected(); - void serverDisconnected(QString reason); - void pushLink(bool down); - void viewCertificate(bool); - void openUrl(const QUrl &url); - void context_triggered(); - public: - MainWindow(QWidget *parent); - ~MainWindow(); - - // From msgHandler. Implementation in Messages.cpp - virtual void msgSpeex(Connection *, MessageSpeex *); - virtual void msgServerAuthenticate(Connection *, MessageServerAuthenticate *); - virtual void msgPing(Connection *, MessagePing *); - virtual void msgPingStats(Connection *, MessagePingStats *); - virtual void msgServerReject(Connection *, MessageServerReject *); - virtual void msgServerSync(Connection *, MessageServerSync *); - virtual void msgServerJoin(Connection *, MessageServerJoin *); - virtual void msgServerLeave(Connection *, MessageServerLeave *); - virtual void msgPlayerMute(Connection *, MessagePlayerMute *); - virtual void msgPlayerDeaf(Connection *, MessagePlayerDeaf *); - virtual void msgPlayerSelfMuteDeaf(Connection *, MessagePlayerSelfMuteDeaf *); - virtual void msgPlayerKick(Connection *, MessagePlayerKick *); - virtual void msgPlayerBan(Connection *, MessagePlayerBan *); - virtual void msgPlayerMove(Connection *, MessagePlayerMove *); - virtual void msgPlayerRename(Connection *, MessagePlayerRename *); - virtual void msgChannelAdd(Connection *, MessageChannelAdd *); - virtual void msgChannelRemove(Connection *, MessageChannelRemove *); - virtual void msgChannelMove(Connection *, MessageChannelMove *); - virtual void msgChannelLink(Connection *, MessageChannelLink *); - virtual void msgChannelRename(Connection *, MessageChannelRename *); - virtual void msgChannelDescUpdate(Connection *, MessageChannelDescUpdate *); - virtual void msgServerBanList(Connection *, MessageServerBanList *); - virtual void msgTextMessage(Connection *, MessageTextMessage *); - virtual void msgPermissionDenied(Connection *, MessagePermissionDenied *); - virtual void msgEditACL(Connection *, MessageEditACL *); - virtual void msgQueryUsers(Connection *, MessageQueryUsers *); - virtual void msgTexture(Connection *, MessageTexture *); - virtual void msgCryptSetup(Connection *, MessageCryptSetup *); - virtual void msgCryptSync(Connection *, MessageCryptSync *); - virtual void msgContextAddAction(Connection *, MessageContextAddAction *); - virtual void msgContextAction(Connection *, MessageContextAction *); -}; - -#else -class MainWindow; -#endif diff -Nru mumble-1.2.3/src/mumble11x/MainWindow.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/MainWindow.ui --- mumble-1.2.3/src/mumble11x/MainWindow.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/MainWindow.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,568 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 671 - 435 - - - - Mumble - - - - Qt::CustomContextMenu - - - true - - - true - - - 10 - - - false - - - true - - - - - - 0 - 0 - 671 - 22 - - - - - &Server - - - - - &Player - - - - - &Channel - - - - - &Audio - - - - - - - - - - - - - - C&onfigure - - - - - - &Help - - - - - - - - - - - - - - - - - - - QDockWidget::DockWidgetMovable - - - Log - - - 1 - - - - Qt::CustomContextMenu - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - - - false - - - - - - &Quit Mumble - - - Closes the program - - - Exits the application. - - - Ctrl+Q - - - - - &Connect - - - Open the server connection dialog - - - Shows a dialog of registered servers, and also allows quick connect. - - - - - false - - - &Disconnect - - - Disconnect from server - - - Disconnects you from the server. - - - - - false - - - &Ban lists - - - Edit ban lists on server - - - This lets you edit the server-side IP ban lists. - - - - - false - - - &Information - - - Show information about the server connection - - - This will show extended information about the connection to the server. - - - - - &Kick - - - Kick player (with reason) - - - Kick selected player off server. You'll be asked to specify a reason. - - - - - true - - - &Mute - - - Mute player - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - - - - - &Ban - - - Kick and ban player (with reason) - - - Kick and ban selected player from server. You'll be asked to specify a reason. - - - - - true - - - &Deafen - - - Deafen player - - - Deafen or undeafen player on server. Deafening a player will also mute them. - - - - - true - - - &Local Mute - - - Mute player locally - - - Mute or unmute player locally. Use this on other players in the same room. - - - - - Send Messa&ge - - - Send a Text Message - - - Sends a text message to another user. - - - - - &Add - - - Add new channel - - - This adds a new sub-channel to the currently selected channel. - - - - - &Remove - - - Remove channel - - - This removes a channel and all sub-channels. - - - - - &Edit ACL - - - Edit Groups and ACL for channel - - - This opens the Group and ACL dialog for the channel, to control permissions. - - - - - &Rename - - - Renames the channel - - - This renames a channel. - - - - - &Change Description - - - Changes the channel description - - - This changes the description of a channel. - - - - - &Link - - - Link your channel to another channel - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - - - - - &Unlink - - - Unlink your channel from another channel - - - This unlinks your current channel from the selected channel. - - - - - Unlink &All - - - Unlinks your channel from all linked channels. - - - This unlinks your current channel (not the selected one) from all linked channels. - - - - - &Reset - - - Reset audio preprocessor - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - - - - - true - - - &Mute Self - - - Mute yourself - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - - - - - true - - - &Deafen Self - - - Deafen yourself - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - - - - - true - - - &Text-To-Speech - - - Toggle Text-To-Speech - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - - - - - S&tatistics - - - Display audio statistics - - - Pops up a small dialog with information about your current audio input. - - - - - &Unlink - - - Forcibly unlink plugin - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - - - - - &Settings - - - Configure Mumble - - - Allows you to change most settings for Mumble. - - - QAction::PreferencesRole - - - - - &Audio Wizard - - - Start the audio configuration wizard - - - This will guide you through the process of configuring your audio hardware. - - - - - &What's This? - - - Enter What's This? mode - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - - - - - &About - - - Information about Mumble - - - Shows a small dialog with information and license for Mumble. - - - QAction::AboutRole - - - - - About &Speex - - - Information about Speex - - - Shows a small dialog with information about Speex. - - - QAction::ApplicationSpecificRole - - - - - About &Qt - - - Information about Qt - - - Shows a small dialog with information about Qt. - - - QAction::AboutQtRole - - - - - Check for &Updates - - - Check for new version of Mumble - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - - - - - Send Messa&ge - - - Send a Text Message - - - Sends a text message to all users in a channel. - - - - - Send &Tree Message - - - Send message to channel tree. - - - This sends a text message to a channel and it's subchannels. - - - - - true - - - &Minimal View - - - Toggle minimal window modes - - - This will toggle minimal mode, where the log window and menu is hidden. - - - - - true - - - Hide Frame - - - Toggle showing frame on minimal window - - - This will toggle whether the minimal window should have a frame for moving and resizing. - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/Message.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Message.cpp --- mumble-1.2.3/src/mumble11x/Message.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Message.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,709 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Message.h" -#include "PacketDataStream.h" -#include "murmur_pch.h" - -Message::Message() { - uiSession = 0; -} - -Message::~Message() { -} - -void Message::messageToNetwork(QByteArray &qbaOut) const { - char buffer[8192]; - PacketDataStream qdsOut(buffer, 8192); - qdsOut << messageType(); - qdsOut << uiSession; - saveStream(qdsOut); - - if (qdsOut.undersize() == 0) { - qbaOut = QByteArray(buffer, qdsOut.size()); - return; - } - - unsigned int size = 8192 + qdsOut.undersize(); - STACKVAR(char, b, size); - PacketDataStream pdsResized(b, size); - pdsResized << messageType(); - pdsResized << uiSession; - saveStream(pdsResized); - qbaOut = QByteArray(b, pdsResized.size()); -} - -void Message::messageToNetwork(PacketDataStream &pds) const { - pds << messageType(); - pds << uiSession; - saveStream(pds); - pds.truncate(); -} - -Message *Message::networkToMessage(QByteArray &qbaIn) { - PacketDataStream qdsIn(qbaIn.constData(), qbaIn.size()); - return networkToMessage(qdsIn); -} - -Message *Message::networkToMessage(PacketDataStream &qdsIn) { - Message *mMsg = NULL; - unsigned char iMessageType; - short uiSession; - qdsIn >> iMessageType; - qdsIn >> uiSession; - switch (iMessageType) { - case Speex: - mMsg = new MessageSpeex(); - break; - case ServerAuthenticate: - mMsg = new MessageServerAuthenticate(); - break; - case ServerReject: - mMsg = new MessageServerReject(); - break; - case ServerSync: - mMsg = new MessageServerSync(); - break; - case ServerJoin: - mMsg = new MessageServerJoin(); - break; - case ServerLeave: - mMsg = new MessageServerLeave(); - break; - case ServerBanList: - mMsg = new MessageServerBanList(); - break; - case PlayerMute: - mMsg = new MessagePlayerMute(); - break; - case PlayerDeaf: - mMsg = new MessagePlayerDeaf(); - break; - case PlayerSelfMuteDeaf: - mMsg = new MessagePlayerSelfMuteDeaf(); - break; - case PlayerKick: - mMsg = new MessagePlayerKick(); - break; - case PlayerBan: - mMsg = new MessagePlayerBan(); - break; - case PlayerMove: - mMsg = new MessagePlayerMove(); - break; - case PlayerRename: - mMsg = new MessagePlayerRename(); - break; - case ChannelAdd: - mMsg = new MessageChannelAdd(); - break; - case ChannelRemove: - mMsg = new MessageChannelRemove(); - break; - case ChannelMove: - mMsg = new MessageChannelMove(); - break; - case ChannelLink: - mMsg = new MessageChannelLink(); - break; - case ChannelRename: - mMsg = new MessageChannelRename(); - break; - case ChannelDescUpdate: - mMsg = new MessageChannelDescUpdate(); - break; - case TextMessage: - mMsg = new MessageTextMessage(); - break; - case PermissionDenied: - mMsg = new MessagePermissionDenied(); - break; - case EditACL: - mMsg = new MessageEditACL(); - break; - case QueryUsers: - mMsg = new MessageQueryUsers(); - break; - case Ping: - mMsg = new MessagePing(); - break; - case PingStats: - mMsg = new MessagePingStats(); - break; - case PlayerTexture: - mMsg = new MessageTexture(); - break; - case CryptSetup: - mMsg = new MessageCryptSetup(); - break; - case CryptSync: - mMsg = new MessageCryptSync(); - break; - case ContextAction: - mMsg = new MessageContextAction(); - break; - case ContextAddAction: - mMsg = new MessageContextAddAction(); - break; - default: - qWarning("Message: Type %d (session %d, size %d) is unknown type", iMessageType, uiSession, qdsIn.capacity()); - } - if (mMsg) { - mMsg->uiSession=uiSession; - mMsg->restoreStream(qdsIn); - if (! qdsIn.isValid()) { - delete mMsg; - mMsg = NULL; - qWarning("Message: Type %d (session %d, size %d) corrupt or short packet", iMessageType, uiSession, qdsIn.capacity()); - } else if (qdsIn.left() != 0) { - delete mMsg; - mMsg = NULL; - qWarning("Message: Type %d (session %d) Long packet: %d/%d leftover bytes", iMessageType, uiSession, qdsIn.left(), qdsIn.size()); - } else if (! mMsg->isValid()) { - delete mMsg; - mMsg = NULL; - qWarning("Message: Type %d (session %d, size %d) failed to validate", iMessageType, uiSession, qdsIn.capacity()); - } - } - - return mMsg; -} - -void MessageHandler::dispatch(Connection *cCon, Message *msg) { - switch (msg->messageType()) { - case Message::Speex: - msgSpeex(cCon, static_cast(msg)); - break; - case Message::ServerAuthenticate: - msgServerAuthenticate(cCon, static_cast(msg)); - break; - case Message::ServerReject: - msgServerReject(cCon, static_cast(msg)); - break; - case Message::ServerSync: - msgServerSync(cCon, static_cast(msg)); - break; - case Message::ServerJoin: - msgServerJoin(cCon, static_cast(msg)); - break; - case Message::ServerLeave: - msgServerLeave(cCon, static_cast(msg)); - break; - case Message::ServerBanList: - msgServerBanList(cCon, static_cast(msg)); - break; - case Message::PlayerMute: - msgPlayerMute(cCon, static_cast(msg)); - break; - case Message::PlayerDeaf: - msgPlayerDeaf(cCon, static_cast(msg)); - break; - case Message::PlayerSelfMuteDeaf: - msgPlayerSelfMuteDeaf(cCon, static_cast(msg)); - break; - case Message::PlayerKick: - msgPlayerKick(cCon, static_cast(msg)); - break; - case Message::PlayerBan: - msgPlayerBan(cCon, static_cast(msg)); - break; - case Message::PlayerMove: - msgPlayerMove(cCon, static_cast(msg)); - break; - case Message::PlayerRename: - msgPlayerRename(cCon, static_cast(msg)); - break; - case Message::ChannelAdd: - msgChannelAdd(cCon, static_cast(msg)); - break; - case Message::ChannelRemove: - msgChannelRemove(cCon, static_cast(msg)); - break; - case Message::ChannelMove: - msgChannelMove(cCon, static_cast(msg)); - break; - case Message::ChannelLink: - msgChannelLink(cCon, static_cast(msg)); - break; - case Message::ChannelRename: - msgChannelRename(cCon, static_cast(msg)); - break; - case Message::ChannelDescUpdate: - msgChannelDescUpdate(cCon, static_cast(msg)); - break; - case Message::TextMessage: - msgTextMessage(cCon, static_cast(msg)); - break; - case Message::PermissionDenied: - msgPermissionDenied(cCon, static_cast(msg)); - break; - case Message::EditACL: - msgEditACL(cCon, static_cast(msg)); - break; - case Message::QueryUsers: - msgQueryUsers(cCon, static_cast(msg)); - break; - case Message::Ping: - msgPing(cCon, static_cast(msg)); - break; - case Message::PingStats: - msgPingStats(cCon, static_cast(msg)); - break; - case Message::PlayerTexture: - msgTexture(cCon, static_cast(msg)); - break; - case Message::CryptSetup: - msgCryptSetup(cCon, static_cast(msg)); - break; - case Message::CryptSync: - msgCryptSync(cCon, static_cast(msg)); - break; - case Message::ContextAction: - msgContextAction(cCon, static_cast(msg)); - break; - case Message::ContextAddAction: - msgContextAddAction(cCon, static_cast(msg)); - break; - default: - qFatal("MessageHandler called with unknown message type %d", msg->messageType()); - } -} - -bool Message::isValid() const { - return true; -} - -void Message::saveStream(PacketDataStream &) const { -} - -void Message::restoreStream(PacketDataStream &) { -} - -void MessagePing::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiTimestamp; -} - -void MessagePing::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiTimestamp; -} - -void MessagePingStats::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiTimestamp << uiGood << uiLate << uiLost << uiResync << dUDPPingAvg << dUDPPingVar << uiUDPPackets << dTCPPingAvg << dTCPPingVar << uiTCPPackets; -} - -void MessagePingStats::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiTimestamp >> uiGood >> uiLate >> uiLost >> uiResync >> dUDPPingAvg >> dUDPPingVar >> uiUDPPackets >> dTCPPingAvg >> dTCPPingVar >> uiTCPPackets; -} - -MessageServerAuthenticate::MessageServerAuthenticate() { - iVersion = MESSAGE_STREAM_VERSION; -} - -void MessageServerAuthenticate::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iVersion; - qdsOut << qsUsername; - qdsOut << qsPassword; -} - -void MessageServerAuthenticate::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iVersion; - qdsIn >> qsUsername; - qdsIn >> qsPassword; -} - - -void MessageServerReject::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qsReason; - qdsOut << static_cast(rtType); -} - -void MessageServerReject::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qsReason; - int v; - qdsIn >> v; - rtType = static_cast(v); -} - -void MessageServerSync::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iMaxBandwidth; - qdsOut << qsWelcomeText; -} - -void MessageServerSync::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iMaxBandwidth; - qdsIn >> qsWelcomeText; -} - -void MessageServerJoin::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qsPlayerName; - qdsOut << iId; -} - -void MessageServerJoin::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qsPlayerName; - qdsIn >> iId; -} - -void MessageServerBanList::saveStream(PacketDataStream &qdsOut) const { - qdsOut << bQuery; - qdsOut << qlBans; -} - -void MessageServerBanList::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> bQuery; - qdsIn >> qlBans; -} - -void MessagePermissionDenied::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qsReason; -} - -void MessagePermissionDenied::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qsReason; -} - -void MessageSpeex::saveStream(PacketDataStream &qdsOut) const { - qdsOut << static_cast(iSeq); - qdsOut.append(qbaSpeexPacket.constData(), qbaSpeexPacket.size()); -} - -void MessageSpeex::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iSeq; - qbaSpeexPacket = qdsIn.dataBlock(qdsIn.left()); -} - -bool MessageSpeex::isValid() const { - return ! qbaSpeexPacket.isEmpty(); -} - -void MessagePlayerMute::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiVictim; - qdsOut << bMute; -} - -void MessagePlayerMute::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiVictim; - qdsIn >> bMute; -} - -void MessagePlayerDeaf::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiVictim; - qdsOut << bDeaf; -} - -void MessagePlayerDeaf::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiVictim; - qdsIn >> bDeaf; -} - -void MessagePlayerKick::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiVictim; - qdsOut << qsReason; -} - -void MessagePlayerKick::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiVictim; - qdsIn >> qsReason; -} - -void MessagePlayerBan::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiVictim; - qdsOut << qsReason; -} - -void MessagePlayerBan::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiVictim; - qdsIn >> qsReason; -} - -void MessagePlayerMove::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiVictim; - qdsOut << iChannelId; -} - -void MessagePlayerMove::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiVictim; - qdsIn >> iChannelId; -} - -void MessagePlayerRename::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qsName; -} - -void MessagePlayerRename::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qsName; -} - -void MessagePlayerSelfMuteDeaf::saveStream(PacketDataStream &qdsOut) const { - qdsOut << bMute; - qdsOut << bDeaf; -} - -void MessagePlayerSelfMuteDeaf::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> bMute; - qdsIn >> bDeaf; -} - -void MessageChannelAdd::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId; - qdsOut << iParent; - qdsOut << qsName; -} - -void MessageChannelAdd::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId; - qdsIn >> iParent; - qdsIn >> qsName; -} - -void MessageChannelRemove::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId; -} - -void MessageChannelRemove::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId; -} - -void MessageChannelLink::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId; - qdsOut << static_cast(ltType); - qdsOut << qlTargets; -} - -void MessageChannelLink::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId; - int v; - qdsIn >> v; - ltType = static_cast(v); - qdsIn >> qlTargets; -} - -void MessageChannelMove::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId; - qdsOut << iParent; -} - -void MessageChannelMove::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId; - qdsIn >> iParent; -} - -void MessageChannelRename::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId << qsName; -} - -void MessageChannelRename::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId >> qsName; -} - -void MessageChannelDescUpdate::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId << qsDesc; -} - -void MessageChannelDescUpdate::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId >> qsDesc; -} - -void MessageTextMessage::saveStream(PacketDataStream &qdsOut) const { - qdsOut << uiVictim; - qdsOut << iChannel; - qdsOut << bTree; - qdsOut << qsMessage; -} - -void MessageTextMessage::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> uiVictim; - qdsIn >> iChannel; - qdsIn >> bTree; - qdsIn >> qsMessage; -} - -void MessageEditACL::saveStream(PacketDataStream &qdsOut) const { - qdsOut << iId; - qdsOut << bQuery; - if (bQuery) - return; - - qdsOut << bInheritACL; - qdsOut << groups; - qdsOut << acls; -} - -void MessageEditACL::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> iId; - qdsIn >> bQuery; - if (bQuery) - return; - - qdsIn >> bInheritACL; - qdsIn >> groups; - qdsIn >> acls; -} - -void MessageQueryUsers::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qlIds; - qdsOut << qlNames; -} - -void MessageQueryUsers::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qlIds; - qdsIn >> qlNames; -} - -bool MessageQueryUsers::isValid() const { - if (qlIds.count() != qlNames.count()) - return false; - - int i; - for (i=0;i> iPlayerId; - qdsIn >> qbaTexture; -} - -void MessageCryptSetup::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qbaKey << qbaServerNonce << qbaClientNonce; -} - -void MessageCryptSetup::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qbaKey >> qbaServerNonce >> qbaClientNonce; -} - -bool MessageCryptSetup::isValid() const { - return ((qbaKey.size() == AES_BLOCK_SIZE) && - (qbaClientNonce.size() == AES_BLOCK_SIZE) && - (qbaServerNonce.size() == AES_BLOCK_SIZE)); -} - - -void MessageCryptSync::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qbaNonce; -} - -void MessageCryptSync::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qbaNonce; -} - -bool MessageCryptSync::isValid() const { - return (qbaNonce.isEmpty() || (qbaNonce.size() == AES_BLOCK_SIZE)); -} - -void MessageContextAddAction::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qsAction; - qdsOut << qsText; - qdsOut << static_cast(ctx); -} - -void MessageContextAddAction::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qsAction; - qdsIn >> qsText; - int c; - qdsIn >> c; - ctx = static_cast(c); -} - -bool MessageContextAddAction::isValid() const { - return (! qsAction.isEmpty() && (ctx & (CtxServer | CtxPlayer | CtxChannel))); -} - -void MessageContextAction::saveStream(PacketDataStream &qdsOut) const { - qdsOut << qsAction; - qdsOut << uiVictim; - qdsOut << iChannel; -} - -void MessageContextAction::restoreStream(PacketDataStream &qdsIn) { - qdsIn >> qsAction; - qdsIn >> uiVictim; - qdsIn >> iChannel; -} - -bool MessageContextAction::isValid() const { - return (! qsAction.isEmpty()); -} - -PacketDataStream & operator<< (PacketDataStream & out, const MessageEditACL::GroupStruct &gs) { - out << gs.qsName; - out << gs.bInherited; - out << gs.bInherit; - out << gs.bInheritable; - out << gs.qsAdd; - out << gs.qsRemove; - out << gs.qsInheritedMembers; - return out; -} - -PacketDataStream & operator>> (PacketDataStream & in, MessageEditACL::GroupStruct &gs) { - in >> gs.qsName; - in >> gs.bInherited; - in >> gs.bInherit; - in >> gs.bInheritable; - in >> gs.qsAdd; - in >> gs.qsRemove; - in >> gs.qsInheritedMembers; - return in; -} - -PacketDataStream & operator<< (PacketDataStream & out, const MessageEditACL::ACLStruct &as) { - out << as.bApplyHere; - out << as.bApplySubs; - out << as.bInherited; - out << as.iPlayerId; - out << as.qsGroup; - out << static_cast(as.pAllow); - out << static_cast(as.pDeny); - return out; -} - -PacketDataStream & operator>> (PacketDataStream & in, MessageEditACL::ACLStruct &as) { - int v; - - in >> as.bApplyHere; - in >> as.bApplySubs; - in >> as.bInherited; - in >> as.iPlayerId; - in >> as.qsGroup; - in >> v; - as.pAllow = static_cast(v); - in >> v; - as.pDeny = static_cast(v); - return in; -} diff -Nru mumble-1.2.3/src/mumble11x/Message.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Message.h --- mumble-1.2.3/src/mumble11x/Message.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Message.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,519 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _MESSAGE_H -#define _MESSAGE_H - -#define MESSAGE_STREAM_VERSION 4 - -#include "ACL.h" - -class Connection; -class PacketDataStream; - -class Message { - protected: - virtual void saveStream(PacketDataStream &) const; - virtual void restoreStream(PacketDataStream &); - public: - enum MessageType { ServerReject, ServerAuthenticate, Speex, ServerSync, ServerJoin, ServerLeave, ServerBanList, PlayerMute, PlayerDeaf, PlayerKick, PlayerRename, PlayerBan, PlayerMove, PlayerSelfMuteDeaf, ChannelAdd, ChannelRemove, ChannelMove, ChannelLink, ChannelRename, PermissionDenied, EditACL, QueryUsers, Ping, TextMessage, PlayerTexture, CryptSetup, CryptSync, PingStats, ContextAction, ContextAddAction, ChannelDescUpdate }; - unsigned int uiSession; - - Message(); - virtual ~Message(); - virtual Message::MessageType messageType() const = 0; - virtual bool isValid() const; - - void messageToNetwork(QByteArray &) const; - void messageToNetwork(PacketDataStream &) const; - static Message *networkToMessage(QByteArray &); - static Message *networkToMessage(PacketDataStream &); -}; - -class MessageSpeex : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - enum { AltSpeak = 0x01, LoopBack = 0x02, EndSpeech = 0x04, FrameCountMask = 0x30 }; - unsigned int iSeq; - // Flags is in first byte of packet. - QByteArray qbaSpeexPacket; - Message::MessageType messageType() const { - return Speex; - }; - bool isValid() const; -}; - -class MessageServerAuthenticate : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iVersion; - QString qsUsername; - QString qsPassword; - MessageServerAuthenticate(); - Message::MessageType messageType() const { - return ServerAuthenticate; - }; -}; - -class MessagePing : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - quint64 uiTimestamp; - Message::MessageType messageType() const { - return Ping; - }; -}; - -class MessagePingStats : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - quint64 uiTimestamp; - quint32 uiGood; - quint32 uiLate; - quint32 uiLost; - quint32 uiResync; - double dUDPPingAvg; - double dUDPPingVar; - quint32 uiUDPPackets; - double dTCPPingAvg; - double dTCPPingVar; - quint32 uiTCPPackets; - Message::MessageType messageType() const { - return PingStats; - }; -}; - -class MessageServerReject : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - enum RejectType { None, WrongVersion, InvalidUsername, WrongUserPW, WrongServerPW, UsernameInUse, ServerFull }; - QString qsReason; - RejectType rtType; - Message::MessageType messageType() const { - return ServerReject; - }; -}; - -class MessageServerSync : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iMaxBandwidth; - QString qsWelcomeText; - Message::MessageType messageType() const { - return ServerSync; - }; -}; - -class MessageServerJoin : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QString qsPlayerName; - int iId; - Message::MessageType messageType() const { - return ServerJoin; - }; -}; - -class MessageServerLeave : public Message { - public: - Message::MessageType messageType() const { - return ServerLeave; - }; -}; - -class MessagePlayerMute : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - unsigned int uiVictim; - bool bMute; - Message::MessageType messageType() const { - return PlayerMute; - }; -}; - -class MessagePlayerDeaf : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - unsigned int uiVictim; - bool bDeaf; - Message::MessageType messageType() const { - return PlayerDeaf; - }; -}; - -class MessagePlayerSelfMuteDeaf : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - bool bMute; - bool bDeaf; - Message::MessageType messageType() const { - return PlayerSelfMuteDeaf; - }; -}; - -class MessagePlayerKick : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - unsigned int uiVictim; - QString qsReason; - Message::MessageType messageType() const { - return PlayerKick; - }; -}; - -class MessagePlayerBan : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - unsigned int uiVictim; - QString qsReason; - Message::MessageType messageType() const { - return PlayerBan; - }; -}; - -class MessagePlayerMove : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - unsigned int uiVictim; - int iChannelId; - Message::MessageType messageType() const { - return PlayerMove; - }; -}; - -class MessagePlayerRename : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QString qsName; - Message::MessageType messageType() const { - return PlayerRename; - }; -}; - -class MessageChannelAdd : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iId; - int iParent; - QString qsName; - Message::MessageType messageType() const { - return ChannelAdd; - }; -}; - -class MessageChannelRemove : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iId; - Message::MessageType messageType() const { - return ChannelRemove; - }; -}; - -class MessageChannelMove : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iId; - int iParent; - Message::MessageType messageType() const { - return ChannelMove; - }; -}; - -class MessageChannelLink : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - enum LinkType { - Link, Unlink, UnlinkAll, PushLink, PushUnlink - }; - int iId; - LinkType ltType; - QList qlTargets; - Message::MessageType messageType() const { - return ChannelLink; - }; -}; - -class MessageChannelRename : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iId; - QString qsName; - Message::MessageType messageType() const { - return ChannelRename; - }; -}; - -class MessageChannelDescUpdate : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iId; - QString qsDesc; - Message::MessageType messageType() const { - return ChannelDescUpdate; - }; -}; - -class MessageServerBanList : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - bool bQuery; - QList > qlBans; - Message::MessageType messageType() const { - return ServerBanList; - }; -}; - -class MessageTextMessage : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - unsigned int uiVictim; - int iChannel; - bool bTree; - QString qsMessage; - Message::MessageType messageType() const { - return TextMessage; - }; -}; - -class MessagePermissionDenied : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QString qsReason; - Message::MessageType messageType() const { - return PermissionDenied; - }; -}; - -class MessageEditACL : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - struct GroupStruct { - QString qsName; - bool bInherited; - bool bInherit; - bool bInheritable; - QSet qsAdd; - QSet qsRemove; - QSet qsInheritedMembers; - }; - - struct ACLStruct { - bool bApplyHere; - bool bApplySubs; - bool bInherited; - int iPlayerId; - QString qsGroup; - ChanACL::Permissions pAllow; - ChanACL::Permissions pDeny; - }; - - int iId; - bool bQuery; - bool bInheritACL; - QList groups; - QList acls; - Message::MessageType messageType() const { - return EditACL; - }; -}; - -PacketDataStream & operator<< (PacketDataStream & out, const MessageEditACL::GroupStruct &gs); -PacketDataStream & operator>> (PacketDataStream & in, MessageEditACL::GroupStruct &gs); -PacketDataStream & operator<< (PacketDataStream & out, const MessageEditACL::ACLStruct &gs); -PacketDataStream & operator>> (PacketDataStream & in, MessageEditACL::ACLStruct &gs); - -class MessageQueryUsers : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QList qlIds; - QList qlNames; - Message::MessageType messageType() const { - return QueryUsers; - }; - bool isValid() const; -}; - -class MessageTexture : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - int iPlayerId; - QByteArray qbaTexture; - Message::MessageType messageType() const { - return PlayerTexture; - } -}; - -class MessageCryptSetup : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QByteArray qbaKey, qbaClientNonce, qbaServerNonce; - Message::MessageType messageType() const { - return CryptSetup; - } - bool isValid() const; -}; - -class MessageCryptSync : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QByteArray qbaNonce; - Message::MessageType messageType() const { - return CryptSync; - } - bool isValid() const; -}; - -class MessageContextAddAction : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - enum Context { CtxServer = 0x01, CtxChannel = 0x02, CtxPlayer = 0x04 }; - QString qsAction; - QString qsText; - Context ctx; - Message::MessageType messageType() const { - return ContextAddAction; - } - bool isValid() const; -}; - -class MessageContextAction : public Message { - protected: - void saveStream(PacketDataStream &) const; - void restoreStream(PacketDataStream &); - public: - QString qsAction; - unsigned int uiVictim; - int iChannel; - Message::MessageType messageType() const { - return ContextAction; - } - bool isValid() const; -}; - -class MessageHandler { - protected: - virtual void msgSpeex(Connection *, MessageSpeex *) = 0; - virtual void msgServerAuthenticate(Connection *, MessageServerAuthenticate *) = 0; - virtual void msgPing(Connection *, MessagePing *) = 0; - virtual void msgPingStats(Connection *, MessagePingStats *) = 0; - virtual void msgServerReject(Connection *, MessageServerReject *) = 0; - virtual void msgServerSync(Connection *, MessageServerSync *) = 0; - virtual void msgServerJoin(Connection *, MessageServerJoin *) = 0; - virtual void msgServerLeave(Connection *, MessageServerLeave *) = 0; - virtual void msgPlayerMute(Connection *, MessagePlayerMute *) = 0; - virtual void msgPlayerDeaf(Connection *, MessagePlayerDeaf *) = 0; - virtual void msgPlayerSelfMuteDeaf(Connection *, MessagePlayerSelfMuteDeaf *) = 0; - virtual void msgPlayerKick(Connection *, MessagePlayerKick *) = 0; - virtual void msgPlayerBan(Connection *, MessagePlayerBan *) = 0; - virtual void msgPlayerMove(Connection *, MessagePlayerMove *) = 0; - virtual void msgPlayerRename(Connection *, MessagePlayerRename *) = 0; - virtual void msgChannelAdd(Connection *, MessageChannelAdd *) = 0; - virtual void msgChannelRemove(Connection *, MessageChannelRemove *) = 0; - virtual void msgChannelMove(Connection *, MessageChannelMove *) = 0; - virtual void msgChannelLink(Connection *, MessageChannelLink *) = 0; - virtual void msgChannelRename(Connection *, MessageChannelRename *) = 0; - virtual void msgChannelDescUpdate(Connection *, MessageChannelDescUpdate *) = 0; - virtual void msgServerBanList(Connection *, MessageServerBanList *) = 0; - virtual void msgTextMessage(Connection *, MessageTextMessage *) = 0; - virtual void msgPermissionDenied(Connection *, MessagePermissionDenied *) = 0; - virtual void msgEditACL(Connection *, MessageEditACL *) = 0; - virtual void msgQueryUsers(Connection *, MessageQueryUsers *) = 0; - virtual void msgTexture(Connection *, MessageTexture *) = 0; - virtual void msgCryptSetup(Connection *, MessageCryptSetup *) = 0; - virtual void msgCryptSync(Connection *, MessageCryptSync *) = 0; - virtual void msgContextAddAction(Connection *, MessageContextAddAction *) = 0; - virtual void msgContextAction(Connection *, MessageContextAction *) = 0; - void dispatch(Connection *, Message *); - public: - virtual ~MessageHandler() { }; -}; - -#else -class Message; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Messages.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Messages.cpp --- mumble-1.2.3/src/mumble11x/Messages.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Messages.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,412 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "MainWindow.h" -#include "AudioWizard.h" -#include "AudioInput.h" -#include "ConnectDialog.h" -#include "Player.h" -#include "Channel.h" -#include "ACLEditor.h" -#include "BanEditor.h" -#include "Connection.h" -#include "ServerHandler.h" -#include "About.h" -#include "GlobalShortcut.h" -#include "VersionCheck.h" -#include "PlayerModel.h" -#include "AudioStats.h" -#include "Plugins.h" -#include "Log.h" -#include "Global.h" -#include "Database.h" -#include "ViewCert.h" - - -void MainWindow::msgServerJoin(Connection *, MessageServerJoin *msg) { - ClientPlayer *p = pmModel->addPlayer(msg->uiSession, msg->qsPlayerName); - p->iId = msg->iId; - g.l->log(Log::PlayerJoin, MainWindow::tr("Joined server: %1.").arg(p->qsName)); -} - -#define MSG_INIT \ - ClientPlayer *pSrc=ClientPlayer::get(msg->uiSession); \ - Q_UNUSED(pSrc); - -#define VICTIM_INIT \ - ClientPlayer *pDst=ClientPlayer::get(msg->uiVictim); \ - if (! pDst) { \ - qWarning("MainWindow: Message for nonexistant victim %d.", msg->uiVictim); \ - return; \ - } - -void MainWindow::msgServerLeave(Connection *, MessageServerLeave *msg) { - MSG_INIT; - - if (! pSrc) - return; - - g.l->log(Log::PlayerLeave, MainWindow::tr("Left server: %1.").arg(pSrc->qsName)); - pmModel->removePlayer(pSrc); -} - -void MainWindow::msgServerBanList(Connection *, MessageServerBanList *msg) { - if (banEdit) { - banEdit->reject(); - delete banEdit; - banEdit = NULL; - } - banEdit = new BanEditor(msg, this); - banEdit->show(); - -} - -void MainWindow::msgSpeex(Connection *, MessageSpeex *) { -} - -void MainWindow::msgPlayerSelfMuteDeaf(Connection *, MessagePlayerSelfMuteDeaf *msg) { - MSG_INIT; - - if (! pSrc) - return; - - pSrc->setSelfMuteDeaf(msg->bMute, msg->bDeaf); - - if (msg->uiSession == g.uiSession || ! g.uiSession) - return; - if (pSrc->cChannel != ClientPlayer::get(g.uiSession)->cChannel) - return; - - QString name = pSrc->qsName; - if (msg->bMute && msg->bDeaf) - g.l->log(Log::OtherSelfMute, MainWindow::tr("%1 is now muted and deafened.").arg(name)); - else if (msg->bMute) - g.l->log(Log::OtherSelfMute, MainWindow::tr("%1 is now muted.").arg(name)); - else - g.l->log(Log::OtherSelfMute, MainWindow::tr("%1 is now unmuted.").arg(name)); -} - -void MainWindow::msgPlayerMute(Connection *, MessagePlayerMute *msg) { - MSG_INIT; - VICTIM_INIT; - - pDst->setMute(msg->bMute); - - if (!g.uiSession || pDst->cChannel != ClientPlayer::get(g.uiSession)->cChannel) - return; - - QString vic = pDst->qsName; - QString admin = pSrc ? pSrc->qsName : MainWindow::tr("server"); - - if (msg->uiVictim == g.uiSession) { - g.l->log(Log::YouMuted, msg->bMute ? MainWindow::tr("You were muted by %1.").arg(admin) : MainWindow::tr("You were unmuted by %1.").arg(admin)); - updateTrayIcon(); - } else { - g.l->log((msg->uiSession == g.uiSession) ? Log::YouMutedOther : Log::OtherMutedOther, msg->bMute ? MainWindow::tr("%1 muted by %2.").arg(vic).arg(admin) : MainWindow::tr("%1 unmuted by %2.").arg(vic).arg(admin)); - } -} - -void MainWindow::msgPlayerDeaf(Connection *, MessagePlayerDeaf *msg) { - MSG_INIT; - VICTIM_INIT; - - pDst->setDeaf(msg->bDeaf); - - if (!g.uiSession || pDst->cChannel != ClientPlayer::get(g.uiSession)->cChannel) - return; - - QString vic = pDst->qsName; - QString admin = pSrc ? pSrc->qsName : MainWindow::tr("server"); - - if (msg->uiVictim == g.uiSession) { - g.l->log(Log::YouMuted, msg->bDeaf ? MainWindow::tr("You were deafened by %1.").arg(admin) : MainWindow::tr("You were undeafened by %1.").arg(admin)); - updateTrayIcon(); - } else { - g.l->log((msg->uiSession == g.uiSession) ? Log::YouMutedOther : Log::OtherMutedOther, msg->bDeaf ? MainWindow::tr("%1 deafened by %2.").arg(vic).arg(admin) : MainWindow::tr("%1 undeafened by %2.").arg(vic).arg(admin)); - } -} - -void MainWindow::msgPlayerKick(Connection *, MessagePlayerKick *msg) { - MSG_INIT; - VICTIM_INIT; - QString admin = pSrc ? pSrc->qsName : QLatin1String("server"); - - if (msg->uiVictim == g.uiSession) { - g.l->log(Log::YouKicked, MainWindow::tr("You were kicked from the server by %1: %2.").arg(admin).arg(msg->qsReason)); - g.l->setIgnore(Log::ServerDisconnected, 1); - } else { - g.l->setIgnore(Log::PlayerLeave, 1); - g.l->log((msg->uiSession == g.uiSession) ? Log::YouKicked : Log::PlayerKicked, MainWindow::tr("%3 was kicked from the server by %1: %2.").arg(admin).arg(msg->qsReason).arg(pDst->qsName)); - } -} - -void MainWindow::msgPlayerBan(Connection *, MessagePlayerBan *msg) { - MSG_INIT; - VICTIM_INIT; - QString admin = pSrc ? pSrc->qsName : QLatin1String("server"); - if (msg->uiVictim == g.uiSession) { - g.l->log(Log::YouKicked, MainWindow::tr("You were kicked and banned from the server by %1: %2.").arg(admin).arg(msg->qsReason)); - g.l->setIgnore(Log::ServerDisconnected, 1); - } else { - g.l->setIgnore(Log::PlayerLeave, 1); - g.l->log((msg->uiSession == g.uiSession) ? Log::YouKicked : Log::PlayerKicked, MainWindow::tr("%3 was kicked and banned from the server by %1: %2.").arg(admin).arg(msg->qsReason).arg(pDst->qsName)); - } -} - -void MainWindow::msgPlayerMove(Connection *, MessagePlayerMove *msg) { - MSG_INIT; - VICTIM_INIT; - - Channel *c = Channel::get(msg->iChannelId); - if (!c) { - qWarning("MessagePlayerMove for unknown channel."); - c = Channel::get(0); - } - - bool log = true; - if ((msg->uiVictim == g.uiSession) && (msg->uiSession == msg->uiVictim)) - log = false; - if (g.uiSession == 0) - log = false; - - QString pname = pDst->qsName; - QString admin = pSrc ? pSrc->qsName : QLatin1String("server"); - - Channel *old = pDst->cChannel; - - if (log) { - if (g.uiSession == msg->uiVictim) { - g.l->log(Log::ChannelJoin, MainWindow::tr("You were moved to %1 by %2.").arg(c->qsName).arg(admin)); - } else if (pDst->cChannel == ClientPlayer::get(g.uiSession)->cChannel) { - if (pDst == pSrc || (!pSrc)) - g.l->log(Log::ChannelLeave, MainWindow::tr("%1 left channel.").arg(pname)); - else - g.l->log(Log::ChannelLeave, MainWindow::tr("%1 moved out by %2 to %3.").arg(pname).arg(admin).arg(c->qsName)); - } - } - - pmModel->movePlayer(pDst, c); - - if (log && (g.uiSession != msg->uiVictim) && (pDst->cChannel == ClientPlayer::get(g.uiSession)->cChannel)) { - if (pDst == pSrc || (!pSrc)) - g.l->log(Log::ChannelJoin, MainWindow::tr("%1 entered channel.").arg(pname)); - else - g.l->log(Log::ChannelJoin, MainWindow::tr("%1 moved in by %2 from %3.").arg(pname).arg(admin).arg(old->qsName)); - } -} - -void MainWindow::msgPlayerRename(Connection *, MessagePlayerRename *msg) { - MSG_INIT; - if (pSrc) - pmModel->renamePlayer(pSrc, msg->qsName); -} - -void MainWindow::msgChannelAdd(Connection *, MessageChannelAdd *msg) { - if (msg->qsName.isEmpty()) - return; - - if (msg->iId == 0) { - pmModel->renameChannel(Channel::get(0), msg->qsName); - return; - } - - Channel *p = Channel::get(msg->iParent); - if (p) - pmModel->addChannel(msg->iId, p, msg->qsName); -} - -void MainWindow::msgChannelRemove(Connection *, MessageChannelRemove *msg) { - if (msg->iId == 0) - return; - - Channel *c = Channel::get(msg->iId); - if (c) - pmModel->removeChannel(c); -} - -void MainWindow::msgChannelMove(Connection *, MessageChannelMove *msg) { - if (msg->iId == 0) - return; - - Channel *c = Channel::get(msg->iId); - Channel *p = Channel::get(msg->iParent); - if (!c || !p) - return; - - Channel *pp = p; - while (pp) { - if (pp == c) - return; - pp = pp->cParent; - } - if (c && p) - pmModel->moveChannel(c, p); -} - -void MainWindow::msgChannelRename(Connection *, MessageChannelRename *msg) { - if (msg->iId == 0) - return; - - Channel *c = Channel::get(msg->iId); - if (c && c->cParent) - pmModel->renameChannel(c, msg->qsName); -} - -void MainWindow::msgChannelDescUpdate(Connection *, MessageChannelDescUpdate *msg) { - Channel *c = Channel::get(msg->iId); - if (c) c->qsDesc=msg->qsDesc; -} - -void MainWindow::msgChannelLink(Connection *, MessageChannelLink *msg) { - Channel *c = Channel::get(msg->iId); - if (!c) - return; - - QList qlChans; - foreach(int id, msg->qlTargets) { - Channel *l = Channel::get(id); - if (l) - qlChans << l; - } - - switch (msg->ltType) { - case MessageChannelLink::Link: - pmModel->linkChannels(c, qlChans); - break; - case MessageChannelLink::Unlink: - pmModel->unlinkChannels(c, qlChans); - break; - case MessageChannelLink::UnlinkAll: - pmModel->unlinkAll(c); - break; - default: - qFatal("Unknown link message"); - } -} - -void MainWindow::msgServerAuthenticate(Connection *, MessageServerAuthenticate *) { -} - -void MainWindow::msgServerReject(Connection *, MessageServerReject *msg) { - rtLast = msg->rtType; - g.l->log(Log::ServerDisconnected, MainWindow::tr("Server connection rejected: %1.").arg(msg->qsReason)); - g.l->setIgnore(Log::ServerDisconnected, 1); -} - -void MainWindow::msgPermissionDenied(Connection *, MessagePermissionDenied *msg) { - g.l->log(Log::PermissionDenied, MainWindow::tr("Denied: %1.").arg(msg->qsReason)); -} - -void MainWindow::msgServerSync(Connection *, MessageServerSync *msg) { - MSG_INIT; - g.iMaxBandwidth = msg->iMaxBandwidth; - g.uiSession = msg->uiSession; - g.l->clearIgnore(); - g.l->log(Log::Information, msg->qsWelcomeText); - pmModel->ensureSelfVisible(); - pmModel->recheckLinks(); - - AudioInputPtr ai = g.ai; - if (ai) { - int bw = ai->getMaxBandwidth(); - if (bw > msg->iMaxBandwidth) { - g.l->log(Log::Information, MainWindow::tr("Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted.").arg(msg->iMaxBandwidth / 125)); - } - ai->setMaxBandwidth(g.iMaxBandwidth); - } - - findDesiredChannel(); -} - -void MainWindow::msgTextMessage(Connection *, MessageTextMessage *msg) { - MSG_INIT; - const QString &name = pSrc ? pSrc->qsName : tr("Server", "message from"); - g.l->log(Log::TextMessage, MainWindow::tr("From %1: %2").arg(name).arg(msg->qsMessage), - MainWindow::tr("Message from %1").arg(name)); -} - -void MainWindow::msgEditACL(Connection *, MessageEditACL *msg) { - if (aclEdit) { - aclEdit->reject(); - delete aclEdit; - aclEdit = NULL; - } - aclEdit = new ACLEditor(msg, this); - aclEdit->show(); -} - -void MainWindow::msgQueryUsers(Connection *, MessageQueryUsers *msg) { - if (aclEdit) - aclEdit->returnQuery(msg); -} - -void MainWindow::msgPing(Connection *, MessagePing *) { -} - -void MainWindow::msgPingStats(Connection *, MessagePingStats *) { -} - -void MainWindow::msgTexture(Connection *, MessageTexture *) { -} - -void MainWindow::msgCryptSetup(Connection *, MessageCryptSetup *msg) { - ConnectionPtr c= g.sh->cConnection; - if (! c) - return; - c->csCrypt.setKey(reinterpret_cast(msg->qbaKey.constData()), reinterpret_cast(msg->qbaClientNonce.constData()), reinterpret_cast(msg->qbaServerNonce.constData())); -} - -void MainWindow::msgCryptSync(Connection *, MessageCryptSync *msg) { - ConnectionPtr c= g.sh->cConnection; - if (! c) - return; - if (msg->qbaNonce.isEmpty()) { - msg->qbaNonce = QByteArray(reinterpret_cast(c->csCrypt.encrypt_iv), AES_BLOCK_SIZE); - g.sh->sendMessage(msg); - } else if (msg->qbaNonce.size() == AES_BLOCK_SIZE) { - c->csCrypt.uiResync++; - memcpy(c->csCrypt.decrypt_iv, msg->qbaNonce.constData(), AES_BLOCK_SIZE); - } -} - -void MainWindow::msgContextAction(Connection *, MessageContextAction *) { -} - -void MainWindow::msgContextAddAction(Connection *, MessageContextAddAction *msg) { - QAction *a = new QAction(msg->qsText, g.mw); - a->setData(msg->qsAction); - connect(a, SIGNAL(triggered()), this, SLOT(context_triggered())); - if (msg->ctx & MessageContextAddAction::CtxServer) - qlServerActions.append(a); - if (msg->ctx & MessageContextAddAction::CtxPlayer) - qlPlayerActions.append(a); - if (msg->ctx & MessageContextAddAction::CtxChannel) - qlChannelActions.append(a); -} diff -Nru mumble-1.2.3/src/mumble11x/mumble11x.plist mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble11x.plist --- mumble-1.2.3/src/mumble11x/mumble11x.plist 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble11x.plist 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ - - - - - CFBundleExecutable - Mumble11x - CFBundleGetInfoString - An open source, low-latency, high quality voice chat software primarily intended for use while gaming. - CFBundleIconFile - mumble.icns - CFBundleIdentifier - net.sourceforge.mumble.Mumble11x - CFBundlePackageType - APPL - CFBundleSignature - MBLE - CFBundleVersion - 1.1.x - NSHumanReadableCopyright - Copyright (c) 2005-2010 Thorvald Natvig <slicer@users.sourceforge.net> - MumbleOverlayLibrary - Contents/Overlay/libmumbleoverlay.dylib - - diff -Nru mumble-1.2.3/src/mumble11x/mumble11x.pro mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble11x.pro --- mumble-1.2.3/src/mumble11x/mumble11x.pro 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble11x.pro 1970-01-01 00:00:00.000000000 +0000 @@ -1,245 +0,0 @@ -include(../../compiler.pri) - -TEMPLATE = app -QT *= network sql opengl xml -TARGET = mumble11x -HEADERS = BanEditor.h ACLEditor.h Log.h AudioConfigDialog.h AudioStats.h AudioInput.h AudioOutput.h MainWindow.h ServerHandler.h About.h ConnectDialog.h GlobalShortcut.h TextToSpeech.h Settings.h Database.h VersionCheck.h Global.h PlayerModel.h Audio.h ConfigDialog.h Plugins.h LookConfig.h AudioWizard.h ViewCert.h TextMessage.h NetworkConfig.h LCD.h Usage.h ConfigWidget.h SocketRPC.h -SOURCES = BanEditor.cpp ACLEditor.cpp Log.cpp AudioConfigDialog.cpp AudioStats.cpp AudioInput.cpp AudioOutput.cpp main.cpp MainWindow.cpp ServerHandler.cpp About.cpp ConnectDialog.cpp Settings.cpp Database.cpp VersionCheck.cpp Global.cpp PlayerModel.cpp Audio.cpp ConfigDialog.cpp Plugins.cpp LookConfig.cpp AudioWizard.cpp ViewCert.cpp Messages.cpp TextMessage.cpp GlobalShortcut.cpp NetworkConfig.cpp LCD.cpp Usage.cpp ConfigWidget.cpp SocketRPC.cpp -SOURCES *= ../Timer.cpp ../CryptState.cpp ../OSInfo.cpp -HEADERS *= Message.h Player.h Channel.h ACL.h Connection.h Group.cpp -SOURCES *= Message.cpp Player.cpp Channel.cpp ACL.cpp Connection.cpp -SOURCES *= smallft.cpp -DIST *= ../../icons/mumble.ico licenses.h smallft.h ../../icons/mumble.xpm murmur_pch.h mumble11x.plist -RESOURCES *= mumble.qrc -FORMS *= ConfigDialog.ui MainWindow.ui ConnectDialog.ui BanEditor.ui ACLEditor.ui Plugins.ui LookConfig.ui AudioInput.ui AudioOutput.ui Log.ui TextMessage.ui AudioStats.ui NetworkConfig.ui LCD.ui GlobalShortcut.ui -TRANSLATIONS = mumble_en.ts mumble_es.ts mumble_de.ts mumble_fr.ts mumble_it.ts mumble_ru.ts mumble_cs.ts mumble_ja.ts mumble_pl.ts mumble_zh_CN.ts mumble_zh_TW.ts -PRECOMPILED_HEADER = mumble_pch.hpp - -VERSION = 1.1.8 -CONFIG += qt thread debug_and_release warn_on -DEFINES *= MUMBLE_VERSION_STRING=1.1.8 -DEFINES *= MUMBLE_VERSION="1.1.x" -DEFINES *= COMPAT_CLIENT - -INCLUDEPATH += .. - -CONFIG(debug, debug|release) { - CONFIG += console - QMAKE_LIBDIR += ../../debug - DESTDIR = ../../debug -} - -CONFIG(release, debug|release) { - QMAKE_LIBDIR += ../../release - DESTDIR = ../../release -} - - -isEmpty(QMAKE_LRELEASE) { - QMAKE_QMAKE_BASE = $$basename(QMAKE_QMAKE) - QMAKE_LRELEASE = $$dirname(QMAKE_QMAKE)/$$replace(QMAKE_QMAKE_BASE,qmake,lrelease) -} - -unix:!CONFIG(bundled-speex):system(pkg-config --atleast-version=1.2 speexdsp) { - CONFIG *= no-bundled-speex -} - -CONFIG(no-bundled-speex) { - PKGCONFIG *= speex speexdsp -} - -!CONFIG(no-bundled-speex) { - INCLUDEPATH *= ../../speex/include ../../speex/libspeex ../../speexbuild - LIBS *= -lspeex -} - -CONFIG(no-crash-report) { - DEFINES *= NO_CRASH_REPORT -} else { - HEADERS *= CrashReporter.h - SOURCES *= CrashReporter.cpp -} - -!win32 { - QMAKE_CXXFLAGS *= -Wall -Wextra -} - -!win32:!CONFIG(no-dbus) { - CONFIG *= dbus -} - -win32 { - RC_FILE = mumble.rc - HEADERS *= GlobalShortcut_win.h - SOURCES *= GlobalShortcut_win.cpp TextToSpeech_win.cpp os_win.cpp - LIBS *= -l"$$(DXSDK_DIR)Lib/x86/dxguid" -l"$$(DXSDK_DIR)Lib/x86/dinput8" -lsapi -lole32 -lws2_32 -llibeay32 -ladvapi32 -llibogg -ldbghelp - LIBS *= -ldelayimp -lQwave -delayload:Qwave.DLL - - QMAKE_LIBDIR *= "$$OPENSSL_PATH/lib" "$$LIBOGG_PATH/lib" - DEFINES *= WIN32 - INCLUDEPATH *= "$$OPENSSL_PATH/include" "$$LIBOGG_PATH/include" - !CONFIG(no-asio) { - CONFIG *= asio - } - !CONFIG(no-directsound) { - CONFIG *= directsound - } - !CONFIG(no-wasapi) { - CONFIG *= wasapi - } -} - -unix { - UNAME=$$system(uname -s) - - HAVE_PULSEAUDIO=$$system(pkg-config --modversion --silence-errors libpulse) - HAVE_PORTAUDIO=$$system(pkg-config --modversion --silence-errors portaudio-2.0) - - !isEmpty(HAVE_PORTAUDIO):!CONFIG(no-portaudio) { - CONFIG *= portaudio - } - - !isEmpty(HAVE_PULSEAUDIO):!CONFIG(no-pulseaudio) { - CONFIG -= portaudio - CONFIG *= pulseaudio - } - - !CONFIG(no-bundled-speex) { - QMAKE_CFLAGS *= -I../../speex/include -I../../speexbuild - QMAKE_CXXFLAGS *= -I../../speex/include -I../../speexbuild - QMAKE_CXXFLAGS_RELEASE *= -I../../speex/include -I../../speexbuild - QMAKE_CXXFLAGS_DEBUG *= -I../../speex/include -I../../speexbuild - } - - CONFIG *= link_pkgconfig - - PKGCONFIG *= openssl ogg - macx { - TARGET = Mumble11x - ICON = ../../icons/mumble.icns - QMAKE_INFO_PLIST = mumble11x.plist - QMAKE_PKGINFO_TYPEINFO = MBLE - - HEADERS *= GlobalShortcut_macx.h - SOURCES *= TextToSpeech_macx.cpp GlobalShortcut_macx.cpp os_macx.mm - - # CoreAudio - !isEmpty(HAVE_PORTAUDIO) { - CONFIG -= portaudio - } - LIBS += -framework CoreAudio -framework AudioUnit -framework AudioToolbox - SOURCES += CoreAudio.cpp - HEADERS += CoreAudio.h - } else { - HEADERS *= GlobalShortcut_unix.h - SOURCES *= GlobalShortcut_unix.cpp TextToSpeech_unix.cpp - PKGCONFIG *= x11 - LIBS *= -lrt -lXi - - !CONFIG(no-oss) { - CONFIG *= oss - } - - !CONFIG(no-alsa):contains(UNAME, Linux) { - CONFIG *= alsa - } - - !CONFIG(no-speechd) { - CONFIG *= speechd - } - - } -} - -alsa { - DEFINES *= USE_ALSA - PKGCONFIG *= alsa - HEADERS *= ALSAAudio.h - SOURCES *= ALSAAudio.cpp -} - -oss { - DEFINES *= USE_OSS - HEADERS *= OSS.h - SOURCES *= OSS.cpp - INCLUDEPATH *= /usr/lib/oss/include -} - -pulseaudio { - DEFINES *= USE_PULSEAUDIO - PKGCONFIG *= libpulse - HEADERS *= PulseAudio.h - SOURCES *= PulseAudio.cpp -} - -portaudio { - DEFINES *= USE_PORTAUDIO - PKGCONFIG *= portaudio-2.0 - HEADERS *= PAAudio.h - SOURCES *= PAAudio.cpp -} - -asio { - DEFINES *= USE_ASIO - HEADERS *= ASIOInput.h - SOURCES *= ASIOInput.cpp - FORMS *= ASIOInput.ui - INCLUDEPATH *= ../../asio/common ../../asio/host ../../asio/host/pc -} - -dbus { - DEFINES *= USE_DBUS - CONFIG *= qdbus - HEADERS *= DBus.h - SOURCES *= DBus.cpp -} - -speechd { - DEFINES *= USE_SPEECHD - LIBS *= -lspeechd -} - -directsound { - DEFINES *= USE_DIRECTSOUND - HEADERS *= DirectSound.h - SOURCES *= DirectSound.cpp - LIBS *= -ldsound -} - -wasapi { - DEFINES *= USE_WASAPI - HEADERS *= WASAPI.h - SOURCES *= WASAPI.cpp - LIBS *= -ldelayimp -lAVRT -delayload:AVRT.DLL -} - -DEFINES *= NO_UPDATE_CHECK - -!CONFIG(no-embed-qt-translations) { - QT_TRANSDIR = $$[QT_INSTALL_TRANSLATIONS]/ - QT_TRANSDIR = $$replace(QT_TRANSDIR,/,$${DIR_SEPARATOR}) - - QT_TRANSLATION_FILES_SRC *= qt_de.qm qt_es.qm qt_fr.qm qt_ja.qm qt_ja_JP.qm qt_ru.qm qt_pl.qm qt_zh_CN.qm qt_zh_TW.qm - - for(lang, QT_TRANSLATION_FILES_SRC):exists($$[QT_INSTALL_TRANSLATIONS]/$${lang}) { - QT_TRANSLATION_FILES *= $${lang} - } - - copytrans.output = ${QMAKE_FILE_NAME} - copytrans.commands = $$QMAKE_COPY $${QT_TRANSDIR}${QMAKE_FILE_NAME} ${QMAKE_FILE_OUT} - copytrans.input = QT_TRANSLATION_FILES - copytrans.CONFIG *= no_link target_predeps - - QMAKE_EXTRA_COMPILERS *= copytrans - - RESOURCES *= mumble_qt.qrc -} - -lrel.output = ${QMAKE_FILE_BASE}.qm -lrel.commands = $${QMAKE_LRELEASE} ${QMAKE_FILE_NAME} -lrel.input = TRANSLATIONS -lrel.CONFIG *= no_link target_predeps - -QMAKE_EXTRA_COMPILERS *= lrel - -include(../../symbols.pri) diff -Nru mumble-1.2.3/src/mumble11x/mumble_cs.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_cs.ts --- mumble-1.2.3/src/mumble11x/mumble_cs.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_cs.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,5638 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - upravit ACL pro %1 - - - - Active ACLs - Aktivní pravidla ACL - - - - Context - Kontext - - - - User/Group - Uživatel/skupina - - - - Permissions - Oprávnění - - - - Group - Skupina - - - - Members - Členové - - - - &Add - Přid&at - - - - &Remove - Odst&ranit - - - - &Up - Nahor&u - - - - &Down - &Ðolů - - - - Inherit ACLs - Zdědit ACL - - - - Applies to this channel - Použít pro tento kanál - - - - Applies to sub-channels - Použít pro kanály umístěné v tomto kanále - - - - User ID - Uživatelovo ID - - - - Deny - Zakázat - - - - Allow - Povolit - - - - Remove - Odstranit - - - - Inherit - Zdědit - - - - Inheritable - Děditelné - - - - Inherited - Zděděno - - - - Add - Přidat - - - - Add to Remove - Přidat k odstranění - - - - &Groups - S&kupiny - - - - &ACL - &ACL - - - &OK - &OK - - - Accept changes - Potvrdit změny - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Tímto tlačítkem přijmete současné skupiny/ALC a pošlete je na server. Pokud si omylem odstraníte pravomoci sami pro sebe, server je opětovně přidá. - - - &Cancel - Z&rušit - - - Reject changes - Odmítnout změny - - - This button will cancel all changes and closes the dialog without updating the ACLs or groups on the server. - Toto tlačítko způsobí, že okno bude zavřeno, aniž by se upravily záznamy ACL nebo skupin na serveru. - - - - List of entries - Seznam položek - - - - Inherit ACL of parent? - Zdědit ACL mateřského kanálu? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Nastavuje, jestli ACL nadřazeného kanálu bude aplikováno na tento objekt. Zděděny mohou být pouze položky označené v nadřazeném kanálu jako "aplikovat na podkanály". - - - - Add new entry - Přidat záznam - - - - This adds a new entry, initially set with no permissions and applying to all. - - - - - Remove entry - Odstranit záznam - - - - This removes the currently selected entry. - Odstraní vybraný záznam. - - - - Move entry up - Přesunout záznam nahoru - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Přesune záznam nahoru v seznamu. Protože záznamy pravidel jsou vyhodnocovány postupně, to může změnit privilegia přidělená uživateli. Nemůžete přesunout záznam nad zděděný záznam -- pokud je to opravdu potřeba pak musíte duplikovat zděděný záznam. - - - - Move entry down - Přesunout záznam dolů - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Přesune záznam dolů v seznamu. Protože záznamy pravidel jsou vyhodnocovány postupně, může to změnit privilegia přidělená uživateli. - - - - Entry should apply to this channel. - Entry should apply to this channel - Použít pro tento kanál - - - - This makes the entry apply to this channel. - Tímto se daná položka stane platnou pro tento kanál. - - - - Entry should apply to sub-channels. - Použít v podkanálech. - - - - This makes the entry apply to sub-channels of this channel. - Tímto se daná položka stane platnou pro podkanály tohoto kanálu. - - - - Group this entry applies to - - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - - - - - User this entry applies to - - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - - - - - Allow %1 - Povolit %1 - - - - Deny %1 - Odepřít %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Tímto se povolí privilegium %1. Pokud je privilegium zároveň přiděleno i odepřeno, považuje se za odepřené.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Odebere privilegium %1. Pokud je privilegium zároveň přiděleno i odepřeno, považuje se za odepřené.<br />%2 - - - - List of groups - Seznam skupin - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - Toto je seznam skupin definovaných pro tento kanál. Pro vytvoření nové skupiny jen napište její jméno a zmáčkněte klávesu Enter. - - - - Remove selected group - Odstranit vybranou skupinu - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Odstraní vybranou skupinu. Pokud byla skupina zděděna, nebude odstraněna ze seznamu, ale všechny místní informace o skupině budou smazány. - - - - Inherit group members from parent - Zdědit členy skupiny od rodiče - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Tímto se zdědí všichni členové skupiny z rodiče, pokud je skupina označena jako <i>děditelná</i> v nadřazeném kanálu. - - - - Make group inheritable to sub-channels - Učiní skupiny děditelnými pro podkanály - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Učiní tuto skupinu děditelnou do podkanálů. Pokud je skupina neděditelná, podkanály mohou zvovy vytvořit stejně pojmenovanou skupinu. - - - - Group was inherited from parent channel - Skupina byla zděděna od mateřského kanálu - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - - - - - Add member to group - Přidat člena do skupiny - - - Type in the name of a player you wish to add to the group and press enter. - Napište jméno uživatele, kterého chcete přidat do skupiny a zmáčkněte enter. - - - - Remove member from group - Odebrat uživatele ze skupiny - - - Type in the name of a player you wish to remove from the group and press enter. - Napište jméno uživatele, kterého chcete odstranit ze skupiny a zmáčkněte enter. - - - - Dialog - - - - - Type in the name of a player you wish to add to the group and click Add. - - - - - Type in the name of a player you wish to remove from the group and click Add. - - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - Otevírání zvoleného zvukového vstupu selhalo. Nebude tedy snímán zvuk ze žádného mikrofonu, - - - - Default ALSA Card - - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - Otevírání zvukového výstupu selhalo: %1 - - - - Default ALSA Card - - - - - ALSAConfig - - Device selection - Výběr zařízení - - - Device to use for microphone - Zařízení, na kterém je mikrofon - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Nastavení zařízení pro použití aplikací Mumble. <i>default</i> (výchozí) je cokoliv je nakonfigurováno pomoci alsaconfigu, <i>hwplug</i> zařízení jsou specifická zvuková zařízení podporovaná ALSA mixerem a <i>hw</i> zařízní jsou pro přímý přístup na zařízení. Pokud vaše zvuková karta nepodporuje hw směšování, použití <i>hw</i> zařázení znemožní ostatním aplikacím používat tento zvukový výstup. - - - Device to use for speakers/headphones - Zařízení pro zvukový výstup (bedničky nebo sluchátka) - - - Input - Vstup - - - Output - Výstup - - - Output Options - Výstupní volby - - - Output Delay - Výstupní opoždění - - - Amount of data to buffer for ALSA - Velikost datového zásobníku pro ALSU - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Nastaví velikost dat pro výstupní zásobník. Zkoušejte různé hodnoty a nastavte to na nejmenší hodnotu, která nezpůsobuje rychlé cvakání ve zvuku. - - - ALSA - ALSA - - - %1ms - %1ms - - - - ASIOConfig - - - Device selection - Výběr zařízení - - - - Capabilities - - - - - Channels - - - - - Configure input channels - - - - - Device to use for microphone - Zařízení, na kterém je mikrofon - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - - - - - Device - Zařízení - - - - &Query - - - - - Query selected device - - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - - - - - &Configure - - - - - Configure selected device - - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - - - - - Driver name - - - - - Microphone - Mikrofon - - - - <- - - - - - -> - - - - - Unused - - - - - Speakers - Bedničky - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - - - - - - Failed to instantiate ASIO driver - - - - - ASIO - - - - - Form - - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - - - - - Opening selected ASIO device failed. No input will be done. - - - - - AboutDialog - - <h3>Mumble v%1</h3><p>Copyright 2005-2008 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v%1</h3><p>Copyright 2005-2007 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Nástroj pro hlasovou skupinovou komunikaci.</b></p><p>Překlad do češtiny v roce 2007 připravil David Pravec, alekibango@danix.org.</p> -<p><tt>http://mumble.sourceforge.net/</tt></p> - - - - &About Mumble - O &aplikaci Mumble - - - - &License - &Licenční ujednání - - - - OK - OK - - - - About Mumble - - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - - AboutSpeexDialog - - <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>O kodeku Speex</h3><p><tt>http://www.speex.org/</tt></p><p>Tento program používá Speex verze %1</p><p>Speex je použit pro omezení ozvěny, pro redukci šumu, <br />pro detekování hlasové aktivity a pro kompresi řeči</p> - - - - OK - OK - - - - About Speex - - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - - - - - AudioConfigDialog - - Interfaces - Rozhraní - - - Transmission - Přenos - - - Compression - Komprese - - - Jitter Buffer - Zásobník pro potlačení cvakání - - - Loopback Test - Testování místním propojením do smyčky - - - Input - Vstup - - - Input method for audio - Vstupní metoda pro audio - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Toto je vstupní metoda pro zvuk.</b><br />Asi budete chtít použít ALSA nebo DirectSound. - - - Output - Výstup - - - Output method for audio - Výstupní metoda pro zvuk - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. - - - Continuous - Stále - - - Voice Activity - Při hlasové aktivitě - - - Push To Talk - Mluvení pouze na stisk tlačítka - - - Transmit - Vysílání - - - When to transmit your speech - Kdy vysílat Vaši řeč - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - Nastaví, kdy bude Vaše řeč přenášena do internetu.</b><br /><i>Stále</i> - neustálé vysílání<br /><i>Při hlasové aktivitě</i> - když je detekována hlasová aktivita .<br /><i>Mluvení na stisk tlačítka</i> - mluvení je přenášeno, pouze když držíte stisknutou nadefinovanou klávesu pro mluvení. - - - Voice Hold - Max. prodleva mezi větami - - - How long to keep transmitting after silence - Jak dlouho se ještě vysílá po ukončení hlasové aktivity - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Nastaví, jak dlouho po ukončení hlasových aktivit zůstane vysílání aktivní.</b><br /> Nastavte na vyšší hodnotu, pokud je vaše vysílání přerušováno mezi větami (což je vidět i vizuálně na ikonce vedle vašeho jména).<br />Toto nastavení má smysl pouze pokud je použito vysílání při hlasové aktivitě. - - - Audio per packet - Audio/blok - - - How many audio frames to send per packet - Množství úseků zvuku odeslaných v jednom bloku - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Vybere kolik úseků zvuku bude zasíláno v jednom bloku dat.</b><br />Zvětšením této hodnoty se zvětší zpoždění v komunikaci, ale také bude efektivnější využití šířky pásma. - - - PTT Audio cue - Zvukový signál na počátku a konci vysílání - - - Audible audio cue when push-to-talk pressed and released - Slyšitelný zvuk signalizující každý začátek a konec vysílání - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Zahraje krátký signál, když někdo začíná a končí vysílání.</b> - - - Use TCP mode - Použít TCP režim - - - Use TCP Compatibility mode - Použít TCP režim pro zvýšení kompatibility - - - <b>Enable TCP Compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Použít TCP režim</b><br />TCP komunikace se serverem zvýší zatížení linky a může způsobit znatelné přestávky v komunikaci, takže by měl být použit pouze pokud výchozí režim (UDP) nemůže fungovat. - - - Automatic Reconnect - Automaticky znovu přihlásit - - - Reconnect when disconnected - Přihlásit zpátky na server, pokud došlo k výpadku spojení - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Automatické připojení</b>.<br />Pokud se ztratí spojení se serverem, Mumble se pokusí automaticky spojení obnovit každých 10 sekund. - - - Maximum bandwidth used for sent audio - Maximální šířka pásma pro zasílané audio - - - Outgoing Bitrate - Výstupní šířka pásma - - - Quality - Kvalita - - - Quality of compression (peak bandwidth) - Kvalita komprese (maximální šířka pásma) - - - Complexity - Síla komprese - - - Complexity of compression (CPU) - Síla komprese (zvedne zatížení CPU) - - - Amp - Zesílení - - - Maximum amplification of input sound - Maximální zesílení vstupního audio signálu - - - Default Jitter Buffer - Výchozí zásobník pro omezení cvakání - - - How long to prebuffer on first packet - Kolik dat vložit do zásobníku pro první sadu vysílaných dat - - - None - Žádný - - - Local - Místní - - - Server - Server - - - Loopback - Místní smyčka - - - Desired loopback mode - Vyžadovaný režim smyčky - - - Packet Loss - Ztráta paketů - - - Packet loss for loopback mode - Ztráta paketů v režimu místní smyčky - - - Basic Audio - Zvuk - - - %1 ms - %1 ms - - - %1 s - %1 s - - - %1% - %1% - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Pozice %4, režie %3) - - - Volume - Hlasitost - - - - AudioInput - - - Form - - - - - Interface - - - - - System - Systém - - - - Input method for audio - Vstupní metoda pro audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - Device - Zařízení - - - - Input device for audio - Output method for audio - Výstupní metoda pro zvuk - - - - <b>This is the input device to use for audio.</b> - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. - - - - Cancel Echo - - - - - Transmission - Přenos - - - - &Transmit - - - - - When to transmit your speech - Kdy vysílat Vaši řeč - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - Nastaví, kdy bude Vaše řeč přenášena do internetu.</b><br /><i>Stále</i> - neustálé vysílání<br /><i>Při hlasové aktivitě</i> - když je detekována hlasová aktivita .<br /><i>Mluvení na stisk tlačítka</i> - mluvení je přenášeno, pouze když držíte stisknutou nadefinovanou klávesu pro mluvení. - - - - DoublePush Time - - - - - TextLabel - - - - Audible audio cue when push-to-talk pressed and released - Slyšitelný zvuk signalizující každý začátek a konec vysílání - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Zahraje krátký signál, když někdo začíná a končí vysílání.</b> - - - - PTT Audio cue - Zvukový signál na počátku a konci vysílání - - - - Use SNR based speech detection - - - - - Signal to Noise - - - - - Use Amplitude based speech detection. - - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - - - - - Amplitude - - - - - Voice &Hold - - - - - How long to keep transmitting after silence - Jak dlouho se ještě vysílá po ukončení hlasové aktivity - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Nastaví, jak dlouho po ukončení hlasových aktivit zůstane vysílání aktivní.</b><br /> Nastavte na vyšší hodnotu, pokud je vaše vysílání přerušováno mezi větami (což je vidět i vizuálně na ikonce vedle vašeho jména).<br />Toto nastavení má smysl pouze pokud je použito vysílání při hlasové aktivitě. - - - - Silence Below - - - - - Signal values below this counts as silence - - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - - - - - Speech Above - - - - - Signal values above this count as voice - - - - - Compression - Komprese - - - - &Quality - - - - - Quality of compression (peak bandwidth) - Kvalita komprese (maximální šířka pásma) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - - - - Complexity of compression (CPU) - Síla komprese (zvedne zatížení CPU) - - - - Audio per packet - Audio/blok - - - - How many audio frames to send per packet - Množství úseků zvuku odeslaných v jednom bloku - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Vybere kolik úseků zvuku bude zasíláno v jednom bloku dat.</b><br />Zvětšením této hodnoty se zvětší zpoždění v komunikaci, ale také bude efektivnější využití šířky pásma. - - - Maximum bandwidth used for sent audio - Maximální šířka pásma pro zasílané audio - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - - - - - Audio Processing - - - - - Noise Suppression - - - - - Noise suppression - - - - - Amplification - - - - - Maximum amplification of input sound - Maximální zesílení vstupního audio signálu - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - - - - - Current speech detection chance - - - - - Audible audio cue when push-to-talk is activated or deactivated - - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - Idle AutoMute - - - - - How long to remain idle before auto-mute. - - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - - - - - Maximum bandwidth used for sending audio - - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - - - - - AudioInputDialog - - - Continuous - Stále - - - - Voice Activity - Při hlasové aktivitě - - - - Push To Talk - Mluvení pouze na stisk tlačítka - - - - Audio Input - - - - - - %1 ms - %1 ms - - - - - Off - - - - - %1 s - %1 s - - - - -%1 dB - - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Pozice %4, režie %3) - - - - %1 min - - - - - AudioOutput - - - Form - - - - - Interface - - - - - System - Systém - - - - Output method for audio - Input method for audio - Vstupní metoda pro audio - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. - - - - Device - Zařízení - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - - - - - Audio Output - - - - - Default &Jitter Buffer - - - - - Safety margin for jitter buffer - - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - - - - - TextLabel - - - - - Volume - Hlasitost - - - - Volume of incoming speech - - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - - - - - Output Delay - Výstupní opoždění - - - - Amount of data to buffer - - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - - - - - Factor for sound volume decrease - - - - - Bloom - - - - - Loopback Test - Testování místním propojením do smyčky - - - - Delay Variance - - - - - Variance in packet latency - - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - - - - - Packet Loss - Ztráta paketů - - - - Packet loss for loopback mode - Ztráta paketů v režimu místní smyčky - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - - - - - &Loopback - - - - - Desired loopback mode - Vyžadovaný režim smyčky - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - - - - - Factor for sound volume increase - - - - - The connected "speakers" are actually headphones. - - - - - Minimum Distance - - - - - Minimum distance to player before sound volume decreases - - - - - Maximum Distance - - - - - Maximum distance, beyond which speech volume won't decrease - - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - - - - - Minimum Volume - - - - - What should the volume be at the maximum distance? - - - - - How much should sound volume increase for sources that are really close? - - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - - - - - Headphones - - - - - Other Applications - - - - - Volume of other applications during speech - - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - - - - - AudioOutputDialog - - - None - - - - - Local - Místní - - - - Server - Server - - - - Audio Output - - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1% - - - - %1ms - %1ms - - - - - %1m - %1% {1m?} - - - - AudioStats - - Mumble - Mumble - - - - Peak microphone level - Nejvyšší úroveň mikrofonu - - - - Peak speaker level - Nejvyšší úroveň výstupu - - - - Peak clean level - Nejnižší klidová úroveň - - - Microphone loudness - Hlasitost mikrofonu - - - Mic Signal-To-Noise - Poměr signál/šum - - - - Speech Probability - Pravděpodobnost řeči - - - Audio bitrate - Šířka datového pásma - - - - Peak power in last frame - Max. výkon v posledním časovém úseku - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. - Ukazuje maximální výkon v poslením úseku zvuku (20 ms). Této hodnoty si nemusíte všímat, pravděpodobně bude lepší sledovat <b>Hlasitost</b>, jejíž hodnota se nemění tak rychle. - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Ukazuje maximální výkon zvukového výstupu za poslední časový úsek (20 ms). Pokud nepoužíváte vícekanálovou samplovací metodu (jako např. ASIO) s nastavenými kanály pro výstup, pak tato hodnota bude rovna 0. Pokud máte takové nastavení a stále vidíte 0 zatímco jiné aplikace hrají zvuk, Vaše nastavení asi není v pořádku. - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. - Ukazuje hodnotu maximálního výkonu za poslední časový úsek (20ms) po veškerém zpracování. Ideálně tato hodnota bude -96 dB když nemluvíte. V realném světě tato hodnota může být např. -60 dB ve zvukovém studiu jinak běžně asi 20 dB. Pokud mluvíte, tato hodnota stoupne na asi -10 až -5 dB.<br /> Pokud používáte používáte potlačení ozvěny a tato hodnota stoupne na více než -15 dB když nemluvíte, pak Vaše nastavení nefunguje správně a dozajista budete obtěžovat ostatní uživatele ozvěnou. - - - - How close the current input level is to ideal - Jak blízko je současná hlasitost vstupu k ideální hlasitosti - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality - Ukazuje, jak blízko je současná úroveň hlasitosti k ideální. Pro nastavení úrovně mikrofonu, otevřete svou oblíbenou aplikaci pro nastavení zvuku, upravte úroveň záznamu a sledujte změny této hodnoty během mluvení.<br /><b>Mluvte nahlas podobně jako při nadšení nebo rozčilení</b><br /> Upravte hlasitost tak, aby byla hodnota blízká 100 %, ale aby nepřesahovala. Přesahování vede k degradaci kvality zvuku (limitací) a možnému cvakání. - - - - Signal-To-Noise ratio from the microphone - Poměr signál-šum mikrofonu (SNR) - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - Poměr signál-šum mikrofonu v posledním zvukovém rámci (20 ms). Ukazuje jak je hlas silný v porovnání se šumem.<br /> Pokud je tato hodnota pod 1.0, je šum silnější než hlas a kvalita nebude dobrá. <br /> Neexistuje žádný horní limit pro tuto hodnotu, ale neočekávejte hodnoty větší než 40 nebo 50, pokud nejste ve zvukovém studiu. - - - - Probability of speech - Pravděpodobnost, že je mluveno - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - Toto je pravděpodobnost, že poslední zvukový rámec (20 ms) byl řeč, ne jenom hluk okolního prostředí.<br /> Přenos při hlasová aktivitě závisí na tom, aby detekce proběhla správně. Trik je v tom, že uprostřed věty je vždy snadné rozpoznat řeč, problémem jsou pauzy mezi slovy a začátek mluvení. Je obtížné rozpoznat povzdech od písmenka 'h' na začátku slova.<br /> Pokud tohle je zobrazeno tučně, znamená to, že hlasová aktivita byla rozpoznána. - - - - Bitrate of last frame - Šířka zvukového pásma - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - Šířka zvukového pásma pro poslední časový úsek (20 ms). Tato hodnota se prúběžně automaticky mění, aby se ideálně přizpůsobila potřebám kvality. V nastavení je možno upravit šířku pásma. - - - - Power spectrum of input signal and noise estimate - Výkonové spektrum vstupního signálu a odhad šumu - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - Ukazuje výkonové spektrum aktuálního vstupu (červená čára) a aktuální odhad šumu (vyplněno modře).<br />Všechny amplitudy jsou vynásobeny 30x aby byly vidět zajímavé části (jak moc je signál větší než zvuk pro různé frekvence).<br /> To je pravděpodobně zajímavé, pokud zkoušíte vyladit šumové podmínky mikrofonu. V dobrých podmínkách bude dole pouze modrá čára. Pokud dosahuje modrá oblast do poloviny výšky grafu, znamená to, že zvuk je rušen silným šumem. - - - - Weights of the echo canceller - Intenzita snahy o odstranění ozvěny - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - - Audio Statistics - - - - - Input Levels - - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - - Signal Analysis - - - - - Microphone power - - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - Poměr zvuku k šumu - - - - Configuration feedback - - - - - Current audio bitrate - - - - - DoublePush interval - - - - - Speech Detection - - - - - Current speech detection chance - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - Signal and noise power spectrum - - - - - Echo Analysis - - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - Průvodce nastavením zvuku - - - - Introduction - Úvod - - - - Welcome to the Mumble Audio Wizard - Vítejte v průvodci pro nastavení zvuku pro aplikaci Mumble - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - Toto je průvodce nastavení zvuku pro Mumble. Pomůže vám správně nastavit vstupní úrovně na zvukové kartě a také vybrat vhodné parametry pro zpracování zvuku v Mumble. - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - Prosím všimněte si, že dokud je průvodce aktivní, zvuk bude používán pouze místně, abyste si jej mohli poslechnout - žádné zvuky se nepřenesou na případně připojený server. - - - - Finished - Dokončeno - - - - Enjoy using Mumble - Mumble je připraveno k použití - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - Blahopřejeme. Nyní si můžete plně užít zvukovou komunikaci s Mumble. - - - - Device selection - Výběr zařízení - - - - Selecting the input and output device to use with Mumble. - Vyberte vstupní a výstupní zvukové zařízení pro použití v Mumble. - - - - Input device - Vstupní zařízení - - - - This is the device your microphone is connected to. - Zařízení pro zvukový vstup (s mikrofonem). - - - - - System - Systém - - - - Input method for audio - Vstupní metoda pro audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro zaznamenávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. - - - - - Device - Zařízení - - - - Input device to use - Vstupní zařízení - - - - <b>Selects which sound card to use for audio input.</b> - <b>Vyberte zvukovou kartu, která bude snímat zvuk.</b> - - - - Output device - Výstupní zařízení - - - - This is the device your speakers or headphones are connected to. - Zařízení, ke kterému jsou připojeny sluchátka nebo mikrofon. - - - - Output method for audio - Výstupní metoda pro zvuk - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>To je metoda pro přehrávání zvuku.</b><br /> Pravděpodobně budete chtít použít ALSA nebo DirectSound. - - - - Output device to use - Výstupní zařízení - - - - <b>Selects which sound card to use for audio Output.</b> - <b>Vyberte zvukovou kartu, která bude přehrávat zvuk.</b> - - - - Volume tuning - Vyladění hlasitosti - - - - Tuning microphone hardware volume to optimal settings. - Nastavení hlasitosti mikrofonu pro optimální hlasitost. - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - Otevřete ovládací panel nastavení zvuku a jděte do nastavení záznamu. Ujistěte se, že mikrofon je vybrán jako aktivní vstup a má maximální hlasitost pro záznam. Pokud je k dispozici volba "Microphone boost", určitě ji zapněte. - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - Mluvte nahlas, jako kdybyste byl podrážděn nebo nadšen. Během mluvení nastavte hlasitost v ovladacim panelu zvuku tak, aby monitorovaný zvuk byl co možná nejvýše v modré a zelené oblastí, ale aby <b>nezasahoval</b> do oblasti rudé. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Nyní se uvolněte a mluvte potichu, jako kdyby byla pozdní noc a nechtěli jste nikoho rušit ve spánku. Nastavte táhlo pod tímto textem tak, aby monitorovaný zvuk byl v zelené oblasti při mluvení, ale aby bezpečně zůstal v modré oblasti, když jste potichu. - - - - Voice Activity Detection - Detekce hlasové aktivity - - - - Letting Mumble figure out when you're talking and when you're silent. - Mumble umí rozpoznávat mluvení a ticho. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Toto pomůže aplikaci Mumble rozpoznat, kdy mluvíte. První krok je výběr, podle které hodnoty se má provádět rozpoznání. - - - - Raw amplitude from input - Hlasitost vstupu - - - - Signal-To-Noise ratio - Poměr zvuku k šumu - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Nyní je potřeba nastavit následující dvě hodnoty. Prvních několik vašich slabik by mělo skončit v zelené oblasti (rozpoznáno jako řeč). Pokud mluvíte, měl by monitor zůstávat ve žluté (rozpoznáno jako pravděpopdobná řeč). Když nemluvíte, vše by mělo být v červené oblasti (to dozajista není řeč). - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - Nakonec je potřeba nastavit čas prodlevy, kdy je po skončení řeči stále ješte mikrofon zapnut a můžete tak během řeči udělat malou pauzu, aniž by byl přenos ukončen. - - - - Device tuning - Vyladění zařízení - - - - Changing hardware output delays to their minimum value. - Změní výstupní parametry zvuku tak, aby prodleva v komunikaci mohla být minimální. - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - Aby zpoždění při komunikaci mohlo být minimalizováno, je důležité nastavit výstupní vyrovnávací paměť co nejmenší. Mnohé zvukové karty hlásí, že neumějí používat malé velikosti vyrovnávací paměti, i když to jinak technicky je možné, takže jediná možnost, jak zjistit nejmenší vhodnou hodnotu je pokud a omyl. - - - You should hear a multitone chord. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. - Nyní byste měli slyšet zvukový akord. Změňte nastavení pod tímto textem na nejmenší hodnotu, která bude fungovat <b>bez</b> přerušování nebo cvakání ve zvuku. - - - - Amount of data to buffer. - Velikost zásobníku pro výstup. - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - To nastaví množství dat, která budou v výstupním zásobníku aplikace, než se pošlou na zvukový výstup. Experimentujte s rozdílnými hodnotami a nastavte si nejmenší hodnotu, která nezpůsobí přerušování nebo cvakání ve zvuku. - - - - %1ms - %1ms - - - - %1 s - %1 s - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - - - - - Audio path is %1ms long. - - - - - Audio path cannot be determined. Input not recognized. - - - - - Use echo cancellation - - - - - Cancel echo from headset or speakers. - - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - - - - - Enable positional audio - - - - - Allows positioning of sound. - - - - - This allows Mumble to use positional audio to place voices. - - - - - Positional Audio - - - - - Adjusting attenuation of positional audio. - - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - - - - - Use headphones - - - - - Use headphones instead of speakers. - - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - - - - - Submit anonymous statistics to the Mumble project - - - - - Push To Talk: - - - - - BanEditor - - - Mumble - Edit Bans - Mumble - Upravit bany (zákazy) - - - - 0.0.0.0 - 0.0.0.0 - - - - &Add - Přid&at - - - - &Update - &Obnovit - - - - &Remove - Odst&ranit - - - &OK - &Ok - - - Accept changes - Potvrdit změny - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Tímto tlačítkem přijmete nastavení skupin/ACL a pošlete je na server. Pokud si omylem odstraníte pravomoci sami pro sebe, server je opětovně přidá. - - - &Cancel - &Zrušit - - - Reject changes - Odmítnout změny - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - Toto tlačítko zruší veškeré právě provedené změny a uzavře dialog bez úpravy skupin a ACL na serveru. - - - - &Address - - - - - &Mask - - - - - ChanACL - - - W - Z - - - - T - P - - - - E - V - - - - S - M - - - - A - A - - - - M - U - - - - K - V - - - - C - T - - - - L - N - - - - None - Žádné - - - Write - Zápis - - - - Traverse - Průchod - - - - Enter - Vstup - - - - Speak - Mluvení - - - - AltSpeak - Alt_mluvení - - - - Mute/Deafen - Zakázat mluvení/poslouchání - - - - Move/Kick - Přesunout/Vykopnout - - - - Make channel - Vytvoření kanálu - - - - Link channel - Propojení kanálů - - - - This represents no privileges. - Toto představuje absenci jakýchkoliv privilegií. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Reprezentuje totální právo ke kanálu, včetně schopnosti změnit skupiny a ACL. Mít toto privilegium automaticky znamená mít všechna ostatní práva. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Reprezentuje povolení procházet kanálem. Pokud je procházení uživateli odepřeno, nebude schopen přijít do kanálu či jeho podkanálů (i kdyby tam měl průchod povolen). - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Povolení vejít do kanálu. V hierarchicky uspořádaných kanálech je často výhodné dám všem právo průchodu (traverse), ale omezit právo vstupu (enter) v kořeni hierarchie. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Representuje oprávnění mluvit v kanálu. Uživatelům bez tohoto privilegia bude serverem zakázáno mluvit a nebudou mít možnost mluvit, dokud jim nějaký administrátor tuto schopnost neumožní. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - Reprezentuje oprávnění mluvit v kanálu 'alternativně'. Na rozdíl od normálního mluvení se alternativní mluvení provádí stlačením tlačítka pro Alt_mluvení. To může být použito pro vysílání přes celou hierarchii kanálů aniž by bylo nutno kanály propojovat. - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Reprezentuje oprávnění zakázat mluvení nebo poslouchání ostatním uživatelům. Uživatelé, kterým bylo zakázáno mluvit nebo poslouchat, nedostanou zpět tuto schopnost, pokud jim opět nebude vrácena zpět privilegovaným uživatelem, nebo dokud se neodpojí a znova nepřipojí k serveru. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Reprezentuje oprávnění k přesunu uživatele do jiného kanálu nebo oprávnění jej zcela vykopnout ze serveru. Pro úspěšný přesun musí mít přesunující uživatel právo přesunu do cílového kanálu, nebo tam musí být povolen pro přesunovaného bežný vstup. Uživatelé s tímto oprávněním tedy mohou přesunovat do neveřejných kanálů uživatele, kteří by se tam jinak nedostali. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Reprezentuje oprávnění vytvářet v kanále podkanály. Uživatel vytvářející kanál přidán do skupiny administrátorů tohoto kanálu. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Reprezentuje oprávnění propojovat kanály. Uživatelé ve spojených kanálech slyší jeden druhého, pokud mluvící uživatel má oprávnění <i>mluvit</i> v kanále, kde je posluchač. Pro vytvoření zvukového propojení je nutno mít toto oprávnění v obou kanálech, pří rušení stačí oprávnění v jednom z nich. - - - - Write ACL - - - - - ClientPlayer - - - Authenticated - - - - - Muted (server) - - - - - Deafened (server) - - - - - Local Mute - - - - - Muted (self) - - - - - Deafened (self) - - - - - ConfigDialog - - - Mumble Configuration - Konfigurace Mumble - - - &OK - &OK - - - - Accept changes - Potvrdit změny - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Toto tlačítko potvrdí současné nastavení a navrátí se do aplikace.<br />Nastavení bude uloženo na disku při ukončení aplikace. - - - &Cancel - &Zrušit - - - - Reject changes - Odmítnout nové změny - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Tímto tlačítkem můžete odmítnout nastavované změny a vrátit se do aplikace.<br />Nastavení nebude změněno. - - - &Apply - &Použít - - - - Apply changes - Potvrdit změny - - - - This button will immediately apply all changes. - Toto tlačítko okamžitě provede všechny vybrané změny. - - - - Undo changes for current page - - - - - This button will revert any changes done on the current page to the most recent applied settings. - - - - - Restore defaults for current page - - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - - Advanced - - - - - ConnectDialog - - - &Custom Servers - &Moje servery - - - - Server &Browser - Výběr &veřejných serverů - - - &Name - &Jméno - - - - A&ddress - A&dresa - - - - &Port - &Port - - - - &Username - &Uživatelské jméno - - - - &Password - &Heslo - - - - &Connect - &Připojit - - - - Cancel - Zrušit - - - - &Add - Přid&at - - - - &Remove - Odst&ranit - - - Name - Jméno - - - - Address - Adresa - - - - URL - URL - - - - C&opy to custom - Zk&opírovat do seznamu mých serverů - - - - &View Webpage - Otevřít &Webovou stránku - - - - Connecting to %1 - Připojování k %1 - - - - Enter username - Zadejte jmého uživatele - - - Mumble - Mumble - - - - Failed to fetch server list - Selhalo stažení seznamu dostupných serverů - - - - &Label - - - - - Label - - - - - Unknown - - - - - -Unnamed entry- - - - - - Mumble Server Connect - - - - - &Cancel - - - - - - New - - - - - - Add - Přidat - - - - Update - - - - - CoreAudioSystem - - - Default Device - - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - Mumble - Mumble - - - Opening chosen DirectSound Input failed. No microphone capture will be done. - Otevírání vybraného vstupu DirectSound selhalo. Nebude prováděn záznam mikrofonu. - - - - Opening chosen DirectSound Input failed. Default device will be used. - Otevírání vybraného vstupu DirectSound selhalo. Bude použito výchozí zařízení. - - - - Default DirectSound Voice Input - Výchozí DirectSound hlasový vstup - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - - - - - Lost DirectSound input device. - - - - - DXAudioOutput - - Mumble - Mumble - - - - Opening chosen DirectSound Output failed. No audio will be heard. - Otevírání vybraného výstupu DirectSound selhalo. Nebude slyšet žádný zvukový výstup. - - - - Opening chosen DirectSound Output failed. Default device will be used. - Otevírání vybraného výstupu DirectSound selhalo. Bude použito výchozí zařízení. - - - - Default DirectSound Voice Output - Výchozí DirectSound hlasový výstup - - - - Lost DirectSound output device. - - - - - DXConfigDialog - - Default DirectSound Voice Input - Výchozí DirectSound hlasový vstup - - - Default DirectSound Voice Output - Výchozí DirectSound hlasový výstup - - - Device selection - Výběr zařízení - - - Device to use for microphone - Zařízení, na kterém je mikrofon - - - This sets the input device to use, which is where you have connected the microphone. - Tohle zařízení bude použito pro zvukový vstup, měl by tam být připojen mikrofon. - - - Input - Vstup - - - Device to use for speakers/headphones - Zařízení pro zvukový výstup (bedničky nebo sluchátka) - - - This sets the output device to use, which is where you have connected your speakers or your headset. - Tohle zařízení bude použito pro zvukový výstup, měly by tam být připojeny bedničky nebo sluchátka. - - - Output - Výstup - - - Output Options - Výstupní volby - - - Output Delay - Výstupní opoždění - - - Amount of data to buffer for DirectSound - Velikost datového zásobníku pro DirectSound - - - This sets the amount of data to prebuffer in the DirectSound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Nastaví velikost dat pro výstupní zásobník. Zkoušejte různé hodnoty a nastavte to na nejmenší hodnotu, která nezpůsobuje rychlé cvakání ve zvuku. - - - %1ms - %1ms - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble nedokazalo inicializovat databázi -v žádném z možných míst. - - - - DirectInputKeyWidget - - Press Shortcut - Stiskněte klávesovou zkratku - - - - GlobalShortcut - - - Shortcuts - - - - - List of configured shortcuts - - - - - Function - Funkce - - - - Shortcut - Zkratka - - - - Suppress - - - - - Add new shortcut - - - - - This will add a new global shortcut - - - - - &Add - - - - - Remove selected shortcut - - - - - This will permanently remove a selected shortcut. - - - - - &Remove - Odst&ranit - - - - GlobalShortcutConfig - - - Shortcuts - - - - Function - Funkce - - - Shortcut - Zkratka - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Toto je globální klávesová zkratka přiřazena k '%1'</br>Klikněte na toto políčko a pak zmáčkněte klávesu/tlačítko pro změnu. Dvojité kliknutí zruší přiřazení. - - - - Shortcut button combination. - - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - - - - - Suppress keys from other applications - - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - - - - - GlobalShortcutWinConfig - - Shortcuts - Kláv. zkratky - - - Function - Funkce - - - Shortcut - Zkratka - - - Shortcut bound to %1. - Klávesová zkratka přiřazena k %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Toto je globální klávesová zkratka přiřazena k '%1'</br>Klikněte na toto políčko a pak zmáčkněte klávesu/tlačítko pro změnu. Dvojité kliknutí zruší přiřazení. - - - - GlobalShortcutX - - - Mouse %1 - - - - - GlobalShortcutXConfig - - Shortcuts - Klávesové zkratky - - - Function - Funkce - - - Shortcut - Zkratka - - - Shortcut bound to %1. - Klávesová zkratka přiřazena k %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key combo to rebind. Double-click to clear. - <b>Tohle je klávesová zkratka přiřazena k %1</b><br />Klikněte na tohle pole a pak zvolte klávesovou zkratku pro přenastavení. - - - - LCD - - - Not connected - - - - - LCDConfig - - - Graphic - - - - - Character - - - - - Enable this device - - - - - LCD - - - - - Form - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - - - - - Name - Jméno - - - - Type - - - - - Size - - - - - Enabled - - - - - Views - - - - - Minimum Column Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - - - - - Splitter Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - Debug - - - - Critical - Critical - - - - Warning - Warning - - - - Information - Information - - - - Server Connected - Server připojen - - - - Server Disconnected - Server odpojen - - - - Player Joined Server - Uživatel se připojil k serveru - - - - Player Left Server - Uživatel opustil server - - - - Player kicked (you or by you) - Uživatel byl vykopnut - - - - Player kicked - Uživatel vykopnut - - - - You self-muted/deafened - Zakázal jste si možnost hovoru/poslechu - - - - Other self-muted/deafened - Uživatel si vypnul mluvení/poslech - - - - Player muted (you) - Bylo zakázáno mluvení - - - - Player muted (by you) - Uživateli bylo Vámi zakázano mluvit - - - - Player muted (other) - Uživatelovi bylo zakázáno mluvit - - - - Player Joined Channel - Uživatel vstoupil do kanálu - - - - Player Left Channel - Uživatel opustil kanál - - - - Permission Denied - K provedení akce chybí potřebné oprávnění - - - - Text Message - Textová zpráva - - - [%2] %1 - [%2] %1 - - - - LogConfig - - - Toggle console for %1 events - - - - - Toggle pop-up notifications for %1 events - - - - - Toggle Text-To-Speech for %1 events - - - - - Click here to toggle sound notification for %1 events - - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - - - - - Choose sound file - - - - - Invalid sound file - - - - - The file '%1' does not exist or is not a valid speex file. - - - - - Messages - Zprávy - - - - Console - Konsola - - - TTS - TTS - - - Enable console for %1 - Povolit konsolu pro %1 - - - Enable Text-To-Speech for %1 - Povolit čtení textu nahlas pro %1 - - - - Text To Speech - Čtení textu nahlas - - - - Volume - Hlasitost - - - - Volume of Text-To-Speech Engine - Hlasitost čtení textu nahlas - - - - <b>This is the volume used for the speech synthesis.</b> - <b>Hlasitost pro hlasovou syntézu</b> - - - - Length threshold - Maximální délka - - - - Message length threshold for Text-To-Speech Engine - Maximální délka zprávy pro přečtení hlasovým systémem - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Toto je maximální délka zprávy pro čtení</b><br />Zprávy delší než tento limit nebudou přečteny v celé svojí délce. - - - - Message - - - - - Notification - - - - - Text-To-Speech - - - - - Soundfile - - - - - Path - - - - - Characters - - - - - LookConfig - - - Language - Jazyk - - - - Look and Feel - Vzhled a motivy - - - - - System default - Podle výchozího nastavení systému - - - - Language to use (requires restart) - Jazyk pro uživatelské rozhraní (vyžaduje restart) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Nastaví jazyk, který má aplikace Mumble používat.</b><br />Musíte restartovat Mumble, aby se změna projevila. - - - - Style - Styl - - - - Basic widget style - Základní styl prvků grafického prostředí - - - - <b>This sets the basic look and feel to use.</b> - <b>nastaví základní styl vzhledu aplikace.</b> - - - - Skin - Motiv - - - - ... - ... - - - - Skin file to use - Soubor motivu, který se bude používat - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. - <b>Takto se nastavi, který motiv bude Mumble používat.</b><br />Motiv je soubor s definicí stylů aplikovaný navíc po použítí základního stylu prvků uživatelského rozhraní. - - - Use Horizontal Splitter - Použít horizontální rozdělení - - - Use horizontal or vertical splitter for the main window - Nastavení horizontálního nebo vertikálního rozdělení hlavního okna - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>Pokud je tohle nastaveno, pak budou uživatelé zobrazeni v každém kanálu ještě před seznamem podkanálů v přehledu kanálu.</b><br /> Pro aktivaci této změny je nutno restartovat aplikaci Mumble. - - - Expand All Channels - Rozbalit všechny kanály - - - Expand all channels when connecting - Rozbalit všechny kanály při připojování - - - <b>If set, all channels will be expanded by default when you connect to a server.</b> - <b>Pokud je nastaveno, strom komuikačních kanálů bude rozbalen při připojení k serveru.<b> - - - - Players above Channels - Uživatelé nad kanály - - - - List players above subchannels (requires restart). - Vypíše seznam uživatelů nad seznamem kanálů (vyžaduje restart aplikace). - - - - User Interface - Rozhraní - - - - Choose skin file - Vyberte soubor s motivem - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - - - - - Form - - - - - None - - - - - Only with players - - - - - All - - - - - Expand - - - - - When to automatically expand channels - - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - - - - - Ask - - - - - Do Nothing - - - - - Move - - - - - Channel Dragging - - - - - This changes the behaviour when moving channels. - - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - - - - - Ask whether to close or minimize when quitting Mumble. - - - - - <b>If set, will verify you want to quit if connected.<b> - - - - - Ask on quit while connected - - - - - Make the Mumble window appear on top of other windows. - - - - - <b>This makes the Mumble window a topmost window.</b> - - - - - Always On Top - - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - - - - - Hide in tray when minimized - - - - - Hide the main Mumble window in the tray when it is minimized. - - - - - MainWindow - - - Welcome to Mumble. - Vítejte v aplikaci Mumble. - - - - - Root - Kořen - - - - &Quit Mumble - &Ukončit - - - - Closes the program - Uzavře aplikaci - - - - Exits the application. - Ukončí aplikaci. - - - Ctrl+Q - Quit - Ukončit - - - - &Connect - &Připojit - - - - Open the server connection dialog - Otevřít dialog nastavení spojení se serverem - - - - Shows a dialog of registered servers, and also allows quick connect. - Ukáže dialog registrovaných serverů a umožňuje tak rychlé a snadné připojení k nim. - - - - &Disconnect - &Odpojit - - - - Disconnect from server - Odpojit od serveru - - - - Disconnects you from the server. - Odpojí k serveru otevřená spojení. - - - - &Ban lists - Seznam &zákazů - - - - Edit ban lists on server - Upravit seznam banů - - - - This lets you edit the server-side IP ban lists. - Tady můžete upravit seznam banů (zakázaných ip adres) pro server. - - - - &Kick - &Vykopnout - - - - Kick player (with reason) - Vykonout uživatele s odůvodněním) - - - - Kick selected player off server. You'll be asked to specify a reason. - Vykopne vybraného uživatele ze serveru. Budete dotázán na důvod. - - - - &Ban - Zákaz (&ban) - - - - Kick and ban player (with reason) - Vykopnout a zakázat uživatele (s odůvodněním) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Vykopne a zakáže vybraného uživatele. Budete požádání o doplnění důvodu. - - - - &Mute - Vypnout &mluvení - - - - Mute player - Zakázat uživateli mluvit - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Zakáže vybranému uživateli na serveru schopost mluvit, nebo mu ji opět vrátí. Vrácením práva mluvit uživateli s vypnutým poslechem se mu zároveň zapne poslech. - - - - &Deafen - Zakázat &poslouchání - - - - Deafen player - Vypnout poslech uživateli - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Vypnout/zapnout poslech uživateli. Vypnutím poslechu se uživateli zároveň zakáže mluvit. - - - - &Local Mute - Lokální um&lčení - - - Mute or unmute player locally. - Lokální zákaz/povolení mluvení uživateli. - - - - Send Messa&ge - &Odeslat zprávu - - - - Send a Text Message - Odeslat textovou zprávu - - - - Sends a text message to another user. - Pošle textovou zprávu jinému uživateli. - - - - &Add - &Přidat - - - - Add new channel - Přidat nový kanál - - - - This adds a new sub-channel to the currently selected channel. - Přidá nový kanál do vybraného kanálu. - - - - &Remove - Odst&ranit - - - - Remove channel - Odstranit kanál - - - - This removes a channel and all sub-channels. - Odstraní kanál a všechny jeho podkanály. - - - - &Edit ACL - Uprav&it ACL - - - - Edit Groups and ACL for channel - Upravit Skupiny a ACL pro kanál - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Otevře dialogové okno skupin a ACL daného kanálu. Zde se mohou nastavit oprávnění k určitým operacím. - - - - &Rename - - - - - &Change Description - - - - - Changes the channel description - - - - - This changes the description of a channel. - - - - - &Link - &Propojit - - - - Link your channel to another channel - Propojí současný kanál s kanálem označeným kurzorem - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Propojí současný kanál s vybraným kanálem. Pokud mají povoleno mluvit, uslyší se účastníci navzájem. Toto spojení bude fungovat až do jeho zrušení nebo do restartování serveru. - - - &Unlink - O&dpojit - - - - Unlink your channel from another channel - Zruší propojení současného a zvoleného kanálu - - - - This unlinks your current channel from the selected channel. - Zruší propojení mezi současným a vybraným kanálem. - - - - Unlink &All - Odpoj&it vše - - - - Unlinks your channel from all linked channels. - Zruší propojení sučasného kanálu ke všem kanálům s ním spojeným. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Zruší propojení mezi současným kanálem uživatele a všech kanálů, které jsou s tímto kanálem propojeny. - - - - &Reset - &Resetovat audio - - - - Reset audio preprocessor - Resetuje zvukový preprocesor - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Resetuje zvukový preprocesor, včetně rušení šumu, automatické hlasitosti a detekce hlasové aktivity. Pokud se nějak náhle zhorší zvukové prostředí (například při upuštění mikrofonu na stůl) a příčina problémů odezní, jde tak rychle znovunastavit rozumné hodnoty. - - - - &Mute Self - Vypnout si &mluvení - - - - Mute yourself - Zakázat si mluvení - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Zakázat/povolit si mluvení. Když je zakázáno mluvení, neposílají se na server žádná zvuková data. Povolením mluvení se zároveň zapína poslech. - - - - &Deafen Self - Vypnout si &poslech - - - - Deafen yourself - Vypnout si poslech - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Vypnout si poslech. Tak neuslyšíte komunikaci. Vypnutí poslechu automaticky zároveň zakáže mluvení. - - - - &Text-To-Speech - Výstup &textu do hlasové syntézy - - - - Toggle Text-To-Speech - Přepnout výstup textu do hlasové syntézy - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Povolí nebo zakáže převod textu na počítačem mluvený hlas. Budou přečtena pouze textová hlášení, u kterých je to nastaveno v konfiguračním dialogu. - - - - S&tatistics - S&tatistika - - - - Display audio statistics - Zobrazí zvukovou statistiku - - - - Pops up a small dialog with information about your current audio input. - Vyskočí malé okénko s informacemi o současném audio vstupu. - - - - Forcibly unlink plugin - Násilně odstraň plugin - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Násilně udpojí současný plugin, což může být užitečné, pokud čte a zpracovává úplně chybný data. - - - - &Settings - &Nastavení - - - - Configure Mumble - Nastavit Mumble - - - - Allows you to change most settings for Mumble. - Nastavení většiny možností. - - - - &Audio Wizard - &Zvukový Wizard - - - - Start the audio configuration wizard - Spustí zvukový Wizard pro nastavení - - - - This will guide you through the process of configuring your audio hardware. - Tohle vás provede zkrze proces konfigurace zvukového hardware. - - - - &What's This? - &Co je to? - - - - Enter What's This? mode - Vstoupí do režimu "co je tohle?" - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Klikněte pro vsoupení do režimu "Co je tohle?" Váš kurzor se změní na otazník. Jakmile máte tlačítko, výběr menu nebo cokoliv co chcete ukázat. - - - - &About - &O aplikaci - - - - Information about Mumble - Informace o Mumble - - - - Shows a small dialog with information and license for Mumble. - Ukáže okno s informacemi a licenčním ujednáním pro používání Mumble. - - - - - - - About &Speex - O kodeku &Speex - - - - Information about Speex - Informace o kodeku Speex - - - - Shows a small dialog with information about Speex. - Ukáže informace o použitém kodeku Speex. - - - &About Qt - O &knihovně Qt - - - - Information about Qt - Informace o knihovně Qt - - - - Shows a small dialog with information about Qt. - Ukáže dialogové okno s informacemi o knihovně QT. - - - - Check for &Updates - Zjistit &dostupnost nové verze - - - - Check for new version of Mumble - Ověřit dostupnost nových verzí aplikace Mumble - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Připojí se k webové stránce Mumble pro zjištění případné dostupnosti novějších verzí a vypíše vhodný odkaz na stažení, pokud je nová verze k dispozici. - - - - Mumble -- %1 - Mumble =- %1 - - - Log of messages - Záznam zpráv - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Zobrazuje nedávné aktivity, jako např. připojování k serverům, chyby a informační zprávy.<br /> V nastavení jde určit, které z těchto zpráv se mají či nemají zobrazovat. - - - - &Server - &Server - - - - &Player - &Uživatel - - - - &Channel - &Kanál - - - - &Audio - &Zvuk - - - - C&onfigure - &Nastavit - - - - &Help - &Pomoc - - - - Push-to-Talk - Global Shortcut - Mluvení při stisku klávesy - - - - Push and hold this button to send voice. - Global Shortcut - - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - - - - - Reset Audio Processor - Global Shortcut - Resetovat zvukový procesor - - - - Toggle Mute Self - Global Shortcut - Zákázat/povolit si mluvení - - - - Toggle self-mute status. - Global Shortcut - - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - - - - - Toggle Deafen Self - Global Shortcut - Poslech zapnout/vypnout - - - - Toggle self-deafen status. - Global Shortcut - - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - - - - - Unlink Plugin - Global Shortcut - Odpojit Plugin - - - - Force Center Position - Global Shortcut - Vynutit použití střední pozice - - - - Chan Parent - Global Shortcut - Nadřazený kanál - - - - Chan Sub#%1 - Global Shortcut - Podkanál #%1 - - - - Chan All Subs - Global Shortcut - - - - - Push-to-Mute - Global Shortcut - Zakázat si mluvení při stisku klávesy - - - - Join Channel - Global Shortcut - Vstoupit do kanálu - - - - Toggle Overlay - Global Shortcut - Přepnout Overlay - - - - Toggle state of in-game overlay. - Global Shortcut - - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - - - - - Alt Push-to-Talk - Global Shortcut - Alternativní klávesa pro mluvení - - - - Reconnecting. - Opětovné připojování. - - - - Kicking player %1 - Vykopnutí uživaetele %1 - - - - - Enter reason - Zadejte důvod - - - - Banning player %1 - Ban pro uživatele %1 - - - - Sending message to %1 - Posílam zprávu pro %1 - - - Enter message - Zadejte zprávu - - - - - To %1: %2 - Pro %1: %2 - - - - - Message to %1 - Zpráva pro %1 - - - - Mumble - Mumble - - - - - Channel Name - Název kanálu - - - - Are you sure you want to delete %1 and all its sub-channels? - Opravdu chcete odstranit kanál %1 včetně všech jeho podkanálů? - - - - Unmuted and undeafened. - Opět schopen slyšet a mluvit. - - - - Unmuted. - Opět schopen mluvit. - - - - Muted. - Zakázáno mluvení. - - - - Muted and deafened. - Zakázáno mluvit a poslouchat. - - - - Deafened. - Vypnut poslech. - - - - Undeafened. - Opět schopen slyšet. - - - - About Qt - O knihovně Qt - - - - Joining %1. - Vstupuji do %1. - - - Connected to server. - Připojen k serveru. - - - - Server connection failed: %1. - Připojování k serveru selhalo: %1. - - - - Invalid username - Špatné jméno uživatele - - - - You connected with an invalid username, please try another one. - Připojujete se s nesprávným jménem uživatele, prosím zkuste nějaké jiné. - - - - That username is already in use, please try another username. - Toto uživatelské jméno je již používáno, prosím zkuste nějaké jiné. - - - - Wrong password - Špatné heslo - - - - Wrong password for registered users, please try again. - Špatné heslo registrovaného uživatele, prosím zkuste znova. - - - - Wrong server password for unregistered user account, please try again. - Špatné heslo serveru pro neregistrované uživatele, prosím zkuste znova. - - - - Disconnected from server. - Spojení se serverem bylo zrušeno. - - - - Joined server: %1. - K serveru se připojil: %1. - - - - Left server: %1. - Uživatel %1 opustil server. - - - - %1 is now muted and deafened. - %1 má zakázáno mluvit a poslouchat. - - - - %1 is now muted. - %1 má zakázáno mluvit. - - - - %1 is now unmuted. - %1 je nyní schopen mluvit. - - - - - server - server - - - - You were muted by %1. - %1 Vám zakázal mluvit. - - - - You were unmuted by %1. - Vrácena schopnost mluvit od %1. - - - - %1 muted by %2. - %2 zakázal mluvit uživateli %1. - - - - %1 unmuted by %2. - %1 získává schopnost mluvit od %2. - - - - You were deafened by %1. - Bylo vám vypnut poslech uživatelem %1. - - - - You were undeafened by %1. - Byla Vám vrácena schopnost slyšet od %1. - - - - %1 deafened by %2. - %2 vypnul poslech uživateli %1. - - - - %1 undeafened by %2. - %1 byla vlrácena schopnost slyšet od %2. - - - - You were kicked from the server by %1: %2. - Byl jste vykopnut ze serveru od %1: %2. - - - - %3 was kicked from the server by %1: %2. - %3 byl vykopnut ze serveru od %1: %2. - - - - You were kicked and banned from the server by %1: %2. - Byl jste vykopnut a dostal jste ban (zákaz) od %1: %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 byl vykopnut a dostal ban (zákaz) od %1: %2. - - - - You were moved to %1 by %2. - - - - - %1 left channel. - %1 opustil kanál. - - - - %1 moved out by %2 to %3. - - - - - %1 moved in by %2 from %3. - - - - %1 moved out by %2. - %1 byl přesunut z kanálu uživatelem %2. - - - - %1 entered channel. - %1 vstoupil do kanálu. - - - %1 moved in by %2. - %1 byl přesunut do kanálu zásahem uživatele %2. - - - - Server connection rejected: %1. - Spojení se serverem bylo odmítnuto: %1. - - - - Denied: %1. - Zakázano: %1. - - - - From %1: %2 - Od %1: %2 - - - - Message from %1 - - - - - &Information - - - - - Show information about the server connection - - - - - This will show extended information about the connection to the server. - - - - - Opening URL %1 - - - - - URL scheme is not 'mumble' - - - - - Connecting to %1 - Připojování k %1 - - - - Enter username - Zadejte jmého uživatele - - - - Mumble Server Information - - - - - - &View Certificate - - - - - SSL Verification failed: %1 - - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - - - - - Sever presented a certificate which failed verification. - - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - - - - - Voice channel is sent over control channel. - - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - - - - - UDP Statistics - - - - - To Server - - - - - From Server - - - - - Good - - - - - Late - - - - - Lost - - - - - Resync - - - - - Change description of channel %1 - - - - - Sending message to channel %1 - - - - - Sending message to channel tree %1 - - - - - To tree %1: %2 - - - - - Message to tree %1 - - - - - Ctrl+Q - Ukončit - - - - Mute player locally - - - - - Mute or unmute player locally. Use this on other players in the same room. - - - - - Renames the channel - - - - - This renames a channel. - - - - - About &Qt - - - - - Sends a text message to all users in a channel. - - - - - Send &Tree Message - - - - - Send message to channel tree. - - - - - This sends a text message to a channel and it's subchannels. - - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - - - - - Connected to server %1. - - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - - - - - Close - - - - - - Minimize - - - - - &Window - - - - - Ctrl+M - - - - - Toggle Minimal - Global Shortcut - - - - - &Minimal View - - - - - Toggle minimal window modes - - - - - This will toggle minimal mode, where the log window and menu is hidden. - - - - - Volume Up (+10%) - Global Shortcut - - - - - Volume Down (-10%) - Global Shortcut - - - - - Clear - - - - - Log - - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - - - - - &Unlink - Channel - O&dpojit - - - - &Unlink - Plugin - O&dpojit - - - - Server - message from - Server - - - - Hide Frame - - - - - Toggle showing frame on minimal window - - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - - - - - NetworkConfig - - - Network - - - - - Form - - - - - Connection - - - - - Use TCP compatibility mode - Use TCP compatability mode - - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - - - - - Use TCP mode - Použít TCP režim - - - - Reconnect when disconnected - Přihlásit zpátky na server, pokud došlo k výpadku spojení - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Automatické připojení</b>.<br />Pokud se ztratí spojení se serverem, Mumble se pokusí automaticky spojení obnovit každých 10 sekund. - - - - Reconnect automatically - - - - - Proxy - - - - - Type - - - - - Type of proxy to connect through - - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - - - - - Direct connection - - - - - HTTP(S) proxy - - - - - SOCKS5 proxy - - - - - Hostname - - - - - Hostname of the proxy - - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - - - - - Port - - - - - Port number of the proxy - - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - - - - - Username - - - - - Username for proxy authentication - - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - Password - - - - - Password for proxy authentication - - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - Mumble services - - - - - Check for updates on startup - - - - - Submit anonymous statistics to the Mumble project - - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - - - - - Submit anonymous statistics - - - - - OSSConfig - - %1ms - %1ms - - - Device selection - Výběr zařízení - - - Input - Vstup - - - Device to use for microphone - Zařízení, na kterém je mikrofon - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Nastavení zařízení pro použití aplikací Mumble. <i>default</i> (výchozí) je cokoliv je nakonfigurováno pomoci alsaconfigu, <i>hwplug</i> zařízení jsou specifická zvuková zařízení podporovaná ALSA mixerem a <i>hw</i> zařízní jsou pro přímý přístup na zařízení. Pokud vaše zvuková karta nepodporuje hw směšování, použití <i>hw</i> zařázení znemožní ostatním aplikacím používat tento zvukový výstup. - - - Output - Výstup - - - Device to use for speakers/headphones - Zařízení pro zvukový výstup (bedničky nebo sluchátka) - - - Output Options - Výstupní volby - - - Output Delay - Výstupní opoždění - - - Amount of data to buffer for OSS - Velikost datového zásobníku pro ALSU - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - Selhalo načítání knihovny pro funkci overlay. -To může být způsobeno například těmito důvody: -- knihovna (mumble_ol.dll) nebyla nalezena v adresáři kde byla spuštěna aplikace Mumble -- váš OS je novější než WinXP SP2 -- nemáte aktualizaci DX9.0c z června 2007 - - - - OverlayConfig - - Options - Volby - - - Position - Umístění - - - Font - Písmo - - - Enable Overlay - Zapnout Overlay - - - Enable overlay. - Zapnout overlay. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - Nastavuje funkci overlay. Toto nastavení D3D9 applikace zjišťují při spouštění, takže se ujistěte, že Mumble běží a overlay je zapnut ještě než pustíte svoji aplikaci.<br />Prosím všimněte si, že pokud aplikaci spustíte po Mumble, nebo pokud zakážete overlay funkci za běhu, není možné bezpečně vypnout overlay bez restartu dané aplikace. - - - No one - Nikoho - - - Only talking - Pouze mluvící - - - Everyone - Každého - - - Show - Ukázat - - - Who to show on the overlay - Kdo bude zobrazen v overlay vrstvě - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>Nastaví, kdo bude vidět v overlay vrstvě.</b><br />Pokud bude připojeno příliš mnoho lidí, seznam se může stát nepříjemně dlouhým. Tímto nastavením jej můžete zkrátit.<br /><i>Nikoho</i> - nezobrazovat nikoho (ale nechat běžící overlay).<br /><i>Pozue mluvící</i> - zobrazí pouze uživatele, kteří právě mluví.<br /><i>Každého</i> - zobrazí úplně každého. - - - Always Show Self - Vždy ukázat sebe - - - Always show yourself on overlay. - Vždy ukáže vaše jméno v overlay vrstvě. - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Nastavuje, jestli budete vidět vy sami. Toto nastavení je nejvíce užitečné, pokud nikoho ostatního vidět nechcete, pouze chcete vidět svůj vlastní stav - jestli mluvíte nebo ne, nebo jestli máte zakázáno mluvení/poslech. - - - Show User Textures - Ukázat obrázky uživatelů - - - Show User custom textures instead of text on the overlay. - Ukázat v overlay vrstvě uživatelův nastavený obrázek místo textu. - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - Nastavuje, jestli se má stáhnout a použít navolený obrázek pro zobrazení registrovaných uživatelů. Pokud je zakázáno, zobrazí se uživatelé běžným textem. - - - Grow Left - Zvětšovat doleva - - - Let overlay grow to the left - Overlay se zvětšuje směrem doleva - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Ovelay vrstva je tak malá, jak je to jenom možné a je na zvolené pozici. Tímto nastavením se povolí zvětšování overlay na levou stranu, pokud je to potřeba. - - - Grow Right - Zvětšovat doprava - - - Let overlay grow to the Right - Overlay se zvětšuje směrem doprava - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the Right if needed. - Ovelay vrstva je tak malá, jak je to jenom možné a je na zvolené pozici. Tímto nastavením se povolí zvětšování overlay na pravou stranu, pokud je to potřeba. - - - Grow Up - Zvětšovat nahoru - - - Let overlay grow upwards - Overlay se zvětšuje směrem nahoru - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the top if needed. - Ovelay vrstva je tak malá, jak je to jenom možné a je na zvolené pozici. Tímto nastavením se povolí zvětšování overlay nahoru, pokud je to potřeba. - - - Grow Down - Zvětšovat dolů - - - Let overlay grow downwards - Overlay se zvětšuje směrem dolů - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow towards the bottom if needed. - Ovelay vrstva je tak malá, jak je to jenom možné a je na zvolené pozici. Tímto nastavením se povolí zvětšování overlay směrem dolů, pokud je to potřeba. - - - X-Position of Overlay - Pozice overlay na ose X - - - This sets the relative X position of the overlay. - Relativni pozice na ose X. - - - Y-Position of Overlay - Pozice overlay na ose Y - - - This sets the relative Y position of the overlay. - Relativni pozice na ose Y. - - - Current Font - Současný font - - - Set Font - nastavit font - - - Maximum height of names. - Maximální výška jmen. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - Nastaví maximální výšku zobrazených jmen, relativně k výšce obrazovky. Pokud vaše 3D okno má 800 pixelů na výšku a tato hodnota je nastavena na 5%, každé jméno bude 40 pixelů vysoké. Jména nikdy nebudou větší než 60 pixelů, i kdybyste nastavili vyšší hodnotu. - - - Maximum height - Maximální výška - - - Change - Změnit - - - Color for players - Barva pro uživatele - - - Color for talking players - Barva pro mluvící uživatele - - - Color for alt-talking players - Barva pro Alt-mluvící uživatele - - - Color for Channels - Barva pro kanály - - - Color for active Channels - Barva pro aktivní kanály - - - Overlay - Overlay - - - - PlayerModel - - Name of player - Jméno uživatele - - - Name of channel - Jméno kanálu - - - Player flags - Příznaky uživatele - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src=":/talking_on.png" /> Talking<br /><img src=":/talking_off.png" /> Not talking - Tento uživatel je připojen k serveru. Ikonka nalevo od jména názorně indikuje jeho mluvení: <br /><img src=":/talking_on.png" />Mluví</br /><img src=":/talking_off.png" /> Nemluví - - - - This is a channel on the server. Only players in the same channel can hear each other. - Toto je komunikační kanál na serveru. Pouze učastníci, kteří jsou ve stejném kanálu, se budou navzájem slyšet. - - - This shows the flags the player has on the server, if any:<br /><img src=":/authenticated.png" />Authenticated user<br /><img src=":/muted_self.png" />Muted (by self)<br /><img src=":/muted_server.png" />Muted (by admin)<br /><img src=":/deafened_self.png" />Deafened (by self)<br /><img src=":/deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - Zobrazení příznaků uživatele (pokud nějaké má nastaveny):<br /><img src=":/authenticated.png" />Přihlášený uživatel<br /><img src=":/muted_self.png" />Zakázal si mluvení<br /><img src=":/muted_server.png" />Bylo mu zakázáno mluvit<br /><img src=":/deafened_self.png" />Vypnutý poslech<br /><img src=":/deafened_server.png" />Byl mu vypnut poslech<br />Uživatel, který sám sobě zakázal mluvit nebo poslouchat, je pravděpodobně vzdálen od počítače, nebo zrovna nemá čas na hovory (vaří si kávu)<br />Uživatel, kterému bylo zakázano mluvit od administrátora, se pravděpodobně choval nezpůsobně. - - - - Name - Jméno - - - - Flags - Příznaky - - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - - - - - PluginConfig - - - Options - Volby - - - - - Plugins - - - - - Link to Game and Transmit Position - - - - - Enable plugins and transmit positional information - - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - - - - - &Reload plugins - - - - - Reloads all plugins - - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - - - - - &About - &O aplikaci - - - - Information about plugin - - - - - This shows a small information message about the plugin. - - - - - &Configure - - - - - Show configuration page of plugin - - - - - This shows the configuration page of the plugin, if any. - - - - Mumble - Mumble - - - - Plugin has no configure function. - - - - - Plugin has no about function. - - - - - Form - - - - - Plugins - - - %1 lost link. - - - - - %1 linked. - - - - - PortAudioSystem - - - Default Device - - - - - PulseAudioConfig - - %1ms - %1ms - - - Device selection - Výběr zařízení - - - Device to use for microphone - Zařízení, na kterém je mikrofon - - - Output - Výstup - - - Device to use for speakers/headphones - Zařízení pro zvukový výstup (bedničky nebo sluchátka) - - - Output Options - Výstupní volby - - - Output Delay - Výstupní opoždění - - - Amount of data to buffer for ALSA - Velikost datového zásobníku pro ALSU - - - - PulseAudioSystem - - - Default Input - - - - - Default Output - - - - - ShortcutActionWidget - - - Unassigned - - - - - ShortcutDelegate - - - Unassigned - - - - - ShortcutKeyWidget - - - Press Shortcut - - - - - TextMessage - - - Message to send - - - - - Preview - - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble - Mumble - - - Mumble failed to retrieve version information from the SourceForge server. - Mumble nedokázalo získat informace o aktuálních verzích ze serveru SourceForge. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - - - - - Certificate chain - - - - - Certificate details - - - - - %1 %2 - %1% {1 %2?} - - - - - Common Name: %1 - - - - - - Organization: %1 - - - - - Subunit: %1 - - - - - - Country: %1 - - - - - - Locality: %1 - - - - - - State: %1 - - - - - Valid from: %1 - - - - - Valid to: %1 - - - - - Serial: %1 - - - - - Public Key: %1 bits %2 - - - - - RSA - - - - - DSA - - - - - Digest (MD5): %1 - - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - - - - - Unit Name: %1 - - - - - WASAPIConfig - - Device selection - Výběr zařízení - - - Device to use for microphone - Zařízení, na kterém je mikrofon - - - Output - Výstup - - - Device to use for speakers/headphones - Zařízení pro zvukový výstup (bedničky nebo sluchátka) - - - - WASAPISystem - - - Default Device - - - - - XInputKeyWidget - - Press Shortcut - Vyberte klávesovou zkratku - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_de.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_de.ts --- mumble-1.2.3/src/mumble11x/mumble_de.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_de.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,6174 +0,0 @@ - - - - - ACLEditor - - - Active ACLs - Aktive ACLs - - - - Context - Kontext - - - - User/Group - Benutzer/Gruppe - - - - Permissions - Rechte - - - - Group - Gruppe - - - - Members - Mitglieder - - - - &Add - &Hinzufügen - - - - &Remove - &Entfernen - - - - &Up - &Hoch - - - - &Down - &Runter - - - - Inherit ACLs - ACLs erben - - - - Applies to this channel - Betrifft diesen Kanal - - - - Applies to sub-channels - Betrifft Unterkanäle - - - - User ID - Benutzer ID - - - - Deny - Verweigern - - - - Allow - Erlauben - - - - Remove - Entfernen - - - - Inherit - Erben - - - - Inheritable - Vererbbar - - - - Inherited - Vererbt - - - - Add - Hinzufügen - - - - Add to Remove - Entfernen - - - - &Groups - &Gruppen - - - - &ACL - &ACL - - - &OK - &OK - - - Accept changes - Änderungen übernehmen - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Dieser Button will aktuelle Gruppen/ACLs akzeptieren und sie zum Server schicken. Falls man sich versehentlich Schreibrechte entzogen hat, wird der Server sie hinzufügen. - - - &Cancel - &Abbrechen - - - Reject changes - Änderungen verwerfen - - - This button will cancel all changes and closes the dialog without updating the ACLs or groups on the server. - Dieser Button macht alle Änderungen rückgängig und schließt den Dialog ohne ACLs oder Gruppen auf dem Server zu aktualisieren. - - - - List of entries - Liste von Einträgen - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - Dies zeigt alle aktive Einträge in diesem Kanal an. Von Elternkanälen geerbte Einträge werden kursiv angezeigt.<br />ACLs werden von oben nach unten ausgewertet. Das bedeutet, dass sich die Priorität nach unten hin erhöht. - - - - Inherit ACL of parent? - ACL von Eltern erben? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Dies legt fest ob ACL am Anfang der Kette von Elternkanälen dieses Objekt betrifft. Nur solche Einträge, die in den Eltern als "Betrifft Unterkanäle" markiert sind, werden geerbt. - - - - Add new entry - Neuen Eintrag hinzufügen - - - - This adds a new entry, initially set with no permissions and applying to all. - Dies fügt einen neuen Eintrag ohne Rechte hinzu. - - - - Remove entry - Eintrag entfernen - - - - This removes the currently selected entry. - Dies entfernt den aktuell ausgewählten Eintrag. - - - - Move entry up - Eintrag nach oben verschieben - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Dies verschiebt den Eintrag in der Liste nach oben. Da Einträge nach ihrer Reihenfolge ausgewertet werden, könnte dies die effektiven Rechte der Benutzer ändern. Man kann keinen Eintrag über einen geerbten Eintrag verschieben. Sollte dies jedoch ausdrücklich gewünscht sein, so muss der Eintrag dupliziert werden. - - - - Move entry down - Eintrag nach unten verschieben - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Dies verschiebt den Eintrag in der Liste nach unten. Da Einträge nach ihrer Reihenfolge ausgewertet werden, könnte dies die effektiven Rechte der Benutzer ändern. - - - - Entry should apply to this channel. - Eintrag soll für diesen Kanal gelten. - - - - This makes the entry apply to this channel. - Dies lässt den Eintrag für diesen Kanal gelten. - - - - Entry should apply to sub-channels. - Eintrag soll für Unterkanäle gelten. - - - - This makes the entry apply to sub-channels of this channel. - Dies lässt den Eintrag für Unterkanäle gelten. - - - - Group this entry applies to - Gruppe, für die dieser Eintrag gilt - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - Dies steuert welche Gruppe von Beutzern dieser Eintrag betrifft.<br />Die Gruppen werden im Kontext des Kanals ausgewertet in dem sich der Eintrag befindet. Zum Beispiel gibt der Standard ACL in den Wurzelkanälen <i>Schreib</i>-Rechte der <i>Admin</i>-Gruppe. Dieser Eintrag gibt den Benutzern - wenn von einem Kanal geerbt - Schreibrecht, wenn er zur Gruppe der <i>Admin</i>s in diesem Kanal gehört, selbst wenn er nicht zu der <i>Admin</i>-Gruppe gehört woher der ACL eigentlich stammt.<br />Beginnt ein Gruppenname mit einem "!", wird die Mitgliedschaft negiert und wenn es mit einem "~" beginnt, wird es in dem Kanal ausgewertet in dem die ACL definiert wurde. Die Reihenfolge ist wichtig; <i>!~in</i> ist gültig, <i>~!in</i> jedoch nicht. Einige wenige spezielle vordefinierte Gruppen sind: <br /><b>all</b> - Jeder trifft zu.<br /><b>auth</b> - Alle authentifizierten Benutzer treffen zu.<br /><b>in</b> - Benutzer im Channel treffen zu.<br /><b>out</b> - Benutzer außerhalb des Kanals treffen zu.<br />Ein Eintrag trifft dabei entweder auf einen Benutzer oder eine Gruppe zu, nicht auf beide. - - - - User this entry applies to - Benutzer, für den der Eintrag gilt - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - Dies steuert welchen Benutzer dieser Eintrag betrifft. Benutzernamen eingeben und Enter drücken um die Existenz des Accounts auf dem Server zu prüfen. - - - - Allow %1 - %1 erlauben - - - - Deny %1 - %1 ablehnen - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Dies gibt das %1 Privileg. Wenn ein Privileg sowohl vorhanden als auch genommen ist, so wird es genommen.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Dies nimmt das %1 Privileg. Wenn ein Privileg sowohl vorhanden als auch genommen ist, so wird es genommen.<br />%2 - - - - List of groups - Liste von Gruppen - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - Dies sind alle aktuell im Kanal definierten Gruppen. Um eine neue Gruppe zu erstellen, den Namen eingeben und Enter drücken. - - - - Remove selected group - Entferne ausgewählte Gruppe - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Dies entfernt die momentan ausgewählte Gruppe. Wenn die Gruppe geerbt wurde wird sie nicht von der Liste entfernt, aber alle lokalen Informationen über diese Gruppe werden gelöscht. - - - - Inherit group members from parent - Erbe Gruppenmitglieder von Eltern - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Dies erbt alle Mitglieder der Elterngruppe, wenn die Gruppe als <i>Vererbbar</i> im Elternkanal markiert ist. - - - - Make group inheritable to sub-channels - Gruppe zu Unterkanälen vererbbar machen - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Dies macht die Gruppe zu Unterkanälen vererbbar. Ist die Gruppe nicht vererbbar können Unterkanäle Gruppen mit demselben Namen erstellen. - - - - Group was inherited from parent channel - Gruppe wurde vom Elternkanal geerbt - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - Dies zeigt an, dass die Gruppe vom Elternkanal geerbt wurde. Dieses Attribut dient nur zur Information und kann nicht bearbeitet werden. - - - - Add member to group - Mitglied zu Gruppe hinzufügen - - - Type in the name of a player you wish to add to the group and press enter. - Namen des Spielers eingeben, der zur Gruppe hinzugefügt werden soll. - - - - Remove member from group - Entferne Mitglied aus der Gruppe - - - Type in the name of a player you wish to remove from the group and press enter. - Namen des Players eingeben, der aus der Gruppe entfernt werden soll. - - - - Mumble - Edit ACL for %1 - Mumble - ACL von %1 editieren - - - - Dialog - Dialog - - - - Type in the name of a player you wish to add to the group and click Add. - Namen des Benutzers, der zur Gruppe hinzugefügt werden soll, hier eingeben und Hinzufügen drücken. - - - - Type in the name of a player you wish to remove from the group and click Add. - Namen des Benutzers, der aus der Gruppe entfernt werden soll, hier eingeben und Entfernen drücken. - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - Öffnen des ALSA-Eingabegerätes fehlgeschlagen: %1 - - - - Default ALSA Card - Standard ALSA-Karte - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - Öffnen des ALSA-Ausgabegerätes fehlgeschlagen: %1 - - - - Default ALSA Card - Standard ALSA-Karte - - - - ALSAConfig - - Device selection - Geräteauswahl - - - Device to use for microphone - Mikrofon - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Dies legt fest, welches Gerät Mumble nutzen soll. Das <i>Standard</i>-Gerät ist durch alsaconfig konfiguriert, die <i>hwplug</i> Geräte sind spezielle Hardware-Geräte die vom ALSA-Mixer genutzt werden und die <i>hw</i>-Geräte bieten rohen Hardwarezugriff. Falls ihre Soundkarte Hardware Mixing von Audio nicht unterstützt, wird die Verwendung von <i>hw</i>-Geräten alle anderen Programme vom Audiozugriff ausschließen. - - - Device to use for speakers/headphones - Gerät für Lautsprecher/Kopfhörer - - - Input - Eingang - - - Output - Ausgabe - - - Output Options - Ausgabeoptionen - - - Output Delay - Ausgabeverzögerung - - - Amount of data to buffer for ALSA - Menge an Daten die ALSA puffern soll - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Dies liegt die Menge an daten fest, die im Ausgabepuffer vorgepuffert werden sollen. Experimentiere mit verschiedenen Werten und setze es auf den niedrigsten Wert, der noch kein schnelles Jitter im Sound verursacht. - - - ALSA - ALSA - - - %1ms - %1ms - - - Form - Formular - - - TextLabel - Textlabel - - - Default ALSA Card - Standard ALSA-Karten - - - - ASIOConfig - - - Device selection - Geräteauswahl - - - - Capabilities - Funktionalitäten - - - - Channels - Kanäle - - - - Configure input channels - Eingabekanäle konfigurieren - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples "What you hear".<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be "Mic L" while Speaker should be "Mix L" and "Mix R" - Dies konfiguriert die Eingangskanäle für ASIO. Es muss sichergestellt werden, dass wenigstens ein Kanal als Mikrofon und Lautsprecher ausgewählt wurde. <br />Eine gute Auswahl für eine Audigy 2 ZS wäre für Mikrofon "Mic L", während es für die Lautsprecher "Mix L" und "Mix R" sein sollte - - - - Device to use for microphone - Mikrofongerät - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - Dies wählt das abzufragende Gerät aus. Man muss trotzdem das Gerät abfragen und die zu nutzenden Kanäle auswählen. - - - - Device - Gerät - - - - Query selected device - Gewähltes Gerät abfragen - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Dies fragt das ausgewählte Gerät nach Kanälen ab. Achtung: Viele ASIO-Treiber sind extrem fehlerbehaftet und sie abzufragen könnte die Anwendung oder das System zum Absturz bringen. - - - - Configure selected device - Ausgewähltes Gerät konfigurieren - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Dies konfiguriert das ausgewählte Gerät. Achtung: Viele ASIO-Treiber sind extrem fehlerbehaftet und sie abzufragen könnte die Anwendung oder das System zum Absturz bringen. - - - - Driver name - Treibername - - - Buffersize - Puffergröße - - - - Microphone - Mikrofon - - - - <- - <- - - - - -> - -> - - - - Unused - Ungenutzt - - - - Speakers - Lautsprecher - - - %1 (ver %2) - %1 (ver %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 ms -> %2 ms (%3 ms Auflösung) %4Hz - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 ms -> %2 ms (%3 ms Auflösung) %4Hz -- Unbenutzbar - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - ASIO-Initialisierung fehlgeschlagen: %1 - - - - - Failed to instantiate ASIO driver - Konnte ASIO-Treiber nicht instanziieren - - - - ASIO - ASIO - - - - &Query - &Abfragen - - - - &Configure - &Konfigurieren - - - - Form - Formular - - - TextLabel - Textlabel - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - Dies konfiguriert die Eingangskanäle für ASIO. Es muss sichergestellt werden, dass wenigstens ein Kanal als Mikrofon und Lautsprecher ausgewählt wurden. <i>Mikrofon</i> sollte das angeschlossene Mikrofon sein und <i>Lautsprecher</i> sollte ein Kanal sein, der samplet <i>Was sie hören</i>. <br />Eine gute Auswahl für eine Audigy 2 ZS wäre für Mikrofon <i>Mic L</i>, während es für die Lautsprecher <i>Mix L</i> und <i>Mix R</i> sein sollte. - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - Es muss mindestens eine Mikrofon- und eine Lautsprecherquelle ausgewählt sein um ASIO zu nutzen. Wenn Sie lediglich den Mikrofoneingang nutzen wählen Sie DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - Öffnen des ausgewählten ASIO-Gerätes fehlgeschlagen. Es wird kein Eingang benutzt. - - - - AboutDialog - - <h3>Mumble v1.0.0</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v0.9.4</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p>Deutsche Übersetzung von Matthias Vogelgesang<br /> m0ta@users.sourceforge.net</p><p><b>Ein Voicechat-Programm für Spieler</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - &About Mumble - Ü&ber Mumble - - - - &License - &Lizenz - - - - OK - OK - - - <h3>Mumble v%1</h3><p>Copyright 2005-2008 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v%1</h3><p>Copyright 2005-2007 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p>Deutsche Übersetzung von Matthias Vogelgesang<br /> m0ta@users.sourceforge.net</p><p><b>Ein Voicechat-Programm für Spieler</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - About Mumble - Über Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble v%1</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p>Deutsche Übersetzung von Jan Klass und Matthias Vogelgesang<br /> m0ta@users.sourceforge.net</p><p><b>Ein Voicechat-Programm für Spieler</b></p><p><tt><a href="%2">%2</a>/</tt></p> - - - - AboutSpeexDialog - - <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Über Speex</h3><p><tt>http://www.speex.org/</tt></p><p>Dieses Programm nutzt Speex Version %1</p><p>Speex wird zur Echoreduktion, Geräuschfilterung<br />, Stimmaktivierungserkennung und<br />Sprachkompression genutzt.</p> - - - - OK - OK - - - - About Speex - Über Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Über Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>Dieses Programm nutzt Speex Version %1</p><p>Speex wird zur Echoreduktion, Rauschfilterung,<br /> Stimmaktivierungserkennung und<br />Sprachkompression verwendet.</p> - - - - AudioConfigDialog - - Interfaces - Schnittstellen - - - Transmission - Übertragung - - - Compression - Kompression - - - Jitter Buffer - Jitterpuffer - - - Input - Eingang - - - Input method for audio - Inputmethode für Audio - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Dies ist die Eingabemethode für Audo.</b><br />Am wahrscheinlichsten sollte DirectSound ausgewählt werden. - - - Output - Ausgabe - - - Output method for audio - Ausgabemethode für Audio - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Dies ist die Ausgabemethode für Audio.</b><br />Am wahrscheinlichsten sollte DirectSound ausgewählt werden. - - - Continuous - Kontinuierlich - - - Voice Activity - Stimmaktivierung - - - Push To Talk - Push-To-Talk - - - Transmit - Übertragen - - - When to transmit your speech - Art der Sprachübertragung - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Dies legt fest, wann Sprache übertragen werden soll.</b><br /><i>Kontinuierlich</i> - Die ganze Zeit<br /><i>Stimmaktivierung</i> - Sobald man deutlich spricht.</br><i>Push-To-Talk</i> - Wenn ein Hotkey gedrückt wird (siehe <i>Shortcuts</i>). - - - Voice Hold - Stimme halten - - - How long to keep transmitting after silence - Wie lange nach Einsetzen der Stille übertragen werden soll - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Dies wählt aus, wie lange nach Beenden des Gesprächs noch übertragen werden soll.</b><br />Höhere Werte nutzen, wenn die Stimme plötzlich abbricht (erkennbar an einem flackerndem Voice-Icon neben dem Namen).<br />Dies ist nur bei Stimmaktivierungs-Übertragung sinnvoll. - - - Audio per packet - Audio pro Paket - - - How many audio frames to send per packet - Wieviele Audioframes pro Paket zu senden sind - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Dies legt fest, wieviele Audioframes in ein Paket gepackt werden sollen.</b><br />Dies zu erhöhen, steigert auch die Latenz der Sprache, senkt aber ebenso Bandbreitenbedarf. - - - Use TCP mode - Benutze TCP-Modus - - - Use TCP Compatibility mode - Benutze TCP-Kompatibilitätsmodus - - - <b>Enable TCP Compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>TCP-Kompatibilitätsmodus aktivieren</b>. <br />Dies lässt Mumble nur TCP zu Kommunikation mit dem Server nutzen. Es wird den Overhead erhöhen und bei verlorenen Paketen hörbare Pausen produzieren. Es wird nur empfohlen wenn die Standardeinstellungen nicht funktioniert. - - - Automatic Reconnect - Automatisches Neuverbinden - - - Reconnect when disconnected - Bei Unterbrechung erneut verbinden - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Neuverbinden nach Verbindungsabbruch</b>.<br />Dies führt eine automatische Neuverbindung nach 10 Sekunden durch, wenn die Serververbindung abbricht. - - - Maximum bandwidth used for sent audio - Maximale Bandbreite für Audiodaten - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Dies zeigt die Spitzenbandbreite für Ausgang an.</b><br />Dies zeigt die maximale Menge an Bandbreite zum Senden an. Audio Bitrate ist die maximale Bitrate (da VBR genutzt wird) nur für die Audio Daten. Position ist die Bitrate für Positionsinformationen. Overhead ist das Framing und die IP Paketheader (TCP/IP und UPD machen75% des Overhead aus). - - - Outgoing Bitrate - Ausgehende Bitrate - - - Quality - Qualität - - - Quality of compression (peak bandwidth) - Qualität der Kompression (Spitzenbandbreite) - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Dies setzt die Qualität der Kompression.</b><br />Dies bestimmt wieviel Bandbreite Mumble für ausgehendes Audio nutzen darf. - - - Complexity - Komplexität - - - Complexity of compression (CPU) - Komplexität der Kompression (CPU) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Dies setzt die Komplexität der Kompression.</b><br />Es bestimmt wieviel CPU-Zeit Mumble nutzen darf um die übertragene Sprachqualität zu steigern. Einstellungen über 5 bringen nur minimale Verbesserungen. - - - Amp - Verstärkung - - - Maximum amplification of input sound - Maximale Verstärkung des Eingangssounds - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Maximale Verstärkung des Eingangs.</b><br />Mumble normalisiert die Eingangslautstärke vor der Kompression, wobei dies einstellt wie sehr verstärkt werden darf.<br />Der tatsächliche Level wird kontinuierlich, vom Sprachmuster abhängig, aktualisiert; allerdings nie höher als hier festgelegt.<br />Wenn die Mikrofonlautstärke in den Audiostatistiken um 100% liegt, sollte man dies auf 2.0 setzen. Für Leute die dies kaum erreichen, muss es deutlich höher angesetzt werden.<br />Idealerweise sollte es folgendermaßen gesetzt werden: <i>Mikrofon Lautstärke * Verstärkungsfaktor >= 100</i>, selbst wenn man wirklich leise spricht.<br />Es ist nicht schädlich dies auf das Maximum zu setzen, aber Mumble wird auch Umgebungsgeräusche aufnehmen. - - - Default Jitter Buffer - Standard Jitter-Puffer - - - How long to prebuffer on first packet - Wie lange beim ersten Paket vorzupuffern - - - <b>This sets the default buffer size for the jitter buffer</b>.<br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the default buffer size to use on the first packet to arrive from a new speaker, or when a speaker using Voice Activity or Push-To-Talk just started talking again. If the start of sentences you hear is very jittery, increase this value. - <b>Dies legt die Standard-Puffergröße für den Jitterpuffer fest</b>.<br />Ankommende Audiodaten werden gepuffert und der Jitterpuffer versucht ständig diesen Puffer so schnell wie möglich ans Netzwerk zu übertragen, um die Latenz zu verringern. - - - Basic Audio - Grundeinstellungen - - - %1 ms - %1 ms - - - %1s - %1s - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1 kbit/2 (Audio %2, Position %4, Overhead %3) - - - Loopback Test - Loopback Test - - - PTT Audio cue - PTT Audio Hinweis - - - Audible audio cue when push-to-talk pressed and released - Hörbarer Audio Hinweis, wenn Push-To-Talk gedrückt und losgelassen wird - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Dies aktiviert die Audio Hinweise für Push-To-Talk.</b><br />Wenn dies gesetzt wird, gibt es einen kurzen Piepton wenn Push-To-Talk gedrückt und losgelassen wird. - - - None - Keiner - - - Local - Lokal - - - Server - Server - - - Loopback - Loopback - - - Desired loopback mode - Gewünschter Loopback-Modus - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Dies aktiviert einen der Loopback Testmodi.</b><br /><i>Keiner</i> - Loopback deaktiviert<br /><i>Lokal</i> - Emuliert einen lokalen Server.<br /><i>Server</i> - Fordere Loopback vom Server.<br />Beachten Sie, dass Sie niemand bei aktiviertem Loopback hören kann. Diese Einstellung wird beim Beenden der Anwendung nicht gespeichert. - - - Delay Variance - Verzögerungsvarianz - - - Variance in packet latency - Varianz der Packetlatenz - - - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>Dies legt die Varianz der Paketlatenz für den Loopback Test fest</b><br />Die meisten Audiopfade haben eine variable Latenz. Hiermit können Sie die Varianz für den Loopback Test festlegen. Falls Sie dies zum Beispiel auf 15ms setzen, wird ein Netzwerk mit 20-35ms oder eines mit 80-95ms Latenz emuliert. Die meisten Netzverbindungen haben eine Varianz von etwa 5ms - - - Packet Loss - Packet Loss - - - Packet loss for loopback mode - Packet loss für Loopback Modus - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0%% - <b>Dies legt den Packet Loss für den Loopback Modus fest.</b><br />Dies ist das Verhältnis an verlorenen Paketen. Es wird fast immer 0%% betragen, es sei den sie haben ein Bandbreitenproblem oder ihr Netzwerk ist nicht korrekt konfiguriert - - - %1 s - %1 s - - - %1% - %1% - - - -%1 dB - -%1 dB - - - Form - Form - - - &Input - &Eingang - - - &Output - &Ausgang - - - &Transmit - Über&tragen - - - Voice &Hold - Stimme &halten - - - TextLabel - Textlabel - - - &Quality - &Qualität - - - &Complexity - &Komplexität - - - Audio Processing - Audioprocessing - - - Noise Suppression - Rauschunterdrückung - - - Noise suppression - Rauschunterdrückung - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Dies legt die Menge an Rauschunterdrückung fest.</b><br />Je höher dieser Wert ist, desto aggressiver werden stationäre Geräusche unterdrückt. - - - Amplification - Verstärkung - - - Default &Jitter Buffer - Standard &Jitter Puffer - - - Safety margin for jitter buffer - Sichere Grenze für Jitterpuffer - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>Dies legt die minimale Sicherheitsgrenze für den Jitterpuffer fest.</b><br />Jedes eingehende Audio wird gepuffert und der Jitterpuffer versucht den Puffer so klein wie möglich zu halten so dass die Latenz so gering wie möglich sein kann. Dies legt die minimale Puffergröße fest. Falls sich der Anfang eines Satzes kaputt anhört, erhöhen Sie diesen Wert. - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Dies legt den Packet Loss für den Loopback Modus fest.</b><br />Dies ist das Verhältnis an verlorenen Paketen. Außer ihre Ausgangsbandbreite stößt an ihre Grenze oder etwas stimmt nicht mit Ihrer Netzwerkverbindung, so wird dies 0% betragen - - - &Loopback - &Loopback - - - Audio Output - Audioausgabe - - - Volume - Lautstärke - - - Volume of incoming speech - Lautstärke der ankommenden Sprache - - - <b>This adjusts the volume of incoming speech.</b><br />Note that this can only be used to decrease the volume. No amplification is possible. - <b>Dies legt die Lautstärke der eingehenden Sprache fest.</b><br />Beachten Sie, dass dies nur genutzt werden kann, um die Lautstärke zu verringern. Eine Verstärkung ist nicht möglich. - - - Off - Aus - - - DoublePush Time - DoublePush Zeit - - - - AudioInput - - - Form - Formular - - - - Interface - Schnittstelle - - - - System - System - - - - Input method for audio - Eingabemethode für Audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Dies ist die zu verwendende Eingabemethode für Audio.</b><br />Am wahrscheinlichsten sollte DirectSound ausgewählt werden. - - - - Device - Gerät - - - - Input device for audio - Eingabegerät für Audio - - - - <b>This is the input device to use for audio.</b> - <b>Dies ist das zu verwendende Eingabegerät für Audio.</b> - - - - Cancel Echo - Echo auslöschen - - - - Transmission - Übertragung - - - - &Transmit - Über&tragen - - - - When to transmit your speech - Wann Sprache übertragen werden soll - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Dies legt fest, wann Sprache übertragen werden soll.</b><br /><i>Kontinuierlich</i> - Die ganze Zeit<br /><i>Stimmaktivierung</i> - Sobald man deutlich spricht.</br><i>Push-To-Talk</i> - Wenn ein Hotkey gedrückt wird (siehe <i>Shortcuts</i>). - - - - DoublePush Time - Doppeldruck-Zeit - - - - TextLabel - Textlabel - - - Audible audio cue when push-to-talk pressed and released - Hörbarer Audio Hinweis, wenn Push-To-Talk gedrückt und losgelassen wird - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Dies aktiviert die Audio Hinweise für Push-To-Talk.</b><br />Wenn dies gesetzt wird, gibt es einen kurzen Piepton wenn Push-To-Talk gedrückt und losgelassen wird. - - - - PTT Audio cue - PTT Audio Hinweis - - - - Use SNR based speech detection - Benutze SNR basierte Spracherkennung - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>Dies legt fest, dass Sprache durch ein Signal-Rausch-Verhältnis erkannt wird.</b><br />In diesem Modus wird die Eingabe auf ein klares Signal hin analysiert und die Klarheit des Signals für die Spracherkennung genutzt. - - - - Signal to Noise - Signal zu Rauschen - - - - Use Amplitude based speech detection. - Benutze amplitudenbasierte Spracherkennung. - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>Dies legt fest, dass Sprache durch die Amplitude erkannt wird.</b><br />In diesem Modus wird die Stärke des Eingangssignals genutzt um Sprache zu erkennen. - - - - Amplitude - Amplitude - - - - Voice &Hold - Stimme &halten - - - - How long to keep transmitting after silence - Wie lange nach Einsetzen von Stille übertragen werden soll - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Dies wählt aus, wie lange nach Beenden des Gesprächs noch übertragen werden soll.</b><br />Höhere Werte nutzen, wenn die Stimme plötzlich abbricht (erkennbar an einem flackerndem Voice-Icon neben dem Namen).<br />Dies ist nur bei Stimmaktivierungs-Übertragung sinnvoll. - - - - Silence Below - Stille bis - - - - Signal values below this counts as silence - Signalwerte darunter zählen als Stille - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>Dies setzt die Auslösewerte für die Spracherkennung.</b><br />Zusammen mit dem Audiostatistik Fenster können die Auslösewerte für Spracherkennung manuell eingestellt werden. Eingabewerte unter "Stille bis" zählen immer als Stille, Werte über "Sprache über" immer als Sprache. Werte dazwischen zählen als Sprache wenn schon gesprochen wird, lösen aber keine Erkennung (und damit Übertragung) aus. - - - - Speech Above - Sprache über - - - - Signal values above this count as voice - Signalwerte darüber zählen als Sprache - - - - Compression - Kompression - - - - &Quality - &Qualität - - - - Quality of compression (peak bandwidth) - Qualität der Kompression (Spitzenbandbreite) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Dies setzt die Qualität der Kompression.</b><br />Dies bestimmt wieviel Bandbreite Mumble für ausgehendes Audio nutzen darf. - - - &Complexity - &Komplexität - - - Complexity of compression (CPU) - Komplexität der Kompression (CPU) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Dies legt die Komplexität der Kompression fest.</b><br />Es bestimmt wieviel CPU-Zeit Mumble nutzen darf um die übertragene Sprachqualität zu steigern. Einstellungen über 5 bringen nur minimale Verbesserungen. - - - - Audio per packet - Audio pro Paket - - - - How many audio frames to send per packet - Wieviele Audioframes pro Paket zu senden sind - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Dies legt fest, wieviele Audioframes in ein Paket gepackt werden sollen.</b><br />Dies zu erhöhen, steigert die Latenz der Sprache, senkt aber gleichzeitig Bandbreitenbedarf. - - - Maximum bandwidth used for sent audio - Maximal verwendete Bandbreite für Audiodaten - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Dies zeigt die Spitze der ausgehenden Bandbreite an.</b><br />Dies zeigt die maximale Höhe der Bandbreite an, die zum Senden verwendet wurde. Die Audio Bitrate ist die maximale Bitrate, die für Audio Daten genutzt wird (maximal da VBR verwendet wird). Position ist die Bitrate für Positionsinformationen. Overhead ist vom Einrahmen und den IP Paketheadern (IP und UPD machen75% dieses Overheads aus). - - - - Audio Processing - Ton-Verarbeitung - - - - Noise Suppression - Rauschunterdrückung - - - - Noise suppression - Rauschunterdrückung - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Dies legt die Menge an Rauschunterdrückung fest.</b><br />Je höher dieser Wert ist, desto aggressiver werden stationäre Geräusche unterdrückt. - - - - Amplification - Verstärkung - - - - Maximum amplification of input sound - Maximale Verstärkung des Eingangssounds - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Maximale Verstärkung des Eingangs.</b><br />Mumble normalisiert die Eingangslautstärke vor der Kompression, wobei dies einstellt wie sehr verstärkt werden darf.<br />Der tatsächliche Level wird kontinuierlich, vom Sprachmuster abhängig, aktualisiert; allerdings nie höher als hier festgelegt.<br />Wenn die Mikrofonlautstärke in den Audiostatistiken um 100% liegt, sollte man dies auf 2.0 setzen. Für Leute die dies kaum erreichen, muss es deutlich höher angesetzt werden.<br />Idealerweise sollte es folgendermaßen gesetzt werden: <i>Mikrofon Lautstärke * Verstärkungsfaktor >= 100</i>, selbst wenn man wirklich leise spricht.<br />Es ist nicht schädlich dies auf das Maximum zu setzen, aber Mumble wird auch Umgebungsgeräusche aufnehmen. - - - - Current speech detection chance - Aktuelle Spracherkennungswahrscheinlichkeit - - - - Audible audio cue when push-to-talk is activated or deactivated - Akustischer Hinweis, wenn Push-to-Talk aktiviert oder deaktiviert wird. - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>Dies wählt als Spracherkennungsmechanismus das Signal-zu-Rausch-Verhältnis.</b><br />In diesem Modus werden die eingehenden Audiodaten auf ein klares Signal hin überprüft. Die Klarheit des Signals aktiviert dann die Spracherkennung. - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Dies zeigt die aktuellen Spracherkennungs-Einstellungen an.</b><br />Die Einstellung können im Einstellungsdialog oder dem Audio-Assistenten geändert werden. - - - - Idle AutoMute - AutoStumm bei nicht-Verwendung - - - - How long to remain idle before auto-mute. - Wie lange ungenutzt bleiben, bis man stumm gestellt wird. - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - Dies setzt den Ungenutzt-Timer. Wenn der Timer ausläuft, ohne dass Ton-Daten an den Server gesendet werden, werden Sie stumm geschaltet. - - - - Maximum bandwidth used for sending audio - Maximale Bandbreite, die zum senden von Audiodaten verwendet wird. - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Dies legt die Menge an Rauschunterdrückung fest, die verwendet werden soll.</b><br />Je höher dieser Wert, desto aggressiver wird stationäres Rauschen unterdrückt. - - - - AudioInputDialog - - - Continuous - Kontinuierlich - - - - Voice Activity - Stimmaktivierung - - - - Push To Talk - Push-To-Talk - - - - Audio Input - Audioeingabe - - - - - %1 ms - %1 ms - - - - - Off - Aus - - - - %1 s - %1 s - - - - -%1 dB - -%1 dB - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1 kbit/s (Audio %2, Position %4, Overhead %3) - - - - %1 min - %1 min - - - - AudioOutput - - - Form - Formular - - - - Interface - Schnittstelle - - - - System - System - - - - Output method for audio - Ausgabemethode für Audio - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Dies ist die Ausgabemethode die für Audio verwendet werden soll.</b><br />Am wahrscheinlichsten sollte DirectSound ausgewählt werden. - - - - Device - Gerät - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - Positionsabhängiges Audio - - - - Audio Output - Audioausgabe - - - - Default &Jitter Buffer - Standard &Jitter Puffer - - - - Safety margin for jitter buffer - Sicherheitsgrenze für den Jitterpuffer - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>Dies legt die minimale Sicherheitsgrenze für den Jitterpuffer fest.</b><br />Jedes eingehende Audio wird gepuffert und der Jitterpuffer versucht den Puffer so klein wie möglich zu halten so dass die Latenz so gering wie möglich sein kann. Dies legt die minimale Puffergröße fest. Falls sich der Anfang eines Satzes unterbrochen anhört, erhöhen Sie diesen Wert. - - - - TextLabel - Textlabel - - - - Volume - Lautstärke - - - - Volume of incoming speech - Lautstärke der ankommenden Sprache - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>Dies legt die Lautstärke der eingehenden Sprache fest.</b><br />Beachten Sie, dass bei einem Wert über 100% die Geräusche verzerrt werden. - - - - Output Delay - Ausgabeverzögerung - - - - Amount of data to buffer - Menge an Daten die gepuffert werden sollen - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Dies legt die Menge an Daten fest, die im Ausgabepuffer vorgepuffert werden sollen. Experimentieren Sie mit verschiedenen Werten und setzen Sie es auf den niedrigsten Wert, der noch kein schnelles Zittern/Flackern im Ton verursacht. - - - Volume attenuation - Lautstärkendämpfung - - - MinDistance - MinDistanz - - - Minimum distance to player before sound decreases - Minimale Distanz zum Spieler bevor Lautstärke sinkt - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Dies legt die minimale Distanz für Klangberechnungnen fest. Die Lautstärke anderer Spieler wird nicht sinken, solange sie nicht wenigstens soweit wie eingestellt entfernt sind. - - - MaxDistance - MaxDistanz - - - Maximum distance, beyond which sound won't decrease - Maximale Distanz, über der die Lautstärke nicht mehr sinkt - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Dies legt die maximale Distanz für Klangberechnungnen fest. Die Lautstärke anderer Spieler wird nicht mehr sinken, wenn sie weiter als eingestellt entfernt sind. - - - RollOff - Rolloff - - - - Factor for sound volume decrease - Faktor zur Lautstärkensenkung - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Wie schnell soll die Lautstärke sinken, wenn die Minimaldistanz überschritten ist. Mit der Standardeinstellung (1.0) wird die Lautstärke bei doppelter Entfernung halbiert. Ein höherer Wert lässt die Lautstärke schneller fallen, während ein geringerer Wert die Lautstärker langsamer fallen lässt. - - - - Bloom - Bloom - - - - Loopback Test - Rückkopplungs-Test - - - - Delay Variance - Verzögerungsvarianz - - - - Variance in packet latency - Varianz der Paketlatenz - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>Dies legt die Varianz der Paketlatenz für den Rückkopplungs-Test fest.</b><br />Die meisten Audiopfade haben eine variable Latenz. Hiermit können Sie die Varianz für den Rückkopplungs-Test festlegen. Falls Sie dies zum Beispiel auf 15ms setzen, wird ein Netzwerk mit 20-35ms oder eines mit 80-95ms Latenz immitiert. Die meisten Netzverbindungen haben eine Varianz von etwa 5ms. - - - - Packet Loss - Packetverlust - - - - Packet loss for loopback mode - Paketverlust für den Rückkopplungs-Modus - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Dies legt den Paketverlust für den Rückkopplungs-Modus fest.</b><br />Dies ist das Verhältnis an verlorenen Paketen. Außer ihre Ausgangsbandbreite stößt an ihre Grenze, oder etwas stimmt nicht mit Ihrer Netzwerkverbindung, wird dies 0% betragen - - - - &Loopback - &Rückkopplung - - - - Desired loopback mode - Gewünschter Rückkopplungs-Modus - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Dies aktiviert einen der Rückkopplungs-Testmodi.</b><br /><i>Keiner</i> - Rückkopplung deaktiviert<br /><i>Lokal</i> - Immitiert einen lokalen Server.<br /><i>Server</i> - Fordere vom Server eine Rückkopplung.<br />Beachten Sie, dass Sie niemand bei aktiviertem Loopback hören kann. Diese Einstellung wird beim Beenden der Anwendung nicht gespeichert. - - - - Factor for sound volume increase - Faktor zur Lautstärkenerhöhung - - - - The connected "speakers" are actually headphones. - Die angeschlossenen Audioausgabe-Geräte sind Kopfhöhrer. - - - - Minimum Distance - Minimale Distanz - - - - Minimum distance to player before sound volume decreases - Minimale Distanz zum Spieler, bevor dessen Lautstärke geringer wird. - - - - Maximum Distance - Maximale Distanz - - - - Maximum distance, beyond which speech volume won't decrease - Maximale Distanz zum Spieler, hinter der seine Lautstärke nicht mehr geringer wird. - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - Dies setzt die maximale Distanz für Ton-Berechnungen. Wenn man weiter weg als diese Distanz ist, wird die Lautstärke des anderen Spielers nicht mehr weiter verringert. - - - - Minimum Volume - Minimale Lautstärke - - - - What should the volume be at the maximum distance? - Wie hoch soll die Lautstärke bei maximaler Distanz sein? - - - - How much should sound volume increase for sources that are really close? - Um wie viel soll die Lautstärke für Quellen erhöht werden, die sehr nah sind? - - - Connected "speakers" are actually headphones. - Kopfhöhrer sind angeschlossen und werden verwendet. - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - Ist dies aktiviert bedeutet dies, dass keine Lautsprecher angeschlossen sind, sondern nur Kopfhörer. Dies ist wichtig, da Lautsprecher für gewöhnlich vor Ihnen sind, während Kopfhörer direkt links und rechts anliegen. - - - - Headphones - Kopfhörer - - - - Other Applications - Andere Anwendungen - - - - Volume of other applications during speech - Lautstärke der anderen Anwendungen während jemand spricht - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>Reduziere Lautstärke anderer Anwendungen während jemand spricht.</b><br />Mumble unterstützt die Reduzierung der Lautstärke anderer Anwendungen während des Sprechens. Dies legt die relative Lautstärke anderer Anwendungen fest, wenn andere sprechen. - - - - AudioOutputDialog - - - None - Keine - - - - Local - Lokal - - - - Server - Server - - - - Audio Output - Audioausgabe - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1% - - - - %1ms - %1ms - - - - - %1m - %1m - - - %1 - %1 - - - - AudioStats - - - Peak microphone level - Höchster Mikrofonpegel - - - - Peak speaker level - Höchster Lautsprecherpegel - - - - Peak clean level - Höchster sauberer Pegel - - - Microphone loudness - Mikrofonlautstärke - - - Mic Signal-To-Noise - Mic Signal-Rauschen-Verhältnis - - - - Speech Probability - Sprachwahrscheinlichkeit - - - Audio bitrate - Audio Bitrate - - - - Peak power in last frame - Spitzenhöhe im letzten Paket - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. - Dies zeigt die Spitzenleistung im letzten Frame (20ms) an und ist als Maß äquivalent zu "Input Power". Stattdessen bitte <b>Lautstärke</b> nutzen. - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Dies zeigt den Spitzenpegel des Lautsprechers im letzten Paket (20ms) an. Solange keine Multikanal-Sampling-Methode (wie ASIO) genutzt wird, wird dieser Wert 0 sein. Hat man jedoch solch eine Einstellung konfiguriert und der Wert ist trotzdem 0 während man Klänge von anderen Programmen abspielt, arbeitet die Einstellung nicht korrekt. - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. - Dies zeigt den Spitzenpegel nach dem Processing im letzten Paket (20ms) an. Im Idealfall sollte dies -96 dB betragen, wenn man nicht spricht. Die Realität zeigt, dass man in einem Tonstudio etwa -60 dB und zuhause -20 dB erwarten kann. When man spricht, sollte dies auf -5 bis -10 dB ansteigen.<br />Nutzt man Echounterdrückung und der Wert steigt auf mehr als -15 dB wenn man nicht spricht, sind die Audioeinstellungen nicht korrekt und man stört andere Spieler mit Echos. - - - - How close the current input level is to ideal - Wie nah der aktuelle Eingangspegel am Idealwert ist - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality - Dies zeigt an wie nah die Eingangssignallautstärke am Ideal ist. Um die Mikrofonlautstärke anzupassen, sollte das Programm gestartet werden mit dem die Aufnahmelautstärke angepasst wird.<br /><b>Nun sollte man, so laut wie es im Spiel vorkommt, sprechen</b><br />Die Lautstärke muss nun so nah wie möglich an die 100% angepasst werden, aber nicht darüber hinaus. Wenn dem so ist, wird es hörbares Clipping geben, was die Soundqualität mindert - - - - Signal-To-Noise ratio from the microphone - Signal-Rausch-Verhältnis vom Mikrofon - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - Dies ist das Signal-Rausch-Verhältnis (SRV) des Mikrofons im letzten Paket (20ms). Es zeigt an, um wie viel klarer die Stimme im Vergleich zum (Hintergrund-)Rauschen ist.<br />Ist der Wert unter 1.0 gibt es mehr Geräusche als Stimme im Signal, weshalb die Qualität reduziert ist.<br />Es gibt keine Obergrenze, aber ein Wert über 40-50 kann ohne Tonstudio nicht erwartet werden. - - - - Probability of speech - Sprachwahrscheinlichkeit - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - Dies ist die Wahrscheinlichkeit, dass das letzte Paket (20ms) Sprache und kein Umgebungsrauschen war.<br />Die Stimmaktivierungserkennung hängt davon ab, wie sie eingestellt ist. Der Trick ist, dass die Mitte eines Satzes immer als Sprache erkannt wird; problematisch sind Pausen zwischen Wörtern und der Anfang des Satzes.<br />Ist dies fett geschrieben, bedeutet dies, dass Mumble gerade übertragt (wenn man verbunden ist). - - - - Bitrate of last frame - Bitrate des letzten Paketes - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - Dies ist die Audiobitrate des letzten komprimierten Paketes (20ms). Deshalb wird sie auch hoch und runter springen, da VBR die Qualität anpasst. Um die Spitzenbitrate einzustellen muss <b>Kompressionsqualität</b> im Einstellungsdialog angepasst werden. - - - - Power spectrum of input signal and noise estimate - Powerspektrum des Eingangssignals und Rauschabschätzung - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - Dies zeigt das Powerspektrum des Eingangssignals (rote Linie) und die Rauschabschätzung (blau gefüllt) an.<br />Alle Amplituden werden mit 30 multipliziert um anzuzeigen wie viel mehr Signal als Rauschen im Wellenband vorhanden ist.<br />Dies ist vermutlich nur von Interesse, wenn man die Rauschbedingungen des Mikrofones präzise einstellt. Unter guten Voraussetzungen sollte nur eine winzige blaue Stelle unten zu sehen sein. Ist mehr als die Hälfte des Graphen blau, hat man eine ungünstige Geräuschkulisse. - - - - Weights of the echo canceller - Gewichte des Echounterdrückers - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - Dies zeigt die Gewichte des Echounterdrückers, mit der Zeit auf der Y- und der Frequenz auf der X-Achse.<br />Idealerweise sollte dies schwarz sein, was kein Echo bedeutet. Normalerweise hat man einen oder mehrere horizontale Streifen von blauer Farbe, die das zeitverzögerte Echo darstellen. Man sollte sehen, wie die Gewichte in Echtzeit aktualisiert werden.<br />So lange man keine Echoquelle hat, wird man keine nützlichen Daten hier sehen, weshalb man etwas Musik abspielen sollte.<br />Man kann zwischen Real- und Imaginäranteilen des Frequenzdomänen-Gewischte oder alternativ den berechneten Modulus und Phase auswählen. Am nützlichsten ist hierbei Modulus, was die Amplitude des Echos angibt und anzeigt wieviel vom ausgehenden Signal bei diesem Zeitschritt entfernt wird. Die anderen Ansichten sind nützlich für diejenigen die den Echoauslöschungs-Algorithmus finetunen wollen.<br />Achtung: Wenn das Gesamtbild im Modulus-Modus massiv fluktuiert, kann der Echoauslöscher keine Korrelation zwischen den beiden Eingangsquellen (Lautsprecher und Mikrofon) herstellen. Entweder hat man eine lange Verzögerung des Echos oder eine der Eingangsquellen sind falsch konfiguriert. - - - Mumble - Mumble - - - Real - Real - - - Imaginary - Imaginär - - - Modulus - Modulus - - - Phase - Phase - - - Doublepush interval - DoublePush Intervall - - - >1000ms - >1000ms - - - - Audio Statistics - Audiostatistiken - - - - Input Levels - Eingangspegel - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - Dies zeigt den Spitzenpegel im letzten Paket (20ms) an und zeigt was üblicherweise wohl "Eingangspegel" genannt wird. Bitte ignorieren Sie dies und sehen sich stattdessen bitte <b>Mikrofonleistung</b> an, was deutlich stabiler ist und Ausbrüche verwirft. - - - TextLabel - Textlabel - - - - Signal Analysis - Signal Analyse - - - - Microphone power - Mikrofonpegel - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - Dies zeigt an, wie nah die aktuelle Eingangslautstärke am Ideal ist. Um den Mikrofonpegel anzupassen, öffnen Sie das Programm mit dem Aufnahmelautstärken geändert werden und schauen Sie hier auf den Wert während Sie reden.<br /><b>Sprechen Sie so laut, als wären Sie über etwas verärgert.</b><br />Passen Sie die Lautstärke an, bis der Wert nahe der 100% ist, aber nicht darüber hinaus. Wenn es darüber hinaus geht, wird es vermutlich zum Clipping in ihrer Sprache kommen, was die Soundqualität stark beeinträchtigt. - - - - Signal-To-Noise ratio - Signal-Rausch-Verhältnis - - - - Configuration feedback - Konfigurations-Rückmeldung - - - - Current audio bitrate - Aktuelle Audio Bitrate - - - - DoublePush interval - DoppelDruck Intervall - - - Time between last two PushToTalk presses - Zeit zwischen den beiden letzten Push-To-Talks (Knopfdrücken) - - - - Speech Detection - Spracherkennung - - - - Current speech detection chance - Aktuelle Spracherkennungswahrscheinlichkeit - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Dies zeigt die aktuellen Spracherkennungs-Einstellungen an.</b><br />Die Einstellungen können im Einstellungsdialog oder dem Audio-Assistenten geändert werden. - - - - Signal and noise power spectrum - Signal und Rausch Leistungsspektrum - - - - Echo Analysis - Echo Analyse - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - Audio Einstellungs-Assistent - - - - Introduction - Einführung - - - - Welcome to the Mumble Audio Wizard - Willkommen zum Mumble Audio Assistenten - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - Dies ist der Audio Einstellungs-Assistent von Mumble. Er wird Ihnen helfen, die richtigen Eingabelautstärken ihrer Soundkarte und die korrekten Parameter für die Tonverarbeitung festzulegen. - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - Bitte beachten Sie, dass, während dieser Assistent ausgeführt wird, jegliche Tondaten lokal zurückgekoppelt werden und keine Ton-Daten an den Server gesendet werden. - - - - Finished - Fertig - - - - Enjoy using Mumble - Viel Spaß mit Mumble - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - Herzlichen Glückwunsch. Sie sollten nun eine reichere Sounderfahrung mit Mumble machen. - - - - Device selection - Geräteauswahl - - - - Selecting the input and output device to use with Mumble. - Wählen Sie das Eingabe- und Ausgabegerät aus, welches Mumble verwenden soll. - - - - Input device - Eingabegerät - - - - This is the device your microphone is connected to. - Dies ist das Gerät was mit ihrem Mikrofon verbunden ist. - - - - - System - System - - - - Input method for audio - Eingabemethode für Audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Dies ist die Eingabemethode für Audio.</b><br />Am wahrscheinlichsten sollte DirectSound ausgewählt werden. - - - - - Device - Gerät - - - - Input device to use - Eingabegerät - - - - <b>Selects which sound card to use for audio input.</b> - <b>Wählen Sie, welche Soundkarte für Audioeingaben verwendet werden soll.</b> - - - - Output device - Ausgabegerät - - - - This is the device your speakers or headphones are connected to. - Dies ist das Gerät, an das ihre Lautsprecher oder Kopfhörer angeschlossen sind. - - - - Output method for audio - Ausgabemethode für Audio - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Dies ist die Ausgabemethode für Audio.</b><br />Am wahrscheinlichsten sollte DirectSound ausgewählt werden. - - - - Output device to use - Ausgabegerät - - - - <b>Selects which sound card to use for audio Output.</b> - <b>Wählen Sie, welche Soundkarte für Audioausgaben verwendet werden soll.</b> - - - - Volume tuning - Lautstärken-Einstellung - - - - Tuning microphone hardware volume to optimal settings. - Mikrofonhardware-Lautstärke auf optimale Werte einstellen. - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - Öffnen Sie die Lautstärkeeinstellungen und gehen Sie zu den Aufnahmeeinstellungen. Versichern Sie sich, dass das Mikrofon als aktives Eingabegerät mit maximaler Aufnahmelautstärke ausgewählt ist. Falls es eine Option "Mikrofon Boost" gibt, sollte diese aktiviert sein. - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - Sprechen Sie so laut, als wären Sie verärgert oder aufgeregt. Verringern Sie die Lautstärke in den Lautstärkeeinstellungen bis der Balken so weit wie möglich oben im blauen und grünen, aber nicht im roten Bereich ist, während Sie sprechen. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Sprechen Sie jetzt so ruhig, als würden sie spät nachts sprechen und niemanden stören wollen. Bewegen Sie den Schieber so, dass der Balken im Grünen ist während Sie sprechen, aber im Blauen bleibt wenn Sie nichts sagen. - - - - Voice Activity Detection - Sprachaktivitäts-Erkennung - - - - Letting Mumble figure out when you're talking and when you're silent. - Lassen Sie Mumble herausfinden wann Sie sprechen und wann nicht. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Dies wird Mumble helfen herauszufinden, wann Sie sprechen. Der erste Schritt ist den zu benutzenden Datenwert auszuwählen. - - - - Raw amplitude from input - Rohamplitude der Eingabe - - - - Signal-To-Noise ratio - Signal-Rausch-Verhältnis - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Als nächstes müssen Sie die folgenden beiden Schieber einstellen. Die ersten paar Geräusche die Sie beim Sprechen machen sollten im grünen Bereich (definitv Sprache) landen. Während Sie sprechen sollten Sie im gelben Bereich (könnte Sprache sein) bleiben und wenn Sie nicht sprechen, sollte alles im roten Bereich (definitiv keine Sprache) bleiben. - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - Als letztes müssen Sie die Aufschubzeit festlegen. Mumble kann so lange weiteren Ton aufnehmen und weiterhin übertragen, bevor es abbricht. Dies erlaubt ihnen während des Sprechens Luft zu holen. - - - - Device tuning - Geräte-Einstellungen - - - - Changing hardware output delays to their minimum value. - Setze Hardware Ausgabeverzögerungen auf ein Minimum. - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - Um die Latenz auf ein Minimum zu reduzieren ist es wichtig, so wenig Audio wie möglich auf der Soundkarte zu puffern. Viele Soundkarten geben jedoch einen deutlich geringeren Puffer an als jenen, den Sie eigentlich zum arbeiten benötigen. Deshalb ist der einzige Weg die Größe auszutesten. - - - You should hear a multitone chord. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. - Sie sollten einen Multiton-Akkord hören. Setzen Sie den Schieber auf den niedrigsten Wert, der <b>keine</b> Unterbrechungen oder Jitter im Sound verursacht. - - - - Amount of data to buffer. - Menge an zu puffernden Daten. - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Dies legt die Menge an Daten fest, die im Ausgabepuffer vorgepuffert werden sollen. Experimentieren Sie mit verschiedenen Werten und setzen Sie es auf den niedrigsten Wert, der noch kein schnelles Zittern oder Vibrieren im Ton verursacht. - - - - %1ms - %1ms - - - - %1 s - %1 s - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - Sie sollten eine Person reden hören. Schieben Sie den Regler auf den niedrigsten Wert der noch <b>keine</b> Unterbrechungen oder Knacken im Ton liefert. Bitte beachten Sie, dass die lokale Rückkopplung ausgeschaltet ist, um die Ausgabe besser zu hören. - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - Wenn Sie das Mikrofon so positionieren, dass es die Lautsprecher oder das Headset aufnimmt, wird Mumble die Audiopfad-Gesamtverzögerung in Ihrem System messen. Dies ist die Zeit zwischen dem Ausgeben eines Tons bis er im Eingangspuffer gefunden wird. - - - - Audio path is %1ms long. - Audiopfad ist %1ms lang. - - - - Audio path cannot be determined. Input not recognized. - Audiopfad konnte nicht bestimmt werden. Eingabe wurde nicht erkannt. - - - - Use echo cancellation - Benutze Echounterdrückung - - - - Cancel echo from headset or speakers. - Unterdrücke Echos vom Headset oder den Lautsprechern. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - Dies aktiviert die Echo-Unterdrückung für ausgehende Audio-Signale, was sowohl bei Lautsprechern wie auch Headsets hilft. - - - - Enable positional audio - Positionsabhängiges Audio aktivieren - - - - Allows positioning of sound. - Erlaubt Positionierung der Audio-Signale. - - - - This allows Mumble to use positional audio to place voices. - Dies erlaubt Mumble positionsabhängiges Audio zu verwenden um Stimmen zu platzieren. - - - - Positional Audio - Positionsabhängiges Audio - - - - Adjusting attenuation of positional audio. - Einstellen der Lautstärkenverminderung positionsabhängiger Audio-Signale. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble unterstützt positionsabhängiges Audio für einige Spiele und positioniert die Stimmen der anderen Spieler relativ zu Ihrer Position im Spiel. In Abhängigkeit von ihrer Position wird die Lautstärke der Stimmen geändert um Richtung und Abstand der Spieler zu simulieren. Solch eine Positionierung hängt von einer korrekten Lautsprecherkonfiguration in Ihrem Betriebssystem ab, weshalb hier ein Test gemacht wird. - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - Die Grafik unten zeigt die Position von <font color="red">Ihnen</font>, den <font color="yellow">Lautsprechern</font> und einer sich <font color="green">bewegenden Quelle</font> von oben gesehen. Sie sollten das Geräusch sich zwischen den Kanälen bewegen hören. - - - - Use headphones - Benutze Kopfhörer - - - - Use headphones instead of speakers. - Benutze Kopfhörer statt Lautsprechern. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - Dies ignoriert die Betriebssystem Lautsprechereinstellungen und konfiguriert die Positionierung stattdessen für Kopfhörer. - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Mumble ist in ständiger Entwicklung und das Entwicklungsteam will sich auf die Features konzentrieren, die den meisten Benutzern nützen. Dazu unterstützt Mumble das Senden anonymer Statistiken über die Konfiguration. Diese Statistiken sind essentiell für die weitere Entwicklung und stellen sicher, dass die benutzten Features die Sie nutzen nicht entfernt werden. - - - - Submit anonymous statistics to the Mumble project - Sende anonyme Statistiken an das Mumble Projekt - - - - Push To Talk: - Push-To-Talk: - - - - BanEditor - - - &Add - &Hinzufügen - - - - &Update - &Aktualisieren - - - - &Remove - &Entfernen - - - &OK - &OK - - - Accept changes - Änderungen übernehmen - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Dieser Button wird aktuelle Gruppen/ACLs akzeptieren und sie an den Server senden. Wenn versehentlich Schreibrechte entfernt wurden, wird der Server sie hinzufügen. - - - &Cancel - &Abbrechen - - - Reject changes - Änderungen nicht übernehmen - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - Dieser Button macht alle Änderungen rückgängig und schließt den Dialog ohne ACLs oder Gruppen auf dem Server zu aktualisieren. - - - - Mumble - Edit Bans - Mumble - Bans editieren - - - - 0.0.0.0 - 0.0.0.0 - - - - &Address - &Adresse - - - - &Mask - &Maske - - - - ChanACL - - - W - W - - - - T - T - - - - E - E - - - - S - S - - - - A - A - - - - M - M - - - - K - K - - - - C - C - - - - L - L - - - - None - Keine - - - Write - Schreiben - - - - Traverse - durchqueren - - - - Enter - Betreten - - - - Speak - Sprechen - - - - AltSpeak - AltSpeak - - - - Mute/Deafen - Stumm-/Taubstellen - - - - Move/Kick - Verschieben/Kicken - - - - Make channel - Channel erstellen - - - - Link channel - Channel verbinden - - - - This represents no privileges. - Dies repräsentiert keine Privilegien. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Dies repräsentiert vollen Zugriff zum Kanal, einschließlich Fähigkeiten Gruppen und ACL-Informationen zu ändern. Dieses Privileg impliziert alle anderen Privilegien. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Dies repräsentiert das Recht um mit dem Kanal zu durchqueren. Wenn ein Benutzer dieses Privileg nicht hat, kann er auf keinen Kanal oder Unterkanal zugreifen, egal welche Rechte er in den Unterkanälen hat. - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Dies repräsentiert Rechte um den Kanal zu betreten. Hat man eine hierarchische Kanalstruktur, sollte man jedem Traverse geben aber Betreten in der Wurzel der Hierarchie einschränken. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Dies repräsentiert das Recht in einem Kanal zu sprechen. Benutzer ohne dieses Privileg werden vom Server unterdrückt (gekennzeichnet als stumm) und können in diesem Channel so lange nicht sprechen, bis sie von jemandem mit den entsprechenden Rechten ent-stummgestellt werden. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - Dies repräsentiert das Recht in einem Kanal mit alternativer Sprache (AltSpeak) zu sprechen. Dies funktioniert genauso wie das <i>Sprechen</i>-Privileg, betrifft aber Audio-Daten die aufgenommen wurden, während Alt-Push-To-Talk gedrückt wurde. Es wird genutzt um Sprache in einer Hierarchie von Kanälen zu verbreiten ohne sie zu verbinden. - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Dies repräsentiert das Recht andere Benutzer stumm oder taub zu stellen. Einmal stummgestellt bleibt ein Benutzer stumm bis ein anderer Benutzer mit entsprechenden Privilegien dies ändert oder sich neu zum Server verbunden wird. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Dies repräsentiert das Recht einen Benutzer in einen anderen Kanal zu verschieben oder ihn vom Server zu kicken. Um einen Benutzer auch wirklich zu verschieben muss der verschiebende Benutzer entweder Verschieben/Kick-Rechte im Zielkanal haben, oder dem verschobenen Benutzer muss es erlaubt sein, den Zielkanal zu betreten. Benutzer mit diesem Privileg können also (ausreichende Rechte im Zielkanal vorausgesetzt) andere Benutzer in Kanäle verschieben, die diese normalerweise nicht betreten dürfen. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Dies repräsentiert das Recht Unterkanäle zu erstellen. Der Benutzer, der den Unterkanal erstellt, gehört automatisch zur Admingruppe des Kanals. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Dies repräsentiert das Recht Kanäle zu verbinden. Benutzer in verbundenen Kanälen können sich gegenseitig hören, solange der sprechende Benutzer das <i>Sprechen</i>-Privileg im Kanal des Hörers hat. Man benötigt Verbindungsprivilegien in beiden Kanälen um eine Verbindung aufzubauen, aber nur in einem der Beiden um sie aufzuheben. - - - - Write ACL - ACL bearbeiten - - - - ClientPlayer - - - Authenticated - Authentifiziert - - - - Muted (server) - Stumm (Server) - - - - Deafened (server) - Taub (Server) - - - - Local Mute - Lokal Stumm - - - - Muted (self) - Stumm (selbst) - - - - Deafened (self) - Taub (selbst) - - - - ConfigDialog - - - Mumble Configuration - Mumble-Konfiguration - - - &OK - &OK - - - - Accept changes - Änderungen übernehmen - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Dieser Button übernimmt die aktuellen Einstellungen und kehrt zur Anwendung zurück.<br />Die Einstellungen werden beim Beenden der Anwendung gespeichert. - - - &Cancel - &Abbrechen - - - - Reject changes - Änderungen verwerfen - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Der Button wird alle Änderungen verwerfen und zur Anwendung zurückkehren.<br />Die Einstellungen werden auf die vorherigen Werte zurückgesetzt. - - - &Apply - Ü&bernehmen - - - - Apply changes - Änderungen übernehmen - - - - This button will immediately apply all changes. - Dieser Button wird alle Änderungen sofort übernehmen. - - - - Undo changes for current page - Änderungen der aktuellen Seite rückgängig machen - - - - This button will revert any changes done on the current page to the most recent applied settings. - Dieser Knopf stellt alle Änderunge auf der aktuellen Seite auf die zuletzt angewandten Einstellung zurück. - - - - Restore defaults for current page - Standard für die aktuelle Seite wiederherstellen - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - Dieser Knopf stellt die Einstellungen der aktuellen Seite auf ihre Standardwerte zurück. Andere Seiten werden nicht verändert.<br />Um alle Einstellungen auf Standardwerte zu setzen, muss dieser Knopf auf allen Seiten betätigt werden. - - - Show all configuration items - Zeige alle Konfigurationselemente - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Dies zeigt alle Konfigurationselemente.</b><br />Mumble enthält viele Konfigurationselemente die die meisten Benutzer nicht ändern werden. Dies zu aktivieren zeigt alle konfigurierbaren Elemente an. - - - Expert Config - Expertenkonfiguration - - - Tab 1 - Tab 1 - - - - Advanced - - - - - ConnectDialog - - &Name - &Name - - - - A&ddress - A&dresse - - - - &Port - &Port - - - - &Username - Ben&utzername - - - - &Password - &Passwort - - - - &Connect - &Verbinden - - - - Cancel - Abbrechen - - - - &Add - &Hinzufügen - - - - &Remove - &Entfernen - - - - &Custom Servers - &Benutzerdefinierte Server - - - - Server &Browser - Server &Browser - - - Name - Name - - - - Address - Adresse - - - - URL - URL - - - - C&opy to custom - Zu Benutzerdefinierten &hinzufügen - - - - &View Webpage - &Webseite besuchen - - - - Connecting to %1 - Verbinde zu %1 - - - - Enter username - Benutzernamen eingeben - - - Mumble - Mumble - - - - Failed to fetch server list - Konnte Serverliste nicht laden - - - - &Label - &Bezeichnung - - - - Label - Bezeichnung - - - - -Unnamed entry- - -Unbenannter Eintrag- - - - - Mumble Server Connect - Mumble Server Verbinden - - - - &Cancel - &Abbrechen - - - - Unknown - Unbekannt - - - - - New - Neu - - - - - Add - Hinzufügen - - - - Update - Aktualisieren - - - - CoreAudioSystem - - - Default Device - Standardgerät - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - Mumble - Mumble - - - Opening chosen DirectSound Input failed. No microphone capture will be done. - Öffnen des DirectSound Eingangsgerätes gescheitert. Es wird kein Mikrofonsound aufgenommen. - - - Opening chosen DirectSound Input failed. Using defaults. - Öffnen des DirectSound Eingangsgerätes gescheitert. Standardeinstellungen werden benutzt. - - - - Opening chosen DirectSound Input failed. Default device will be used. - Öffnen des DirectSound Eingangsgerätes fehlgeschlagen. Standardgerät wird benutzt. - - - - Default DirectSound Voice Input - Standard DirectSound Spracheingabe - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - Öffnen des DirectSound Eingangsgerätes fehlgeschlagen. Es wird kein Mikrofonsound aufgenommen. - - - - Lost DirectSound input device. - DirectSound Eingangsgerät verloren. - - - - DXAudioOutput - - Mumble - Mumble - - - - Opening chosen DirectSound Output failed. No audio will be heard. - Öffnen des DirectSound Ausgabegerätes fehlgeschlagen. Es kann kein Ton gehört werden. - - - Opening chosen DirectSound Output failed. Using defaults. - Öffnen des DirectSound Ausgabegerätes gescheitert. Standardeinstellungen werden benutzt. - - - - Opening chosen DirectSound Output failed. Default device will be used. - Öffnen des DirectSound Ausgabegerätes fehlgeschlagen. Standardgerät wird benutzt. - - - - Default DirectSound Voice Output - Standard DirectSound Sprachausgabe - - - - Lost DirectSound output device. - DirectSound Ausgabegerät verloren. - - - - DXConfigDialog - - Default DirectSound Voice Input - Standard DirectSound Spracheingabe - - - Default DirectSound Voice Output - Standard DirectSound Sprachausgabe - - - Device selection - Geräteauswahl - - - Device to use for microphone - Mikrofongerät - - - This sets the input device to use, which is where you have connected the microphone. - Dies legt das Eingabegerät fest, welches mit dem Mikrofon verbunden ist. - - - Input - Eingang - - - Device to use for speakers/headphones - Gerät für Lautsprecher/Kopfhörer - - - This sets the output device to use, which is where you have connected your speakers or your headset. - Dies legt das Ausgabegerät fest, welches mit Lautsprechern oder Headset verbunden ist. - - - Output - Ausgabe - - - Output Options - Ausgabeoptionen - - - Output Delay - Ausgabeverzögerung - - - Amount of data to buffer for DirectSound - Menge der zu puffernden Daten für DirectSound - - - This sets the amount of data to prebuffer in the DirectSound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Dies legt die Menge an Daten fest, die für den DirectSound-Puffer vorgepuffert werden sollen. Es sollte der niedrigste Wert gewählt werden, der noch kein Knacken im Sound produziert. - - - Positional Audio - Positionales Audio - - - None - Keiner - - - Panning - Panning - - - Light HRTF - Leichtes HRTF - - - Full HRTF - Volles HRTF - - - 3D Sound Algorithm - 3D Soundalgorithmus - - - This sets what 3D Sound algorithm to use.<br /><b>None</b> - Disable 3D Sound (least CPU).<br /><b>Panning</b> - Just use stereo panning (some CPU).<br /><b>Light/Full HRTF</b> - Head-Related Transfer Functions enabled. This may use a small amount of CPU.<br />Note that if you have a soundcard with <i>hardware</i> 3D processing, HRTF processing will be done on the soundcard and will use practically no processing power. - Dies legt den 3D-Soundalgorithmus fest.<br /><b>Keiner</b> - 3D-Sound deaktivieren.<br /><b>Panning</b> - Nur Stereo-Panorama (etwas CPU).<br /><b>Leichtes/Volles HRTF</b> - HRTF Funktionen eingeschalten. Dies verwendet etwas CPU-Zeit.<br />Falls die Soundkarte <i>Hardware</i>-3D-Processing unterstützt, wird HRTF praktisch keine CPU-Zeit beanspruchen. - - - Method - Methode - - - MinDistance - MinDistanz - - - Minimum distance to player before sound decreases - Minimale Distanz zum Spieler bevor Lautstärke sinkt - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Dies legt die minimale Distanz für Klangberechnungnen fest. Die Lautstärke anderer Spieler wird nicht sinken, solange sie nicht wenigstens soweit wie eingestellt entfernt sind. - - - MaxDistance - MaxDistanz - - - Maximum distance, beyond which sound won't decrease - Maximale Distanz worüber hinaus die Lautstärke nicht sinkt - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Dies legt die maximale Distanz für Klangberechnungnen fest. Die Lautstärke anderer Spieler wird nicht mehr sinken, wenn sie weiter als eingestellt entfernt sind. - - - RollOff - Rolloff - - - Factor for sound volume decrease - Faktor zur Lautstärkensenkung - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Wie schnell soll die Lautstärke sinken, wenn die Minimaldistanz überschritten ist. Mit der Standardeinstellung (1.0) wird die Lautstärke bei doppelter Entfernung halbiert. Den Wert erhöhen lässt die Lautstärke schneller fallen, während ihn zu senken die Lautstärker langsamer fallen lässt. - - - DirectSound - DirectSound - - - %1 ms - %1 ms - - - %1m - %1m - - - %1 - %1 - - - Players more than %1 meters away have %2% intensity - Spieler mehr als %1 Meter entfernt haben %2% Intensität - - - %1ms - %1ms - - - Form - Formular - - - TextLabel - Textlabel - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble konnte keine Datenbank in einer -der möglichen Orte initialisieren. - - - - DirectInputKeyWidget - - Press Shortcut - Shortcut drücken - - - - GlobalShortcut - - - Shortcuts - Tastenkürzel - - - - List of configured shortcuts - Liste der konfigurierten Tastenkürzel - - - - Function - Funktion - - - - Shortcut - Tastenkürzel - - - - Suppress - Unterdrücken - - - - Add new shortcut - Neues Tastenkürzel hinzufügen - - - - This will add a new global shortcut - Dies fügt ein neues Tastenkürzel hinzu - - - - &Add - &Hinzufügen - - - - Remove selected shortcut - Gewähltes Tastenkürzel entfernen - - - - This will permanently remove a selected shortcut. - Dies wird das gewählte Tastenkürzel permanent löschen. - - - - &Remove - &Entfernen - - - - GlobalShortcutConfig - - - Shortcuts - Tastenkürzel - - - Function - Funktion - - - Shortcut - Kurzbefehl - - - Shortcut bound to %1. - Kurzbefehl auf %1 gebunden. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Dies ist der globale Kurzbefehl, der an %1 gebunden ist</b><br />Klicken Sie dieses Feld an und drücken Sie dann die gewünschte Tastenkombination um sie neu zu binden. Doppelklicken zum löschen. - - - Double-click an entry to clear the shortcut. - Auf einen Eintrag doppelklicken, um den Kurzbefehl zu entfernen. - - - Suppress - Unterdrücken - - - - Shortcut button combination. - Tastenkombination des Tastenkürzels. - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>Dies ist die globale Tastenkombination des Tastenkürzels.</b><br />Doppelklicken Sie dieses Feld und dann die gewünschte Tastenkombination um sie neu zu setzen. - - - - Suppress keys from other applications - Unterdrücke Tasten vor anderen Anwendungen - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>Dies unterdrückt Tastendrücke von anderen Anwendungen.</b><br />Durch Aktivierung wird der Tastendruck (oder die letzte Taste einer Mehrfachtasten-Kombination) vor anderen Anwendungen versteckt. Es können aber nicht alle Tasten unterdrückt werden. - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble hat festgestellt, dass es keine Globalen Tastenkürzel Ereignisse erhalten kann, wenn es im Hintergrund läuft.<br /><br />Dies wird durch die Deaktivierung des Universal Access Features "Enable access for assitive devices" verursacht.<br /><br />Bitte <a href="">aktivieren sie diese Einstellung</a>. - - - - GlobalShortcutWinConfig - - Shortcuts - Shortcuts - - - Function - Funktion - - - Shortcut - Shortcut - - - Shortcut bound to %1. - Shortcut an %1 gebunden. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Der globale Shortcut ist an %1 gebunden</b><br />Dieses Feld anklicken und dann die gewünschte Taste/Button drücken zum neubinden. Doppelklicken zum löschen. - - - Double-click an entry to clear the shortcut. - Auf einen Eintrag doppelklicken, um den Shortcut zu entfernen. - - - - GlobalShortcutX - - - Mouse %1 - Maus %1 - - - - GlobalShortcutXConfig - - Shortcuts - Shortcuts - - - Function - Funktion - - - Shortcut - Shortcut - - - Shortcut bound to %1. - Shortcut an %1 gebunden. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key combo to rebind. Double-click to clear. - <b>Der globale Shortcut ist an %1 gebunden</b><br />Dieses Feld anklicken und dann die gewünschte Taste/Button drücken zum neubinden. Doppelklicken zum löschen. - - - - LCD - - - Not connected - Nicht verbunden - - - - LCDConfig - - - Graphic - Grafik - - - - Character - Zeichen - - - - Enable this device - Dieses Gerät aktivieren - - - - LCD - LCD - - - - Form - Formular - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Dies ist die Liste der verfügbaren LCD-Geräte auf ihrem System. Es listet die Geräte nach Namen auf und enthält außerdem die Größe des Displays und den LCD-Typ. Mumble unterstützt die zeitgleiche Ausgabe auf mehrere LCD-Geräte.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Typ:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble unterstützt zwei verschiedene LCD-Geräte Typen. Ein Grafik-LCD erlaubt Mumble einzelne Pixel zu zeichen, während ein Zeichen-LCD nur das Anzeigen von Zeichen erlaubt. Einige Features sind nur auf einem Grafik-LCD verfügbar.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Größe:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Dieses Feld beschreibt die Größe eines LCD-Geräts. Die Größe ist entweder in Pixeln (für Grafik-LCDs) oder in Zeichen (für Zeichen-LCDs) angegeben.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Aktiviert:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">Dies entscheidet ob Mumble auf ein bestimmtes LCD zeichnen soll.</span></p></body></html> - - - - Devices - Geräte - - - - Name - Name - - - - Type - Typ - - - - Size - Größe - - - - Enabled - Aktiviert - - - - Views - Ansichten - - - - Minimum Column Width - Minimale Spaltenbreite - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Diese Option legt die minimale Breite einer Spalte in der Spieleransicht fest.</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Wenn zu viele Leute gleichzeitig sprechen, wird die Spieleransicht sich selbst in Spalten aufteilen.</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mit dieser Option kann ein Kompromiss zwischen der angezeigten Anzahl auf dem</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD und der Spielerbreite geschlossen werden.</p></body></html> - - - - TextLabel - Textlabel - - - - Splitter Width - Splitterbreite - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Diese Einstellung legt die Breite des Spalten-Splitters fest.</span></p></body></html> - - - - Log - - [%2] %1 - [%2] %1 - - - - Debug - Debug - - - - Critical - Kritisch - - - - Warning - Warnung - - - - Information - Information - - - - Server Connected - Server verbunden - - - - Server Disconnected - Serververbindung abgebrochen - - - - Player Joined Server - Benutzer betrat Server - - - - Player Left Server - Benutzer verließ Server - - - - Player kicked (you or by you) - Benutzer gekickt (du oder von dir) - - - - Player kicked - Benutzer gekickt - - - - You self-muted/deafened - Selbst stumm-/taubgestellt - - - - Other self-muted/deafened - Anderer stumm-/taubgestellt - - - - Player muted (you) - Benutzer stummgestellt (dich) - - - - Player muted (by you) - Benutzer stummgestellt (durch dich) - - - - Player muted (other) - Benutzer stummgestellt (jemand anderes) - - - - Player Joined Channel - Benutzer betrat Kanal - - - - Player Left Channel - Benutzer verließ Kanal - - - - Permission Denied - Erlaubnis verweigert - - - - Text Message - Textnachricht - - - Script Errors - Skript Fehler - - - - LogConfig - - - Toggle console for %1 events - Wechsle Einstellung für Konsole für %1 Ereignisse - - - - Toggle pop-up notifications for %1 events - De-/Aktiviere Pop-up Nachrichten für %1 Ereignisse - - - - Toggle Text-To-Speech for %1 events - De-/Aktiviere Text-zu-Sprache für %1 Ereignisse - - - - Click here to toggle sound notification for %1 events - Klicken Sie hier, um die Audio-Hinweise für %1 Ereignisse zu wechseln - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - Pfad zur Sounddatei, die für die Audio-Benachrichtigung für %1 Ereignisse verwendet wird.<br />Einfacher Klick zum abspielen<br />Doppelklick zum ändern - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - Klicken Sie hier, um die Konsolenausgabe für %1 Ereignisse zu wechseln (zu aktivieren oder zu deaktivieren).<br />Wenn gewählt gibt Mumble alle %1 Ereignisse in seinem Nachrichten-Log aus. - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - Klicken Sie hier, um die Pop-up Benachrichtigungen für %1 Ereignisse zu aktivieren oder zu deaktivieren.<br />Wenn gewählt, wird für jedes %1 Ereignis ein Benachrichtigungs-Pop-up erzeugt. - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Klicken Sie hier, um Text-zu-Sprache für %1 Ereignisse zu aktivieren oder zu deaktivieren.<br />Wenn gewählt veranlasst Mumble, dass %1 Ereignisse vorgelesen werden. Text-zu-Sprache kann auch den Inhalt von Ereignissen vorlesen, was Sounddateien nicht können. Text-zu-Sprache und Sounddateien können nicht gleichzeitig verwendet werden. - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Klicken Sie hier, um Sound-benachrichtigungen für %1 Ereignisse zu aktivieren oder zu deaktivieren.<br />Wenn gewählt, verwendet Mumble von ihnen gewählte Sounddateien um %1 Ereignisse zu kennzeichnen. Sounddateien und Text-zu-Sprache können nicht gleichzeitig verwendet werden. - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - Pfad zu einer Sounddatei für Sound Benachrichtigungen bei %1 Ereignissen.<br />Einfacher Klick zum abspielen<br />Doppelklick zum ändern<br />Stellen Sie sicher, dass die Sound-Benachrichtigung für diesen Ereignistyp aktiviert ist, sonst hat dieses Feld keine Auswirkungen. - - - - Choose sound file - Wählen Sie eine Sounddatei - - - - Invalid sound file - Ungültige Sounddatei - - - - The file '%1' does not exist or is not a valid speex file. - Die Datei '%1' existiert nicht oder ist keine gültige speex Datei. - - - - Messages - Nachrichten - - - - Console - Konsole - - - TTS - TTS - - - Enable console for %1 - Konsole für %1 einschalten - - - Enable Text-To-Speech for %1 - Text-zu-Sprache für %1 einschalten - - - - Text To Speech - Text-zu-Sprache - - - - Volume - Lautstärke - - - - Volume of Text-To-Speech Engine - Lautstärke der Text-zu-Sprache-Engine - - - - <b>This is the volume used for the speech synthesis.</b> - <b>Dies ist die Lautstärke für die Sprachsynthese.</b> - - - - Length threshold - Längen-Schwellwert - - - - Message length threshold for Text-To-Speech Engine - Nachrichtenlängen-Schwellwert für die Text-zu-Sprache-Engine - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Dieser Längen-Schwellwert wird von der Text-zu-Sprache-Engine genutzt.</b><br />Nachrichten die Länger als der Grenzwert sind, werden nicht in voller Länge laut vorgelesen. - - - - Message - Nachricht - - - - Notification - Benachrichtigung - - - - Text-To-Speech - Text-zu-Sprache - - - - Soundfile - Sounddatei - - - - Path - Pfad - - - - Characters - Zeichen - - - - LookConfig - - - Language - Sprache - - - - Look and Feel - Aussehen - - - - - System default - Systemstandard - - - - Language to use (requires restart) - Sprachauswahl (benötigt Neustart) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Dies legt die Sprache fest, die Mumble verwenden soll.</b><br />Ein Neustart ist nötig um die neue Sprache zu nutzen. - - - - Style - Stil - - - - Basic widget style - Einfacher Widget-Stil - - - - <b>This sets the basic look and feel to use.</b> - <b>Dies legt das einfache Aussehen fest.</b> - - - - Skin - Skin - - - - Skin file to use - zu verwendende Skindatei - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. - <b>Dies legt fest, welchen Skin Mumble nutzen soll.</b><br />Der Skin ist eine Stildatei die auf den einfachen Widgetstil angewandt wird. - - - Use Horizontal Splitter - Benutze horizontale Splitter - - - - List players above subchannels (requires restart). - Liste Spieler über Unterkanälen auf (benötigt Neustart). - - - - User Interface - Benutzerinterface - - - - ... - ... - - - - Choose skin file - Wähle Skindatei - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>Wenn gesetzt werden Spieler im darüberliegenden Unterkanal in der Kanalansicht angezeigt.</b><br />Ein Neustart von Mumble ist nötig, um die Änderungen zu sehen. - - - Expand All Channels - Expandiere alle Kanäle - - - Expand all channels when connecting - Expandiere alle Kanäle beim Verbindungsaufbau - - - <b>If set, all channels will be expanded by default when you connect to a server.</b> - <b>Wenn gesetzt werden alle Kanäle standardmäßig beim Verbindungsaufbau zum Server expandiert.</b> - - - - Players above Channels - Spieler über Kanälen - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>Dies legt fest, welchen Skin Mumble verwenden soll.</b><br />Der Skin ist eine Stildatei, die über den einfachen Widgetstil gelegt wird. Wenn Icons im selben Verzeichnis wie die Stilvorlage liegen, so werden die Standard-Icons ausgetauscht. - - - - Form - Formular - - - New version check - Überprüfe neue Version - - - Check for updates on startup - Prüfe nach Updates bei Start - - - - None - Keine - - - - Only with players - Nur mit Benutzern - - - - All - Alle - - - - Expand - Expandieren - - - - When to automatically expand channels - Wann sollen Kanäle automatisch erweitert werden - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - Dies legt fest, welche Kanäle automatisch expandiert werden sollen.<i>Keine</i> und <i>Alle</i> expandieren keinen, respektive alle Kanäle, während <i>Nur mit Benutzer</i> die Kanäle expandiert bzw. zusammenschließt in denen Benutzer beitreten bzw. verlassen. - - - - Ask - Frage Nach - - - - Do Nothing - Tue Nichts - - - - Move - Bewegen - - - - Channel Dragging - Kanal Ziehen - - - - This changes the behaviour when moving channels. - Dies ändert das Verhalten, wenn Kanäle bewegt werden. - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - Dies legt das Verhalten vom Kanal ziehen fest, um unabsichtliches Ziehen zu verhindern.<i>Bewege Kanal</i> bewegt den Kanal ohne nachzufragen.<i>Tue Nichts</i> tut nichts und zeigt eine Fehlermeldung an.<i>Frage nach</i> zeigt ein Nachrichtenfenster an, mit dem das Ziehen bestätigt werden kann. - - - - Ask whether to close or minimize when quitting Mumble. - Frage, ob das Mumblefenster geschlossen oder minimiert werden soll, wenn Mumble beendet wird. - - - - <b>If set, will verify you want to quit if connected.<b> - <b>Wenn gesetzt, wird gefragt ob beendet werden soll, wenn noch verbunden ist.<b> - - - - Ask on quit while connected - Frage beim Beenden mit aktiver Verbindung nach - - - - Make the Mumble window appear on top of other windows. - Lasse das Mumblefenster über allen anderen Fenstern erscheinen. - - - - <b>This makes the Mumble window a topmost window.</b> - <b>Dies lässt das Mumblefenster das oberste Fenster sein.</b> - - - - Always On Top - Immer oben - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>Wenn gesetzt, wird das Haupt Mumblefenster in den Infobereich minimiert. Anderenfalls wird es wie üblich minimiert.</b> - - - - Hide in tray when minimized - Verstecke im Tray, wenn minimiert - - - Show all configuration items - Zeige alle Konfigurationselemente - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Dies zeigt alle Konfigurationselemente.</b><br />Mumble enthält viele Konfigurationselemente, die die meisten Benutzer nicht ändern werden. Wird dies aktiviert werden alle konfigurierbaren Elemente angezeigt. - - - Expert Config - Expertenkonfiguration - - - - Hide the main Mumble window in the tray when it is minimized. - Verstecke das Mumblefenster im Tray, wenn es minimiert wird. - - - - MainWindow - - - - Root - Wurzel - - - - &Connect - &Verbinden - - - - Open the server connection dialog - Öffne den Serververbindungs-Dialog - - - - Shows a dialog of registered servers, and also allows quick connect. - Zeigt einen Dialog mit registrierten Servern und erlaubt schnelles Verbinden. - - - - &Disconnect - &Trennen - - - - Disconnect from server - Verbindung zum Server trennen - - - - Disconnects you from the server. - Trennt Ihre Verbindung zum Server. - - - - &Ban lists - &Banliste - - - - Edit ban lists on server - Bannlisten des Server editieren - - - - This lets you edit the server-side IP ban lists. - Dies lässt Sie die serverseitige IP Bannliste editieren. - - - - &Kick - &Kicken - - - - Kick player (with reason) - Benutzer Kicken (mit Grund) - - - - Kick selected player off server. You'll be asked to specify a reason. - Den ausgewählten Benutzer vom Server schmeissen. Sie werden aufgefordert, einen Grund anzugeben. - - - - &Ban - &Bannen - - - - Kick and ban player (with reason) - Benutzer vom Server Kicken und Verbannen (mit Grund) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Den ausgewählten Benutzer vom Server schmeissen und bannen. Man wird aufgefordert, einen Grund anzugeben. - - - - &Mute - &Stumm stellen - - - - Mute player - Benutzer stumm stellen - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Den Benutzer stumm stellen oder das reden wieder erlauben. Erlaubt man einem Taub gestellten Benutzer das reden, darf er automatisch auch wieder etwas hören. - - - - &Deafen - &Taub stellen - - - - Deafen player - Benutzer taub stellen - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Benutzer taub stellen oder das zuhören wieder erlauben. Einen Benutzer taub zu stellen wird ihn automatisch auch stumm stellen. - - - - &Local Mute - &Lokal stumm stellen - - - Mute or unmute player locally. - Spieler lokal stumm oder nicht stummstellen. - - - - &Add - &Hinzufügen - - - - Add new channel - Neuen Kanal hinzufügen - - - - This adds a new sub-channel to the currently selected channel. - Dies fügt dem aktuell gewählten Kanal einen Unterkanal hinzu. - - - - &Remove - &Entfernen - - - - Remove channel - Kanal entfernen - - - - This removes a channel and all sub-channels. - Dies entfernt einen Kanal und all seine Unterkanäle. - - - - &Edit ACL - ACL &editieren - - - - Edit Groups and ACL for channel - Gruppen und ACL des Channels bearbeiten - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Dies öffnet den Gruppen- und ACL-Dialog des Kanals um die Berechtigungen einzustellen. - - - - &Rename - &Umbenennen - - - - &Change Description - &Beschreibung ändern - - - - Changes the channel description - Ändert die Kanalbeschreibung - - - - This changes the description of a channel. - Dies ändert die Beschreibung eines Kanals. - - - - &Link - &Verknüpfen - - - - Link your channel to another channel - Verknüpft Ihren aktuellen Kanal mit einem anderen - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Dies verbindet den aktuellen Kanal mit dem Gewählten. Wenn Spieler Spracherlaubnis im anderen Kanal haben, so können sie sich jetzt gegenseitig hören. Dies ist eine permanente Verbindung die solange bestehen bleibt, bis die Verknüpfung manuell aufgehoben oder der Server neugestart wird. - - - &Unlink - &Unlink - - - - Unlink your channel from another channel - Die Verknüpfung des aktuellen Kanals zu einem anderen Kanal trennen - - - - This unlinks your current channel from the selected channel. - Dies trennt die Verknüpfung des aktuellen Kanals zum Ausgewählten. - - - - Unlink &All - &Alle Verknüpfungen entfernen - - - - Unlinks your channel from all linked channels. - Trennt alle verbundenen Kanäle. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Dies trennt die Verbindungen des aktuellen Kanals (nicht des ausgewählten) zu allen verknüpften Kanälen. - - - - &Reset - &Zurücksetzen - - - - Reset audio preprocessor - Setzt den Audio-Präprozessor zurück - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Setzt den Audio-Präprozessor zurück: unter anderem Geräuschunterdrückung, automatisches Gain und Stimmaktivierungserkennung. Wenn etwas plötzlich die Audioumgebung verschlechtert (z.B. das Fallen lassen des Mikrofons), so kann dies verwendet werden um nicht auf das anpassen des Präprozessor warten zu müssen. - - - - &Mute Self - Selbst &Stumm stellen - - - - Mute yourself - Sich selber stumm stellen - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Stellen Sie sich selbst stumm oder deaktivieren es. Wenn Sie stumm gestellt sind werden keine Daten von Ihnen an den Server gesandt. Deaktivieren Sie das stumm stellen währen Sie taub gestellt sind, wird dieses auch deaktiviert. - - - - &Deafen Self - Selbst &Taub stellen - - - - Deafen yourself - Sich selbst taub stellen - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Sich selbst Taub stellen an/aus. Wenn taub gestellt hört man nichts. Sich taub zu stellen stellt einen automatisch stumm. - - - - &Text-To-Speech - &Text-Zu-Sprache - - - - Toggle Text-To-Speech - Text-Zu-Sprache ein-/ausschalten - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Text-Zu-Sprache-Engine ein- oder ausschalten. Nur Nachrichten die in den Einstellungen entsprechend aktiviert sind werden tatsächlich gesprochen. - - - - S&tatistics - St&atistiken - - - - Display audio statistics - Zeigt Audiostatistiken an - - - - Pops up a small dialog with information about your current audio input. - Zeigt einen kleinen Dialog mit Informationen über den aktuellen Audio Eingang an. - - - - Forcibly unlink plugin - Trennen des Plugins erzwingen - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Dies zwingt das aktuelle Plugin zur Trennenung, was hilfreich sein kann, wenn es völlig falsche Daten einliest. - - - - &Settings - &Einstellungen - - - - Configure Mumble - Mumble konfigurieren - - - - Allows you to change most settings for Mumble. - Erlaubt die meisten Einstellungen von Mumble zu ändern. - - - - &What's This? - &Was ist das? - - - - Enter What's This? mode - Was ist das? Modus betreten - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Dies anklicken um den "Was ist das?"-Modus zu aktivieren. Der Cursor wird sich in ein Fragezeichen ändern. Klickt man damit auf irgendeinen Button, Menüeintrag oder ein Gebiet, wird eine kurze Beschreibung angezeigt. - - - - &About - Ü&ber - - - - Information about Mumble - Informationen über Mumble - - - - Shows a small dialog with information and license for Mumble. - Zeigt einen kleinen Dialog mit Informationen über Mumble und zur Lizenzierung. - - - - About &Speex - Über &Speex - - - - Information about Speex - Informationen über Speex - - - - Shows a small dialog with information about Speex. - Zeigt einen kleinen Dialog mit Informationen über Speex. - - - &About Qt - Über &Qt - - - - Information about Qt - Informationen über Qt - - - - Shows a small dialog with information about Qt. - Zeigt einen kleinen Dialog mit Informationen über Qt. - - - - Check for &Updates - Auf &Updates prüfen - - - - Check for new version of Mumble - Prüfen, ob eine neue Version von Mumble vverfügbar ist - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Verbindet sich mit der Mumble Webseite um zu prüfen ob eine neue Version verfügbar ist. Ist eine neue Version verfügbar wird mit einer passenden Download URL darauf hingewiesen. - - - - Mumble -- %1 - Mumble -- %1 - - - Log of messages - Log mit Nachrichten - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Dieser Bereich zeigt die letzten Aktivitäten an. Verbindungen zum Server, Fehler und Informationsnachrichten werden hier angezeigt.<br />Um genau festzulegen welche Nachrichten hier angezeigt werden verwenden Sie den <b>Einstellungen</b> Menüeintrag und öffnen den Tab <b>Nachrichten</b>. - - - - &Server - &Server - - - - &Player - B&enutzer - - - - &Channel - &Kanal - - - - &Audio - &Audio - - - - C&onfigure - K&onfiguration - - - - &Help - &Hilfe - - - - Kicking player %1 - Kicke Benutzer %1 - - - - - Enter reason - Grund eingeben - - - - Banning player %1 - Banne Benutzer %1 - - - - Mumble - Mumble - - - - - Channel Name - Kanalname - - - Are you sure you want to delete %1 and all it's subchannels? - Sind Sie sicher Kanal %1 und all seine Unterkanäle zu löschen? - - - - Unmuted and undeafened. - Stumm und taub stellen ausgeschaltet. - - - - Unmuted. - Stumm stellen aus. - - - - Muted. - Stumm. - - - - Muted and deafened. - Stumm und taub gestellt. - - - - Deafened. - Taubgestellt. - - - - Undeafened. - Taubstellung aus. - - - - About Qt - Über Qt - - - - Joining %1. - Betrete %1. - - - Connected to server. - Mit Server verbunden. - - - - Server connection failed: %1. - Serververbindung fehlgeschlagen: %1. - - - - Disconnected from server. - Verbindung zum Server unterbrochen. - - - - Reconnecting. - Neuverbindung. - - - - Joined server: %1. - Server beigetreten: %1. - - - - Left server: %1. - %1 hat den Server verlassen. - - - - %1 is now muted and deafened. - %1 ist jetzt stumm und taub gestellt. - - - - %1 is now muted. - %1 ist jetzt stumm gestellt. - - - - %1 is now unmuted. - %1 ist jetzt nicht mehr stumm gestellt. - - - - - server - Server - - - - You were muted by %1. - Du wurdest von %1 stumm gestellt. - - - - You were unmuted by %1. - Stumm gestellt sein wurde von %1 deaktiviert. - - - - %1 muted by %2. - %1 von %2 stumm gestellt. - - - - %1 unmuted by %2. - Stummstellung von %1 durch %2 aufgehoben. - - - - You were deafened by %1. - Du wurdest von %1 taub gestellt. - - - - You were undeafened by %1. - Taubstellen von %1 deaktiviert. - - - - %1 deafened by %2. - %1 wurde von %2 taub gestellt. - - - - %1 undeafened by %2. - Taubstellen von %1 durch %2 deaktiviert. - - - - You were kicked from the server by %1: %2. - Du wurdest von %1 vom Server gekickt: %2. - - - - %3 was kicked from the server by %1: %2. - %3 wurde von %1 vom Server gekickt: %2. - - - - You were kicked and banned from the server by %1: %2. - Du wurdest von %1 vom Server gekickt und gebannt: %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 wurde von %1 vom Server gekickt und gebannt: %2. - - - - You were moved to %1 by %2. - Sie wurden von %2 nach %1 verschoben. - - - - %1 left channel. - %1 hat den Kanal verlassen. - - - - %1 moved out by %2 to %3. - %1 wurde durch %2 aus ihrem Kanal nach %3 verschoben. - - - - %1 moved in by %2 from %3. - %1 wurde durch %2 von %3 in ihren Kanal verschoben. - - - %1 moved out by %2. - %1 wurde von %2 rausgeschoben. - - - - %1 entered channel. - %1 betrat den Kanal. - - - %1 moved in by %2. - %1 wurde von %2 reingeschoben. - - - - Server connection rejected: %1. - Serververbindung abgelehnt : %1. - - - - Denied: %1. - Abgelehnt: %1. - - - - Welcome to Mumble. - Willkommen in Mumble. - - - - Push-to-Talk - Global Shortcut - Push-To-Talk - - - - Push and hold this button to send voice. - Global Shortcut - Drücken und halten Sie diese Taste um Sprache zu senden. - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - Dies konfiguriert die push-to-talk Taste. So lange Sie diese Taste gedrückt halten, übermitteln Sie sprache. - - - - Reset Audio Processor - Global Shortcut - Audio Prozessor zurücksetzen - - - - Toggle Mute Self - Global Shortcut - Selbst stumm stellen umschalten - - - - Toggle self-mute status. - Global Shortcut - Wechsle 'selbst stumm gestellt' Status. - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - Dies wechselt Ihren 'selbst stumm gestellt' Status. Wenn Sie diesen deaktivieren, deaktivieren Sie auch 'selbst taub gestellt'. - - - - Toggle Deafen Self - Global Shortcut - Selbst taub stellen umschalten - - - - Toggle self-deafen status. - Global Shortcut - Wechsle 'selbst taub gestellt' Status. - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - Dies wechselt Ihren 'selbst taub gestellt' Status. Wenn Sie diesen aktivieren, aktivieren Sie damit auch 'selbst stumm gestellt'. - - - - Force Center Position - Global Shortcut - Erzwinge Mittelposition - - - - Chan Parent - Global Shortcut - Elternkanal - - - - Chan Sub#%1 - Global Shortcut - Unterkanal #%1 - - - - Chan All Subs - Global Shortcut - Alle Unterkanäle - - - - Push-to-Mute - Global Shortcut - Stumm stellen - - - - Join Channel - Global Shortcut - Kanal betreten - - - - Toggle Overlay - Global Shortcut - Overlay-Modus umschalten - - - - Toggle state of in-game overlay. - Global Shortcut - Wechsle den Modus des in-game Overlays. - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - Dies wechselt den in-game Overlay Modus zwischen 'zeige Jeden', 'nur Sprechende' und 'Niemanden'. - - - - Alt Push-to-Talk - Global Shortcut - Alt Push-To-Talk - - - - Unlink Plugin - Global Shortcut - Plugin trennen - - - - Are you sure you want to delete %1 and all its sub-channels? - Sind Sie sicher, dass Sie %1 und alle Unterkanäle löschen möchten? - - - - &Quit Mumble - Mumble B&eenden - - - - Closes the program - Schließt das Programm - - - - Exits the application. - Beendet die Applikation. - - - Ctrl+Q - Quit - Ctrl+Q - - - - Send Messa&ge - Sende Nachri&cht - - - - Send a Text Message - Sende eine Text-Nachricht - - - Send a text message to another user. - Sende eine Text-Nachricht an einen anderen Benutzer. - - - - Sending message to %1 - Sende Nachricht an %1 - - - - - To %1: %2 - An %1: %2 - - - - - Message to %1 - Nachricht an %1 - - - - Change description of channel %1 - Ändere Beschreibung von Kanal %1 - - - - Invalid username - Ungültiger Benutzername - - - - You connected with an invalid username, please try another one. - Sie haben sich mit ungültigem Benutzernamen verbunden. Bitte versuchen Sie einen anderen. - - - - That username is already in use, please try another username. - Dieser Benutzername ist bereits vergeben. Bitte versuchen Sie einen anderen. - - - - Wrong password - Falsches Passwort - - - - Wrong password for registered users, please try again. - Falsches Passwort für registrierte Benutzer. Bitte versuchen Sie es noch einmal. - - - - Wrong server password for unregistered user account, please try again. - Falsches Serverpasswort für unregistrierte Benutzer. Bitte versuchen Sie es noch einmal. - - - - From %1: %2 - Von %1: %2 - - - - Message from %1 - Nachricht von %1 - - - - &Audio Wizard - &Audio Assistent - - - - Sends a text message to another user. - Schickt eine Textnachricht an einen anderen Benutzer. - - - - Start the audio configuration wizard - Startet den Audiokonfigurations-Assistenten - - - - This will guide you through the process of configuring your audio hardware. - Dies leitet Sie durch den Hardware-Konfigurationsprozess. - - - - SSL Verification failed: %1 - SSL Überprüfung fehlgeschlagen: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>WARNUNG:</b> Der Server hat ein Zertifikat gesendet, das sich vom für diesen Server gespeicherten Zertifikat unterscheidet. - - - - Sever presented a certificate which failed verification. - Der Server hat Zertifikat gesendet, dessen Überprüfung gescheitert ist. - - - <li><b>Common Name:</b> %1</li> - <li><b>Allgemeiner Name:</b> %1</li> - - - <li><b>Organization:</b> %1</li> - <li><b>Organisation:</b> %1</li> - - - <li><b>Subunit:</b> %1</li> - <li><b>Untereinheit:</b> %1</li> - - - <li><b>Country:</b> %1</li> - <li><b>Land:</b> %1</li> - - - <li><b>Locality:</b> %1</li> - <li><b>Lokalität:</b> %1</li> - - - <li><b>State:</b> %1</li> - <li><b>Bundesstaat:</b> %1</li> - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br />Die Fehler dieses Zertifikats sind: </p><ol>%2</ol><p>Wollen Sie dieses Zertifikat trotzdem akzeptieren?<br />(Es wird auch abgespeichert, weshalb Sie nicht wieder gefragt werden.)</p> - - - - &Information - &Informationen - - - - Show information about the server connection - Zeigt Informationen über die Serververbindung an - - - - This will show extended information about the connection to the server. - Dies zeigt erweitertete Informationen über die Verbindung zum Server an. - - - - Mumble Server Information - Mumble Server Informationen - - - Control channel: %1 ms latency, Encrypted with %3 bit %4<br />Voice channel: %2 ms latency, Encrypted with OCB-AES128 - Kontrollkanal: %1 ms Latenz. Verschlüsselt mit %3 bit %4<br />Sprachkanal: %2 ms Latenz, verschlüsselt mit OCB-AES128 - - - - - &View Certificate - &Zertifikat zeigen - - - - Opening URL %1 - Öffne URL %1 - - - - URL scheme is not 'mumble' - URL-Schema ist nicht 'mumble' - - - - Connecting to %1 - Verbinde zu %1 - - - - Enter username - Benutzernamen eingeben - - - &Rename channel - Kanal u&mbenennen - - - - Renames the channel - Benennt den Kanal um - - - - This renames a channel. - Dies benennt einen Kanal um. - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - Dies ist das erste Mal, dass Sie Mumble starten.<br />Wollen Sie den Audio Assistenten starten, um Ihre Soundkarte zu konfigurieren? - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>Kontrollkanal</h2><p>Verschlüsselt mit %1 Bit %2<br />%3 ms Durchschnittslatenz (%4 Varianz)</p> - - - - Voice channel is sent over control channel. - Sprachkanal wird über den Kontrollkanal gesendet. - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>Sprachkanal</h2><p>Verschlüsselt mit 128 Bit OCB-AES128<br />%1 ms Durchschnittslatenz (%4 Varianz)</p> - - - - UDP Statistics - UDP Statistiken - - - - To Server - Zum Server - - - - From Server - Vom Server - - - - Good - Gut - - - - Late - Spät - - - - Lost - Verloren - - - - Resync - Neu Synchronisieren - - - You are now in local deafen mode. This mode is not reflected on the server, and you will still be transmitting voice to the server. This mode should only be used if there are several people in the same room and one of them have Mumble on loudspeakers. - Sie befinden sich jetzt im lokalen Taubmodus. Dieser Modus stimmt nicht mit dem des Servers überein und ihre Stimme wird weiterhin zum Server übertragen. Dieser Modus sollte nur genutzt werden, wenn sich mehrere Leute im selben Raum befinden und einer von ihnen benutzt Lautsprecher. - - - - Ctrl+Q - Ctrl+Q - - - - Mute player locally - Benutzer lokal stummstellen - - - - Mute or unmute player locally. Use this on other players in the same room. - Benutzer lokal stummstellen. Benutzen Sie dies wenn sich andere Spieler im selben Raum befinden. - - - &Rename Channel - Kanal &umbenennen - - - &Local deafen - &Lokal stummstellen - - - Silence loudspeakers - Lautsprecher leise stellen - - - Sets you in local deafen mode, wherein your speakers are silenced but you are still transmitting audio. - Versetzt Sie in den lokale Taubmodus in welchem Ihre Lautsprecher leise gestellt sind, aber immer noch Audio übertragen wird. - - - - About &Qt - Über &Qt - - - - Sending message to channel %1 - Sende Nachricht an Kanal %1 - - - - Sending message to channel tree %1 - Sende Nachricht an Kanalbaum %1 - - - - To tree %1: %2 - Von Baum %1: %2 - - - - Message to tree %1 - Nachricht an Baum %1 - - - - Sends a text message to all users in a channel. - Schickt eine Textnachricht an alle Benutzer im Kanal. - - - - Send &Tree Message - Sende &Baumnachricht - - - - Send message to channel tree. - Sende Nachricht an Kanalbaum (Kanal und Unterkanäle). - - - - This sends a text message to a channel and it's subchannels. - Dies schickt eine Textnachricht an einen Kanal und seine Unterkanäle. - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - Maximale Bandbreite des Servers ist nur %1 kbit/s. Die Qualität wurde automatisch angepasst. - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>Audio Bandbreite</h2><p>Maximum %1 kbit/s<br />Aktuell %2 kbit/s (Qualität %3)</p> - - - - Connected to server %1. - Mit Server %1 verbunden. - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - Mumble ist gerade zu einem Server verbunden. Möchten Sie es schließen oder minimieren? - - - - Close - Schließen - - - - - Minimize - Minimieren - - - - &Window - &Fenster - - - - Ctrl+M - Strg+M - - - Ctrl+W - Strg+W - - - - Toggle Minimal - Global Shortcut - Minimalansichts-Modus umschalten - - - - &Minimal View - &Minimale Ansicht - - - - Toggle minimal window modes - Zwischen Minimalansichts-Modi umschalten - - - - This will toggle minimal mode, where the log window and menu is hidden. - Dies schaltet in den Minimal-Modus um, in dem das Logfenster und das Menu versteckt sind. - - - - Log - Log - - - - Volume Up (+10%) - Global Shortcut - Lauter (+10%) - - - - Volume Down (-10%) - Global Shortcut - Leiser (-10%) - - - - Clear - Löschen - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - Die Kanal-Ziehen-Aktion wurde auf "Nichts tun" gesetzt. Der Kanal wird also nicht bewegt. - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - Unbekannter Kanalzieh-Modus in PlayerModel:dropMimeData. - - - - &Unlink - Channel - &Verknüpfung entfernen - - - - &Unlink - Plugin - &Deaktivieren - - - - Server - message from - Server - - - &Quit - &Beenden - - - - Hide Frame - Fenster Verstecken - - - - Toggle showing frame on minimal window - Anzeige des Rahmens im Minimal-Modus wechseln - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - Dies wechselt ob das Minimal-Fenster einen Rahmen zum verschieben und vergrößern hat oder nicht. - - - - NetworkConfig - - - Network - Netzwerk - - - - Form - Formular - - - - Connection - Verbindung - - - - Use TCP compatibility mode - Benutze TCP-Kompatibilitätsmodus - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>TCP-Kompatibilitätsmodus aktivieren</b>.<br />Dies lässt Mumble nur TCP zur Kommunikation mit dem Server nutzen. Dies wird den Overhead erhöhen und bei verlorenen Paketen hörbare Pausen produzieren. Sie sollten diese Einstellung also nur verwenden, wenn die Standardeinstellungen nicht funktionieren. - - - - Use TCP mode - Benutze TCP-Modus - - - - Reconnect when disconnected - Nach Verbindungsabbruch erneut verbinden - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Neuverbinden nach Verbindungsabbruch</b>.<br />Dies führt eine automatische Neuverbindung nach 10 Sekunden durch, wenn die Serververbindung abbricht. - - - - Reconnect automatically - Automatisch Neuverbinden - - - - Proxy - Proxy - - - - Type - Typ - - - - Type of proxy to connect through - Art des Proxys durch den verbunden werden soll - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Art des Proxys durch den verbunden werden soll</b><br />Dies lässt Mumble alle ausgehenden Verbindungen durch einen Proxy gehen. Beachten Sie, dass Proxytunneling Mumble in den TCP Kompatibilitätsmodus zwingt, was alle Sprachdaten über den Kontrollkanal sendet. - - - - Direct connection - Direkte Verbindung - - - - HTTP(S) proxy - HTTP(S) Proxy - - - - SOCKS5 proxy - SOCKS5 Proxy - - - - Hostname - Hostname - - - - Hostname of the proxy - Hostname des Proxys - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>Hostname des Proxys.</b><br />Dieses Feld spezifiert den Hostnamen des Proxys durch den Netzwerkverkehr getunnelt werden soll. - - - - Port - Port - - - - Port number of the proxy - Portnummer des Proxys - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>Portnummer des Proxys.</b><br />Dieses Feld spezifiert die Portnummer auf der der Proxy eine Verbindung erwartet. - - - - Username - Benutzername - - - - Username for proxy authentication - Benutzername für Proxy Authentisierung - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Benutzername für Proxy Authentisierung.</b><br />Dies spezifiert den Benutzernamen um sich den Proxy zu authentifizieren. Falls der Proxy keine Authentisierung verwendet oder Sie sich anonym verbinden wollen, lassen Sie das Feld frei. - - - - Password - Passwort - - - - Password for proxy authentication - Passwort für Proxy Authentisierung - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Passwort für Proxy Authentisierung.</b><br />Dies spezifiert das Passwort um sich den Proxy zu authentifizieren. Falls der Proxy keine Authentisierung verwendet oder Sie sich anonym verbinden wollen, lassen Sie das Feld frei. - - - - Mumble services - Mumble Dienste - - - - Check for updates on startup - Prüfe bei Start ob neue Updates verfügbar sind - - - - Submit anonymous statistics to the Mumble project - Sende anonyme Statistiken an das Mumble Projekt - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>Sende anonyme Statistiken.</b><br />Mumble hat ein kleines Entwicklungsteam und als solches muss es sich auf die Entwicklungen konzentrieren, die am meisten benötigt werden. Durch das Senden von Statistiken helfen Sie dem Projekt festzustellen, wohin die Entwicklung führen soll. - - - - Submit anonymous statistics - Sende anonyme Statistiken - - - - OSSConfig - - OSS - OSS - - - %1ms - %1ms - - - Form - Form - - - Device selection - Geräteauswahl - - - Input - Eingang - - - Device to use for microphone - Mikrofongerät - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Dies legt fest, welches Gerät Mumble nutzen soll. Das <i>Standard</i>-Gerät ist durch alsaconfig konfiguriert, die <i>hwplug</i> Geräte sind spezielle Hardware-Geräte die vom ALSA-Mixer genutzt werden und die <i>hw</i>-Geräte bieten rohen Hardwarezugriff. Falls ihre Soundkarte Hardware Mixing von Audio nicht unterstützt, wird die Verwendung von <i>hw</i>-Geräten alle anderen Programme vom Audiozugriff ausschließen. - - - Output - Ausgabe - - - Device to use for speakers/headphones - Gerät für Lautsprecher/Kopfhörer - - - Output Options - Ausgabeoptionen - - - Output Delay - Ausgabeverzögerung - - - Amount of data to buffer for OSS - Menge an Daten die ALSA puffern soll - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Dies liegt die Menge an Daten fest, die im Ausgabepuffer vorgepuffert werden sollen. Experimentiere mit verschiedenen Werten und setze es auf den niedrigsten Wert, der noch kein schnelles Jitter im Sound verursacht. - - - TextLabel - Textlabel - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - Konnte Overlay-Bibliothek nicht laden. Dies bedeutet entweder, dass: -- die Bibliothek (mumble_ol.dll) nicht in dem Verzeichnis gefunden werden konnte, von dem aus Mumble gestartet wurde -- Sie ein Betriebssystem älter als WinXP SP2 nutze -- Sie nicht die Juni 2007 Version von DX9.0c installiert haben - - - - OverlayConfig - - Options - Optionen - - - Position - Position - - - Font - Schriftart - - - Enable Overlay - Overlay aktivieren - - - Enable overlay. - Overlay aktivieren. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - Dies legt fest, ob das Overlay benutzt wird oder nicht. Diese Einstellung wird nur angezeigt wenn D3D9 Applikationen gestartet sind. Versichern Sie sich also dass Mumble läuft und diese Option aktiviert ist bevor Sie die Applikation starten.<br />Bitte beachten Sie dass, falls Sie die Applikation nach Mumble starten, oder Sie das Overlay während des Betriebs deaktivieren, es keinen sicheren Weg gibt das Overlay neuzustarten ohne die Applikation neuzustarten. - - - No one - Niemand - - - Only talking - Nur sprechen - - - Everyone - Jeder - - - Show - Zeige - - - Who to show on the overlay - Wer auf dem Overlay angezeigt werden soll - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>Dies legt fest, wer im Overlay angezeigt werden soll.</b><br />Falls viele Spieler im selben Kanal sind, könnte die Overlayliste sehr lang werden. Benutzen Sie dies um sie zu kürzen.<br /><i>Niemand</i> - Zeige niemanden (aber lass das Overlay laufen).<br /><i>Nur Sprechende</i> - Nur sprechende Benutzer zeigen.<br /><i>Jeder</i> - Zeige alle (im Kanal). - - - Always Show Self - Immer sich selbst anzeigen - - - Always show yourself on overlay. - Immer sich selbst auf dem Overlay anzeigen. - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Dies legt fest, ob Sie selbst immer angezeigt werden sollen oder nicht. Diese Einstellung ist nützlich, wenn Sie im Overlay nicht jeden anzeigen. In dem Fall würden sie ihren Status nur sehen, wenn Sie sprechen und sie könnten nicht sehen ob sie taub- oder stummgestellt wurden. - - - Show User Textures - Zeige Benutzertexturen - - - Show User custom textures instead of text on the overlay. - Zeige benutzerdefinierte Texturen statt Text auf dem Overlay. - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - Dies legt fest ob Benutzertexturen von registrierten Benutzern heruntergeladen und benutz werden sollen. Wenn deaktiviert, wird normaler Text angezeigt. - - - Grow Left - Nach links wachsen - - - Let overlay grow to the left - Das Overlay nach links wachsen lassen - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Das Overlay versucht so klein wie möglich und an der Position die sie gewählt haben zu bleiben. Dies erlaubt das Overlay notfalls nach links wachsen zu lassen. - - - Grow Right - Nach rechts wachsen - - - Grow Up - Nach oben wachsen - - - Let overlay grow upwards - Das Overlay nach oben wachsen lassen - - - Grow Down - Nach unten wachsen lassen - - - Let overlay grow downwards - Das Overlay nach unten wachsen lassen - - - X-Position of Overlay - X-Position des Overlays - - - This sets the relative X position of the overlay. - Dies legt die relative X-Position des Overlays fest. - - - Y-Position of Overlay - Y-Position des Overlays - - - This sets the relative Y position of the overlay. - Dies legt die relative Y-Position des Overlay fest. - - - Current Font - Aktuelle Schriftart - - - Set Font - Setze Schriftart - - - Maximum height of names. - Maximale Höhe von Namen. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - Dies legt die maximale Höhe der Namen (oder Benutzertexturen) relativ zur Bildschirmauflösung fest. Wenn Ihr aktives 3D-Fenster 800 Pixel hoch ist und Sie dies auf 5% setzen, wird jeder Name maximal 40 Pixel hoch. Namen werden eine Höhe von 60 Pixeln nicht überschreiten, egal was Sie hier festlegen. - - - Maximum height - Maximale Höhe - - - Change - Ändern - - - Color for players - Farbe für Benutzer - - - Color for talking players - Farbe für sprechende Benutzer - - - Color for alt-talking players - Farbe für alternativ-sprechende Benutzer - - - Color for Channels - Farbe für Kanäle - - - Color for active Channels - Farbe für aktive Kanäle - - - Overlay - Overlay - - - Show no one - Zeige niemanden - - - Show only talking - Zeige nur sprechende - - - Show everyone - Zeigen Jeden - - - Form - Formular - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - Das Overlay versucht so klein wie möglich und an der Position die sie gewählt haben zu bleiben. Dies erlaubt das Overlay notfalls nach oben wachsen zu lassen. - - - Let overlay grow to the right - Das Overlay nach rechts wachsen lassen - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - Das Overlay versucht so klein wie möglich und an der Position die sie gewählt haben zu bleiben. Dies erlaubt das Overlay notfalls nach rechts wachsen zu lassen. - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - Das Overlay versucht so klein wie möglich und an der Position die sie gewählt haben zu bleiben. Dies erlaubt das Overlay notfalls nach unten wachsen zu lassen. - - - TextLabel - Textlabel - - - - PAAudioConfig - - PortAudio - Portaudio - - - Input Device - Eingabegerät - - - Output Device - Ausgabegerät - - - - PlayerModel - - Name of player - Name des Spielers - - - Name of channel - Name des Kanals - - - Player flags - Spielerattribute - - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - Dies ist ein mit dem Server verbundener Benutzer. Das Icon links vom Spieler zeigt an, ob er spricht oder nicht: <br /><img src="skin:talking_on.png" />Sprechend<br /><img src="skin:talking_off.png"/> Nicht sprechend - - - - This is a channel on the server. Only players in the same channel can hear each other. - Dies ist ein Kanal auf dem Server. Nur Spieler im selben Kanal können sich gegenseitig hören. - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - Dies zeigt die Attribute an, die ein Benutzer auf dem Server hat:<br /><img src="skin:authenticated.png" />Authentifizierter Benutzer<br /><img src="skin:muted_self.png" />Stummgestellt (durch sich selbst)<br /><img src="skin:muted_server.png" />Stummgestellt (durch Admin)<br /><img src="skin:deafened_self.png" />Taubgestellt (durch sich selbst)<br /><img src="skin:deafened_server.png" />Taubgestellt (durch Admin)<br />Ein Benutzer der sich selbst stummgestellt hat, ist vermutlich weg oder ist am Telefon.<br />Ein Benutzer der durch einen Admin stummgestellt wurde, ist vermutlich auch weg, aber die Geräusche die der Spieler macht, waren so störend, dass der Admin ihn stummgestellt hat. - - - - Name - Name - - - - Flags - Attribute - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - Sind Sie sicher, dass Sie den Kanal verschieben möchten? - - - - PluginConfig - - - Options - Optionen - - - - - Plugins - Plugins - - - - Link to Game and Transmit Position - Mit Spiel verbinden und Position übertragen - - - - Enable plugins and transmit positional information - Plugin aktivieren und Positionsinformationen übertragen - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - Dies aktiviert Plugins für unterstützte Spiele um Ihre In-Game-Position zu ermitteln und diese mit jedem Sprachpaket zu übertragen. Dies erlaubt anderen Spielern ihre Stimme aus der Richtung zu hören, in der Sie sich befinden. - - - - &Reload plugins - Plugins &neu laden - - - - Reloads all plugins - Läd alle Plugins neu - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - Dies liest alle Plugins neu ein. Benutzen Sie dies, falls Sie dem Pluginverzeichnis ein Plugin hinzugefügt oder ein Plugin geändert haben. - - - - &About - Ü&ber - - - - Information about plugin - Informationen über das Plugin - - - - This shows a small information message about the plugin. - Dies zeigt eine kleine Informationsnachricht über das Plugin an. - - - - &Configure - &Konfigurieren - - - - Show configuration page of plugin - Zeige Konfiguration des Plugins - - - - This shows the configuration page of the plugin, if any. - Dies zeigt eine Konfigurationsseite des Plugins an, falls eine existiert. - - - Mumble - Mumble - - - - Plugin has no configure function. - Plugin hat keine Konfigurationsfunktion. - - - - Plugin has no about function. - Plugin hat keine Über-Funktion. - - - - Form - Formular - - - - Plugins - - Plugin %1 lost link. - Plugin %1 hat Verbindung verloren. - - - - %1 lost link. - %1 hat Verbindung verloren. - - - Plugin %1 linked. - Plugin %1 hat sich verbunden. - - - - %1 linked. - %1 verbunden. - - - - PortAudioSystem - - - Default Device - Standardgerät - - - - PulseAudioConfig - - %1ms - %1ms - - - Device selection - Geräteauswahl - - - Output - Ausgabe - - - Device to use for speakers/headphones - Gerät für Lautsprecher/Kopfhörer - - - Output Options - Ausgabeoptionen - - - Output Delay - Ausgabeverzögerung - - - Amount of data to buffer for ALSA - Menge an Daten die ALSA puffern soll - - - TextLabel - Textlabel - - - - PulseAudioSystem - - - Default Input - Standardeingabe - - - - Default Output - Standardausgabe - - - - ShortcutActionWidget - - - Unassigned - Nicht zugewiesen - - - - ShortcutDelegate - - - Unassigned - Nicht zugewiesen - - - - ShortcutKeyWidget - - - Press Shortcut - Kurzbefehl drücken - - - - TextMessage - - - Message to send - Zu sendende Nachricht - - - - Preview - Vorschau - - - Send raw message - Roh-Nachricht senden - - - Disables html formating - Deaktiviert HTML Formatierung - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble - Mumble - - - Mumble failed to retrieve version information from the SourceForge server. - Mumble konnte keine Versionsinformationen vom SourceForge-Server ermitteln. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - Zertifikat Kettendetails - - - - Certificate chain - Zertifikatkette - - - - Certificate details - Zertifikatdetails - - - - %1 %2 - %1 %2 - - - - - Common Name: %1 - Allgemeiner Name: %1 - - - - - Organization: %1 - Organisation: %1 - - - - Subunit: %1 - Untereinheit: %1 - - - - - Country: %1 - Staat: %1 - - - - - Locality: %1 - Lokalität: %1 - - - - - State: %1 - Land: %1 - - - - Valid from: %1 - Gültig von : %1 - - - - Valid to: %1 - Gültig bis: %1 - - - - Serial: %1 - Serial: %1 - - - - Public Key: %1 bits %2 - Öffentlicher Schlüssel: %1 bits %2 - - - - RSA - RSA - - - - DSA - DSA - - - - Digest (MD5): %1 - Digest (MD5): %1 - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - Ausgegeben von: - - - - Unit Name: %1 - Einheitname: %1 - - - - WASAPIConfig - - Device selection - Geräteauswahl - - - Output - Ausgabe - - - Device to use for speakers/headphones - Gerät für Lautsprecher/Kopfhörer - - - - WASAPISystem - - - Default Device - Standardgerät - - - - XInputKeyWidget - - Press Shortcut - Shortcut drücken - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_en.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_en.ts --- mumble-1.2.3/src/mumble11x/mumble_en.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_en.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,4646 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - - - - - Deny - - - - - Allow - - - - - Allow %1 - - - - - Deny %1 - - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - - - - - Dialog - - - - - &Groups - - - - - Group - - - - - List of groups - - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - - - - - Remove selected group - - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - - - - - Remove - - - - - Inherit group members from parent - - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - - - - - Inherit - - - - - Make group inheritable to sub-channels - - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - - - - - Inheritable - - - - - Group was inherited from parent channel - - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - - - - - Inherited - - - - - Members - - - - - Add - - - - - Add to Remove - - - - - Add member to group - - - - - Type in the name of a player you wish to add to the group and click Add. - - - - - Remove member from group - - - - - Type in the name of a player you wish to remove from the group and click Add. - - - - - &ACL - - - - - Active ACLs - - - - - List of entries - - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - - - - - Inherit ACL of parent? - - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - - - - - Inherit ACLs - - - - - Move entry up - - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - - - - - &Up - - - - - Move entry down - - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - - - - - &Down - - - - - Add new entry - - - - - This adds a new entry, initially set with no permissions and applying to all. - - - - - &Add - - - - - Remove entry - - - - - This removes the currently selected entry. - - - - - &Remove - - - - - Context - - - - - Entry should apply to this channel. - Entry should apply to this channel - - - - - This makes the entry apply to this channel. - - - - - Applies to this channel - - - - - Entry should apply to sub-channels. - - - - - This makes the entry apply to sub-channels of this channel. - - - - - Applies to sub-channels - - - - - Permissions - - - - - User/Group - - - - - Group this entry applies to - - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - - - - - User ID - - - - - User this entry applies to - - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - - - - - ALSAAudioInput - - - Default ALSA Card - - - - - Opening chosen ALSA Input failed: %1 - - - - - ALSAAudioOutput - - - Default ALSA Card - - - - - Opening chosen ALSA Output failed: %1 - - - - - ASIOConfig - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - - - ASIO Initialization failed: %1 - - - - - - Failed to instantiate ASIO driver - - - - - ASIO - - - - - Form - - - - - Device selection - - - - - Device - - - - - Device to use for microphone - - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - - - - - Query selected device - - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - - - - - &Query - - - - - Configure selected device - - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - - - - - &Configure - - - - - Capabilities - - - - - Driver name - - - - - Configure input channels - - - - - Channels - - - - - Microphone - - - - - <- - - - - - -> - - - - - Unused - - - - - Speakers - - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - - - - - Opening selected ASIO device failed. No input will be done. - - - - - AboutDialog - - - About Mumble - - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - - &About Mumble - - - - - &License - - - - - OK - - - - - AboutSpeexDialog - - - About Speex - - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - - - - - OK - - - - - AudioInput - - - Form - - - - - Interface - - - - - System - - - - - Input method for audio - - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - Device - - - - - Input device for audio - - - - - <b>This is the input device to use for audio.</b> - - - - - Cancel Echo - - - - - Transmission - - - - - &Transmit - - - - - When to transmit your speech - - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - - - - - DoublePush Time - - - - - TextLabel - - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - - - - - PTT Audio cue - - - - - Use SNR based speech detection - - - - - Signal to Noise - - - - - Use Amplitude based speech detection. - - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - - - - - Amplitude - - - - - Voice &Hold - - - - - How long to keep transmitting after silence - - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - - - - - Silence Below - - - - - Signal values below this counts as silence - - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - - - - - Speech Above - - - - - Signal values above this count as voice - - - - - Compression - - - - - &Quality - - - - - Quality of compression (peak bandwidth) - - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - - - - - Audio per packet - - - - - How many audio frames to send per packet - - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - - - - - Audio Processing - - - - - Noise Suppression - - - - - Noise suppression - - - - - Amplification - - - - - Maximum amplification of input sound - - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - - - - - Current speech detection chance - - - - - Audible audio cue when push-to-talk is activated or deactivated - - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - Idle AutoMute - - - - - How long to remain idle before auto-mute. - - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - - - - - Maximum bandwidth used for sending audio - - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - - - - - AudioInputDialog - - - Continuous - - - - - Voice Activity - - - - - Push To Talk - - - - - Audio Input - - - - - - %1 ms - - - - - - Off - - - - - %1 s - - - - - -%1 dB - - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - - - - - %1 min - - - - - AudioOutput - - - Form - - - - - Interface - - - - - System - - - - - Output method for audio - - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - Device - - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - - - - - Audio Output - - - - - Default &Jitter Buffer - - - - - Safety margin for jitter buffer - - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - - - - - TextLabel - - - - - Volume - - - - - Volume of incoming speech - - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - - - - - Output Delay - - - - - Amount of data to buffer - - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - - - The connected "speakers" are actually headphones. - - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - - - - - Factor for sound volume decrease - - - - - Bloom - - - - - Factor for sound volume increase - - - - - How much should sound volume increase for sources that are really close? - - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - - - - - Headphones - - - - - Minimum Distance - - - - - Minimum distance to player before sound volume decreases - - - - - Maximum Distance - - - - - Maximum distance, beyond which speech volume won't decrease - - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - - - - - Minimum Volume - - - - - What should the volume be at the maximum distance? - - - - - Loopback Test - - - - - Delay Variance - - - - - Variance in packet latency - - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - - - - - Packet Loss - - - - - Packet loss for loopback mode - - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - - - - - &Loopback - - - - - Desired loopback mode - - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - - - - - Other Applications - - - - - Volume of other applications during speech - - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - - - - - AudioOutputDialog - - - None - - - - - Local - - - - - Server - - - - - Audio Output - - - - - - %1 ms - - - - - - - - - %1% - - - - - %1ms - - - - - - %1m - - - - - AudioStats - - - Audio Statistics - - - - - Input Levels - - - - - Peak microphone level - - - - - Peak power in last frame - - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - - Peak speaker level - - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - - - - - Peak clean level - - - - - Signal Analysis - - - - - Microphone power - - - - - How close the current input level is to ideal - - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - - - - - Signal-To-Noise ratio from the microphone - - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - - - - - Speech Probability - - - - - Probability of speech - - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - - - - - Configuration feedback - - - - - Current audio bitrate - - - - - Bitrate of last frame - - - - - DoublePush interval - - - - - Speech Detection - - - - - Current speech detection chance - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - Signal and noise power spectrum - - - - - Power spectrum of input signal and noise estimate - - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - - - - - Echo Analysis - - - - - Weights of the echo canceller - - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - - - - - Introduction - - - - - Welcome to the Mumble Audio Wizard - - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - - - - - Finished - - - - - Enjoy using Mumble - - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - - - - - Device selection - - - - - Selecting the input and output device to use with Mumble. - - - - - Input device - - - - - This is the device your microphone is connected to. - - - - - - System - - - - - Input method for audio - - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - - Device - - - - - Input device to use - - - - - <b>Selects which sound card to use for audio input.</b> - - - - - Use echo cancellation - - - - - Cancel echo from headset or speakers. - - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - - - - - Output device - - - - - This is the device your speakers or headphones are connected to. - - - - - Output method for audio - - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - Output device to use - - - - - <b>Selects which sound card to use for audio Output.</b> - - - - - Enable positional audio - - - - - Allows positioning of sound. - - - - - This allows Mumble to use positional audio to place voices. - - - - - Positional Audio - - - - - Adjusting attenuation of positional audio. - - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - - - - - Use headphones - - - - - Use headphones instead of speakers. - - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - - - - - Volume tuning - - - - - Tuning microphone hardware volume to optimal settings. - - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - - - - - Voice Activity Detection - - - - - Letting Mumble figure out when you're talking and when you're silent. - - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - - - - - Raw amplitude from input - - - - - Signal-To-Noise ratio - - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - - - - - Device tuning - - - - - Changing hardware output delays to their minimum value. - - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - - - - - Amount of data to buffer. - - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - - - - - %1ms - - - - - Audio path is %1ms long. - - - - - Audio path cannot be determined. Input not recognized. - - - - - %1 s - - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - - - - - Submit anonymous statistics to the Mumble project - - - - - Push To Talk: - - - - - BanEditor - - - Mumble - Edit Bans - - - - - &Address - - - - - &Mask - - - - - 0.0.0.0 - - - - - &Add - - - - - &Update - - - - - &Remove - - - - - ChanACL - - - W - - - - - T - - - - - E - - - - - S - - - - - A - - - - - M - - - - - K - - - - - C - - - - - L - - - - - None - - - - - Traverse - - - - - Enter - - - - - Speak - - - - - AltSpeak - - - - - Mute/Deafen - - - - - Move/Kick - - - - - Make channel - - - - - Link channel - - - - - This represents no privileges. - - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - - - - - Write ACL - - - - - ClientPlayer - - - Authenticated - - - - - Muted (server) - - - - - Deafened (server) - - - - - Local Mute - - - - - Muted (self) - - - - - Deafened (self) - - - - - ConfigDialog - - - Accept changes - - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - - - - - Reject changes - - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - - - - - Apply changes - - - - - This button will immediately apply all changes. - - - - - Undo changes for current page - - - - - This button will revert any changes done on the current page to the most recent applied settings. - - - - - Restore defaults for current page - - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - - Mumble Configuration - - - - - Advanced - - - - - ConnectDialog - - - Connecting to %1 - - - - - Enter username - - - - - Unknown - - - - - Failed to fetch server list - - - - - - New - - - - - -Unnamed entry- - - - - - - Add - - - - - Update - - - - - Mumble Server Connect - - - - - &Custom Servers - - - - - &Label - - - - - A&ddress - - - - - &Port - - - - - &Username - - - - - &Password - - - - - &Connect - - - - - &Cancel - - - - - &Add - - - - - &Remove - - - - - Server &Browser - - - - - Label - - - - - Address - - - - - URL - - - - - Cancel - - - - - C&opy to custom - - - - - &View Webpage - - - - - CoreAudioSystem - - - Default Device - - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - - Default DirectSound Voice Input - - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - - - - - Opening chosen DirectSound Input failed. Default device will be used. - - - - - Lost DirectSound input device. - - - - - DXAudioOutput - - - Default DirectSound Voice Output - - - - - Opening chosen DirectSound Output failed. Default device will be used. - - - - - Lost DirectSound output device. - - - - - Opening chosen DirectSound Output failed. No audio will be heard. - - - - - Database - - - Mumble failed to initialize a database in any -of the possible locations. - - - - - GlobalShortcut - - - Shortcuts - - - - - List of configured shortcuts - - - - - Function - - - - - Shortcut - - - - - Suppress - - - - - Add new shortcut - - - - - This will add a new global shortcut - - - - - &Add - - - - - Remove selected shortcut - - - - - This will permanently remove a selected shortcut. - - - - - &Remove - - - - - GlobalShortcutConfig - - - Shortcuts - - - - - Shortcut button combination. - - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - - - - - Suppress keys from other applications - - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - - - - - GlobalShortcutX - - - Mouse %1 - - - - - LCD - - - Not connected - - - - - LCDConfig - - - Graphic - - - - - Character - - - - - Enable this device - - - - - LCD - - - - - Form - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - - - - - Name - - - - - Type - - - - - Size - - - - - Enabled - - - - - Views - - - - - Minimum Column Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - - - - - Splitter Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - - - - - Critical - - - - - Warning - - - - - Information - - - - - Server Connected - - - - - Server Disconnected - - - - - Player Joined Server - - - - - Player Left Server - - - - - Player kicked (you or by you) - - - - - Player kicked - - - - - You self-muted/deafened - - - - - Other self-muted/deafened - - - - - Player muted (you) - - - - - Player muted (by you) - - - - - Player muted (other) - - - - - Player Joined Channel - - - - - Player Left Channel - - - - - Permission Denied - - - - - Text Message - - - - - LogConfig - - - Toggle console for %1 events - - - - - Toggle pop-up notifications for %1 events - - - - - Toggle Text-To-Speech for %1 events - - - - - Click here to toggle sound notification for %1 events - - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - - - - - Choose sound file - - - - - Invalid sound file - - - - - The file '%1' does not exist or is not a valid speex file. - - - - - Messages - - - - - Message - - - - - Console - - - - - Notification - - - - - Text-To-Speech - - - - - Soundfile - - - - - Path - - - - - Text To Speech - - - - - Volume - - - - - Volume of Text-To-Speech Engine - - - - - <b>This is the volume used for the speech synthesis.</b> - - - - - Length threshold - - - - - Message length threshold for Text-To-Speech Engine - - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - - - - - Characters - - - - - LookConfig - - - - System default - - - - - None - - - - - Only with players - - - - - All - - - - - Ask - - - - - Do Nothing - - - - - Move - - - - - User Interface - - - - - Choose skin file - - - - - Form - - - - - Language - - - - - Language to use (requires restart) - - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - - - - - Look and Feel - - - - - Style - - - - - Basic widget style - - - - - <b>This sets the basic look and feel to use.</b> - - - - - Skin - - - - - Skin file to use - - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - - - - - ... - - - - - Expand - - - - - When to automatically expand channels - - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - - - - - List players above subchannels (requires restart). - - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - - - - - Players above Channels - - - - - Channel Dragging - - - - - This changes the behaviour when moving channels. - - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - - - - - Ask whether to close or minimize when quitting Mumble. - - - - - <b>If set, will verify you want to quit if connected.<b> - - - - - Ask on quit while connected - - - - - Make the Mumble window appear on top of other windows. - - - - - <b>This makes the Mumble window a topmost window.</b> - - - - - Always On Top - - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - - - - - Hide in tray when minimized - - - - - Hide the main Mumble window in the tray when it is minimized. - - - - - MainWindow - - - - Root - - - - - Push-to-Talk - Global Shortcut - - - - - Push and hold this button to send voice. - Global Shortcut - - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - - - - - Reset Audio Processor - Global Shortcut - - - - - Toggle Mute Self - Global Shortcut - - - - - Toggle self-mute status. - Global Shortcut - - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - - - - - Toggle Deafen Self - Global Shortcut - - - - - Toggle self-deafen status. - Global Shortcut - - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - - - - - Unlink Plugin - Global Shortcut - - - - - Force Center Position - Global Shortcut - - - - - Chan Parent - Global Shortcut - - - - - Chan Sub#%1 - Global Shortcut - - - - - Chan All Subs - Global Shortcut - - - - - Push-to-Mute - Global Shortcut - - - - - Join Channel - Global Shortcut - - - - - Toggle Overlay - Global Shortcut - - - - - Toggle state of in-game overlay. - Global Shortcut - - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - - - - - Alt Push-to-Talk - Global Shortcut - - - - - Toggle Minimal - Global Shortcut - - - - - Volume Up (+10%) - Global Shortcut - - - - - Volume Down (-10%) - Global Shortcut - - - - - Mumble - - - - - Mumble -- %1 - - - - - &Window - - - - - - Minimize - - - - - Ctrl+M - - - - - Close - - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - - - - - Clear - - - - - Opening URL %1 - - - - - URL scheme is not 'mumble' - - - - - Connecting to %1 - - - - - Enter username - - - - - Reconnecting. - - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - - - - - Voice channel is sent over control channel. - - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - - - - - UDP Statistics - - - - - To Server - - - - - From Server - - - - - Good - - - - - Late - - - - - Lost - - - - - Resync - - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - - - - - Mumble Server Information - - - - - - &View Certificate - - - - - Kicking player %1 - - - - - - Enter reason - - - - - Banning player %1 - - - - - Sending message to %1 - - - - - - To %1: %2 - - - - - - Message to %1 - - - - - - Channel Name - - - - - Are you sure you want to delete %1 and all its sub-channels? - - - - - Change description of channel %1 - - - - - Sending message to channel %1 - - - - - Sending message to channel tree %1 - - - - - To tree %1: %2 - - - - - Message to tree %1 - - - - - Unmuted and undeafened. - - - - - Unmuted. - - - - - Muted. - - - - - Muted and deafened. - - - - - Deafened. - - - - - Undeafened. - - - - - About Qt - - - - - Joining %1. - - - - - Connected to server %1. - - - - - SSL Verification failed: %1 - - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - - - - - Sever presented a certificate which failed verification. - - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - - - - - Server connection failed: %1. - - - - - Disconnected from server. - - - - - Invalid username - - - - - You connected with an invalid username, please try another one. - - - - - That username is already in use, please try another username. - - - - - Wrong password - - - - - Wrong password for registered users, please try again. - - - - - Wrong server password for unregistered user account, please try again. - - - - - &Server - - - - - &Player - - - - - &Channel - - - - - &Audio - - - - - C&onfigure - - - - - &Help - - - - - Log - - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - - - - - &Quit Mumble - - - - - Closes the program - - - - - Exits the application. - - - - - Ctrl+Q - - - - - &Connect - - - - - Open the server connection dialog - - - - - Shows a dialog of registered servers, and also allows quick connect. - - - - - &Disconnect - - - - - Disconnect from server - - - - - Disconnects you from the server. - - - - - &Ban lists - - - - - Edit ban lists on server - - - - - This lets you edit the server-side IP ban lists. - - - - - &Information - - - - - Show information about the server connection - - - - - This will show extended information about the connection to the server. - - - - - &Kick - - - - - Kick player (with reason) - - - - - Kick selected player off server. You'll be asked to specify a reason. - - - - - &Mute - - - - - Mute player - - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - - - - - &Ban - - - - - Kick and ban player (with reason) - - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - - - - - &Deafen - - - - - Deafen player - - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - - - - - &Local Mute - - - - - Mute player locally - - - - - Mute or unmute player locally. Use this on other players in the same room. - - - - - Send Messa&ge - - - - - Send a Text Message - - - - - Sends a text message to another user. - - - - - &Add - - - - - Add new channel - - - - - This adds a new sub-channel to the currently selected channel. - - - - - &Remove - - - - - Remove channel - - - - - This removes a channel and all sub-channels. - - - - - &Edit ACL - - - - - Edit Groups and ACL for channel - - - - - This opens the Group and ACL dialog for the channel, to control permissions. - - - - - &Rename - - - - - Renames the channel - - - - - This renames a channel. - - - - - &Change Description - - - - - Changes the channel description - - - - - This changes the description of a channel. - - - - - &Link - - - - - Link your channel to another channel - - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - - - - - &Unlink - Channel - - - - - Unlink your channel from another channel - - - - - This unlinks your current channel from the selected channel. - - - - - Unlink &All - - - - - Unlinks your channel from all linked channels. - - - - - This unlinks your current channel (not the selected one) from all linked channels. - - - - - &Reset - - - - - Reset audio preprocessor - - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - - - - - &Mute Self - - - - - Mute yourself - - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - - - - - &Deafen Self - - - - - Deafen yourself - - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - - - - - &Text-To-Speech - - - - - Toggle Text-To-Speech - - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - - - - - S&tatistics - - - - - Display audio statistics - - - - - Pops up a small dialog with information about your current audio input. - - - - - &Unlink - Plugin - - - - - Forcibly unlink plugin - - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - - - - - &Settings - - - - - Configure Mumble - - - - - Allows you to change most settings for Mumble. - - - - - &Audio Wizard - - - - - Start the audio configuration wizard - - - - - This will guide you through the process of configuring your audio hardware. - - - - - &What's This? - - - - - Enter What's This? mode - - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - - - - - &About - - - - - Information about Mumble - - - - - Shows a small dialog with information and license for Mumble. - - - - - About &Speex - - - - - Information about Speex - - - - - Shows a small dialog with information about Speex. - - - - - About &Qt - - - - - Information about Qt - - - - - Shows a small dialog with information about Qt. - - - - - Check for &Updates - - - - - Check for new version of Mumble - - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - - - - - Sends a text message to all users in a channel. - - - - - Send &Tree Message - - - - - Send message to channel tree. - - - - - This sends a text message to a channel and it's subchannels. - - - - - &Minimal View - - - - - Toggle minimal window modes - - - - - This will toggle minimal mode, where the log window and menu is hidden. - - - - - Joined server: %1. - - - - - Left server: %1. - - - - - %1 is now muted and deafened. - - - - - %1 is now muted. - - - - - %1 is now unmuted. - - - - - - server - - - - - You were muted by %1. - - - - - You were unmuted by %1. - - - - - %1 muted by %2. - - - - - %1 unmuted by %2. - - - - - You were deafened by %1. - - - - - You were undeafened by %1. - - - - - %1 deafened by %2. - - - - - %1 undeafened by %2. - - - - - You were kicked from the server by %1: %2. - - - - - %3 was kicked from the server by %1: %2. - - - - - You were kicked and banned from the server by %1: %2. - - - - - %3 was kicked and banned from the server by %1: %2. - - - - - You were moved to %1 by %2. - - - - - %1 left channel. - - - - - %1 moved out by %2 to %3. - - - - - %1 moved in by %2 from %3. - - - - - %1 entered channel. - - - - - Server connection rejected: %1. - - - - - Denied: %1. - - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - - - - - From %1: %2 - - - - - Message from %1 - - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - - - - - Welcome to Mumble. - - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - - - - - Server - message from - - - - - Hide Frame - - - - - Toggle showing frame on minimal window - - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - - - - - NetworkConfig - - - Network - - - - - Form - - - - - Connection - - - - - Use TCP compatibility mode - Use TCP compatability mode - - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - - - - - Use TCP mode - - - - - Reconnect when disconnected - - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - - - - - Reconnect automatically - - - - - Proxy - - - - - Type - - - - - Type of proxy to connect through - - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - - - - - Direct connection - - - - - HTTP(S) proxy - - - - - SOCKS5 proxy - - - - - Hostname - - - - - Hostname of the proxy - - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - - - - - Port - - - - - Port number of the proxy - - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - - - - - Username - - - - - Username for proxy authentication - - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - Password - - - - - Password for proxy authentication - - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - Mumble services - - - - - Check for updates on startup - - - - - Submit anonymous statistics to the Mumble project - - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - - - - - Submit anonymous statistics - - - - - PlayerModel - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - - - - - This is a channel on the server. Only players in the same channel can hear each other. - - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - - - - - Name - - - - - Flags - - - - - Are you sure you want to drag this channel? - - - - - PluginConfig - - - - Plugins - - - - - Plugin has no configure function. - - - - - Plugin has no about function. - - - - - Form - - - - - Options - - - - - Enable plugins and transmit positional information - - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - - - - - Link to Game and Transmit Position - - - - - Reloads all plugins - - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - - - - - &Reload plugins - - - - - Information about plugin - - - - - This shows a small information message about the plugin. - - - - - &About - - - - - Show configuration page of plugin - - - - - This shows the configuration page of the plugin, if any. - - - - - &Configure - - - - - Plugins - - - %1 lost link. - - - - - %1 linked. - - - - - PortAudioSystem - - - Default Device - - - - - PulseAudioSystem - - - Default Input - - - - - Default Output - - - - - ShortcutActionWidget - - - Unassigned - - - - - ShortcutDelegate - - - Unassigned - - - - - ShortcutKeyWidget - - - Press Shortcut - - - - - TextMessage - - - Message to send - - - - - Preview - - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - - - - - Certificate chain - - - - - %1 %2 - - - - - Certificate details - - - - - - Common Name: %1 - - - - - - Organization: %1 - - - - - Subunit: %1 - - - - - - Country: %1 - - - - - - Locality: %1 - - - - - - State: %1 - - - - - Valid from: %1 - - - - - Valid to: %1 - - - - - Serial: %1 - - - - - Public Key: %1 bits %2 - - - - - RSA - - - - - DSA - - - - - Digest (MD5): %1 - - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - - - - - Unit Name: %1 - - - - - WASAPISystem - - - Default Device - - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_es.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_es.ts --- mumble-1.2.3/src/mumble11x/mumble_es.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_es.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,6412 +0,0 @@ - - - - - ACLEditor - - - Active ACLs - LCAs activas - - - - Context - Contexto - - - - User/Group - Usuario/Grupo - - - - Permissions - Permisos - - - - Group - Grupo - - - - Members - Miembros - - - - &Add - &Agregar - - - - &Remove - &Eliminar - - - - &Up - &Subir - - - - &Down - &Bajar - - - - Inherit ACLs - Heredar LCAs - - - - Applies to this channel - Se aplica a este canal - - - - Applies to sub-channels - Se aplica a los subcanales - - - - User ID - ID de usuario - - - - Deny - Denegar - - - - Allow - Permitir - - - - Remove - Eliminar - - - - Inherit - Heredar - - - - Inheritable - Heredable - - - - Inherited - Heredado - - - - Add - Agregar - - - - Add to Remove - Agregar a Eliminar - - - - &Groups - &Grupos - - - - &ACL - &LCA - - - &OK - &Aceptar - - - Accept changes - Aceptar cambios - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Este botón aceptará los grupos/LCAs actuales y los enviará al servidor. Fíjese en que si elimina por error su propio permiso de escritura, el servidor lo agregará. - - - &Cancel - &Cancelar - - - Reject changes - Rechazar cambios - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - Este botón cancelará todos los cambios y cerrará el cuadro de diálogo sin actualizar las LCAs o los grupos en el servidor. - - - - List of entries - Lista de entradas - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics. - Muestra todas las entradas activas en este canal. Las entradas heredadas de los canales padre se mostrarán en cursiva. - - - - Inherit ACL of parent? - ¿Heredar LCA del padre? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Establece si la LCA de la cadena de canales padre se aplican a este objeto o no. Sólo se heredarán aquellas entradas que estén marcadas en el padre con "Aplicar a Subcanales". - - - - Add new entry - Agregar nueva entrada - - - - This adds a new entry, initially set with no permissions and applying to all. - Agrega una nueva entrada, inicialmente establecida sin permisos y aplicándose a todo. - - - - Remove entry - Eliminar entrada - - - - This removes the currently selected entry. - Elimina la entrada actualmente seleccionada. - - - - Move entry up - Mover entrada hacia arriba - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Mueve la entrada hacia arriba en la lista. Ya que las entradas se evalúan en orden, esto podría cambiar los permisos efectivos de los usuarios. No puede mover una entrada por encima de una entrada heredada. Si realmente necesita hacer eso, tendrá que duplicar la entrada heredada. - - - - Move entry down - Mover entrada hacia abajo - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Mueve la entrada hacia abajo en la lista. Ya que las entradas se evalúan en orden, esto podría cambiar los permisos efectivos de los usuarios. - - - - Entry should apply to this channel. - Entry should apply to this channel - La entrada debería aplicarse a este canal - - - - This makes the entry apply to this channel. - Hace que la entrada se aplique a este canal. - - - - Entry should apply to sub-channels. - La entrada debería aplicarse a los subcanales. - - - - This makes the entry apply to sub-channels of this channel. - Hace que la entrada se aplique a los subcanales de este canal. - - - - Group this entry applies to - Grupo al que se aplica esta entrada - - - - User this entry applies to - Usuario al que se aplica esta entrada - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - Controla a qué usuario se le aplica esta entrada. Tan sólo escriba el nombre del usuario y pulse intro para buscar una correspondencia en el servidor. - - - - Allow %1 - Permitir %1 - - - - Deny %1 - Denegar %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Concede el privilegio %1. Si un privilegio es permitido y denegado a la vez, entonces es denegado.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Revoca el privilegio %1. Si un privilegio es permitido y denegado a la vez, entonces es denegado.<br />%2 - - - - List of groups - Lista de grupos - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - Estos son todos los grupos actualmente definidos para el canal. Para crear un nuevo grupo, tan sólo escriba el nombre y presione intro. - - - - Remove selected group - Elimina el grupo seleccionado - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Elimina el grupo actualmente seleccionado. Si el grupo fue heredado, no se eliminará de la lista, pero toda la información sobre el grupo se borrará. - - - - Inherit group members from parent - Heredar miembros del grupo del padre - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Hereda todos los miembros del grupo del padre, si el grupo está marcado como <i>Heredable</i> en el canal padre. - - - - Make group inheritable to sub-channels - Hace al grupo heredable a los subcanales - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Hace este grupo heredable a los subcanales. Si el grupo no es heredable, los subcaneles son libres de crear un nuevo grupo con el mismo nombre. - - - - Group was inherited from parent channel - El grupo fue heredado del canal padre - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - Indica que el grupo fue heredado del canal padre. No se puede editar este atributo, sólo es informativo. - - - - Add member to group - Agregar miembro al grupo - - - Type in the name of a player you wish to add to the group and press enter. - Escriba el nombre de un jugador que desee agregar al grupo y presione intro. - - - - Remove member from group - Eliminar miembro del grupo - - - Type in the name of a player you wish to remove from the group and press enter. - Escriba el nombre de un jugador que desee eliminar del grupo y presione intro. - - - This control which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a groupname starts with a !, it's membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a subchannel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>.<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>.<br />Note that an entry applies to either a user or a group, not both. - Controla a que grupo de usuarios se aplica esta entrada.<br />Preste atención a que el grupo se evalúa en el contexto del canal en el que se usa la entrada. Por ejemplo, la LCA en el canal Raíz da el permiso <i>Escritura</i> al grupo <i>admin</i>. Esta entrada, si es heredada por un canal, dará al usuario privilegios de escritura si pertenece al grupo <i>admin</i> en ese canal, incluso si no pertence al grupo <i>admin</i> en el canal donde la LCA se originó. <br />Si un nombre de grupo comienza por !, se niega su pertenencia, y si comienza por ~, se evalúa en el canal en el que la LCA se definió, en vez de en el canal en el que la LCA está activa. El orden es importante; <i>!~in</i> es válido, pero <i>~!in</i> no lo es.<br/>Algunos grupos especiales predefinidos son:<br /><b>all</b> - Representa a todos los usuarios.<br /><b>auth</b> - Representa a todos los usuarios autenticados.<br /><b>sub,a,b,c</b> - Representa a un usuario en un subcanal con un mínimo de <i>a</i> padres comunes, y entre <i>b</i> y <i>c</i> canales por debajo en la cadena. Vea nuestro sitio web para una documentación más extensa acerca de éste.<br /><b>in</b> - Representa a los usuarios actualmente en el canal (abreviatura de <i>sub,0,0,0</i>).<br /><b>out</b> - Representa los usuarios fuera del canal (abreviatura de <i>!sub,0,0,0</i>).<br />Fíjese en que una entrada se aplica o a un usuario o a un grupo, no a ambos. - - - - Mumble - Edit ACL for %1 - Mumble- Editar LCA para %1 - - - This button will cancel all changes and closes the dialog without updating the ACLs or groups on the server. - Este botón cancelará todos los cambios y cerrará el cuadro de diálogo sin actualizar las LCAs o los grupos en el servidor. - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - Controla a que grupo de usuarios se aplica esta entrada.<br />Preste atención a que el grupo se evalúa en el contexto del canal en el que se usa la entrada. Por ejemplo, la LCA en el canal Raíz da el permiso <i>Escritura</i> al grupo <i>admin</i>. Esta entrada, si es heredada por un canal, dará al usuario privilegios de escritura si pertenece al grupo <i>admin</i> en ese canal, incluso si no pertence al grupo <i>admin</i> en el canal donde la LCA se originó. <br />Si un nombre de grupo comienza por !, se niega su pertenencia, y si comienza por ~, se evalúa en el canal en el que la LCA se definió, en vez de en el canal en el que la LCA está activa. El orden es importante; <i>!~in</i> es válido, pero <i>~!in</i> no lo es.<br/>Algunos grupos especiales predefinidos son:<br /><b>all</b> - Representa a todos los usuarios.<br /><b>auth</b> - Representa a todos los usuarios autenticados.<br /><b>sub,a,b,c</b> - Representa a un usuario en un subcanal con un mínimo de <i>a</i> padres comunes, y entre <i>b</i> y <i>c</i> canales por debajo en la cadena. Vea nuestro sitio web para una documentación más extensa acerca de éste.<br /><b>in</b> - Representa a los usuarios actualmente en el canal (abreviatura de <i>sub,0,0,0</i>).<br /><b>out</b> - Representa los usuarios fuera del canal (abreviatura de <i>!sub,0,0,0</i>).<br />Fíjese en que una entrada se aplica o a un usuario o a un grupo, no a ambos. - - - - Dialog - Diálogo - - - - Type in the name of a player you wish to add to the group and click Add. - Escriba el nombre de un jugador que desee agregar al grupo y haga click en Agregar. - - - - Type in the name of a player you wish to remove from the group and click Add. - Escriba el nombre de un jugador que desee eliminar del grupo y haga click en Agregar. - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - Muestra todas las entradas activas en este canal. Las entradas heredadas de los canales padre se mostrarán en cursiva.<br />Las LCAs se evalúan de arriba a abajo, lo que significa que la prioridad aumenta al desplazarse hacia abajo en la lista. - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - Falló la apertura de la entrada ALSA elegida: %1 - - - - Default ALSA Card - Tarjeta ALSA por defecto - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - Falló la apertura de la salida ALSA elegida: %1 - - - - Default ALSA Card - Tarjeta ALSA por defecto - - - - ALSAConfig - - Device selection - Selección del dispositivo - - - Device to use for microphone - Dispositivo a usar para el micrófono - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Establece qué dispositivo debería usar mumble. El dispositivo <i>default</i> es aquel que haya seleccionado en alsaconfig, los dispositivos <i>hwplug</i> son dispositivos hardware específicos respaldados por el mezclador ALSA y los dispotivos <i>hw</i> son dispositivos de acceso directo al hardware. A menos que su tarjeta de sonido soporte la mezcla de audio por hardware, el uso de un dispositivo <i>hw</i> excluirá al resto de programas del uso del audio. - - - Device to use for speakers/headphones - Dispositivo a usar para los altavoces/auriculares - - - Input - Entrada - - - Output - Salida - - - Output Options - Opciones de salida - - - Output Delay - Retraso de salida - - - Amount of data to buffer for ALSA - Cantidad de datos a almacenar en el búfer para ALSA - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer de salida. Experimente con diferentes valores y fíjelo al más bajo que no cause ruido en el sonido. - - - ALSA - ALSA - - - %1ms - %1ms - - - Form - Formulario - - - TextLabel - EtiquetaDeTexto - - - Default ALSA Card - Tarjeta ALSA por defecto - - - - ASIOConfig - - - Device selection - Selección del dispositivo - - - - Capabilities - Capacidades - - - - Channels - Canales - - - - Configure input channels - Configurar canales de entrada - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples "What you hear".<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be "Mic L" while Speaker should be "Mix L" and "Mix R" - Configura los canales de entrada para ASIO. Asegúrese de seleccionar al menos un canal como micrófono y altavoz. <i>Micrófono</i> debería ser al que está conectado su micrófono, y <i>Altavoz</i> debería ser un canal que muestree "Lo que oye".<br />Por ejemplo, para Audigy 2 ZS, una buena selección para Micrófono sería "Mic L" mientras que Altavoz debería ser "Mix L" y "Mix R" - - - - Device to use for microphone - Dispositivo a usar para el micrófono - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - Elige qué dispositivo consultar. Aún debe consultar realmente el dispositivo y seleccionar qué canales usar. - - - - Device - Dispositivo - - - - Query selected device - Consulta el dispositivo seleccionado - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Consulta el dispositivo seleccionado en busca de canales. Sea consciente de que muchos controladores ASIO son extremadamente poco fiables, y consultarlos podría bloquear la aplicación o el sistema. - - - - Configure selected device - Configura el dispositivo seleccionado - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Configura el dispositivo seleccionado. Sea consciente de que muchos controladores ASIO son extremadamente poco fiables, y consultarlos podría bloquear la aplicación o el sistema. - - - - Driver name - Nombre del controlador - - - Buffersize - Tamaño del búfer - - - - Microphone - Micrófono - - - - <- - <- - - - - -> - -> - - - - Unused - Sin usar - - - - Speakers - Altavoces - - - %1 (ver %2) - %1 (ver %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 ms -> %2 ms (resolución %3 ms) %4Hz - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 ms -> %2 ms (resolución %3 ms) %4Hz -- Inutilizable - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - Falló la inicialización de ASIO: %1 - - - - ASIO - ASIO - - - - - Failed to instantiate ASIO driver - No se pudo instanciar el controlador ASIO - - - - &Query - &Consultar - - - - &Configure - &Configurar - - - - Form - Formulario - - - TextLabel - EtiquetaDeTexto - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - Configura los canales de entrada para ASIO. Asegúrese de seleccionar al menos un canal como micrófono y altavoz. <i>Micrófono</i> debería ser al que está conectado su micrófono, y <i>Altavoz</i> debería ser un canal que muestree <i>lo que oye</i>.<br />Por ejemplo, para Audigy 2 ZS, una buena selección para Micrófono sería <i>Mic L</i> mientras que Altavoz debería ser <i>Mix L</i> y <i>Mix R</i>. - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - Debe seleccionar al menos un micrófono y una fuente altavoz para usar ASIO. Si sólo necesita el muestreo del micrófono, use DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - Falló la apertura del dispositivo ASIO seleccionado. No se realizará ninguna entrada. - - - - AboutDialog - - <h3>Mumble v1.0.0</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v1.0.0</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p>Traducción al español por Álvaro M. Recio Pérez<br />naproxeno@users.sourceforge.net</p><p><b>Una utilidad de charla por voz para jugadores</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - &About Mumble - &Acerca de Mumble - - - - &License - &Licencia - - - - OK - Aceptar - - - <h3>Mumble v%1</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v%1</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Una utilidad de charla por voz para jugadores</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - <h3>Mumble v%1</h3><p>Copyright 2005-2008 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v%1</h3><p>Copyright 2005-2008 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p>Traducción al español por Álvaro M. Recio Pérez<br />naproxeno@users.sourceforge.net</p><p><b>Una utilidad de charla por voz para jugadores</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - About Mumble - Acerca de Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p>Traducción al español por Álvaro M. Recio Pérez<br />naproxeno@users.sourceforge.net</p><p><b>Una utilidad de charla por voz para jugadores</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - AboutSpeexDialog - - <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Acerca de Speex</h3><p><tt>http://www.speex.org/</tt></p><p>Este programa usa Speex versión %1</p><p>Speex se usa para cancelación de eco, filtrado de<br />ruido, detección de actividad vocal y compresión del<br />habla.</p> - - - - OK - Aceptar - - - - About Speex - Acerca de Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Acerca de Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>Este programa usa Speex versión %1</p><p>Speex se usa para cancelación de eco, filtrado de<br />ruido, detección de actividad vocal y compresión del<br />habla.</p> - - - - AudioConfigDialog - - Interfaces - Interfaces - - - Transmission - Transmisión - - - Compression - Compresión - - - Jitter Buffer - Búfer de jitter - - - Input - Entrada - - - Input method for audio - Método de entrada para el audio - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de entrada a usar para el audio.</b><br />Muy probablemente desee utilizar DirectSound. - - - Output - Salida - - - Output method for audio - Método de salida para el audio - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de salida a usar para el audio.</b><br />Muy probablemente quiera utilizar DirectSound. - - - Voice Activity - Actividad Vocal - - - Push To Talk - Presionar Para Hablar - - - Transmit - Transmitir - - - When to transmit your speech - Cuándo transmitir su habla - - - Voice Hold - Persistencia de la voz - - - How long to keep transmitting after silence - Cuánto tiempo continuar transmitiendo tras un silencio - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Selecciona cuánto tiempo debería continuar la transmisión tras una detección percibida en el habla.</b>Auméntelo si su voz es interrumpida mientras habla (observable por un icono de voz parpadeando rápidamente junto a su nombre).<br />Sólo tiene sentido cuando se usa con la transmisión por Actividad Vocal. - - - Audio per packet - Audio por paquete - - - How many audio frames to send per packet - Cuántas tramas de audio enviar por paquete - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Selecciona cuántas tramas de audio deberían insertarse en un paquete.</b><br />Aumentar esto incrementará la latencia de su voz, pero también reducirá los requisitos de ancho de banda. - - - Use TCP mode - Usar modo TCP - - - Automatic Reconnect - Reconexión automática - - - Reconnect when disconnected - Volver a conectar cuando sea desconectado - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Volver a conectar cuando sea desconectado</b>.<br />Hace que Mumble intente volver a conectar automáticamente después de 10 segundos si falla su conexión con el servidor. - - - Maximum bandwidth used for sent audio - Ancho de banda máximo usado para el audio enviado - - - Outgoing Bitrate - Velocidad de transmisión saliente - - - Quality - Calidad - - - Quality of compression (peak bandwidth) - Calidad de la compresión (ancho de banda máximo) - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Establece la calidad de compresión.</b><br />Esto determina cuánto ancho de banda se le permite usar a Mumble para el audio saliente. - - - Complexity - Complejidad - - - Complexity of compression (CPU) - Complejidad de la compresión (CPU) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Establece la complejidad de la compresión.</b><br />Esto determina cuánta CPU se le permite usar a Mumble para incrementer la calidad de la voz transmitida. Valores por encima de 5 proporcionan sólo una ganancia marginal. - - - Amp - Amplificación - - - Maximum amplification of input sound - Amplificación máxima del sonido de entrada - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Amplificación máxima de la entrada.</b><br />Mumble normaliza el volumen de entrada antes de la compresión, y esto establece cuánto se le permite amplificar.<br />El nivel real se actualiza continuamente basado en su patrón de habla actual, pero nunca sobrepasará el nivel especificado aquí.<br />Si el nivel de <i>Volumen del Micrófono</i> de las estadísticas de audio ronda el 100%, probablemente desee establecer esto alrededor de 2.0, pero si, como la mayoría de la gente, no consigue alcanzar 100%, establezca esto a algo mucho mayor.<br />Idealmente, fíjelo de tal forma que <i>Volumen del Micrófono * Factor de Amplificación >= 100</i>, incluso cuando hable realmente bajo.<br /><br />Fíjese en que no es perjudicial establecer esto al máximo, pero Mumble comenzará a captar otras conversaciones si lo deja autoajustarse a ese nivel. - - - Default Jitter Buffer - Búfer de jitter por defecto - - - How long to prebuffer on first packet - Cuánto tiempo prealmacenar con el primer paquete - - - <b>This sets the default buffer size for the jitter buffer</b>.<br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the default buffer size to use on the first packet to arrive from a new speaker, or when a speaker using Voice Activity or Push-To-Talk just started talking again. If the start of sentences you hear is very jittery, increase this value. - <b>Establece el tamaño de búfer por defecto del búfer de jitter</b>.<br />Todo el audio entrante es almacenado en un búfer, y el búfer de jitter contínuamente trata de reducir el búfer al mínimo sostenible por su red, para que la latencia sea tan baja como sea posible. Esto establece el tamaño de búfer por defecto a usar con el primer paquete que llegue de un nuevo interlocutor, o cuando un interlocutor que use Actividad Vocal o Presionar-Para-Hablar comience a hablar de nuevo. Si el comienzo de las frases que oye es muy fluctuante, incremente este valor. - - - Basic Audio - Audio básico - - - %1 ms - %1 ms - - - %1s - %1 s - - - Continuous - Contínuo - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Establece cuándo debería transmitirse el habla.</b><br /><i>Contínuo</i> - Todo el tiempo<br /><i>Actividad Vocal</i> - Cuando está hablando claramente.<br /><i>Presionar Para Hablar</i> - Cuando presiona la tecla establecida en <i>Métodos abreviados</i>. - - - Use TCP Compatibility mode - Usar modo de Compatibilidad TCP - - - <b>Enable TCP Compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Habilita el modo de Compatibilidad TCP</b>.<br />Esto hará que Mumble sólo use TCP cuando se comunique con el servidor. Esto aumentará la sobrecarga y provocará que los paquetes perdidos produzcan notables pausas en la comunicación, así que sólo debería ser usado si no consigue usar la opción por defecto (que emplea UDP para la voz y TCP para el control). - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 90% of this overhead). - <b>Muestra el ancho de banda máximo empleado.</b><br />Esto muestra la cantidad máxima de ancho de banda enviado desde su máquina. Velocidad de transmisión del audio es la velocidad de transmisión máxima (ya que se usa VBR) únicamente para los datos de audio. Posición es la velocidad de transmisión usada para información posicional. Sobrecarga son las cabeceras de nuestras tramas y de los paquetes IP (IP y UDP son el 90% de esta sobrecarga). - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Posición %4, Sobrecarga %3) - - - Loopback Test - Prueba de bucle de retorno - - - PTT Audio cue - Indicación de audio PTT - - - Audible audio cue when push-to-talk pressed and released - Indicación de audio sonora cuando se presione o suelte presionar-para-hablar (PTT) - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Habilita las indicaciones de audio para presionar para hablar.</b><br />Si se activa, se produciran pitidos cortos de audio cuando se presione o suelte presionar para hablar. - - - None - Ninguno - - - Local - Local - - - Server - Servidor - - - Loopback - Bucle de retorno - - - Desired loopback mode - Modo de bucle de retorno deseado - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Activa uno de los modos de prueba de bucle de retorno.</b><br /><i>Ninguno</i> - Bucle de retorno desactivado<br /><i>Local</i> - Emula un servidor local.<br /><i>Servidor</i> - Solicita un bucle de retorno desde el servidor.<br />Por favor, fíjese en que cuando está activado el modo de bucle de retorno, ningún otro jugador oirá su voz. Esta opción no se guarda al salir de la aplicación. - - - Delay Variance - Varianza del retraso - - - Variance in packet latency - Varianza de la latencia de los paquetes - - - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>Establece la varianza de la latencia de los paquetes para la prueba de bucle de retorno</b><br />La mayoría de rutas de audio contienen algo de latencia variable. Esto le permite fijar esa varianza para la prueba de bucle de retorno. Por ejemplo, si fija esto a 15ms, se emulará una red con 20-35ms de latencia de ping u 80-95ms de latencia. La mayoría de conexiones de red domésticas tienen una variancia de unos 5 ms - - - Packet Loss - Pérdida de paquetes - - - Packet loss for loopback mode - Pérdida de paquetes para el modo de bucle de retorno - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0%% - <b>Establece la pérdida de paquetes para el modo de bucle de retorno.</b><br />Esta será la tasa de paquetes perdidos. A menos que su ancho de banda de salida haya alcanzado el máximo o haya algún problema con su conexión, esto será 0%% - - - %1 s - %1 s - - - %1% - %1% - - - -%1 dB - -%1 dB - - - Form - Formulario - - - &Input - &Entrada - - - &Output - &Salida - - - &Transmit - &Transmitir - - - Voice &Hold - &Persistencia de la voz - - - TextLabel - EtiquetaDeTexto - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Muestra el ancho de banda máximo empleado.</b><br />Esto muestra la cantidad máxima de ancho de banda enviado desde su máquina. Velocidad de transmisión del audio es la velocidad de transmisión máxima (ya que se usa VBR) únicamente para los datos de audio. Posición es la velocidad de transmisión usada para información posicional. Sobrecarga son las cabeceras de nuestras tramas y de los paquetes IP (IP y UDP son el 75% de esta sobrecarga). - - - &Quality - &Calidad - - - &Complexity - C&omplejidad - - - Audio Processing - Procesamiento del audio - - - Noise Suppression - Supresión de ruido - - - Noise suppression - Supresión de ruido - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Establece la cantidad de supresión de ruido a aplicar.<b><br />Cuanto más alto sea este valor, mas agresivamente se suprimirá el ruido estacionario. - - - Amplification - Amplificación - - - Audio Output - Salida de audio - - - Default &Jitter Buffer - Búfer de &vibración por defecto - - - Safety margin for jitter buffer - Márgen de seguridad para el búfer de vibración - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>Establece el márgen de seguridad máximo para el búfer de vibración.</b><br />Todo el audio entrante es almacenado en un búfer, y el búfer de vibración trata de forzar continuamente a este búfer al mínimo sostenible por su red, para que la latencia sea tan baja como sea posible. Ésto establece el tamaño mínimo de búfer a usar. Si el comienzo de las frases que oye es muy tembloroso, aumente este valor. - - - Volume - Volúmen - - - Volume of incoming speech - Volúmen del habla entrante - - - <b>This adjusts the volume of incoming speech.</b><br />Note that this can only be used to decrease the volume. No amplification is possible. - <b>Ajusta el volúmen del habla entrante.</b><br />Fíjese en que sólo se puede usar para disminuir el volúmen. No es posible la amplificación. - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Establece la pérdida de paquetes para el modo de bucle de retorno.</b><br />Ésta será la tasa de paquetes perdidos. A menos que su ancho de banda de salida haya alcanzado el máximo o haya algún problema con su conexión, ésta será siempre 0% - - - &Loopback - &Bucle de retorno - - - Off - Desconectado - - - DoublePush Time - Tiempo para DoblePulsación - - - Use SNR based speech detection - Usar detección basada en SNR - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>Establece el uso de la relación señal/ruido para la detección vocal.</b><br />En este modo, se analiza la entrada en busca de algo que parezca una señal clara, y la clarida de la señal se usa para provocar la detección vocal. - - - Signal to Noise - Señal/ruido - - - Use Amplitude based speech detection. - Usar detección vocal basada en la amplitud. - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>Establece el uso de la amplitud para la detección vocal.</b><br />En este modo, se usa la intensidad de la señal de entrada para detectar el habla. - - - Amplitude - Amplitud - - - Silence Below - Silencio por debajo de - - - Signal values below this counts as silence - Los valores de la señal por debajo de éste se consideran como silencio - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>Establece los valores que provocaran la detección vocal.</b><br />Use ésto junto con la ventana la ventana de estadísticas del audio para ajustar manualmente los valores que provocan la detección del habla. Los valores de entrada por debajo del "Silencio por debajo de" siempre se consideran como silencio. Los valores por encima del "Habla por encima de" siempre se consideran como voz. Los valores intermedios se considerarán como voz si usted ya estaba hablando, pero no provocarán una nueva detección. - - - Speech Above - Habla por encima de - - - Signal values above this count as voice - Los valores de la señal por encima de éste se consideran como voz - - - Connection - Conexión - - - - AudioInput - - - Form - Formulario - - - - Interface - Interfaz - - - - System - Sistema - - - - Input method for audio - Método de entrada para el audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de entrada a usar para el audio.</b><br />Muy probablemente desee utilizar DirectSound. - - - - Device - Dispositivo - - - - Input device for audio - Output method for audio - Método de salida para el audio - - - - <b>This is the input device to use for audio.</b> - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de salida a usar para el audio.</b><br />Muy probablemente desee utilizar DirectSound. - - - - Cancel Echo - Cancelación de eco - - - - Transmission - Transmisión - - - - &Transmit - &Transmitir - - - - When to transmit your speech - Cuándo transmitir su habla - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Establece cuándo debería transmitirse el habla.</b><br /><i>Contínuo</i> - Todo el tiempo<br /><i>Actividad Vocal</i> - Cuando está hablando claramente.<br /><i>Presionar Para Hablar</i> - Cuando presiona la tecla establecida en <i>Métodos abreviados</i>. - - - - DoublePush Time - Tiempo para DoblePulsación - - - - TextLabel - EtiquetaDeTexto - - - Audible audio cue when push-to-talk pressed and released - Indicación de audio sonora cuando se presione o suelte presionar-para-hablar (PTT) - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Habilita las indicaciones de audio para presionar para hablar.</b><br />Si se activa, se produciran pitidos cortos de audio cuando se presione o suelte presionar para hablar. - - - - PTT Audio cue - Indicación de audio PTT - - - - Use SNR based speech detection - Usar detección basada en SNR - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>Establece el uso de la relación señal/ruido para la detección vocal.</b><br />En este modo, se analiza la entrada en busca de algo que parezca una señal clara, y la clarida de la señal se usa para provocar la detección vocal. - - - - Signal to Noise - Señal/ruido - - - - Use Amplitude based speech detection. - Usar detección vocal basada en la amplitud. - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>Establece el uso de la amplitud para la detección vocal.</b><br />En este modo, se usa la intensidad de la señal de entrada para detectar el habla. - - - - Amplitude - Amplitud - - - - Voice &Hold - &Persistencia de la voz - - - - How long to keep transmitting after silence - Cuánto tiempo continuar transmitiendo tras un silencio - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Selecciona cuánto tiempo debería continuar la transmisión tras una detección percibida en el habla.</b>Auméntelo si su voz es interrumpida mientras habla (observable por un icono de voz parpadeando rápidamente junto a su nombre).<br />Sólo tiene sentido cuando se usa con la transmisión por Actividad Vocal. - - - - Silence Below - Silencio por debajo de - - - - Signal values below this counts as silence - Los valores de la señal por debajo de éste se consideran como silencio - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>Establece los valores que provocaran la detección vocal.</b><br />Use ésto junto con la ventana la ventana de estadísticas del audio para ajustar manualmente los valores que provocan la detección del habla. Los valores de entrada por debajo del "Silencio por debajo de" siempre se consideran como silencio. Los valores por encima del "Habla por encima de" siempre se consideran como voz. Los valores intermedios se considerarán como voz si usted ya estaba hablando, pero no provocarán una nueva detección. - - - - Speech Above - Habla por encima de - - - - Signal values above this count as voice - Los valores de la señal por encima de éste se consideran como voz - - - - Compression - Compresión - - - - &Quality - &Calidad - - - - Quality of compression (peak bandwidth) - Calidad de la compresión (ancho de banda máximo) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Establece la calidad de compresión.</b><br />Esto determina cuánto ancho de banda se le permite usar a Mumble para el audio saliente. - - - &Complexity - C&omplejidad - - - Complexity of compression (CPU) - Complejidad de la compresión (CPU) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Establece la complejidad de la compresión.</b><br />Esto determina cuánta CPU se le permite usar a Mumble para incrementer la calidad de la voz transmitida. Valores por encima de 5 proporcionan sólo una ganancia marginal. - - - - Audio per packet - Audio por paquete - - - - How many audio frames to send per packet - Cuántas tramas de audio enviar por paquete - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Selecciona cuántas tramas de audio deberían insertarse en un paquete.</b><br />Aumentar esto incrementará la latencia de su voz, pero también reducirá los requisitos de ancho de banda. - - - Maximum bandwidth used for sent audio - Ancho de banda máximo usado para el audio enviado - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Muestra el ancho de banda máximo empleado.</b><br />Esto muestra la cantidad máxima de ancho de banda enviado desde su máquina. Velocidad de transmisión del audio es la velocidad de transmisión máxima (ya que se usa VBR) únicamente para los datos de audio. Posición es la velocidad de transmisión usada para información posicional. Sobrecarga son las cabeceras de nuestras tramas y de los paquetes IP (IP y UDP son el 75% de esta sobrecarga). - - - - Audio Processing - Procesamiento del audio - - - - Noise Suppression - Supresión de ruido - - - - Noise suppression - Supresión de ruido - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Establece la cantidad de supresión de ruido a aplicar.<b><br />Cuanto más alto sea este valor, mas agresivamente se suprimirá el ruido estacionario. - - - - Amplification - Amplificación - - - - Maximum amplification of input sound - Amplificación máxima del sonido de entrada - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Amplificación máxima de la entrada.</b><br />Mumble normaliza el volumen de entrada antes de la compresión, y esto establece cuánto se le permite amplificar.<br />El nivel real se actualiza continuamente basado en su patrón de habla actual, pero nunca sobrepasará el nivel especificado aquí.<br />Si el nivel de <i>Volumen del Micrófono</i> de las estadísticas de audio ronda el 100%, probablemente desee establecer esto alrededor de 2.0, pero si, como la mayoría de la gente, no consigue alcanzar 100%, establezca esto a algo mucho mayor.<br />Idealmente, fíjelo de tal forma que <i>Volumen del Micrófono * Factor de Amplificación >= 100</i>, incluso cuando hable realmente bajo.<br /><br />Fíjese en que no es perjudicial establecer esto al máximo, pero Mumble comenzará a captar otras conversaciones si lo deja autoajustarse a ese nivel. - - - - Current speech detection chance - Probabilidad actual de detección del habla - - - - Audible audio cue when push-to-talk is activated or deactivated - Indicación de audio sonora cuando se active o desactive presionar-para-hablar (PTT) - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>Establece el uso de la relación señal/ruido para la detección vocal.</b><br />En este modo, se analiza la entrada en busca de algo que parezca una señal clara, y la clarida de la señal se usa para provocar la detección vocal. - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Muestra las opciones actuales de detección del habla.</b><br />Puede cambiar las opciones desde el cuadro de diálogo Opciones o desde el Asistente de audio. - - - - Idle AutoMute - Inactividad para AutoEnmudecer - - - - How long to remain idle before auto-mute. - Cuánto tiempo debe permanecer inactivo antes de auto-enmudecer. - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - Establece un temporizador de inactividad. Si el temporizador expira sin que se haya enviado audio, se le enmudecerá. - - - - Maximum bandwidth used for sending audio - Ancho de banda máximo usado para enviar audio - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Establece la cantidad de supresión de ruido a aplicar.<b><br />Cuanto más alto sea este valor, mas agresivamente se suprimirá el ruido estacionario. - - - - AudioInputDialog - - - Continuous - Contínuo - - - - Voice Activity - Actividad Vocal - - - - Push To Talk - Presionar Para Hablar - - - - Audio Input - Entrada de audio - - - - - %1 ms - %1 ms - - - - - Off - Desconectado - - - - %1 s - %1 s - - - - -%1 dB - -%1 dB - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Posición %4, Sobrecarga %3) - - - - %1 min - %1 min - - - - AudioOutput - - - Form - Formulario - - - - Interface - Interfaz - - - - System - Sistema - - - - Output method for audio - Input method for audio - Método de entrada para el audio - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de entrada a usar para el audio.</b><br />Muy probablemente desee utilizar DirectSound. - - - - Device - Dispositivo - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - Audio posicional - - - - Audio Output - Salida de audio - - - - Default &Jitter Buffer - Búfer de &vibración por defecto - - - - Safety margin for jitter buffer - Márgen de seguridad para el búfer de vibración - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>Establece el márgen de seguridad máximo para el búfer de vibración.</b><br />Todo el audio entrante es almacenado en un búfer, y el búfer de vibración trata de forzar continuamente a este búfer al mínimo sostenible por su red, para que la latencia sea tan baja como sea posible. Ésto establece el tamaño mínimo de búfer a usar. Si el comienzo de las frases que oye es muy tembloroso, aumente este valor. - - - - TextLabel - EtiquetaDeTexto - - - - Volume - Volúmen - - - - Volume of incoming speech - Volúmen del habla entrante - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>Ajusta el volúmen del habla entrante.</b><br />Fíjese en que si incrementa esto por encima de 100%, se distorsionará el audio. - - - - Output Delay - Retraso de salida - - - - Amount of data to buffer - Cantidad de datos a almacenar - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer de salida. Experimente con diferentes valores y fíjelo al más bajo que no cause ruido en el sonido. - - - Volume attenuation - Atenuación del volúmen - - - MinDistance - Distancia mínima - - - Minimum distance to player before sound decreases - Distancia mínima al jugador antes de que el sonido disminuya - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Establece la distancia mínima para cálculos de sonido. El volumen del habla de otros jugadores no disminuirá hasta que estén al menos a esta distancia de ti. - - - MaxDistance - Distancia máxima - - - Maximum distance, beyond which sound won't decrease - Distancia máxima, más allá de la cual el sonido no disminuirá - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Establece la distancia máxima para cálculos de sonido. Cuando estén más lejos que esto, el volumen del sonido de otros jugadores no disminuirá más. - - - RollOff - Atenuación - - - - Factor for sound volume decrease - Factor para la disminución del volumen del sonido - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Cuán rápido debería disminuir el volumen del sonido cuando pase más allá de la distancia mínima. Lo normal (1.0) es que el volumen del sonido disminuya la mitad cada vez que la distancia se doble. Aumentar este valor quiere decir que el volumen disminuye más rápidamente, mientras que reducirlo quiere decir que disminuye más lentamente. - - - - Bloom - Bloom - - - - Minimum Volume - Volúmen mínimo - - - - The connected "speakers" are actually headphones. - Los "altavoces" conectados son en realidad auriculares. - - - - Minimum Distance - Distancia mínima - - - - Minimum distance to player before sound volume decreases - Distancia mínima al jugador antes de que el sonido disminuya - - - - Maximum Distance - Distancia máxima - - - - Maximum distance, beyond which speech volume won't decrease - Distancia máxima, más allá de la cual el volúmen del habla no disminuirá - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - Establece la distancia máxima para cálculos de sonido. Cuando estén más lejos que esto, el volumen del habla de otros jugadores no disminuirá más. - - - - What should the volume be at the maximum distance? - ¿Cuál debería ser el volúmen a la distancia máxima? - - - - Loopback Test - Prueba de bucle de retorno - - - - Delay Variance - Varianza del retraso - - - - Variance in packet latency - Varianza de la latencia de los paquetes - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>Establece la varianza de la latencia de los paquetes para la prueba de bucle de retorno</b><br />La mayoría de rutas de audio contienen algo de latencia variable. Esto le permite fijar esa varianza para la prueba de bucle de retorno. Por ejemplo, si fija esto a 15 ms, se emulará una red con 20-35 ms de latencia de ping u 80-95 ms de latencia. La mayoría de conexiones de red domésticas tienen una variancia de unos 5 ms - - - - Packet Loss - Pérdida de paquetes - - - - Packet loss for loopback mode - Pérdida de paquetes para el modo de bucle de retorno - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Establece la pérdida de paquetes para el modo de bucle de retorno.</b><br />Ésta será la tasa de paquetes perdidos. A menos que su ancho de banda de salida haya alcanzado el máximo o haya algún problema con su conexión, ésta será siempre 0% - - - - &Loopback - &Bucle de retorno - - - - Desired loopback mode - Modo de bucle de retorno deseado - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Activa uno de los modos de prueba de bucle de retorno.</b><br /><i>Ninguno</i> - Bucle de retorno desactivado<br /><i>Local</i> - Emula un servidor local.<br /><i>Servidor</i> - Solicita un bucle de retorno desde el servidor.<br />Por favor, fíjese en que cuando está activado el modo de bucle de retorno, ningún otro jugador oirá su voz. Esta opción no se guarda al salir de la aplicación. - - - - Factor for sound volume increase - Factor de aumento del volumen del sonido - - - - How much should sound volume increase for sources that are really close? - ¿Cuánto debería aumentar el sonido para fuentes que están muy cerca? - - - Connected "speakers" are actually headphones. - Los "altavoces" conectados son en realidad auriculares. - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - Activar esto indica que no tiene altavoces conectados, sólo auriculares. Esto es importante, ya que generalmente los altavoces están situados delante de usted, mientras que los auriculares están directamente a su izquierda/derecha. - - - - Headphones - Auriculares - - - - Other Applications - Otras aplicaciones - - - - Volume of other applications during speech - Volumen de otras aplicaciones durante el habla - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>Baja el volumen de las otras aplicaciones durante el habla.</b><br />Mumble admite la disminución del volumen de otras aplicaciones mientras hay habla entrante. Esto establece el volumen relativo de las otras aplicaciones cuando otros estan hablando. - - - - AudioOutputDialog - - - None - Ninguno - - - - Local - Local - - - - Server - Servidor - - - - Audio Output - Salida de audio - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1% - - - - %1ms - %1ms - - - - - %1m - %1m - - - %1 - %1 - - - - AudioStats - - - Peak microphone level - Nivel máximo del micrófono - - - - Peak speaker level - Nivel máximo de los altavoces - - - - Peak clean level - Nivel limpio máximo - - - Microphone loudness - Intensidad del micrófono - - - Mic Signal-To-Noise - Señal/Ruido del micrófono - - - - Speech Probability - Probabilidad de habla - - - Audio bitrate - Velocidad de transmisión del audio - - - - Peak power in last frame - Potencia máxima en la última trama - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. - Muestra la potencia máxima en la última trama (20 ms), y es la misma medida que generalmente encontrará mostrada como "potencia de entrada". Por favor, no haga caso a esto y vea <b>Intensidad</b> en su lugar, que es mucho más estable e ignora las muestras extremas. - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Muestra la potencia máxima de los altavoces en la última trama (20 ms). A menos que esté usando un método de muestreo multi-canal (como ASIO) con los canales de altavoces configurados, esto será 0. Si ha configurado una instalación de este tipo, y esto aún muestra 0 mientras se reproduce audio de otros programas, su instalación no está funcionando. - - - - How close the current input level is to ideal - Cuán próximo al ideal está el nivel de entrada actual - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality - Muestra cuán próximo al ideal está su nivel de volumen de entrada actual. Para ajustar su nivel de micrófono, abra el programa que emplea para ajustar el volumen de grabación, y observe el valor de aquí mientras habla.<br /><b>Hable alto, como lo haría cuando está enfadado por perder ante un novato.</b><br />Ajuste el volumen hasta que este valor esté próximo a 100%, pero asegúrese de que no lo sobrepasa. Si lo sobrepasa, es probable que se produzcan cortes en partes de su habla, lo que degradará la calidad de sonido - - - - Signal-To-Noise ratio from the microphone - Tasa señal/ruido del micrófono - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - Muestra la Tasa Señal/Ruido (SNR) del micrófono en la última trama (20 ms). Muestra cuán clara es la voz en comparación con el ruido.<br />Si este valor está por debajo de 1.0, hay más ruido que voz en la señal, y por tanto se reduce la calidad.<br />No hay límite superior para este valor, pero no espere ver muy por encima de 40-50 sin un estudio de sonido. - - - - Probability of speech - Probabilidad de habla - - - - Bitrate of last frame - Velocidad de transmisión de la última trama - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - Esta es la velocidad de transmisión de la última trama comprimida (20 ms), y como tal aumentará y disminuirá mientras VBR ajusta la calidad. Para ajustar la velocidad de transmisión máxima, ajuste <b>Complejidad de Compresión</b> en el cuadro de diálogo Opciones. - - - - Power spectrum of input signal and noise estimate - Espectro de potencia de la señal de entrada y estimación del ruido - - - - Weights of the echo canceller - Pesos del cancelador de eco - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - Esta es la probabilidad de que la última trama (20 ms) fuera habla y no ruido ambiental.<br />La transmisión por Actividad Vocal depende de la correción de este valor. El truco de esto es que el medio de una frase se detecta siempre como habla, el problema son las pausas entre palabras y el comienzo del discurso. Es difícil distinguir un suspiro de una palabra que empiece con 'h'.<br />Si esto está en fuente negrita, significa que Mumble está transmitiendo actualmente (si está conectado). - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - Muestra el espectro de potencia de la señal de entrada actual (línea roja) y la estimación de ruido actual (relleno azul).<br />Todas las amplitudes se multiplican por 30 para mostrar las partes interesantes (cuánta más señal que ruido está presente en cada banda de onda).<br />Esto probablemente tiene interés solo si está tratando de ajustar con precisión las condiciones de ruido de su micrófono. Bajo buenas condiciones, debería haber tan sólo una pequeña palpitación de azul en la parte inferior. Si el azul sobrepasa más de la mitad del gráfico, posee un entorno seriamente ruidoso. - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - Muestra los pesos del cancelador de eco, con el tiempo incrementándose hacia abajo y la frecuencia incrementándose hacia la derecha.<br />Idealmente, esto debería ser negro, indicando que no existe eco alguno. Más comúnmente, habrá una o más bandas horizontales de color azulado que representan eco retrasado en el tiempo. Debería poder ver los pesos actualizados en tiempo real.<br />Fíjese en que mientras no haya nada a lo que cancelar el eco, no verá datos muy útiles aquí. Reproduzca algo de música y las cosas deberían estabilizarse.<br />Puede elegir ver las partes reales o imaginarias de los pesos en el dominio de la frecuencia, o de forma alternativa el módulo y la fase calculados. Lo más útil de estos probablemente sea el módulo, que es la amplitud del eco, y muestra cuánto de la señal saliente está siendo eliminado en este paso de tiempo. Los otros modos de visionado son útiles en su mayoría a personas que quieren ajustar los algoritmos de cancelación de eco.<br />Por favor, fíjese en que si la imagen completa fluctúa ampliamente mientras está en el modo módulo, el cancelador de eco no logra encontrar ninguna correlación entre las dos fuentes de entrada (altavoces y micrófono). O tiene un retraso muy largo en el eco, o una de las fuentes de entrada está mal configurada. - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. - Muestra la potencia máxima en la última trama (20 ms) tras todo el procesado. Idealmente, esto debería ser -96 dB cuando no esté hablando. En realidad, un estudio de sonido debería ver -60 dB, y usted debería ver con suerte en torno a -20 dB. Cuando hable, esto debería aumentar hasta un valor entre -5 y -10 dB.<br />Si está usando cancelación de eco, y esto sube a más de -15 dB cuando no está hablando, su instalación no está funcionando, y molestará con ecos a otros jugadores. - - - Mumble - Mumble - - - Real - Real - - - Imaginary - Imaginaria - - - Modulus - Módulo - - - Phase - Fase - - - >1000ms - >1000ms - - - - Audio Statistics - Estadísticas del audio - - - - Input Levels - Niveles de entrada - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - Muestra la potencia máxima en la última trama (20 ms), y es la misma medida que generalmente encontrará mostrada como "potencia de entrada". Por favor, no haga caso a ésto y vea <b>Potencia del micrófono</b> en su lugar, que es mucho más estable e ignora las muestras extremas. - - - TextLabel - EtiquetaDeTexto - - - - Signal Analysis - Análisis de la señal - - - - Microphone power - Potencia del micrófono - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - Muestra cuán próximo al ideal está su nivel de volumen de entrada actual. Para ajustar su nivel de micrófono, abra el programa que emplea para ajustar el volumen de grabación, y observe el valor de aquí mientras habla.<br /><b>Hable alto, como lo haría cuando está enfadado por perder ante un novato.</b><br />Ajuste el volumen hasta que este valor esté próximo a 100%, pero asegúrese de que no lo sobrepasa. Si lo sobrepasa, es probable que se produzcan cortes en partes de su habla, lo que degradará la calidad de sonido. - - - - Signal-To-Noise ratio - Relación señal/ruido - - - - Configuration feedback - Información para la configuración - - - - Current audio bitrate - Velocidad actual de transmisión del audio - - - - DoublePush interval - Intervalo de DoblePulsación - - - Time between last two PushToTalk presses - Tiempo entre las dos últimas pulsaciones de PresionarParaHablar - - - - Speech Detection - Detección del habla - - - - Current speech detection chance - Probabilidad actual de detección del habla - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Muestra las opciones actuales de detección del habla.</b><br />Puede cambiar las opciones desde el cuadro de diálogo Opciones o desde el Asistente de audio. - - - - Signal and noise power spectrum - Espectro de potencia de la señal y el ruido - - - - Echo Analysis - Análisis del eco - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - Asistente para ajuste de audio - - - - Introduction - Introducción - - - - Welcome to the Mumble Audio Wizard - Bienvenido al Asistente para ajuste de audio de Mumble - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - Este es el asistente para el ajuste de audio de Mumble. Le ayudará a establecer correctamente los niveles de entrada de su tarjeta de sonido, y también fijará los parámetros correctos para el procesamiento de sonido en Mumble. - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - Por favor, sea consciente de que mientras el asistente esté activo, el audio será redirigido localmente para permitirle escucharlo, y no se enviará al servidor. - - - - Finished - Finalizado - - - - Enjoy using Mumble - Disfrute usando Mumble - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - Enhorabuena. Ahora debería estar listo para disfrutar una experiencia de sonido más rica con Mumble. - - - - Device selection - Selección del dispositivo - - - - Selecting the input and output device to use with Mumble. - Seleccionando el dispositivo de entrada y salida a usar con Mumble. - - - - Input device - Dispositivo de entrada - - - - This is the device your microphone is connected to. - Este es el dispositivo al que esta conectado su micrófono. - - - - - System - Sistema - - - - Input method for audio - Método de entrada para el audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de entrada a usar para el audio.</b><br />Muy probablemente desee utilizar DirectSound. - - - - - Device - Dispositivo - - - - Input device to use - Dispositivo de entrada a usar - - - - <b>Selects which sound card to use for audio input.</b> - <b>Selecciona qué tarjeta de sonido usar para la entrada de audio.</b> - - - - Output device - Dispositivo de salida - - - - This is the device your speakers or headphones are connected to. - Éste es el dispositivo al que están conectados sus altavoces o auriculares. - - - - Output method for audio - Método de salida para el audio - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Éste es el método de salida a usar para el audio.</b><br />Muy probablemente quiera utilizar DirectSound. - - - - Output device to use - Dispositivo de salida a usar - - - - <b>Selects which sound card to use for audio Output.</b> - <b>Selecciona qué tarjeta de sonido usar para la salida de audio.</b> - - - - Volume tuning - Ajuste del volumen - - - - Tuning microphone hardware volume to optimal settings. - Ajustando el volumen del hardware del micrófono al nivel óptimo. - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - Abra su panel de control de sonido y vaya a las opciones de grabación. Asegúrese de que el micrófono está seleccionado como la entrada activa y con el máximo volumen de grabación. Si existe una opción para activar un "Potenciado del micrófono" asegúrese de que está activada. - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - Hable fuerte en voz alta, como cuando está molesto o entusiasmado. Baje el volumen en el panel de control de sonido hasta que la barra de abajo permanezca, mientras habla, tan alto como sea posible en la zona azul y verde pero <b>no</b> en la zona roja. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Ahora hable bajito, como cuando está hablando tarde en la noche y no quiere molestar a nadie. Ajuste el control deslizante de abajo de forma que la barra alcance el verde mientras habla, pero permanezca en azul mientras guarde silencio. - - - - Voice Activity Detection - Detección de la Actividad Vocal - - - - Letting Mumble figure out when you're talking and when you're silent. - Permitir a Mumble suponer cuándo está hablando y cuándo guarda silencio. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Esto ayudará a Mumble averiguar cuándo está hablando. El primer paso es seleccionar qué valor de datos usar. - - - - Raw amplitude from input - Amplitud sin procesar de la entrada - - - - Signal-To-Noise ratio - Relación señal-ruiido - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Ahora debe ajustar los siguientes dos controles deslizantes. Las primeras palabras que diga deberían terminar en el área verde (con certeza es habla). Mientras habla, debería permanecer en la amarilla (podria ser habla) y cuando no esté hablando, todo deberia estar en la roja (con certeza no es habla). - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - Por último, debe ajustar el tiempo de gracia. Mumble puede detectar este tiempo sin habla y aún seguir transmitiendo antes de interrumpirlo. Esto le permite recobrar el aliento mientras habla. - - - - Device tuning - Ajuste del dispositivo - - - - Changing hardware output delays to their minimum value. - Cambiando el retraso del hardware de salida al valor mínimo. - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - Para mantener la latencia en el mínimo absoluto, es importante almacenar en la tarjeta de sonido la menor cantidad de audio que sea posible. Sin embargo, muchas tarjetas de sonido informan de que requieren un búfer mucho más pequeño del que en realidad necesitan para funcionar, asi que la única forma de establecer este valor es mediante prueba y error. - - - You should hear a multitone chord. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. - Debería oir un acorde multitono. Cambie el control deslizante de abajo al valor mas bajo con el que no obtenga <b>ninguna</b> interrupción ni ruido en el sonido. - - - - Amount of data to buffer. - Cantidad de datos a almacenar. - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer de salida. Experimente con diferentes valores y fíjelo al más bajo que no cause fluctuaciones rápidas en el sonido. - - - - %1ms - %1ms - - - - %1 s - %1 s - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - Debería oir un solo tono que cambia de frecuencia. Cambie el control deslizante de abajo al valor más bajo que <b>no</b> produzca interrupciones o fluctuaciones en el sonido. Por favor, fíjese en que el eco local se deshabilita durante esta prueba para mejorar el reconocimiento de la ruta del audio. - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - Si coloca su micrófono de forma que recoja el sonido de sus altavoces o auriculares, Mumble medirá el retraso total de la ruta de audio en su sistema; esto quiere decir el retraso desde que una muestra se colocada en un búfer de salida hasta que vuelve a ser encuentrada en un búfer entrante. - - - - Audio path is %1ms long. - La longitud de la ruta de audio es de %1ms. - - - - Audio path cannot be determined. Input not recognized. - No se puede determinar la ruta de audio. No se reconoce la entrada. - - - - Use echo cancellation - Usar cancelación de eco - - - - Cancel echo from headset or speakers. - Cancelar el eco de los auriculares o altavoces. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - Esto habilita la cancelación de eco del audio saliente, que beneficia a altavoces y auriculares. - - - - Enable positional audio - Habilitar audio posicional - - - - Allows positioning of sound. - Habilita el posicionamiento del sonido. - - - - This allows Mumble to use positional audio to place voices. - Permite a Mumble usar audio posicional para situar las voces. - - - - Positional Audio - Audio posicional - - - - Adjusting attenuation of positional audio. - Ajustando la atenuación del audio posicional. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble soporta audio posicional para algunos juegos, y posicionará la voz de otros jugadores en relación a su posición en el juego. Dependiendo de su posición, el volúmen de la voz cambiará entre los altavoces para simular la dirección y la distancia a la que están los otros jugadores. Tal posicionamiento depende de que la configuración de los altavoces sea correcta en su sistema operativo, por tanto se hará una prueba aquí. - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - El gráfico de abajo muestra <font color="red">su</font> posición, los <font color="yellow">altavoces</font> y una <font color="green">fuente de sonido móvil</font> vistas desde arriba. Debería oir el audio moverse entre los canales. - - - - Use headphones - Usar auriculares - - - - Use headphones instead of speakers. - Usar auriculares en vez de altavoces. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - Esto hace que se ignore la configuración de altavoces del SO y configura el posicionamiento para auriculares en su lugar. - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Mumble se encuentra en continuo desarrollo, y el equipo de desarrollo quiere centrarse en las características que beneficien a la mayoría de usuarios. Para ello, Mumble admite el envío de estadísticas anónimas acerca de su configuración a los desarrolladores. Dichas estadísticas son esenciales para el desarrollo futuro, y para asegurar que las características que usa no queden obsoletas. - - - - Submit anonymous statistics to the Mumble project - Enviar estadísticas anónimas al proyecto Mumble - - - - Push To Talk: - Presionar Para Hablar: - - - - BanEditor - - - &Add - &Agregar - - - - &Update - A&ctualizar - - - - &Remove - &Eliminar - - - &OK - &Aceptar - - - Accept changes - Aceptar cambios - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Este botón aceptará los grupos/LCAs actuales y los enviará al servidor. Fíjese en que si elimina por error su propio permiso de escritura, el servidor lo agregará. - - - &Cancel - &Cancelar - - - Reject changes - Rechazar cambios - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - Este botón cancelará todos los cambios y cerrá el cuadro de diálogo sin actualizar las LCAs o los grupos en el servidor. - - - - Mumble - Edit Bans - Mumble - Editar prohibiciones - - - - 0.0.0.0 - 0.0.0.0 - - - - &Address - &Dirección - - - - &Mask - &Máscara - - - - ChanACL - - - W - E - - - - T - R - - - - E - I - - - - S - H - - - - A - A - - - - M - M - - - - K - X - - - - C - C - - - - L - V - - - - None - Ninguno - - - Write - Escritura - - - - Traverse - Recorrer - - - - Enter - Ingresar - - - - Speak - Hablar - - - - AltSpeak - HablarAlt - - - - Mute/Deafen - Enmudecer/Ensordecer - - - - Move/Kick - Mover/Expulsar - - - - Make channel - Crear canal - - - - Link channel - Vincular canal - - - - This represents no privileges. - No representa ningún privilegio. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Representa acceso total al canal, incluyendo la habilidad de cambiar la información de grupo y LCA. Este privilegio implica los otros privilegios. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Representa el permiso de recorrer el canal. Si se deniega este privilegio a un usuario, no podrá acceder a este canal ni ningún subcanal de ninguna forma, sin importar otros permisos en los subcanales. - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Representa el permiso de unirse al canal. Si tiene una estructura de canales jerárquica, podría desear dar Recorrer a todos, pero restringir Ingresar en la raíz de su jerarquía. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Representa el permiso de hablar en un canal. Los usuarios sin este privilegio serán suprimidos por el servidor (vistos como mudos), y no podrán hablar hasta que se les de voz con los privilegios adecuados. - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speek</i> privilege, but applies to packets spoken with AltPushToTalk held down. Used to broadcast to a hierarchy of channels without linking. - Representa el permiso de hablar en un canal con habla marcada. Funciona exactamente como el privilegio <i>hablar</i>, pero se aplica a paquetes hablados con PresionarParaHablarAlt pulsado. Se usa para transmitir a una jerarquía de canales sin vincular. - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Representa el permiso de enmudecer y ensordecer a otros jugadores. Una vez enmudecido, un jugador permanecerá enmudecido hasta que se le otorgue voz por otro jugador con privilegios o se vuelva a conectar al servidor. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Representa el permiso de mover a un jugador a otro canal o expulsarlo del servidor. Para mover realmente al jugador, o bien el jugador que mueve debe tener privilegios Mover/Expulsar en el canal de destino, o debe estar permitido al jugador ingresar normalmente en el canal. Los jugadores con este privilegio pueden trasladar a jugadores a canales a los que el jugador objetivo normalmente no tendría permiso para entrar. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Representa el permiso de crear subcanales. El jugador que crea el subcanal será agregado al grupo admin del subcanal. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Representa el permiso de vincular canales. Los jugadores en canales vinculados se oirán entre sí, siempre que el jugador que habla tenga el privilegio <i>hablar</i> en el canal del oyente. Necesita el privilegio de vincular en ambos canales para crear un vínculo, pero sólo en uno de los caneles para eliminarlo. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - Representa el permiso de hablar en un canal con habla marcada. Funciona exactamente como el privilegio <i>hablar</i>, pero se aplica a paquetes hablados con PresionarParaHablarAlt pulsado. Se usa para transmitir a una jerarquía de canales sin vincular. - - - - Write ACL - Escribir LCA - - - - ClientPlayer - - - Authenticated - Autenticado - - - - Muted (server) - Mudo (servidor) - - - - Deafened (server) - Sordo (servidor) - - - - Local Mute - Mudo localmente - - - - Muted (self) - Mudo (por sí mismo) - - - - Deafened (self) - Sordo (por sí mismo) - - - - ConfigDialog - - - Mumble Configuration - Configuración de Mumble - - - &OK - &Aceptar - - - - Accept changes - Aceptar cambios - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Este botón aceptará las opciones actuales y volverá a la aplicación.<br />Las opciones se almacenarán en el disco cuando salga de la aplicación. - - - &Cancel - &Cancelar - - - - Reject changes - Rechazar cambios - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Este botón rechazará todos los cambios y volverá a la aplicación.<br />Las opciones se restaurarán a las posiciones previas. - - - &Apply - &Aplicar - - - - Apply changes - Aplicar cambios - - - - This button will immediately apply all changes. - Este botón aplicará inmediatamente todos los cambios. - - - - Undo changes for current page - Deshace los cambios en la página actual - - - - This button will revert any changes done on the current page to the most recent applied settings. - Este botón revertirá cualquier cambio hecho en la página actual a las opciones aplicadas mas recientemente. - - - - Restore defaults for current page - Restaura las opciones por defecto en la página actual - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - Este boton restaurará sólo las opciones en la página actual a sus valores por defecto. No se cambiarán otras páginas.<br />Para restaurar todas las opciones a sus valores por defecto, tendrá que usar este botón en cada página. - - - Show all configuration items - Muestra todos las opciones de configuración - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Muestra todos las opciones de configuración.</b><br />Mumble contiene muchas opciones de configuración que la mayoría de usuarios no necesitarán cambiar. Marcar ésto mostrará todas las opciones configurables. - - - Expert Config - Configuración experta - - - Tab 1 - Pestaña 1 - - - - Advanced - - - - - ConnectDialog - - &Name - &Nombre - - - - A&ddress - &Dirección - - - - &Port - &Puerto - - - - &Username - Nombre de &usuario - - - - &Password - &Contraseña - - - - &Connect - &Conectar - - - - Cancel - Cancelar - - - - &Add - &Agregar - - - - &Remove - &Eliminar - - - - &Custom Servers - Servidores &personales - - - - Server &Browser - &Explorador de servidores - - - Name - Nombre - - - - Address - Dirección - - - - URL - URL - - - - C&opy to custom - C&opiar a personales - - - - &View Webpage - &Ver página web - - - - Connecting to %1 - Conectando a %1 - - - - Enter username - Introduzca el nombre de usuario - - - Mumble - Mumble - - - - Failed to fetch server list - No se pudo obtener la lista de servidores - - - - &Label - &Etiqueta - - - - Label - Etiqueta - - - - Unknown - Desconocido - - - - -Unnamed entry- - -Entrada sin nombre- - - - - Mumble Server Connect - Conexión al servidor Mumble - - - - &Cancel - &Cancelar - - - - - New - Nuevo - - - - - Add - Agregar - - - - Update - Actualizar - - - - CoreAudioSystem - - - Default Device - Dispositivo por defecto - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - Mumble - Mumble - - - Opening chosen DirectSound Input failed. No microphone capture will be done. - Falló la apertura del dispositivo DirectSound elegido. No se realizará ninguna captura del micrófono. - - - Opening chosen DirectSound Input failed. Using defaults. - Falló la apertura del dispositivo DirectSound elegido. Usando los valores por defecto. - - - - Opening chosen DirectSound Input failed. Default device will be used. - Falló la apertura del dispositivo DirectSound elegido. Se usará el dispositivo por defecto. - - - - Default DirectSound Voice Input - Entrada de voz DirectSound por defecto - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - Falló la apertura del dispositivo DirectSound elegido. No se realizará ninguna captura del micrófono. - - - - Lost DirectSound input device. - Dispositivo de entrada DirectSound perdido. - - - - DXAudioOutput - - Mumble - Mumble - - - - Opening chosen DirectSound Output failed. No audio will be heard. - Falló la apertura del dispositivo DirectSound elegido. No se oirá audio. - - - - Opening chosen DirectSound Output failed. Default device will be used. - Falló la apertura del dispositivo DirectSound elegido. Se usará el dispositivo por defecto. - - - - Default DirectSound Voice Output - Salida de voz DirectSound por defecto - - - - Lost DirectSound output device. - Dispositivo de salida DirectSound perdido. - - - - DXConfigDialog - - Default DirectSound Voice Input - Entrada de voz DirectSound por defecto - - - Default DirectSound Voice Output - Salida de voz DirectSound por defecto - - - Device selection - Selección del dispositivo - - - Device to use for microphone - Dispositivo a usar para el micrófono - - - This sets the input device to use, which is where you have connected the microphone. - Establece el dispositivo de entrada a usar, que es donde ha conectado el micrófono. - - - Input - Entrada - - - Device to use for speakers/headphones - Dispositivo a usar para los altavoces/auriculares - - - This sets the output device to use, which is where you have connected your speakers or your headset - Establece el dispositivo de salida a usar, que es donde ha conectado sus altavoces o auriculares. - - - Output - Salida - - - Output Options - Opciones de salida - - - Output Delay - Retraso de salida - - - Amount of data to buffer for DirectSound - Cantidad de datos a almacenar en el búfer para DirectSound - - - This sets the amount of data to prebuffer in the directsound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer directsound. Experimente con diferentes valores y fíjelo al más bajo que no cause fluctuaciones rápidas en el sonido. - - - Positional Audio - Audio posicional - - - None - Ninguno - - - Panning - Panning - - - Light HRTF - HRTF ligera - - - Full HRTF - HRTF completa - - - 3D Sound Algorithm - Algoritmo de sonido 3D - - - This sets what 3D Sound algorithm to use.<br /><b>None</b> - Disable 3D Sound (least CPU).<br /><b>Panning</b> - Just use stereo panning (some CPU).<br /><b>Light/Full HRTF</b> - Head-Related Transfer Functions enabled. This may use a small amount of CPU.<br />Note that if you have a soundcard with <i>hardware</i> 3D processing, HRTF processing will be done on the soundcard and will use practically no processing power. - Establece qué algoritmo de Sonido 3D usar.<br /><b>Ninguno</b> - Desactiva el Sonido 3D (menos CPU).<br /><b>Panning</b> - Sólo usa panning estéreo (poca CPU).<br /><b>HRTF Ligera/Completa</b> - Activa las Funciones de Transferencia Relativas a la Cabeza (HRTF). Esto podría usar una pequeña cantidad de CPU.<br />Fíjese en que si tiene una tarjeta de sonido con procesamiento 3D <i>hardware</i>, el procesado de HRTF se hará en la tarjeta de sonido y casi no usará poder de procesamiento. - - - Method - Método - - - MinDistance - Distancia mínima - - - Minimum distance to player before sound decreases - Distancia mínima al jugador antes de que el sonido disminuya - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Establece la distancia mínima para cálculos de sonido. El volumen del habla de otros jugadores no disminuirá hasta que estén al menos a esta distancia de ti. - - - MaxDistance - Distancia máxima - - - Maximum distance, beyond which sound won't decrease - Distancia máxima, más allá de la cual el sonido no disminuirá - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Establece la distancia máxima para cálculos de sonido. Cuando estén más lejos que esto, el volumen del sonido de otros jugadores no disminuirá más. - - - RollOff - Atenuación - - - Factor for sound volume decrease - Factor para la disminución del volumen del sonido - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Cuán rápido debería disminuir el volumen del sonido cuando pase más allá de la distancia mínima. Lo normal (1.0) es que el volumen del sonido disminuya la mitad cada vez que la distancia se doble. Aumentar este valor quiere decir que el volumen disminuye más rápidamente, mientras que reducirlo quiere decir que disminuye más lentamente. - - - DirectSound - DirectSound - - - %1 ms - %1 ms - - - %1m - %1m - - - %1 - %1 - - - Players more than %1 meters away have %2% intensity - Los jugadores alejados más de %1 metros tendrán %2% de intensidad - - - This sets the output device to use, which is where you have connected your speakers or your headset. - Establece el dispositivo de salida a usar, que es donde ha conectado sus altavoces o sus auriculares. - - - This sets the amount of data to prebuffer in the DirectSound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer directsound. Experimente con diferentes valores y fíjelo al más bajo que no cause fluctuaciones rápidas en el sonido. - - - %1ms - %1ms - - - Form - Formulario - - - TextLabel - EtiquetaDeTexto - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble no logró inicializar una base de datos en ninguna -de las ubicaciones posibles. - - - - DirectInputKeyWidget - - Press Shortcut - Presione la tecla de método abreviado - - - - GlobalShortcut - - - Shortcuts - Métodos abreviados - - - - List of configured shortcuts - Lista de métodos abreviados configurados - - - - Function - Función - - - - Shortcut - Método abreviado - - - - Suppress - Ocultar - - - - Add new shortcut - Agregar nuevo método abreviado - - - - This will add a new global shortcut - Ésto agregará un nuevo método abreviado - - - - &Add - &Agregar - - - - Remove selected shortcut - Eliminar el método abreviado seleccionado - - - - This will permanently remove a selected shortcut. - Esto eliminará permanentemente un método abreviado seleccionado. - - - - &Remove - &Eliminar - - - - GlobalShortcutConfig - - - Shortcuts - Métodos abreviados - - - Function - Función - - - Shortcut - Método abreviado - - - Shortcut bound to %1. - Método abreviado asignado a %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Éste es el método abreviado global asociado a %1</b><br />Haga click en este campo y después presione la combinación de teclas/botones deseada para volver a asociarlo. Haga doble click para borrar. - - - Double-click an entry to clear the shortcut. - Haga doble click en una entrada para borrar el método abreviado. - - - Suppress - Esconder - - - - Shortcut button combination. - Combinación de botones del método abreviado. - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>Ésta es la combinación de teclas del método abreviado global.</b><br />Haga doble click en este campo y después presione la combinación de teclas deseada para volver a asociarla. - - - - Suppress keys from other applications - Ocultar las teclas a otras aplicaciones - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>Oculta a otras aplicaciones las pulsaciones de teclas.</b><br />Activar ésto ocultará el botón (o el último botón de una combinación de múltiples botones) a otras apliaciones. Tenga en cuenta que no todos los botones se pueden ocultar. - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble ha detectado que es incapaz de recibir eventos de los Métodos Abreviados Globales cuando se ejecuta en segundo plano.<br /><br />Esto ocurre porque la característica de Acceso Universal llamada 'Habilitar acceso para dispositivos de asistencia' actualmente está deshabilitada.<br /><br />Por favor <a href=" ">habilite esta opción</a> y continúe cuando lo haya hecho. - - - - GlobalShortcutWinConfig - - Shortcuts - Métodos abreviados - - - Function - Función - - - Shortcut - Método abreviado - - - Shortcut bound to %1. - Método abreviado asignado a %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Éste es el método abreviado global asociado a %1</b><br />Haga click en este campo y después presione la combinación de teclas/botones deseada para volver a asociarlo. Haga doble click para borrar. - - - Double-click an entry to clear the shortcut. - Haga doble click en una entrada para borrar el método abreviado. - - - - GlobalShortcutX - - - Mouse %1 - Raton %1 - - - - GlobalShortcutXConfig - - Shortcuts - Métodos abreviados - - - Function - Función - - - Shortcut - Método abreviado - - - Shortcut bound to %1. - Método abreviado asignado a %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key combo to rebind. Double-click to clear. - <b>Éste es el método abreviado global asociado a %1</b><br />Haga click en este campo y después presione la combinación de teclas deseada para volver a asociarlo. Haga doble click para borrar. - - - - LCD - - - Not connected - Desconectado - - - - LCDConfig - - - Graphic - Gráfico - - - - Character - De caracteres - - - - Enable this device - Habilitar este dispositivo - - - - LCD - LCD - - - - Form - Formulario - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Esta es la lista de dispositivos LCD disponibles en su sistema. Enumera los dispositivos por nombre, pero también incluye el tamaño de la pantalla y el tipo de LCD. Mumble admite la salida hacia varios dispositivos LCD a la vez.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Tipo:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble admite dos tipos de dispositivos LCD distintos. Un LCD gráfico permite a Mumble dibujar cada pixel individual de la pantalla, mientras que un LCD de caracteres sólo permite a Mumble mostrar caracteres. Algunas características sólo está disponibles para LCDs gráficos.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Tamaño:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Este campo describe el tamaño de un dispositivo LCD. El tamaño se da, o bien en píxeles (para LCDs gráficos), o bien en caracteres (para LCDs de caracteres).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Habilitado:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">Determina si Mumble deberia dibujar en un dispositivo LCD en particular.</span></p></body></html> - - - - Devices - Dispositivos - - - - Name - Nombre - - - - Type - Tipo - - - - Size - Tamaño - - - - Enabled - Habilitado - - - - Views - Vistas - - - - Minimum Column Width - Ancho de columna mínimo - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Esta opción determina la anchura mínima de una columna en la "vista del jugador".</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Si demasiada gente habla a la vez, la "vista del jugador" se dividirá en columnas.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Puede usar esta opción para escoger un compromiso entre el número de jugadores</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">mostrados en el LCD, y la anchura de los nombres de los jugadores.</p></body></html> - - - - TextLabel - EtiquetaDeTexto - - - - Splitter Width - Anchura del divisor - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Esta opción determina la anchura del divisor de columnas.</span></p></body></html> - - - - Log - - [%2] %1 - [%2] %1 - - - - Debug - Depuración - - - - Critical - Crítico - - - - Warning - Advertencia - - - - Information - Información - - - - Server Connected - Conectado al servidor - - - - Server Disconnected - Desconectado del servidor - - - - Player Joined Server - Jugador se unió al servidor - - - - Player Left Server - Jugador abandonó el servidor - - - - Player kicked (you or by you) - Jugador expulsado (usted o por usted) - - - - Player kicked - Jugador expulsado - - - - You self-muted/deafened - Se enmudeció/ensordeció a sí mismo - - - - Other self-muted/deafened - Otro se enmudeció/ensordeció a sí mismo - - - - Player muted (you) - Jugador le enmudeció (a usted) - - - - Player muted (by you) - Jugador enmudecido (por usted) - - - - Player muted (other) - Jugador enmudecido (otro) - - - - Player Joined Channel - Jugador se unió al canal - - - - Player Left Channel - Jugador abandonó el canal - - - - Permission Denied - Permiso denegado - - - - Text Message - Mensaje de texto - - - Script Errors - Errores de guión - - - - LogConfig - - - Toggle console for %1 events - Conmutar consola para eventos de tipo %1 - - - - Toggle pop-up notifications for %1 events - Conmutar notificaciones emergentes para eventos de tipo %1 - - - - Toggle Text-To-Speech for %1 events - Conmutar Texto-A-Voz (TTS) para eventos de tipo %1 - - - - Click here to toggle sound notification for %1 events - Haga click aquí para conmutar las notificaciones sonoras para eventos de tipo %1 - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - Ruta al archivo de sonido usado para las notificaciones sonoras en el caso de eventos de tipo %1<br />Haga un sólo click para reproducirlo<br />Haga doble click para cambiarlo - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - Haga click aquí para conmutar la salida a consola para eventos de tipo %1<br />Si se activa, esta opción hará que Mumble escriba todos los eventos de tipo %1 en su registro de mensajes. - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - Haga click aquí para conmutar las notificaciones emergentes para eventos de tipo %1<br />Si se activa, Mumble creará una ventana emergente por cada evento de tipo %1. - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Haga click aquí para conmutar el Texto-A-Voz para eventos de tipo %1<br />Si se activa, Mumble usa Texto-A-Voz para leer evento de tipo %1 en voz alta. Texto-A-Voz también puede leer el contenido del evento, algo que no puede conseguirse mediante ficheros de sonido. No se pueden usar Texto-A-Voz y archivos de sonido simultáneamente. - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Haga click aquí para conmutar las notificaciones sonoras para eventos de tipo %1<br />Si se activa, Mumble usa un archivo de sonido predefinido por usted para indicar evento de tipo %1. No se pueden usar archivos de sonido y Texto-A-Voz simultáneamente. - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - Ruta al archivo de sonido usado para las notificaciones sonoras en el caso de eventos de tipo %1<br />Haga un sólo click para reproducirlo<br />Haga doble click para cambiarlo<br />Asegúrese de que están habilitadas las notificaciones sonoras para estos eventos o este campo no tendrá ningún efecto. - - - - Choose sound file - Elija el archivo de sonido - - - - Invalid sound file - Archivo de sonido no válido - - - - The file '%1' does not exist or is not a valid speex file. - El archivo '%1' no existe o no es un archivo speex válido. - - - - Messages - Mensajes - - - - Console - Consola - - - TTS - TTS - - - Enable console for %1 - Habilitar consola para %1 - - - Enable Text-To-Speech for %1 - Habilitar Texto-A-Voz (TTS) para %1 - - - - Text To Speech - Texto A Voz (TTS) - - - - Volume - Volumen - - - - Volume of Text-To-Speech Engine - Volumen del motor Texto-A-Voz (TTS) - - - - <b>This is the volume used for the speech synthesis.</b> - <b>Este es el volumen usado para la síntesis de voz.</b> - - - - Length threshold - Umbral de longitud - - - - Message length threshold for Text-To-Speech Engine - Umbral de longitud del mensaje para el motor Texto-A-Voz - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Establece el umbral de longitud a usar para el motor de Texto-A-Voz.</b><br />No se leeran en voz alta por completo los mensajes mayores que este límite. - - - - Message - Mensaje - - - - Notification - Notificación - - - - Text-To-Speech - Texto-A-Voz - - - - Soundfile - Archivo de sonido - - - - Path - Ruta - - - - Characters - Caracteres - - - - LookConfig - - - Language - Idioma - - - - Look and Feel - Apariencia - - - - - System default - Predeterminado del sistema - - - - Language to use (requires restart) - Idioma a usar (requiere reiniciar) - - - <b>This sets which language mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Establece qué idioma debería usar mumble</b><br />Tendrá que reiniciar Mumble para usar el nuevo idioma. - - - - Style - Estilo - - - - Basic widget style - Estilo básico de los controles - - - - <b>This sets the basic look and feel to use.</b> - <b>Establece la apariecia básica a usar.</b> - - - - Skin - Carátula - - - - Skin file to use - Archivo de carátula a usar - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. - <b>Establece qué carátula debería usar Mumble.</b><br />La carátula es un archivo de estilo aplicado sobre el estilo de control básico. - - - Use Horizontal Splitter - Usar divisor horizontal - - - Use horizontal or vertical splitter for the main window - Usar un divisor horizontal o vertical para la ventana principal - - - <b>This sets whether the split in the main window is horizontal or vertical.</b> - <b>Establece si la división en la ventana principal es horizontal o vertical.</b> - - - - User Interface - Interfaz de usuario - - - - ... - ... - - - - Choose skin file - Elija el archivo de carátula - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Establece qué idioma debería usar mumble.</b><br />Tendrá que reiniciar Mumble para usar el nuevo idioma. - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>Si se marca, los jugadores se mostrarán encima de los subcanales en la vista del canal.</b><br />Se requiere reiniciar Mumble para ver el cambio. - - - Expand All Channels - Expandir todos los canales - - - Expand all channels when connecting - Expandir todos los canales al conectar - - - <b>If set, all channels will be expanded by default when you connect to a server.</b> - <b>Si se marca, por defecto se expandirán todos los canales al conectarse a un servidor.</b> - - - - Players above Channels - Jugadores encima de los canales - - - - List players above subchannels (requires restart). - Listar los jugadores encima de los subcanales (requiere reiniciar). - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>Establece qué carátula debería usar Mumble.</b><br />La carátula es un archivo de estilo aplicado sobre el estilo de control básico. Si hay iconos en el mismo directorio que la hoja de estilo, éstos reemplazarán los iconos por defecto. - - - - Form - Formulario - - - New version check - Comprobación de nueva versión - - - Check for updates on startup - Busca actualizaciones al inicio - - - - None - Ninguno - - - - Only with players - Sólo con jugadores - - - - All - Todos - - - - Expand - Expandir - - - - When to automatically expand channels - Cuándo expandir automáticamente los canales - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - Establece qué canales expandir automáticamente. <i>Ninguno</i> no expandirá ningún canal, <i>Todos</i> expandirá todos los canales y <i>Sólo con jugadores</i> expandirá y contraerá los canales según se unan o los abandonen los jugadores. - - - - Ask - Preguntar - - - - Do Nothing - No hacer nada - - - - Move - Mover - - - - Channel Dragging - Arrastre de canales - - - - This changes the behaviour when moving channels. - Cambia el comportamiento al mover canales. - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - Establece la conducta del arrastre de canales, puede ser usada para prevenir arrastres accidentales. <i>Mover canal</i> mueve el canal sin avisar. <i>No hacer nada</i> no hace nada y muestra un mensaje de error. <i>Preguntar</i> usa un cuadro de mensajes para confirmar si usted realmente deseaba mover el canal. - - - - Ask whether to close or minimize when quitting Mumble. - Preguntar si cerrar o minimizar al salir de Mumble. - - - - <b>If set, will verify you want to quit if connected.<b> - <b>Si se marca, le pedirá confirmar que desea salir si está conectado.<b> - - - - Ask on quit while connected - Preguntar al salir mientras esté conectado - - - - Make the Mumble window appear on top of other windows. - Hacer que la ventana de Mumble aparezca siempre por encima de las otras ventanas. - - - - <b>This makes the Mumble window a topmost window.</b> - <b>Hace que la ventana de Mumble se mantenga sobre las demás.</b> - - - - Always On Top - Siempre visible - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>Si se marca, minimizar la ventana principal de Mumble hará que se oculte y sólo sea accesible desde el área de notificación. De lo contrario, será minimizada como lo haría normalmente una ventana.</b> - - - - Hide in tray when minimized - Ocultar en el área de notificación al minimizar - - - Show all configuration items - Muestra todos las opciones de configuración - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Muestra todos las opciones de configuración.</b><br />Mumble contiene muchas opciones de configuración que la mayoría de usuarios no necesitarán cambiar. Marcar ésto mostrará todas las opciones configurables. - - - Expert Config - Configuración experta - - - - Hide the main Mumble window in the tray when it is minimized. - Oculta la ventana principal de Mumble en el área de notificación cuando está minimizada. - - - - MainWindow - - - Welcome to Mumble. - Bienvenido a Mumble. - - - - - Root - Root - - - - &Connect - &Conectar - - - - Open the server connection dialog - Abre el cuadro de diálogo de conexión con el servidor - - - - Shows a dialog of registered servers, and also allows quick connect. - Muestra un cuadro de diálogo de servidores registrados, y también permite conectarse rápidamente. - - - - &Disconnect - &Desconectar - - - - Disconnect from server - Desconectarse del servidor - - - - Disconnects you from the server. - Le desconecta del servidor. - - - - &Ban lists - &Prohibiciones - - - - Edit ban lists on server - Edita la lista de prohibiciones en el servidor - - - - This lets you edit the server-side IP ban lists. - Le permite editar la lista de IPs prohibidas en el lado del servidor. - - - - &Kick - &Expulsar - - - - Kick player (with reason) - Expulsar jugador (con motivo) - - - - Kick selected player off server. You'll be asked to specify a reason. - Expulsa del servidor al jugador seleccionado. Se le pedirá que especifique un motivo. - - - - &Ban - &Prohibir - - - - Kick and ban player (with reason) - Expulsar y prohibir jugador (con motivo) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Expulsa y prohibe en el servidor al jugador seleccionado. Se le pedirá que especifique un motivo. - - - - &Mute - En&mudecer - - - - Mute player - Enmudece al jugador - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Enmudece o da voz a un jugador en el servidor. Dar voz a un jugador ensordecido también le dará escucha. - - - - &Deafen - En&sordecer - - - - Deafen player - Ensordece al jugador - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Ensordece o da escucha a un jugador en el servidor. Ensordecer a un jugador también lo enmudecerá. - - - - &Local Mute - Enmudecer &localmente - - - Mute or unmute player locally. - Enmudece o da voz localmente a un jugador. - - - - &Add - &Agregar - - - - Add new channel - Agrega un nuevo canal - - - - This adds a new sub-channel to the currently selected channel. - Agrega un nuevo subcanal al canal actualmente seleccionado. - - - - &Remove - &Eliminar - - - - Remove channel - Elimina un canal - - - - This removes a channel and all sub-channels. - Elimina un canal y todos sus subcanales. - - - - &Edit ACL - &Editar LCA - - - - Edit Groups and ACL for channel - Edita los Grupos y la LCA para el canal - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Abre el cuadro de diálogo Grupo y LCA para el canal, para controlar los permisos. - - - - &Rename - &Renombrar - - - - &Change Description - &Cambiar descripción - - - - Changes the channel description - Cambia la descripción del canal - - - - This changes the description of a channel. - Ésto cambia la descripción de un canal. - - - - &Link - &Vincular - - - - Link your channel to another channel - Vincula su canal a otro canal - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Vincula su canal actual al canal seleccionado. Si tienen permiso para hablar en el otro canal, los jugadores pueden oirse entre sí. Éste es un vínculo permanente, y durará hasta que se desvincule manualmente o se reinicie el servidor. Por favor vea los métodos abreviados para presionar-para-vincular. - - - &Unlink - &Desvincular - - - - Unlink your channel from another channel - Desvincula su canal de otro canal - - - - This unlinks your current channel from the selected channel. - Desvincula su canal actual del canal seleccionado. - - - - Unlink &All - Desvincular &todo - - - - Unlinks your channel from all linked channels. - Desvincula su canal de todos los canales vinculados. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Desvincula su canal actual (no el seleccionado) de todos los canales vinculados. - - - - &Reset - &Reiniciar - - - - Reset audio preprocessor - Reinicia el preprocesador de audio - - - - &Mute Self - En&mudecerse - - - - Mute yourself - Se enmudece a sí mismo - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Se enmudece o se da voz a sí mismo. Cuando enmudezca, no enviará ningún dato al servidor. Darse voz mientras está ensordecido también le dará escucha. - - - - &Deafen Self - En&sordecerse - - - - Deafen yourself - Se ensordece a sí mismo - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Se ensordece o se da escucha a sí mismo. Cuando ensordezca, no oirá nada. Darse escucha a sí mismo también le dará voz. - - - - &Text-To-Speech - &Texto-A-Voz - - - - Toggle Text-To-Speech - Conmuta Texto-A-Voz - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Activa o desactiva el motor de texto-a-voz (TTS). Realmente sólo se dirán los mensajes habilitados para TTS en el cuadro de diálogo Configuración. - - - - S&tatistics - &Estadísticas - - - - Display audio statistics - Muestra estadísticas de audio - - - - Pops up a small dialog with information about your current audio input. - Muestra un pequeño cuadro de diálogo con información acerca de la entrada de audio. - - - - Forcibly unlink plugin - Desvincular complemento forzosamente - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Fuerza al complemento actual a desvincularse, lo que es útil si está leyendo datos completamente erróneos. - - - - &Settings - &Opciones - - - - Configure Mumble - Configura Mumble - - - - Allows you to change most settings for Mumble. - Le permite cambiar la mayoría de opciones de Mumble. - - - - &What's This? - ¿&Qué es esto? - - - - Enter What's This? mode - Entra en el modo "¿Qué es esto?" - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Haga click en esto para entrar en el modo "¿Qué es esto?". Su cursor se transformará en una interrogación. Haga click en cualquier botón, opción de menú o área para mostrar una descripción de lo que es. - - - - &About - &Acerca de - - - - Information about Mumble - Información acerca de Mumble - - - - Shows a small dialog with information and license for Mumble. - Muestra un pequeño cuadro de diálogo con información y la licencia de Mumble. - - - - About &Speex - Acerca de &Speex - - - - Information about Speex - Información acerca de Speex - - - - Shows a small dialog with information about Speex. - Muestra un pequeño cuadro de diálogo con información acerca de Speex. - - - - Information about Qt - Información acerca de Qt - - - - Shows a small dialog with information about Qt. - Muestra un pequeño cuadro de diálogo con información acerca de Qt. - - - - Check for &Updates - Comprobar &actualizaciones - - - - Check for new version of Mumble - Comprueba si existe una nueva versión de Mumble - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Se conecta a la página web de Mumble para comprobar si está disponible una nueva versión, y le notifica con una URL de descarga apropiada si éste es el caso. - - - - Mumble -- %1 - Mumble -- %1 - - - Log of messages - Registro de mensajes - - - - &Server - &Servidor - - - - &Player - &Jugador - - - - &Channel - &Canal - - - - &Audio - &Audio - - - - C&onfigure - C&onfigurar - - - - &Help - &Ayuda - - - - Kicking player %1 - Expulsando al jugador %1 - - - - - Enter reason - Introduzca el motivo - - - - Banning player %1 - Prohibiendo al jugador %1 - - - - Mumble - Mumble - - - - - Channel Name - Nombre del canal - - - Are you sure you want to delete %1 and all it's subchannels? - ¿Está seguro de que desa borrar %1 y todos sus subcanales? - - - - Unmuted and undeafened. - Con voz y escucha. - - - - Unmuted. - Con voz. - - - - Muted. - Mudo. - - - - Muted and deafened. - Mudo y sordo. - - - - Deafened. - Sordo. - - - - Undeafened. - Con escucha. - - - - About Qt - Acerca de Qt - - - - Joining %1. - Uniéndose a %1. - - - Connected to server. - Conectado al servidor. - - - - Server connection failed: %1. - Falló la conexión con el servidor: %1. - - - - Disconnected from server. - Desconectado del servidor. - - - - Reconnecting. - Volviendo a conectar. - - - - Joined server: %1. - Se ha unido al servidor: %1. - - - - Left server: %1. - Abandonó el servidor: %1. - - - - %1 is now muted and deafened. - %1 está ahora mudo y sordo. - - - - %1 is now muted. - %1 está ahora mudo. - - - - %1 is now unmuted. - %1 ahora tiene voz. - - - - - server - servidor - - - - You were muted by %1. - Fue enmudecido por %1. - - - - You were unmuted by %1. - %1 le dio voz. - - - - %1 muted by %2. - %1 enmudecido por %2. - - - - %1 unmuted by %2. - %2 dio voz a %1. - - - - You were deafened by %1. - Fue ensordecido por %1. - - - - You were undeafened by %1. - %1 le dio escucha. - - - - %1 undeafened by %2. - %2 dio escucha a %1. - - - - You were kicked from the server by %1: %2. - Fue expulsado del servidor por %1: %2. - - - - %3 was kicked from the server by %1: %2. - %3 fue expulsado del servidor por %1: %2. - - - - You were kicked and banned from the server by %1: %2. - Fue expulsado y prohibido del servidor por %1: %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 fue expulsado y prohibido del servidor por %1: %2. - - - - You were moved to %1 by %2. - Fue movido a %1 por %2. - - - - %1 left channel. - %1 abandonó el canal. - - - - %1 moved out by %2 to %3. - %1 fue llevado por %2 a %3. - - - - %1 moved in by %2 from %3. - %1 fue traído por %2 desde %3. - - - %1 moved out by %2 - %2 mudó a %1. - - - - %1 entered channel. - %1 ingresó en el canal. - - - %1 moved in by %2. - %2 trajo a %1. - - - - Server connection rejected: %1. - Conexión con el servidor rechazada: %1. - - - - Denied: %1. - Denegado: %1. - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Reinicia el preprocesador de audio, incluyendo cancelación de ruido, ganancia automática y detección de actividad vocal. Si algo de pronto empeora el entorno de audio (como dejar caer el micrófono) y fue temporal, use esto para evitar tener que esperar a que se reajuste el preprocesador. - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Muestra toda la actividad reciente. Aquí se muestran conexiones a servidores, errores y mensajes informativos.<br />Para configurar exactamente qué mensajes se muestran aquí, use la orden <b>Opciones</b> del menú. - - - - %1 deafened by %2. - %1 ensordecido por %2. - - - - Push-to-Talk - Global Shortcut - Presionar-para-Hablar (PTT) - - - - Reset Audio Processor - Global Shortcut - Reiniciar el preprocesador de audio - - - - Toggle Mute Self - Global Shortcut - Conmutar enmudecerse - - - - Toggle Deafen Self - Global Shortcut - Conmutar ensordecerse - - - - Unlink Plugin - Global Shortcut - Desvincular complemento - - - - Force Center Position - Global Shortcut - Forzar posición central - - - - Chan Parent - Global Shortcut - Canal padre - - - - Chan Sub#%1 - Global Shortcut - Subcanal nº %1 - - - - Chan All Subs - Global Shortcut - Todos los subcanales - - - - Push-to-Mute - Global Shortcut - Presionar-para-Enmudecer - - - - Join Channel - Global Shortcut - Unirse al canal - - - - Toggle Overlay - Global Shortcut - Conmutar sobreimpresión - - - - Alt Push-to-Talk - Global Shortcut - Presionar-para-Hablar Alt - - - &About Qt - &Acerca de Qt - - - %1 moved out by %2. - %2 mudó a %1. - - - - Are you sure you want to delete %1 and all its sub-channels? - ¿Está seguro de que desa borrar %1 y todos sus subcanales? - - - - &Quit Mumble - &Salir de Mumble - - - - Closes the program - Cierra el programa - - - - Exits the application. - Sale de la aplicación. - - - Ctrl+Q - Quit - Ctrl+S - - - - Send Messa&ge - &Enviar mensaje - - - - Send a Text Message - Enviar un mensaje de texto - - - - Sending message to %1 - Enviando mensaje a %1 - - - Enter message - Introduzca el mensaje - - - - - To %1: %2 - A %1: %2 - - - - - Message to %1 - Mensaje para %1 - - - - Invalid username - Nombre de usuario no válido - - - - You connected with an invalid username, please try another one. - Se ha conectado con un nombre de usuario no válido, por favor, intente con otro. - - - - That username is already in use, please try another username. - Ese nombre de usuario ya esta en uso, por favor, intente con otro nombre de usuario. - - - - Wrong password - Contraseña incorrecta - - - - Wrong password for registered users, please try again. - Contraseña para los usuarios registrados incorrecta, por favor, inténtelo otra vez. - - - - Wrong server password for unregistered user account, please try again. - Contraseña del servidor incorrecta para cuenta de usuario no registrada, por favor, inténtelo de nuevo. - - - - From %1: %2 - De %1: %2 - - - - Message from %1 - Mensaje de %1 - - - - &Audio Wizard - &Asistente de audio - - - - Sends a text message to another user. - Envía un mensaje de texto a otro usuario. - - - - Start the audio configuration wizard - Inicia el asistente de configuración de audio - - - - This will guide you through the process of configuring your audio hardware. - Le guiará a través del proceso de configuración de su hardware de audio. - - - - SSL Verification failed: %1 - Falló la verificación SSL: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>ADVERTENCIA:</b> El servidor presentó un certificado que es diferente del almacenado. - - - - Sever presented a certificate which failed verification. - El servidor presento un certificado que no superó la verificación. - - - <li><b>Common Name:</b> %1</li> - <li><b>Nombre común:</b> %1</li> - - - <li><b>Organization:</b> %1</li> - <li><b>Organización:</b> %1</li> - - - <li><b>Subunit:</b> %1</li> - <li><b>Subunidad:</b> %1</li> - - - <li><b>Country:</b> %1</li> - <li><b>País:</b> %1</li> - - - <li><b>Locality:</b> %1</li> - <li><b>Localidad:</b> %1</li> - - - <li><b>State:</b> %1</li> - <li><b>Estado:</b> %1</li> - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br />Los errores especificos con este certificado son: </p><ol>%2</ol><p>¿Desea aceptar este certificado de todos modos?<br />(También se almacenará para que no se le pregunte ésto de nuevo.)</p> - - - - &Information - &Información - - - - Show information about the server connection - Muestra información acerca de la conexión con el servidor - - - - This will show extended information about the connection to the server. - Muestra información extendida acerca de la conexión con el servidor. - - - - Opening URL %1 - Abriendo URL %1 - - - - URL scheme is not 'mumble' - El esquema del URL no es 'mumble' - - - - Connecting to %1 - Conectando a %1 - - - - Enter username - Introduzca el nombre de usuario - - - - Mumble Server Information - Información del servidor Mumble - - - Control channel: %1 ms latency, Encrypted with %3 bit %4<br />Voice channel: %2 ms latency, Unencrypted - Canal de control: latencia %1 ms, Cifrado con %3 bit %4<br />Canal de voz: latencia %2 ms, Sin cifrar - - - - - &View Certificate - &Ver certificado - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>Canal de control</h2><p>Cifrado con %2 de %1 bits<br />%3 ms de latencia media (%4 de varianza)</p> - - - - Push and hold this button to send voice. - Global Shortcut - Mantenga pulsado este botón para enviar la voz. - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - Ésto configura el botón presionar-para-hablar que, mientra mantenga pulsado, hará que se transmita la voz. - - - - Toggle self-mute status. - Global Shortcut - Conmutar el estado de enmudecimiento. - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - Esto conmutará su estado de enmudecimiento. Si se desactiva, también se desactivará el ensordecimiento. - - - - Toggle self-deafen status. - Global Shortcut - Conmutar el estado de ensordecimiento. - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - Esto conmutará su estado de ensordecimiento. Si se activa, también se activará el enmudecimiento. - - - - Toggle state of in-game overlay. - Global Shortcut - Conmutar el estado de la sobreimpresión en el juego. - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - Esto conmutará el estado de la sobreimpresión durante el juego entre mostrar a todos, sólo mostrar los jugadores que están hablando, y no mostrar a nadie. - - - - Voice channel is sent over control channel. - El canal de voz se envía a través del canal de control. - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>Canal de voz</h2><p>Cifrado con OCB-AES128 de 128 bits<br />%1 ms de latencia media (%4 de varianza)</p> - - - - UDP Statistics - Estadísticas de UDP - - - - To Server - Hacia el servidor - - - - From Server - Desde el servidor - - - - Good - Correctos - - - - Late - Tardíos - - - - Lost - Perdidos - - - - Resync - Resincronizaciones - - - - Change description of channel %1 - Cambiar descripción del canal %1 - - - - Sending message to channel %1 - Enviando mensaje al canal %1 - - - - Sending message to channel tree %1 - Enviando mensaje al árbol de canales %1 - - - - To tree %1: %2 - Al árbol %1: %2 - - - - Message to tree %1 - Mensaje para el árbol %1 - - - You are now in local deafen mode. This mode is not reflected on the server, and you will still be transmitting voice to the server. This mode should only be used if there are several people in the same room and one of them have Mumble on loudspeakers. - Ahora está en el modo de ensordecimiento local. Este modo no se refleja en el servidor, y aun seguirá transmitiendo su voz al servidor. Este modo sólo debe ser usado si hay varias personas en la misma habitación y una de ellas usa Mumble con altavoces. - - - - Ctrl+Q - Ctrl+S - - - - Mute player locally - Enmudecer al jugador localmente - - - - Mute or unmute player locally. Use this on other players in the same room. - Enmudece o da voz a un jugador localmente. Use ésto sobre jugadores en la misma habitación. - - - &Rename Channel - &Renombrar canal - - - - Renames the channel - Renombra el canal - - - - This renames a channel. - Renombra un canal. - - - &Local deafen - Ensordecer &localmente - - - Silence loudspeakers - Silenciar altavoces - - - Sets you in local deafen mode, wherein your speakers are silenced but you are still transmitting audio. - Le pone en el modo de ensordecimiento local, donde sus altavoces son silenciados pero aun sigue transmitiendo audio. - - - - About &Qt - Acerca de &Qt - - - - Sends a text message to all users in a channel. - Envía un mensaje de texto a todos los usuario de un canal. - - - - Send &Tree Message - Enviar mensaje al á&rbol - - - - Send message to channel tree. - Enviar mensaje al árbol de canales. - - - - This sends a text message to a channel and it's subchannels. - Envía un mensaje de texto a un canal y todos sus subcanales. - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - El ancho de banda máximo del servidor es sólo de %1 kbit/s. Se ha ajustado automáticamente la calidad. - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - Ésta es la primera vez que inicia Mumble.<br />¿Le gustaría ejecutar el Asistente de audio para configurar su tarjeta de sonido? - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>Ancho de banda del audio</h2><p>Máximo %1 kbit/s<br />Actual %2 kbit/s (Calidad %3)</p> - - - - Connected to server %1. - Conectado al servidor %1. - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - Mumble está conectado a un servidor actualmente. ¿Desea cerrarlo o minimizarlo? - - - - Close - Cerrar - - - - - Minimize - Minimizar - - - - &Window - &Ventana - - - - Ctrl+M - Ctrl+M - - - Ctrl+W - Ctrl+W - - - - Toggle Minimal - Global Shortcut - Conmutar mínimo - - - - &Minimal View - Vista &mínima - - - - Toggle minimal window modes - Conmutar los modos de ventana mínima - - - - This will toggle minimal mode, where the log window and menu is hidden. - Esto conmutará el modo mínimo, en el que la ventana del registro de mensajes y el menú están ocultos. - - - - Volume Up (+10%) - Global Shortcut - Aumentar el volúmen (+10%) - - - - Volume Down (-10%) - Global Shortcut - Disminuir el volúmen (-10%) - - - - Clear - Borrar - - - - Log - Registro - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - Ha establecido el arrastre de canales a "No hacer nada" así que el canal no se movió. - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - Modo de arrastre de canales desconocido en PlayerModel::dropMimeData. - - - - &Unlink - Channel - &Desvincular - - - - &Unlink - Plugin - &Desvincular - - - - Server - message from - Servidor - - - &Quit - &Salir - - - - Hide Frame - Ocultar marco - - - - Toggle showing frame on minimal window - Conmuta entre mostrar o no el marco de la ventana mínima - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - Esto determina si la ventana mínima tiene un marco para ser movida o cambiada de tamaño. - - - - NetworkConfig - - - Network - Red - - - - Form - Formulario - - - - Connection - Conexión - - - - Use TCP compatibility mode - Usar modo de compatibilidad TCP - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Habilita el modo de Compatibilidad TCP</b>.<br />Esto hará que Mumble sólo use TCP cuando se comunique con el servidor. Esto aumentará la sobrecarga y provocará que los paquetes perdidos produzcan notables pausas en la comunicación, así que sólo debería ser usado si no consigue usar la opción por defecto (que emplea UDP para la voz y TCP para el control). - - - - Use TCP mode - Usar modo TCP - - - - Reconnect when disconnected - Volver a conectar cuando sea desconectado - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Volver a conectar cuando sea desconectado</b>.<br />Hace que Mumble intente volver a conectar automáticamente después de 10 segundos si falla su conexión con el servidor. - - - - Reconnect automatically - Reconectar automáticamente - - - - Proxy - Proxy - - - - Type - Tipo - - - - Type of proxy to connect through - Tipo de proxy a través del que conectar - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Tipo de proxy a través del que conectar</b><br />Ésto hace que Mumble se conecte a través de un proxy para todas las conexiones salientes. Nota: El uso de túneles proxy fuerza a Mumble al modo de compatibilidad TCP, causando que todos los datos de voz se envíen a través del canal de control. - - - - Direct connection - Conexión directa - - - - HTTP(S) proxy - Proxy HTTP(S) - - - - SOCKS5 proxy - Proxy SOCKS5 - - - - Hostname - Nombre del servidor - - - - Hostname of the proxy - Nombre del servidor proxy - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>Nombre del servidor proxy.<b><br />Este campo especifica el nombre del servidor proxy a través del que desea construir un túnel para el tráfico de red. - - - - Port - Puerto - - - - Port number of the proxy - Número de puerto del proxy - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>Número de puerto del proxy.</b><br />Este campo especifica el número de puerto al que el proxy espera las conexiones. - - - - Username - Nombre de usuario - - - - Username for proxy authentication - Nombre de usuario para la autenticación con el proxy - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Nombre de usuario para la autenticación con el proxy.</b><br />Ésto especifica el nombre de usuario que utilizará para autentificarse con el proxy. En caso de que el proxy no use autenticación, o que desee conectarse anónimamente, sencillamente deje este campo en blanco. - - - - Password - Contraseña - - - - Password for proxy authentication - Contraseña para la autenticación con el proxy - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Contraseña para la autenticación con el proxy.</b><br />Ésto especifica la contraseña que usará para autenticarse con el proxy. En caso de que el proxy no use autenticación, o que desee conectarse anónimamente, sencillamente deje este campo en blanco. - - - - Mumble services - Servicios de Mumble - - - - Check for updates on startup - Buscar actualizaciones al iniciar - - - - Submit anonymous statistics to the Mumble project - Envia estadísticas anónimas al proyecto Mumble - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>Envíar estadísticas anónimas.</b><br />Mumble tiene un equipo de desarrollo pequeño, y como tal necesita centrar su desarrollo donde mas se necesita. Con el envío de algunas estadísticas está contribuyendo a determinar dónde centar el desarrollo. - - - - Submit anonymous statistics - Enviar estadísticas anónimas - - - - OSSConfig - - OSS - OSS - - - %1ms - %1ms - - - Form - Formulario - - - Device selection - Selección del dispositivo - - - Input - Entrada - - - Device to use for microphone - Dispositivo a usar para el micrófono - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Establece qué dispositivo debería usar mumble. El dispositivo <i>default</i> es aquel que haya seleccionado en alsaconfig, los dispositivos <i>hwplug</i> son dispositivos hardware específicos respaldados por el mezclador ALSA y los dispotivos <i>hw</i> son dispositivos de acceso directo al hardware. A menos que su tarjeta de sonido soporte la mezcla de audio por hardware, el uso de un dispositivo <i>hw</i> excluirá al resto de programas del uso del audio. - - - Output - Salida - - - Device to use for speakers/headphones - Dispositivo a usar para los altavoces/auriculares - - - Output Options - Opciones de salida - - - Output Delay - Retraso de salida - - - Amount of data to buffer for OSS - Cantidad de datos a almacenar en el búfer para OSS - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer de salida. Experimente con diferentes valores y fíjelo al más bajo que no cause fluctuaciones rápidas en el sonido. - - - TextLabel - EtiquetaDeTexto - - - This set which device mumble should use. The <i>default</i> device is your primary sound device. - Establece qué dispositivo deberia usar Mumble. El dispositivo <i>por defecto</i> es su dispositivo de sonido principal. - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the August 2006 updated version of DX9.0c - No se pudo cargar la biblioteca de sobreimpresión. Esto quiere decir que: -- la biblioteca (mumble_ol.dll) no fue encontrada en el directorio desde el que ejecutó Mumble -- está usando un SO anterior a WinXP SP2 -- no tiene la versión actualizada en agosto de 2006 de DX9.0c - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the August 2006 updated version of DX9.0c - No se pudo cargar la biblioteca de sobreimpresión. Esto quiere decir que: -- la biblioteca (mumble_ol.dll) no fue encontrada en el directorio desde el que ejecutó Mumble -- está usando un SO anterior a WinXP SP2 -- no tiene la versión actualizada en agosto de 2006 de DX9.0c - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - No se pudo cargar la biblioteca de sobreimpresión. Esto quiere decir que ha ocurrido alguna de las siguientes circunstancias:- la biblioteca (mumble_ol.dll) no fue encontrada en el directorio desde el que ejecutó Mumble- está usando un SO anterior a WinXP SP2- no tiene la versión de DX9.0c actualizada en junio de 2007 - - - - OverlayConfig - - Options - Opciones - - - Position - Posición - - - Font - Fuente - - - Enable Overlay - Habilitar Sobreimpresión - - - Enable overlay. - Habilita la sobreimpresión. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - Establece si la sobreimpresión está habilitada o no. Esta opción se comprueba sólo cuando se inician aplicaciones D3D9, así que asegúrese de que Mumble está ejecutándose y esta opción está activada antes de que inicie la aplicación.<br />Por favor, fíjese en que si inicia la aplicación después de iniciar Mumble, o si desactiva la sobreimpresión mientras se está ejecutando, no existe ninguna forma segura de reiniciar la sobreimpresión sin reiniciar también la aplicación. - - - No one - Nadie - - - Only talking - Sólo hablando - - - Everyone - Todos - - - Show - Mostrar - - - Who to show on the overlay - Quién mostrar en la sobreimpresión - - - <b>This sets who to show in the ingame overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>Establece a quién mostrar en la sobreimpresión durante el juego.</b><br />Si muchas personas están conectadas al mismo canal, la lista sobreimpresionada podría ser muy larga. Use ésto para acortarla.<br /><i>Nadie</i> - No mostrar a nadie (pero dejar funcionando la sobreimpresión).<br /><i>Sólo hablando</i> - Sólo mostrar las personas que hablan.<br /><i>Todos</i> - Mostrar todos. - - - Always Show Self - Siempre mostrarse a sí mismo - - - Always show yourself on overlay. - Siempre le muestra en la sobreimpresión. - - - Grow Left - Crecer hacia la izquierda - - - Let overlay grow to the left - Permitir a la sobreimpresión crecer hacia la izquierda - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la izquierda si es necesario. - - - Grow Right - Crecer hacia la derecha - - - Let overlay grow to the Right - Hacer crecer la sobreimpresión hacia la derecha - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the Right if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la derecha si es necesario. - - - Grow Up - Crecer hacia arriba - - - Let overlay grow upwards - Permitir a la sobreimpresión crecer hacia arriba - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the top if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la arriba si es necesario. - - - Grow Down - Crecer hacia abajo - - - Let overlay grow downwards - Permitir a la sobreimpresión crecer hacia abajo - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow towards the bottom if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la abajo si es necesario. - - - X-Position of Overlay - Posición-X de la sobreimpresión - - - This sets the relative X position of the overlay. - Establece la posición X relativa de la sobreimpresión. - - - Y-Position of Overlay - Posición-Y de la sobreimpresión - - - This sets the relative Y position of the overlay. - Establece la posición Y relativa de la sobreimpresión. - - - Current Font - Fuente actual - - - Set Font - Establece la fuente - - - Maximum width of names. - Anchura máxima de los nombres. - - - This sets the maximum width of names shows, relative to the height. If you set this to 100%, no line of text will be wider than it is high. At 500%, no line will be more than 5 times wider than it's height, and so on. - Establece la anchura máxima de los nombres mostrados, relativa a la altura. Si fija ésto a 100%, ninguna línea de texto será más ancha que su altura. A 500%, ninguna línea será 5 veces más ancha que su altura, y así sucesivamente. - - - Maximum width - Anchura máxima - - - Change - Cambiar - - - Color for players - Color de los jugadores - - - Color for talking players - Color de los jugadores que hablan - - - Color for alt-talking players - Color de los jugadores que hablan-alt - - - Color for Channels - Color de los canales - - - Color for active Channels - Color de los canales activos - - - Overlay - Sobreimpresión - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Establece si mostrarse siempre a sí mismo o no. Esta opción es útil si no está mostrando a todos en la sobreimpresión, ya que entonces sólo vería su propio estado si usted está hablando, lo que no le permitiría ver si fue ensordecido o enmudecido. - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>Establece a quién mostrar en la sobreimpresión durante el juego.</b><br />Si muchas personas están conectadas al mismo canal, la lista sobreimpresionada podría ser muy larga. Use esto para acortarla.<br /><i>Nadie</i> - No mostrar a nadie (pero dejar funcionando la sobreimpresión).<br /><i>Sólo hablando</i> - Sólo mostrar las personas que hablan.<br /><i>Todos</i> - Mostrar todos. - - - This sets the maximum width of names shown, relative to the height. If you set this to 100%, no line of text will be wider than it is high. At 500%, no line will be more than 5 times wider than its height, and so on. - Establece la anchura máxima de los nombres mostrados, relativa a la altura. Si fija esto a 100%, ninguna línea de texto será más ancha que su altura. A 500%, ninguna línea será 5 veces más ancha que su altura, y así sucesivamente. - - - Show User Textures - Mostrar texturas de los usuarios - - - Show User custom textures instead of text on the overlay. - Muestra texturas personalizadas por el usuario en vez de texto en la sobreimpresión. - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - Establece si se descargarán y usarán texturas personalizadas para los usuarios registrados. Si se desactiva, se usará en su lugar el texto resumido habitual. - - - Maximum height of names. - Altura maxima de los nombres. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - Establece la altura máxima de los nombres mostrados, en relación a la altura de la pantalla. Si su ventana 3D activa tiene 800 píxeles de alto y se fija esto a 5%, entonces cada nombre tendrá 40 píxeles de alto. Fíjese en que los nombres no serán más altos de 60 píxeles sin importar lo que se establezca aquí. - - - Maximum height - Altura máxima - - - Show no one - No mostrar a nadie - - - Show only talking - Mostrar sólo a los que hablan - - - Show everyone - Mostrar a todos - - - Form - Formulario - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la arriba si es necesario. - - - Let overlay grow to the right - Permitir a la sobreimpresión crecer hacia la derecha - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la derecha si es necesario. - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - La sobreimpresión trata de permanecer lo más pequeña posible y en la posición que ha seleccionado. Esto permite que la sobreimpresión crezca hacia la arriba si es necesario. - - - TextLabel - EtiquetaDeTexto - - - - PAAudioConfig - - PortAudio - PortAudio - - - Input Device - Dispositivo de entrada - - - Output Device - Dispositivo de salida - - - - PlayerModel - - Name of player - Nombre del jugador - - - Name of channel - Nombre del canal - - - Player flags - Emblemas del jugador - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src=":/icons/talking_on.png" /> Talking<br /><img src=":/icons/talking_off.png" /> Not talking - Éste es un jugador conectado al servidor. El icono a la izquierda del jugador indica si está hablando o no:<br /><img src=":/icons/talking_on.png" /> Hablando<br /><img src=":/icons/talking_off.png" /> Sin hablar - - - - This is a channel on the server. Only players in the same channel can hear each other. - Esto es un canal del servidor. Sólo los jugadores en el mismo canal pueden oirse entre sí. - - - This shows the flags the player has on the server, if any:<br /><img src=":/icons/authenticated.png" />Authenticated user<br /><img src=":/icons/muted_self.png" />Muted (by self)<br /><img src=":/icons/muted_server.png" />Muted (by admin)<br /><img src=":/icons/deafened_self.png" />Deafened (by self)<br /><img src=":/icons/deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - Muestra los emblemas que el jugador tiene en el servidor, si los hubiera:<br /><img src=":/icons/authenticated.png" />Usuario autenticado<br /><img src=":/icons/muted_self.png" />Mudo (por sí mismo)<br /><img src=":/icons/muted_server.png" />Mudo (por un administrador)<br /><img src=":/icons/deafened_self.png" />Sordo (por sí mismo)<br /><img src=":/icons/deafened_server.png" />Sordo (por un administrador)<br />Un jugador enmudecido por sí mismo probablemente sólo está ausente, hablando por teléfono o algo similar.<br />Un jugador enmudecido por un administrador probablemente está también sólo ausente, y el ruido que estaba haciendo el jugador era lo bastante molesto para que un adminstrador lo haya enmudecido. - - - - Name - Nombre - - - - Flags - Emblemas - - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - Éste es un jugador conectado al servidor. El icono a la izquierda del jugador indica si está hablando o no:<br /><img src="skin:talking_on.png" /> Hablando<br /><img src="skin:talking_off.png" /> No está hablando - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - Muestra los emblemas que el jugador tiene en el servidor, si los hubiera:<br /><img src=":/authenticated.png" />Usuario autenticado<br /><img src=":/muted_self.png" />Mudo (por sí mismo)<br /><img src=":/muted_server.png" />Mudo (por un administrador)<br /><img src=":/deafened_self.png" />Sordo (por sí mismo)<br /><img src=":/deafened_server.png" />Sordo (por un administrador)<br />Un jugador enmudecido por sí mismo probablemente sólo está ausente, hablando por teléfono o algo similar.<br />Un jugador enmudecido por un administrador probablemente está también sólo ausente, y el ruido que estaba haciendo el jugador era lo bastante molesto para que un adminstrador lo haya enmudecido. - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - ¿Está seguro de que desea arrastrar este canal? - - - - PluginConfig - - - Options - Opciones - - - - - Plugins - Complementos - - - - Enable plugins and transmit positional information - Habilita los complementos y transmite información posicional - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - Habilita que los complementos para los juegos soportados extraigan su posición en el juego y transmitan eso con cada paquete de voz. Esto permite que otros jugadores oigan su voz en el juego desde la dirección en la que su personaje está en relación al suyo. - - - - Reloads all plugins - Recarga todos los complementos - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - Vuelve a buscar y a recargar los complementos. Use esto si acaba de agregar o cambiar un complemento en el directorio de complementos. - - - - Information about plugin - Información acerca del complemento - - - - This shows a small information message about the plugin. - Muestra un pequeño mensaje de información acerca del complemento. - - - - Show configuration page of plugin - Muestra la página de configuración del complemento - - - - This shows the configuration page of the plugin, if any. - Muestra la página de configuración del complemento, si la hay. - - - Mumble - Mumble - - - - Plugin has no configure function. - El complemento no tiene función de configuración. - - - - Link to Game and Transmit Position - Vincularse al juego y transmitir la posición - - - - &Reload plugins - &Recargar complementos - - - - &About - &Acerca de - - - - &Configure - &Configurar - - - - Plugin has no about function. - El complemento no tiene información "acerca de". - - - - Form - Formulario - - - - Plugins - - Plugin %1 lost link. - El plugin %1 perdió el vínculo. - - - - %1 lost link. - %1 perdió el vínculo. - - - Plugin %1 linked. - Plugin %1 vínculado. - - - - %1 linked. - %1 vinculado. - - - - PortAudioSystem - - - Default Device - Dispositivo por defecto - - - - PulseAudioConfig - - PulseAudio - PulseAudio - - - %1ms - %1ms - - - Form - Formulario - - - Device selection - Selección del dispositivo - - - Input (Microphone) - Entrada (micrófono) - - - Device to use for microphone - Dispositivo a usar para el micrófono - - - This set which source mumble should use for the microphone. The <i>default</i> device means to use the PulseAudio defaults. - Establece qué dispositivo deberia usar Mumble para el micrófono. El dispositivo <i>por defecto</i> quiere decir usar la opción por defecto de PulseAudio. - - - Output - Salida - - - Device to use for speakers/headphones - Dispositivo a usar para los altavoces/auriculares - - - Enable echo cancellation - Habilitar cancelación de eco - - - This enables echo cancellation. Don't enable this unless you are listening on speakers; for headphones it will cause audio degradation. - Habilita la cancelación de eco. No habilite ésto a menos que esté escuchando mediante de altavoces; causará degradación del audio con auriculares. - - - Use echo cancellation - Usar cancelación de eco - - - Output Options - Opciones de salida - - - Output Delay - Retraso de salida - - - Amount of data to buffer for ALSA - Cantidad de datos a almacenar en el búfer para ALSA - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Establece la cantidad de datos que prealmacenar en el búfer de salida. Experimente con diferentes valores y fíjelo al más bajo que no cause fluctuaciones rápidas en el sonido. - - - TextLabel - EtiquetaDeTexto - - - - PulseAudioSystem - - - Default Input - Entrada por defecto - - - - Default Output - Salida por defecto - - - - ShortcutActionWidget - - - Unassigned - Sin asignar - - - - ShortcutDelegate - - - Unassigned - Sin asignar - - - - ShortcutKeyWidget - - - Press Shortcut - Presione la tecla de método abreviado - - - - TextMessage - - - Message to send - Mensaje a enviar - - - - Preview - Previsualización - - - Send raw message - Enviar mensaje en bruto - - - Disables html formating - Deshabilita el formato html - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble - Mumble - - - Failed to retrieve version information from server. - No se pudo recuperar del servidor la información de la versión. - - - Mumble failed to retrieve version information from the SourceForge server. - Mumble no pudo recuperar la información de la versión del servidor SourceForge. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - Detalles de la cadena de certificados - - - - Certificate chain - Cadena de certificados - - - - Certificate details - Detalles del certificado - - - - %1 %2 - %1 %2 - - - - - Common Name: %1 - Nombre común: %1 - - - - - Organization: %1 - Organización: %1 - - - - Subunit: %1 - Subunidad: %1 - - - - - Country: %1 - País: %1 - - - - - Locality: %1 - Localidad: %1 - - - - - State: %1 - Estado: %1 - - - - Valid from: %1 - Válido desde: %1 - - - - Valid to: %1 - Válido hasta: %1 - - - - Serial: %1 - Número de serie: %1 - - - - Public Key: %1 bits %2 - Clave pública: %1 bits %2 - - - - RSA - RSA - - - - DSA - DSA - - - - Digest (MD5): %1 - Huella digital (MD5): %1 - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - Emitido por: - - - - Unit Name: %1 - Nombre de unidad: %1 - - - - WASAPIConfig - - WASAPI - WASAPI - - - Form - Formulario - - - Device selection - Selección del dispositivo - - - Input (Microphone) - Entrada (micrófono) - - - Device to use for microphone - Dispositivo a usar para el micrófono - - - This set which source mumble should use for the microphone. The <i>default</i> device means to use the PulseAudio defaults. - Establece qué dispositivo deberia usar Mumble para el micrófono. El dispositivo <i>por defecto</i> quiere decir usar la opción por defecto de PulseAudio. - - - Output - Salida - - - Device to use for speakers/headphones - Dispositivo a usar para los altavoces/auriculares - - - Enable echo cancellation - Habilitar cancelación de eco - - - This enables echo cancellation. Don't enable this unless you are listening on speakers; for headphones it will cause audio degradation. - Habilita la cancelación de eco. No habilite ésto a menos que esté escuchando mediante de altavoces; causará degradación del audio con auriculares. - - - Use echo cancellation - Usar cancelación de eco - - - - WASAPISystem - - - Default Device - Dispositivo por defecto - - - - XInputKeyWidget - - Press Shortcut - Presione la tecla de método abreviado - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_fr.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_fr.ts --- mumble-1.2.3/src/mumble11x/mumble_fr.ts 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_fr.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,6082 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - Editer la LCA pour %1 - - - - Active ACLs - LCAs actifs - - - - Context - Contexte - - - - User/Group - Utilisateur/Groupe - - - - Permissions - Permissions - - - - Group - Groupe - - - - Members - Membres - - - - &Add - &Ajouter - - - - &Remove - Supp&rimer - - - - &Up - Ha&ut - - - - &Down - &Bas - - - - Inherit ACLs - Hérite des LCAs - - - - Applies to this channel - Appliquer à ce salon - - - - Applies to sub-channels - Appliquer aux sous-salons - - - - User ID - ID Utilisateur - - - - Deny - Refuser - - - - Allow - Accepter - - - - Remove - Supprimer - - - - Inherit - Hérite - - - - Inheritable - Héritable - - - - Inherited - Hérité - - - - Add - Ajouter - - - - Add to Remove - Ajouter à la liste de suppression - - - - &Groups - &Groupes - - - - &ACL - &LCA - - - &OK - &Valider - - - Accept changes - Accepter les modifications - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Ce bouton va accepter les groupes/LCAs actuels et les envoyer au serveur. Il est à noter que si vous enlevez par erreur votre permission d'écriture, le serveur va l'ajouter. - - - &Cancel - A&nnuler - - - Reject changes - Annuler les modifications - - - This button will cancel all changes and closes the dialog without updating the ACLs or groups on the server. - Ce bouton va annuler toutes les modifications et fermer la fenêtre sans mettre à jour les LCAs ou groupes sur le serveur. - - - - List of entries - Liste des entrées - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics. - Montrer toutes les entrées actives sur ce salon. Les entrées héritées des salons parents seront montrées en italique. - - - - Inherit ACL of parent? - Hériter la LCA du parent ? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Défini si la LCA en haut de la chaîne des salons parents s'applique à cet objet ou non. Seules les entrées qui sont marquées dans les parents comme "Appliquer au sous-salons seront hérités. - - - - Add new entry - Ajouter une nouvelle entrée - - - - This adds a new entry, initially set with no permissions and applying to all. - Ajoute une nouvelle entrée, initialement définie avec aucune permission, et s'appliquant à tous. - - - - Remove entry - Supprimer une entrée - - - - This removes the currently selected entry. - Supprime l'entrée actuellement sélectionnée. - - - - Move entry up - Déplacer l'entrée vers le haut - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Déplace une entrée vers le haut dans la liste. Comme les entrées sont évaluées dans l'ordre, cela peut changer la permission effective des utilisateurs. Vous ne pouvez pas déplacer une entrée héritée, si vous le nécessitez vraiment, vous aurez à dupliquer l'entrée héritée. - - - - Move entry down - Déplacer une entrée vers le bas - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Déplace une entrée vers le bas dans la liste. Comme les entrées sont évaluées dans l'ordre, ceci peut changer les permissions effectives des utilisateurs. - - - - Entry should apply to this channel. - Entry should apply to this channel - Les entrées devraient s'appliquer à ce salon - - - - This makes the entry apply to this channel. - Applique l'entrée à ce salon. - - - - Entry should apply to sub-channels. - L'entrée devrait s'appliquer aux sous-salons. - - - - This makes the entry apply to sub-channels of this channel. - Applique l'entrée aux sous-salons de ce salon. - - - - Group this entry applies to - Le groupe sur lequel cette entrée s'applique - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - Contrôle à quel groupe d'utilisateurs cette entrée s'applique.<br />Il est à noter que les groupes sont évalués dans le contexte du salon dans lequel l'entrée est utilisée Par exemple, la LCA du salon racine par défaut donne la permission d'<i>écriture</i> au groupe <i>admin</i>. Cette entrée, si héritée par un salon, donnera à l'utilisateur le privilège d'écriture s'il appartient au groupe <i>admin</i> du salon, même s'il n'appartient pas au groupe <i>admin</i> dans le salon de la LCA originelle.<br />Si le nom d'un groupe commence avec !, son appartenance est négative, et s'il commence par un ~, il est évalué dans le salon dans lequel la LCA a été définie, plutôt que dans le salon dans lequel la LCA est active. L'ordre est important; <i>!~in</i> est valide, mais <i>~!in</i> ne l'est pas.<br />Quelques groupes prédéfinis sont :<br /><b>all</b> - Tout le monde est concerné.<br /><b>auth</b> - Tous les utilisateurs autenthifiés<br /><b>sub,a,b,c</b> - Utilisateurs actuellement dans un sous-salon avec au moins <i>a</i> parents commun, entre les salons <i>b</i> et <i>c</i>. Voire le site web pour une explication plus complète.<br /><b>in</b> - Utilisateurs dans le salon ( <i>sub,0,0,0</i> )<br /><b>out</b> - Utilisateurs en dehors du salon ( <i>!sub,0,0,0</i> ).<br />Il est à noter que ces entrées s'appliquent soit à un utilisateur ou à un groupe, mais pas aux deux. - - - - User this entry applies to - Utilisateur sur lequel cette entrée s'applique - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - Controle sur quel utilisateur cette entrée s'applique. Tappez simplement le nom de l'utilisateur et pressez entrée pour interroger le serveur. - - - - Allow %1 - Permettre %1 - - - - Deny %1 - Refuser %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Accorde le privilège %1. Si un privilège est à la fois accordé et refusé, il est refusé.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Retirer le privilège %1. Si le privilège est à la fois accordé et refusé, il est refusé.<br />%2 - - - - List of groups - Liste des groupes - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - Tous les groupes actuellements définis pour le salon. Pour créer un groupe, tappez simplement son nom et appuyez sur enter. - - - - Remove selected group - Supprime le groupe sélectionné - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Supprime le groupe actuellement sélectionné. Si le groupe était hérité, il ne va pas être supprimé de la liste, mais toutes les informations le concernant seront effacées. - - - - Inherit group members from parent - Hériter les groupes du parent - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Tous les membres du groupe héritent du parent, si le groupe est marqué comme <i>Héritable</i> dans le salon parant. - - - - Make group inheritable to sub-channels - Rendre le groupe héritable pour les sous-salons - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Rend ce groupe héritable pour les sous-salons. Si un groupe n'est pas héritable, ses sous-salons seront toujours libre de créer un nouveau groupe avec le même nom. - - - - Group was inherited from parent channel - Le groupe a hérité du salon parent - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - Indique que le groupe a hérité du salon parent. Vous ne pouvez pas éditer ce fanion, ce n'est qu'une information. - - - - Add member to group - Ajouter un membre au groupe - - - Type in the name of a player you wish to add to the group and press enter. - Tappez le nom du joueur que vous souhaitez ajouter au groupe et appuyez sur entrée. - - - - Remove member from group - Retire le membre du groupe - - - Type in the name of a player you wish to remove from the group and press enter. - Tappez le nom du joueur que vous souhaitez retirer du groupe et appuyez sur entrée. - - - - Dialog - Dialogue - - - - Type in the name of a player you wish to add to the group and click Add. - Ecrire le nom du joueur que vous souhaitez ajouter dans le groupe et clicker sur ajouter. - - - - Type in the name of a player you wish to remove from the group and click Add. - Ecrire le nom du joueur que vous souhaitez supprimer dans le groupe et clicker sur ajouter. - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - Cela montre toutes les entrées actives sur ce canal. Le nombre de salons hérités seront montré en italique. <br /> ACL sont évalués de haut en bas, ce qui signifie que la priorité augmente à mesure que vous déplacez vers le bas de la liste. - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - L'ouverture du périphérique d'entrée ALSA choisit a échoué : %1 - - - - Default ALSA Card - Carte alsa par défaut - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - L'ouverture du périphérique de sortie ALSA choisit a échoué : %1 - - - - Default ALSA Card - Carte alsa par défaut - - - - ALSAConfig - - Device selection - Configuration du périphérique - - - Device to use for microphone - Périphérique à utiliser pour le microphone - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Spécifie quel périphérique devrait être utilisé par mumble. Le périphérique <i>default</i> est ce que vous avez configuré dans alsaconfig, les périphériques <i>hwplug</i> sont les périphériques accessible par le mixer d'ALSA et les périphériques <i>hw</i> sont les adresses brut du matériel. À moins que votre carte son ne supporte le mixage matériel, en utilisant les périphériques <i>hw</i>, vous excluerez tout autre programme utilisant l'audio.. - - - Device to use for speakers/headphones - Périphérique à utiliser pour les haut-parleurs/casques - - - Input - Entrée - - - Output - Sortie - - - Output Options - Options de sortie - - - Output Delay - Délai de sortie - - - Amount of data to buffer for ALSA - Quantité de données du tampon pour ALSA - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Spécifie la quantité de données à mettre en cache dans le tampon de sortie. Essayez différentes valeurs et mettez la plus bassequi ne cause pas de rapides décalages du son. - - - ALSA - ALSA - - - %1ms - %1ms - - - Default ALSA Card - Carte alsa par défaut - - - - ASIOConfig - - - Device selection - Sélection du périphérique - - - - Capabilities - Capacités - - - - Channels - Cannaux - - - - Configure input channels - Configurer les cannaux d'entrée - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples "What you hear".<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be "Mic L" while Speaker should be "Mix L" and "Mix R" - Configure les canaux d'entrée ASIO. Vérifiez que vous avez choisi au moins un canal pour le microphone et les haut-parleur. <i>Microphone</i> devrait être l'emplacement de votre microphone et <i>Speaker</i> devrait être être le canal "What you hear".<br /> Par exemple, sur la carte Audigy 2 ZS, une bonne sélection pour le micro serait "Mic L" tandis que les Haut-Parleurs seraient "Mix L" et "Mix R" - - - - Device to use for microphone - Périphérique à utiliser pour le microphone - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - Choisis le périphérique à interroger. Vous devez toujours interroger le périphérique et sélectionner le salon à utiliser. - - - - Device - Périphérique - - - - &Query - &Interroger - - - - Query selected device - Interroger le périphérique sélectionné - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Interroge le périphérique sélectionné pour connaître ses cannaux. Soyez consients que beaucoup de pilotes ASIO sont buggés à l'extrême et les interroger peut crasher l'application ou le système. - - - - &Configure - &Configurer - - - - Configure selected device - Configurer le périphérique sélectionné - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Configure le périphérique sélectionné. Soyez consients que les pilotes ASIO sont buggés à l'extrême, et les utiliser pourrait causer le crash de l'application ou du système. - - - - Driver name - Nom du pilote - - - Buffersize - Taille du tampon - - - - Microphone - Microphone - - - - <- - <- - - - - -> - -> - - - - Unused - Non utilisé - - - - Speakers - Haut parleurs - - - %1 (ver %2) - %1 (ver %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 ms -> %2ms ( résolution de %3 ms ) %4Hz - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 ms -> %2ms ( résolution de %3 ms ) %4Hz -- Inutilisable - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - L'initialisation de ASIO a échoué: %1 - - - - - Failed to instantiate ASIO driver - Impossible d'instancier le pilote ASIO - - - - ASIO - ASIO - - - - Form - Form - - - TextLabel - TextLabel - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - Configure les canaux d'entrée ASIO. Vérifiez que vous avez choisi au moins un canal pour le microphone et les haut-parleur. <i>Microphone</i> devrait être l'emplacement de votre microphone, et <i>Speaker</i> devrait être être le canal <i>What you hear</i>.<br /> Par exemple, sur la carte Audigy 2 ZS, une bonne sélection pour le micro serait <i>Mic L</i> tandis que les Haut-Parleurs seraient <i>Mix L</i> et <i>Mix R</i>. - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - Vous devez sélectionner au moins un microphone et un haut-parleur pour utiliser ASIO. Si vous avez seulement besoin du microphone, utilisez DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - L'ouverture du périphérique ASIO sélectionné a échouée. Il n'y aura pas d'entrée. - - - - AboutDialog - - <h3>Mumble v%1</h3><p>Copyright 2005-2008 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v%1</h3><p>Copyright 2005-2008 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Un utilitaire de chat vocal pour les joueurs</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - &About Mumble - &A propos de Mumble - - - - &License - &Licence - - - - OK - Valider - - - - About Mumble - A propos de Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Un utilitaire de communication vocale pour les joueurs</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - AboutSpeexDialog - - <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>À propos de Speex</h3><p><tt>http://www.speex.org/</tt></p><p>Ce programme utilise la version %1 de Speex</p><p>Speex est utilisé pour l'annulation de l'écho,<br />le filtrage du bruit, la détection de l'activité vocale,<br />et la compression de la voix.</p> - - - - OK - Valider - - - - About Speex - A propos de Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>A propos de Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>Ce programme utilise la version de Speex %1</p><p>Speex est utilisé pour la suppression de bruit et d'écho<br />le filtrage, la détection de l'activité vocale<br />compression.</p> - - - - AudioConfigDialog - - Interfaces - Interfaces - - - Transmission - Transmission - - - Compression - Compression - - - Jitter Buffer - Tampon de gigue - - - Input - Entrée - - - Input method for audio - Méthode d'entrée pour l'audio - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Il s'agit de la méthode d'entrée utilisée pour l'audio.</b><br />En général vous utilisez DirectSound. - - - Output - Sortie - - - Output method for audio - Méthode de sortie audio - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Méthode de sortie audio. </b><br />En général vous utilisez DirectSound. - - - Continuous - Continu - - - Voice Activity - Activité vocale - - - Push To Talk - Appuyez pour parler - - - Transmit - Transmission - - - When to transmit your speech - Quand transmettre votre voix - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Détermine quand transmettre votre voix.</b><br /><i>Continu</i> - en continu<br /><i>Activité Vocale</i> - Quand vous parlez clairement.<br /><i>Poussez pour parler</i> - Quand vous pressez la touche choisie ci-dessous <i>Raccourcis</i>. - - - Voice Hold - Maintient de la voix - - - How long to keep transmitting after silence - Combien de temps après un silence continuer à maintenir la voix - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Détermine combien de temps la transmission devrait continuer après une pause dans la conversation.</b><br />Choisissez une valeur supérieure si votre voix est coupée lorsque vous parlez (l'icône située a coté de votre nom clignote alors très rapidement).<br />Cela n'a de sens que si vous utilisez la transmission selon l'Activité Vocale. - - - Audio per packet - Trames par paquet - - - How many audio frames to send per packet - Nombre de trames audio à envoyer par paquet - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Sélectionne le nombre de trames audio qui devraient être envoyées dans un paquet.</b><br />Augmenter cette valeur augmentera votre latence, mais réduira aussi les vos besoins en bande passante. - - - Use TCP mode - Utilise le mode TCP - - - Use TCP Compatibility mode - Utiliser le mode de compatibilité TCP - - - <b>Enable TCP Compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Activer le mode de compatibilité TCP</b>.<br />Fait que Mumble utilisera seulement TCP pour communiquer avec le serveur. Ceci va augmenter la taille des headers et causer des pauses notables de la communication en cas de perte de paquets, donc cette fonctionnalité ne devrait être activée seulement si vous ne pouvez utiliser la configuration par défaut ( qui utilise UDP pour la voix et TCP pour le contrôle ). - - - Automatic Reconnect - Reconnexion Automatique - - - Reconnect when disconnected - Reconnexion quand déconnecté - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Se reconnecter quand déconnecté</b>.<br />Mumble essaiera automatiquement de se reconnecter après dix secondes si la connexion échoue. - - - Maximum bandwidth used for sent audio - Bande passante maximum utilisé pour l'envoi audio - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 90% of this overhead). - <b>Montre la bande passante maximale utilisée.</b><br />Montre la bande maximale passante maximale utilisée par cotre machine. Le débit binaire audio est le débit binaire maximum ( puisqu'un débit binaire variable est utilisé ) pour les données seules. La position est le débit binaire utilisé pour les informations de position. L'entête contient le système de frames et les entête des paquets IP. - - - Outgoing Bitrate - Débit binaire en sortie - - - Quality - Qualité - - - Quality of compression (peak bandwidth) - Qualité de la compression ( influe sur la bande passante ) - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Définis la qualité de la compression.</b><br />Détermine combien de bande passante Mumble est autorisé à utiliser pour l'audio en sortie. - - - Complexity - Complexité - - - Complexity of compression (CPU) - Complexité de la compression ( CPU ) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Définis la complexité de la compression.<b><br />Détermine combien de CPU mumble est autorisé à utiliser pour améliorer la qualité de la voix transmise. - - - Amp - Amplification - - - Maximum amplification of input sound - Amplification maximum de l'entrée sonore - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Amplification de l'entrée maximum.</b><br />Mumble normalise le son de l'entrée avant de le compresser, et l'amplifie aussi fort qu'il en est autorisé.<br />Le niveau actuel est continuellement mis à jour selon votre modèle de parole actuel, mais il ne dépassera jamais le niveau spécifié ici.<br />Si le <i>Volume du microphone</li> des statistiques audio tourne autour de 100%, vous voudrez probablement le mettre à 2.0 ou quelque chose comme ça, mais si, comme la plupart des gens, vous n'arrivez pas à atteindre 100%, définissez quelque chose de beaucoup plus haut.<br />Idéallement, définissez le de manière à ce que <i>Volume du microphone * Facteur d'amplification >= 100</i>, même si vous parlez vraiment doucement.<br /><br />Il est à noter que mettre cette option au maximum ne causera aucun dégât, mais que Mumble risque d'entendre d'autres conversations, si vous laissez à ce niveau. - - - Default Jitter Buffer - Tampon de gigue par défaut - - - How long to prebuffer on first packet - Combien de temps mettre en tampon le premier paquet - - - <b>This sets the default buffer size for the jitter buffer</b>.<br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the default buffer size to use on the first packet to arrive from a new speaker, or when a speaker using Voice Activity or Push-To-Talk just started talking again. If the start of sentences you hear is very jittery, increase this value. - <b>Spécifie le tampon de gigue par défaut</b>.<br />Toutes les trames audio arrivantes sont mise en mémoire tampon, et le tampon de gigue essaie de mettre le tampon à la taille minimum soutenable par votre réseau, donc la latence est la plus basse possible. Indique la taille par défaut du tampon de gigue à utiliser sur le premier paquet qui arrive d'un nouveau joueur, ou quand un joueur utilise l'activation par activité vocale, ou appuyer pour parler. Si le début des phrases que vous entendez est très craquelé, augmentez cette valeur. - - - Basic Audio - Audio basique - - - %1 ms - %1 ms - - - %1s - %1s - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbits/s ( Audio %2, Position %4, Entêtes %3 ) - - - Loopback Test - Test loopback - - - None - Aucun - - - Local - Local - - - Server - Serveur - - - Desired loopback mode - Mode de loopback désiré - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Ceci permet de s'écouter parler à des fins de test.</b><br /><i>Aucun</i> - Loopback désactivé<br /><i>Local</i> - Emulation d'un serveur local.<br /><i>Serveur</i> - Loopback depuis le serveur.<br />A noter que quand le loopback est activé les autres joueurs ne pourront pas vous entendre. Ces paramètres ne sont pas sauvegardés quand l'application est quitté. - - - Packet Loss - Paquet perdu - - - Packet loss for loopback mode - Paquet perdu pour le mode de loopback - - - %1 s - %1 s - - - %1% - %1 % - - - -%1 dB - -%1 dB - - - &Input - &Entrée - - - &Output - &Sortie - - - &Transmit - &Transmission - - - Voice &Hold - Maintient de la &Voix - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Montre la bande passante maximale utilisée.</b><br />Montre la bande maximale passante maximale utilisée par cotre machine. Le débit binaire audio est le débit binaire maximum ( puisqu'un débit binaire variable est utilisé ) pour les données seules. La position est le débit binaire utilisé pour les informations de position. L'entête contient le système de frames et les entêtes des paquets IP. (75%?). - - - &Quality - &Qualité - - - &Complexity - &Complexité - - - Audio Processing - Processeur audio - - - Noise Suppression - Suppression du bruit - - - Noise suppression - Suppression du bruit - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Cela fixe le niveau de suppression de bruit.</b><br />Plus cette valeur est haute, plus il y aura de suppression de bruit. - - - Amplification - Amplification - - - Audio Output - Sortie audio - - - Volume - Volume - - - Volume of incoming speech - Volume entrant de parole - - - <b>This adjusts the volume of incoming speech.</b><br />Note that this can only be used to decrease the volume. No amplification is possible. - <b>Ceci ajuste le volume entrant de parole.</b><br />Notez que cela ne peut être utilisée pour diminuer le volume. Pas d'amplification possible. - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Ceci définit la perte de paquets pour le mode loopback.</b><br />Ce sera le taux de paquets perdus. À moins que votre bande passante sortante soit atteinte ou s'il ya un problème avec votre connexion réseau, ce sera 0% - - - &Loopback - &Loopback - - - Off - Eteint - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>Ceci défiinit la détection de parole à utiliser pour le taux de signal/bruit.</b><br />Dans ce mode, l'entrée est analysé pour quelque chose ressemblant à un signal clair, et que la clarté du signal est utilisé pour déclencher la parole de détection. - - - Signal to Noise - Signal/Bruit - - - Amplitude - Amplitude - - - - AudioInput - - - Form - Form - - - - Interface - Interface - - - - System - Système - - - - Input method for audio - Méthode d'entrée pour l'audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Il s'agit de la méthode d'entrée utilisée pour l'audio.</b><br />En général vous utilisez DirectSound. - - - - Device - Périphérique - - - - Input device for audio - Output method for audio - Méthode de sortie audio - - - - <b>This is the input device to use for audio.</b> - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Méthode de sortie audio. </b><br />En général vous utilisez DirectSound. - - - - Cancel Echo - Supprimer l'écho - - - - Transmission - Transmission - - - - &Transmit - &Transmission - - - - When to transmit your speech - Quand transmettre votre voix - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Détermine quand transmettre votre voix.</b><br /><i>Continu</i> - en continu<br /><i>Activité Vocale</i> - Quand vous parlez clairement.<br /><i>Poussez pour parler</i> - Quand vous pressez la touche choisie ci-dessous <i>Raccourcis</i>. - - - - DoublePush Time - - - - - TextLabel - TextLabel - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - - - - - PTT Audio cue - - - - - Use SNR based speech detection - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>Ceci défiinit la détection de parole à utiliser pour le taux de signal/bruit.</b><br />Dans ce mode, l'entrée est analysé pour quelque chose ressemblant à un signal clair, et que la clarté du signal soit utilisé pour déclencher la parole de détection. - - - - Signal to Noise - Signal/Bruit - - - - Use Amplitude based speech detection. - - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - - - - - Amplitude - Amplitude - - - - Voice &Hold - Maintient de la &Voix - - - - How long to keep transmitting after silence - Combien de temps après un silence continuer à maintenir la transmission - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Détermine combien de temps la transmission devrait continuer après une pause dans la conversation.</b><br />Choisissez une valeur supérieure si votre voix est coupée lorsque vous parlez (l'icône située a coté de votre nom clignote alors très rapidement).<br />Cela n'a de sens que si vous utilisez la transmission via l'Activité Vocale. - - - - Silence Below - - - - - Signal values below this counts as silence - - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - - - - - Speech Above - - - - - Signal values above this count as voice - - - - - Compression - Compression - - - - &Quality - &Qualité - - - - Quality of compression (peak bandwidth) - Qualité de la compression (influe sur la bande passante ) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Définis la qualité de la compression.</b><br />Détermine combien de bande passante Mumble est autorisé à utiliser pour l'audio en sortie. - - - &Complexity - &Complexité - - - Complexity of compression (CPU) - Complexité de la compression ( CPU ) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Définis la complexité de la compression.<b><br />Détermine combien de CPU mumble est autorisé à utiliser pour améliorer la qualité de la voix transmise. - - - - Audio per packet - Trames par paquet - - - - How many audio frames to send per packet - Nombre de trames audio a envoyer par paquet - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Sélectionne le nombre de trames audio qui devraient être envoyées dans un paquet.</b><br />Augmenter cette valeur augmentera votre latence, mais réduira aussi vos besoins en bande passante. - - - Maximum bandwidth used for sent audio - Bande passante maximum utilisée pour l'envoi audio - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Montre la bande passante maximale utilisée.</b><br />Montre la bande maximale passante maximale utilisée par votre machine. Le débit binaire audio est le débit binaire maximum ( puisqu'un débit binaire variable est utilisé ) pour les données seules. La position est le débit binaire utilisé pour les informations de position. L'entête contient le système de frames et les entêtes des paquets IP. (IP ET UPD est de 75% de l'entête). - - - - Audio Processing - Processeur audio - - - - Noise Suppression - Suppression du bruit - - - - Noise suppression - Suppression du bruit - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Cela fixe le niveau de suppression de bruit.</b><br />Plus cette valeur est haute, moins il y aura de parasites. - - - - Amplification - Amplification - - - - Maximum amplification of input sound - Amplification maximum de l'entrée sonore - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Amplification de l'entrée maximum.</b><br />Mumble normalise le son de l'entrée avant de le compresser, et l'amplifie aussi fort qu'il en est autorisé.<br />Le niveau actuel est continuellement mis à jour selon votre modèle de parole actuel, mais il ne dépassera jamais le niveau spécifié ici.<br />Si le <i>Volume du microphone</li> des statistiques audio tourne autour de 100%, vous voudrez probablement le mettre à 2.0 ou quelque chose comme ça, mais si, comme la plupart des gens, vous n'arrivez pas à atteindre 100%, définissez quelque chose de beaucoup plus haut.<br />Idéallement, définissez le de manière à ce que <i>Volume du microphone * Facteur d'amplification >= 100</i>, même si vous parlez vraiment doucement.<br /><br />Il est à noter que mettre cette option au maximum ne causera aucun dégât, mais que Mumble risque d'entendre d'autres conversations, si vous laissez à ce niveau. - - - - Current speech detection chance - Détection de parole actuelle - - - - Audible audio cue when push-to-talk is activated or deactivated - - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Ceci affiche le niveau actuel des paramètres de détection de parole.</b><br />Vous pouvez changer ses paramètres depuis les paramètres ou l'assistant audio. - - - - Idle AutoMute - Auto-absence (devenir muet) - - - - How long to remain idle before auto-mute. - Combien de temps avant l'absence automatique. - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - Ceci règle les paramètres d'absence. Si pendant cette durée il n'y a eut aucun envoi audio vers le serveur. Vous deviendrez muet. - - - - Maximum bandwidth used for sending audio - - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Cela fixe le niveau de suppression de bruit à appliquer.</b><br />Plus cette valeur est haute, plus il y aura de suppression de bruit. - - - - AudioInputDialog - - - Continuous - Continu - - - - Voice Activity - Activité vocale - - - - Push To Talk - Appuyez pour parler - - - - Audio Input - Entrée audio - - - - - %1 ms - %1 ms - - - - - Off - Eteint - - - - %1 s - %1 s - - - - -%1 dB - -%1 dB - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbits/s ( Audio %2, Position %4, Entêtes %3 ) - - - - %1 min - %1 min - - - - AudioOutput - - - Form - Form - - - - Interface - Interface - - - - System - Système - - - - Output method for audio - Input method for audio - Méthode d'entrée pour l'audio - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Il s'agit de la méthode d'entrée utilisée pour l'audio.</b><br />En général vous utilisez DirectSound. - - - - Device - Périphérique - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - Position Audio - - - - Audio Output - Sortie audio - - - - Default &Jitter Buffer - - - - - Safety margin for jitter buffer - - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - - - - - TextLabel - TextLabel - - - - Volume - Volume - - - - Volume of incoming speech - Volume entrant de parole - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>Ceci ajuste le volume entrant de parole.</b><br />Notez que si vous augmentez ceci au-delà de 100%, le son sera déformé. - - - - Output Delay - Délai de sortie - - - - Amount of data to buffer - Quantitée de données à mettre en tampon - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - - Volume attenuation - Atténuation du volume - - - MinDistance - MinDistance - - - Minimum distance to player before sound decreases - Distance minimum d'un joueur avant que le son ne diminue - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Définis la distance minimum pour calculer le son. Le volume de la voix des autres joueurs ne diminuera pas avant d'être au moins aussi loin de vous. - - - MaxDistance - MaxDistance - - - Maximum distance, beyond which sound won't decrease - Distance maximale, après laquelle le son ne diminuera plus - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Spécifie la distance maximum pour le calcul du son. Passé cette distance, le volume des autres joueurs ne diminuera plus. - - - RollOff - Atténuation - - - - Factor for sound volume decrease - Facteur de diminution du volume sonore - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - À quelle vitesse le volume sonore devrait descendre en dépassant la distance minimale. Normalement ( 1.0 ), le son diminue de moitié à chaque fois que la distance double. Augmenter cette valeur signifie que le son descend plus vite, tandis que la diminuer signifie que le son diminue plus lentement. - - - - Bloom - - - - - Loopback Test - Test loopback - - - - Delay Variance - Délai de variance - - - - Variance in packet latency - Variance de la latence des paquets - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - - - - - Packet Loss - Paquet perdu - - - - Packet loss for loopback mode - Paquet perdu pour le mode de loopback - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Ceci définit la perte de paquets pour le mode loopback.</b><br />Ce sera le taux de paquets perdus. À moins que votre bande passante sortante soit atteinte ou s'il ya un problème avec votre connexion réseau, ce sera 0% - - - - &Loopback - &Loopback - - - - Desired loopback mode - Mode de loopback désiré - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Ceci permet de s'écouter parler à des fins de test.</b><br /><i>Aucun</i> - Loopback désactivé<br /><i>Local</i> - Emulation d'un serveur local.<br /><i>Serveur</i> - Loopback depuis le serveur.<br />A noter que quand le loopback est activé les autres joueurs ne pourront pas vous entendre. Ces paramètres ne sont pas sauvegardés quand l'application est quitté. - - - - Factor for sound volume increase - Facteur de diminution du volume sonore - - - - The connected "speakers" are actually headphones. - - - - - Minimum Distance - - - - - Minimum distance to player before sound volume decreases - - - - - Maximum Distance - - - - - Maximum distance, beyond which speech volume won't decrease - - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - - - - - Minimum Volume - - - - - What should the volume be at the maximum distance? - - - - - How much should sound volume increase for sources that are really close? - - - - Connected "speakers" are actually headphones. - Les "hauts parleurs" connectés sont en fait des écouteurs. - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - - - - - Headphones - Casque audio - - - - Other Applications - Autres applications - - - - Volume of other applications during speech - Le volume pour les autres applications pendant la conversation - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>Baisser le volume des autres applications pendant la conversation.</b><br />Ceci permet de baisser le volume des autres applications pedant que vous discutez sur Mumble. - - - - AudioOutputDialog - - - None - Aucun - - - - Local - Local - - - - Server - Serveur - - - - Audio Output - Sortie audio - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1 % - - - - %1ms - %1ms - - - - - %1m - %1m - - - %1 - %1 - - - - AudioStats - - Mumble - Mumble - - - - Peak microphone level - Niveau maximal du microphone - - - - Peak speaker level - Niveau maximal du haut-parleur - - - - Peak clean level - - - - Microphone loudness - Volume du microphone - - - Mic Signal-To-Noise - Signal/Bruit du micro - - - - Speech Probability - Probabilité de parole - - - Audio bitrate - Débit binaire audio - - - Real - Réel - - - Imaginary - Imaginaire - - - Modulus - Modulo - - - Phase - Phase - - - - Peak power in last frame - Puissance maximale dans la trame précédente - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. - Montre la puissance maximale de la dernière trame ( 20 ms ), et - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - - - - - How close the current input level is to ideal - À quel point le niveau sonore en entrée est proche de l'idéal - - - - Signal-To-Noise ratio from the microphone - Rapport Signal/Bruit du microphone - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - - - - - Probability of speech - Probabilité de parole - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - Il s'agit de la probabilité que la trame précédente ( 20 ms ) soit de la parole et non du bruit.<br />La transmission de l'activité vocale dépend de cette valeur. L'astuce est que le milieu de la phrase est toujours détecté comme voix ; les problèmes sont les pauses entre les mots et le début des phrases. Il est difficile de distinguer un soupir d'un mot commençant par "h".<br />Si c'est écrit en gras, cela signifie que Mumble est en train de transmettre des données ( si vous êtes connectés ). - - - - Bitrate of last frame - Débit binaire de la dernière frame - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - Il s'agit du débit binaire de la dernière trame compressée ( 20 ms ). Ceci va varier de haut en bas puisque nous utilisons un bitrate variable pour ajuster la qualité. Pour ajuster le bitrate maximal, ajustez <b>Complexité de la compression</b> dans les Préférences. - - - - Power spectrum of input signal and noise estimate - Spectre de la puissance du signal d'entrée et du bruit estimé - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - - - - - Weights of the echo canceller - - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - >1000ms - >1000ms - - - - Audio Statistics - Statistiques audio - - - - Input Levels - Niveaux d'entrées - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - TextLabel - TextLabel - - - - Signal Analysis - Analyse du signal - - - - Microphone power - Puissance du micro - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - Taux de signal/bruit - - - - Configuration feedback - - - - - Current audio bitrate - Débit binaire audio actuel - - - - DoublePush interval - - - - - Speech Detection - Détection de parole - - - - Current speech detection chance - Détection de parole actuelle - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Ceci affiche le niveau actuel des paramètres de détection de parole.</b><br />Vous pouvez changer ses paramètres depuis les paramètres ou l'assistant audio. - - - - Signal and noise power spectrum - Spectre de la puissance du signal d'entrée et du bruit - - - - Echo Analysis - Analyse de l'echo - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - Assistant audio - - - - Introduction - Introduction - - - - Welcome to the Mumble Audio Wizard - Bienvenue dans l'assistant audio de Mumble - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - Ceci est l'assistant audio pour Mumble. Il vous aide à configurer correctement le le niveau d'entré de votre carte son, Et également définir les paramètres corrects dans le traitement du son pour Mumble. - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - Durant la phase de paramètrage de la carte son, l'audio est sera bouclée localement pour vous permettre d'écouter sa réponse, et non pas depuis un serveur. - - - - Finished - Terminé - - - - Enjoy using Mumble - Profitez de l'utilisation de mumble - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - Félicitations. Vous devriez maintenant être prêt à profiter d'une expérience sonore riche avec Mumble. - - - - Device selection - Sélection du périphérique - - - - Selecting the input and output device to use with Mumble. - Sélectionner le périphérique d'entrée et sortie a utiliser dans mumble. - - - - Input device - Périphérique d'entrée - - - - This is the device your microphone is connected to. - Périphérique auqel votre microphone est connecté. - - - - - System - Système - - - - Input method for audio - Méthode d'entrée pour l'audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Il s'agit de la méthode d'entrée utilisée pour l'audio.</b><br />En général vous utilisez DirectSound. - - - - - Device - Périphérique - - - - Input device to use - Périphérique d'entrée à utiliser - - - - <b>Selects which sound card to use for audio input.</b> - <b>Sélectionner la carte son a utiliser pour la sortie audio.</b> - - - - Output device - Périphérique de sortie - - - - This is the device your speakers or headphones are connected to. - Périphérique auqel vos haut-parleurs ou vos écouteurs sont connectés. - - - - Output method for audio - Méthode de sortie audio - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Méthode de sortie audio. </b><br />En général vous utilisez DirectSound. - - - - Output device to use - Périphérique de sortie à utiliser - - - - <b>Selects which sound card to use for audio Output.</b> - <b>Sélectionner quelle carte son utiliser pour la sortie sonore.</b> - - - - Volume tuning - Réglage du volume - - - - Tuning microphone hardware volume to optimal settings. - Réglage du volume matériel du micro pour une meilleure configuration. - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - Ouvrir le panneau de contrôle de votre carte son et aller dans les options d'enregistrements. Vérifiez que le microphone est séléctionné en tant qu'entrée active avec le volume d'enregistrement au maximum. S'il ya une option pour permettre le "mic boost" vérifiez qu'il est cochée. - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - Parler fort, comme lorsque vous êtes ennuyé ou excitée. Diminuer le volume sonore dans le panneau de contrôle jusqu'à ce que la barre soit aussi haute que possible dans le bleu et le vert, mais <b>pas</ b> dans la zone rouge pendant que vous parlez. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Maintenant, parler doucement, comme vous le feriez lorsque l'on parle tard dans la nuit et que vous ne voulez pas déranger qui que ce soit. Ajustez le curseur ci-dessous pour que la barre se déplace en vert lorsque vous parlez, mais reste bleu quand vous êtes silencieux. - - - - Voice Activity Detection - Détection de l'Activité Vocale - - - - Letting Mumble figure out when you're talking and when you're silent. - Mumble détermine quand vous parlez, et lorsque vous faites le silence. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Cela permettra de Mumble savoir quand vous parlez. La première étape consiste à sélectionner les données de valeur à utiliser. - - - - Raw amplitude from input - - - - - Signal-To-Noise ratio - Taux de signal/bruit - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Ensuite, vous devez ajuster les deux curseurs. Le premier, dire quelques phrases devraient se retrouver dans la zone verte. Tout en parlant, vous devriez rester à l'intérieur du jaune, et lorsque vous n'êtes pas à parler, tout devrait être dans le rouge. - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - Enfin, vous avez besoin d'ajuster le temps de parole. Mumble peut détecter le temps de non-parole et toujours transmettre avant qu'il se rompt. Cela vous permet de reprendre votre souffle. - - - - Device tuning - Réglage périphérique - - - - Changing hardware output delays to their minimum value. - - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - - - - - Amount of data to buffer. - Quantitée de données à mettre en tampon. - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Spécifie la quantité de données à mettre en cache dans le tampon de sortie. Essayez différentes valeurs et mettez la plus basse qui ne cause pas de rapides décalages du son. - - - - %1ms - %1ms - - - - %1 s - %1 s - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - - - - - Audio path is %1ms long. - Le chemin audio est de %1ms. - - - - Audio path cannot be determined. Input not recognized. - Le chemin audio ne peut pas être déterminé. - - - - Use echo cancellation - Utiliser l'annulation de l'echo - - - - Cancel echo from headset or speakers. - Annuler l'écho depuis les hauts parleurs ou écouteurs. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - Ceci active l'annulation d'écho de la sortie audio, ce qui contribue à la fois sur la parole et les écouteurs. - - - - Enable positional audio - Activer la position audio - - - - Allows positioning of sound. - Autoriser la position audio. - - - - This allows Mumble to use positional audio to place voices. - Ceci autorise Mumble à utiliser la postion audio. - - - - Positional Audio - Position Audio - - - - Adjusting attenuation of positional audio. - Ajuster l'attenuation de la position audio. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble supporte la position audio pour quelques jeux, et et la position de la voix des autres joueurs par rapport à leur position dans le jeu. Selon leur position, le volume de la voix sera modifiée entre les intervenants afin de simuler la direction et la distance à laquelle l'autre joueur se trouve. Cette position dépend de votre bonne configuration des haut-parleurs au niveau de votre système d'exploitation, donc un test est fait ici. - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - - - - - Use headphones - Utiliser les écouteurs - - - - Use headphones instead of speakers. - Utiliser les écouteurs plutôt que les hauts parleurs. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - Ceci ignore la configuration des haut parleurs du système d'exploitation et configure la position pour les écouteurs à la place. - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - - - - - Submit anonymous statistics to the Mumble project - Soumettre les statistiques au projet Mumble (anonyme) - - - - Push To Talk: - Appuyez pour parler: - - - - BanEditor - - - Mumble - Edit Bans - Mumble - Éditer la liste des bannis - - - - 0.0.0.0 - 0.0.0.0 - - - - &Add - &Ajouter - - - - &Update - Mettre à jo&ur - - - - &Remove - Supp&rimer - - - &OK - &Valider - - - Accept changes - Accepter les modifications - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Ce bouton acceptera les groupes/LCAs actuels et les enverra au serveur. Veuillez noter que si vous avez retiré par erreur votre permission d'écriture, le serveur va l'ajouter. - - - &Cancel - A&nnuler - - - Reject changes - Annuler les modifications - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - Ce bouton va annuler les modifications et fermer la fenêtre sans mettre à jour les LCAs ou les groupes sur le serveur. - - - - &Address - &Adresse - - - - &Mask - &Masque - - - - ChanACL - - - W - W - - - - T - T - - - - E - E - - - - S - S - - - - A - A - - - - M - M - - - - K - K - - - - C - C - - - - L - L - - - - None - Aucun - - - Write - Écrire - - - - Traverse - Traverser - - - - Enter - Entrer - - - - Speak - Parler - - - - AltSpeak - Parler Alt - - - - Mute/Deafen - Rend muet/sourd - - - - Move/Kick - Déplacer/Éjecter - - - - Make channel - Créer un salon - - - - Link channel - Lier des salons - - - - This represents no privileges. - Représente aucun privilège. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Représente l'accès total au canal, incluant la capacité de changer les informations des groupes et des LCA. Ce privilège inclus tous les autres privilèges. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Représente la permission de traverser un salon. Si ce privilège est interdit à un utilisateur, il va petre incapable d'accéder à ce salon ainsi qu'à ses sous-salons, peu importe les autres permissions des sous-salons. - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Représente la permission de joindre un salon. Si vous avez une structure de salons hiérarchiques, vous voudriez peut être donner à tout le monde le droit de Traverser, mais restreindre le droit d'Entrer dans le salon racine de votre hiérarchie. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Représente la permission de parler dans un salon. Un utilisateur sans ce droit va être supprimé par le serveur ( vu comme muet ) et ne sera pas capable de parler à moins que quelqu'un ayant les droits ne lui rende la parole. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Représente la permission de rendre muet et sourd d'autres joueurs. Une fois muet, un joueur le reste jusqu'à ce qu'un autre joueur ayant ce privilège lui rende la voix, ou qu'il se reconnecte au serveur. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Représente la permission de déplacer un joueur vers un autre salon ou de l'éjecter du serveur. Pour déplacer un joueur, celui ci doit avoir le droit d'entrer dans le salon, ou le joueur le déplaçant doit avoir le droit de déplacement/éjection sur le salon ciblé. Les joueurs ayant ce privilège peuvent déplacer des joueurs dans des salons dans lesquels le joueur ciblé n'a normalement pas le droit d'entrer. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Représente la permission de créer des sous-salons. Le joueur créant les sous-salons sera ajouté au groupe administrateur de ce sous-salon. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Représente la permission de lier des salons. Les joueurs présents dans des salons liés s'entendent mutuellement, aussi longtemps que le joueur a le privilège de parler dans le salon de celui qui écoute. Vous avez besoin du privilège de lien dans les deux salons pour créer un lien, mais seulement d'un des deux pour le supprimer. - - - - Write ACL - Ecrire LCA - - - - ClientPlayer - - - Authenticated - Authentifié - - - - Muted (server) - Muet (serveur) - - - - Deafened (server) - Sourd (server) - - - - Local Mute - Muet (local) - - - - Muted (self) - Devenir muet(te) - - - - Deafened (self) - Devenir sourd - - - - ConfigDialog - - - Mumble Configuration - Configuration de Mumble - - - &OK - &Valider - - - - Accept changes - Accepter les modifications - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Ce bouton acceptera les préférences actuelles et retournera à l'application.<br />Les préférences seront sauvegardées sur votre disque dur quand vous quitterez l'application. - - - &Cancel - A&nnuler - - - - Reject changes - Annuler les modifications - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Ce bouton annulera toutes les modifications et retournera à l'application.<br />Les paramètres seront restaurer à leurs états précédents. - - - &Apply - &Appliquer - - - - Apply changes - Appliquer les modifications - - - - This button will immediately apply all changes. - Ce bouton appliquera immédiatement toutes les modifications. - - - - Undo changes for current page - Annuler les modifications apportées à la page courante - - - - This button will revert any changes done on the current page to the most recent applied settings. - Ce bouton revient sur tous les changements effectués sur la page en cours depuis la dernière sauvegarde de paramètres. - - - - Restore defaults for current page - Restaurer par défaut pour la page courante - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - Ce bouton restaurera les paramètres pour la page courante par leur valeur par défaut. Les autres pages ne seront pas changés.<br/>Pour restaurer tout les paramètres par défaut, vous devai utiliser ce bouton sur chacune des pages. - - - Show all configuration items - Afficher tout les outils de configuration - - - Expert Config - Configuration avancée - - - Tab 1 - Onglet 1 - - - - Advanced - - - - - ConnectDialog - - &Name - &Nom - - - - A&ddress - A&dresse - - - - &Port - &Port - - - - &Username - &Nom d'utilisateur - - - - &Password - Mot de &passe - - - - &Connect - &Connexion - - - - Cancel - Annuler - - - - &Add - &Ajouter - - - - &Remove - &Retirer - - - - &Custom Servers - &Serveurs personnalisés - - - - Server &Browser - Navi&gateur de serveurs - - - Name - Nom - - - - Address - Adresse - - - - URL - URL - - - - C&opy to custom - C&opier vers un serveur personnalisé - - - - &View Webpage - &Voir la page web - - - - Connecting to %1 - Connexion à %1 - - - - Enter username - Entrer le nom d'utilisateur - - - Mumble - Mumble - - - - Failed to fetch server list - Impossible de récupérer la liste des serveurs - - - - &Label - &Label - - - - Label - Label - - - - Unknown - Inconnu - - - - -Unnamed entry- - -Sans nom- - - - - Mumble Server Connect - Connection serveur Mumble - - - - &Cancel - A&nnuler - - - - - New - Nouveau - - - - - Add - Ajouter - - - - Update - Mettre à jour - - - - CoreAudioSystem - - - Default Device - Périphérique par défaut - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - Mumble - Mumble - - - Opening chosen DirectSound Input failed. No microphone capture will be done. - Ouverture de l'entrée son choisie impossible. Aucune capture son depuis le microphone sera faite. - - - - Opening chosen DirectSound Input failed. Default device will be used. - Ouverture de l'entrée son choisie impossible. Le périphérique par défaut sera utilisé. - - - - Default DirectSound Voice Input - Entrée Voix par défaut - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - Ouverture de l'entrée son choisie impossible. Aucune capture son depuis le microphone sera faite. - - - - Lost DirectSound input device. - Périphérique d'entrée son perdu. - - - - DXAudioOutput - - Mumble - Mumble - - - - Opening chosen DirectSound Output failed. No audio will be heard. - Ouverture de la sortie son choisie impossible. Vous n'entendrez aucun son. - - - - Opening chosen DirectSound Output failed. Default device will be used. - Ouverture de la sortie son choisie impossible. Le périphérique par défaut sera utilisé. - - - - Default DirectSound Voice Output - Sortie Voix par défaut - - - - Lost DirectSound output device. - Périphérique de sortie perdu. - - - - DXConfigDialog - - Default DirectSound Voice Input - Entrée Voix par défaut - - - Default DirectSound Voice Output - Sortie Voix par défaut - - - Device selection - Sélection périphérique - - - Device to use for microphone - Périphérique utilisé comme microphone - - - This sets the input device to use, which is where you have connected the microphone. - Sélectionne le périphérique d'entrée à utiliser, qui est l'endroit où vous avez connecter le microphone. - - - Input - Entrée - - - Device to use for speakers/headphones - Périphérique à utiliser pour les hauts-parleurs - - - This sets the output device to use, which is where you have connected your speakers or your headset. - Sélectionne le périphérique de sortie à utiliser, qui est l'endroit où vous avez connecter les hauts-parleurs. - - - Output - Sortie - - - Output Options - Options de Sortie - - - Output Delay - Délais de sortie - - - Amount of data to buffer for DirectSound - Quantité de données à mettre en tampon pour DirectSound - - - This sets the amount of data to prebuffer in the DirectSound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Spécifie la quantité de données à mettre en cache dans le tampon de sortie. Essayez différentes valeurs et mettez la plus bassequi ne cause pas de rapides décalages du son. - - - Positional Audio - Position Audio - - - None - Aucun - - - Panning - Panoramique - - - Light HRTF - HRTF léger - - - Full HRTF - HRTF complet - - - 3D Sound Algorithm - Algorithme de son 3D - - - This sets what 3D Sound algorithm to use.<br /><b>None</b> - Disable 3D Sound (least CPU).<br /><b>Panning</b> - Just use stereo panning (some CPU).<br /><b>Light/Full HRTF</b> - Head-Related Transfer Functions enabled. This may use a small amount of CPU.<br />Note that if you have a soundcard with <i>hardware</i> 3D processing, HRTF processing will be done on the soundcard and will use practically no processing power. - Définis quel algorithme de son 3D utiliser.<br /><b>Aucun</b> - Désactive le son 3D ( le moins de CPU ).<br /><b>Pannoramique</b> - N'utilise que le stéréo panoramique ( un peu de CPU ).<br /><b>HRTF Léger/Plein</b> - Head-Related Transfer Functions activées. Il est possible que ceci utilise un peu de CPU.<br />Veuillez noter que si vous avez une carte avec ???? <i>matériel</i>, HRTF ???. - - - Method - Méthode - - - MinDistance - MinDistance - - - Minimum distance to player before sound decreases - Distance minimum d'un joueur avant que le son ne diminue - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Définis la distance minimum pour calculer le son. Le volume de la voix des autres joueurs ne diminuera pas avant d'être au moins aussi loin de vous. - - - MaxDistance - MaxDistance - - - Maximum distance, beyond which sound won't decrease - Distance maximale, après laquelle le son ne diminuera plus - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Spécifie la distance maximum pour le calcul du son. Passé cette distance, le volume des autres joueurs ne diminuera plus. - - - Factor for sound volume decrease - Facteur de diminution du volume sonore - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - À quelle vitesse le volume sonore devrait descendre en dépassant la distance minimale. Normalement ( 1.0 ), le son diminue de moitié à chaque fois que la distance double. Augmenter cette valeur signifie que le son descend plus vite, tandis que la diminuer signifie que le son diminue plus lentement. - - - DirectSound - DirectSound - - - %1ms - %1ms - - - %1m - %1m - - - %1 - %1 - - - Players more than %1 meters away have %2% intensity - Les joueurs à plus de %1 mètres ont toujours une intensité de %2 - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble n'a réussi à initialiser la base de données à aucun des emplacements possibles. - - - - DirectInputKeyWidget - - Press Shortcut - Pressez un raccourcis - - - - GlobalShortcut - - - Shortcuts - Raccourcis - - - - List of configured shortcuts - - - - - Function - Fonction - - - - Shortcut - - - - - Suppress - Supprimer - - - - Add new shortcut - - - - - This will add a new global shortcut - - - - - &Add - &Ajouter - - - - Remove selected shortcut - - - - - This will permanently remove a selected shortcut. - - - - - &Remove - - - - - GlobalShortcutConfig - - - Shortcuts - Raccourcis - - - Function - Fonction - - - Shortcut - Raccourci - - - Shortcut bound to %1. - Raccourcis lié à %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Il s'agit du raccourcis lié à %1</b><br />Cliquez dans ce champ et tappez la combinaison de touche/bouton à relier. Double-cliquez pour effacer. - - - Double-click an entry to clear the shortcut. - Double-cliquez sur une entrée pour effacer le raccourci. - - - Suppress - Supprimer - - - - Shortcut button combination. - - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - - - - - Suppress keys from other applications - Supprimer les touches pour les autres applications - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - - - - - GlobalShortcutWinConfig - - Shortcuts - Raccourcis - - - Function - Fonction - - - Shortcut - Raccourcis - - - Shortcut bound to %1. - Raccourcis lié à %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Il s'agit du raccourcis lié à %1</b><br />Cliquez dans ce champ et tappez la combinaison de touche/bouton à relier. Double-cliquez pour effacer. - - - - GlobalShortcutX - - - Mouse %1 - Souris %1 - - - - GlobalShortcutXConfig - - Shortcuts - Raccourcis - - - Function - Fonction - - - Shortcut - Raccourcis - - - Shortcut bound to %1. - Raccourcis lié à %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key combo to rebind. Double-click to clear. - <b>Il s'agit du raccourcis lié à %1</b><br />Cliquez dans ce champ et tappez la combinaison de touche/bouton à relier. Double-cliquez pour effacer. - - - - LCD - - - Not connected - Non connecté - - - - LCDConfig - - - Graphic - Graphique - - - - Character - - - - - Enable this device - Activé ce périphérique - - - - LCD - LCD - - - - Form - Form - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - Périphériques - - - - Name - Nom - - - - Type - Type - - - - Size - Taille - - - - Enabled - Activé - - - - Views - Vues - - - - Minimum Column Width - Taille minimale des colonnes - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - TextLabel - - - - Splitter Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - Debuggage - - - - Critical - Critique - - - - Warning - Avertissement - - - - Information - Information - - - - Server Connected - Serveur Connecté - - - Server Deconnected - Serveur Déconnecté - - - - Player Joined Server - Joueur arrive sur Le Serveur - - - - Player Left Server - Joueur quitte le serveur - - - - Player kicked (you or by you) - Joueur expulsé (vous ou par vous) - - - - Player kicked - Joueur expulsé - - - - You self-muted/deafened - Vous êtes rendu sourd/muet - - - - Other self-muted/deafened - Les autres sont rendu sourd/muet - - - - Player muted (you) - Joueur muet (vous) - - - - Player muted (by you) - Joueur muet (par vous) - - - - Player muted (other) - Joueur muet (autre) - - - - Player Joined Channel - Joueur arrive sur le canal - - - - Player Left Channel - Joueur quitte le canal - - - - Permission Denied - Permission refusée - - - [%2] %1 - [%2] %1 - - - - Server Disconnected - Déconnecté du serveur - - - - Text Message - Message Texte - - - - LogConfig - - - Toggle console for %1 events - - - - - Toggle pop-up notifications for %1 events - - - - - Toggle Text-To-Speech for %1 events - - - - - Click here to toggle sound notification for %1 events - - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - - - - - Choose sound file - - - - - Invalid sound file - - - - - The file '%1' does not exist or is not a valid speex file. - - - - - Messages - Messages - - - - Console - Console - - - TTS - TTS - - - Enable console for %1 - Activer la console pour %1 - - - Enable Text-To-Speech for %1 - Activer le Text-To-Speech pour %1 - - - - Text To Speech - Text To Speech - - - - Volume - Volume - - - - Volume of Text-To-Speech Engine - Volume du moteur de Text-To-Speech - - - - <b>This is the volume used for the speech synthesis.</b> - <b>C'est le volume utilisé pour le mode synthèse.</b> - - - - Length threshold - Seuil de longueur - - - - Message length threshold for Text-To-Speech Engine - Seuil de longueur pour les messages de la voix de synthèse - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Il s'agit du seuil de longueur utilisé pour la voix de synthèse.</b><br />Les messages plus longs que cette limite ne seront pas lu en entier. - - - - Message - Message - - - - Notification - - - - - Text-To-Speech - Synthèse vocale - - - - Soundfile - - - - - Path - - - - - Characters - - - - - LookConfig - - - Language - Langue - - - - Look and Feel - Apparence - - - - - System default - Par défault - - - - Language to use (requires restart) - Langue a utiliser (nécessite un redémarrage) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Ceci défini quel langue Mumble devrait utiliser</b><br />Vous devez redémarrer Mumble pour utiliser une nouvelle langue. - - - - Style - Style - - - - Basic widget style - Modèle de contrôle basique - - - - <b>This sets the basic look and feel to use.</b> - <b>Ceci spécifie l'apparence à utiliser.</b> - - - - Skin - Thème - - - - ... - ... - - - - Skin file to use - Fichier de thème à utiliser - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. - <b>Ceci spécifie quel thème Mumble devrait utiliser.</b><br />Le thème est un fichier de style appliqué à un contrôle basique. - - - Use Horizontal Splitter - Utiliser un séparateur horizontal - - - Use horizontal or vertical splitter for the main window - Utiliser un séparateur horizontal ou vertical pour une même fenêtre - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>Si renseigné, les joueurs seront indiquées ci-dessus dans le sous-canal.</b><br />Un redémarrage de Mumble est requis pour voir le changement. - - - Expand All Channels - Étendre tout les canaux - - - Expand all channels when connecting - Etendre tout les canaux à la connection - - - <b>If set, all channels will be expanded by default when you connect to a server.</b> - <b>Si coché, tous les salons seront étendus par défaut quand vous vous connecterez à un serveur</b> - - - - User Interface - Interface - - - - Choose skin file - Choisir le fichier thème - - - - Players above Channels - Joueurs au dessus des salons - - - - List players above subchannels (requires restart). - Liste les joueurs au dessus des sous-salons ( nécessite un redémarrage ). - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of mumble is required to see the change. - <b>Si définis, les joueurs seront montrés au dessus des sous-cannaux dans la vue des cannaux.</b><br />Un redémarrage de mumble est nécessaire pour que ce changement fasse effet. - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - - - - - Form - Form - - - New version check - Vérifer nouvelle version - - - Check for updates on startup - Vérifier les mises a jour au démarrage - - - - None - Aucun - - - - Only with players - Seulement avec les joueurs - - - - All - Tous - - - - Expand - Elargir - - - - When to automatically expand channels - Quand étendre automatiquement les salons - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - - - - - Ask - Demander - - - - Do Nothing - Ne rien faire - - - - Move - Bouger - - - - Channel Dragging - Faire glisser le salon - - - - This changes the behaviour when moving channels. - - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - - - - - Ask whether to close or minimize when quitting Mumble. - - - - - <b>If set, will verify you want to quit if connected.<b> - - - - - Ask on quit while connected - - - - - Make the Mumble window appear on top of other windows. - Permettre à Mumble d'apparaitre au dessus des autres fenêtres. - - - - <b>This makes the Mumble window a topmost window.</b> - - - - - Always On Top - Toujours au dessus - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - - - - - Hide in tray when minimized - Caché dans la barre des tâches quand il est réduit - - - Show all configuration items - Afficher tout les outils de configuration - - - Expert Config - Configuration avancée - - - - Hide the main Mumble window in the tray when it is minimized. - Caché la fenêtre principale de Mumble dans la barre des taches quand il est réduit. - - - - MainWindow - - - Welcome to Mumble. - Bienvenue sur Mumble. - - - - - Root - Racine - - - - &Quit Mumble - &Quitter Mumble - - - - Closes the program - Ferme le programme - - - - Exits the application. - Quitte l'application. - - - Ctrl+Q - Quit - Quitter - - - - &Connect - &Connexion - - - - Open the server connection dialog - Ouvrir la fenêtre de connexion du serveur - - - - Shows a dialog of registered servers, and also allows quick connect. - Voir une fenêtre des serveurs enregistrés, et également autoriser la connexion rapide. - - - - &Disconnect - &Déconnexion - - - - Disconnect from server - Déconnexion du serveur - - - - Disconnects you from the server. - Vous avez été du serveur. - - - - &Ban lists - Listes des &bannis - - - - Edit ban lists on server - Editer la liste des bannis du serveur - - - - This lets you edit the server-side IP ban lists. - Éditer la liste d'IP bannies stockée sur le serveur. - - - - &Kick - &Expulser - - - - Kick player (with reason) - Expulser joueur (avec raison) - - - - Kick selected player off server. You'll be asked to specify a reason. - Éjecte le joueur sélectionné. Il vous sera demandé de spécifier une raison. - - - - &Ban - &Bannir - - - - Kick and ban player (with reason) - Expulser et bannir joueur (avec raison) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Expulser et bannir un joueur du serveur. Vous devrez spécifier une raison. - - - - &Mute - &Muet - - - - Mute player - Rendre le joueur muet - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Rend muet ou rend la parole à un joueur du serveur. Rendre la parole à un sourd lui rendra également l'ouie. - - - - &Deafen - Ren&dre sourd - - - - Deafen player - Rend le joueur sourd - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Rend sourd ou rend l'ouïe à un joueur du serveur. Rendre un joueur sourd va aussi le rendre muet. - - - - &Local Mute - Ne plus &l'écouter - - - Mute or unmute player locally. - Ne plus écouter ou écouter à nouveau un joueur du serveur. - - - - &Add - &Ajouter - - - - Add new channel - Ajouter un nouveau canal - - - - This adds a new sub-channel to the currently selected channel. - Ceci ajoute un nouveau sous-canal au canal actuellement choisi. - - - - &Remove - &Supprimer - - - - Remove channel - Supprimer canal - - - - This removes a channel and all sub-channels. - Ceci supprime un canal et tout ses sous-canaux. - - - - &Edit ACL - &Editer LCA - - - - Edit Groups and ACL for channel - Editer groupe et LCA pour le canal - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Ceci ouvre la fenêtre de groupe et LCA pour le canal, pour contrôler les permissions. - - - - &Rename - - - - - &Change Description - - - - - Changes the channel description - - - - - This changes the description of a channel. - - - - - &Link - &Lier - - - - Link your channel to another channel - Lier votre channel à un autre canal - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Lie le canal actuel avec le canal séplectionné. S'ils ont la permission de parler dans l'autre canal, les joueurs pourront s'entendre entre eux. Ce lien est permanent et demeurera jusqu'à ce qu'il soit désactivé manuellement ou que le serveur soit redémarré. Veuillez consulter les raccourcis relatifs à la fonction « appuyez-pour-lier ». - - - &Unlink - &Délier - - - - Unlink your channel from another channel - Délie votre canal d'un autre canal - - - - This unlinks your current channel from the selected channel. - Délie votre canal actuel du canal sélectionné. - - - - Unlink &All - Délier &Tous - - - - Unlinks your channel from all linked channels. - Délie votre canal de tous les autres canaux liés. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Délie le canal actuel (pas celui qui est sélectionné) de tous les autres canaux liés. - - - - &Reset - &Remettre à zéro - - - - Reset audio preprocessor - Remet à zéro le pré-processeur audio - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Remet à zéro le pré-processeur audio, en incluant l'annulation du bruit, le volume automatique et la détection de l'activité vocale. Si quelque chose a soudainement perturbé lenvironnement audio (si le microphone tombe par exemple) et que ce n'est que temporaire, utilisez cette fonctionalité pour éviter d'avoir à attendre que le pré-processeur audio se ré-étalone. - - - - &Mute Self - Devenir &muet(te) - - - - Mute yourself - Se rendre muet(te) - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Se rendre muet(te) ou non. Lorsque vous êtes muet(te), vou nenvoyez pas de données au serveur. Enlever le mode muet alors que vous êtes en mode sourd enlèvrera également le mode sourd. - - - - &Deafen Self - Devenir sour&d(e) - - - - Deafen yourself - Se rendre sourd(e) - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Se rendre sourd(e) ou non. Vous rendre sourd(e) vous rendra aussi muet(te). - - - - &Text-To-Speech - Syn&thèse vocale - - - - Toggle Text-To-Speech - Activer/Désactiver la synthèse vocale - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Active ou désactive le moteur de voix de synthèse. Seulement les messages activés pour TTS dans la fenêtre de configuration seront entendus. - - - - S&tatistics - &Statistiques - - - - Display audio statistics - Affiche les statistiques audio - - - - Pops up a small dialog with information about your current audio input. - Affiche une petit fenêtre d'information sur votre sortie audio actuelle. - - - - Forcibly unlink plugin - Forcer la désactivation du plugin - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Force le plugin actuel à se désactiver, ce qui est utile s'il lit des données erronées. - - - - &Settings - Paramètre&s - - - - Configure Mumble - Configurer Mumble - - - - Allows you to change most settings for Mumble. - Permet de change la plupart des paramètres de Mumble. - - - - &What's This? - &Qu'est-ce que c'est ? - - - - Enter What's This? mode - Entrer dans le mode « Qu'est-ce que c'est ? » - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Cliquez sur ce bouton pour entre dans le mode « Qu'est-ce que c'est ? ». Votre curseur se changera en point d'interrogation. Cliquez alors sur n'importe quel bouton, choix de menu ou zone pour voir apparaitre une une description de son utilité. - - - - &About - &A propos - - - - Information about Mumble - Informations sur de Mumble - - - - Shows a small dialog with information and license for Mumble. - Affiche une petite fenêtre d'information et la licence de Mumble. - - - - About &Speex - &Speex - - - - Information about Speex - Informations sur Speex - - - - Shows a small dialog with information about Speex. - Affiche une petite fenêtre d'information sur Speex. - - - &About Qt - &A propos de Qt - - - - Information about Qt - Informations sur Qt - - - - Shows a small dialog with information about Qt. - Affiche une petite fenêtre d'information sur Qt. - - - - Check for &Updates - Mises à jo&ur - - - - Check for new version of Mumble - Vérifier les nouvelles versions de Mumble - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - See connecte au site web de Mumble et vérifie si une nouvelle version est disponible et vous propose un lien de téléchargement approprié le cas échéant. - - - - Mumble -- %1 - Mumble -- %1 - - - Log of messages - Journal des messages - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Affiche tout l'ativité récente. Les connexion aux serveurs, les messages d'erreurs et d'information sont affichés ici. - - - - &Server - &Server - - - - &Player - &Joueur - - - - &Channel - &Canal - - - - &Audio - Au&dio - - - - C&onfigure - C&onfigurer - - - - &Help - &Aide - - - - Push-to-Talk - Global Shortcut - Appuyez-pour-parler - - - - Push and hold this button to send voice. - Global Shortcut - - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - - - - - Reset Audio Processor - Global Shortcut - RàZ processeur audio - - - - Toggle Mute Self - Global Shortcut - Activer le mode muet pour soi - - - - Toggle self-mute status. - Global Shortcut - - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - - - - - Toggle Deafen Self - Global Shortcut - Activer la surdité pour soi - - - - Toggle self-deafen status. - Global Shortcut - - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - - - - - Unlink Plugin - Global Shortcut - Désactiver le plugin - - - - Force Center Position - Global Shortcut - Forcer la position centrale - - - - Chan Parent - Global Shortcut - Canal parent - - - - Chan Sub#%1 - Global Shortcut - Sous salon #%1 - - - - Chan All Subs - Global Shortcut - Tous les Sous Salon - - - - Push-to-Mute - Global Shortcut - Push-to-Mute - - - - Join Channel - Global Shortcut - Rejoindre le canal - - - - Toggle Overlay - Global Shortcut - Activer/Désactiver l'overlay - - - - Toggle state of in-game overlay. - Global Shortcut - - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - - - - - Alt Push-to-Talk - Global Shortcut - Alternative Push-to-Talk - - - - Kicking player %1 - Expulsion du joueur %1 - - - - - Enter reason - Entrez la raison - - - - Banning player %1 - Bannissement du joueur %1 - - - - Mumble - Mumble - - - - - Channel Name - Nom du canal - - - - Are you sure you want to delete %1 and all its sub-channels? - Etes-vous sûr(e) de vouloir supprimer %1 et tous ses sous-canaux ? - - - - Unmuted and undeafened. - N'est pas sourd(e) et muet(te). - - - - Unmuted. - N'est pas muet (te). - - - - Muted. - Muet(te). - - - - Muted and deafened. - Sourd(e) et muet(te). - - - - Deafened. - Sourd(e). - - - - Undeafened. - N'est pas sourd(e). - - - - About Qt - A propos de QT - - - - Joining %1. - %1 rejoint le serveur. - - - Connected to server. - Connecté au serveur. - - - - Server connection failed: %1. - La connexion au serveur à échoué : %1. - - - - Disconnected from server. - Déconnecté du serveur. - - - - Reconnecting. - Reconnexion. - - - - Joined server: %1. - %1 a rejoint le serveur. - - - - Left server: %1. - %1 a quitté le serveur. - - - - %1 is now muted and deafened. - %1 est maintenant sourd(e) et muet(te). - - - - %1 is now muted. - %1 est maintenant muet(te). - - - - %1 is now unmuted. - %1 n'est plus muet(te). - - - - - server - serveur - - - - You were muted by %1. - %1 vous a rendu muet(te). - - - - You were unmuted by %1. - %1 vous a rendu le droit à la parole. - - - - %1 muted by %2. - %2 a rendu %1 muet(te). - - - - %1 unmuted by %2. - %1 n'est plus muet (%2). - - - - You were deafened by %1. - %1 vous a rendu sourd(e). - - - - You were undeafened by %1. - %1 vous a rendu le droit à la parole et à l'écoute. - - - - %1 deafened by %2. - %1 a été rendu sourd et muet par %2. - - - - %1 undeafened by %2. - %1 n'est plus sourd et muet (%2). - - - - You were kicked from the server by %1: %2. - Vous avez été expulsé(e) du serveur par %1 : %2. - - - - %3 was kicked from the server by %1: %2. - %3 a été expulsé(e) du serveur par %1 : %2. - - - - You were kicked and banned from the server by %1: %2. - Vous avez été expulsé(e) et banni(e) du serveur par %1 : %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 a été expulsé(e) et banni(e) du serveur par %1 : %2. - - - - You were moved to %1 by %2. - - - - - %1 left channel. - %1 a quitté le canal. - - - - %1 moved out by %2 to %3. - - - - - %1 moved in by %2 from %3. - - - - %1 moved out by %2. - %1 a été sorti(e) du canal par %2. - - - - %1 entered channel. - %1 est entré(e) dans le canal. - - - %1 moved in by %2. - %1 a été déplacé(e) dans le canal par %2. - - - - Server connection rejected: %1. - Connexion au serveur rejetée : %1. - - - - Denied: %1. - Refusé : %1. - - - - Send Messa&ge - Envoyer un messa&ge - - - - Send a Text Message - Envoyer un message textuel - - - Send a text message to another user. - Envoyer un message textuel à un autre utilisateur. - - - - Sending message to %1 - Envoi du message à %1 - - - Enter message - Tappez votre message - - - - - To %1: %2 - À %1: %2 - - - - - Message to %1 - Message à %1 - - - - Invalid username - Nom d'utilisateur invalide - - - - You connected with an invalid username, please try another one. - Vous vous êtes connectés avec un nom d'utilisateur invalide, veuillez en essayer un autre. - - - - That username is already in use, please try another username. - Ce nom d'utilisateur est déjà utilisé, veuillez essayer un autre nom d'utilisateur. - - - - Wrong password - Mauvais mot de passe - - - - Wrong password for registered users, please try again. - Mauvais mot de passe pour l'utilisateur enregistré, veuillez essayer à nouveau. - - - - Wrong server password for unregistered user account, please try again. - Mauvais mot de passe de serveur pour un utilisateur non enregistré, veuillez essayer à nouveau. - - - - From %1: %2 - De %1 : %2 - - - - Message from %1 - Message de la part de %1 - - - - Sends a text message to another user. - Envoyer un message textuel à un autre utilisateur. - - - - &Audio Wizard - Assistant &Audio - - - - Start the audio configuration wizard - Démarre l'assistant de configuration audio - - - - This will guide you through the process of configuring your audio hardware. - Ceci vous guidera dans la configuration de votre matériel audio. - - - - SSL Verification failed: %1 - Vérification SSL échoué: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>ATTENTION:</b>Le serveur présente un certificat différent de celui stocké. - - - - Sever presented a certificate which failed verification. - Le serveur présente un certificat qui a une vérification invalide. - - - - &Information - &Information - - - - Show information about the server connection - Afficher des informations sur la connexion avec le serveur - - - - This will show extended information about the connection to the server. - Ceci affiche des informations supplémentaires sur la connexion au serveur. - - - - Opening URL %1 - Ouvrir l'URL %1 - - - - URL scheme is not 'mumble' - - - - - Connecting to %1 - Connexion à %1 - - - - Enter username - Entrer le nom d'utilisateur - - - - Mumble Server Information - Mumble Serveur Information - - - - - &View Certificate - &Voir certificat - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br />Les erreurs de ce certificat sont les suivantes: </p><ol>%2</ol><p>Voulez-vous quand même accepter ce certificat ?<br />(Il sera également stocké et ne vous sera pas redemandé.)</p> - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - - - - - Voice channel is sent over control channel. - - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - - - - - UDP Statistics - Statistiques UDP - - - - To Server - Au serveur - - - - From Server - Du serveur - - - - Good - Bon - - - - Late - Tardif - - - - Lost - Perdu - - - - Resync - Resynchronise - - - - Change description of channel %1 - - - - - Sending message to channel %1 - Envoyé un message au canal %1 - - - - Sending message to channel tree %1 - Envoyé un message à l'arborescence du canal %1 - - - - To tree %1: %2 - A l'arborescence %1: %2 - - - - Message to tree %1 - Message à l'arborescence %1 - - - - Ctrl+Q - Ctrl+Q - - - - Mute player locally - Ne plus écouter le joueur localement - - - - Mute or unmute player locally. Use this on other players in the same room. - Rendre muet ou rendre la parole à un joueur localement. A utiliser sur les autres joueurs dans le même salon. - - - &Rename Channel - &Renommez canal - - - - Renames the channel - Renomme le canal - - - - This renames a channel. - Ceci renomme le canal. - - - Silence loudspeakers - Silence haut-parleurs - - - - About &Qt - À propos de &Qt - - - - Sends a text message to all users in a channel. - Envoyer un message texte à tous les utilisateurs dans le canal. - - - - Send &Tree Message - Envoyer un message à l'&Arborescence - - - - Send message to channel tree. - Envoyer un message à l'arborescence du canal. - - - - This sends a text message to a channel and it's subchannels. - Ceci envoi un message au canal et c'est sous-canaux. - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - La bande passante du serveur est de maximum %1 kbit/s. La qualité audio doit être réajusté. - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - C'est la première fois que vous lancez Mumble. <br /> Souhaitez-vous passer par l'Assistant audio pour configurer votre carte son? - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>Bande passante audio</h2><p>Maximum %1 kbit/s<br />Actuel %2 kbit/s (Qualité %3)</p> - - - - Connected to server %1. - Connecté au serveur %1. - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - Mumble est actuellement connecté à un serveur. Voulez vous le fermé ou le réduire dans la barre des tâches? - - - - Close - Fermer - - - - - Minimize - Réduire - - - - &Window - &Fenêtre - - - - Ctrl+M - Ctrl+M - - - Ctrl+W - Ctrl+W - - - - Toggle Minimal - Global Shortcut - - - - - &Minimal View - Vue &Minimale - - - - Toggle minimal window modes - Basculer l'interface en mode minimal - - - - This will toggle minimal mode, where the log window and menu is hidden. - Cela basculer en mode minimal, où la fenêtre et le menu est caché. - - - - Volume Up (+10%) - Global Shortcut - Augmenter volume (+10%) - - - - Volume Down (-10%) - Global Shortcut - Baisser le volume (-10%) - - - - Clear - - - - - Log - - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - - - - - &Unlink - Channel - &Délier - - - - &Unlink - Plugin - &Délier - - - - Server - message from - Serveur - - - &Quit - &Quitter - - - - Hide Frame - - - - - Toggle showing frame on minimal window - - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - - - - - NetworkConfig - - - Network - Réseau - - - - Form - Form - - - - Connection - Connexion - - - - Use TCP compatibility mode - Use TCP compatability mode - Utiliser le mode de compatibilité TCP - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Activer le mode de compatibilité TCP</b>.<br />Cela permet d'utiliser Mumble uniquement avec le protocole TCP pour communiquer avec le serveur. Cette initiative augmente l'utilisation de la bande passante et causer la perte des paquets ainsi produire des pauses dans la communication, donc ceci ne devrait être utilisée que si vous ne pouvez pas utiliser les paramètres par défaut (qui utilise pour la voix UDP et TCP pour le contrôle). - - - - Use TCP mode - Utilise le mode TCP - - - - Reconnect when disconnected - Reconnexion quand vous êtes déconnecté - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Se reconnecter quand vous êtes déconnecté</b>.<br />Mumble essaiera automatiquement de se reconnecter après dix secondes si la connexion échoue. - - - - Reconnect automatically - Reconnexion automatique - - - - Proxy - Proxy - - - - Type - Type - - - - Type of proxy to connect through - Type de proxy a utiliser - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - - - - - Direct connection - Connexion directe - - - - HTTP(S) proxy - HTTP(S) proxy - - - - SOCKS5 proxy - SOCKS5 proxy - - - - Hostname - Nom d'hôte - - - - Hostname of the proxy - Nom d'hôte du proxy - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>Nom d'hôte du proxy.<b><br />Ce champ spécifie le nom d'hôte du proxy que vous souhaitez utiliser. - - - - Port - Port - - - - Port number of the proxy - Numéro de port du proxy - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>Numéro du port du proxy.</b><br />Ce champ spécifie le numéro de port du serveur proxy sur lequel il écoute. - - - - Username - Nom d'utilisateur - - - - Username for proxy authentication - Nom d'utilisateur à utiliser pour l'authentification - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Nom d'utilisateur à utiliser pour l'authentification sur le proxy .</b><br />Dans le cas ou le proxy n'utilise pas d'authentification, ou si vous voulez vous connecté en tant qu'anonyme, simplement laissez le champ vide. - - - - Password - Mot de passe - - - - Password for proxy authentication - Mot de passe pour l'authentification sur le proxy - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Mot de passe à utiliser pour l'authentification sur le proxy .</b><br />Dans le cas ou le proxy n'utilise pas d'authentification, ou si vous voulez vous connecté en tant qu'anonyme, simplement laissez le champ vide. - - - - Mumble services - Services de Mumble - - - - Check for updates on startup - Vérifier les mises a jour au démarrage - - - - Submit anonymous statistics to the Mumble project - Soumettre des statistique anonyme au projet Mumble - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - - - - - Submit anonymous statistics - Envoyer des statistiques anonymes - - - - OSSConfig - - OSS - OSS - - - %1ms - %1ms - - - Device selection - Sélectionner un périphérique - - - Input - Entrée - - - Device to use for microphone - Périphérique à utiliser pour le microphone - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Spécifie quel périphérique devrait être utilisé par mumble. Le périphérique <i>default</i> est ce que vous avez configuré dans alsaconfig, les périphériques <i>hwplug</i> sont les périphériques accessible par le mixer d'ALSA et les périphériques <i>hw</i> sont les adresses brut du matériel. À moins que votre carte son ne supporte le mixage matériel, en utilisant les périphériques <i>hw</i>, vous excluerez tout autre programme utilisant l'audio.. - - - Output - Sortie - - - Device to use for speakers/headphones - Périphérique a utiliser pour les enceintes/casques - - - Output Options - Options de sortie - - - Output Delay - Retard de sortie - - - Amount of data to buffer for OSS - Quantité de données du tampon pour OSS - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Spécifie la quantité de données à mettre en cache dans le tampon de sortie. Essayez différentes valeurs et mettez la plus basse qui ne cause pas de rapides décalages du son. - - - This set which device mumble should use. The <i>default</i> device is your primary sound device. - Ceci spécifie quel périphérique est utilisé dans mumble. Le périphérique par <i>defaut</i> est votre carte son principale. - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the August 2006 updated version of DX9.0c - Impossible de charger la librairie d'overlay. Cela signifie que : -- la librairie ( mumble_ol.dll ) n'a pas été trouvée dans le répertoire depuis lequel vous avez lancé Mumble. -- vous êtes sur une versions de windows antérieure à XP SP2 -- vous n'avez pas fait la mise à jour d'Aout 2006 DX9.0c - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - Impossible de charger la librairie d'overlay. Cela signifie que :- la librairie ( mumble_ol.dll ) n'a pas été trouvée dans le répertoire depuis lequel vous avez lancé Mumble.- vous êtes sur une versions de windows antérieure à XP SP2- vous n'avez pas fait la mise à jour de Juin 2007 DX9.0c - - - - OverlayConfig - - Options - Options - - - Position - Position - - - Font - Police - - - Enable Overlay - Activer l'overlay - - - Enable overlay. - Activer l'overlay. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - Spécifie si l'overlay doit être activé ou non. Cette option est seulement vérifiée si des applications D3D9 sont démarrées, donc, vérifiez que Mumble fonctionne et que cette option avant de lancer une application.<br />Veuillez noter que si vous démarez une application après avoir lancé Mumble ou que vous désactivez l'overlay pendant qu'il fonctionne, il n'y a pas de moyen sûr de relancer l'overlay sans relancer l'application. - - - No one - Personne - - - Only talking - Parlant uniquement - - - Everyone - Tout le monde - - - Show - Afficher - - - Who to show on the overlay - Qui montrer sur l'overlay - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>Définis qui montrer en jeu dans l'overlay.</b><br />Si de nombreuses personnes sont connectées sur le même salon, la liste de l'overlay peut être très longue. Utilisez ça pour la raccourcir.<br /><i>Personne</i> - Ne montre personne ( mais laisse l'overlay fonctionner ).<br /><i>Parlant uniquement</i> - Ne montre que les gens qui parlent.<br /><i>Tout le monde</i> - Montre tout le monde. - - - Always Show Self - Toujours s'afficher soi même - - - Always show yourself on overlay. - Toujours vous montrer sur l'overlay. - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Spécifie si vous voulez vous affichez dans l'overlay ou non. C'est utile si vous n'êtes pas en train de montrer tout le monde, car vous pourrez voir votre propre status, donc savoir si vous parlez, si vous êtes sourd ou muet. - - - Grow Left - Aggrandir vers la gauche - - - Let overlay grow to the left - Laisser l'overlay s'aggrandir vers la gauche - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - L'overlay tente de rester aussi petit que possible à la position que vous avez sélectionné. Autorise l'overlay à s'aggrandir sur la gauche si besoin. - - - Grow Right - Aggrandir vers la droite - - - Let overlay grow to the Right - Laisser l'overlay s'aggrandir vers la droite - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the Right if needed. - L'overlay tente de rester aussi petit que possible à la position que vous avez sélectionné. Autorise l'overlay à s'aggrandir sur la droite si besoin. - - - Grow Up - Aggrandir vers le haut - - - Let overlay grow upwards - Laisser l'overlay s'aggrandir vers le haut - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the top if needed. - L'overlay tente de rester aussi petit que possible à la position que vous avez sélectionné. Autorise l'overlay à s'aggrandir vers le haut si besoin. - - - Grow Down - Aggrandir vers le bas - - - Let overlay grow downwards - Laisser l'aggrandir vers le bas - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow towards the bottom if needed. - L'overlay tente de rester aussi petit que possible à la position que vous avez sélectionné. Autorise l'overlay à s'aggrandir vers le bas si besoin. - - - X-Position of Overlay - Position X de l'Overlay - - - This sets the relative X position of the overlay. - Définis la position relative de l'overlay sur l'axe X. - - - Y-Position of Overlay - Position Y de l'Overlay - - - This sets the relative Y position of the overlay. - Définis la position relative de l'overlay sur l'axe Y. - - - Current Font - Police actuelle - - - Set Font - Définir la police - - - Maximum width of names. - Largeur marximum des noms. - - - This sets the maximum width of names shown, relative to the height. If you set this to 100%, no line of text will be wider than it is high. At 500%, no line will be more than 5 times wider than its height, and so on. - Affecte la largeur maximum des noms affichés relativement à leur hauteur. Si vous mettez cette valeur à 100%, aucune ligne de texte ne sera plus large que haute. A 500%, aucune ligne ne sera 5 fois plus grande que sa hauteur, et ainsi de suite. - - - Maximum width - Largeur maximum - - - Change - Changer - - - Color for players - Couleur des joueurs - - - Color for talking players - Couleur des joueurs qui parlent - - - Color for alt-talking players - Couleur des joueurs qui ne parlent pas - - - Color for Channels - Couleur des canaux - - - Color for active Channels - Couleur des canaux actifs - - - Overlay - Overlay - - - Maximum height of names. - Hauteur maximale des noms. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - Spécifie la hauteur maximale des noms affichés, relatif à la taille de l'écran. Si vous avez une fenêtre 3D de 800 pixels de haut et que vous définissez 5%, chaque nom sera haut de 40 pixels. Il est à noter que, peu importe ce que vous avez défini, les noms ne feront pas plus de 60 pixels de haut. - - - Maximum height - Hauteur maximum - - - Show User Textures - Montrer les textures des utilisateurs - - - Show User custom textures instead of text on the overlay. - Montrer les textures des utilisateurs au lieu du texte de l'overlay. - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - Ceci définit le téléchargement et l'utilisation des textures personnalisées pour les utilisateurs enregistrés. Si désactivé, l'esquisse de texte ordinaire sera utilisé à sa place. - - - Show no one - Afficher aucun - - - Show only talking - Montrer seulement ceux qui parlent - - - Show everyone - Montrer tout le monde - - - Form - Form - - - TextLabel - TextLabel - - - - PAAudioConfig - - Input Device - Périphérique d'entré - - - Output Device - Périphérique de sortie - - - - PlayerModel - - Name of player - Nom du joueur - - - Name of channel - Nom du canal - - - Player flags - Attributs du joueur - - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - Il s'agit d'un joueur connecté au serveur. L'icône située à gauche du lecteur indique si elles sont ou non en train de parler: <br /><img src="skin:talking_on.png" /> En train de parler<br /><img src="skin:talking_off.png" /> Ne parlant pas - - - - This is a channel on the server. Only players in the same channel can hear each other. - Canal du serveur. Seuls les joueurs dans le même canal pourront s'entendre. - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - - - - - Name - Nom - - - - Flags - Attributs - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - Etes vous sur de vouloir déplacer ce salon? - - - - PluginConfig - - - Options - Options - - - - - Plugins - Plugins - - - - Link to Game and Transmit Position - Lier au jeu et transmettre la position - - - - Enable plugins and transmit positional information - Activer les plugins et transmettre les informations de position - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - Active le plugin permettant aux jeux supportés de transmettre la position du joueur dans chaque paquet de voix. Cela permet aux autres joueurs d'entendre votre voix dans le jeu dans la position de votre personnage par rapport aux autres. - - - - &Reload plugins - &Recharger les plugins - - - - Reloads all plugins - Recharge tous les plugins - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - Rechercher et recharger les plugins. Utilisez cette fonction si vous venez d'ajouter ou de modifier un plugin dans le répertoire des plugins. - - - - &About - &A propos - - - - Information about plugin - Informations sur le plugin - - - - This shows a small information message about the plugin. - Affiche une rapide introduction au fonctionnement du plugin. - - - - &Configure - &Configurer - - - - Show configuration page of plugin - Afficher la page de configuration du plugin - - - - This shows the configuration page of the plugin, if any. - Affiche la page de configuration du plugin si elle existe. - - - Mumble - Mumble - - - - Plugin has no configure function. - Le plugin n'a pas de fonction « configure » (configurer). - - - - Plugin has no about function. - Le plugin n'a pas de fonction « about » (à propos). - - - - Form - Form - - - - Plugins - - Plugin %1 lost link. - Le plugin %1 est désactivé. - - - - %1 lost link. - %1 est désactivé. - - - Plugin %1 linked. - Le plugin %1 est activé. - - - - %1 linked. - %1 est activé. - - - - PortAudioSystem - - - Default Device - Périphérique par défaut - - - - PulseAudioConfig - - PulseAudio - Pulseaudio - - - %1ms - %1ms - - - Device selection - Selection du périphérique - - - Input (Microphone) - Entrée (Microphone) - - - Device to use for microphone - Périphérique à utiliser pour le microphone - - - This set which source mumble should use for the microphone. The <i>default</i> device means to use the PulseAudio defaults. - Ceci renseigne quelle source mumble doit utiliser pour le microphone. Le périphérique par <i>defaut</i> à utiliser lePulseAudio. - - - Output - Sortie - - - Device to use for speakers/headphones - Périphérique à utiliser pour les enceintes/casques - - - Enable echo cancellation - Activer l'annulation de l'echo - - - This enables echo cancellation. Don't enable this unless you are listening on speakers; for headphones it will cause audio degradation. - Ceci active l'annulation de l'echo.Ne pas activer si vous écouter avec des enceintes; Pour les casques cela peut causer des dégradations de la qualité audio. - - - Use echo cancellation - Utiliser l'annulation de l'echo - - - Output Options - Options de sortie - - - Output Delay - Retard de sortie - - - Amount of data to buffer for ALSA - Quantité de données du tampon pour ALSA - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Spécifie la quantité de données à mettre en cache dans le tampon de sortie. Essayez différentes valeurs et mettez la plus basse qui ne cause pas de rapides décalages du son. - - - - PulseAudioSystem - - - Default Input - Entrée par défaut - - - - Default Output - Sortie par défaut - - - - ShortcutActionWidget - - - Unassigned - - - - - ShortcutDelegate - - - Unassigned - - - - - ShortcutKeyWidget - - - Press Shortcut - Appuyer sur un raccourci clavier - - - - TextMessage - - - Message to send - Message à envoyer - - - - Preview - Prévisualisation - - - Disables html formating - Désactivé le format html - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble - Mumble - - - Mumble failed to retrieve version information from the SourceForge server. - Mumble n'a pas pu récupérer les informations de version depuis le serveur de SourceForge. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - - - - - Certificate chain - - - - - Certificate details - Détails du certificat - - - - %1 %2 - %1 %2 - - - - - Common Name: %1 - Nom courant: %1 - - - - - Organization: %1 - Organistaion: %1 - - - - Subunit: %1 - - - - - - Country: %1 - Pays: %1 - - - - - Locality: %1 - Localité: %1 - - - - - State: %1 - Pays: %1 - - - - Valid from: %1 - Valide depuis: %1 - - - - Valid to: %1 - Valide jusqu'a: %1 - - - - Serial: %1 - Serial: %1 - - - - Public Key: %1 bits %2 - Clé publique: %1 bits %2 - - - - RSA - RSA - - - - DSA - DSA - - - - Digest (MD5): %1 - Digest (MD5): %1 - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - Délivré par: - - - - Unit Name: %1 - Nom d'unité: %1 - - - - WASAPIConfig - - Input (Microphone) - Entrée (Microphone) - - - Output - Sortie - - - Enable echo cancellation - Activer l'annulation de l'echo - - - This enables echo cancellation. Don't enable this unless you are listening on speakers; for headphones it will cause audio degradation. - Ceci active l'annulation de l'echo.Ne pas activer si vous écouter avec des enceintes; Pour les casques cela peut causer des dégradations de la qualité audio. - - - Use echo cancellation - Utiliser l'annulation de l'echo - - - - WASAPISystem - - - Default Device - Périphérique par défaut - - - - XInputKeyWidget - - Press Shortcut - Pressez les touches du raccourci - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_it.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_it.ts --- mumble-1.2.3/src/mumble11x/mumble_it.ts 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_it.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,4990 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - Modifica ACL per %1 - - - - Deny - Nega - - - - Allow - Permetti - - - - Allow %1 - Permetti %1 - - - - Deny %1 - Nega %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Permette il privilegio %1. Se un privilegio è contemporaneamente permesso e negato, sarà negato.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Revoca il privilegio %1. Se un privilegio è contemporaneamente permesso e negato, sarà negato.<br />%2 - - - - Dialog - Dialogo - - - - &Groups - &Gruppi - - - - Group - Gruppo - - - - List of groups - Lista dei gruppi - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - Questi sono tutti i gruppi attualmente definiti per un canale. Per creare un nuovo gruppo, scrivi il nome e premi invio. - - - - Remove selected group - Cancella il gruppo selezionato - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Cancella il gruppo selezionato. Se un gruppo era eraditario, non verrà rimosso dalla lista, ma tutte le informazioni locali riguardanti il gruppo saranno cancellate. - - - - Remove - Rimuovi - - - - Inherit group members from parent - Eredita i membri del gruppo dal genitore - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Eredita tutti i membri di un gruppo dal padre, se un gruppo è marcato come <i>Ereditabile</i>nel canale padre. - - - - Inherit - Eredita - - - - Make group inheritable to sub-channels - Rendi un gruppo ereditabile ai sotto-canali - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Rende ereditabile un gruppo ai sotto-canali. Se un gruppo non è ereditabile, i sotto-canali saranno comunque liberi di creare un nuovo gruppo con lo stesso nome. - - - - Inheritable - Ereditabile - - - - Group was inherited from parent channel - Gruppo ereditato dal canale padre - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - Indica che un gruppo è stato ereditato dal canale padre. Non puoi modificare questa impostazione, è solo informativa. - - - - Inherited - Ereditato - - - - Members - Membri - - - - Add - Aggiungi - - - - Add to Remove - Aggiungi a Rimuovi - - - - Add member to group - Aggiungi membro al gruppo - - - - Type in the name of a player you wish to add to the group and click Add. - Inserisci il nome del giocatore che vuoi aggiungere al gruppo e premi Aggiungi. - - - - Remove member from group - Cancella un membro dal gruppo - - - - Type in the name of a player you wish to remove from the group and click Add. - Inserisci il nome del giocatore che vuoi cancellare dal gruppo e premi Add. - - - - &ACL - &ACL - - - - Active ACLs - Attiva gli ACL - - - - List of entries - Elenco di voci - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - Mostra tutte le voci attive su questo canale. Le voci ereditate dal canale padre verranno visualizzate in corsivo.<br />Le ACL sono valutate dall'alto al basso, cioè la priorità aumenta mentre ci si sposta verso il basso nell'elenco. - - - - Inherit ACL of parent? - Eredita ACL dal padre? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Imposta se le ACL provenienti dalla catena parentale dei canali sono applicate a questo oggetto. Solo quelle voci che sono contrassegnate nel padre come "Applica ai sotto-canali" saranno ereditate. - - - - Inherit ACLs - Eredita le ACL - - - - Move entry up - Sposta voce in su - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Sposta in su la voce nella lista. Dato che le voci vengono valutate in ordine, questo potrebbe cambiare le autorizzazioni attive per gli utenti. Non è possibile spostare una voce al di sopra di un ingresso ereditato, se proprio avete bisogno di farlo potete duplicare la voce ereditata. - - - - &Up - &Su - - - - Move entry down - Sposta la voce in giù - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Sposta in giù la voce nella lista. Dato che le voci vengono valutate in ordine, questo potrebbe cambiare le autorizzazioni attive per gli utenti. - - - - &Down - &Giù - - - - Add new entry - Aggiungi una voce - - - - This adds a new entry, initially set with no permissions and applying to all. - Aggiunge una nuova voce, inizialmente impostata senza permessi e applicata a tutti. - - - - &Add - &Aggiungi - - - - Remove entry - Cancella voce - - - - This removes the currently selected entry. - Cancella la voce selezionata. - - - - &Remove - &Cancella - - - - Context - Contestuale - - - Entry should apply to this channel - La voce dovrebbe valere per questo canale - - - - This makes the entry apply to this channel. - Applica la voce a questo canale. - - - - Applies to this channel - Applica a questo canale - - - - Entry should apply to sub-channels. - La voce dovrebbe applicarsi ai sotto-canali. - - - - This makes the entry apply to sub-channels of this channel. - Applica la voce ai sotto-canali di questo canale. - - - - Applies to sub-channels - Applica ai sotto-canali - - - - Permissions - Permessi - - - - User/Group - Utente/Gruppo - - - - Group this entry applies to - Gruppo di questa voce si applica a - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - Controlla a quale gruppo di utenti si applica questa voce.<br />Si noti che il gruppo è valutato nel contesto del canale in cui la voce è inserita. Ad esempio, il valore predefinito ACL sul canale Root dà il permesso <i>Scrivi</i> al gruppo <i>admin</i>. Questa voce, se ereditata da un canale, darà ad un utente i privilegi di scrittura se egli appartiene al gruppo <i>admin</i> in quel canale, anche se non apparteneva al gruppo <i>admin</i> nel canale in cui è nato l'ACL.<br />Se il nome di un gruppo inizia con un !, è negata ai suoi membri, e se inizia con una ~, è valutata nel canale in cui l'ACL è stata definita, al posto che nel canale in cui è stata attivata l'ACL. L'ordine è importante; <i>!~in</i> è valido, ma <i>~!in</i> non lo è.<br />Pochi particolari gruppi predefiniti sono i seguenti:<br /><b>all</b> - Corrisponderà a tutti.<b>auth</b> - Corrisponderanno tutti gli utenti autenticati.<br /><b>sub,a,b,c</b> - Utenti in a sotto-canali minimo <i>a</i> genitori comuni, e tra <i>b</i> e <i>c</i> canali verso il basso nella catena. Vedere il sito web per una documentazione più estesa su questo punto.<br /><b>in</b> - Utenti attualmente nel canale (scorciatoia di <i>sub,0,0,0</i>).<br /><b>out</b> - Gli utenti al di fuori del canale (scorciatoia di <i>!sub,0,0,0</i>).<br />Si noti che una voce si applica ad un utente o ad un gruppo, non a entrambi. - - - - User ID - ID Utente - - - - User this entry applies to - Utente a cui applicare questa voce - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - Controlla a quale utente si applica questa voce. Basta digitare il nome utente e premere invio per chiedere al server una corrispondenza. - - - - Entry should apply to this channel. - - - - - ALSAAudioInput - - - Default ALSA Card - Scheda ALSA predefinita - - - - Opening chosen ALSA Input failed: %1 - Fallita l'apertura dell'Input ALSA selezionato: %1 - - - - ALSAAudioOutput - - - Default ALSA Card - Scheda ALSA predefinita - - - - Opening chosen ALSA Output failed: %1 - Fallita l'apertura dell'Output ALSA selezionato: %1 - - - - ASIOConfig - - %1 (ver %2) - %1 (ver %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 ms -> %2 ms (%3 ms risoluzione) %4Hz - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 ms -> %2 ms (%3 ms risoluzione) %4Hz -- Non usabile - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - Inizializzazione di ASIO fallita: %1 - - - - - Failed to instantiate ASIO driver - Instanziazione del driver ASIO fallita - - - - ASIO - ASIO - - - - Form - Modulo - - - - Device selection - Selezione del dispositivo - - - - Device - Dispositivo - - - - Device to use for microphone - Dispositivo da usare per il microfono - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - Sceglie quale dispositivo interrogare. Devi comunque interrogare il dispositivo e selezionare quale canale usare. - - - - Query selected device - Interroga il dispositivo selezionato - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Interroga il dispositivo selezionato per i canali. Molti driver ASIO sono estremamente bacati, e interrogandoli potrebbero causare un crash dell'applicazione o del sistema. - - - - &Query - &Interroga - - - - Configure selected device - Configura il dispositivo selezionato - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Interroga il dispositivo selezionato. Molti driver ASIO sono estremamente bacati, e interrogandoli potrebbero causare un crash dell'applicazione o del sistema. - - - - &Configure - &Configura - - - - Capabilities - Funzionalità - - - - Driver name - Nome del driver - - - TextLabel - Etichetta testo - - - Buffersize - Dimensione del Buffer - - - - Configure input channels - Configura i canali di ingresso - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - Configurarerà i canali di ingresso per ASIO. Assicurarsi di selezionare almeno un canale come microfono e altoparlante. <i>Microfono</i> deve essere dove è collegato il microfono, e <i>Altoparlante</i> deve essere il canale che catturi <i>Cosa si sente</i>.<br />Ad esempio, con Audigy 2 ZS, una buona scelta per Microfono sarebbe <i>Mic L</i>mentre per gli altoparlanti dovrebbe essere <i>Mix L</i> e <i>Mix R</i>. - - - - Channels - Canali - - - - Microphone - Microfono - - - - <- - <- - - - - -> - -> - - - - Unused - Non usato - - - - Speakers - Altoparlanti - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - Devi selezionare almeno un microfono e un altoparlante per usare ASIO. Se hai bisogno solo il campionamento microfonico, usa DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - Apertura del dispositivo ASIO fallito. Non ci sarà nessun ingresso. - - - - AboutDialog - - - About Mumble - Informazioni su Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Una utility per la chat vocale per giocatori</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - &About Mumble - &Info su Mumble - - - - &License - &Licenza - - - - OK - OK - - - - AboutSpeexDialog - - - About Speex - Informazioni su Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Informazioni su Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>Questo programma usa Speex versione %1</p><p>Speex è usato per la cancellazione dell'eco, il filtraggio<br />del rumore, il rilevamento del parlato e per la compressione<br />della voce.</p> - - - - OK - OK - - - - AudioInput - - - Form - Modulo - - - - Interface - Interfaccia - - - - System - Sistema - - - - Input method for audio - Metodo di input per l'audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Metodo di ingrsso da utilizzare per l'audio.</b><br />Molto probabilmente vorrai usare DirectSound. - - - - Device - Dispositivo - - - Output method for audio - Metodo d'output per l'audio - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Metodo da utilizzare per l'output dell'audio.</b><br />Molto probabilmente vorrai usare DirectSound. - - - - Cancel Echo - Rimuovi l'Eco - - - - Transmission - Trasmissione - - - - &Transmit - &Trasmetti - - - - When to transmit your speech - Quando trasmettere la tua voce - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - Imposta quando la voce dovrebbe essere trasmessa.</b><br /><i>Continuamente</i>- Tutto il tempo<br /><i>Attivazione vocale</i>- Quando parli chiaramente.<br /><i>Premi-Per-Parlare</i>- Quando premi il pulsante sotto <i>Tasti di scelta rapida</i>. - - - - DoublePush Time - Tempo di DoppiaPremuta - - - - TextLabel - Etichetta testo - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Abilita l'imbeccata audio per il push to talk.</b><br />Attivandolo sentirete un breve segnale acustico quando il push-to-talk viene premuto e rilasciato. - - - - PTT Audio cue - PTT Imbeccata Audio - - - - Use SNR based speech detection - Usa il riconoscimento della voce basato su SNR - - - - Signal to Noise - Segnale Rumore - - - - Use Amplitude based speech detection. - Usa riconoscimento della voce basato sull'Ampiezza. - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b> Imposta di usare l'ampiezza per il rilevamento della voce.</b><br />In questa modalità, la forza grezza del segnale d'ingresso viene utilizzata per rilevara la voce. - - - - Amplitude - Ampiezza - - - - Voice &Hold - &Silenzio dopo - - - - How long to keep transmitting after silence - Per quanto tempo continua a trasmettere dopo l'inizio del silenzio - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Imposta per quanto tempo dopo un arresto nel discorso la trasmissione deve continuare.</b><br />Alzare se la tua voce viene tagliata quando si parla (si vede un lampeggio rapido dell'icona voce accanto al tuo nome).<br />Ha senso solo quando viene utilizzato con la trasmissione ad Attività Vocale. - - - - Silence Below - Silenzio Sotto - - - - Signal values below this counts as silence - Valore del Segnale sotto il quale conta come silenzio - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>Questo cursore imposta il valore di soglia per il rilevamento del discorso.</b><br />Usa questo insieme alla finestra delle statistiche audio per sintonizzare manualmente il cursore per i valori di soglia per l'individuazione del discorso. un ingresso al di sotto dei valori "Silenzio sotto" vieni sempre considerato come silenzio. Un ingresso al di sopra di "Voce sopra" viene considerato come voce. Un segnale compreso tra i due cursori conterà come voce se si stava parlando, ma non farà scattare di nuovo la voce. - - - - Speech Above - Voce Sopra - - - - Signal values above this count as voice - Valore del Segnale sopra il quale conta come voce - - - - Compression - Compressione - - - - &Quality - &Qualità - - - - Quality of compression (peak bandwidth) - Qualità di compressione (picco di banda) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Questo imposterà la qualità della compressione.</b><br />Questo determinerà quanta banda Mumble sarà autorizzato ad usare per l'audio in uscita. - - - - Audio per packet - Audio per pacchetto - - - - How many audio frames to send per packet - Quante parti dell'audio mandare per pacchetto - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Questo seleziona quante parti dell'audio dovrebbero essere messe in un pacchetto</b><br />Incrementando questo sarà incrementata la latenza della tua voce, ma ridurrà anche la banda richiesta. - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b> Questo mostra il picco della larghezza di banda utilizzata in uscita.</b><br /> Questo mostra la quantità del picco della larghezza di banda inviata dal tuo computer. Bitrate audio è il massimo bitrate (come si usa VBR) per i dati audio da soli. Posizione è il bitrate utilizzato per le informazioni sulla posizione. Carico è l'inquadratura e l'header del pacchetto IP (IP e UDP è il 75% del carico). - - - - Audio Processing - Elaborazione Audio - - - - Noise Suppression - Soppressione Rumore - - - - Noise suppression - Soppressione rumore - - - - Amplification - Amplificazione - - - - Maximum amplification of input sound - Massima amplificazione del segnale di ingresso - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Massima amplificazione di ingresso </b>. <br /> Mumble normalizza il volume in ingresso prima della compressione, e questo imposta quanto è consentito amplificare. <br /> Il livello attuale è continuamente aggiornato in base al suo attuale modello di intervento , ma non potrà mai andare al di sopra del livello indicato qui. <br /> Se le statistiche dell livello del <i>Volume del microfono</i> gravitano attorno al 100%, probabilmente si desidera impostare questo al 2,0 o più, ma se , come la maggior parte delle persone, non si riesce a raggiungere il 100%, impostalo molto al di sopra. <br /> Idealmente, impostare in modo che <i> Volume del microfono * Fattore di amplificazione> = 100 </i>, anche quando stai parlando veramente piano. <br /><br /> Si noti che non vi è nulla di male in questa impostazione di massima, ma Mumble inizierà raccogliendo le altre conversazioni se lasciarlo per l'auto-tune a quel livello. - - - - Current speech detection chance - Probabilità corrente di riconoscimento della voce - - - - Audible audio cue when push-to-talk is activated or deactivated - Barra dell'audio udibile quando premi per parlare è attivato o disattivato - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>Questo imposta l'individuazione del discorso con il rapporto segnale/rumore. </b> <br /> In questa modalità, l'ingresso è analizzato per qualcosa di simile a un segnale chiaro, e la chiarezza del segnale viene utilizzata per attivare il rilevamento del discorso. - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Questo visualizza le impostazioni correnti per il riconoscimento del parlato.</b><br />Puoi cambiare le impostazioni dalla finestra delle impostazioni o dall'Audio Wizard. - - - - Idle AutoMute - AutoMuto quando Inattivo - - - - How long to remain idle before auto-mute. - Per quanto tempo devi rimanere inattivo prima dell'auto-muto. - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - Stabilisce un timer di inattività. Se il timer scade senza che nessun audio venga inviato al server, verrai disattivato. - - - - Maximum bandwidth used for sending audio - Banda massima usata per inviare l'audio - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Questo imposta la quantità di rumore da eliminare.<b><br />Più alto sarà questo valore e più rumore sarà eliminato. - - - - Input device for audio - - - - - <b>This is the input device to use for audio.</b> - - - - - AudioInputDialog - - - Continuous - Continuo - - - - Voice Activity - Attività vocale - - - - Push To Talk - Premi per parlare - - - - Audio Input - Ingresso audio - - - - - %1 ms - %1 ms - - - - - Off - Spento - - - - %1 s - %1 s - - - - -%1 dB - -%1 dB - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Posizione %4, Sovraccarico %3) - - - - %1 min - %1 min - - - - AudioOutput - - - Form - Modulo - - - - Interface - Interfaccia - - - - System - Sistema - - - Input method for audio - Metodo di ingresso per l'audio - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Questo è il metodo di input da utilizzare per l'audio.</b><br />Molto probabilmente vorrai utilizzare DirectSound. - - - - Device - Dispositivo - - - - Output method for audio - Metodo d'uscita per l'audio - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Questo è il sistema d'uscita da utilizzare per l'audio.</b><br />Molto probabilmente vorrete utilizzare DirectSound. - - - - Positional Audio - Audio posizionale - - - - Audio Output - Uscita audio - - - - Default &Jitter Buffer - Default &Jitter Buffer - - - - Safety margin for jitter buffer - Margine di sicurezza per il jitter buffer - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>Imposta il minimo margine di sicurezza per il jitter buffer.</b><br />Tutto l'audio in ingresso è bufferizzato, e il jitter buffer cerca continuamente di tenere il buffer al minimo sostenibile dalla tua rete, in modo da avere una latenza quanto più bassa possibile. Imposta la dimensione minima del buffer da utilizzare. Se l'inizio delle frasi è molto jitterato, aumentare questo valore. - - - - TextLabel - Etichetta testo - - - - Volume - Volume - - - - Volume of incoming speech - Volume per la voce in ingresso - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>Regola il volume di ingresso della voce.</b><br />Si noti che se si aumenta oltre il 100%, l'audio verrà distorto. - - - - Output Delay - Ritardo d'uscita - - - - Amount of data to buffer - Quantità di dati da bufferizzare - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Imposta la quantità di dati da prebufferizzare nel buffer d'uscita. Sperimentare diversi valori e tenere al minimo che non causa un jitter veloce nel suono. - - - - The connected "speakers" are actually headphones. - Gli altoparlanti attualmente connessi sono delle cuffie. - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Imposta la distanza minima per i calcoli sonori. Il volume della voce degli altri giocatori non diminuirà fino a che non saranno almeno così lontani da voi. - - - - Factor for sound volume decrease - Fattore di decremento per il volume dei suoni - - - - Bloom - Fattore incremento - - - - Factor for sound volume increase - Fattore di incremento del volume sonoro - - - - How much should sound volume increase for sources that are really close? - Quanto dovrebbe aumentare il volume del suono per le sorgenti che sono veramente vicine? - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - Se impostato indica che non sono collegati degli altoparlanti, ma solo le cuffie. Questo è importante, in quanto gli altoparlanti solitamente sono di fronte a voi, mentre le cuffie sono direttamente a sinistra/destra. - - - - Headphones - Cuffie - - - - Minimum Distance - Distanza minima - - - - Minimum distance to player before sound volume decreases - Distanza minima dal giocatore prima che il volume del suono decresca - - - - Maximum Distance - Distanza massima - - - - Maximum distance, beyond which speech volume won't decrease - Massima distanza, dopo la quale il volume del discorso non decrescerà - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - Questo imposta la massima distanza per il calcolo del suono. Quando saranno più lontano di così il volume dei discorsi degli altri giocatori non decrescerà più. - - - - Minimum Volume - Volume minimo - - - - What should the volume be at the maximum distance? - Quale dovrebbe essere il volume alla massima distanza? - - - - Loopback Test - Test di Ricircolo - - - - Delay Variance - Varianza del Ritardo - - - - Variance in packet latency - Varianza della latenza dei pacchetti - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>Questo imposta la latenza del pacchetto per il test di riciclico locale. </b><br /> La maggior parte dell'audio contiene alcuni percorsi di latenza variabile. Questo permette di impostare le variabili per la modalità di test di riciclo. Ad esempio, se si imposta questo a 15ms, questo emula una rete con 20-35ms di latenza oppure con 80-95ms di latenza. La maggior parte delle connessioni di rete nazionale ha ancora una variazione di circa 5ms - - - - Packet Loss - Pacchetti Persi - - - - Packet loss for loopback mode - Pacchetti persi in modo ricircolo - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Imposta la perdita di pacchetti per la modalità di ricircolo.</b><br />Questo sarà il rapporto dei pacchetti persi. A meno che non ci sono dei picchi di banda in uscita o se c'è qualcosa che non va con la connessione di rete, questo sarà 0% - - - - &Loopback - &Ricircolo - - - - Desired loopback mode - Richiesto modo ricircolo - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>Consente uno dei modi di test di ricircolo.</b><br /><i>Nessuno</i> - Ricircolo disattivato<br /><i>Locale</i> - Emulare un server locale.<br /><i>Server</i> - Richiesta di ricircolo al server.<br />Si prega di notare che quando il ricircolo è abilitato, gli altri giocatori si sentiranno la tua voce. Questa impostazione non viene salvata all'uscita dall'applicazione. - - - - Other Applications - Altre applicazioni - - - - Volume of other applications during speech - Volume delle altre applicazioni durante il parlato - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>Diminuire il volume delle altre applicazioni durante il paralto.</b><br />Mumble supporta la diminuzione dell volume delle altre applicazioni durante la ricezione della voce. Imposta il volume relativo delle altre applicazioni quando stanno parlando gli altri. - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - AudioOutputDialog - - - None - Niente - - - - Local - Locale - - - - Server - Server - - - - Audio Output - Uscita Audio - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1% - - - - %1ms - %1ms - - - - - %1m - %1m - - - - AudioStats - - >1000ms - >1000ms - - - - Audio Statistics - Statistiche Audio - - - - Input Levels - Livelli di Ingresso - - - - Peak microphone level - Livello di picco del microfono - - - - Peak power in last frame - Picco di potenza nell'ultima trama - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - Mostra la potenza di picco nell'ultima trama (20 ms), ed è la stessa misura che si trova solitamente visualizzata come "potenza in ingresso". Si prega di ignorare questo aspetto e invece badare a <b>Potenza del microfono</b>, che è molto più costante e non tiene conto delle anomalie. - - - TextLabel - Etichetta testo - - - - Peak speaker level - Livello di picco degli altoparlanti - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Questo mostra la potenza di picco degli altoparlanti nel corso degli ultimi frame (20 ms). A meno che non si sta utilizzando un metodo di campionamento multi-canale (come ASIO), questo sarà 0. Se avete configurato una tale impostazione, e questo mostra ancora 0 mentre si sta riproducendo l'audio da altri programmi, la configurazione non funziona. - - - - Peak clean level - Livello di picco pulito - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. - Mostra la potenza di picco nell'ultima trama (20 ms) dopo tutti i processamenti. Idealmente, questa dovrebbe essere -96 dB quando non stai parlando. In realtà, un studio audio dovrebbe vedere -60 dB, e si spera che tu veda qualcosa intorno a -20 dB. Mentre stai parlando, questo dovrebbe salire tra -5 e -10 dB.<br />Se stai usando la cancellazione dell'eco, e aumenta a più di -15 dB quando non stai parlando, l'impostazione non funziona, e infastidirai gli altri giocatori con echi. - - - - Signal Analysis - Analisi del segnale - - - - Microphone power - Potenza del microfono - - - - How close the current input level is to ideal - Come scegliere il livello di ingresso attuale al valore ideale - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - Mostra come tenere l'ingresso corrente al volume ideale. Per regolare il livello del microfono, aprire il programma che usi per regolare il volume di registrazione, e guarda al valore mentre stai parlando.<br /><b>Parla forte, come faresti quando sei spaventato.</b><br />Regolare il volume fino a quando questo valore è vicino al 100%, ma assicurarsi che non va sopra. Se andasse sopra, probabilmente taglierai alcune parti del tuo parlato, che degraderà la qualità del suono. - - - - Signal-To-Noise ratio - Rapporto Segnale Rumore - - - - Signal-To-Noise ratio from the microphone - Rapporto Segnale Rumore dal microfono - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - E' il rapporto segnale-rumore (SNR) del microfono nell'ultima trama (20 ms). Mostra quanto è più forte la voce in confrontato con il rumore.<br />Se questo valore è inferiore a 1.0, c'è più rumore della voce nel segnale, e quindi la qualità è bassa.<br />Non vi è alcun limite al presente valore, ma non aspettatevi di vedere molto al di sopra 40-50 senza essere in uno studio audio. - - - - Speech Probability - Probabilità di parlato - - - - Probability of speech - Probabilità di parlato - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - E' la probabilità che l'ultima trama (20 ms) sia del parlato e non rumore ambiente.<br />L'attivazione vocale dipende da quando è corretta questo valore. Il trucco è che la parte centrale di una frase è sempre individuato come discorso, il problema è nelle pause tra le parole e l'inizio del discorso. E 'difficile distinguere un sospiro da una parola che comincia con la 'h'.<br />Se è in grassetto, significa che Mumble è attualmente in trasmissione (se connesso). - - - - Configuration feedback - Ritorno di configurazione - - - - Current audio bitrate - Banda audio attuale - - - - Bitrate of last frame - Banda dell'ultima trama - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - E' il bitrate audio dell'ultima trama compressa (20 ms), e come tale, salta su e giù mentre il VBR regola la qualità. Per regolare il bitrate di picco, regolare <b>Complessità della Compressione</b> nella finestra di dialogo Impostazioni. - - - - DoublePush interval - Intervallo di DoppiaPremuta - - - Time between last two PushToTalk presses - Intervallo tra le ultime due premute di PremiPerParlare - - - - Speech Detection - Riconoscimento del parlato - - - - Current speech detection chance - Probabilità di riconoscimento del parlato attuale - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Mostra l'attuale intervento di rilevamento della voce.</b><br />Puoi cambiare le impostazioni della finestra di dialogo Impostazioni o dalla Procedura guidata Audio. - - - - Signal and noise power spectrum - Potenza spettrale del segnale più rumore - - - - Power spectrum of input signal and noise estimate - Potenza spettrale del segnale più rumore di ingresso stimata - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - Mostra la potenza dello spettro del segnale di ingresso corrente (linea rossa) e l'attuale stima del rumore (area di colore blu).<br />Tutte le ampiezze sono moltiplicate per 30 per mostrare le parti interessanti (quanto più il segnale rispetto al rumore è presente in ogni banda di frequenza).<br />Probabilmente è di interesse solo se si sta cercando di mettere a punto il rumore del microfono. In buone condizioni, ci dovrebbe essere solo una piccola vibrazione di colore blu nella parte inferiore. Se il blu è più che a mezza costa sul grafico, ci si trova in un ambiente seriamente rumoroso. - - - - Echo Analysis - Analisi dell'eco - - - - Weights of the echo canceller - Peso del cancellatore di eco - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - Mostra il peso del cancellatore di echo, con il tempo crescente verso il basso e la frequenza crescente a destra.<br />In teoria, dovrebbe essere nero, cioè che non esiste eco. Più comunemente, otterrai una o più strisce orizzontali di colore bluastro che rappresentano l'eco al tempo ritardato. Si dovrebbe poter vedere i pesi aggiornati in tempo reale.<br />Notare che finché l'echo è nullo, qui non sarà possibile visualizzare dati molto utili. Riproduci un po' di musica e le cose dovrebbero stabilizzarsi.<br />Puoi scegliere di visualizzare la parte reale o immaginaria dei pesi nel dominio della frequenza, o alternativamente il modulo e la fase calcolati. Il più utile di questi sarà probabilmente il modulo, che è l'ampiezza dell'eco, e mostra quanta parte del segnale in uscita è stato rimossa in quel momento temporale. Le altre modalità di visualizzazione sono per lo più utili per le persone che vogliono affinare gli algoritmi per la cancellazione dell'eco.<br />Notare: Se l'intera immagine oscilla massicciamente mentre si è in modalità modulo, il cancellatore di echo non sta fallendo nel trovare una correlazione tra le due sorgenti di ingresso (altoparlanti e microfono). O hai un ritardo di eco veramente lungo, o una delle sorgenti di ingresso è configurata male. - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - Wizard di sintonia dell'audio - - - - Introduction - Introduzione - - - - Welcome to the Mumble Audio Wizard - Benvenuto all'Audio Wizard di Mumble - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - Questo è il wizard di sintonia dell'audio per Mumble, ti aiuterà ad impostare correttamente i livelli di input della tua scheda audio e imposterà anche i parametri corretti per il processo dei suoni su Mumble. - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - Finche la procedura sarà attiva, l'audio sarà riciclato localmente per darti la possibilità di risentirti e non sarà inviato al server. - - - - Finished - Finito - - - - Enjoy using Mumble - Divertiti con Mumble - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - Congratulazioni. Ora dovresti essere pronto a provare una ricca esperienza audio con Mumble. - - - - Device selection - Selezione dispositivo - - - - Selecting the input and output device to use with Mumble. - Seleziona i dispositivi di input e output da usare con Mumble. - - - - Input device - Dispositivo di input - - - - This is the device your microphone is connected to. - Questo è il dispositivo a cui è connesso il microfono. - - - - - System - Sistema - - - - Input method for audio - Metodo di input per l'audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Questo è il metodo dell'input da usare per l'audio.</b><br />è probabile che si desideri utilizzare DirectSound. - - - - - Device - Dispositivo - - - - Input device to use - Dispositivo di input da usare - - - - <b>Selects which sound card to use for audio input.</b> - <b>Seleziona la scheda audio da usare come input audio.</b> - - - - Use echo cancellation - Usa cancellazione eco - - - - Cancel echo from headset or speakers. - Cancella l'eco delle cuffie o degli altoparlanti. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - Questo abilita l'eliminazione dell'eco per l'audio in uscita, che aiuta sia con gli altoparlanti che con le cuffie. - - - - Output device - Dispositivo di output - - - - This is the device your speakers or headphones are connected to. - Questo è il dispositivo a cui sono connessi gli altoparlanti o le cuffie. - - - - Output method for audio - Metodo di output per l'audio - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Questo è il metodo dell'output da usare per l'audio.</b><br />è probabile che si desideri utilizzare DirectSound. - - - - Output device to use - Dispositivo di output da usare - - - - <b>Selects which sound card to use for audio Output.</b> - <b>Seleziona la scheda audio da usare come output audio.</b> - - - - Enable positional audio - Abilita audio posizionale - - - - Allows positioning of sound. - Consente il posizionamento del suono. - - - - This allows Mumble to use positional audio to place voices. - Questo consente a Mumble di usare l'audio posizionale per posizionare le voci. - - - - Positional Audio - Audio posizionale - - - - Adjusting attenuation of positional audio. - Aggiustamento dell'attenuazione dell'audio posizionale. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble supporta l'audio posizionale per alcuni giochi, e posizionerà la voce dell'altro giocatore relativamente alla sua posizione nel gioco. Il volume sarà dipendente dalla sua posizione e sarà aumentato o diminuito su un altoparlante per simulare la direzione e la distanza dell'altro giocatore. L'audio posizionale dipenderà dai tuoi altoparlanti e dalla loro configurazione nel sistema operativo, il test è finito qui. - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - Il grafico sottostante visualizza la posizione di <font color="red">Tu</font>, gli <font color="yellow">Altoparlanti</font> e <font color="green">la fonte mobile dell'audio</font>come se fosse visto da sopra.Dovresti sentire l'audio muoversi tra gli altoparlanti. - - - - Use headphones - Usa cuffie - - - - Use headphones instead of speakers. - Usa le cuffie al posto degli altoparlanti. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - Questo ignora la configurazione degli altoparlanti dal sistema operativo e invece configura il posizionamente delle cuffie. - - - - Volume tuning - Sintonia volume - - - - Tuning microphone hardware volume to optimal settings. - Sintonizza il volume dell'hardware del microfono sulle impostazioni ottimali. - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - Apre il pannello di controllo del suono e và alle impostazioni di registrazione. Assicurati che il microfono sia selezionato come input attivo con il massimo volume di registrazione. Se c'è un'opzione da abilitare chiamata "Preamplificazione microfono" assicurati che sia selezionata. - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - Parla ad alta voce, come quando sei infastidito o eccitato. Poi diminuisci il volume del suono dal pannello di controllo fino a che la barra sotto rimane il più alto possibile nella zona blu e verde quando si parla, ma <b>non</b> in quella rossa. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Ora parla dolcemente, come quando si parla a tarda notte e non vuoi disturbare nessuno. Regola il cursore sotto in modo che la barra si sposti nella zona verde quando si parla, ma rimane nel blu mentre si sta in silenzio. - - - - Voice Activity Detection - Rilevamento dell'attività della voce - - - - Letting Mumble figure out when you're talking and when you're silent. - Lascia capire a Mumble quando stai parlando e quando stai in silenzio. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Ciò aiuterà Mumble a capire quando si sta parlando. Il primo passo è la scelta dei dati di valore da usare. - - - - Raw amplitude from input - Ampiezza grezza dall'input - - - - Signal-To-Noise ratio - Rapporto Segnale-Rumore - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Dopo devi aggiustare i seguenti 2 cursori. Le prime parole pronunciate dovrebbero finire nella zona verde (inizio del parlato). Mentre stai parlando dovresti stare dentro il giallo (discorso) e quando non stai parlando, tutto dovrebbe stare nella zona rossa (sottofondo). - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - Infine, è necessario regolare il tempo di grazia. Mumble può rilevare che non stai più parlando e continuare la trasmissione per il tempo di grazia. Questo ti permetterà di riprendere fiato mentre parli senza interrompere la trasmissione. - - - - Device tuning - Sintonia dispositivo - - - - Changing hardware output delays to their minimum value. - Modifica output dell'hardware al suo valore minimo. - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - Per mantenere la latenza a un minimo assoluto, è importante avere come buffer il minimo audio possibile sulla scheda audio. Tuttavia, molte schede audio riportano che esse richiedono molto meno buffer di quello con cui possono effettivamente lavorare , quindi l'unico modo di impostare questo valore è quello di provare, sbagliare e riprovare. - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - Dovresti sentire un tono singolo che cambia di frequenza.Imposta il cursore sottostante al minor valore possibile dove <b>NON</b> ci sono interruzioni o distorsioni nel suono. Ricorda che l'eco locale è disabilitato durante questo test per trovare meglio l'origine audio. - - - - Amount of data to buffer. - Quantità di dati del buffer. - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Questo imposta la quantità di prebuffer da mettere nel buffer in uscita. Prova con diversi valori e imposta quello più basso che non causi rapide distorsioni nel suono. - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - Se si posiziona il microfono in modo che possa raccogliere l'audio dagli altoparlanti o dalle cuffie, Mumble misurerà il ritardo audio nel vostro sistema, questo significa che il ritardo di un campione sarà collocato in un buffer in uscita fino a quando non sarà trovato un buffer corrispondente in arrivo. - - - - %1ms - %1ms - - - - Audio path is %1ms long. - L'origine dell'audio è lunga %1ms. - - - - Audio path cannot be determined. Input not recognized. - Il percorso dell'audio non può essere determinato. input non riconosciuto. - - - - %1 s - %1ms - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Mumble è in continuo sviluppo, e gli sviluppatori cercano di concentrarsi sulle caratteristiche di cui beneficiano la maggior parte degli utenti. A tal fine, sostenete Mumble inviando statistiche anonime sulla vostra configurazione agli sviluppatori. Queste statistiche sono essenziali per lo sviluppo futuro, e anche per essere sicuri che le caratteristiche che usi non siano disapprovate. - - - - Submit anonymous statistics to the Mumble project - Invia statistiche anonime al progetto Mumble per migliorare il programma - - - - Push To Talk: - Premi Per Parlare: - - - - BanEditor - - - Mumble - Edit Bans - Mumble - Edita lista utenti banditi - - - - &Address - &Indirizzo - - - - &Mask - &Maschera - - - - 0.0.0.0 - 0.0.0.0 - - - - &Add - &Aggiungi - - - - &Update - &Aggiorna - - - - &Remove - &Rimuovi - - - - ChanACL - - - W - W - - - - T - T - - - - E - E - - - - S - S - - - - A - A - - - - M - M - - - - K - K - - - - C - C - - - - L - L - - - - None - Niente - - - - Traverse - Discendi - - - - Enter - Entra - - - - Speak - Parla - - - - AltSpeak - Stop Parla - - - - Mute/Deafen - Silenzia/Isola - - - - Move/Kick - Sposta/Espelli - - - - Make channel - Crea canale - - - - Link channel - Collega canale - - - - This represents no privileges. - Non rappresenta privilegi. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Rappresenta il totale controllo sul canale, includendo la possibilità di cambiare gruppo e le informazioni ACL. Questo privilegio implica tutti gli altri privilegi. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Rappresenta il permesso di attraversare il canale. Se a un utente è negato questo privilegio, non potrà accedere al canale e a tutti i sotto-canali, indipendentemente dai permessi dei sotto-canali. - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Rappresenta il permesso di unirsi al canale. In una struttura gerarchica dei canali, potresti volere dare a tutti l'Attraversamento, ma impedire di Entrare nella radice della gerarchia. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Rappresenta il permesso di parlare in un cenale. Un utente senza questo privilegio verrà silenziato dal server (visto come silenziato), e non sarà in grado di parlare fino a che non sarà attivato da qualcuno che abbia i diritti sufficienti. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - Rappresenta il permesso di parlare in un canale. Funziona esattamente come il privilegio per <i>parlare</i>, ma si applica al parlato mentre è tenuto premuto AltPremiPerParlare. Può essere utilizzato per trasmettere a una gerarchia di canali senza collegarli. - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Rappresenta il permesso di silenziare o escludere altri giocatori. Una volta silenziato, un giocatore non potrà parlare fino a che sarà sbloccato da un altro giocatore con privilegi o se si riconnette al server. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Rappresenta l'autorizzazione a spostare un giocatore su un altro canale o a espellerlo dal server. Per spostare un giocatore, il giocatore che sposta deve avere il privilegio Sposta/Espelli nel canale di destinazione, o il giocatore che sposta deve essere autorizzato a entrare nel canale. I giocatori con questo privilegio possono muovere altri giocatori in canali dove normalmente non avrebbero permesso di entrare. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Rappresenta il permesso di creare sotto-canali. Il giocatore che crea un sotto-canale verrà aggiunto al gruppo admin del sotto-canale. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Rappresenta il permesso di collegare i canali. I giocatori in canali collegati si ascoltano a vicenda, se il giocatore che parla ha il privilegio <i>Parlare</i> nel canale dell'ascoltatore. È necessario il privilegio di Collegamento in entrambi i canali per poter creare un collegamento, ma in uno qualsiasi dei canali per rimuoverlo. - - - - Write ACL - Scrive le ACL - - - - ClientPlayer - - - Authenticated - Autenticato - - - - Muted (server) - Microfono disattivato (server) - - - - Deafened (server) - Microfono e audio disattivati (server) - - - - Local Mute - Microfono disattivato localmente - - - - Muted (self) - Microfono disattivato (auto) - - - - Deafened (self) - Microfono e audio disattivati (auto) - - - - ConfigDialog - - - Accept changes - Applicare i cambiamenti - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Il bottone attiverà le impostazioni correnti e tornerà all'applicazione.<br />Le impostazioni saranno salvate sul disco quando esci dall'applicazione. - - - - Reject changes - Annulla i cambiamenti - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Il bottone annullerà tutti i cambiamenti e tornerà all'applicazione.<br />Le impostazioni saranno riimpostate al valore precedente. - - - - Apply changes - Appllica i cambiamenti - - - - This button will immediately apply all changes. - Il bottone applicherà tutti i cambiamenti. - - - - Undo changes for current page - Annulla i cambiamenti per la pagina corrente - - - - This button will revert any changes done on the current page to the most recent applied settings. - Il bottone annullerà tutti i cambiamenti fatti sulla pagina corrente al valore precedente. - - - - Restore defaults for current page - Ricarica il valore predefinito per la pagina corrente - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - Il bottone caricherà le impostazioni per la pagina corrente al loro default. Le altre pagine non saranno modificate.<br />Per riimpostare tutti i settaggi ai loro valori predefiniti, devi usare questo bottone su tutte le pagine. - - - - Mumble Configuration - Configurazione di Mumble - - - Tab 1 - Tab 1 - - - - Advanced - - - - - ConnectDialog - - - Connecting to %1 - Connessione a %1 - - - - Enter username - Inserire il nome utente - - - - Unknown - Sconosciuto - - - Mumble - Mumble - - - - Failed to fetch server list - Scaricamento della lista dei server fallita - - - - - New - Nuovo - - - - -Unnamed entry- - -Posizione senza nome- - - - - - Add - Aggiungi - - - - Update - Aggiorna - - - - Mumble Server Connect - Connessione al Server Mumble - - - - &Custom Servers - &Server personalizzati - - - - &Label - &Etichetta - - - - A&ddress - &Indirizzo - - - - &Port - &Porta - - - - &Username - &Nome utente - - - - &Password - &Password - - - - &Connect - &Connessione - - - - &Cancel - &Annulla - - - - &Add - &Aggiungi - - - - &Remove - &Cancella - - - - Server &Browser - Elenco &Server - - - - Label - Etichetta - - - - Address - Indirizzo - - - - URL - URL - - - - Cancel - Annulla - - - - C&opy to custom - &Copia al personalizzato - - - - &View Webpage - &Visualizza pagina Web - - - - CoreAudioSystem - - - Default Device - Periferica predefinita - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - - Default DirectSound Voice Input - Ingresso Voce DirectSound predefinito - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - Apertura del dispositivo di ingresso DirectSound fallita. Non ci sarà nessun ingresso microfonico. - - - - Opening chosen DirectSound Input failed. Default device will be used. - Apertura dell'ingresso DirectSound fallita. Verrà usato il dispositivo predefinito. - - - - Lost DirectSound input device. - Dispositivo di ingresso DirectSound sconnesso. - - - - DXAudioOutput - - - Default DirectSound Voice Output - Uscita Voce DirectSound predefinita - - - - Opening chosen DirectSound Output failed. Default device will be used. - Apetuta dell'uscita DirectSound scelta fallita. Verrà usato il dispositivo di default. - - - - Lost DirectSound output device. - Dispositivo di uscita DirectSound sconnesso. - - - - Opening chosen DirectSound Output failed. No audio will be heard. - Apertura dell'uscita DirectSound fallita. Non si udirà nessun audio. - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble non è riuscito a inizializzare il database in nessuna -delle possibili posizioni. - - - - GlobalShortcut - - - Shortcuts - Scorciatoie - - - - List of configured shortcuts - lista delle scorciatoie configurate - - - - Function - Funzione - - - - Shortcut - Scorciatoia - - - - Suppress - Sopprimi - - - - Add new shortcut - Aggiungi una nuova scorciatoia - - - - This will add a new global shortcut - Questo aggiugerà una scorciatoia globale - - - - &Add - &Aggiungi - - - - Remove selected shortcut - Rimuove la scorciatoia selezionata - - - - This will permanently remove a selected shortcut. - Questo rimuoverà permanentemente la scorciatoia selezionata. - - - - &Remove - &Rimuovi - - - - GlobalShortcutConfig - - - Shortcuts - Scorciatoie - - - - Shortcut button combination. - Combinazione di bottoni della scorciatoia. - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>Questa è la combinazione della scorciatoia globale.</b><br />Fai doppio click in questo campo e poi premi la combinazione di tasti per riassegnarla. - - - - Suppress keys from other applications - Elimina tasti da altre applicazioni - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>Nasconde le pressioni dei tasti nelle altre applicazioni.</b><br />Abilitando verranno nascosti i bottoni (o l'ultimo bottone di una sequenza multi bottone) dalle altre applicazioni. Nota che non tutti i bottoni possono essere premuti. - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble ha rilevato che non è in grado di ricevere i segnali delle Scorciatoie Globali quando è in background.<br /><br />Questo è dovuto alla funzione di Accesso Universale chiamata 'Abilita accesso per i dispositivi di assistenza' che è attualmente disattiva.<br /><br />Si prega <a href="">abilitare questa impostazione</a> e proseguire quando terminato. - - - - GlobalShortcutX - - - Mouse %1 - Mouse %1 - - - - LCD - - - Not connected - Non collegato - - - - LCDConfig - - - Graphic - Grafica - - - - Character - Carattere - - - - Enable this device - Abilita questo dispositivo - - - - LCD - LCD - - - - Form - Modulo - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Questa è la lista dei dispositivi LCD nel tuo sistema. Nella lista ci sono i nomi, ma include anche la dimensione del display e il tipo.Mumble supporta l'invio a molti dispositivi LCD allo stesso tempo.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supporta 2 differenti tipi di dispositivi LCD. Gli LCD Graphic, dove è possibile disegnare in ogni pizel individualmente, ma anche gli LCD Character dove è possibile solo scrivere dei caratteri. Alcune funzioni di Mumble sono disponibili solo sugli LDC Graphic.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Questo campo descrive la dimenzione di un dispositivo LCD. Ladimensione è espressa in pixel o in caratteri.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Abilitati:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">Questo decide se Mumble deve attingere ad un particolare dispositivo LCD.</span></p></body></html> - - - - Devices - Dispositivo - - - - Name - Nome - - - - Type - Tipo - - - - Size - Dimensione - - - - Enabled - Abilitato - - - - Views - Viste - - - - Minimum Column Width - Larghezza minima colonna - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Questa opzione imposta la minima larghezza della colonna nella vista del Giocatore.</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Se troppe persone stanno parlando insieme, la Vista Giocatore verrà divisa in colonne.</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Puoi usare questa opzione per scegliere un compromesso tra il numero di giocatori mostrati sull'LCD,</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">e la larghezza dei nomi dei giocatori.</p></body></html> - - - - TextLabel - Etichetta testo - - - - Splitter Width - Larghezza Splitter - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Questa impostazione regola la larghezza della colonna dello splitter.</span></p></body></html> - - - - Log - - - Debug - Debug - - - - Critical - Critici - - - - Warning - Avvisi - - - - Information - Informativi - - - - Server Connected - Server Connesso - - - - Server Disconnected - Serve Disconnesso - - - - Player Joined Server - Giocatore connesso al Server - - - - Player Left Server - Giocatore disconnesso dal Server - - - - Player kicked (you or by you) - Giocatore espulso (tu o da te) - - - - Player kicked - Giocatore espulso - - - - You self-muted/deafened - Hai disattivato il tuo mirofono/audio - - - - Other self-muted/deafened - Utente con mirofono/audio disattivato - - - - Player muted (you) - utente sileziato (tu) - - - - Player muted (by you) - Utente silenziato (da te) - - - - Player muted (other) - Utente silenziato (altro) - - - - Player Joined Channel - Utente entrato nel Canale - - - - Player Left Channel - Utente uscito dal Canale - - - - Permission Denied - Permesso Negato - - - - Text Message - Messaggio di Testo - - - Script Errors - Errori di script - - - - LogConfig - - - Toggle console for %1 events - Cambia console per gli eventi %1 - - - - Toggle pop-up notifications for %1 events - Cambia notifica pop-up per gli eventi %1 - - - - Toggle Text-To-Speech for %1 events - Cambia Sintesi vocale per gli eventi %1 - - - - Click here to toggle sound notification for %1 events - Premi qui per cambiare la notifica audio per gli eventi %1 - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - Percorso dei file audio utilizzati per le notifiche in caso di eventi %1<br />Unico click per sentire<br />Doppio click per cambiare - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - Clicca qui per attivare la console di uscita per gli eventi %1.<br /> Se selezionata, questa opzione scrive tutti gli eventi %1 nel messaggio di log. - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - Clicca qui per cambiare le notifiche pop-up per gli eventi%1. <br /> Se selezionato, una notifica pop-up verrà creata per ogni evento%1. - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Clicca qui per notificare gli eventi%1 con un messaggio di Sintesi Vocale. <br /> Se selezionato, mumble utilizza La sintesi vocale per leggere gli eventi %1 ad alta voce a voi. La sintesi vocale è anche in grado di leggere il contenuto dell'evento che non è leggibile con il file audio. il file audio per la sintesi vocale e non può essere utilizzato allo stesso tempo. - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Clicca qui per cambiare la notifica sonora per gli eventi %1.<br />Se selezionato mumble userò un file audio predefinito per indicare gli eventi %1. File audio e SIntesi Vocale non possono essere usati allo stesso tempo. - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - Percorso al fiel audio usato per la notifica audio nel caso degli eventi %1.<br />Click singolo per ascoltare<br />Doppio click per cambiare<br />Assicurati che la notifia audio sia abilitata per questi eventi oppure questi campi non produrranno effetti. - - - - Choose sound file - Scegli il file del suono - - - - Invalid sound file - Suono del file invalido - - - - The file '%1' does not exist or is not a valid speex file. - Il file "%1" non esiste o è un file speex invalido. - - - - Messages - Messaggi - - - - Message - Messaggio - - - - Console - Console - - - - Notification - Notifiche - - - - Text-To-Speech - Sintesi vocale - - - - Soundfile - File del suono - - - - Path - Percorso - - - - Text To Speech - Sintesi vocale - - - - Volume - Volume - - - - Volume of Text-To-Speech Engine - Volume del motore di Sintesi Vocale - - - - <b>This is the volume used for the speech synthesis.</b> - <b>Volume usato per la sintesi vocale.</b> - - - - Length threshold - Soglia di lunghezza - - - - Message length threshold for Text-To-Speech Engine - Soglia di lunghezza messaggio per il Motore di Sintesi Vocale - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Soglia di lunghezza usata per il Motore di Sintesi Vocale.</b><br>Messaggi più lunghi di questo limite non verranno letti interamente. - - - - Characters - Caratteri - - - - LookConfig - - - - System default - Predefinito del sistema - - - - None - Niente - - - - Only with players - Solo con i giocatori - - - - All - Tutti - - - - Ask - Chiedi - - - - Do Nothing - Non fare niente - - - - Move - Sposta - - - - User Interface - Interfaccia Utente - - - - Choose skin file - Scegli file delle skin - - - - Form - Modulo - - - - Language - Lingua - - - - Language to use (requires restart) - Lingua da usare (richiede riavvio) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Stabilisce quale lingua dovrebbe usare Mumble.</b><br />Devi riavviare Mumble per utilizzare la nuova lingua. - - - - Look and Feel - Aspetto e Sensazione - - - - Style - Stile - - - - Basic widget style - Stile di base dei widget - - - - <b>This sets the basic look and feel to use.</b> - <b>Imposta l'aspetto e la sensazione di base da utilizzare.</b> - - - - Skin - Skin - - - - Skin file to use - File di skin da usare - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>Stabilisce quale skin dovrebbe usare Mumble.</b><br />La skin è un file di stile applicato sopra allo stile base dei widget. Se ci sono icone nella stessa directory del foglio di stile, sostituiranno le icone predefinite. - - - - ... - ... - - - - Expand - Espandi - - - - When to automatically expand channels - Quando espandere automaticamente i canali - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - Stabilisce quali canali espandere automaticamente. <i>Nessuno</i> e <i>Tutti</i> non espanderà nessuno o tutti i canali, mentre <i>Solo con i giocatori</i> espanderà e comprimerà i canali appena i giocatori entrano o escono. - - - - List players above subchannels (requires restart). - Elenca i giocatori sui sottocanali (richiede riavvio). - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>Se impostato, i giocatori verranno visualizzati sopra i sottocanali mostrati.</b><br />E' necessario un riavvio di Mumble per vedere il cambiamento. - - - - Players above Channels - Giocatori sui Canali - - - - Channel Dragging - Trascinamento Canale - - - - This changes the behaviour when moving channels. - Cambia il comportamento quando sposti i canali. - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - Imposta il comportamento dei trascinamenti di canale, può essere utilizzato per evitare il trascinamento accidentale. <i>Sposta Canale</i> il canale si sposta senza chiedere conferma. <i>Non fare nulla</i> non li sposta e stampa un messaggio di errore. <i>Chiedi</i> mostra una finestra di dialogo per chiedere conferma se si voleva davvero spostare il canale. - - - - Ask whether to close or minimize when quitting Mumble. - Chiede se chiudere o minimizzare quando esci da Mumble. - - - - <b>If set, will verify you want to quit if connected.<b> - <b>Se impostato, chiederà conferma che tu voglia veramente uscire quando sei collegato.<b> - - - - Ask on quit while connected - Chiedi conferma in uscita se connesso - - - - Make the Mumble window appear on top of other windows. - Tieni la finestra di Mumble sopra alle altre finestre. - - - - <b>This makes the Mumble window a topmost window.</b> - <b>Tiene la finestra di Mumble sopra le altre.</b> - - - - Always On Top - Sempre in primo piano - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>Se impostato, minimizare la finestra principale di Mumble causerà questa ad essere nascosta e accessibile solo dalla tray. Altrimenti sarà minimizzata come una normale finestra.</b> - - - - Hide in tray when minimized - Nascondi nella tray quando minimizzato - - - Show all configuration items - Mostra tutte le voci di configurazione - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Mostrerà tutti gli elementi di configurazione.</b><br />Mumble ha tante voci di configurazione che la maggior parte degli utenti non avranno bisogno di cambiare. Attivando questa voce mostrerà tutti gli elementi configurabili. - - - Expert Config - Configurazione Avanzata - - - - Hide the main Mumble window in the tray when it is minimized. - Nascondi la finestra principale di Mumble nella tray quando è minimizzata. - - - - MainWindow - - - - Root - Radice - - - - Push-to-Talk - Global Shortcut - Premi-per-parlare - - - - Push and hold this button to send voice. - Global Shortcut - Tieni premuto questo bottone per inviare la voce. - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - Questo configura il bottone premi-pre-parlare, e fino a che terrai premuto questo bottone, trasmetterai la voce. - - - - Reset Audio Processor - Global Shortcut - Reset processore audio - - - - Toggle Mute Self - Global Shortcut - Cambia Silenziarti - - - - Toggle self-mute status. - Global Shortcut - Cambia stato Silenziati. - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - Questo cambia il tuo stato di silenziato. Se la selezione è off,verrai riattivato. - - - - Toggle Deafen Self - Global Shortcut - Cambia stato isolamento - - - - Toggle self-deafen status. - Global Shortcut - Cambia stato asoalti. - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - Questo cambia il tuo stato isolati. Se la selezione è on, sarà abilitato ache il Silenziati. - - - - Unlink Plugin - Global Shortcut - Scollega Plugin - - - - Force Center Position - Global Shortcut - Forza posizione centrale - - - - Chan Parent - Global Shortcut - Parente canale - - - - Chan Sub#%1 - Global Shortcut - Sotto-canale#%1 - - - - Chan All Subs - Global Shortcut - Canale tutti sotto-canali - - - - Push-to-Mute - Global Shortcut - Premi-per-mutare - - - - Join Channel - Global Shortcut - Entra nel canale - - - - Toggle Overlay - Global Shortcut - Cambia la copertura - - - - Toggle state of in-game overlay. - Global Shortcut - Cambia stato di sovrapposizione in-game. - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - Questo cambia lo stato della sovrapposizione in-game tra visualizza tutti, solo il giocatore a cui stai parlando e nessuno. - - - - Alt Push-to-Talk - Global Shortcut - Alt Premi-per.parlare - - - - Toggle Minimal - Global Shortcut - Cambia Visualizzazione minima - - - - Volume Up (+10%) - Global Shortcut - Aumenta volume (+10%) - - - - Volume Down (-10%) - Global Shortcut - Diminuisci volume (-10%) - - - - Mumble - Mumble - - - - Mumble -- %1 - Mumble -- %1 - - - - &Window - &Finestra - - - - - Minimize - Minimizza - - - - Ctrl+M - Ctrl+M - - - - Close - Chiudi - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - Mumble è connesso ad un server. Vuoi Chiuderlo o Minimizzarlo? - - - - Clear - Cancella - - - - Opening URL %1 - Apertura URL %1 - - - - URL scheme is not 'mumble' - Lo schema dell'URL non è 'mumble' - - - - Connecting to %1 - Connessione a %1 - - - - Enter username - Inserisci nome utente - - - - Reconnecting. - Riconnessione. - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>Canale di controllo</h2><p>Crittografato con %1 bit %2<br/>%3 ms latenza media (%4 variazione)</p> - - - - Voice channel is sent over control channel. - Il canale di voce è trasmesso sul canale di controllo. - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>Canale di voce</h2><p>Crittografato con 128 bit OCB-AES128<br/>%1 ms latenza media (%4 variazione)</p> - - - - UDP Statistics - Statistiche UDP - - - - To Server - Al server - - - - From Server - Dal server - - - - Good - Buono - - - - Late - Ultimo - - - - Lost - Perso - - - - Resync - Risincronizzazione - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>banda audio</h2><p>Massimo %1 kbit/s<br/>Corrente %2 kbit/s (Qualità %3)</p> - - - - Mumble Server Information - Informazioni del server di Mumble - - - - - &View Certificate - &Visualizza certificato - - - - Kicking player %1 - Espulsione giocatore %1 - - - - - Enter reason - Inserisci motivazione - - - - Banning player %1 - Bandimento giocatore %1 - - - - Sending message to %1 - Invio messaggio a %1 - - - - - To %1: %2 - Per %1: %2 - - - - - Message to %1 - Messaggio a %1 - - - - - Channel Name - Nome canale - - - - Are you sure you want to delete %1 and all its sub-channels? - Sei sicuro di voler cancellare %1 e tutti i suoi sotto-canali? - - - - Change description of channel %1 - Cambia la descrizione del canale %1 - - - - Sending message to channel %1 - Invio messaggio al canale %1 - - - - Sending message to channel tree %1 - Invio messaggio al canale e ai sottocanali di %1 - - - - To tree %1: %2 - Per il canale e i sottocanali di %1: %2 - - - - Message to tree %1 - Messaggio al canale e ai sottocanali %1 - - - - Unmuted and undeafened. - Microfono e audio riattivato. - - - - Unmuted. - Microfono riattivato. - - - - Muted. - Microfono disattivato. - - - - Muted and deafened. - Microfono e audio disattivati. - - - - Deafened. - Audio disattivato. - - - - Undeafened. - Audio riattivato. - - - - About Qt - Informazioni su Qt - - - - Joining %1. - Entrata %1. - - - - Connected to server %1. - Connessione al server %1. - - - - SSL Verification failed: %1 - Verifica SSL fallita: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>ATTENZIONE:</b> Il server presenta un certificato che è differente da quello posseduto. - - - - Sever presented a certificate which failed verification. - Il server ha presentato un certificato che ha fallito la verifica. - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br />L'errore specifico con il certificato è: </p><ol>%2</ol><p>Vuoi accettare questo certificato ugualmente?<br />(Questo sarà anche salvato quindi non ti sarà chiesto di nuovo.)</p> - - - - Server connection failed: %1. - Connessione al server fallita: %1. - - - - Disconnected from server. - Disconnesso dal server. - - - - Invalid username - Nome utente invalido - - - - You connected with an invalid username, please try another one. - Ti sei connesso con un nome utente invalido, provane un'altro. - - - - That username is already in use, please try another username. - Questo nome utente è già in uso, prova con un'altro nome. - - - - Wrong password - Password errata - - - - Wrong password for registered users, please try again. - Password errata per gli utenti registrati, prova di nuovo. - - - - Wrong server password for unregistered user account, please try again. - Password errata per un account non registrato, prova di nuovo. - - - - &Server - &Server - - - - &Player - &Giocatore - - - - &Channel - &Canale - - - - &Audio - &Audio - - - - C&onfigure - C&onfigurazione - - - - &Help - A&iuto - - - - Log - Log - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Questo visualizza tutte le attività recenti.Connessioni ai server, errori e messaggi informativi sono visualizzati qui.<br />Per configurare quali messaggi saranno visualizzati qui, usa il comando <b>Impostazioni</b> dal menu. - - - - &Quit Mumble - &Esci da Mumble - - - - Closes the program - Chiude il programma - - - - Exits the application. - Esce dall'applicazione. - - - - Ctrl+Q - Ctrl+Q - - - - &Connect - &Connetti - - - - Open the server connection dialog - Apre la finestra della connessione al server - - - - Shows a dialog of registered servers, and also allows quick connect. - Visualizza una finestra dei server registrati, e permette anche la connessione rapida. - - - - &Disconnect - &Disconnetti - - - - Disconnect from server - Disconnetti dal server - - - - Disconnects you from the server. - Disconnette dal server. - - - - &Ban lists - &Lista utenti banditi - - - - Edit ban lists on server - Modifica la lista dei ban sul server - - - - This lets you edit the server-side IP ban lists. - Questo ti fà modificare la lista degli ip bannati dal lato server. - - - - &Information - &Informazioni - - - - Show information about the server connection - Visualizza le informazione della connessione al server - - - - This will show extended information about the connection to the server. - Questo visualizza informazioni estese sulla connessione al server. - - - - &Kick - &Espelli - - - - Kick player (with reason) - Espelli giocatore (con motivazione) - - - - Kick selected player off server. You'll be asked to specify a reason. - Espelle il giocatore dal server. Ti sarà chiesto di specificare una motivazione. - - - - &Mute - Disattiva &microfono - - - - Mute player - Disattiva microfono giocatore - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Disattiva o riattiva il microfono dell'utente nel server. Riattivare un giocatore escluso lo farà includere di nuovo. - - - - &Ban - &Bandisci - - - - Kick and ban player (with reason) - Espelli e bandisci il giocatore (con motivazione) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Espelli e bandisci il giocatore dal server. Tri sarà chiesto di specificare una motivazione. - - - - &Deafen - Disattiva &audio - - - - Deafen player - Disattiva l'audio del giocatore - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Disattiva o riattiva l'audio dell'utente nel server. Disattivando l'audio dell'utente disattiverai anche il suo microfono. - - - - &Local Mute - Disattiva &microfono localmente - - - - Mute player locally - Disattiva il microfono dell'utente localmente - - - - Mute or unmute player locally. Use this on other players in the same room. - Disattiva o riattiva il mirofono dell'utente localmente. Usa questo su altri giocatore nella stessa room. - - - - Send Messa&ge - Invia &Messaggio - - - - Send a Text Message - Invia un messaggio di testo - - - - Sends a text message to another user. - Invia un messaggio di testo ad un'altro utente. - - - - &Add - &Aggiungi - - - - Add new channel - Aggiungi un nuovo canale - - - - This adds a new sub-channel to the currently selected channel. - Questo aggiungerà un nuovo sotto-canale al canale selezionato. - - - - &Remove - &Rimuovi - - - - Remove channel - Rimuove il canale - - - - This removes a channel and all sub-channels. - Questo rimuoverà il canale e tutti i suoi sotto-canali. - - - - &Edit ACL - &Modifica ACL - - - - Edit Groups and ACL for channel - Modifica Gruppi e ACL per il canale - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Questo apre la finestra Gruppi e ACL per il canale, il controllo dei permessi. - - - - &Rename - &Rinomina - - - - Renames the channel - Rinomina il canale - - - - This renames a channel. - Questo rinomina il canale. - - - - &Change Description - &Cambia Descrizione - - - - Changes the channel description - Cambia la descrizione del canale - - - - This changes the description of a channel. - Questo cambia la descrizione del canale. - - - - &Link - &Collega - - - - Link your channel to another channel - Collega il canale ad un'altro canale - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Questo collega il canale corrente con il canale selezionato. Se i giocatori hanno il permesso per parlare nell'altro canale, si potranno sentire con gli altri. Questo è un collegamento permanente, e non terminerà fino a che i canali non saranno scollegati manualmente o il server verrà riavviato. Per favore guarda la scorciatoia per il Premi-per-collegare. - - - - &Unlink - Channel - &Scollega - - - - Unlink your channel from another channel - Scollega il tuo canale da un'altro canale - - - - This unlinks your current channel from the selected channel. - Questo scollegherà il tuo canale dal canale selezionato. - - - - Unlink &All - Scollega da &tutti - - - - Unlinks your channel from all linked channels. - Scollega il tuo canale da tutti gli altri canali collegati precedentemente. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Questo scollegerà il canale corrente(non quello selezionato) da tutti i canali collegati. - - - - &Reset - &Reset - - - - Reset audio preprocessor - Reset preprocesore audio - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Questo resetta il preprocessore audio, inclusa la cancellazione del rumore, il guadagno automatico e la rilevazione dell'attività della voce. Se qualcosa peggiorasse improvvisamente l'audio dell'ambiente (come far cadere il microfono) e questo è temporaneo, usa questo per evitare di aspettare che il preprocessore audio si riaggiusti. - - - - &Mute Self - Disattiva &microfono - - - - Mute yourself - Disattiva il tuo microfono - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Silenzia o riattiva te stesso. Quando sei silenziato tu non invii nessun dato al server. Riattivarsi quando si è esclusi implica anche riammettersi. - - - - &Deafen Self - Disattiva &audio - - - - Deafen yourself - Disattiva il tuo audio - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Disattiva o riattiva il tuo audio. Disattivare l'audio implica anche disattivare il microfono. - - - - &Text-To-Speech - &Sintesi vocale - - - - Toggle Text-To-Speech - Cambia lo stato di Sintesi vocale - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Abilita o disabilita il motore di sintesi vocale. Solamente i messaggi abilitati per la sintesi vocale nella finestra di configurazione saranno trasmessi. - - - - S&tatistics - S&tatistiche - - - - Display audio statistics - Visualizza le statistiche audio - - - - Pops up a small dialog with information about your current audio input. - Visualizza una piccola finestra di dialogo con le informazioni sull'input audio corrente. - - - - &Unlink - Plugin - S&collega - - - - Forcibly unlink plugin - Forza scollegamento plugin - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Questo forza il plugin corrente a scollegarsi, che è utile se questo stà leggendo delle informazioni completamente sbagliate. - - - - &Settings - &Impostazioni - - - - Configure Mumble - Configura Mumble - - - - Allows you to change most settings for Mumble. - Permette di cambiare molte delle impostazioni di Mumble. - - - - &Audio Wizard - &Audio Wizard - - - - Start the audio configuration wizard - Inizia la procedura guidata per la configurazione dell'audio - - - - This will guide you through the process of configuring your audio hardware. - Questo ti guiderà attraverso il processo di configurazione dell'hardware audio. - - - - &What's This? - &Cos'è questo? - - - - Enter What's This? mode - Entra nella modalità Cos'è questo - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Premi qui per entrare nella modalità "Cos'è questo". Il cursore diventerà un punto interrogativo. Premendo su qualsiasi bottone, scelta del menu o area, verrà visualizzata una descrizione di cosa è quello. - - - - &About - &Info - - - - Information about Mumble - Informazioni su Mumble - - - - Shows a small dialog with information and license for Mumble. - Visualizza una piccola finestra con le informazioni e la licenza di Mumble. - - - - About &Speex - Info su &Speex - - - - Information about Speex - Informazioni su Speex - - - - Shows a small dialog with information about Speex. - Visualizza una piccola finestra con le informazioni su Speex. - - - - About &Qt - Info su &Qt - - - - Information about Qt - Informazioni su Qt - - - - Shows a small dialog with information about Qt. - Visualizza un dialogo con le informazioni su Qt. - - - - Check for &Updates - Cerca &Aggiornamenti - - - - Check for new version of Mumble - Cerca una nuova versione di Mumble - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Connette alla pagina internet di Mumble per cercare se una nuova versione del programma è disponibili e avverte con un URL se è il caso di scaricare una versione aggiornata. - - - - Sends a text message to all users in a channel. - Invia un messaggio di testo a tutti gli utenti in questo canale. - - - - Send &Tree Message - Invia un messaggio al &canale e ai sottocanali - - - - Send message to channel tree. - Invia un messaggio ad un canale e ai suoi sottocanali. - - - - This sends a text message to a channel and it's subchannels. - Questo invia un messaggio al canale e a tutti i suoi sotto-canali. - - - - &Minimal View - Visuale &Minima - - - - Toggle minimal window modes - Cambia la modalità visualizzazione minima - - - - This will toggle minimal mode, where the log window and menu is hidden. - Questo seleziona la modalità minima, dove la finestra del log e il menu sono noscosti. - - - - Joined server: %1. - %1 è entrato nel server. - - - - Left server: %1. - %1 ha lasciato il server. - - - - %1 is now muted and deafened. - %1 ha disattivato audio e microfono. - - - - %1 is now muted. - %1 ha disattivato il microfono. - - - - %1 is now unmuted. - %1 ha riattivato il microfono. - - - - - server - server - - - - You were muted by %1. - Il tuo microfono è stato disattivato da %1. - - - - You were unmuted by %1. - Il tuo microfono è stato riattivato da %1. - - - - %1 muted by %2. - Il microfono di %1 è stato disattivato da %2. - - - - %1 unmuted by %2. - Il microfono di %1 è stato riattivato da %2. - - - - You were deafened by %1. - Il tuo audio è stato disattivatob da %1. - - - - You were undeafened by %1. - Il tuo audio è stato riattivato da %1. - - - - %1 deafened by %2. - L'audio di %1 è stato disattivato da %2. - - - - %1 undeafened by %2. - L'audio di %1 è stato riattivato da %2. - - - - You were kicked from the server by %1: %2. - Sei stato espulso dal server da %1:%2. - - - - %3 was kicked from the server by %1: %2. - %3 è stato espulso dal server da %1:%2. - - - - You were kicked and banned from the server by %1: %2. - Sei stato espulso e bandito dal server da %1: %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 è stato espulto e bandito dal server da %1:%2. - - - - You were moved to %1 by %2. - Sei stato spostato sul canale %1 da %2. - - - - %1 left channel. - %1 ha lasciato il canale. - - - - %1 moved out by %2 to %3. - %1 spostato fuori dal canale da %2 su %3. - - - - %1 moved in by %2 from %3. - %1 spostato dentro al canale da %2 dal canale %3. - - - - %1 entered channel. - %1 è entrato nel canale. - - - - Server connection rejected: %1. - Connessione al server respinta: %1. - - - - Denied: %1. - Negato: %1. - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - La banda massima del server è solamente %1 kbit/s. Qualità auto-aggiustata. - - - - From %1: %2 - Da %1: %2 - - - - Message from %1 - Messaggio da %1 - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - Hai selezionato "non fare niente" sulle impostazioni del trascinamento del canale, quindi il canale non sarà spostato. - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - Modalità trascianamento canale sconosciuta in PlayerModel::dropMimeData. - - - - Welcome to Mumble. - Benvenuto su Mumble. - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - Questa è la prima volta che avvii Mumble.<br />Vorresti essere aiutato dall'Audio Wizard per configurare la tua scheda audio e le impostazioni audio? - - - - Server - message from - Server - - - - Hide Frame - Nascondi cornice - - - - Toggle showing frame on minimal window - Cambia visualizzazione cornice nella finestra minina - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - Questo imposterà se la finestra minima deve avere la cornice per muoversi e ridimensionarsi. - - - - NetworkConfig - - - Network - Rete - - - - Form - Modulo - - - - Connection - Connessione - - - - Use TCP compatibility mode - Use TCP compatability mode - Usa la modalità per la compatibilità TCP - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Abilita la modalità compatibile TCP</b>.<br />Farà in modo che Mumble usi solo il protocollo TCP quando comunica con il server. Ciò aumenterà il sovraccarico di rete e causerà la perdita di pacchetti che creeranno vuoti nelle comunicazioni, quindi va usato solo se con il sistema standard (che usa UDP per la voce e il TCP per il controllo) non funziona. - - - - Use TCP mode - Usa modalità TCP - - - - Reconnect when disconnected - Ricollegati quando ti disconnetti - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Riconnetti quando ti disconnetti</b>.<br />Mumble proverà a ricollegarsi automaticamente dopo 10 secondi se cade la connessione al server. - - - - Reconnect automatically - Ricollegati automaticamente - - - - Proxy - Proxy - - - - Type - Tipo - - - - Type of proxy to connect through - Tipo di proxy da cui passa la connessione - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - <b>Tipo di proxy tramite cui connettersi</b><br />Ciò fà connettere Mumble attraverso un proxy per tutte le connessioni in uscita. Nota: il proxy tunneling forza Mumble nella modalita di compatibilità TCP, causando l'invio di tutti i dati vocali tramite il canale di controllo. - - - - Direct connection - Connessione diretta - - - - HTTP(S) proxy - HTTP(S) proxy - - - - SOCKS5 proxy - SOCKS5 proxy - - - - Hostname - Nome dell'host - - - - Hostname of the proxy - Nome dell'host proxy - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>Nome dell'host del proxy.<b><br />Specifica il nome del proxy attraverso cui vuoi che passi il traffico di rete. - - - - Port - Porta - - - - Port number of the proxy - Numero di porta del proxy - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>Numero di porta del proxy.</b><br />Specifica il numero della porta su cui il proxy sta in ascolto per le connessioni. - - - - Username - Nome utente - - - - Username for proxy authentication - Nome utente per l'autenticazione del proxy - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Nome utente per l'autenticazione proxy.</b><br />Specifica il nome utente utilizzato per l'autenticazione con il proxy. Nel caso in cui il proxy non utilizza l'autenticazione, o se si desidera effettuare la connessione anonima, è sufficiente lasciare vuoto questo campo. - - - - Password - Password - - - - Password for proxy authentication - Password per l'autenticazione del proxy - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>Password per l'autenticazione proxy.</b><br />Specifica la password utilizzata per l'autenticazione con il proxy. Nel caso in cui il proxy non utilizza l'autenticazione, o se si desidera effettuare la connessione anonima, è sufficiente lasciare vuoto questo campo. - - - - Mumble services - Servizi di Mumble - - - - Check for updates on startup - Controlla aggiornamenti all'avvio - - - - Submit anonymous statistics to the Mumble project - Invia statistiche anonime al progetto Mumble - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>Invia statistiche anonime.</b><br />Mumble ha un piccolo team di sviluppo, e come tale ha bisogno di concentrare lo sviluppo dove è maggiormente necessario. Inviando un po' di statistiche permetti al progetto di stabilire dove concentrare lo sviluppo. - - - - Submit anonymous statistics - Invia statistiche anonime - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - Caricamento della libreria di sovrapposizione fallito. Significa che o: -- la libreria (mumble_ol.dll) non è stata trovata nella directory dove stai eseguendo Mumble -- hai un OS precedente a WinXP SP2 -- non hai la versione di DX9.0c aggiornata al June 2007 - - - - OverlayConfig - - Show no one - Non mostrare nessuno - - - Show only talking - Mostra solo chi parla - - - Show everyone - Mostra tutti - - - Overlay - Sovrapposizione - - - Form - Modulo - - - Options - Opzioni - - - Enable overlay. - Abilita sovrapposizione. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - Stabilisce se la sovrapposizione è attivata o meno. Questa impostazione è settata solo con applicazioni D3D9 in esecuzione, quindi assicuratevi che Mumble sia in esecuzione e che questa opzione sia attiva prima di avviare l'applicazione.<br />Si prega di notare che se si avvia l'applicazione dopo l'avvio di Mumble, o se si disattiva la sovrapposizione durante l'esecuzione, non vi è alcun modo sicuro per riavviare la sovrapposizione senza dover riavviare l'applicazione. - - - Enable Overlay - Abilita la sovrapposizione - - - Who to show on the overlay - Chi mostrare nella sovrapposizione - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - Stabilisce chi mostrare nella sovrapposizione al gioco.</b><br />Se molte persone sono collegate allo stesso canale, la lista sovrapposta potrebbe essere molto lunga. Usa questo per accorciarla.<br /><i>Nessuno</i> - Non mostrare nessuno (ma lascia in esecuzione di sovrapposizione).<br /><i>Solo chi sta parlando</i> - Mostra solo chi sta parlando.<br /><i>Tutti</i> - Mostra tutti. - - - Always show yourself on overlay. - Mostra sempre se stessi nella sovrapposizione. - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Stabilisce se mostrare sempre te stesso o meno. Questa impostazione è utile se non stai visualizzando tutti nella sovrapposizione, dato che vedresti solo il tuo stato se stessi parlando, che non ti permette di vedere che sei statoi escluso o silenziato. - - - Always Show Self - Mostra sempre se stessi - - - Show User custom textures instead of text on the overlay. - Mostra una immagine personalizzata dell'utente al posto della sovrapposizione testuale. - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - Imposta se scaricare e usare una immagine personalizzata per gli utenti registrati. Se disabilitato, verrà usato il testo standard. - - - Show User Textures - Mostra le immagini Utente - - - Position - Posizione - - - Let overlay grow upwards - Fai crescere verso l'alto la sovrapposizione - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - Tiene la sovrapposizione la più piccola possibile e alla posizione da te selezionata. Permette alla sovrapposizione di crescere verso l'alto se necessario. - - - Grow Up - Cresce in alto - - - Y-Position of Overlay - Coordinata Y della sovrapposizione - - - This sets the relative Y position of the overlay. - Imposta la coordinata Y relativa della sovrapposizione. - - - Let overlay grow to the left - Fai crescere la sovrapposizione verso sinistra - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Tiene la sovrapposizione la più piccola possibile e alla posizione da te selezionata. Permette alla sovrapposizione di crescere verso sinistra se necessario. - - - Grow Left - Cresce a sinistra - - - Let overlay grow to the right - Lascia crescere verso destra - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - Tiene la sovrapposizione la più piccola possibile e alla posizione da te selezionata. Permette alla sovrapposizione di crescere verso destra se necessario. - - - Grow Right - Cresce a destra - - - Let overlay grow downwards - Fai crescere la sovrapposizione verso il basso - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - Tiene la sovrapposizione la più piccola possibile e alla posizione da te selezionata. Permette alla sovrapposizione di crescere verso il basso se necessario. - - - Grow Down - Cresci in basso - - - X-Position of Overlay - Coordinata X della sovrapposizione - - - This sets the relative X position of the overlay. - Imposta la coordinata X relativa della sovrapposizione. - - - Font - Carattere - - - Current Font - Carattere corrente - - - TextLabel - EtichettaTesto - - - Set Font - Imposta Carattere - - - Maximum height - Altezza massima - - - Maximum height of names. - Massima altezza dei nomi. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - Stabilisce l'altezza massima dei nomi mostrati, rispetto all'altezza dello schermo. Se la finestra 3D attiva è di 800 pixel di altezza e questa è impostata al 5%, ogni nome sarà di 40 pixel di altezza. Si noti che i nomi non saranno più alti di 60 pixel, con qualsiasi impostazione. - - - Color for players - Colore per i giocatori - - - Change - Cambia - - - Color for talking players - Colore per il giocatore parlante - - - Color for alt-talking players - Colore per il giocatore Alt parlante - - - Color for Channels - Colore per i Canali - - - Color for active Channels - Colore per i Canali attivi - - - - PlayerModel - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - Giocatore connesso al server. L'icona alla sinistra del giocatore indica se sta parlando:<br /><img src="skin:talking_on.png" />Parla<br /><img src="skin:talking_off.png" />In silenzio - - - - This is a channel on the server. Only players in the same channel can hear each other. - Canale sul server. Solamente i giocatori nello stesso canale potranno sentirsi tra loro. - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - Mostra le impostazioni che il giocatore ha sul server, se ne ha:<br /><img src="skin:authenticated.png" />Utente Autenticato<br /><img src="skin:muted_self.png" />Silenziato (Auto)<br /> <img src="skin:muted_server.png" />Silenziato (da admin)<br /><img src="skin:deafened_self.png" /> Escluso (Auto)<br /><img src="skin:deafened_server.png" />Isolato (da admin)<br />Un giocatore autosilenziato probabilmente è solo assente, sta parlando al telefono o qualcosa di simile.<br />Un giocatore silenziato da un amministratore probabilmente anche lui assente, e il rumore che il giocatore stava facendo era abbastanza fastidioso che un amministratore l'ha silenziato. - - - - Name - Nome - - - - Flags - Segnali - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - Sei sicuro di voler spostare questo canale? - - - - PluginConfig - - - - Plugins - Plugins - - - Mumble - Mumble - - - - Plugin has no configure function. - Il Plugins non ha funzioni di configurazione. - - - - Plugin has no about function. - Il Plugins non ha funzioni di informazione. - - - - Form - Modulo - - - - Options - Opzioni - - - - Enable plugins and transmit positional information - Abilita i plugins e trasmette le informazioni posizionali - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - Abilita i plugins per i giochi supportati a ottenere la tua posizione nel gioco e la trasmette con ogni pacchetto voce. Questo consente agli altri giocatori di sentire la tua voce dalla direzione con cui il tuo personaggio è in relazione alla loro. - - - - Link to Game and Transmit Position - Collegato al Gioco e Trasmetti la Posizione - - - - Reloads all plugins - Ricarica tutti i plugins - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - Ricerca e ricarica tutti i plugins. Usare se hai appena aggiunto o cambiato un plugin nella directory dei plugins. - - - - &Reload plugins - &Ricarica i plugins - - - - Information about plugin - Informazioni circa il plugin - - - - This shows a small information message about the plugin. - Mostra qualche informazione riguardo al plugin. - - - - &About - &Circa - - - - Show configuration page of plugin - Mostra la pagina di configurazione del plugin - - - - This shows the configuration page of the plugin, if any. - Mostra la pagina di configurazione del plugin, se c'è. - - - - &Configure - &Configura - - - - Plugins - - - %1 lost link. - %1 collegamento perso. - - - - %1 linked. - %1 collegato. - - - - PortAudioSystem - - - Default Device - Periferica predefinita - - - - PulseAudioSystem - - - Default Input - Input predefinito - - - - Default Output - Output predefinito - - - - ShortcutActionWidget - - - Unassigned - Non asseganto - - - - ShortcutDelegate - - - Unassigned - Non asseganto - - - - ShortcutKeyWidget - - - Press Shortcut - Premi scorciatoia - - - - TextMessage - - Send raw message - Invia messaggio grezzo - - - Disables html formating - Disabilita formattazione html - - - - Message to send - Messaggio da mandare - - - - Preview - Anteprima - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble failed to retrieve version information from the SourceForge server. - Mumble non è riuscito a recuperare le informazioni sull'ultima versione dal server SourceForge. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - Dettagli sulla Catena dei Certificati - - - - Certificate chain - Catena dei Certificati - - - - %1 %2 - %1 %2 - - - - Certificate details - Dettagli dei Certificati - - - - - Common Name: %1 - Nome Comune: %1 - - - - - Organization: %1 - Organizzazione: %1 - - - - Subunit: %1 - Sottounità: %1 - - - - - Country: %1 - Paese: %1 - - - - - Locality: %1 - Località: %1 - - - - - State: %1 - Stato: %1 - - - - Valid from: %1 - Valido da: %1 - - - - Valid to: %1 - Valido fino a: %1 - - - - Serial: %1 - Seriale: %1 - - - - Public Key: %1 bits %2 - Chiave Pubblica: %1 bits %2 - - - - RSA - RSA - - - - DSA - DSA - - - - Digest (MD5): %1 - Firma (MD5): %1 - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - Inviato da: - - - - Unit Name: %1 - Nome Unità: %1 - - - - WASAPISystem - - - Default Device - Periferica predefinita - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_ja.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_ja.ts --- mumble-1.2.3/src/mumble11x/mumble_ja.ts 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_ja.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,6247 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - %1のACLを編集 - - - - Active ACLs - ACLを有効にする - - - - Context - コンテキスト - - - - User/Group - ユーザ/グループ - - - - Permissions - 権限 - - - - Group - グループ - - - - Members - メンバー - - - - &Add - 追加(&A) - - - - &Remove - 削除(&R) - - - - &Up - 上へ(&U) - - - - &Down - 下へ(&D) - - - - Inherit ACLs - ACLを継承する - - - - Applies to this channel - このチャンネルに適用する - - - - Applies to sub-channels - サブチャンネルに適用する - - - - User ID - ユーザID - - - - Deny - 禁止 - - - - Allow - 許可 - - - - Remove - 削除 - - - - Inherit - 継承 - - - - Inheritable - 継承可 - - - - Inherited - 継承済み - - - - Add - 追加 - - - - Add to Remove - 削除リストに追加 - - - - &Groups - グループ(&G) - - - - &ACL - &ACL - - - &OK - &OK - - - Accept changes - 変更を確定 - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - このボタンは現在の グループとACLを 適用しサーバーに送信します。もし誤ってあなた自身の書き込み権限を削除してしまうとサーバーに追加されてしまいますのでご注意ください。 - - - &Cancel - キャンセル(&C) - - - Reject changes - 変更を破棄 - - - This button will cancel all changes and closes the dialog without updating the ACLs or groups on the server. - このボタンは全ての変更をキャンセルし、サーバーのACLやグループを変更せずにダイアログを閉じます。 - - - - List of entries - 項目リスト - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics. - このチャンネルの全てのアクティブな項目を表示します。親チャンネルから継承される項目はイタリック(斜字)体で表示されます - - - - Inherit ACL of parent? - 親チャンネルのACLを継承しますか? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - これは親チャンネルのチェーンへのACLが適用されるか否かに関係なく設定されます。親の"サブチャンネルに適用する"にチェックされた項目だけが継承されます。 - - - - Add new entry - 新しい項目を追加 - - - - This adds a new entry, initially set with no permissions and applying to all. - 新たに項目を作成します。初期状態はパーミッションが無く、全てに適用されます。 - - - - Remove entry - 項目を削除 - - - - This removes the currently selected entry. - 選択されている項目を削除します。 - - - - Move entry up - 項目を上に移動 - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - リスト内の項目を上に動かします。項目が適切に評価されると、ユーザに影響する権限が変更される場合があります。継承した項目より上に動かすことは出来ません。もし本当に必要なら継承された項目を複製する必要があります。 - - - - Move entry down - 項目を下に移動 - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - リスト内の項目を下に動かします。項目が適切に評価されると、ユーザに影響する権限が変更される場合があります。 - - - - Entry should apply to this channel. - Entry should apply to this channel - 入力項目はこのチャンネルに適用されます。 - - - - This makes the entry apply to this channel. - 項目をこのチャンネルに適用します。 - - - - Entry should apply to sub-channels. - 入力項目はサブチャンネルに適用されます。 - - - - This makes the entry apply to sub-channels of this channel. - 項目をこのチャンネルのサブチャンネルに適用します。 - - - - Group this entry applies to - この項目を適用するグループ - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - この項目がどのユーザグループに適用されるかを制御します。 - - - - User this entry applies to - この項目を適用するユーザ - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - この項目がどのユーザに適用されるかを制御します。検索するにはユーザ名を入力してEnterキーを押してください。 - - - - Allow %1 - %1を許可する - - - - Deny %1 - %1を禁止する - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - %1に特権を付与します。特権の許可と禁止の両方が設定されている場合、禁止になります。<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - %1から特権を剥奪します。特権の許可と禁止の両方が設定されている場合、禁止になります。<br />%2 - - - - List of groups - グループリスト - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - チャンネルに定義されている全てのグループです。新たにグループを作成するには名前を入力してEnterを押してください。 - - - - Remove selected group - 選択されたグループを削除 - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - 選択されたグループを削除します。もしグループが継承されていたらリストからは削除されませんが、グループに関するローカルな情報は消えてしまいます。 - - - - Inherit group members from parent - 親からグループメンバーを継承する - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - 親チャンネルでグループが継承可になっている場合、親グループから全てのメンバーを継承します。 - - - - Make group inheritable to sub-channels - サブチャンネルに対してグループを継承可能にする - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - サブチャンネルに対してグループを継承可能にします。もしグループが継承不可ならばサブチャンネルでは同じ名前の新しいグループを作成することが出来ます。 - - - - Group was inherited from parent channel - 親チャンネルから継承したグループ - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - グループが親チャンネルから継承されたことを示しています。このフラグは変更できません。これは単なる情報です。 - - - - Add member to group - グループにメンバーを追加 - - - Type in the name of a player you wish to add to the group and press enter. - グループに追加したいプレイヤーの名前を入力してEnterキーを押してください。 - - - - Remove member from group - グループからメンバーを削除 - - - Type in the name of a player you wish to remove from the group and press enter. - グループから削除したいプレイヤーの名前を入力してEnterキーを押してください。 - - - - Dialog - ダイアログ - - - - Type in the name of a player you wish to add to the group and click Add. - 追加したいプレイヤー名を入力して追加ボタンをクリックしてください。 - - - - Type in the name of a player you wish to remove from the group and click Add. - 削除したいプレイヤー名を入力してAddボタンをクリックしてください。 - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - このチャンネルで有効な項目を全て表示します。親チャンネルから継承した項目はイタリック(斜字)体で表示されます。<br />ACLは上から順に評価されます。つまり、リストの順位を下げる事は優先度が上がる事を意味します。 - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - 選択されたALSA入力のオープンに失敗しました: %1 - - - - Default ALSA Card - デフォルトALSAカード - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - 選択されたALSA出力のオープンに失敗しました: %1 - - - - Default ALSA Card - デフォルトALSAカード - - - - ALSAConfig - - Device selection - デバイス選択 - - - Device to use for microphone - マイクに使用するデバイス - - - This set which device mumble should use. The <i>default</i> device is whatever you have configured in alsaconfig, the <i>hwplug</i> devices are specific hardware devices backed by the ALSA mixer and the <i>hw</i> devices are raw hardware access. Unless your soundcard supports hardware mixing of audio, using the <i>hw</i> device will exclude all other programs from using audio. - Mumbleが使用するデバイスを設定します。<i>デフォルト</i>のデバイスは alsaconfig で設定したものです。 <i>hwplug</i> デバイスはALSAのミキサーに基づく特別なデバイスです。<i>hw</i> デバイスはハードウェアに直接アクセスします。ご使用のサウンドカードがオーディオのハードウェアミキシングをサポートしていない限り、<i>hw</i> デバイス設定では他の全てのプログラムでオーディオを使用することが出来なくなってしまいます。 - - - Device to use for speakers/headphones - スピーカー/ヘッドホンに使用するデバイス - - - Input - 入力 - - - Output - 出力 - - - Output Options - 出力オプション - - - Output Delay - 出力猶予 - - - Amount of data to buffer for ALSA - ALSA用バッファデータの量 - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 出力バッファにおけるプリバッファの量を設定します。いろいろな値で試してみて、急に不安定にならない一番小さな値に設定してください。 - - - ALSA - ALSA - - - %1ms - %1ms - - - Form - フォーム - - - TextLabel - テキストラベル - - - Default ALSA Card - デフォルトALSAカード - - - - ASIOConfig - - - Device selection - デバイス選択 - - - - Capabilities - ケーパビリティ - - - - Channels - チャンネル - - - - Configure input channels - 入力チャネルを設定します - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples "What you hear".<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be "Mic L" while Speaker should be "Mix L" and "Mix R" - ASIOのための入力チャンネルを設定します。少なくとも1つのチャンネルをマイクとスピーカーとして選んでください。<i>マイク</i> はあなたのマイクが接続されているところです。<i>スピーカー</i>は"聞くもの"を試してみるチャンネルです。Sound Blaster Audigy 2 ZS の例ではスピーカーが"Mix L" and "Mix R"の時、マイクを"Mic L"にするのが良い選択のひとつです。 - - - - Device to use for microphone - マイクに使用するデバイス - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - 問い合わせるデバイスを選択します。あなたはまだデバイスを実際に問い合わせ、使用するチャンネルを選ぶ必要があります。 - - - - Device - デバイス - - - - &Query - 問い合わせ(&Q) - - - - Query selected device - 選択されたデバイスの問い合わせを行います - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - チャンネルで選択されたデバイスを問い合わせます。多くのASIOドライバーが極端に不安定であることに注意してください。それらに問い合わせをすることはアプリケーションやシステムのクラッシュを引き起こすかもしれません。 - - - - &Configure - 設定(&C) - - - - Configure selected device - 選択されたデバイスの設定を行います - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - 選択されたデバイスの設定を行います。多くのASIOドライバーが極端に不安定であることに注意してください。それらに問い合わせをすることはアプリケーションやシステムのクラッシュを引き起こすかもしれません。 - - - - Driver name - ドライバー名 - - - Buffersize - バッファサイズ - - - - Microphone - マイク - - - - <- - <- - - - - -> - -> - - - - Unused - 未使用 - - - - Speakers - スピーカー - - - %1 (ver %2) - %1 (ver %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 ms -> %2 ms (%3 ms resolution) %4Hz - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- 未使用 - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - ASIOの初期化に失敗しました: %1 - - - - - Failed to instantiate ASIO driver - ASIOドライバのインスタンス化に失敗しました - - - - ASIO - ASIO - - - - Form - フォーム - - - TextLabel - テキストラベル - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - ASIOのための入力チャンネルを設定します。少なくとも1つのチャンネルをマイクとスピーカーとして選んでください。<i>マイク</i> はあなたのマイクが接続されているところで、<i>スピーカー</i>は"聞くもの"を試してみるチャンネルです。Sound Blaster Audigy 2 ZS の例ではスピーカーが"Mix L" and "Mix R"の時、マイクを"Mic L"にするのが良い選択のひとつです。 - - - - Buffer size - バッファサイズ - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - ASIOのための入力チャンネルを設定します。少なくとも1つのチャンネルをマイクとスピーカーとして選んでください。<i>マイク</i> はあなたのマイクが接続されているところで、<i>スピーカー</i>は"聞くもの"を試してみるチャンネルです。Sound Blaster Audigy 2 ZS の例ではスピーカーが"Mix L" and "Mix R"の時、マイクを"Mic L"にするのが良い選択のひとつです。 - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - ASIOを使用するためには少なくとも1つのマイクと1つのスピーカーを選択しなければなりません。もしマイクサンプリングが必要なだけなら DirectSound を使用してください。 - - - - Opening selected ASIO device failed. No input will be done. - 選択されたASIOドライバを開くのに失敗しました。入力は行われません。 - - - - AboutDialog - - <h3>Mumble v1.0.0</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v1.0.0</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - - &About Mumble - Mumbleについて(&A) - - - - &License - ライセンス(&L) - - - - OK - OK - - - - About Mumble - Mumbleについて - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - - AboutSpeexDialog - - <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Speexについて</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - - - - OK - OK - - - - About Speex - Speexについて - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>Speexについて</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - - - - AudioConfigDialog - - Interfaces - インターフェース - - - Transmission - 伝送方式 - - - Compression - 圧縮 - - - Jitter Buffer - ジッタバッファ - - - Input - 入力 - - - Input method for audio - 音声入力方法 - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声の入力方法です。</b><br />ほとんどの場合DirectSoundで問題ありません。 - - - Output - 出力 - - - Output method for audio - 音声入力方法 - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声の出力方法です。</b><br />ほとんどの場合DirectSoundで問題ありません。 - - - Continuous - 常に有効 - - - Voice Activity - 声で有効化 - - - Push To Talk - キー押下で有効化 - - - Transmit - 送信 - - - When to transmit your speech - 発言を送信するタイミング - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>発言を送信するタイミングを設定します。</b><br /><i>常に有効</i> - 常時音声入力を受け付けます<br /><i>声で有効化</i> - はっきりとしゃべっている時に受け付けます。<br /><i>キー押下で有効化</i> - <i>ショートカットキー</i>で設定したキーを押している間音声入力を受け付けます。 - - - Voice Hold - 送信継続時間 - - - How long to keep transmitting after silence - 音声が無くなった後、どれくらい送信を続けるか - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>音声が無くなった後、送信がどれくらい続くかを選択します。</b><br />あなたが話している時(名前の後ろで点滅しているアイコンで確認できます)に音声が途切れてしまうようならば、この設定をより高くしてください。<br />この設定は"声で有効化"の場合のみ効果があります。 - - - Audio per packet - パケットあたりの音声長 - - - How many audio frames to send per packet - 送信1パケットに含む音声フレームの長さ - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>送信1パケットに含む音声フレームの長さを選択します。</b><br />これを大きくするとあなたの音声の遅延が大きくなりますが、必要とするネットワーク帯域幅は下がります。 - - - Use TCP mode - TCPモードを使用する - - - Use TCP Compatibility mode - TCP互換モードを使用します - - - <b>Enable TCP Compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>TCP互換モードを有効にします。</b>.<br />この設定をするとMumbleがサーバーとの通信にTCPのみを使用するようになります。この設定は通信のオーバーヘッドを増大させ、通信時に音声が途切れる原因になるので、デフォルトの設定(音声:UDP 操作:TCP)が使用できない場合だけ使用するのが良いでしょう。 - - - Automatic Reconnect - 自動再接続 - - - Reconnect when disconnected - 切断時に再接続を試みます - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>切断時に再接続を試みます。</b><br />この設定をすると、サーバーへの接続が失敗した際、10秒後に再接続を行います。 - - - Maximum bandwidth used for sent audio - 音声の送信に使用するネットワーク帯域幅のピーク値 - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 90% of this overhead). - <b>音声の送信に使用される帯域の最大値を示します。</b><br />これは、あなたのPCから送出される帯域幅のピーク値を示します。Audioビットレートは音声データ単独の最大ビットレート(VBR使用時)です。 Positionは位置情報のために使用されるビットレートです。 Overheadは独自のフレーミングとIPパケットヘッダ(IP と UDP はこのOverheadの90%)です。 - - - Outgoing Bitrate - 送信方向のビットレート - - - Quality - 音質 - - - Quality of compression (peak bandwidth) - 圧縮品質(ピーク帯域幅) - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>圧縮品質を設定します。</b><br />送出される音声のためにどれくらいの帯域幅を使えるか決定します。 - - - Complexity - 計算量 - - - Complexity of compression (CPU) - 圧縮の計算量(CPU) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>圧縮の計算量を設定します。</b><br />送信される声の音質を向上させるためにどれくらいのCPUリソースを使えるか決定します。 - - - Amp - アンプ - - - Maximum amplification of input sound - 音声入力の最大増幅量 - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>音声入力の最大増幅量です。</b><br />Mumbleは圧縮を行う前に入力量を正常化します。この設定は、どれくらい音量を増幅させるかを決定します。<br />実際の音量はその時の発言パターンによって変化しますが、ここで指定された音量を上回ることはありません。<br />音声統計で<i>マイクの音量</i>レベルが常に100%近くに達しているなら、この値を2.0くらいにしたくなるかも知れません。しかし、(大部分の人がそうだと思いますが)100%に届かないなら、この値をより高くしてください。<br />あなたが非常に穏やかに話している時に<i>マイク音量 * 増幅値 >= 100</i> となるのが理想的です。<br /><br />この値を最大にすることに実害はありませんが、だからといって適当に最大値に合わせてしまうと他の会話まで拾ってしまうので気をつけてください。 - - - Default Jitter Buffer - ジッタバッファのデフォルト - - - How long to prebuffer on first packet - 初回パケットのプリバッファまでの長さ - - - <b>This sets the default buffer size for the jitter buffer</b>.<br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the default buffer size to use on the first packet to arrive from a new speaker, or when a speaker using Voice Activity or Push-To-Talk just started talking again. If the start of sentences you hear is very jittery, increase this value. - <b>ジッタバッファのデフォルトサイズを設定します。</b><br />全ての受信音声は一時保存されます。ジッタバッファは、現在のネットワークの状態に合わせて一時保存の領域を小さくしようとし続けるので、レイテンシーは可能な限り小さくなります。この設定は、使用する最小のバッファサイズを決定します。これは、新たな話し手から到着する最初のパケット(または"声で有効化"または"キー押下で有効化"にしている話し手の音声が再開したとき)に使用されるデフォルトバッファサイズを設定します。聞こえてくる会話の出だしが不安定なら、この値を増やしてください。 - - - Basic Audio - 基本設定 - - - %1 ms - %1 ms - - - %1s - %1s - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Position %4, Overhead %3) - - - Loopback Test - ループバックテスト - - - PTT Audio cue - キー押下を音で通知 - - - Audible audio cue when push-to-talk pressed and released - "キー押下で有効化"設定の時、ショートカットキーが押されるのと離されるタイミングで音による通知を行います。 - - - <b>This enables the audio cues for "push to talk"</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>"キー押下で有効化"設定の際、音による通知を行います。</b><br />これを設定するとキーを押した時と離した時に短いビープ音が聞こえるようになります。 - - - None - なし - - - Local - ローカル - - - Server - サーバー - - - Desired loopback mode - 使用したいループバックモード - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>ループバックテストモードの一つが有効になります。</b><br /><i>なし</i> - ループバックしない<br /><i>ローカル</i> - ローカルなサーバーをエミュレートします。<br /><i>サーバー</i> - サーバーにループバックを要求します。<br />ループバックが有効になっている間、他のプレイヤーはあなたの声を聞くことが出来ないのでご注意ください。この設定はアプリケーション終了時に保存されません。 - - - Delay Variance - レイテンシー調整 - - - Variance in packet latency - パケットレイテンシーの変動値 - - - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>ループバックテストの為のパケットレイテンシーの値を調整します。</b><br />音声のネットワーク経路は、ほとんどの場合若干のレイテンシーを含んでいます。 この設定はループバックモードでのテスト時、レイテンシーの値を変更できるようにします。例えば、この値を15msにすると、20-35msのレイテンシーや80ms-95msのレイテンシーを持ったネットワークをエミュレートするでしょう。 国内のネット接続ではおよそ5msくらいのレイテンシーがあります。 - - - Packet Loss - パケットロス - - - Packet loss for loopback mode - ループバックモードでのパケットロス - - - Form - フォーム - - - &Input - 入力(&I) - - - &Output - 出力(&O) - - - &Transmit - 送信(&T) - - - Voice &Hold - 送信継続時間(&H) - - - TextLabel - テキストラベル - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>音声の送信に使用される帯域幅の最大値を示します。</b><br />これは、あなたのPCから送出される帯域の最も大きな値を表示しています。Audioビットレートは音声データ単体の最大ビットレート(VBR使用時)を表します。 Positionは位置情報のために使用されるビットレート表し、Overheadは独自のフレーミングとIPパケットヘッダ(IP と UDP はこのOverheadの90%)を表しています。 - - - &Quality - 音質(&Q) - - - &Complexity - 計算量(&C) - - - Audio Processing - 音声処理 - - - Noise Suppression - ノイズ抑制 - - - Noise suppression - ノイズ抑制 - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>ノイズ抑制の量を設定します。</b><br />値を大きくすると、より積極的に定常ノイズを抑制しようとします。 - - - Amplification - 音量の増幅 - - - Audio Output - 音声出力 - - - Default &Jitter Buffer - ジッタバッファのデフォルト(&J) - - - Safety margin for jitter buffer - ジッタバッファの安全マージン - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>ジッタバッファのための最小の安全マージンを設定します。</b><br />全ての受信音声は一時保存されます。ジッタバッファは、現在のネットワークの状態に合わせて一時保存の領域を小さくしようとし続けるので、レイテンシーは可能な限り小さくなります。この設定は、使用する最小のバッファサイズを決定します。聞こえてくる会話の出だしが不安定なら、この値を増やしてください。 - - - Volume - 音量 - - - Volume of incoming speech - 受信音声の音量 - - - <b>This adjusts the volume of incoming speech.</b><br />Note that this can only be used to decrease the volume. No amplification is possible. - <b>受信する音声の音量を調整します。</b><br />ここでは、音量を下げる事のみが可能です。増やす事は出来ません。 - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>ループバックモードでのパケットロスを設定します。</b><br />これはパケットロスの割合です。送信方向の帯域幅のピークに達するか、ネットワーク接続に問題がない限り、これは0%のはずです。 - - - &Loopback - ループバック(&L) - - - Off - オフ - - - DoublePush Time - 二重押し時間 - - - Use SNR based speech detection - S/N比に基づく発言認識を使用 - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>発言認識にS/N比を使うかどうかを決定します。</b><br />このモードでは、ノイズ無しに近い状態に比較して入力が解析され、その明瞭度が発言の検出に使用されます。 - - - Signal to Noise - S/N比 - - - Use Amplitude based speech detection. - 信号の強さに基づく発言認識を使用 - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>発言認識に信号の強さを使用するかを設定します。</b>このモードにすると、入力信号そのものの強さが発言の検出に使用されます。 - - - Amplitude - 信号の強さ - - - Silence Below - 沈黙しきい値 - - - Signal values below this counts as silence - 沈黙と判定される信号値のしきい値 - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>声を検出するための基準値を設定します。</b>手動で調整するためには音声統計ウインドウを一緒にご利用ください。"沈黙しきい値"以下の値は常に発言していない状態と見なされ、"発言しきい値"より上の値は発言と見なされます。中間の値は既に話し中であれば発言と判断されますが、新たな発言であると判断する材料にはなりません。 - - - Speech Above - 発言しきい値 - - - Signal values above this count as voice - 発言と判定される信号値のしきい値 - - - Connection - 接続 - - - - AudioInput - - - Form - フォーム - - - - Interface - インターフェース - - - - System - システム - - - - Input method for audio - 音声入力方法 - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声の入力方法です。</b><br />ほとんどの場合DirectSoundで問題ありません。 - - - - Device - デバイス - - - - Input device for audio - Output method for audio - 音声入力方法 - - - - <b>This is the input device to use for audio.</b> - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声のための入力デバイスです。</b> - - - - Cancel Echo - エコーキャンセル - - - - Transmission - 伝送方式 - - - - &Transmit - 送信(&T) - - - - When to transmit your speech - 発言を送信するタイミング - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>発言を送信するタイミングを設定します。</b><br /><i>常に有効</i> - 常時音声入力を受け付けます<br /><i>声で有効化</i> - はっきりとしゃべっている時に受け付けます。<br /><i>キー押下で有効化</i> - <i>ショートカットキー</i>で設定したキーを押している間音声入力を受け付けます。 - - - - DoublePush Time - 二重押し時間 - - - - TextLabel - テキストラベル - - - Audible audio cue when push-to-talk pressed and released - "キー押下で有効化"設定の時、ショートカットキーが押される/離されるといったタイミングで音による通知を行います。 - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>プッシュトークの際に通知を行います</b><br />この設定を有効にすると、ショートカットキーが押されたり離されたりするタイミング短いビープ音を鳴らします。 - - - - PTT Audio cue - キー押下を音で通知 - - - - Use SNR based speech detection - S/N比に基づく発言認識を使用 - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>発言認識にS/N比を使うかどうかを決定します。</b><br />このモードでは、ノイズ無しに近い状態に比較して入力が解析され、その明瞭度が発言の検出に使用されます。 - - - - Signal to Noise - S/N比 - - - - Use Amplitude based speech detection. - 信号の強さに基づく発言認識を使用。 - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>発言認識に信号の強さを使用するかを設定します。</b>このモードにすると、入力信号そのものの強さが発言の検出に使用されます。 - - - - Amplitude - 信号の強さ - - - - Voice &Hold - 送信継続時間(&H) - - - - How long to keep transmitting after silence - 音声が無くなった後、どれくらい送信を続けるか - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>音声が無くなった後、送信がどれくらい続くかを選択します。</b><br />あなたが話している時(名前の後ろで点滅しているアイコンで確認できます)に音声が途切れてしまうようならば、この設定をより高くしてください。<br />この設定は"声で有効化"の場合のみ効果があります。 - - - - Silence Below - 沈黙しきい値 - - - - Signal values below this counts as silence - 沈黙と判定される信号値のしきい値 - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>声を検出するための基準値を設定します。</b>手動で調整するためには音声統計ウインドウを一緒にご利用ください。"沈黙しきい値"以下の値は常に発言していない状態と見なされ、"発言しきい値"より上の値は発言と見なされます。中間の値は既に話し中であれば発言と判断されますが、新たな発言であると判断する材料にはなりません。 - - - - Speech Above - 発言しきい値 - - - - Signal values above this count as voice - 発言と判定される信号値のしきい値 - - - - Compression - 圧縮 - - - - &Quality - 音質(&Q) - - - - Quality of compression (peak bandwidth) - 圧縮品質(ピーク帯域幅) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>圧縮品質を設定します。</b><br />送出される音声のためにどれくらいの帯域幅を使えるか決定します。 - - - &Complexity - 計算量(&C) - - - Complexity of compression (CPU) - 圧縮の計算量(CPU) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>圧縮の計算量を設定します。</b><br />送信される声の音質を向上させるためにどれくらいのCPUリソースを使えるか決定します。 - - - - Audio per packet - パケットあたりの音声長 - - - - How many audio frames to send per packet - 送信1パケットに含む音声フレームの長さ - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>送信1パケットに含む音声フレームの長さを選択します。</b><br />これを大きくするとあなたの音声の遅延が大きくなりますが、必要とするネットワーク帯域幅は下がります。 - - - Maximum bandwidth used for sent audio - 音声の送信に使用するネットワーク帯域幅のピーク値 - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>音声の送信に使用される帯域幅の最大値を示します。</b><br />これは、あなたのPCから送出される帯域の最も大きな値を表示しています。Audioビットレートは音声データ単体の最大ビットレート(VBR使用時)を表します。 Positionは位置情報のために使用されるビットレート表し、Overheadは独自のフレーミングとIPパケットヘッダ(IP と UDP はこのOverheadの90%)を表しています。 - - - - Audio Processing - 音声処理 - - - - Noise Suppression - ノイズ抑制 - - - - Noise suppression - ノイズ抑制 - - - <b>This sets the ammount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>ノイズ抑制の量を設定します。</b><br />値を大きくすると、より積極的に定常ノイズを抑制しようとします。 - - - - Amplification - 音量の増幅 - - - - Maximum amplification of input sound - 音声入力の最大増幅量 - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>音声入力の最大増幅量です。</b><br />Mumbleは圧縮を行う前に入力量を正常化します。この設定は、どれくらい音量を増幅させるかを決定します。<br />実際の音量はその時の発言パターンによって変化しますが、ここで指定された音量を上回ることはありません。<br />音声統計で<i>マイクの音量</i>レベルが常に100%近くに達しているなら、この値を2.0くらいにしたくなるかも知れません。しかし、(大部分の人がそうだと思いますが)100%に届かないなら、この値をより高くしてください。<br />あなたが非常に穏やかに話している時に<i>マイク音量 * 増幅値 >= 100</i> となるのが理想的です。<br /><br />この値を最大にすることに実害はありませんが、だからといって適当に最大値に合わせてしまうと他の会話まで拾ってしまうので気をつけてください。 - - - - Current speech detection chance - 現在の発言検出見込み - - - - Audible audio cue when push-to-talk is activated or deactivated - "プッシュトーク"の設定の時、ショートカットキーが押される/離されるといったタイミングで音による通知を行います - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>S/N比を使用して発言認識を設定します。</b><br />このモードでは、入力は明らかな信号に似た何かに分析され、その信号の明快さは、音声検出ののために使用されます。 - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>現在の発言検出設定を表します。</b><br />設定ダイアログか音声ウィザードから設定を変更することができます。 - - - - Idle AutoMute - 自動ミュートまでの待ち時間 - - - - How long to remain idle before auto-mute. - 自動ミュートまで必要なアイドル時間。 - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - アイドリング時間を設定します。指定時間のあいだ、サーバへ何の音声も送信されなかった場合、ミュートになります。 - - - - Maximum bandwidth used for sending audio - 音声を送信するために使う最大帯域 - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>ノイズ抑制の量を設定します。</b><br />値を大きくすると、より積極的に定常ノイズを抑制しようとします。 - - - - AudioInputDialog - - - Continuous - 常に有効 - - - - Voice Activity - 声で有効化 - - - - Push To Talk - キー押下で有効化 - - - - Audio Input - 音声入力 - - - - - %1 ms - %1 ms - - - - - Off - オフ - - - - %1 s - %1 s - - - - -%1 dB - -%1 dB - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1kbit/s (Audio %2, Position %4, Overhead %3) - - - - %1 min - %1 min - - - - AudioOutput - - - Form - フォーム - - - - Interface - インターフェース - - - - System - システム - - - - Output method for audio - Input method for audio - 音声入力方法 - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声の出力方法です。</b><br />ほとんどの場合DirectSoundで問題ありません。 - - - - Device - デバイス - - - - Output device for audio - 音声のための出力デバイス - - - - <b>This is the output device to use for audio.</b> - <b>これは音声を出力するために使うデバイスです。</b> - - - - Positional Audio - 位置音響を使う - - - - Audio Output - 音声出力 - - - - Default &Jitter Buffer - ジッタバッファのデフォルト(&J) - - - - Safety margin for jitter buffer - ジッタバッファの安全マージン - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>ジッタバッファのための最小の安全マージンを設定します。</b><br />全ての受信音声は一時保存されます。ジッタバッファは、現在のネットワークの状態に合わせて一時保存の領域を小さくしようとし続けるので、レイテンシーは可能な限り小さくなります。この設定は、使用する最小のバッファサイズを決定します。聞こえてくる会話の出だしが不安定なら、この値を増やしてください。 - - - - TextLabel - テキストラベル - - - - Volume - 音量 - - - - Volume of incoming speech - 受信音声の音量 - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>受信する音声の音量を調整します。</b><br />ここでは、音量を下げる事のみが可能です。増やす事は出来ません。 - - - - Output Delay - 出力猶予 - - - - Amount of data to buffer - バッファデータ量 - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 出力バッファにおけるプリバッファの量を設定します。いろいろな値で試してみて、急に不安定にならない一番小さな値に設定してください。 - - - Volume attenuation - ボリューム減衰 - - - MinDistance - 最小距離 - - - Minimum distance to player before sound decreases - 音が小さくなる前のプレイヤーへの最小距離 - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - サウンドの計算に使う最小距離を設定します。少なくともこの距離だけ離れていれば、他のプレイヤーの音声は減衰しません。 - - - MaxDistance - 最大距離 - - - Maximum distance, beyond which sound won't decrease - 音が小さくならない最大距離 - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - サウンドの計算に使う最大距離を設定します。これよりも遠くなると、他のプレイヤーの音声はこれ以上減衰しなくなります。 - - - RollOff - ロールオフ - - - - Factor for sound volume decrease - ボリューム減少の割合 - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - 最小距離を超えた時、音量がどのくらい落ちるかについての値です。普通(1.0)の設定では距離が2倍になるたびに音量は半分になります。これを大きくすると音量の落ち込みが速くなり、小さくすると音量の落ち込みは遅くなります。 - - - - Bloom - ブルーム - - - - Loopback Test - ループバックテスト - - - - Delay Variance - レイテンシー調整 - - - - Variance in packet latency - パケットレイテンシーの変動値 - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>ループバックテストの為のパケットレイテンシーの値を調整します。</b><br />音声のネットワーク経路は、ほとんどの場合若干のレイテンシーを含んでいます。 この設定はループバックモードでのテスト時、レイテンシーの値を変更できるようにします。例えば、この値を15msにすると、20-35msのレイテンシーや80ms-95msのレイテンシーを持ったネットワークをエミュレートするでしょう。 国内のネット接続ではおよそ5msくらいのレイテンシーがあります - - - - Packet Loss - パケットロス - - - - Packet loss for loopback mode - ループバックモードでのパケットロス - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>ループバックモードでのパケットロスを設定します。</b><br />これはパケットロスの割合です。送信方向の帯域幅のピークに達するか、ネットワーク接続に問題がない限り、これは0%のはずです - - - - &Loopback - ループバック(&L) - - - - Desired loopback mode - 使用したいループバックモード - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>ループバックテストモードの一つが有効になります。</b><br /><i>なし</i> - ループバックしない<br /><i>ローカル</i> - ローカルなサーバをエミュレートします。<br /><i>サーバ</i> - サーバにループバックを要求します。<br />ループバックが有効になっている間、他のプレイヤーはあなたの声を聞くことが出来ないのでご注意ください。この設定はアプリケーション終了時に保存されません。 - - - - Factor for sound volume increase - ボリューム増加の割合 - - - - The connected "speakers" are actually headphones. - 接続している "出力機器" はヘッドホンです。 - - - - Minimum Distance - 最小距離 - - - - Minimum distance to player before sound volume decreases - サウンドのボリュームが減る前のプレイヤに対する最小の距離です - - - - Maximum Distance - 最大距離 - - - - Maximum distance, beyond which speech volume won't decrease - 音声のボリュームが減少しない最大の距離 - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - 音の計算のために最大距離の設定します。 これよりより遠くに離れているとき、他のプレーヤーのスピーチボリュームはこれ以上減少しないでしょう。 - - - - Minimum Volume - 最小音量 - - - - What should the volume be at the maximum distance? - ボリュームは最大距離がどのくらいであるべきか? - - - - How much should sound volume increase for sources that are really close? - 入力ソースの近さによってどのくらいボリュームを上げるか? - - - Connected "speakers" are actually headphones. - 接続している "出力機器" はヘッドホンです。 - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - スピーカーを接続しておらず、ヘッドホンだけであることを確認してください。ヘッドホンはあなたからまっすぐ右と左に位置しているのに対し、スピーカーは一般的にあなたの正面に位置しているため、これは重要になります。 - - - - Headphones - ヘッドホン - - - - Other Applications - 他のアプリケーションの音量 - - - - Volume of other applications during speech - 発言中の他のアプリケーションの音量 - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>発言中における他のアプリケーションの音量減少</b><br />Mumbleは音声受信中に他のアプリケーションの音量を下げるのを手助けします。ここでは、あなたが話している間の他アプリケーションの音量比率を設定します。 - - - - AudioOutputDialog - - - None - なし - - - - Local - ローカル - - - - Server - サーバ - - - - Audio Output - 音声出力 - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1% - - - - %1ms - %1ms - - - - - %1m - %1m - - - %1 - %1 - - - - AudioStats - - - Peak microphone level - 最大マイクレベル - - - - Peak speaker level - 最大スピーカーレベル - - - - Peak clean level - 最大クリーンレベル - - - Microphone loudness - マイク音量 - - - Mic Signal-To-Noise - マイクS/N比 - - - - Speech Probability - 発言確率 - - - Audio bitrate - 音声ビットレート - - - - Peak power in last frame - 直近フレームでの最大の強さ - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. - 直近のフレーム(20 ms)での最大音量さを表示します。そしてこれは、通常"入力の強さ"として表示されている測定値と同じものです。これは無視して<b>音量</b>を見るようにしてください。こちらの方がより安定していて外部要素に影響されにくいです。 - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - 直近のフレーム(20 ms)におけるスピーカーの最大音量を表示します。スピーカの設定を変更して多重チャンネルサンプリング法(例えばASIO)を使用していない限り、これは0になります。セットアップでそのような構成をしているのに、ほかのプログラムが音声を再生している間も0を表示しているなら、セットアップは正しく動いていません。 - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. - 直近のフレーム(20 ms)における全ての処理後の最大音量を表示します。あなたが話していないとき、これは -96 dBであるのが理想です。しかし実際には音楽スタジオでも -60 dB、あなたの環境では -20 dB くらい出れば良い方でしょう。あなたが話している時は、-5 から -10 dB のあたりまで上がります。<br />もしあなたがエコーキャンセルを使っていて、話してもいないのに -15 dB まで上がるようならセットアップは失敗しています。この場合、反響によってほかのプレイヤーを悩ますことになります。 - - - - How close the current input level is to ideal - 入力レベルの理想値までの差 - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality - 現在の入力音量が理想の値からどれくらい離れているかを表示します。マイクの音量を調整するためには、録音ボリュームを調整するプログラムを開いて、話している間この値を見てください。<br /><b>noob(訳注: 初心者の事)にやられて怒り狂っているときのように大声で叫んでください。</b><br />この値が100%近くになるまで音量を調整してください。しかし100%を超えないように注意しましょう。もし超えてしまうとあなたの音声の一部が省略されて、音質が低下するでしょう。 - - - - Signal-To-Noise ratio from the microphone - マイクからのS/N比 - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - 直近のフレーム(20 ms)におけるマイクの信号対雑音比(S/N比)です。これは、声がノイズと比較してどれくらいはっきりしているかを表しています。<br />もしこの値が1.0以下なら、信号の中に声よりもノイズのほうが多くなっており、音質は低下しているでしょう。<br />この値に上限はありませんが、音楽スタジオでもなければ40-50を大きく上回るとは思わないでください。 - - - - Probability of speech - 発言確率 - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - 直近のフレーム(20 ms)が発言であったり、環境ノイズ以外の音であった確率です。<br />声で有効化する送信方式はこの値が正しい事に依存します。この事による優れた点は話の途中は常に発言と見なされることです。問題は、単語と発言開始の間にある休止です。ため息と'h'で始まる単語を見分けるのは難しい事です。<br />これが太字になっていたら、Mumbleが現在送信中である事を表しています(接続中の場合)。 - - - - Bitrate of last frame - 直近フレームのビットレート - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - 直近の圧縮されたフレーム(20 ms)における音声ビットレートです。VBRが品質を調整するので値は上下します。最大ビットレートを調整するには、設定ダイアログで<b>圧縮 計算量</b>を調整してください。 - - - - Power spectrum of input signal and noise estimate - 入力信号とノイズ予想のパワースペクトル - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - 現在の入力信号(赤線)とノイズ予想(青線)のパワースペクトルを表します。<br />すべての振幅は判りやすい結果(各周波帯でノイズよりどれくらい多くの信号が存在するか)を提供するために30倍されます。<br />マイクの雑音状況を改善しようと微調整しているならば、多分に興味深いものとなるでしょう。良好な状態では、一番下に小さく揺れている青線だけがあるべきです。もし青線がグラフの中ほどより上にあるなら、あなたは深刻にノイズの多い環境にあると言えます。 - - - - Weights of the echo canceller - エコーキャンセラの重み - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - 下に向かっている時間と右に向かっている周波数でエコーキャンセラの重みを表示します。<br />理想的には、これは反響が全くない事を示す黒でなくてはなりません。普通は、反響が遅れる時間を表す青っぽい色の横縞が一つ以上あるでしょう。あなたは、重みがリアルタイムに更新されるのを見る事ができます。<br />反響しないものがない限り、ここでは何も有用なデータが得られない事に注意してください。安定した状態で何曲かの音楽を再生してください。<br />あなたは周波数領域における重みの実数または虚数の部分、もしくは計算された係数と位相の表示を選んで見ることができます。これらで最も役に立つのはおそらく係数です。係数とは反響の大きさであり、送信方向の信号が一定時間毎にどのくらい取り除かれているかを表します。他の表示は主にエコーキャンセラアルゴリズムを調整したい人にとって役に立ちます。<br />注意: 係数モードの時に全ての表示が大幅に変動する場合、エコーキャンセラは2つの入力源(スピーカーとマイク)の間にどんな相関関係も見出せていません。反響に非常に長い遅れがあるか、入力源のうち1つが誤って設定されているかのどちらかでしょう。 - - - Mumble - Mumble - - - Real - 実数 - - - Imaginary - 虚数 - - - Modulus - 係数 - - - Phase - 位相 - - - >1000ms - >1000ms - - - - Audio Statistics - 音声統計 - - - - Input Levels - 入力レベル - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - 直近のフレーム(20 ms)での最大の強さを表示します。そしてこれは、通常"入力の強さ"として表示されている測定値と同じものです。これは無視して<b>マイクの強さ</b>を見るようにしてください。こちらの方がより安定していて外部要素に影響されにくいです。 - - - TextLabel - テキストラベル - - - - Signal Analysis - 信号分析 - - - - Microphone power - マイクの強さ - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - 現在の入力音量が理想の値からどれくらい離れているかを表します。マイクの音量を調整するためには、録音ボリュームを調整するプログラムを開いて、話している間この値を見てください。<br /><b>noob(訳注: 初心者の事)にやられて怒り狂っているときのように大声で叫んでください。</b><br />この値が100%近くになるまで音量を調整してください。しかし100%を超えないように注意しましょう。もし超えてしまうとあなたの音声の一部が省略されて、音質が低下するでしょう。 - - - - Signal-To-Noise ratio - S/N比 - - - - Configuration feedback - 設定フィードバック - - - - Current audio bitrate - 現在の音声ビットレート - - - - DoublePush interval - 二重押しの間隔 - - - Time between last two PushToTalk presses - 直近2回のショートカットキー押下の間隔 - - - - Speech Detection - 発言検出 - - - - Current speech detection chance - 現在の発言検出見込み - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>現在の発言検出設定を表します。</b><br />設定ダイアログか音声ウィザードから設定を変更することができます。 - - - - Signal and noise power spectrum - 信号とノイズのパワースペクトル - - - - Echo Analysis - 反響分析 - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - 直近のフレーム(20 ms)における全ての処理後の最大音量を表示します。あなたが話していないとき、これは -96 dBであるのが理想です。しかし実際には音楽スタジオでも -60 dB、あなたの環境では -20 dB くらい出れば良い方でしょう。あなたが話している時は、-5 から -10 dB のあたりまで上がります。<br />もしあなたがエコーキャンセルを使っていて、話してもいないのに -15 dB まで上がるようならセットアップは失敗しています。この場合、反響によってほかのプレイヤーを悩ますことになります。 - - - - Time between last two Push-To-Talk presses - 直近2回のプッシュトークの間隔 - - - - >1000 ms - >1000ms - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - 音声調整ウィザード - - - - Introduction - イントロダクション - - - - Welcome to the Mumble Audio Wizard - Mumble 音声ウィザードへようこそ - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - これはMumbleの音声を調整するためのウィザードです。サウンドカードの入力レベルとMumbleでの音声処理のパラメータを正しく設定するお手伝いをします。 - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - ウィザードが動作中の間、音声はあなたが聞けるようPC上だけで完結し、サーバには送信されませんのでご注意ください。 - - - - Finished - 完了 - - - - Enjoy using Mumble - Mumbleをお楽しみください - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - おめでとうございます!Mumbleでリッチなサウンド体験をする準備が整いました。 - - - - Device selection - デバイス選択 - - - - Selecting the input and output device to use with Mumble. - Mumbleで使用する入力および出力のデバイスを選択します。 - - - - Input device - 入力デバイス - - - - This is the device your microphone is connected to. - あなたが接続しているデバイスです。 - - - - - System - システム - - - - Input method for audio - 音声入力方法 - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声の入力方法です。</b><br />ほとんどの場合DirectSoundで問題ありません。 - - - - - Device - デバイス - - - - Input device to use - 入力に使用するデバイス - - - - <b>Selects which sound card to use for audio input.</b> - <b>音声の入力にどのサウンドカードを使用するか選択してください。</b> - - - - Output device - 出力デバイス - - - - This is the device your speakers or headphones are connected to. - あなたのスピーカ(もしくはヘッドホン)が接続しているデバイスです。 - - - - Output method for audio - 音声入力方法 - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>音声の出力方法です。</b><br />ほとんどの場合DirectSoundで問題ありません。 - - - - Output device to use - 出力に使用するデバイス - - - - <b>Selects which sound card to use for audio Output.</b> - <b>音声の出力にどのサウンドカードを使用するか選択してください。</b> - - - - Volume tuning - 音量調整 - - - - Tuning microphone hardware volume to optimal settings. - マイクの音量を最適な設定になるよう調整します。 - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - ボリュームコントロールパネルを開き、録音設定画面に移動しましょう。そして、マイクが選択されていて、音量が最大になっている事を確認してください。もし"マイクブースト"を有効にするオプションがあるなら、それもチェックされているか確認してください。 - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - イライラしていたり、興奮していたりする時のように大声で話してみてください。話している間、下にあるバーが青と緑の区域のなるべく赤に近い場所に留まるまでサウンドコントロールパネルの音量を下げてください。(赤い区域には<b>入らない</b>ようにしましょう)。 - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - 次に、誰も起こさないようにしている夜中のようにそっと話してみましょう。話している間、バーが緑にかかり、静かにしている時は青に留まるように下のスライダーを調整してください。 - - - - Voice Activity Detection - 発声の検出 - - - - Letting Mumble figure out when you're talking and when you're silent. - 話している状態と静かにしている状態をMumbleに判別させます。 - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - あなたがいつ話しているのかをMumbleに判別させるお手伝いをします。まず最初に、どのデータの値を使うかの選択を行います。 - - - - Raw amplitude from input - 音声信号の大きさ - - - - Signal-To-Noise ratio - S/N比 - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - 次に、以下の2つのスライダーを調節しましょう。最初の発声は緑(確実に発言と判定)になると良いでしょう。話している最中は黄色(発言だろうと判定)の中に収まり、話していない時はすべて赤(発言ではないと判定)に入っているようにしてください。 - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - 最後に、猶予時間を調整しましょう。発言以外のものを検出する許容量が上がり、話が途切れずに送信を続けることができるでしょう。これにより、話の間に小休止を入れることができるようになります。 - - - - Device tuning - デバイス調整 - - - - Changing hardware output delays to their minimum value. - ハードウェアの出力遅延が最小値になるように変更します。 - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - 遅延を最小限に保つためには、サウンドカード上で音声のバッファを出来るだけ小さくすることが重要です。しかし、多くのサウンドカードが要求してくるバッファは、実際に動作可能な大きさよりかなり小さなものです。結局、この値を設定するにはいろいろ試してみるほかありません。 - - - - Amount of data to buffer. - バッファデータの量。 - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 出力バッファにおけるプリバッファの量を設定します。いろいろな値で試してみて、急に不安定にならない一番小さな値に設定してください。 - - - - %1ms - %1ms - - - - %1 s - %1 s - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - 周波数が変わる1つの音色が聞こえますでしょうか。音が途切れたり不安定に<b>ならない</b>一番小さな値まで下のスライダーを動かしてください。なお、音声経路の認識率を向上するため、このテストの間ローカルエコーは使えなくなっている事をお忘れなく。 - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - スピーカーやヘッドセットの出力をマイクが拾ってしまうような配置にしている場合、あなたのシステムで音声経路の遅延が起きていると判断されるでしょう; つまり、対応する受信バッファ内に含まれるまでサンプルが送信バッファに放置されて、遅延をもたらします。 - - - - Audio path is %1ms long. - 音声経路は %1ms の長さ。 - - - - Audio path cannot be determined. Input not recognized. - 音声経路が決定できません。入力が不明です。 - - - - Use echo cancellation - エコーキャンセルを使う - - - - Cancel echo from headset or speakers. - ヘッドセットやスピーカーからのエコーをキャンセルします。 - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - 出力音声のエコーキャンセルを有効にします。スピーカーとヘッドセットの両方に対して有効です。 - - - - Enable positional audio - 位置音響を有効にする - - - - Allows positioning of sound. - 音声の位置。 - - - - This allows Mumble to use positional audio to place voices. - 声の位置を定めるために位置音響を使えるようにします。 - - - - Positional Audio - 位置音響を使う - - - - Adjusting attenuation of positional audio. - 位置音響の減衰効果を調整します。 - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumbleは、いくつかのゲームにおいてゲーム内での他プレイヤーの位置に対応した位置音響をサポートします。他プレイヤーの位置によって、方向と距離をシミュレートして音量が変化します。このシミュレーションはお使いのオペレーティング・システムでスピーカーが正しく設定されていることが前提となります。そのテストはここで行うことが出来ます。 - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - このグラフはこれらの位置を表しています: <font color="red">あなた</font>, the <font color="yellow">スピーカー</font> and a <font color="green">移動する音の発生源</font> 上からに見えるようなら、チャンネルの間に移動して聞くのがよいでしょう。 - - - - Use headphones - ヘッドホンを使う - - - - Use headphones instead of speakers. - スピーカーの代わりにヘッドホンを使う。 - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - OSのスピーカー構成を無視して、代わりにヘッドホン用の位置設定を使用します。 - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Mumbleは現在開発中であり、開発チームはより多くのユーザの利益となる機能に注力したいと考えています。そのため、匿名で設定に関する統計を送信する機能を追加しました。これらの統計情報は主に将来の開発のために使用されるか、特定の機能が使用されていないかどうかを確認するために使用されます。 - - - - Submit anonymous statistics to the Mumble project - Mumbleプロジェクトに匿名で統計を送信する - - - - Push To Talk: - プッシュトーク: - - - - BanEditor - - - Mumble - Edit Bans - Mumble - Ban編集 - - - - &Add - 追加(&A) - - - - &Update - 更新(&U) - - - - &Remove - 削除(&R) - - - &OK - &OK - - - Accept changes - 変更を確定 - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - このボタンは現在の グループとACLを 適用しサーバーに送信します。もし誤ってあなた自身の書き込み権限を削除してしまうとサーバーに追加されてしまいますのでご注意ください。 - - - &Cancel - キャンセル(&C) - - - Reject changes - 変更を破棄 - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - このボタンは全ての変更をキャンセルし、サーバーのACLやグループを変更せずにダイアログを閉じます。 - - - - 0.0.0.0 - 0.0.0.0 - - - - &Address - アドレス(&A) - - - - &Mask - ネットマスク(&M) - - - - ChanACL - - - W - W - - - - T - T - - - - E - E - - - - S - S - - - - A - A - - - - M - M - - - - K - K - - - - C - C - - - - L - L - - - - None - なし - - - Write - ACLの更新 - - - - Traverse - トラバース - - - - Enter - チャンネルへの参加 - - - - Speak - 発言 - - - - AltSpeak - Alt発言 - - - - Mute/Deafen - 発言禁止/聴取禁止 - - - - Move/Kick - 移動/キック - - - - Make channel - チャンネル作成 - - - - Link channel - チャンネルをリンク - - - - This represents no privileges. - 権限がないことを表します。 - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - グループとACL情報の変更を含む、チャンネルへの完全なアクセスを表します。この権限は、必然的に他の全ての権限を含んでいます。 - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - チャンネル間を移動する権限を表します。あるユーザがこの権限を与えられない場合、サブチャンネルの権限に関わらず、どんな方法でもこのチャンネルおよびサブチャンネルにアクセス出来なくなります。 - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - チャンネルに参加する権限を表します。階層的なチャンネル構造がある場合、全ての人にチャンネルアクセスを与えたくなるかもしれませんが、階層の最下部で参加が制限されるかもしれません。 - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - このチャンネル内で発言する権限を表します。この権限がないユーザはサーバによって発言を抑制され(発言禁止にされているように見えます)、適切な権限を持つ誰かが発言禁止を解くまで話すことができません。 - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - このチャンネル内でフラグ付きの発言をする権限を表します。これは<i>発言</i>権限と全く同じ動作をしますが、Alt+ショートカットキーが押された時のパケットのみに適用されます。これはリンクしていないチャンネルの階層全体に送信をするために使うことが出来ます。 - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - 他の人を発言禁止にしたり、聴取禁止にしたりする権限を表します。一度発言禁止になると、他に権限を持った人が発言禁止を解くか、サーバに接続しなおすまで発言禁止のままになります。 - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - 他の人を別のチャンネルに移動させたり、サーバからキックしたりする権限を表します。実際にプレイヤーを動かすには、実行する人が移動先のチャンネルの移動/キック権限を持っているか、プレイヤーが移動先チャンネルに入る権限を持っていなければなりません。この権限を持っている人は、対象のプレイヤーが通常参加を許可されていないチャンネルに移動させることができます。 - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - サブチャンネルを作成する権限を表します。サブチャンネルを作った人は、そのチャンネルの管理者グループに追加されます。 - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - チャンネルをリンクする権限を表します。話している人が聞き手のチャンネルに<i>発言</i>の権限を持っている限り、リンクされたチャンネルのプレイヤーは互いに聞く事ができます。 - - - - Write ACL - ACLの上書き - - - - ClientPlayer - - - Authenticated - 認証済み - - - - Muted (server) - 発言禁止 (server) - - - - Deafened (server) - 聴取禁止 (server) - - - - Local Mute - ローカルでの発言禁止 - - - - Muted (self) - 発言禁止(セルフ) - - - - Deafened (self) - 聴取禁止(セルフ) - - - - ConfigDialog - - - Mumble Configuration - Mumbleの設定 - - - &OK - &OK - - - - Accept changes - 変更を確定 - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - このボタンは現在の設定を適用してアプリケーションに戻ります。<br />この設定はアプリケーションを終了してもディスクに保存されます。 - - - &Cancel - キャンセル(&C) - - - - Reject changes - 変更を破棄 - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - このボタンは変更を破棄してアプリケーションに戻ります。<br />設定は前の状態に戻ります。 - - - &Apply - 適用(&A) - - - - Apply changes - 変更を適用 - - - - This button will immediately apply all changes. - 全ての変更を、すぐに適用します。 - - - - Undo changes for current page - このページの変更を元に戻す - - - - This button will revert any changes done on the current page to the most recent applied settings. - このボタンは、現在のページで最後に適用した変更を元に戻します。 - - - - Restore defaults for current page - このページをデフォルト設定に戻す - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - このボタンは現在のページの設定をデフォルトに戻します。他のページは変更されません。<br />全ての設定をデフォルト戻すには、各ページでこのボタンを使わなければなりません。 - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - このボタンは現在のページの設定をデフォルトに戻します。他のページは変更されません。<br />全ての設定をデフォルト戻すには、各ページでこのボタンを使わなければなりません。 - - - Show all configuration items - 全ての設定項目を表示 - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>全ての設定項目を表示します。</b><br />Mumbleは大部分のユーザーが変更する必要のない設定項目を多く含んでいます。ここにチェックを入れると全ての設定項目を表示します。 - - - Expert Config - 上級者向け設定 - - - Tab 1 - Tab 1 - - - - Advanced - 高度な設定を表示する - - - - ConnectDialog - - &Name - 名前(&N) - - - - A&ddress - アドレス(&D) - - - - &Port - ポート(&P) - - - - &Username - ユーザ名(&U) - - - - &Password - パスワード(&P) - - - - &Connect - 接続(&C) - - - - Cancel - キャンセル - - - - &Add - 追加(&A) - - - - &Remove - 削除(&R) - - - - &Custom Servers - お気に入りサーバ(&C) - - - - Server &Browser - サーバブラウザ(&B) - - - Name - 名前 - - - - Address - アドレス - - - - URL - URL - - - - C&opy to custom - お気に入りにコピー(&O) - - - - &View Webpage - ウェブサイトを見る(&V) - - - - Connecting to %1 - %1に接続中 - - - - Enter username - ユーザ名を入力してください - - - Mumble - Mumble - - - - Failed to fetch server list - サーバリストを取得出来ませんでした - - - - &Label - ラベル(&L) - - - - Label - ラベル - - - - Unknown - 不明 - - - - -Unnamed entry- - -Unnamed entry- - - - - Mumble Server Connect - Mumbleサーバ接続 - - - - &Cancel - キャンセル(&C) - - - - - New - 新規 - - - - - Add - 追加 - - - - Update - 更新 - - - - CoreAudioSystem - - - Default Device - デフォルトデバイス - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - クラッシュしたときにあなたが何をしていたかを簡潔に<b>英語で</b>書いてください - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - Mumble - Mumble - - - Opening chosen DirectSound Input failed. No microphone capture will be done. - 選択されたDirectSound Inputのオープンに失敗しました。マイクからの入力は行われません。 - - - - Opening chosen DirectSound Input failed. Default device will be used. - 選択されたDirectSound Inputのオープンに失敗しました。デフォルトのデバイスが使用されます。 - - - - Default DirectSound Voice Input - デフォルトのDirectSound音声入力 - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - DirectSound入力デバイスのオープンに失敗しました。 マイクの取得ができませんでした。 - - - - Lost DirectSound input device. - DirectSound入力デバイスを失いました。 - - - - DXAudioOutput - - Mumble - Mumble - - - - Opening chosen DirectSound Output failed. No audio will be heard. - 選択されたDirectSound出力のオープンに失敗しました。音声は出力されません。 - - - - Opening chosen DirectSound Output failed. Default device will be used. - 選択されたDirectSound出力のオープンに失敗しました。音声は出力されません。 - - - - Default DirectSound Voice Output - デフォルトのDirectSound音声出力 - - - - Lost DirectSound output device. - DirectSound出力デバイスを失いました。 - - - - DXConfigDialog - - Default DirectSound Voice Input - デフォルトのDirectSound音声入力 - - - Default DirectSound Voice Output - デフォルトのDirectSound音声出力 - - - Device selection - デバイス選択 - - - Device to use for microphone - マイクを使用するデバイス - - - This sets the input device to use, which is where you have connected the microphone. - 使用する入力デバイスを設定します。これは、マイクを接続しているデバイスです。 - - - Input - 入力 - - - Device to use for speakers/headphones - スピーカー/ヘッドホンに使用するデバイス - - - This sets the output device to use, which is where you have connected your speakers or your headset. - 使用する出力デバイスを設定します。これは、あなたのスピーカ(もしくはヘッドホン)が接続しているデバイスです。 - - - Output - 出力 - - - Output Options - 出力オプション - - - Output Delay - 出力猶予 - - - Amount of data to buffer for DirectSound - DirectSoundのバッファデータの量 - - - This sets the amount of data to prebuffer in the DirectSound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - DirectSoundバッファにおけるプリバッファの量を設定します。いろいろな値で試してみて、急に不安定にならない一番小さな値に設定してください。 - - - Positional Audio - 位置音響 - - - None - なし - - - Panning - パンニング - - - Light HRTF - 少量のHRTF - - - Full HRTF - フルHRTF - - - 3D Sound Algorithm - 3Dサウンドのアルゴリズム - - - This sets what 3D Sound algorithm to use.<br /><b>None</b> - Disable 3D Sound (least CPU).<br /><b>Panning</b> - Just use stereo panning (some CPU).<br /><b>Light/Full HRTF</b> - Head-Related Transfer Functions enabled. This may use a small amount of CPU.<br />Note that if you have a soundcard with <i>hardware</i> 3D processing, HRTF processing will be done on the soundcard and will use practically no processing power. - 3Dサウンドのアルゴリズムに何を使用するか設定します。<br /><b>なし</b> - 3Dサウンドを使いません(最小のCPU消費)。<br /><b>パンニング</b> - ステレオパンニングだけを使います(若干のCPU消費)。<br /><b>少量の/フル HRTF</b> - 頭部伝達関数(Head-Related Transfer Functions)を使用します。これは、少量のCPU消費を伴うことがあります。<br /><i>ハードウェア</i>3D処理に対応したサウンドカードをお使いの場合、HRTFはサウンドカードで処理され、CPUパワーをほとんど使いません。 - - - Method - 方式 - - - MinDistance - 最小距離 - - - Minimum distance to player before sound decreases - 音が小さくなる前のプレイヤーへの最小距離 - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - サウンドの計算に使う最小距離を設定します。少なくともこの距離だけ離れていれば、他のプレイヤーの音声は減衰しません。 - - - MaxDistance - 最大距離 - - - Maximum distance, beyond which sound won't decrease - 音が小さくならない最大距離 - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - サウンドの計算に使う最大距離を設定します。これよりも遠くなると、他のプレイヤーの音声はこれ以上減衰しなくなります。 - - - RollOff - ロールオフ - - - Factor for sound volume decrease - ボリューム減少の割合 - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - 最小距離を超えた時、音量がどのくらい落ちるかについての値です。普通(1.0)の設定では距離が2倍になるたびに音量は半分になります。これを大きくすると音量の落ち込みが速くなり、小さくすると音量の落ち込みは遅くなります。 - - - DirectSound - DirectSound - - - %1ms - %1ms - - - %1m - %1м - - - %1 - %1 - - - Players more than %1 meters away have %2% intensity - %1 メートル以上離れたプレイヤーで %2% の強さ - - - Form - フォーム - - - TextLabel - テキストラベル - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble: データベースの初期化が可能な場所がなく、 -操作に失敗しました。 - - - - - DirectInputKeyWidget - - Press Shortcut - DirectInputKeyウィジェット - - - - GlobalShortcut - - - Shortcuts - ショートカット - - - - List of configured shortcuts - 設定されたショートカットのリスト - - - - Function - 機能 - - - - Shortcut - ショートカット - - - - Suppress - 抑制 - - - - Add new shortcut - 新しいショートカットを追加 - - - - This will add a new global shortcut - これにより新しいグローバルショートカットを追加するだろう - - - - &Add - 追加(&A) - - - - Remove selected shortcut - 選択されたショートカットを削除します - - - - This will permanently remove a selected shortcut. - これにより選択されたショートカットを永久に削除します。 - - - - &Remove - 削除(&R) - - - - GlobalShortcutConfig - - - Shortcuts - ショートカット - - - Function - 機能 - - - Shortcut - ショートカット - - - Shortcut bound to %1. - %1 に登録されているショートカット - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>%1 に登録するショートカットキーです。</b><br />このフィールドをクリックして希望のキー/ボタンの組み合わせを押すと登録できます。ダブルクリックで削除します。 - - - Double-click an entry to clear the shortcut. - 項目をダブルクリックするとショートカットを削除します。 - - - Suppress - 抑制 - - - - Shortcut button combination. - ショートカットボタンの組み合わせ。 - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>これはグローバルショットカットキーの組み合わせです。</b><br />このフィールドをダブルクリックして、バインドしなおしたいキーかボタンのコンボをダブルクリックしてください。 - - - - Suppress keys from other applications - 他のアプリケーションのキーを抑制します - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>他のアプリケーションで押されたボタンを隠します.</b><br />この設定を有効にすると、他のアプリケーションで押されたボタン(または、複数ボタンの組み合わせの最後のもの)を隠します. 全てのボタンを抑制できるわけではないことにご注意ください。 - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - バックグラウンドでグローバルなショートカットイベントが発生し、受け入れることができませんでした。<br /><br />'補助デバイスへのアクセス' のようなユニバーサルアクセス機能が無効になっているのが原因です。<br /><br /><a href=" ">この設定を有効にして</a> その後、再び設定してください。 - - - - GlobalShortcutWinConfig - - Shortcuts - ショートカット一覧 - - - Function - 機能 - - - Shortcut - ショートカット - - - Shortcut bound to %1. - %1 に登録されているショートカット - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>%1 に登録するショートカットキーです。</b><br />このフィールドをクリックして希望のキー/ボタンの組み合わせを押すと登録できます。ダブルクリックで削除します。 - - - - GlobalShortcutX - - - Mouse %1 - マウス %1 - - - - GlobalShortcutXConfig - - Shortcuts - ショートカット一覧 - - - Function - 機能 - - - Shortcut - ショートカット - - - Shortcut bound to %1. - %1に登録されているショートカット - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key combo to rebind. Double-click to clear. - <b>%1 に登録するショートカットキーです。</b><br />このフィールドをクリックして希望のキー/ボタンの組み合わせを押すと登録できます。ダブルクリックで削除します。 - - - - LCD - - - Not connected - 接続されていません - - - - LCDConfig - - - Graphic - 画像 - - - - Character - キャラクタ - - - - Enable this device - このデバイスを有効にする - - - - LCD - LCD - - - - Form - フォーム - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - デバイス - - - - Name - チャンネル名 - - - - Type - タイプ - - - - Size - サイズ - - - - Enabled - 有効 - - - - Views - ビュー - - - - Minimum Column Width - 列の最少幅 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - テキストラベル - - - - Splitter Width - 分割線の幅 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - デバッグ - - - - Critical - 致命的 - - - - Warning - 警告 - - - - Information - 情報 - - - - Server Connected - サーバー接続 - - - - Server Disconnected - サーバー切断 - - - - Player Joined Server - 誰かがサーバーに参加 - - - - Player Left Server - 誰かがサーバーから退出 - - - - Player kicked (you or by you) - 誰かがキックされた時(あなた自身、またはあなたによって) - - - - Player kicked - 誰かがキックされた時 - - - - You self-muted/deafened - 自分を発言禁止/聴取禁止にした時 - - - - Other self-muted/deafened - 他の人が発言禁止/聴取禁止になった時 - - - - Player muted (you) - 誰かがあなたを発言禁止にした時 - - - - Player muted (by you) - (あなたによって)誰かが発言禁止になった時 - - - - Player muted (other) - (他の人によって)誰かが発言禁止になった時 - - - - Player Joined Channel - 誰かがチャンネルに参加 - - - - Player Left Channel - 誰かがチャンネルから退出 - - - - Permission Denied - 権限がない場合 - - - [%2] %1 - [%2] %1 - - - - Text Message - テキストメッセージ - - - - LogConfig - - - Toggle console for %1 events - イベント「%1」 のためのコンソールを切り替える - - - - Toggle pop-up notifications for %1 events - イベント「%1」のためのポップアップ通知を切り替える - - - - Toggle Text-To-Speech for %1 events - イベント「%1」のためのテキスト読み上げを切り替える - - - - Click here to toggle sound notification for %1 events - イベント「%1」の音声通知を切り替えるためにはここをクリック - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - イベント「%1」のときに音声通知のために使用するサウンドファイルのパス<br />シングルクリックで再生<br />ダブルクリックで変更 - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - イベント「%1」のコンソール出力を切り替えるためにはここをクリック。<br />チェックされた場合、メッセージログに全てのイベント「%1」を出力する。 - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - イベント「%1」のポップアップ通知を切り替えるためにはここをクリック。<br />チェックされた場合、イベント「%1」がおきるたびポップアップ通知が行われる。 - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - イベント「%1」の適すと読み上げを切り替えるためにはここをクリック。<br />チェックされた場合、イベント「%1」が読み上げられる。テキスト読み上げはサウンドファイルではでいない、イベントの内容を読み上げがが可能である。テキスト読み上げとサウンドファイルは同時に使用することはできない。 - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - イベント「%1」のときに音声通知を切り替えるにはここをクリックしてください。<br /> もしチェックしたなら、Mumble はイベント「%1」に設定された音声ファイルを再生します。音声ファイルとTTSは同時に使えません。 - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - イベント「%1」のときに音声通知のために使用するサウンドファイルのパス<br />シングルクリックで再生<br />ダブルクリックで変更<br />これらのイベントのための音声通知が有効であるか、またはこのフィールドが無効であることを確認してください。 - - - - Choose sound file - サウンドファイルを選択してください - - - - Invalid sound file - 不正なサウンドファイル - - - - The file '%1' does not exist or is not a valid speex file. - ファイル「%1」は存在しないか、適切な speex ファイルではありません。 - - - - Messages - メッセージ - - - - Console - コンソール - - - TTS - 読み上げ - - - Enable console for %1 - %1をコンソールで有効にする - - - Enable Text-To-Speech for %1 - %1のテキスト読み上げを有効にする - - - - Text To Speech - テキスト読み上げ - - - - Volume - 音量 - - - - Volume of Text-To-Speech Engine - テキスト読み上げエンジンの音量 - - - - <b>This is the volume used for the speech synthesis.</b> - <b>この音量は合成音声に用いられます。</b> - - - - Length threshold - 長さの上限 - - - - Message length threshold for Text-To-Speech Engine - テキスト読み上げエンジンにおける長さの上限値 - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>テキスト読み上げエンジンにおける長さの上限値です。</b><br />上限より長いものは、最後まで読み上げられません。 - - - - Message - メッセージ - - - - Notification - 通知 - - - - Text-To-Speech - テキスト読み上げ - - - - Soundfile - サウンドファイル - - - - Path - パス - - - - Characters - 文字 - - - - LookConfig - - - Language - 言語 - - - - Look and Feel - 外観と手触り - - - - - System default - システムのデフォルト - - - - Language to use (requires restart) - 使用する言語(再起動が必要) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Mumbleが使用する言語を決定します。</b><br />新しい言語を使うためには再起動が必要です。 - - - - Style - スタイル - - - - Basic widget style - 基本的なウインドウのスタイル - - - - <b>This sets the basic look and feel to use.</b> - <b>基本となる見た目と使用感を設定します。</b> - - - - Skin - スキン - - - - ... - ... - - - - Skin file to use - 使用するスキンファイル - - - Use Horizontal Splitter - 上下に分割する - - - Use horizontal or vertical splitter for the main window - メインウインドウの区切りに水平もしくは垂直の区切りを使う - - - - User Interface - インターフェース - - - - Choose skin file - スキンファイルを選択 - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>これを設定していると、チャンネル表示の時にサブチャンネルより上にプレイヤーが表示されるようになります。</b><br />この設定を反映するにはMumbleの再起動が必要です。 - - - Expand All Channels - 全てのチャンネルを展開する - - - Expand all channels when connecting - 接続時に全てのチャンネルを展開する - - - <b>If set, all channels will be expanded by default when you connect to a server.</b> - <b>これを設定していると、サーバに接続したときに全てのチャンネルを展開します。</b> - - - - Players above Channels - チャンネルより上にプレイヤーを表示 - - - - List players above subchannels (requires restart). - サブチャンネルより上にプレイヤーが表示されるように並べます。(再起動が必要)。 - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>Mumbleで使用するスキンを設定します。</b><br />スキンは基本的なウィジェットスタイルで用いられるスタイルファイルです。アイコンがスタイルシートと同じディレクトリにあるなら、デフォルトのアイコンを置き換えます。 - - - - Form - フォーム - - - New version check - 新しいバージョンをチェック - - - Check for updates on startup - 起動時に更新をチェックする - - - - None - なし - - - - Only with players - 人が居るチャンネルのみ - - - - All - 全て - - - - Expand - 展開 - - - - When to automatically expand channels - 自動的にチャンネルを展開する - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - どのチャンネルを自動的に展開するかを決定します。 <i>なし</i> と <i>全て</i> は全てのチャンネルを展開する/しない設定にします。<i>人が居るチャンネルのみ</i> はプレイヤーの入室状況に応じて展開と折りたたみが変わります。 - - - - Ask - 確認する - - - - Do Nothing - 何もしない - - - - Move - ユーザの移動 - - - - Channel Dragging - チャンネルのドラッグ操作 - - - - This changes the behaviour when moving channels. - チャンネルを動かすときのふるまいを変更します。 - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - チャンネルを動かすときのふるまいを変更します。これを設定すると誤ってチャンネルをドラッグしてしまうのを防ぐことができます。 <i>チャンネルを移動</i> 確認なしにチャンネルを動かします。 <i>何もしない</i> 何も行わず、エラーメッセージを表示します。 <i>確認する</i> 確認メッセージボックスを出してから動かします。 - - - - Ask whether to close or minimize when quitting Mumble. - 終了時に最小化するか閉じるかを確認します。 - - - - <b>If set, will verify you want to quit if connected.<b> - <b>これがセットされている場合、接続中に終了するかを確認します。</b> - - - - Ask on quit while connected - 接続中の終了は確認する - - - - Make the Mumble window appear on top of other windows. - 最前面に表示する。 - - - - <b>This makes the Mumble window a topmost window.</b> - <b>Mumbleのウインドウを最前面に表示します。</b> - - - - Always On Top - 前面表示 - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>これがセットされていた場合、最小化されたMumbleのメインウインドウは非表示になり、タスクトレイからのみアクセスできるようになります。これがセットされていない場合、ウインドウは普通に最小化します。</b> - - - - Hide in tray when minimized - 最小化時、タスクトレイに格納する - - - Show all configuration items - 全ての設定項目を表示 - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>全ての設定項目を表示します。</b><br />Mumbleは大部分のユーザーが変更する必要のない設定項目を多く含んでいます。ここにチェックを入れると全ての設定項目を表示します。 - - - Expert Config - 上級者向け設定 - - - - Hide the main Mumble window in the tray when it is minimized. - 最小化されている時にメインウインドウをタスクトレイに格納します。 - - - - MainWindow - - - - Root - ルート - - - - &Connect - 接続(&C) - - - - Open the server connection dialog - サーバ接続ダイアログを開く - - - - Shows a dialog of registered servers, and also allows quick connect. - 登録されたサーバのダイアログを開きます。クイック接続もできるようになります。 - - - - &Disconnect - 切断(&D) - - - - Disconnect from server - サーバから切断 - - - - Disconnects you from the server. - サーバから切断します。 - - - - &Ban lists - &BAN一覧 - - - - Edit ban lists on server - サーバのBAN一覧を編集 - - - - This lets you edit the server-side IP ban lists. - サーバ側の禁止IPリストを編集します。 - - - - &Kick - キック(&K) - - - - Kick player (with reason) - プレイヤーをキック(理由付き) - - - - Kick selected player off server. You'll be asked to specify a reason. - 選択されたプレイヤーをサーバから追い出します。あなたは、理由を尋ねられるでしょう。 - - - - &Ban - &BAN - - - - Kick and ban player (with reason) - キックしてBAN(理由付き) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - 選択されたプレイヤーをサーバからキックしてBANします。あなたは、理由を尋ねられるでしょう。 - - - - &Mute - 発言禁止(&M) - - - - Mute player - プレイヤーを発言禁止にする - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - サーバにいるプレイヤーを発言禁止にしたり、解除したりします。聴取禁止になっているプレイヤーに対して発言禁止の解除を行うと、聴取禁止も解除されます。 - - - - &Deafen - 聴取禁止(&D) - - - - Deafen player - プレイヤーを聴取禁止にする - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - サーバにいるプレイヤーを聴取禁止にしたり、解除したりします。聴取禁止にすると発言も禁止にします。 - - - - &Local Mute - ローカルで発言禁止(&L) - - - Mute or unmute player locally. - ローカルで発言禁止にしたり解除したりします。 - - - - &Add - 追加(&A) - - - - Add new channel - 新しいチャンネルを追加 - - - - This adds a new sub-channel to the currently selected channel. - 現在選択されているチャンネルに新たなサブチャンネルを追加します。 - - - - &Remove - 削除(&R) - - - - Remove channel - チャンネルを削除 - - - - This removes a channel and all sub-channels. - チャンネルと全てのサブチャンネルを削除します。 - - - - &Edit ACL - ACLを編集(&E) - - - - Edit Groups and ACL for channel - チャンネルのグループとACLを編集 - - - - This opens the Group and ACL dialog for the channel, to control permissions. - 権限を管理するため、チャンネルのグループとACLダイアログを開きます。 - - - - &Rename - チャンネル名を変更(&R) - - - - &Change Description - 説明を変更する(&C) - - - - Changes the channel description - チャンネルの説明を変更する - - - - This changes the description of a channel. - チャンネルの説明を変更する。 - - - - &Link - リンク(&L) - - - - Link your channel to another channel - あなたのいるチャンネルを他のチャンネルとリンクします - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - あなたのいるチャンネルを選択されたチャンネルとリンクします。他方のチャンネルで発言する権限を持っていたら、プレイヤーはお互いを聞くことができます。これは恒久的なリンクであり、手動でリンクを解除されるかサーバがリスタートするまで続きます。push-to-linkのショートカットを見てください。 - - - &Unlink - リンク解除(&U) - - - - Unlink your channel from another channel - 他のチャンネルとのリンクを解除します - - - - This unlinks your current channel from the selected channel. - 選択されたチャンネルとあなたのいるチャンネルのリンクを解除します。 - - - - Unlink &All - 全てのリンクを解除(&A) - - - - Unlinks your channel from all linked channels. - 他のチャンネルとのリンクを全て解除します。 - - - - This unlinks your current channel (not the selected one) from all linked channels. - 全てのリンクされたチャンネルとあなたのいるチャンネル(選択されたものではありません)のリンクを解除します。 - - - - &Reset - リセット(&R) - - - - Reset audio preprocessor - 音声プリプロセッサをリセット - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - ノイズキャンセルや音声増幅や音声有効化の検出といった音声の前処理をリセットします。何かが起こって一時的に音声の環境が悪化するとき(マイクを落とした時など)、プリプロセッサの対応を待つのを避けるため、これを使ってください。 - - - - &Mute Self - 自分を発言禁止(&M) - - - - Mute yourself - あなた自身を発言禁止にします - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - あなた自身を発言禁止にしたり、解除したりします。発言禁止のとき、サーバに何もデータを送りません。聴取禁止の時に発言禁止の解除を行うと、聴取禁止も解除されます。 - - - - &Deafen Self - 自分を聴取禁止(&D) - - - - Deafen yourself - あなた自身を聴取禁止にします - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - あなた自身を聴取禁止にしたり、解除したりします。あなたは何も聞くことができません。聴取禁止にすると発言も禁止にします。 - - - - &Text-To-Speech - テキスト読み上げ(&T) - - - - Toggle Text-To-Speech - テキスト読み上げの切り替え - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - テキスト読み上げエンジンを有効にするかどうか。設定ダイアログにてテキスト読み上げが有効になっているメッセージのみ読み上げられます。 - - - - S&tatistics - 統計(&T) - - - - Display audio statistics - 音声統計を表示 - - - - Pops up a small dialog with information about your current audio input. - 現在の音声入力の情報を表示する小さなダイアログがポップアップします。 - - - - Forcibly unlink plugin - 強制的にプラグインを外す - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - 現在のプラグインを強制的に外します。完全におかしなデータを読み込んでいるときに便利でしょう。 - - - - &Settings - 設定(&S) - - - - Configure Mumble - Mumbleを設定 - - - - Allows you to change most settings for Mumble. - Mumbleのいろいろな設定をします。 - - - - &What's This? - &What's This? - - - - Enter What's This? mode - What's This?モードに移行します - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - クリックして"What's This?"モードに入ります。マウスカーソルはクエスチョンマークになって、何かボタンを押すと、選択されたメニューやエリアが何をするかの説明を表示します。 - - - - &About - Mumbleについて(&A) - - - - Information about Mumble - Mumbleについての情報 - - - - Shows a small dialog with information and license for Mumble. - Mumbleの情報やライセンスについての小さなダイアログを表示します。 - - - - About &Speex - &Speexについて - - - - Information about Speex - Speexに関する情報 - - - - Shows a small dialog with information about Speex. - Speexに関する情報のための小さなダイアログを表示します。 - - - &About Qt - Qtについて(&A) - - - - Information about Qt - Qtについての情報 - - - - Shows a small dialog with information about Qt. - Qtに関する情報のための小さなダイアログを表示します。 - - - - Check for &Updates - 更新を確認(&U) - - - - Check for new version of Mumble - Mumbleの新しいバージョンがあるか確認します - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Mumbleのウェブページに接続して新しいバージョンが出ているかを確認します。もし新しいのが出ていたら適切なダウンロードURLを通知します。 - - - - Mumble -- %1 - Mumble -- %1 - - - Log of messages - メッセージのログ - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - 最近の動作を全て表示します。サーバへの接続、エラーや情報メッセージは全てここに表示されます。<br />ここにどのメッセージを表示するかを指定するには、メニューから<b>設定</b>コマンドを選んでください。 - - - - &Server - サーバ(&S) - - - - &Player - プレイヤー(&P) - - - - &Channel - チャンネル(&C) - - - - &Audio - 音声(&A) - - - - C&onfigure - 設定(&O) - - - - &Help - ヘルプ(&H) - - - - Push-to-Talk - Global Shortcut - プッシュトーク - - - - Push and hold this button to send voice. - Global Shortcut - 声を送るときに押し続けるボタン。 - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - プッシュトークのボタンを設定する。このボタンを押している間あなたの声は送信される。 - - - - Reset Audio Processor - Global Shortcut - 音声処理をリセット - - - - Toggle Mute Self - Global Shortcut - 自分の発言禁止を切り替え - - - - Toggle self-mute status. - Global Shortcut - 自分の発言禁止状態を切り替え。 - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - これはあなたの消音状態を切り換えるでしょう。また、これをオフに切り替えると、聴取禁止も無効になるだろう。 - - - - Toggle Deafen Self - Global Shortcut - 自分の聴取禁止を切り替え - - - - Toggle self-deafen status. - Global Shortcut - 自分の聴取禁止状態を切り替える。 - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - これはあなたの聴取禁止状態を切り換えるでしょう。また、これをオンに切り替えると、発言禁止も有効になるだろう。 - - - - Unlink Plugin - Global Shortcut - プラグインを外す - - - - Force Center Position - Global Shortcut - 中央に移動させる - - - - Chan Parent - Global Shortcut - 親チャンネルに流す - - - - Chan Sub#%1 - Global Shortcut - サブチャンネル#%1に流す - - - - Chan All Subs - Global Shortcut - 全サブチャンネルに流す - - - - Push-to-Mute - Global Shortcut - 押してる間発言禁止 - - - - Join Channel - Global Shortcut - チャンネルに入る - - - - Toggle Overlay - Global Shortcut - オーバーレイ表示切替 - - - - Toggle state of in-game overlay. - Global Shortcut - ゲーム中でのオーバーレイの状態を切り替える。 - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - ゲーム中でのオーバーレイの状態を「全員」と「話している人だけ」、「なし」の間で切り替える。 - - - - Alt Push-to-Talk - Global Shortcut - Alt発言有効化 - - - - Kicking player %1 - プレイヤー %1 をキックしました - - - - - Enter reason - 理由を入力してください - - - - Banning player %1 - プレイヤー %1 をBANしました - - - - Mumble - Mumble - - - - - Channel Name - チャンネル名 - - - - Are you sure you want to delete %1 and all its sub-channels? - %1 とそのサブチャンネルを全て削除します。よろしいですか? - - - - Unmuted and undeafened. - 発言禁止を解除し、聴取禁止も解除。 - - - - Unmuted. - 発言禁止を解除。 - - - - Muted. - 発言禁止。 - - - - Muted and deafened. - 発言禁止と聴取禁止。 - - - - Deafened. - 聴取禁止。 - - - - Undeafened. - 聴取禁止を解除。 - - - - About Qt - Qtについて - - - - Joining %1. - %1 に入る。 - - - Connected to server. - サーバーに接続しました。 - - - - Server connection failed: %1. - サーバへの接続に失敗しました: %1. - - - - Disconnected from server. - サーバから切断しました。 - - - - Reconnecting. - 再接続中. - - - - Joined server: %1. - サーバに接続しました: %1. - - - - Left server: %1. - サーバから切断しました: %1. - - - - %1 is now muted and deafened. - %1 が発言禁止/聴取禁止状態になりました。 - - - - %1 is now muted. - %1 が発言禁止状態になりました。 - - - - %1 is now unmuted. - %1 の発言禁止状態が解除されました。 - - - - - server - サーバ - - - - You were muted by %1. - あなたは %1 によって発言禁止にされました。 - - - - You were unmuted by %1. - あなたは %1 によって発言禁止を解除されました。 - - - - %1 muted by %2. - %1 は %2 によって発言禁止にされました。 - - - - %1 unmuted by %2. - %1 は %2 によって発言禁止を解除されました。 - - - - You were deafened by %1. - あなたは %1 によって聴取禁止にされました。 - - - - You were undeafened by %1. - あなたは %1 によって聴取禁止を解除されました。 - - - - %1 deafened by %2. - %1 は %2 によって聴取禁止にされました。 - - - - %1 undeafened by %2. - %1 は %2 によって聴取禁止を解除されました。 - - - - You were kicked from the server by %1: %2. - あなたは %1 によってサーバからキックされました: %2. - - - - %3 was kicked from the server by %1: %2. - %3 は %1 によってサーバからキックされました: %2. - - - - You were kicked and banned from the server by %1: %2. - あなたは %1 によってキックされ、サーバからBANされました: %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 は %1 によってキックされ、サーバからBANされました: %2. - - - - You were moved to %1 by %2. - あなたは %2 によって %1 に移動されました。 - - - - %1 left channel. - %1 がチャンネルから退出しました。 - - - - %1 moved out by %2 to %3. - %1 は %2 によって %3 に移動させられました。 - - - - %1 moved in by %2 from %3. - %1 は %2 によって %3 から移動させられました。 - - - %1 moved out by %2. - %1 は %2 によって移動させられました。 - - - - %1 entered channel. - %1 がチャンネルに入りました。 - - - %1 moved in by %2. - %1 は %2 によって移動させられました。 - - - - Server connection rejected: %1. - サーバへの接続は拒否されました: %1. - - - - Denied: %1. - 拒否されました: %1. - - - - Welcome to Mumble. - Mumbleへようこそ。 - - - - &Quit Mumble - 終了(&Q) - - - - Closes the program - プログラムを終了 - - - - Exits the application. - アプリケーションを終了。 - - - - Send Messa&ge - メッセージを送信(&G) - - - - Send a Text Message - テキストメッセージを送信 - - - - Sending message to %1 - %1 にメッセージを送信しています - - - - - To %1: %2 - %1 宛: %2 - - - - - Message to %1 - %1 へのメッセージ - - - - Invalid username - 不正なユーザ名 - - - - You connected with an invalid username, please try another one. - 不正なユーザ名で接続しました。他の名前を試してください。 - - - - That username is already in use, please try another username. - そのユーザ名は既に使われています。他の名前を試してください。 - - - - Wrong password - 誤ったパスワード - - - - Wrong password for registered users, please try again. - 登録されたユーザのパスワードが違います。再度試してください。 - - - - Wrong server password for unregistered user account, please try again. - 未登録ユーザのパスワードが違います。再度試してください。 - - - - From %1: %2 - %1 より: %2 - - - - Message from %1 - %1 からのメッセージ - - - - &Audio Wizard - 音声ウィザード(&A) - - - - Sends a text message to another user. - 他のユーザにテキストメッセージを送信します。 - - - - Start the audio configuration wizard - 音声の設定ウィザードを開始します - - - - This will guide you through the process of configuring your audio hardware. - サウンドハードウェアの設定プロセスに案内します。 - - - - SSL Verification failed: %1 - SSL検証エラー: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>警告:</b> 送信された証明書は保存されたものとは異なっています。 - - - - Sever presented a certificate which failed verification. - 送信された証明書の検証に失敗しました。 - - - - &Information - 情報(&I) - - - - Show information about the server connection - サーバとの接続についての情報を表示 - - - - This will show extended information about the connection to the server. - サーバとの接続についての詳細な情報を表示します。 - - - - Opening URL %1 - URL %1 を開きます - - - - URL scheme is not 'mumble' - URLスキームは 'mumble' ではありません - - - - Connecting to %1 - %1に接続中 - - - - Enter username - ユーザ名を入力してください - - - - Mumble Server Information - Mumble サーバの情報 - - - - - &View Certificate - 証明書を見る(&V) - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br />詳細な証明書エラーの内容: </p><ol>%2</ol><p>この証明書を受け入れますか?<br />(同時に証明書を保存するので、今後この質問は表示されません。)</p> - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>制御チャンネル</h2><p>%1 bit %2 で暗号化されています。<br />平均 %3 ms の遅延 (平方偏差 %4)</p> - - - - Voice channel is sent over control channel. - 音声チャンネルは管理チャンネルを通して送信されます。 - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>音声チャンネル</h2><p>128 bit OCB-AES128 で暗号化されています。<br />平均 %1 ms の遅延 (平方偏差 %4)</p> - - - - UDP Statistics - UDP統計 - - - - To Server - サーバ宛 - - - - From Server - サーバから - - - - Good - 良好 - - - - Late - 遅延 - - - - Lost - 消失 - - - - Resync - 最同期 - - - - Change description of channel %1 - チャンネル 「%1」 の説明を変更する - - - - Sending message to channel %1 - チャンネル %1 に送信するメッセージ - - - - Sending message to channel tree %1 - チャンネルツリー %1 に送信するメッセージ - - - - To tree %1: %2 - tree %1 宛: %2 - - - - Message to tree %1 - tree %1 宛メッセージ - - - You are now in local deafen mode. This mode is not reflected on the server, and you will still be transmitting voice to the server. This mode should only be used if there are several people in the same room and one of them have Mumble on loudspeakers. - ローカルな聴取禁止モードになりました。このモードはサーバーには反映されません。そしてあなたの声はまだ送信され続けています。このモードは、同じ部屋に数人の人がいて、そのうちの1人がMumbleを大音量のスピーカーで使っているような時だけ使用すればよいでしょう。 - - - - Ctrl+Q - Ctrl+Q - - - - Mute player locally - ローカルでプレイヤーを発言禁止にする - - - - Mute or unmute player locally. Use this on other players in the same room. - ローカルでプレイヤーを発言禁止にします。同じ部屋にいるプレイヤーに使ってください。 - - - &Rename Channel - チャンネル名を変更(&R) - - - - Renames the channel - チャンネル名を変更します - - - - This renames a channel. - チャンネルの名前を変更します。 - - - &Local deafen - ローカルで聴取禁止にする(&L) - - - Silence loudspeakers - スピーカーをとめる - - - Sets you in local deafen mode, wherein your speakers are silenced but you are still transmitting audio. - ローカルな聴取禁止モードに設定します。あなたのスピーカーは音を出しませんが、送信はなお続いています。 - - - - About &Qt - &Qtについて - - - - Sends a text message to all users in a channel. - チャンネル内の全てのユーザにテキストメッセージを送信します。 - - - - Send &Tree Message - ツリーにメッセージを送信(&T) - - - - Send message to channel tree. - チャンネルツリーにメッセージを送信します。 - - - - This sends a text message to a channel and it's subchannels. - チャンネルとそのサブチャンネルにテキストメッセージを送信します。 - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - サーバの最大帯域幅は %1 kbit/s しかありません。品質は自動的に調整されます。 - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - 初めての起動です。<br />サウンドカードの設定をするために音声ウィザードに移動しますか? - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>音声帯域幅</h2><p>最大値 %1 kbit/s<br />現在値 %2 kbit/s (品質 %3)</p> - - - - Connected to server %1. - サーバ %1 に接続しました。 - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - サーバに接続中です。接続を閉じるか最小化したいですか? - - - - Close - 閉じる - - - - - Minimize - 最小化 - - - - &Window - ウインドウ(&W) - - - - Ctrl+M - Ctrl+M - - - Ctrl+W - Ctrl+W - - - - Toggle Minimal - Global Shortcut - 小型切り替え - - - - &Minimal View - 小さく表示(&M) - - - - Toggle minimal window modes - 小型ウインドウモードの切り替え - - - - This will toggle minimal mode, where the log window and menu is hidden. - ログウインドウとメニューを省いた小型ウインドウの切り替えをします。 - - - - Volume Up (+10%) - Global Shortcut - 音量を上げる(+10%) - - - - Volume Down (-10%) - Global Shortcut - 音量を下げる(-10%) - - - - Clear - クリア - - - - Log - ログ - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - チャンネルをドラッグしたときに "何もしない" ようにします; チャンネルが移動しなくなります。 - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - 不明なチャンネルドラッグモード, PlayerModel::dropMimeData。 - - - - &Unlink - Channel - リンク解除(&U) - - - - &Unlink - Plugin - リンク解除(&U) - - - - Server - message from - サーバ - - - &Quit - 終了(&Q) - - - - Hide Frame - フレームを隠す - - - - Toggle showing frame on minimal window - 小さく表示したときにフレームを見せるか見せないかを切り替えます - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - 小さく表示したとき移動やサイズ変更のためにフレームを表示するかを切り替えます。 - - - - NetworkConfig - - - Network - ネットワーク - - - - Form - フォーム - - - - Connection - 接続 - - - - Use TCP compatibility mode - Use TCP compatability mode - TCP 互換モードを使用する - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>TCP互換モードを有効にします。</b>.<br />この設定をするとMumbleがサーバとの通信にTCPのみを使用するようになります。この設定は通信のオーバーヘッドを増大させ、通信時に音声が途切れる原因になるので、デフォルトの設定(音声:UDP 操作:TCP)が使用できない場合だけ使用するのが良いでしょう。 - - - - Use TCP mode - TCPモードを使用する - - - - Reconnect when disconnected - 切断時に再接続を試みます - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>切断時に再接続を試みます。</b><br />この設定をすると、サーバへの接続が失敗した際、10秒後に再接続を行います。 - - - - Reconnect automatically - 自動的に再接続する - - - - Proxy - プロキシ - - - - Type - タイプ - - - - Type of proxy to connect through - プロキシの接続タイプ - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - <b>プロキシの接続タイプ</b><br />プロキシを通して外向きの接続を行うようにします。 注意: プロキシ接続をする場合、強制的にTCP互換モードに変更されます。 全ての音声データは管理チャンネルを通して送信されるようになります。 - - - - Direct connection - 直接接続 - - - - HTTP(S) proxy - HTTP(S) プロキシ - - - - SOCKS5 proxy - SOCKS5 プロキシ - - - - Hostname - ホスト名 - - - - Hostname of the proxy - プロキシのホスト名 - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>プロキシサーバのホスト名<b><br />あなたが使用したいプロキシサーバのホスト名を指定します。 - - - - Port - ポート - - - - Port number of the proxy - プロキシのポート番号 - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>プロキシのポート番号</b><br />プロキシへの接続に使うポート番号を指定します。 - - - - Username - ユーザ名 - - - - Username for proxy authentication - プロキシ認証のユーザ名 - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>プロキシ認証のユーザ名</b><br />プロキシサーバの認証に使用するユーザ名を指定します。プロキシサーバが認証を行わなない場合や、匿名で接続する場合はこのフィールドを空にしてください。 - - - - Password - パスワード - - - - Password for proxy authentication - プロキシ認証のパスワード - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>プロキシ認証のパスワード</b><br />プロキシサーバの認証に使うパスワードを指定します。プロキシサーバが認証を行わない場合や、匿名で接続する場合はこのフィールドを空にしてください。 - - - - Mumble services - Mumble サービス - - - - Check for updates on startup - 起動時に更新をチェックする - - - - Submit anonymous statistics to the Mumble project - Mumbleプロジェクトに匿名で統計を送信する - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>匿名で統計を送信します。</b><br />Mumbleは小さなチームで開発を行っているためもっとも必要な機能に絞って開発をしなければなりません。統計情報の送信はプロジェクトがどこに注力して開発すれば良いかを決定するための指針になります。 - - - - Submit anonymous statistics - 匿名で利用状況の統計を送信する - - - - OSSConfig - - %1ms - %1ms - - - Form - フォーム - - - Device selection - デバイス選択 - - - Input - 入力 - - - Device to use for microphone - マイクに使用するデバイス - - - Output - 出力 - - - Device to use for speakers/headphones - スピーカー/ヘッドホンに使用するデバイス - - - Output Options - 出力オプション - - - Output Delay - 出力猶予 - - - Amount of data to buffer for OSS - OSS用バッファデータの量 - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 出力バッファにおけるプリバッファの量を設定します。いろいろな値で試してみて、急に不安定にならない一番小さな値に設定してください。 - - - TextLabel - テキストラベル - - - This set which device mumble should use. The <i>default</i> device is your primary sound device. - Mumbleがどのデバイスを使用するか設定します。<i>デフォルト</i>デバイスはプライマリーのサウンドデバイスです。 - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the August 2006 updated version of DX9.0c - オーバーレイライブラリの読み込みに失敗しました。 原因は次のうちのどれかです: -- ライブラリ (mumble_ol.dll) が起動していたMumbleのディレクトリに存在しなかった -- WinXP SP2 以前のOSを使っている -- 2006年8月にアップデートされたバージョンの DX9.0x を使っていない - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - オーバーレイライブラリの読み込みに失敗しました。 原因は次のうちのどれかです: -- ライブラリ (mumble_ol.dll) が起動していたMumbleのディレクトリに存在しなかった -- WinXP SP2 以前のOSを使っている -- 2007年6月にアップデートされたバージョンの DX9.0x を使っていない - - - - OverlayConfig - - Options - オプション - - - Position - ポジション - - - Font - フォント - - - Enable Overlay - オーバーレイを有効にする - - - Enable overlay. - オーバーレイを有効にします。 - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - オーバーレイを有効にするかどうか決定します。この設定はD3D9を使ったアプリケーションが起動された時だけチェックされます。ですので、アプリケーションを起動する前にMumbleが起動していて、このオプションが有効になっているか確認してください。<br />Mumbleを起動してからアプリケーションを起動し、起動中にオーバーレイを無効にした場合、アプリケーションの再起動をしないでオーバーレイを再開させる安全な方法はありませんのでご注意ください。 - - - No one - なし - - - Only talking - 話している人だけ - - - Everyone - 全員 - - - Show - 表示 - - - Who to show on the overlay - オーバーレイに誰を表示するか - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>ゲーム中のオーバーレイに誰を表示するか決定します。</b><br />多くの人が同じチャンネルにいる場合、リストはとても長くなるでしょう。<br /><i>なし</i> - 誰も表示ません。(それでもオーバーレイは動いています)<br /><i>話している人だけ</i> - 話している人だけ表示します。<br /><i>全員</i> - 全員表示します。 - - - Always Show Self - 常に自分を表示 - - - Always show yourself on overlay. - オーバーレイで常に自分を表示 - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - 自分自身を常に表示するかどうか決定します。この設定は全員表示にしていない時に効果的です。自分が話しているかの状況だけを確認することができます。あなたが発言禁止や聴取禁止になっている場合には表示されません。 - - - Grow Left - 左に延長 - - - Let overlay grow to the left - オーバーレイを左に延長させる - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - オーバーレイは選択した位置にできるだけ小さく留まろうとします。この設定は、必要ならオーバーレイが左に伸びることを許可します。 - - - Grow Right - 右に延長 - - - Let overlay grow to the Right - オーバーレイを右に延長させる - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the Right if needed. - オーバーレイは選択した位置にできるだけ小さく留まろうとします。この設定は、必要ならオーバーレイが右に伸びることを許可します。 - - - Grow Up - 上に延長 - - - Let overlay grow upwards - オーバーレイを上方向に延長させる - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the top if needed. - オーバーレイは選択した位置にできるだけ小さく留まろうとします。この設定は、必要ならオーバーレイが上に伸びることを許可します。 - - - Grow Down - 下に延長 - - - Let overlay grow downwards - オーバーレイを下方向に延長させる - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow towards the bottom if needed. - オーバーレイは選択した位置にできるだけ小さく留まろうとします。この設定は、必要ならオーバーレイが下に伸びることを許可します。 - - - X-Position of Overlay - オーバーレイの横軸の位置 - - - This sets the relative X position of the overlay. - オーバーレイの相対的なX座標を決定します。 - - - Y-Position of Overlay - オーバーレイの縦軸の位置 - - - This sets the relative Y position of the overlay. - オーバーレイの相対的なY座標を決定します。 - - - Current Font - 現在のフォント - - - Set Font - フォント設定 - - - Maximum width of names. - 最大の高さ - - - This sets the maximum width of names shown, relative to the height. If you set this to 100%, no line of text will be wider than it is high. At 500%, no line will be more than 5 times wider than its height, and so on. - 高さに対する名前表示の最大サイズを設定します。100%にした場合、テキスト行の高さはそれより大きくなりません。500%で、行はそれらの5倍より大きくはなりませんといった感じです。 - - - Maximum width - 最大の幅 - - - Change - 変更 - - - Color for players - プレイヤーの色 - - - Color for talking players - 話しているプレイヤーの色 - - - Color for alt-talking players - Alt発言をしているプレイヤーの色 - - - Color for Channels - チャンネルの色 - - - Color for active Channels - 有効なチャンネルの色 - - - Overlay - オーバーレイ - - - Show User Textures - ユーザテクスチャを表示 - - - Show User custom textures instead of text on the overlay. - テキストの代わりにユーザのカスタムテクスチャをオーバーレイに表示 - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - 登録されたユーザのカスタムテクスチャをダウンロードして使用するかどうかを決定します。無効の時は通常のテキストが代わりに使われます。 - - - Maximum height of names. - 名前の最大の高さ - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - 画面の高さに対する名前表示の最大の高さを決定します。あなたのゲーム画面が 800ピクセルの高さでこれが5%にセットされているとき、各名前は 40ピクセルの高さで表示されます。注意: ここの値に関わらず、名前の高さは 60ピクセル以上にはなりません。 - - - Maximum height - 最大の高さ - - - Show no one - なし - - - Show only talking - 話している人だけ - - - Show everyone - 全員 - - - Form - フォーム - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - オーバーレイはあなたが選択した位置で最小の状態で表示されます。この設定を有効にすると、必要に応じてオーバーレイが上方向に伸びます。 - - - Let overlay grow to the right - オーバーレイを右に延長させる - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - オーバーレイはあなたが選択した位置で最小の状態で表示されます。この設定を有効にすると、必要に応じてオーバーレイが右方向に伸びます。 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - オーバーレイはあなたが選択した位置で最小の状態で表示されます。この設定を有効にすると、必要に応じてオーバーレイが下方向に伸びます。 - - - TextLabel - テキストラベル - - - - PAAudioConfig - - PortAudio - PortAudio - - - Input Device - 入力デバイス - - - Output Device - 出力デバイス - - - - PlayerModel - - Name of player - プレイヤーの名前 - - - Name of channel - チャンネルの名前 - - - Player flags - プレイヤーのフラグ - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src=":/icons/talking_on.png" /> Talking<br /><img src=":/icons/talking_off.png" /> Not talking - サーバーに接続しているプレイヤーです。プレイヤーの左のアイコンはその人が話しているかどうかを示しています:<br /><img src=":/icons/talking_on.png" /> 話している<br /><img src=":/icons/talking_off.png" /> 話していない - - - - This is a channel on the server. Only players in the same channel can hear each other. - サーバにあるチャンネルです。同じチャンネルにいるプレイヤーしかお互いの会話を聞くことはできません。 - - - This shows the flags the player has on the server, if any:<br /><img src=":/icons/authenticated.png" />Authenticated user<br /><img src=":/icons/muted_self.png" />Muted (by self)<br /><img src=":/icons/muted_server.png" />Muted (by admin)<br /><img src=":/icons/deafened_self.png" />Deafened (by self)<br /><img src=":/icons/deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - サーバー内のプレイヤーが持っているフラグを表示します:<br /><img src=":/icons/authenticated.png" />認証されたユーザー<br /><img src=":/icons/muted_self.png" />発言禁止(自分によって)<br /><img src=":/icons/muted_server.png" />発言禁止(管理者によって)<br /><img src=":/icons/deafened_self.png" />聴取禁止(自分によって)<br /><img src=":/icons/deafened_server.png" />聴取禁止(管理者によって)<br />自分で発言禁止にしているプレイヤーは、おそらくちょっと離席しているだけでしょう。<br />管理者によって発言禁止にされているプレイヤーは同じく離席しているだけか、管理者が発言禁止するに値するほどその人の発する雑音がうるさかったのでしょう。 - - - - Name - チャンネル名 - - - - Flags - フラグ - - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - サーバに接続しているプレイヤーです。プレイヤーの左のアイコンはその人が話しているかどうかを示しています:<br /><img src="skin:talking_on.png" /> 話している<br /><img src="skin:talking_off.png" /> 話していない - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - サーバ内のプレイヤーが持っているフラグを表示します:<br /><img src="skin:authenticated.png" />認証されたユーザ<br /><img src="skin:muted_self.png" />発言禁止(自分によって)<br /><img src="skin:muted_server.png" />発言禁止(管理者によって)<br /><img src="skin:deafened_self.png" />聴取禁止(自分によって)<br /><img src="skin:deafened_server.png" />聴取禁止(管理者によって)<br />自分で発言禁止にしているプレイヤーは、おそらくちょっと離席しているだけでしょう。<br />管理者によって発言禁止にされているプレイヤーは同じく離席しているだけか、管理者が発言禁止するに値するほどその人の発する雑音がうるさかったのでしょう。 - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - 本当にこのチャンネルをドラッグしますか? - - - - PluginConfig - - - Options - オプション - - - - - Plugins - プラグイン - - - - Link to Game and Transmit Position - ゲームと送信位置をリンクさせる - - - - Enable plugins and transmit positional information - プラグインを有効にすると位置情報を送信します - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - この設定は、サポートされたゲームのプラグインが位置情報を取得して、音声パケットと共に送信することを可能にします。他のプレイヤーから見て、ゲーム内であなたのキャラクターがいる方向から声が聞こえるようにすることができます。 - - - - &Reload plugins - プラグイン再読み込み(&R) - - - - Reloads all plugins - 全てのプラグインを再読み込みします - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - プラグインを再読み込みします。プラグインのディレクトリに追加したり、変更を行ったときに使用してください。 - - - - &About - Mumbleについて(&A) - - - - Information about plugin - プラグインについての情報 - - - - This shows a small information message about the plugin. - プラグインについての簡単な情報を表示します。 - - - - &Configure - 設定(&C) - - - - Show configuration page of plugin - プラグインの設定項目を表示 - - - - This shows the configuration page of the plugin, if any. - プラグインの設定ページがあれば表示します。 - - - Mumble - Mumble - - - - Plugin has no configure function. - プラグインに設定機能がありません。 - - - - Plugin has no about function. - プラグインの設定項目がありません。 - - - - Form - フォーム - - - - Plugins - - Plugin %1 lost link. - プラグイン %1 はリンクを失いました。 - - - - %1 lost link. - %1 はリンクを失いました。 - - - Plugin %1 linked. - プラグイン %1 はリンクされました。 - - - - %1 linked. - %1 はリンクされました。 - - - - PortAudioSystem - - - Default Device - デフォルトデバイス - - - - PulseAudioConfig - - PulseAudio - PulseAudio - - - %1ms - %1ms - - - Form - フォーム - - - Device selection - デバイス選択 - - - Input (Microphone) - 入力(マイク) - - - Device to use for microphone - マイクに使用するデバイス - - - This set which source mumble should use for the microphone. The <i>default</i> device means to use the PulseAudio defaults. - どのソースをマイクに使用するか設定します。<i>デフォルト</i> デバイスは PulseAudio のデフォルトです。 - - - Output - 出力 - - - Device to use for speakers/headphones - スピーカー/ヘッドホンに使用するデバイス - - - Enable echo cancellation - エコーキャンセル - - - This enables echo cancellation. Don't enable this unless you are listening on speakers; for headphones it will cause audio degradation. - エコーキャンセルを有効にします。スピーカーで聞いていない限りこれを有効にしないでください; ヘッドホンでは音質劣化の原因となります。 - - - Use echo cancellation - エコーキャンセルを使う - - - Output Options - 出力オプション - - - Output Delay - 出力猶予 - - - Amount of data to buffer for ALSA - ALSA用バッファデータの量 - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 出力バッファにおけるプリバッファの量を設定します。いろいろな値で試してみて、急に不安定にならない一番小さな値に設定してください。 - - - TextLabel - テキストラベル - - - - PulseAudioSystem - - - Default Input - デフォルト入力 - - - - Default Output - デフォルト出力 - - - - ShortcutActionWidget - - - Unassigned - 未割り当て - - - - ShortcutDelegate - - - Unassigned - 未割り当て - - - - ShortcutKeyWidget - - - Press Shortcut - DirectInputKeyウィジェット - - - - TextMessage - - - Message to send - 送信するメッセージ - - - - Preview - プレビュー - - - Send raw message - 生のメッセージを送信する - - - Disables html formating - htmlフォーマットを無効にする - - - - Disables html formatting - HTML形式を無効にする - - - - Disable text formatting - TEXT形式を無効にする - - - - This field reflects how the message will look like in the chat. - このフィールドはどのようにメッセージガチャッ途上で表示されるかを反映します。 - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - <b>プレビュー</b><br />このフィールドは上で入力された生の文字列をとり、それをログ上で見れる形にレンダリングします。例えば &lt;b&gt;Test&lt;/b&gt; は次のように表示します :<b>Test<b>。 - - - - VersionCheck - - Mumble - Mumble - - - Mumble failed to retrieve version information from the SourceForge server. - SourceForgeサーバからのバージョン情報の取得に失敗しました。 - - - - Upgrade Mumble - Mumble のアップグレード - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - Mumble の新しいバージョンが見つかり、自動的にダウンロードされました。このバージョンにアップグレードするか、最新の安定リリースにダウングレードすることが推奨されます。このインストーラを起動しますか? - - - - Failed to launch snapshot installer. - snapshot のインストーラの起動に失敗しました。 - - - - Corrupt download of new version detected. Automatically removed. - 新しいバージョンの破損したダウンロードが検知されました。自動的に削除されました。 - - - - Downloading new snapshot from %1 to %2 - %1 から %2 に新しい snapshot をダウンロード中です - - - - Failed to write new version to disk. - Failed to write new version to disc. - ディスクに新しいバージョンを書きこむことに失敗しました。 - - - - Mumble failed to retrieve version information from the central server. - Mumble は中央サーバからのバージョン情報の取得に失敗しました。 - - - - ViewCert - - - Certificate Chain Details - 証明書階層の詳細 - - - - Certificate chain - 証明書の階層 - - - - Certificate details - 証明の内容 - - - - %1 %2 - %1 %2 - - - - - Common Name: %1 - 一般名称(CN): %1 - - - - - Organization: %1 - 組織(O): %1 - - - - Subunit: %1 - 部門(OU): %1 - - - - - Country: %1 - 国(C): %1 - - - - - Locality: %1 - 地域(L): %1 - - - - - State: %1 - 地方(ST): %1 - - - - Valid from: %1 - 発行者: %1 - - - - Valid to: %1 - 発行対象: %1 - - - - Serial: %1 - シリアル番号: %1 - - - - Public Key: %1 bits %2 - 公開鍵: %1 ビット %2 - - - - RSA - RSA - - - - DSA - DSA - - - - Digest (MD5): %1 - ダイジェスト(MD5): %1 - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - 発行者: - - - - Unit Name: %1 - 部門名: %1 - - - - WASAPIConfig - - Form - フォーム - - - Device selection - デバイス選択 - - - Input (Microphone) - 入力(マイク) - - - This set which source mumble should use for the microphone. The <i>default</i> device means to use the PulseAudio defaults. - どのソースをマイクに使用するか設定します。<i>デフォルト</i> デバイスは PulseAudio のデフォルトです。 - - - Output - 出力 - - - Device to use for speakers/headphones - スピーカー/ヘッドホンに使用するデバイス - - - Enable echo cancellation - エコーキャンセル - - - This enables echo cancellation. Don't enable this unless you are listening on speakers; for headphones it will cause audio degradation. - エコーキャンセルを有効にします。スピーカーを使っている場合のみこれを有効にしてください; ヘッドホンでは音質劣化の原因となります。 - - - Use echo cancellation - エコーキャンセルを使う - - - - WASAPISystem - - - Default Device - デフォルトデバイス - - - - XInputKeyWidget - - Press Shortcut - ショートカット押下 - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_pch.hpp mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_pch.hpp --- mumble-1.2.3/src/mumble11x/mumble_pch.hpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_pch.hpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -#ifndef Q_MOC_RUN -#ifndef _MUMBLE_PCH_H -#define _MUMBLE_PCH_H - -#define QT_NO_DEBUG_STREAM -#define QT_ASCII_CAST_WARNINGS -#define QT_NO_CAST_TO_ASCII -#define QT_USE_FAST_CONCATENATION -#define QT_USE_FAST_OPERATOR_PLUS - -#define _WINSOCKAPI_ - -#if defined(__INTEL_COMPILER) -#define _MSC_EXTENSIONS -#include -#else -#define BOOST_TYPEOF_SUPPRESS_UNNAMED_NAMESPACE -#endif - -#ifdef __APPLE__ -#include -#include -#include -#undef nil -#undef check -#undef TYPE_BOOL -#endif - -#include -#include -#include -#ifdef USE_DBUS -#include -#endif -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -/* OpenSSL defines set_key. This breaks our protobuf-generated setters. */ -#undef set_key - -#ifndef COMPAT_CLIENT -#ifdef Q_OS_WIN -#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1 -#endif -#define __int64_t __int64 -#include -#undef __int64_t -#include -#include -#else -#include -#include -#endif -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef Q_OS_WIN -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifndef Q_CC_INTEL -#include -#define lroundf(x) ( static_cast( (x) + ((x) >= 0.0f ? 0.5f : -0.5f) ) ) -#define lround(x) ( static_cast( (x) + ((x) >= 0.0 ? 0.5 : -0.5) ) ) -#endif -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#define STACKVAR(type, varname, count) type *varname=reinterpret_cast(_alloca(sizeof(type) * (count))) -#else -#include -#define STACKVAR(type, varname, count) type varname[count] -#define CopyMemory(dst,ptr,len) memcpy(dst,ptr,len) -#define ZeroMemory(ptr,len) memset(ptr, 0, len) -#define __cdecl -typedef WId HWND; -#include -#endif - -#if defined(__MMX__) || defined(Q_OS_WIN) -#include -#endif - -#define iroundf(x) ( static_cast(x) ) - -#ifdef USE_BONJOUR -#include -#endif - -#ifdef Q_OS_WIN -#ifdef USE_G15 -#include -#endif -#endif - -#ifdef __OBJC__ - #define nil 0 -#endif - -#endif -#endif diff -Nru mumble-1.2.3/src/mumble11x/mumble_pl.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_pl.ts --- mumble-1.2.3/src/mumble11x/mumble_pl.ts 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_pl.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,5091 +0,0 @@ - - - - - ACLEditor - - - Active ACLs - Aktywne ACL - - - - Context - Kontekst - - - - User/Group - Użytkownik / Grupa - - - - Permissions - Uprawnienia - - - - Group - Grupa - - - - Members - Członkowie - - - - &Add - &Dodaj - - - - &Remove - &Usuń - - - - &Up - W &górę - - - - &Down - W &dół - - - - Inherit ACLs - Dziedzicz reguły ACL - - - - Applies to this channel - Stosowana do tego kanału - - - - Applies to sub-channels - Stosowana do tego pod-kanału - - - - User ID - ID Użytkownika - - - - Deny - Zabroń - - - - Allow - Zezwól - - - - Remove - Usuń - - - - Inherit - Dziedzicz - - - - Inheritable - Dziedziczny - - - - Inherited - Odziedziczony - - - - Add - Dodaj - - - - Add to Remove - Dodaj do usunięcia - - - - &Groups - &Grupy - - - - &ACL - &ACL - - - - List of entries - Lista reguł - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - Pokazuje aktywną listę reguł na tym kanale. Pozycje odziedziczone z kanałów nadrzędnych wyświetlone są przy użyciu kursywy.<br /> Lista ACL przetwarzana jest od góry do dołu, oznacza to, że pozycje znajdujące się na dole listy mają wyższy priorytet. - - - - Inherit ACL of parent? - Dziedziczyć reguły ACL z kanałów nadrzędnych? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Ustawia czy reguły ACL mają być dziedziczone z kanałów nadrzędnych. Tylko te reguły, które są oznaczone jako rodzic "Dotyczy pod-kanałów" będą przejmowane. - - - - Add new entry - Dodaj nową regułę - - - - This adds a new entry, initially set with no permissions and applying to all. - Dodaje nową regułę, która początkowo nie posiada uprawnień oraz jest zastosowana dla wszystkich. - - - - Remove entry - Usuń regułę - - - - This removes the currently selected entry. - Usuwa aktualnie wybraną regułę. - - - - Move entry up - Przenieś regułę w górę - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Przenosi regułę w górę listy. Reguły są sprawdzane w kolejności, więc taka zmiana może mieć wpływ na uprawnienia użytkowników. Nie możesz przenieść raguły ponad regulę z której są dziedziczone ACL, jeżeli naprawdę tego potrzebujesz zduplikuj daną regułę. - - - - Move entry down - Przenieś regułę w dół - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Przenosi regułę w dół listy. Reguły są sprawdzane w kolejności, więc taka zmiana może mieć wpływ na uprawnienia użytkowników. - - - - Entry should apply to this channel. - Entry should apply to this channel - slicer nie wstawil kropki jak poprawi to nie bedzie na pomaranczowo //Zuko - Reguła powinna być zastosowana do tego kanału. - - - - This makes the entry apply to this channel. - Sprawia, że reguła dotyczy tego kanału. - - - - Entry should apply to sub-channels. - Reguła powinna być zastosowana do tego pod-kanału. - - - - This makes the entry apply to sub-channels of this channel. - Sprawia, że reguła dotyczy pod-kanałów tego kanału. - - - - Group this entry applies to - Grupa tych reguł dotyczy - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - ja jebie kto to wymyslil ;) //Zuko - Kontroluje, której grupy użytkowników dotyczy dana reguła.<br />Należy pamiętać, że grupa jest sprawdzana w kontekście reguł jakie są w niej używane. Na przykład, na kanale Root domyślna reguła ACL nadaje uprawnienie <i>Zapisz ACL</i> grupie <i>admin</i>. Jeżeli ta reguła zostanie odziedziczona przez kanał, nada ona uprawnienia zapisu ACL użytkownikowi który należy do grupy <i>admin</i> na tym kanale, nawet gdy użytkownik nie należy do grupy <i>admin</i> na kanale z którego reguły ACL pochodza.<br />Jeżeli nazwa grupy rozpoczyna od !, członkowstwo użtykownika jest negowane, a gdy rozpoczyna się od ~, reguła jest sprawdzana na kanale gdzie została zdefiniowana, zamiast na kanale w którym reguła ACL jest aktywna. Kolejność jest ważna: <i>!~in</i> jest ważny, ale <i>~!in</i> nie jest.<br />Jest kilka predefiniowanych grup:<br /><b>all</b> - wszyscy użytkownicy będą pasować.<br /><b>auth</b> - Wszyscy uwierzytelnieni użytkownicy będą pasować.<br /><b>sub,a,b,c</b> - Użytkownicy znajdujący się w aktualnie w pod-kanele. Zobacz dokumentacje na stronie internetowej, aby dowiedzieć się więcej o tej funkcji.<br /><b>in</b> - Użytkownicy aktualnie znajdujący się na kanale (wygodniejsza metoda w porównaniu do <i>sub,0,0,0</i>.<br /><b>out</b> - Użytkownicy nie znajdujący się na kanale będą pasować (wygodniejsza metoda w porównaniu do <i>!sub,0,0,0</i>).<br />Pamiętaj, że wpis może dotyczyć zarówno użytkownika lub grupy, a nie obu jednocześnie. - - - - User this entry applies to - Reguła należy do użytkownika - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - Kontroluje do którego użytkownika należy ta reguła. Poprostu wpisz nazwę użytkownika i naciśnij Enter by wysłać zapytanie do serwera w celu sprawdzenia poprawności nazwy użytkownika. - - - - Allow %1 - Zezwól na %1 - - - - Deny %1 - Zabroń %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Przydziela uprawnienie: %1. Jeżeli uprawnienie jest jednocześnie dozwolone i zabronione, to jest zabronione.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Odbiera uprawnienie %1. Jeżeli uprawnienie jest jednocześnie dozwolone i zabronione, to jest zabronione.<br />%2 - - - - List of groups - Lista grup - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - To jest lista wszystkich grup zdefiniowanych dla tego kanału. Aby utworzyć nową grupę wpisz jej nazwę i naciśnij Enter. - - - - Remove selected group - Usuń zaznaczoną grupę - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Usuwa aktualnie wybrana grupę. Jeśli grupa była dziedziczona, to nie zostanie usunięta z listy, ale wszystkie lokalne informacje o tej grupie zostaną wyczyszczone. - - - - Inherit group members from parent - Dziedzicz członków grupy z grupy nadrzędnej - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Dziedziczy wszystkich członków z grupy nadrzędnej, jeżeli grupa jest oznaczona jako .<i>Dziedziczna</i> w kanale nadrzędnym. - - - - Make group inheritable to sub-channels - Umożliw dziedziczenie grupy w pod-kanałach - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Umożliwia dziedziczenie uprawnień grupy w pod-kanałach. Jeżeli grupa nie pozwala na dziedziczenie, to w pod-kanałach można twożyć grupy o tych samych nazwach. - - - - Group was inherited from parent channel - Grupa została odziedziczona z kanału nadrzędnego - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - Wskazuje czy grupa została odziedziczona z kanału nadrzędnego. Nie możesz edytować tej flagi, to jest tylko informacja. - - - - Add member to group - Dodaj członka do grupy - - - - Remove member from group - Usuń członka z grupy - - - - Mumble - Edit ACL for %1 - Mumble - edycja reguł ACL dla kanału %1 - - - - Dialog - Dialog - - - - Type in the name of a player you wish to add to the group and click Add. - Wpisz nazwę użytkownika, którego chcesz dodać do grupy i kliknij Dodaj. - - - - Type in the name of a player you wish to remove from the group and click Add. - Wpisz nazwę użytkownika, któego chcesz usunąć z grupy i kliknij Dodaj. - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - Otwieranie wybranego wejścia ALSA nie powiodło się: %1 - - - - Default ALSA Card - Domyślna karta ALSA - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - Otwieranie wybranego wyjścia ALSA nie powiodło się: %1 - - - - Default ALSA Card - Domyślna karta ALSA - - - - ASIOConfig - - - Device selection - Wybieranie urządzenia - - - - Capabilities - Możliwości - - - - Channels - Kanały - - - - Configure input channels - Konfiguruj kanały wejścia - - - - Device to use for microphone - Urządzenie do którego jest podłączony mikrofon - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - Wybiera które urządzenie sprawdzić. Musisz jeszcze sprawdzić urządzenie i wybrać kanały do wykorzystania. - - - - Device - Urządzenie - - - - Query selected device - Sprawdź zaznaczone urządzenie - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Sprawdza dane urządzenie. <b>Uwaga:</b> wiele sterowników ASIO jest tak wadliwych, że sprawdzanie ich może spowodować zawieszenie się programu lub całego systemu. - - - - Configure selected device - Konfiguruj zaznaczone urządzenie - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Konfiguruje dane urządzenie. <b>Uwaga:</b> wiele sterowników ASIO jest tak wadliwych, że sprawdzanie ich może spowodować zawieszenie się programu lub całego systemu. - - - - Driver name - Nazwa sterownika - - - Buffersize - Rozmiar bufora - - - - Microphone - Mikrofon - - - - <- - <- - - - - -> - -> - - - - Unused - Nieużywany - - - - Speakers - Głośniki - - - %1 (ver %2) - %1 (wersja %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - resolution to moze bc prawdopodobnie probkowanie - nie mam jak sprawdzic //Zuko - %1 ms -> %2 ms (%3 ms rozdzielczość) %4Hz - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - ew -- nieprzydatny; nie nadający się do użytku - %1 ms -> %2 ms (%3 ms rozdzielczość) %4Hz -- Niemożliwy do wykorzystania - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - Inizjalizacja ASIO nie powiodła się: %1 - - - - - Failed to instantiate ASIO driver - prawdopodobnie bledne tlumaczenie //Zuko - Wytwarzanie sterownika ASIO nie powiodło się - - - - ASIO - ASIO - - - - &Query - &Sprawdź - - - - &Configure - &Konfiguruj - - - - Form - Formularz - - - TextLabel - Tekst - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - Tutaj znajduje się konfiguracja kanałów wejściowych ASIO. Upewnij się, że wybierzesz przynajmniej jeden kanał mikrofonu i głośnika.<br /> <i>Mikrofon</i>powinien być tam gdzie podłączyłeś swój mikrofon, a <i>Głóśniki</i> powinny być w kanałach z <i>Co słyszysz</i>.<br />Dla przykładu: Audigy 2 ZS dobrym wyborem dla mikrofonu był <i>Mic L</i> a głośniki powinny być w <i>MixR<i> i</i> MixL</i>. - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - Musisz zaznaczyć przynajmniej jeden mikrofon oraz jedno źródło głośnika, aby używać ASIO. Jeżeli potrzebujesz tylko próbkowania mikrofonu używaj DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - Otwieranie zaznaczonego urządzenia ASIO nie powiodło się. Żadne wejście nie jest gotowe. - - - - AboutDialog - - - &About Mumble - &O Mumble - - - - &License - &Licencja - - - - OK - OK - - - - About Mumble - O Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble v%1</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>Polskie tłumaczenie:</b> Bartek "stranded" Sumowski<br /> <a href=http://sumowski.com>sumowski.com</a><br><b>Korekta:</b> Michał Żukowski<br> <br><b>Przy tłumaczeniu pomógł:</b> _KaszpiR_<br><a href=http://www.hlds.pl>hlds.pl</a></br></p><p><b>Komunikator głosowy dla graczy</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - AboutSpeexDialog - - - OK - OK - - - - About Speex - O Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>O Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>Program używa kodeka Speex w wersji %1</p><p>Speex jest używany do usuwania akustycznego echa, filtrowania szumów, detekcji aktywacji głosowej, kompresji.</p> - - - - AudioInput - - - Form - Formularz - - - - Interface - Interfejs - - - - System - System - - - - Input method for audio - Metoda wejścia dźwięku - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Jest to metoda wejścia dźwięku.</b><br />Najprawdopodobniej chcesz korzystać z DirectSound. - - - - Device - Urządzenie - - - - Input device for audio - Output method for audio - Metoda wejścia dźwięku - - - - <b>This is the input device to use for audio.</b> - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Jest to metoda wejścia dźwięku.</b><br />Najprawdopodobniej chcesz korzystać z DirectSound. - - - - Cancel Echo - Usuwanie akustycznego echa - - - - Transmission - Transmisja - - - - &Transmit - &Sposób transmisji głosu - - - - When to transmit your speech - Kiedy wysyłać twój głos - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Ta opcja określa kiedy to co mówisz powinno zostać wysłane.</b><br /><i>Ciągłe nadawanie</i><br /><i>Aktywacja głosowa</i> - Gdy mówisz wyraźnie<br /><i>Aktywacja przyciskiem</i> - Gdy trzymasz wciśnięty przycisk ustawiony w <i>Skróty</i>. - - - - DoublePush Time - Ustaw czas potrzebny na włączenie podwójnego kliknięcia:<br /><br />Podwójne kliknięcie włącza ciągłą transmisję głosu, <br />ponowne podwójne kliknięcie wyłącza ją. - - - - TextLabel - Tekst - - - Audible audio cue when push-to-talk pressed and released - <b>Aktywując tę opcję usłyszysz charakterystyczny dźwięk.</b><br />Podczas wciskania przycisku do rozmowy usłyszysz dźwięk z gry PacMan. - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>Ta opcja aktywuje potwierdzenie dźwiękowe przy użyciu opcji aktywacji przyciskiem</b><br />Podczas wciskania i zwalniania przycisku usłyszysz dźwięk potwierdzający rozpoczęcie oraz zakończenie transmisji. - - - - PTT Audio cue - Jak ktos wymysli lepsze tlumaczenie to bedzie fajnie ;D - Odtwórz dźwięk, podczas wciskania przycisku aktywacji głosowej - - - - Use SNR based speech detection - <b>Analiza na podstawie czystego sygnału.</b> W tym trybie, źródło dźwięku jest analizowane pod kątem tzw. czystego sygnału, czystość tego sygnału jest używana do uaktywnienia wykrywania mowy. - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear singal, and the clarity of that signal is used to trigger speech detection. - <b>Analiza na podstawie czystego sygnału.</b> W tym trybie, źródło dźwięku jest analizowane pod kątem tzw. czystego sygnału, czystość tego sygnału jest używana do uaktywnienia wykrywania mowy. - - - - Signal to Noise - stosunek sygnału do szumu - - - - Use Amplitude based speech detection. - <b>Analiza na podstawie siły głosu.</b> W tym trybie, źródło dźwięku jest analizowane pod kątem siły głosu, głośniejszy dźwięk uaktywnia transmisję głosu. - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>Ta opcja ustawia sposób detekcji głosu na analizę na podstawie siły głosu.</b> W tym trybie, źródło dźwięku jest analizowane pod kątem siły głosu, głośniejszy dźwięk uaktywnia transmisję głosu. - - - - Amplitude - analiza na podstawie siły głosu - - - - Voice &Hold - Czas podtrzymania &transmisji - - - - How long to keep transmitting after silence - Jak długo utrzymywać nadawanie po zakończeniu wypowiedzi. - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Ta opcja określa jak długo utrzymywać nadawanie po zakończeniu wypowiedzi.</b><br />Ustaw wyższą wartość gdy twoje wypowiedzi są przerywane (można to zauważyć poprzeż szybkie miganie ikony przy twoim nicku)<br />Opcja ma jedyne sensowne zastosowanie gdy stosujesz aktywację głosową. - - - - Silence Below - Cisza - - - - Signal values below this counts as silence - Sygnał poniżej podanej wartości traktowany jest jako cisza - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>Ta opcja określa próg aktywacji detekcji mowy.</b><br />Użyj tego razem z <Statystykami</i> aby manualnie wyregulować próg aktywacji głosowej. Wartości wejścia poniżej "Cisza" zawsze są traktowane jakie cisza. Wartości powyżej "Mowa" zawsze są traktowane jako mowa. Wartości poniżej są traktowane jako mowa ale nie są traktowane jako nowa detekcja mowy. - - - - Speech Above - Mowa - - - - Signal values above this count as voice - Sygnał powyżej podanej wartości traktowany jest jako mowa - - - - Compression - Kompresja - - - - &Quality - &Jakość - - - - Quality of compression (peak bandwidth) - Jakość kompresji (maksymalne pasmo) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Ta opcja określa jakość kompresji.</b><br />Decyduje również, ile pasma Mumble może wykorzystać podczas wysyłania dźwięku. - - - - Audio per packet - Dźwięk na pakiet - - - - How many audio frames to send per packet - Ile ramek dźwięku ma być wysyłane na pakiet - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Ta opcja ustawia ile ramek dźwięku powinno być umieszczonych w jednym pakiecie.</b><br />Zwiększanie ilości milisekund opóźni przesyłanie twojego głosu, ale dzięki temu zużyjesz mniej pasma. - - - Maximum bandwidth used for sent audio - Maksymalna ilość przepustowości łącza - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Wyświetla maksymalne pasmo jakie może być użyte.</b><br />Wyświetla maksymalne pasmo jakie może być wykorzystane przy wysyłaniu z twojego komputera. Bitrate dźwięku (użyte jest VBR) jest maksymalnym bitrate dla samego dźwięku. Położenie jest to bitrate zawierający informacje wykorzystywane przy dźwięku pozycyjnym. Obciążenie są to nagłówki pakietów (IP i UDP stanowi 75% obciążenia). - - - - Audio Processing - Przetwarzanie dźwięku - - - - Noise Suppression - Tłumienie hałasu - - - - Noise suppression - Maksymalny poziom tłumienia hałasu z otoczenia. - - - - Amplification - Wzmocnienie dźwięku - - - - Maximum amplification of input sound - Maksymalne wzmocnienie dźwięku wejściowego. - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Maksymalne wzmocnienie wejścia.</b><br />Mumble normalizuje poziom głośności przed kompresją, opcja ta określa dozwolony poziom wzmocnienia.<br />Rzeczywisty poziom jest stale aktualizowany w oparciu o aktualną strukturę twojej wypowiedzi, ale nigdy nie przekracza poziomu określonego tutaj.<br /> Jeśli poziom głośności mikrofonu w statystykach wynosi około 100% to prawdopodobnie chcesz ustawić wartość tej opcji na 2.0, ale gdy jak większość użytkowników nie będziesz w stanie osiągnąć 100%, ustaw wartość tej opcji trochę wyżej.<br />Najlepiej ustawić jak tak: <i>głośność mikrofonu * czynnik wzmocnienia>= 100</i> nawet gdy mówisz bardzo miękko. Pamiętaj, że nie zaszkodzi w tym ustawienie maksymalnej wartości, ale Mumble zacznie przechwytywać inne rozmowy jeżeli zostawisz to do auto-dostrojenia. - - - - Current speech detection chance - Aktualna szansa na wykrycie mowy - - - - Audible audio cue when push-to-talk is activated or deactivated - Kiedy wciskasz przycisk transmisji głosu zostanie odegrany dźwięk potwierdzający rozpoczęcie transmisji - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>Ta opcja ustawia sposób detekcji głosu na stosunek sygnału do szumu.</b><br />W tym trybie sygnał wejściowy jest analizowany jako czysty, a czystość tego sygnału używana jest do włączania transmisji głosowej. - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Wyświetla aktualne ustawienia wykrywania mowy.</b><br />Możesz zmienić te ustawienia w <i>Opcjach</i> lub w <i>Kreatorze ustawień audio</i>. - - - - Idle AutoMute - Automatyczne wyciszanie mikrofonu<br />po upłynięciu czasu bezczynności - - - - How long to remain idle before auto-mute. - Ile czasu musisz pozostać bezczynnym by zostać automatycznie wyciszonym. - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - Tutaj możesz ustawić czas bezczynności. Jeżeli przez ten czas nie wyślesz żadnego pakietu do serwera, zostaniesz wyciszony. - - - - Maximum bandwidth used for sending audio - Maksymalne pasmo używane do wysyłania dźwięku - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>Ta opcja określa wartość tłumienia hałasu.</b><br />Zwiększenie tej wartości powoduje agresywniejsze tłumienie hałasu. - - - - AudioInputDialog - - - Continuous - ciągłe nadawanie - - - - Voice Activity - aktywacja głosowa - - - - Push To Talk - aktywacja przyciskiem - - - - Audio Input - Wejście audio - - - - - %1 ms - %1 ms - - - - - Off - Wył. - - - - %1 s - %1 s - - - - -%1 dB - %1 dB - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1 kbit/s (Dźwięk %2, Położenie %4, Obciążenie %3) - - - - %1 min - %1 min - - - - AudioOutput - - - Form - Formularz - - - - Interface - Interfejs - - - - System - System - - - - Output method for audio - Input method for audio - Metoda wyjścia dźwięku - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Jest to metoda wyjścia dźwięku.</b><br />Najprawdopodobniej chcesz korzystać z DirectSound. - - - - Device - Urządzenie - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - Dźwięk pozycyjny - - - - Audio Output - Wyjście audio - - - - Default &Jitter Buffer - Domyślny bufor &drgań - - - - Safety margin for jitter buffer - Granica bezpieczeństwa dla bufora drgań. - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>Granica bezpieczeństwa dla bufora drgań.</b><br />Każdy przychodzący dźwięk jest najpierw buforowany, przez co opóźnienie jest najniższe jak to tylko możliwe. Ta opcja ustawia minimalny rozmiar bufora. Jeśli mowa jest dla ciebie lekko zniekształcona spróbuj zwiększyć ilość milisekund. - - - - TextLabel - Tekst - - - - Volume - Głośność - - - - Volume of incoming speech - Głośność przychodzącego dźwięku - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>Ta opcja pozwala na określenie głośności przychodzącej mowy.</b><br />Każda wartość powyżej 100% sprawi, że dźwięk będzie trochę zniekształcony. - - - - Output Delay - Opóźnienie wyjścia - - - - Amount of data to buffer - Ilość danych trafiających do bufora. - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Ustala ilość danych które trafiają do przed-bufora w buforze wyjścia. Eksperymentowanie z różnymi wartościami i ustawienie ich na najniższy poziom nie skutkują natychmiastowym rozsynchronizowaniem się dźwięku. - - - Volume attenuation - Dźwięk pozycyjny - - - MinDistance - Minimalny zasięg - - - Minimum distance to player before sound decreases - Ustawia minimalny zasięg -przechwytywania źródeł dźwięku - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Ustawia minimalny zasięg przechwytywania źródeł dźwięku. Głośność innych użytkowników nie będzie się zmieniać dopóki nie znajdą się dalej niż wskazuje minimalny dystans. - - - MaxDistance - Maksymalny zasięg - - - Maximum distance, beyond which sound won't decrease - Ustawia maksymalny zasięg -przechwytywania źródeł dźwięku - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Ustawia maksymalny zasięg przechwytywania źródeł dźwięku. - - - RollOff - Zanikanie dźwięku - - - - Factor for sound volume decrease - <b>Ustawia jak szybko odbierany dźwięk ma zanikać.</b><br />Powiększając tą wartość sprawisz, że dźwięk zaniknie szybciej, zmniejszając - dźwięk zaniknie wolniej. - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Jak szybko głośność powinna spadać, gdy przekroczy minimalny zasięg przechwytywania dźwięku. - - - - Bloom - Zmienna głośność - - - - Loopback Test - Tryb testowy - - - - Delay Variance - Opóźnienie pakietów - - - - Variance in packet latency - Opóźnienie pakietów podczas testu. - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>Ta opcja ustawia długość opóźnienia pakietów dla trybu testowego.</b><br />Na przykład jeśli ustawisz 15 milisekund test zacznie emulować opóźnienie sieci z pingiem 20-35 milisekund lub 80-95 milisekund. Większość połączeń różni się między sobą o około 5 milisekund. - - - - Packet Loss - Utracone pakiety - - - - Packet loss for loopback mode - Ilość utraconych pakietów podczas testu. - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>Ta opcja ustawia ilość utraconych pakietów w trybie testowym.</b> - - - - &Loopback - &Wybierz tryb - - - - Desired loopback mode - Tryb testowania - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - Ta opcja uaktywnia tryb testowy. - - - - Factor for sound volume increase - Czynnik wpływający na zwiększenie głośności - - - - The connected "speakers" are actually headphones. - Podłączone "głośniki" to w rzeczywistości słuchawki. - - - - Minimum Distance - Minimalna odległość - - - - Minimum distance to player before sound volume decreases - - - - - Maximum Distance - Maksymalna odległość - - - - Maximum distance, beyond which speech volume won't decrease - Ta opcja ustawia maksymalną odległość słyszalności dźwięku. W zależności od ustawienia odległości, mowa innych użytkowników nie będzie słyszana głośniej. - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - Ta opcja ustawia maksymalną odległość słyszalności dźwięku. W zależności od ustawienia odległości, mowa innych użytkowników nie będzie słyszana głośniej. - - - - Minimum Volume - Minimalna głośność - - - - What should the volume be at the maximum distance? - Jaka powinna być głośność maksymalnej odległości? - - - - How much should sound volume increase for sources that are really close? - <b>Jak bardzo Mumble powinien zmieniać głośność dla źródeł dźwięku, które są zbyt blisko?</b> -Ustaw odpowiednią liczbę %. Domyślnie 50%. - - - Connected "speakers" are actually headphones. - <b>Jeśli w tej chwli używasz słuchawek</b> to zaznacz tę opcję. Jest to ważne, bo zazwyczaj głośniki są przed tobą a słuchawki bezpośrednio z lewej i prawej. - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - <b>Jeśli w tej chwli używasz słuchawek</b> to zaznacz, że nie posiadasz głośników tylko słuchawki. Jest to ważne, bo zazwyczaj głośniki są przed tobą a słuchawki bezpośrednio z lewej i prawej. - - - - Headphones - Słuchawki - - - - Other Applications - Inne aplikacje - - - - Volume of other applications during speech - Głośność innych aplikacji podczas rozmowy. <b>UWAGA!</b> Działa tylko na Windows Vista / 7. - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>Zmniejsza głośność innych aplikacji podczas rozmowy.</b><br />Mumble wspiera obniżanie głośności innych aplikacji podczas nadchodzącej rozmowy. Ta opcja ustawia względną głośność innych aplikacji kiedy inni mówią. -<b>UWAGA!</b> Działa tylko na Windows VISTA SP1. - - - - AudioOutputDialog - - - None - wyłącz tryb testowy - - - - Local - test lokalny - - - - Server - test na serwerze - - - - Audio Output - Wyjście audio - - - - - %1 ms - %1 ms - - - - - - - - %1% - %1% - - - - %1ms - %1 ms - - - - - %1m - %1m - - - %1 - %1 - - - - AudioStats - - - Peak microphone level - - - - - Peak speaker level - - - - - Peak clean level - - - - - Speech Probability - Prawdopodobieństwo mowy - - - - Peak power in last frame - - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Ta opcja pokazuje moc głośników w ostatniej ramce (20 ms). Jednak jeśli używasz wielokanałowej metody próbkowania (np. ASIO) ze skonfigurowanymi kanałami ta opcja będzie wynosić 0. Jeśli posiadasz taki sprzęt skonfigurowany, a ta opcja nadal pokazuje 0, gdy odtwarzasz dźwięk z innych programów to znaczy, że twoje ustawienie nie działa prawidłowo. - - - - How close the current input level is to ideal - Jak blisko obecny poziom głośności jest bliski idealnemu - - - - Signal-To-Noise ratio from the microphone - Analiza na podstawie czystego sygnału. - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - Analiza na podstawie czystego sygnału. - - - - Probability of speech - Prawdopodobieństwo mowy - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - - - - - Bitrate of last frame - Bitrate ostatniej ramki - - - - Power spectrum of input signal and noise estimate - Siła spektrum sygnału i szacowanie poziomu hałasu - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - - - - - Weights of the echo canceller - Ciężkość usuwania echa - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - >1000ms - >1000ms - - - - Audio Statistics - Statystyki - - - - Input Levels - Poziomy wejścia - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - TextLabel - Tekst - - - - Signal Analysis - Analiza sygnału - - - - Microphone power - Siła mikrofonu - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - Analiza na podstawie czystego sygnału - - - - Configuration feedback - Konfiguracja - - - - Current audio bitrate - Bitrate audio - - - - DoublePush interval - Szybkość podwójnego kliknięcia (aktywuje ciągłą transmisję głosu, ponowne podwójne kliknięcie wyłącza ją). - - - Time between last two PushToTalk presses - Czas pomiędzy dwoma ostatnimi naciśnięciami klawisza do mówienia - - - - Speech Detection - Wykrywanie mowy - - - - Current speech detection chance - Aktualna szansa na wykrycie - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>Ta opcja pokazuje obecny stan sposobu transmisji głosu.</b><br />Możesz zmienić te ustawienia z menu Ustawienia lub korzystając z Kreatora ustawień dźwięku. - - - - Signal and noise power spectrum - Widmo hałasu i siły - - - - Echo Analysis - Analiza echa - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - Kreator ustawień dźwięku - - - - Introduction - Wprowadzenie - - - - Welcome to the Mumble Audio Wizard - Witamy w kreatorze ustawień dźwięku Mumble! - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - Dzięki temu kreatorowi poprawnie skonfigurujesz program Mumble! - - - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - Podczas działania tego kreatora dźwięk nadawany jest tak abyś sam siebie słyszał - przy czym nikt inny na żadnym serwerze cię nie usłyszy. - -Przejdź Dalej, aby rozpocząć konfigurację! - - - - Finished - Zakończono - - - - Enjoy using Mumble - Miłej zabawy z Mumble! - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - Gratulujemy! Od teraz powinieneś cieszyć się lepszą jakością dźwięku z Mumble. - - - - Device selection - Wybór urządzenia - - - - Selecting the input and output device to use with Mumble. - Wybierz urządzenia wejścia/wyjścia, z których Mumble będzie korzystać. - - - - Input device - Urządzenie wejścia - - - - This is the device your microphone is connected to. - Urządzenie, do którego podłączony jest mikrofon. - - - - - System - System - - - - Input method for audio - System wejścia audio - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>System wyjścia audio.</b><br />DirectSound zalecane. - - - - - Device - Urządzenie - - - - Input device to use - Urządzenie wejścia - - - - <b>Selects which sound card to use for audio input.</b> - <b>Zaznacza, które urządzenie użyć</b> - - - - Output device - Urządzenie wyjścia - - - - This is the device your speakers or headphones are connected to. - Urządzenie, do którego podłączączone są słuchawki/głośniki. - - - - Output method for audio - System wyjścia audio - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>System wyjścia audio.</b><br />DirectSound zalecane. - - - - Output device to use - Urządzenie wyjścia - - - - <b>Selects which sound card to use for audio Output.</b> - <b>Zaznacza, które urządzenie użyć</b> - - - - Volume tuning - Regulacja głośności - - - - Tuning microphone hardware volume to optimal settings. - Ustawienie optymalnej głośności mikrofonu. - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - Wejdź do panelu regulacji głośności Windows (Start>Uruchom>sndvol32) i upewnij się, że mikrofon jest wybrany jako urządzenie do przechwytywania dźwięku. Użyj opcji "Mic Boost" jeżeli jest dostępna. - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - Mów głośno, tak jakbyś był podekscytowany albo wkurzony. Zmniejszaj stopniowo głośność w panelu aż pasek poniżej zostanie tak wysoko jak to możliwe w niebiesko-zielonym kolorze (nie może być w czerwonym). - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - Teraz mów łagodnie tak jakbyś mówił późno w nocy, aby nikogo nie obudzić. - - - - Voice Activity Detection - Wybór sposobu aktywacji głosowej - - - - Letting Mumble figure out when you're talking and when you're silent. - Teraz pozwól Mumble ustalić, kiedy słyszany jest twój głos a kiedy panuje cisza. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - Wskaż sposób aktywacji, którego chcesz używać. - - - - Raw amplitude from input - Analiza na podstawie siły głosu - - - - Signal-To-Noise ratio - Analiza na podstawie czystego sygnału - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - Następnie musisz ustawić podane wskaźniki. -Zielony - mowa zdecydowana, żółty - mowa normalna, czerwony - gdy nic nie mówisz. - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - Ostatecznie ustaw jak długo Mumble podtrzymuje transmisję po zakończeniu wypowiedzi. -W ten sposób możesz uniknąć ucinania głosu pomiędzy wypowiadanymi zdaniami. - - - - Device tuning - Ustawianie urządzenia - - - - Changing hardware output delays to their minimum value. - Zmiana opóźnień sprzętu do minimalnych wartości. - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - Aby opóźnienia były najmniejsze bufor powinien być jak najmniejszy, wówczas karta dźwiękowa szybciej wysyła dźwięk. -Niektóre karty dźwiękowe mają granice co do ustawień bufora, raz działają a raz nie. -Postaraj się ustawić wielkość bufora tak, aby nie występowały żadne zakłócenia w odtwarzanym dźwięku. - - - - Amount of data to buffer. - Ilość danych do trafiających do bufora - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Ustaw jak najniżej możliwą wartość (UWAGA! Twoja karta dźwiękowa może nie działać na bardzo niskich wartościach). - - - - %1ms - %1ms - - - - %1 s - %1 s - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - Powinieneś usłyszeć jeden dźwięk który ciągle zmienia częstotliwość. Zmień suwakiem wartość do najmniejszej a jednocześnie do takiej przy, której nie występują wahania dźwięku. Echo podczas tego testu jest wyłączone. - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - Jeśli ustawisz swój mikrofon tak, aby przechwytywał dźwięk z głośników lub słuchawek to Mumble automatycznie ustawi opóźnienia audio tak, aby inni użytkownicy nie słyszeli dźwięków otoczenia (np. pisania na klawiaturze, oddechu). - - - - Audio path is %1ms long. - Ścieżka dźwiękowa ma długość %1ms - - - - Audio path cannot be determined. Input not recognized. - Ścieżka dźwiękowa nie może być określona. -Wejście dźwieku nie zostało rozpoznane! - - - - Use echo cancellation - Usuwanie akustycznego echa - - - - Cancel echo from headset or speakers. - Ta opcja usuwa echo ze słuchawek lub głośników. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - Uaktywnia usuwanie echa pochodzącego z urządzeń (głośniki lub słuchawki). - - - - Enable positional audio - Dźwięk pozycyjny - - - - Allows positioning of sound. - Uaktywnia pozycjonowanie dźwięku. - - - - This allows Mumble to use positional audio to place voices. - Pozwala to Mumble na używanie pozycjonowania dźwięku aby umieszczać głosy w różny sposób. - - - - Positional Audio - Dźwięk pozycyjny - - - - Adjusting attenuation of positional audio. - Szczegółowe ustawienia dźwięku pozycyjnego. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble wspiera dźwięk pozycyjny w kilku grach. - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - Wykres poniżej pokazuje <font color="red">ciebie</font>, <font color="yellow">głośniki</font> oraz <font color="green">poruszające źródło dźwięku</font>. -Powinieneś usłyszeć dźwięk przemieszczający się pomiędzy głośnikami. - - - - Use headphones - Zaznacz tą opcję jeśli masz podłączone słuchawki - - - - Use headphones instead of speakers. - Używaj słuchawek zamiast głośników. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - Dzięki tej opcji ignorujesz ustawienia w systemie i wymuszasz słuchawki. - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Adnotacja twórców: -Mumble jest ciągle rozwijany, naszym priorytetem jest skupianie się na cechach najbardziej pożądanych przez użytkowników, dlatego dodaliśmy do programu opcję wysyłania anonimowych statystyk. -Dane te zawierają konfigurację twojego klienta i są nam bardzo potrzebne do przyszłego rozwoju aplikacji. - - - - Submit anonymous statistics to the Mumble project - Zezwalaj na wysyłanie anonimowych statystyk do twórców programu - - - - Push To Talk: - Aktywacja wybranym przyciskiem: - - - - BanEditor - - - &Add - &Dodaj - - - - &Update - &Aktualizuj - - - - &Remove - &Usuń - - - - Mumble - Edit Bans - Mumble - edycja banów - - - - 0.0.0.0 - 0.0.0.0 - - - - &Address - &Adres IP - - - - &Mask - &Maska - - - - ChanACL - - - W - W - - - - T - T - - - - E - E - - - - S - S - - - - A - A - - - - M - M - - - - K - K - - - - C - C - - - - L - L - - - - None - Żaden - - - Write - Pisanie - - - - Traverse - Wejście na pod-kanał - - - - Enter - Wejście - - - - Speak - Mowa - - - - AltSpeak - Alternatywna mowa - - - - Mute/Deafen - Wycisz słuchawki i mikrofon - - - - Move/Kick - Przenieś / Kopnij - - - - Make channel - Stwórz kanał - - - - Link channel - Połącz kanał - - - - This represents no privileges. - Brak przywilejów. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Przedstawia całkowity dostęp do kanału, wliczjąc możliwość zmiany grup oraz informacji ACL. Ten przywilej zawiera wszystkie pozostałem przywileje. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Przedstawia możliwość wchodzenia na pod-kanały. Jeżeli użytkownik ma zabroniony dostęp do tego przywileju nie będzie w stanie w żaden sposób wejść na pod-kanały, niezależnie od innych przywilejów jakie posiada w pod-kanałach. - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Przedstawia możliwość wejścia na kanał. Jeżeli masz hierarchiczną strukturę, możesz nadać każdemu przywilej wchodzenia na pod-kanały jednocześnie blokując dostęp do głównego kanału w hierarchii. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Przedstawia możliwość mowy na kanale. Użytkownicy nieposiadający tego przywileju będą automatycznie wyciszani przez serwer, oraz nie będą w stanie mówić dopóki osoba z odpowiednimi przywilejami nie zdejmie im wyciszenia. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - Przedstawia możliwość alternatywnej mowy. Przywilej ten działa dokładnie tak jak <i>mowa</i>, ale dotyczy użycia przycisku alternatywnej mowy. Przywilej ten może być użyty do ogłaszania czegoś ważnego do całego drzewa kanałów bez ich łączenia. - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Przedstawia możliwość wyciszania użytkowników. Gdy użytkownik zostanie wyciszony pozostanie wyciszony dopóki inny uprawniony użytkownik nie zdejmie wyciszenia lub do czasu ponownego połączenia z serwerem. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Przedstawia możliwość przenoszenia użytkowników na inne kanały oraz kopnięcia ich z serwera. Aby móc przenieść użytkownika musi on posiadać przywilej przenoszenia oraz kopnięcia użytkownika lub posiadać zezwolenie na wejście na kanale docelowym. Użytkownicy z tym przywilejem mogą przenosić innych użytkowników na kanały gdzie nie mogli by normalnie wejść. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Przedstawia możliwość tworzenia pod-kanałów. Użytkownik tworzący pod-kanał zostaje automatycznie dodany do grupy <i>admin</i> w pod-kanale. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Przedstawia możliwość łączenia kanałów. Gdy mówiący użytkownik posiada przywilej <i>speak</i> na kanale gdzie są osoby które mogą go słuchać, użytkownicy połączonych kanałów słyszą się nawzajem. Aby połączyć kanały potrzebujesz przywileju łączenia kanałów na obu kanałach i tylko w jednym by rozłączyć kanały. - - - - Write ACL - Zapisz ACL - - - - ClientPlayer - - - Authenticated - Uwierzytelniony - - - - Muted (server) - Wyciszony mikrofon (przez serwer) - - - - Deafened (server) - Wyciszone słuchawki (przez serwer) - - - - Local Mute - Lokalne wyciszenie - - - - Muted (self) - Wyciszony mikrofon (przez użytkownika) - - - - Deafened (self) - Wyciszone słuchawki (przez użytkownika) - - - - ConfigDialog - - - Mumble Configuration - Konfiguracja Mumble - - - - Accept changes - Akceptuj zmiany - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Ten przycisk zaakceptuje zmiany i powróci do aplikacji.<br />Ustawienia zostaną zapisane na dysku jak zamkniesz program. - - - - Reject changes - Odrzuć zmiany - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Ten przycisk odrzuca zmiany i powraca do aplikacji. - - - - Apply changes - Zastosuj zmiany - - - - This button will immediately apply all changes. - Ten przycisk natychmiastowo uwzględnia zmiany. - - - - Undo changes for current page - Cofnij zmiany na danej stronie - - - - This button will revert any changes done on the current page to the most recent applied settings. - Cofa zmiany na danej stronie. - - - - Restore defaults for current page - Przywróć domyślne dla danej strony - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - Przywraca domyślne ustawienia dla danej strony. - - - Show all configuration items - Pokazuj wszystkie pozycje do skonfigurowania - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Pokazuj wszystkie pozycje do skonfigurowania - - - Expert Config - Zaawansowane - - - Tab 1 - Zakładka 1 - - - - Advanced - - - - - ConnectDialog - - - A&ddress - A&dres - - - - &Port - &Port - - - - &Username - &Użytkownik - - - - &Password - &Hasło - - - - &Connect - &Połącz - - - - Cancel - Anuluj - - - - &Add - &Dodaj - - - - &Remove - &Usuń - - - - &Custom Servers - &Niestandardowe serwery - - - - Server &Browser - Przeglądarka &serwerów - - - - Address - Adres IP - - - - URL - URL - - - - C&opy to custom - &Kopiuj do niestandardowych - - - - &View Webpage - &Zobacz WWW - - - - Connecting to %1 - Podłączanie do %1 - - - - Enter username - Nazwa użytkownika - - - Mumble - Mumble - - - - Failed to fetch server list - Nie udało sie pobrać listy - - - - &Label - &Nazwa - - - - Label - Nazwa - - - - -Unnamed entry- - Bez Nazwy - - - - Mumble Server Connect - Połączenie Mumble - - - - &Cancel - &Anuluj - - - - Unknown - Nieznany - - - - - New - Nowy - - - - - Add - Dodaj - - - - Update - Aktualizuj - - - - CoreAudioSystem - - - Default Device - - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - - Opening chosen DirectSound Input failed. Default device will be used. - Otwieranie wybranego wejścia dźwięku nie powiodło się. Domyślne urządzenie zostanie włączone. - - - - Default DirectSound Voice Input - Domyślne wejście dźwięku DirectSound - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - Otwieranie wybranego wejścia dźwięku nie powiodło się. Dźwięk z mikrofonu nie będzie pobierany. - - - - Lost DirectSound input device. - Utracono urządzenie wejścia DirectSound. - - - - DXAudioOutput - - - Opening chosen DirectSound Output failed. No audio will be heard. - Otwieranie wybranego wyjścia dźwięku nie powiodło się. - - - - Opening chosen DirectSound Output failed. Default device will be used. - Otwieranie wybranego wyjścia dźwięku nie powiodło się. - - - - Default DirectSound Voice Output - Domyślne wyjście dźwięku DirectSound - - - - Lost DirectSound output device. - Utracono urządzenie wyjścia DirectSound. - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Nie udało się zainicjalizować bazy danych -w żadnej z podanych lokacji. - - - - GlobalShortcut - - - Shortcuts - Skróty - - - - List of configured shortcuts - Lista skonfigurowanych skrótów - - - - Function - Funkcja - - - - Shortcut - Skrót - - - - Suppress - Zarezerwuj - - - - Add new shortcut - Dodaj nowy skrót - - - - This will add a new global shortcut - Ta opcja doda nowy, globalny skrót - - - - &Add - &Dodaj - - - - Remove selected shortcut - Usuń zaznaczony skrót - - - - This will permanently remove a selected shortcut. - Ta opcja na stałe usunie zaznaczony skrót. - - - - &Remove - &Usuń - - - - GlobalShortcutConfig - - - Shortcuts - Skróty - - - Function - Funkcja - - - Shortcut - Skrót - - - Shortcut bound to %1. - Skrót przypisany do %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>To jest globalny skrót przypisany do %1</b><br /> Kliknij na tym polu a potem użyj jakiegoś klawisza. Aby wyczyścić dane pole kliknij dwa razy. - - - Double-click an entry to clear the shortcut. - Kliknij dwa razy, aby zresetować dany skrót. - - - Suppress - Zarezerwuj - - - - Shortcut button combination. - Kombinacja klawiszy - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>To jest globalna kombinacja klawiszy.</b><br />Podwójnie kliknij, a następnie wciskaj kombinację klawiszy aby je zapisać. - - - - Suppress keys from other applications - Zablokuj skrót innej aplikacji - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>Ta opcja ukrywa wciśnięcia przycisków przed innymi aplikacjami.</b><br /> Włączając tę opcję ukrywasz przycisk przed inną aplikacjją (lub ostatni z kombinacji multi-przycisków). Nie wszystkie przyciski da się tak ukryć. - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - <b>Ta opcja pozwala na ustalenie wstrzymań pomiędzy nadawaniem głosu.</b><br />Ustaw tę opcję wyżej jeśli twój głos jest niewyraźny..<br />Ta opcja ma sens tyko, gdy używasz aktywacji głosowej! - - - - GlobalShortcutX - - - Mouse %1 - Mysz %1 - - - - LCD - - - Not connected - Niepołączony - - - - LCDConfig - - - Graphic - Grafika - - - - Character - Tekst - - - - Enable this device - Uaktywnij to urządzenie - - - - LCD - LCD - - - - Form - Formularz - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">To jest lista wszystkich dostępnych urządzeń LCD w twoim systemie. Listuje wszystkie urządzdenia alfabetycznie oraz podaje informacje o rozmiarze ekranu czy jego typie. Mumble wspiera wyświetlanie napisów na kilku urządzeniach LCD jednocześnie.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Typ:</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble wspierda 2 rodzaje urządzeń LCD. Graficzny ekran LCD pozwala na wypełnienie pojedyńczych pikseli na ekranie, natomiast tekstowy ekran LCD pozwala na pokazywanie poszczególnych znaków na ekranie. Niektóre opcje programu działają tylko na graficznym ekranie LCD.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Rozmiar:</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Te pole ocenia rozmiar urządzenia LCD. Piksele dla graficznych ekranów LCD lub tekstowe dla tekstowych LCD.</p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Uaktywniony:</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">Ta opcja decyduje czy na danym ekranie LCD jest coś wyświetlane czy nie.</span></p></body></html> - - - - Devices - Urządzenia - - - - Name - Nazwa - - - - Type - Typ - - - - Size - Rozmiar - - - - Enabled - Uaktywniony - - - - Views - Podgląd - - - - Minimum Column Width - Minimalna szerokość kolumny - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Ta opcja ustawia minimalną szerokość kolumny w Widoku Graczy.</span></p><p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Jeśli rozmawia zbyt duża ilość ludzi jednocześnie to kolumna z Widokiem Graczy podzieli się na dwie różne kolumny.</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Możesz użyc tej opcji aby wybrać kompromis pomiędzy liczbą wyświetlanych graczy na ekranie LCD oraz szerokością nazw graczy.</p></body></html> - - - - TextLabel - Tekst - - - - Splitter Width - Szerokość rozdzielnika - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Ta opcja ustala szerkość rozdzielnika.</span></p></body></html> - - - - Log - - - Debug - Debug - - - - Critical - Błąd krytyczny - - - - Warning - Ostrzeżenie - - - - Information - Informacja - - - - Server Connected - Połączono z serwerem - - - - Server Disconnected - Rozłączono od serwera - - - - Player Joined Server - Użytkownik dołączył do serwera - - - - Player Left Server - Użytkownik opuścił serwer - - - - Player kicked (you or by you) - Użytkownik wykopany (ty lub przez ciebie) - - - - Player kicked - Użytkownik wykopany - - - - You self-muted/deafened - Wyciszyłeś mikrofon/słuchawki i mikrofon - - - - Other self-muted/deafened - Ktoś wyciszył swój mikrofon/słuchawki i mikrofon - - - - Player muted (you) - Użytkownik wyciszył twój mikrofon - - - - Player muted (by you) - Użytkownik ma wyciszony mikrofon (przez ciebie) - - - - Player muted (other) - Użytkownik ma wyciszony mikrofon - - - - Player Joined Channel - Użytkownik wszedł na kanał - - - - Player Left Channel - Użytkownik opuścił kanał - - - - Permission Denied - Brak dostępu - - - - Text Message - Wiadomość tekstowa - - - Script Errors - Błędy skryptów - - - - LogConfig - - - Toggle console for %1 events - Włącz konsolę dla zdarzeń: %1 - - - - Toggle pop-up notifications for %1 events - Włącz powiadomienia dla zdarzeń: %1 - - - - Toggle Text-To-Speech for %1 events - Włącz Tekst-na-mowę dla %1 - - - - Click here to toggle sound notification for %1 events - Kliknij tutaj żeby włączyć powiadomienia dźwiękowe dla %1 - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - Ścieżka pliku dźwiękowego dla zdarzeń %1<br />Pojedyncze kliknięcie, aby odtworzyć<be />Podwójne, aby zmienić - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - Kliknij tutaj, aby włączyć wpisy w konsoli dla %1.<br />Jeśli zaznaczone Mumble będzie pokazywać wszystkie %1 w logu. - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - Kliknij tutaj, aby włączyć powiadomienia dla %1.<br />Jeśli zaznaczone Mumble będzie pokazywać wszystkie %1 w obszarze powiadomień. - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Kliknij tutaj, aby włączyć tekst na mowęi dla %1.<br />Jeśli zaznaczone Mumble będzie używać tekstu na mowę do odczytania %1 na głos. Tekst na mowę i powiadomienia dźwiękowe nie mogą być uaktywnione razem. - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Kliknij tutaj, aby włączyć powiadomienia dźwiękowe dla %1.<br />Jeśli zaznaczone Mumble będzie odtwarzać dźwięki dla %1. Powiadomienia dźwiękowe nie mogą być uaktywnione razem z tekstem na mowę. - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - Ścieżka do pliku użytego do powiadomień dźwiękowych w przypadku dla %1.<br />Pojedyncze kliknięcie odtwarza dany dźwięk<br />Podwójne kliknięcie zmienia plik<br />Upewnij się, że powiadomienia dźwiękowe są aktywne inaczej to nie zadziała. - - - - Choose sound file - Wybierz plik dźwiękowy - - - - Invalid sound file - Nieprawidłowy plik dźwiękowy - - - - The file '%1' does not exist or is not a valid speex file. - - - - - Messages - Wiadomości - - - - Console - Konsola - - - Enable console for %1 - Uaktywnij konsolę dla %1 - - - Enable Text-To-Speech for %1 - Uaktywnij tekst na mowę dla %1 - - - - Text To Speech - Tekst na mowę - - - - Volume - Głośność - - - - Volume of Text-To-Speech Engine - Głośność tekstu na mowę - - - - <b>This is the volume used for the speech synthesis.</b> - <b>Głośność tekstu na mowę.</b> - - - - Length threshold - Długość - - - - Message length threshold for Text-To-Speech Engine - Długość wiadomości dla tekstu na mowę - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>Ustala długość wiadomości odczytywanej przez tekst na mowę.</b><br />Wiadomości większe niż ustalony limit nie będą odczytywane. - - - - Message - Wiadomość - - - - Notification - Powiadomienie - - - - Text-To-Speech - Tekst na mowę - - - - Soundfile - Plik dźwiękowy - - - - Path - Ścieżka do pliku dźwiękowego - - - - Characters - liter(y) - - - - LookConfig - - - Language - Język aplikacji - - - - Look and Feel - Wygląd - - - - - System default - Domyślny (zgodny z systemem operacyjnym) - - - - Language to use (requires restart) - Wybierz język (potrzebny restart) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>Wybiera język interfejsu. - - - - Style - Styl okienek - - - - Basic widget style - Styl okienek - - - - <b>This sets the basic look and feel to use.</b> - <b>Ustawia wygląd.</b> - - - - Skin - Skórka - - - - Skin file to use - Plik skórki - - - - List players above subchannels (requires restart). - Listuj użytkowników nad kanałem (wymaga restartu). - - - - User Interface - Interfejs - - - - ... - ... - - - - Choose skin file - Zmień skórkę - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>Użytkownicy będą wylistowani nad kanałem (wymaga restartu). - - - - Players above Channels - Wyświetlaj nazwy użytkowników nad nazwą kanału - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>Ustawia jakiej skórki powinien używać Mumble. - - - - Form - Formularz - - - New version check - Aktualizacje programu - - - Check for updates on startup - Sprawdzaj, czy istnieje nowsza wersja Mumble przy starcie - - - - None - nie rozwijaj kanałów - - - - Only with players - rozwijaj tylko te kanały, na których są użytkownicy - - - - All - rozwijaj wszystkie kanały - - - - Expand - Rozwijanie kanałów - - - - When to automatically expand channels - Ustawia kiedy automatycznie rozwijać kanały - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - Ta opcja ustawia, które kanały powinny być automatycznie rozwijane. - - - - Ask - pytaj przed podjęciem akcji - - - - Do Nothing - wyłącz opcje przeciągania kanałów - - - - Move - przenieś kanał bez pytania - - - - Channel Dragging - Przeciąganie kanałów - - - - This changes the behaviour when moving channels. - Ta opcja zmienia zachowanie kiedy przenosisz kanał. - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - Ogranicza możliwość przypadkowego przestawienia układu kanałów. - - - - Ask whether to close or minimize when quitting Mumble. - Okno potwierdzenia pokazuje się tylko wtedy, gdy jesteś połączony z jakimś serwerem. - - - - <b>If set, will verify you want to quit if connected.<b> - <b>Jeśli ta opcja jest zaznaczona to zobaczysz komunikat czy rzeczywiście chcesz zamknąć Mumble (abyś przypadkiem nie zamknął programu), ujrzysz go tylko wtedy, gdy jesteś aktualnie połączony z jakimś serwerem.<b> - - - - Ask on quit while connected - Ostrzegaj przed zamknięciem programu - - - - Make the Mumble window appear on top of other windows. - Okno Mumble wyświetlane zawsze na wierzchu. - - - - <b>This makes the Mumble window a topmost window.</b> - <b>Sprawia, że okno Mumble jest zawsze na pierwszym planie.</b> - - - - Always On Top - Zawsze na wierzchu - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>Jeśli zaznaczone, minimalizacja głównego okna Mumble sprawi, że okno zostanie ukryte a dostęp do niego będzie dostępny tylko po przez ikonę w zasobniku systemowym. Jeśli opcja ta jest niezaznaczona, minimalizacja Mumble ukryje okno w normalny sposób (na pasku zadań).</b> - - - - Hide in tray when minimized - Ukryj w zasobniku systemowym podczas minimalizacji - - - Show all configuration items - Pokazuj wszystkie pozycje do skonfigurowania - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>Pokazuj wszystkie opcje programu.</b> Większość użytkowników Mumble i tak nie zmienia tych ustawień, uaktywnij tą opcję aby zobaczyć wszystkie funkcje programu. - - - Expert Config - Zaawansowana konfiguracja - - - - Hide the main Mumble window in the tray when it is minimized. - Ukryj Mumble w zasobniku systemowym, kiedy główne okno zostanie zminimalizowane. - - - - MainWindow - - - - Root - Źródło - - - - &Connect - &Połącz - - - - Open the server connection dialog - Otwórz okno połączenia serwera - - - - Shows a dialog of registered servers, and also allows quick connect. - Pokazuje serwery zarejestrowane, pozwala na szybkie dołączenie. - - - - &Disconnect - &Rozłącz - - - - Disconnect from server - Rozłącz od serwera - - - - Disconnects you from the server. - Rozłącza cię od serwera. - - - - &Ban lists - &Lista banów - - - - Edit ban lists on server - Edytuj listę banów serwera - - - - This lets you edit the server-side IP ban lists. - Pozwala na edycję listy zbanowanych IP. - - - - &Kick - &Kopnij - - - - Kick player (with reason) - Wyrzuć użytkownika (podaj powód) - - - - Kick selected player off server. You'll be asked to specify a reason. - Wyrzuca użytkownika z serwera. - - - - &Ban - &Banuj - - - - Kick and ban player (with reason) - Wyrzuć i zablokuj dostęp (podaj powód) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Blokuje dostęp do serwera temu użytkownikowi. - - - - &Mute - &Wycisz - - - - Mute player - Wycisz użytkownika - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Wycisza użytkownika na serwerze. - - - - &Deafen - &Wycisz słuchawki i mikrofon - - - - Deafen player - Wycisz słuchawki i mikrofon użytkownika - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Wycisz słuchawki i mikrofon użytkownika na serwerze. - - - - &Local Mute - &Wycisz lokalnie - - - - &Add - &Dodaj - - - - Add new channel - Dodaj nowy kanał - - - - This adds a new sub-channel to the currently selected channel. - Dodaje nowy pod-kanał. - - - - &Remove - &Usuń - - - - Remove channel - Usuń kanał - - - - This removes a channel and all sub-channels. - Usuwa kanał i wszystkie pod-kanały. - - - - &Edit ACL - &Edytuj ACL - - - - Edit Groups and ACL for channel - Edytuje grupy i ACL kanału - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Otwiera okno z zezwoleniami. - - - - &Rename - &Zmień nazwę - - - - &Change Description - Z&mień opis - - - - Changes the channel description - Zmienia opis kanału - - - - This changes the description of a channel. - Ta opcja zmienia opis kanału. - - - - &Link - &Połącz - - - - Link your channel to another channel - Połącz kanał do innego kanału - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Ta opcja łączy obecny kanał z zaznaczonym kanałem. - - - - Unlink your channel from another channel - Rozłącz kanał od innego kanału - - - - This unlinks your current channel from the selected channel. - Rozłącza bieżący kanał od zaznaczonego kanału. - - - - Unlink &All - &Rozłącz wszystkie - - - - Unlinks your channel from all linked channels. - Rozłącza twój kanał od reszty. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Ta opcja rozłącza twój obecny kanał od wszystkich innych kanałów. - - - - &Reset - &Resetuj sprzęt audio - - - - Reset audio preprocessor - Resetuj sprzęt audio - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Ta opcja zresetuje twoje urządzenie audio. Użyj jej jeśli coś jest nie tak (hałas, zakłócenia). - - - - &Mute Self - &Wycisz mikrofon - - - - Mute yourself - Wycisz mikrofon - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Wycisza twój mikrofon. Nadal słyszysz innych. - - - - &Deafen Self - &Wycisz słuchawki i mikrofon - - - - Deafen yourself - Wycisz słuchawki i mikrofon - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Wyłącza twoje słuchawki i mikrofon. Nic nie będziesz słyszał ani nikt nie będzie słyszeć ciebie. - - - - &Text-To-Speech - &Tekst na mowę - - - - Toggle Text-To-Speech - Włącz/wyłącz tekst na mowę - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Włącza lub wyłącza tekst na mowę. Wszelkie wiadomości z dziennika zostaną przeczytane na głos przez Microsoft Sam'a (lub inny domyślny dla danego komputera głos). - - - - S&tatistics - S&tatystyki - - - - Display audio statistics - Wyświetl statystyki audio - - - - Pops up a small dialog with information about your current audio input. - Pokazuje informacje o twoim wejściu audio. - - - - Forcibly unlink plugin - Wymuś rozłączenie wtyczki - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Ta opcja wymusza rozłączenie bieżącej wtyczki, przydatne jeśli wysyła ona złe dane. - - - - &Settings - &Ustawienia - - - - Configure Mumble - Konfiguracja Mumble - - - - Allows you to change most settings for Mumble. - Pozwala na zmianę większości ustawień Mumble. - - - - &What's This? - &Co to jest? - - - - Enter What's This? mode - Wejdź w tryb "Co to jest?" - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Uaktywnia tryb "Co to jest?". Klikaj kursorem na poszczególne elementy interfejsu, aby dowiedzieć się do czego służą. - - - - &About - O &programie - - - - Information about Mumble - Informacje na temat Mumble - - - - Shows a small dialog with information and license for Mumble. - Pokazuje małe okno z informacjami o licencji Mumble. - - - - About &Speex - O &Speex - - - - Information about Speex - Informacje na temat Speex - - - - Shows a small dialog with information about Speex. - Pokazuje małe okno z informacjami na temat Speex. - - - - Information about Qt - Informacje na temat Qt - - - - Shows a small dialog with information about Qt. - Pokazuje małe okno z informacjami na temat Qt. - - - - Check for &Updates - Sprawdź dostępność &aktualizacji... - - - - Check for new version of Mumble - Sprawdź czy jest nowa wersja Mumble - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Łączy się ze stroną Mumble i sprawdza czy jest nowa wersja, jeśli tak to podaje link do niej. - - - - Mumble -- %1 - Mumble -- %1 - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Dziennik pokazuje wszystkie ostatnie wydarzenia takie jak: próby połączenia z serwerem, błędy oraz wiadomości użytkowników.<br /> -Możesz dowolnie skonfigurować okno dziennika w Konfiguracja>Ustawienia>Wiadomości. - - - - &Server - &Serwer - - - - &Player - &Użytkownik - - - - &Channel - &Kanał - - - - &Audio - &Dźwięk - - - - C&onfigure - K&onfiguracja - - - - &Help - &Pomoc - - - - Kicking player %1 - Wykopywanie użytkownika %1 - - - - - Enter reason - Podaj powód - - - - Banning player %1 - Banowanie użytkownika %1 - - - - Mumble - Mumble - - - - Push and hold this button to send voice. - Global Shortcut - Naciśnij i przytrzymaj ten przycisk, aby transmitować głos. - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - - - - - Toggle self-mute status. - Global Shortcut - Włącz tryb wyciszenia mikrofonu - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - Ta opcja pokaże twój status wyciszenia. Jeśli wyłączysz tą opcję zablokujesz wyciszenie słuchawek i mikrofonu. - - - - Toggle self-deafen status. - Global Shortcut - Włącz tryb wycieszenia słuchawek - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - Ta opcja pokaże twój status wyciszenia słuchawek i mikrofonu. Jeśli włączysz tą opcję uaktywnisz również wyciszenie samego mikrofonu. - - - - Toggle state of in-game overlay. - Global Shortcut - Włącz tryb nakładki w grze. - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - Ta opcja zmieni tryb nakładki w grze trzema dostępnymi trybami. - - - - - Channel Name - Podaj nazwę kanału: - - - - Change description of channel %1 - Zmień opis kanału %1 - - - - Unmuted and undeafened. - Słuchawki i mikrofon ponownie działają. - - - - Unmuted. - Mikrofon ponownie działa. - - - - Muted. - Mikrofon został wyciszony. - - - - Muted and deafened. - Słuchawki i mikrofon zostały wyciszone. - - - - Deafened. - Słuchawki i mikrofon zostały wyciszone. - - - - Undeafened. - Słuchawki ponownie działają. - - - - About Qt - O Qt - - - - Joining %1. - Dołączam %1. - - - - Server connection failed: %1. - Połączenie z serwerem zostało przerwane: %1. - - - - Disconnected from server. - Rozłączony od serwera. - - - - Reconnecting. - Ponowne łączenie. - - - - Joined server: %1. - %1 dołączył do serwera. - - - - Left server: %1. - %1 opuścił serwer. - - - - %1 is now muted and deafened. - %1 ma teraz wyciszone słuchawki i mikrofon. - - - - %1 is now muted. - %1 ma teraz wyciszony mikrofon. - - - - %1 is now unmuted. - %1 nie ma już wyciszonego mikrofonu. - - - - - server - Serwer - - - - You were muted by %1. - %1 wyciszył twój mikrofon. - - - - You were unmuted by %1. - %1 wyłączył wyciszenie mikrofonu. - - - - %1 muted by %2. - %2 wyciszył mikrofon %1. - - - - %1 unmuted by %2. - %2 wyłączył wyciszenie mikrofonu %1. - - - - You were deafened by %1. - Twoje słuchawki i mikrofon zostały wyciszone przez: %1. - - - - You were undeafened by %1. - Twoje słuchawki i mikrofon nie są już wyciszone: %1. - - - - %1 deafened by %2. - Słuchawki i mikrofon %1 zostały wyciszone przez %2. - - - - %1 undeafened by %2. - %2 wyłączył wyciszenie słuchawek %1. - - - - You were kicked from the server by %1: %2. - Zostałeś wykopany z serwera przez %1. Z powodu: %2. - - - - %3 was kicked from the server by %1: %2. - %3 został wykopany z serwera przez %1. Z powodu: %2. - - - - You were kicked and banned from the server by %1: %2. - Dostałeś bana od %1 z powodu %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 dostał bana od %1 z powodu: %2. - - - - You were moved to %1 by %2. - Zostałeś przeniesiony do kanału %1 przez %2. - - - - %1 left channel. - %1 opuścił kanał. - - - - %1 moved out by %2 to %3. - %1 przeniesiony przez %2 do kanału %3. - - - - %1 moved in by %2 from %3. - %1 przeniesiony przez %2 do kanału %3. - - - %1 moved out by %2. - %2 przeniósł %1. - - - - %1 entered channel. - %1 wszedł na kanał. - - - %1 moved in by %2. - %2 przeniósł %1. - - - - Server connection rejected: %1. - Połączenie odrzucone: %1. - - - - Denied: %1. - Zabroniono: %1. - - - - Welcome to Mumble. - Witamy w Mumble. - - - - Push-to-Talk - Global Shortcut - Aktywacja przyciskiem - - - - Reset Audio Processor - Global Shortcut - Zresetuj sprzęt audio - - - - Toggle Mute Self - Global Shortcut - Wycisz mikrofon - - - - Toggle Deafen Self - Global Shortcut - Wycisz słuchawki i mikrofon - - - - Force Center Position - Global Shortcut - Wymuś pozycję w środku - - - - Chan Parent - Global Shortcut - Źródło kanału - - - - Chan Sub#%1 - Global Shortcut - Pod-Kanał # %1 - - - - Chan All Subs - Global Shortcut - Wszystkie pod-kanały - - - - Push-to-Mute - Global Shortcut - Wyciszenie przyciskiem - - - - Join Channel - Global Shortcut - Dołącz do kanału - - - - Toggle Overlay - Global Shortcut - Włącz nakładkę - - - - Alt Push-to-Talk - Global Shortcut - Alternatywny przycisk - aktywacji przyciskiem - - - - Unlink Plugin - Global Shortcut - Wyłącz wtyczki - - - - Are you sure you want to delete %1 and all its sub-channels? - Czy jesteś pewien, że chcesz usunąć %1 oraz wszystkie pod-kanały? - - - - &Quit Mumble - &Zakończ - - - - Closes the program - Zamyka program - - - - Exits the application. - Wyłącza aplikację. - - - - Send Messa&ge - Wyślij wiado&mość - - - - Send a Text Message - Wyślij wiadomość tekstową - - - - Sending message to %1 - Wysyłanie wiadomości do %1 - - - - - To %1: %2 - Do %1: %2 - - - - - Message to %1 - Wiadomość do %1 - - - - Invalid username - Niepoprawna nazwa użytkownika - - - - You connected with an invalid username, please try another one. - Połączyłeś się do serwera z niewłaściwą nazwą użytkownika, spróbuj innej nazwy. - - - - That username is already in use, please try another username. - Ta nazwa użytkownika jest już zajęta, spróbuj innej. - - - - Wrong password - Błędne hasło - - - - Wrong password for registered users, please try again. - Podałeś złe hasło dla zarejestrowanych użytkowników, spróbuj jeszcze raz. - - - - Wrong server password for unregistered user account, please try again. - Podałeś złe hasło dla niezarejestrowanych użytkowników, spróbuj jeszcze raz. - - - - From %1: %2 - Od %1: %2 - - - - Message from %1 - Wiadomość od %1 - - - - &Audio Wizard - &Kreator ustawień dźwięku - - - - Sends a text message to another user. - Wysyła wiadomość tekstową do innego użytkownika. - - - - Start the audio configuration wizard - Rozpocznij konfiguracjęprogramu Mumble - - - - This will guide you through the process of configuring your audio hardware. - Ten kreator poprowadzi cię przez proces konfiguracji programu Mumble. - - - - SSL Verification failed: %1 - Weryfikacja SSL nie powiodła się: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>OSTRZEŻENIE:</b> Ten serwer posiada obecnie inny certyfikat niż poprzedni, który masz zachowany u siebie. - - - - Sever presented a certificate which failed verification. - Serwer posiada certyfikat, który nie przeszedł weryfikacji. - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br />Błędy certyfikatu: </p><ol>%2</ol><p>Czy mimo to chcesz go zaakceptować?<br />(Mumble więcej cię o to nie zapyta.)</p> - - - - &Information - &Informacje - - - - Show information about the server connection - Pokaż informacje o serwerze - - - - This will show extended information about the connection to the server. - Ta opcja pokaże zaawansowane informacje na temat połączenia z serwerem. - - - - Mumble Server Information - Serwer Mumble - Informacje - - - - - &View Certificate - &Zobacz certyfikat - - - - Opening URL %1 - Otwieranie adresu %1 - - - - URL scheme is not 'mumble' - Adres URL nie jest obsługiwany przez Mumble ('mumble') - - - - Connecting to %1 - Łączenie z %1 - - - - Enter username - Nazwa użytkownika - - - - Renames the channel - Zmienia nazwę kanału - - - - This renames a channel. - Zmienia nazwę kanału. - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - Program Mumble został uruchomiony po raz pierwszy na tym komputerze.<br /> Czy chcesz uruchomić kreator ustawień dźwięku, aby skonfigurować podstawowe opcje aplikacji? - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>Kanał kontrolny</h2><p>Szyfrowanie %1 bit %2<br />%1 ms przeciętnego opóźnienia (%4 niezgodności)</p> - - - - Voice channel is sent over control channel. - Kanał głosowy jest wysyłany przez kanał kontrolny. - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>Kanał głosowy</h2><p>Szyfrowanie 128-bitowym kluczem OCB-AES128<br />%1 ms przeciętnego opóźnienia (%4 niezgodności)</p> - - - - UDP Statistics - Statystyki UDP - - - - To Server - Do serwera - - - - From Server - Od serwera - - - - Good - Dobre - - - - Late - Opóźnione - - - - Lost - Utracone - - - - Resync - Re-synchronizowane - - - - Ctrl+Q - Ctrl+Q - - - - Mute player locally - Wycisz użytkownika lokalnie - - - - Mute or unmute player locally. Use this on other players in the same room. - Wyciszanie mikrofonu lub przywracanie głosu danego użytkownika lokalnie. Używaj tego na innych użytkownikach na tym samym kanale. - - - &Rename Channel - &Zmień nazwę - - - - About &Qt - O &Qt - - - - Sending message to channel %1 - Wysyłanie wiadomości na kanał: %1 - - - - Sending message to channel tree %1 - Wyślij wiadomość do wszystkich na: %1 - - - - To tree %1: %2 - Do kanału %1: %2 - - - - Message to tree %1 - Wyślij do kanału %1 - - - - Sends a text message to all users in a channel. - Wysyła wiadomość do wszystkich na tym kanale. - - - - Send &Tree Message - Wyślij do &drzewa kanałów - - - - Send message to channel tree. - Wyślij wiadomość do wszystkich na tym kanale. - - - - This sends a text message to a channel and it's subchannels. - Wysyła wiadomość do wszystkich na tym kanale oraz do wszystkich pod-kanałów. - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - Maksymalny transfer serwera to %1 kbit/s. Jakość ustawiona automatycznie. - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>Szerokość pasma dźwięku</h2><p>Maksymalnie %1 kbit/s<br />Obecnie %2 kbit/s (Jakość %3)</p> - - - - Connected to server %1. - Połączony z serwerem %1. - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - <b>UWAGA!</b> Mumble jest obecnie połączony z serwerem. - -Chcesz zakończyć czy zminimalizować program? - - - - Close - Zakończ - - - - - Minimize - Minimalizuj - - - - &Window - &Okno - - - - Ctrl+M - Ctrl+M - - - Ctrl+W - Ctrl+W - - - - Toggle Minimal - Global Shortcut - Tryb minimalny - - - - &Minimal View - &Tryb minimalny - - - - Toggle minimal window modes - Uruchom minimalny tryb - - - - This will toggle minimal mode, where the log window and menu is hidden. - Ta opcja uruchomi tryb minimalny, gdzie okno z dziennikiem i menu są ukryte. - - - - Log - Dziennik - - - - Volume Up (+10%) - Global Shortcut - Głośność w górę (+10%) - - - - Volume Down (-10%) - Global Shortcut - Głośność w dół (-10%) - - - - Clear - Wyczyść - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - Przeciąganie kanału masz ustatwione na "wyłącz opcje przeciągania kanałów" dlatego nie zostałeś przeniesiony. - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - Nieznany tryb Przeciągania Kanału w PlayerModel::dropMimeData. - - - - &Unlink - Channel - &Rozłącz - - - - &Unlink - Plugin - &Wyłącz wtyczki - - - - Server - message from - Serwer - - - &Quit - &Zakończ - - - - Hide Frame - Ukryj ramkę - - - - Toggle showing frame on minimal window - Uaktywnia obramowanie okna w trybie minimalnym - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - Uaktywnia obramowanie okna w trybie minimalnym dzięki czemu można przenosić i zmieniać rozmiar okna. - - - - NetworkConfig - - - Network - Sieć - - - - Form - Formularz - - - - Connection - Połączenie - - - - Use TCP compatibility mode - Używaj trybu zgodności TCP - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Uaktywnij tryb kompatybilności TCP.</b> Dzięki tej opcji Mumble działa w przypadkach kiedy nie można się połączyć w trybie UDP. Negatywnym skutkiem tej opcji jest utracenie pewnej liczby pakietów. - - - - Use TCP mode - Używaj trybu TCP - - - - Reconnect when disconnected - Automatycznie wznawiaj przerwane połączenie - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Automatycznie wznawiaj przerwane połączenie</b> Mumble będzie ponawiać połączenie co 10 sekund. - - - - Reconnect automatically - Automatycznie wznawiaj przerwane połączenie - - - - Proxy - Proxy - - - - Type - Typ - - - - Type of proxy to connect through - Typ proxy - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Rodzaj proxy.</b> Połączenia przez proxy wymuszają tryb zgodności TCP. - - - - Direct connection - połączenie bezpośrednie - - - - HTTP(S) proxy - HTTP(S) Proxy - - - - SOCKS5 proxy - SOCKS5 Proxy - - - - Hostname - Host - - - - Hostname of the proxy - Nazwa hosta proxy - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - Nazwa serwera proxy. - - - - Port - Port - - - - Port number of the proxy - Numer portu - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - Port na zdalnym serwerze. - - - - Username - Użytkownik - - - - Username for proxy authentication - Nazwa użytkownika dla proxy - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - Nazwa użytkownika przy autoryzacji do proxy. - - - - Password - Hasło - - - - Password for proxy authentication - Hasło dla proxy - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - Hasło do serwera proxy. Jeżeli dostęp ma być anonimowy pozostaw te pole puste. - - - - Mumble services - Usługi Mumble - - - - Check for updates on startup - Sprawdzaj podczas uruchamiania czy jest nowsza wersja Mumble - - - - Submit anonymous statistics to the Mumble project - Zezwalaj na wysyłanie anonimowych statystyk - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>Zezwalaj na wysyłanie anonimowych statystyk.</b><br />Mumble ma małą drużynę deweloperów, która musi się skupić na opcjach, które są jak najbardziej potrzebne. Zezwalając na wysyłanie statystyk pomagasz ustalić nad czym skupić dalszy rozwój aplikacji. - - - - Submit anonymous statistics - Zezwalaj na wysyłanie anonimowych statystyk - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - Nie udało się załadowac biblioteki nakładki. Oznacza to, że: -- brakuje biblioteki w folderze Mumble (mumble_ol.dll) -- jesteś na starszym systemie niż Windows XP SP2 -- nie masz zainstalowanego DirectX 9.0c z Czerwca 2007 - - - - OverlayConfig - - Options - Opcje - - - Position - Pozycja nakładki na ekranie - - - Font - Czcionka - - - Enable Overlay - Włącz nakładkę - - - Enable overlay. - Włącza nakładkę. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - To ustawia czy nakładka jest aktywna, czy nie. Te ustawienia są sprawdzane tylko podczas uruchamiania aplikacji obsługujących D3D9, więc upewnij się czy nakładka jest włączona zanim uruchomisz aplikację.<br />Należy pamiętać że jeżeli uruchomisz aplikację przed włączeniem mumble, lub wyłączysz nakładkę podczas jej działania, to nie ma bezpiecznej metody by zrestartować nakładkę bez ponownego uruchomienia aplikacji. - - - Who to show on the overlay - Kogo pokazywać w nakładce - - - Always Show Self - Pokazuj swój nick na nakładce - - - Always show yourself on overlay. - Ta opcja sprawia, że Mumble zawsze pokazuje twoją nazwę użytkownika na nakładce. - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Ustawia czy zobaczysz swoją nazwę użytkownika na nakładce czy też nie. - - - Show User Textures - Pokazuj tekstury użytkowników zamiast ich nicków - - - Show User custom textures instead of text on the overlay. - Pokazuje tekstury wybrane przez użytkowników zamiast ich nazw użytkownika. -Opcja dostępna tylko, gdy ustawisz teksturę na danym serwerze podczas rejestracji. - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - Używa niestandardowe tekstury użytkowników zamiast ich nazw użytkownika. - - - Grow Left - Do lewej - - - Let overlay grow to the left - Do lewej - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Nakładka stara się pozostać najmniejszą jak tylko może w pozycji, którą ustawiłeś. Ta opcja pozwala nakładce rosnąć w lewo jeśli trzeba. - - - Grow Right - Do prawej - - - Grow Up - Do góry - - - Let overlay grow upwards - Pozwala nakładce rosnąć w górę - - - Grow Down - Do dołu - - - Let overlay grow downwards - Pozwala nakładce rosnąć do dołu - - - X-Position of Overlay - Pozycja X Nakładki - - - This sets the relative X position of the overlay. - Ustawia pozycję X nakładki. - - - Y-Position of Overlay - Pozycja Y Nakładki - - - This sets the relative Y position of the overlay. - Ustawia pozycję Y nakładki. - - - Current Font - Obecna czcionka - - - Set Font - Czcionka - - - Maximum height of names. - Maksymalna wysokość nazw użytkownika. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - Maksymalna wysokość nazw użytkownika na nakładce. - - - Maximum height - Maksymalna wysokość - - - Change - Zmień - - - Color for players - Kolor użytkownika nieaktywnego - - - Color for talking players - Kolor użytkownika aktywnego - - - Color for alt-talking players - Alternatywny kolor użytkownika aktywnego - - - Color for Channels - Kolor kanałów - - - Color for active Channels - Kolor aktywnych kanałów - - - Overlay - Nakładka - - - Show no one - nie pokazuj nikogo - - - Show only talking - pokazuj tylko rozmawiających - - - Show everyone - pokazuj wszystkich - - - Form - Formularz - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - Nakładka stara się pozostać najmniejszą jak tylko może w pozycji, którą ustawiłeś. Ta opcja pozwala nakładce rosnąć w górę jeśli trzeba. - - - Let overlay grow to the right - Pozwala nakładce rosnąć do prawej - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - Nakładka stara się pozostać najmniejszą jak tylko może w pozycji, którą ustawiłeś. Ta opcja pozwala nakładce rosnąć w prawo jeśli trzeba. - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - Nakładka stara się pozostać najmniejszą jak tylko może w pozycji, którą ustawiłeś. Ta opcja pozwala nakładce rosnąć w dół jeśli trzeba. - - - TextLabel - Tekst - - - - PlayerModel - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - Zastąpiłem nie mówi na milczy //Zuko - To jest użytkownik połączony do serwera. Ikona po lewej stronie wskazuje czy użytkownik mówi czy milczy.<br /><img src="skin:talking_on.png" />Mówi<br /><img src="skin:talking_off.png" />Milczy - - - - This is a channel on the server. Only players in the same channel can hear each other. - To jest kanał na serwerze. Tylko użytkownicy znajdujący się na tym samym kanale mogą słyszeć się nawzajem. - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - To są atrybuty jakie użytkownik posiada na serwerze:<br /><img src="skin:authenticated.png" />Uwierzytelnieniony użytkownik<br /><img src="skin:muted_self.png" />Wyciszony mikrofon (przez siebie)<br /><img src="skin:muted_server.png" />Wyciszony mikrofon (przez administratora)<br /><img src="skin:deafened_self.png" />Wyciszone słuchawki (przez użytkownika)<br /><img src="skin:deafened_server.png" />Wyciszone słuchawki (przez administratora)<br />Użytkownik który ma wyciszony mikrofon i/lub słuchawki przez siebie prawdopodobnie odszedł od komputera lub prowadzi inna rozmowę (np. przez telefon).<br />Użytkownik, który ma wyciszony mikrofon i/lub słuchawki przez administratora prawdopodobnie wydawał dziwne dźwięki i denerwował innych przez zo został wyciszony. - - - - Name - Kanał(y) - - - - Flags - Atrybut(y) - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - drag - przeciągnąć a nie przenieść //Zuko - Czy jesteś pewien, że chcesz przeciągnąć ten kanał? - - - - PluginConfig - - - Options - Opcje - - - - - Plugins - Wtyczki - - - - Link to Game and Transmit Position - Połącz z grami i nadawaj pozycję graczy - - - - Enable plugins and transmit positional information - Włącza wtyczki oraz nadaje informacje o pozycjach graczy względem siebie podczas gry. - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - Uaktywnia to wtyczki, które przetwarzają dźwięk w zależności od położenia użytkownika na mapie, dzięki czemu możesz usłyszeć użytkowników ze względu na położenie na mapie. Ta funckja jest dostępna tylko do wybranych gier. - - - - &Reload plugins - &Przeładuj wtyczki - - - - Reloads all plugins - Przeładowuje wszystkie wtyczki - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - Ponownie skanuje i przeładowuje wtyczki. Użyj tej opcji jeśli dodałeś lub zmieniłeś wtyczkę w katalogu <i>plugins</i>. - - - - &About - &O wtyczce - - - - Information about plugin - Informacje o wtyczce - - - - This shows a small information message about the plugin. - Pokazuje krótką informację na temat wtyczki. - - - - &Configure - &Konfiguruj - - - - Show configuration page of plugin - Otwiera okno konfiguracji - - - - This shows the configuration page of the plugin, if any. - Wyświetla okno z konfiguracją wtyczki, jeżeli wtyczka posiadą konfigurację. - - - Mumble - Mumble - - - - Plugin has no configure function. - Wtyczka nie posiada konfiguracji. - - - - Plugin has no about function. - Brak informacji o wtyczce. - - - - Form - Formularz - - - - Plugins - - - %1 lost link. - %1 utracił połączenie. - - - - %1 linked. - %1 połączony. - - - - PortAudioSystem - - - Default Device - Domyślne urządzenie - - - - PulseAudioSystem - - - Default Input - Domyślne wejście - - - - Default Output - Domyślne wyjście - - - - ShortcutActionWidget - - - Unassigned - Nieprzypisany - - - - ShortcutDelegate - - - Unassigned - Nieprzypisany - - - - ShortcutKeyWidget - - - Press Shortcut - Tutaj była za długa fraza //Zuko - Naciśnij klawisz - - - - TextMessage - - - Message to send - Wiadomość do wysłania - - - - Preview - Podgląd - - - Send raw message - Stara wersja - Wyślij wiadomość bez HTML - ja sugeruję ją zastąpić //Zuko - Wyślij nieprzetworzoną wiadomość - - - Disables html formating - Wyłącza formatowanie HTML - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble failed to retrieve version information from the SourceForge server. - Tutaj trzeba było usunąć nazwę własną //Zuko - Nie udało się pobrać informacji o wersji z serwera SourceForge. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - Szczegóły certyfikatu - - - - Certificate chain - Certyfikat - - - - Certificate details - Szczegóły certyfikatu - - - - %1 %2 - %1 %2 - - - - - Common Name: %1 - Nazwa pospolita: %1 - - - - - Organization: %1 - Organizacja: %1 - - - - Subunit: %1 - Pod-jednostka: %1 - - - - - Country: %1 - Kraj: %1 - - - - - Locality: %1 - Lokalizacja: %1 - - - - - State: %1 - Kraj: %1 - - - - Valid from: %1 - Ważne od: %1 - - - - Valid to: %1 - Ważne do: %1 - - - - Serial: %1 - Numer seryjny: %1 - - - - Public Key: %1 bits %2 - Klucz publiczny: %1 bitów %2 - - - - RSA - RSA - - - - DSA - DSA - - - - Digest (MD5): %1 - Odcisk (MD5): %1 - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - Wydany przez: - - - - Unit Name: %1 - Nazwa jednostki: %1 - - - - WASAPISystem - - - Default Device - Urządzenie domyślne - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble.qrc mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble.qrc --- mumble-1.2.3/src/mumble11x/mumble.qrc 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble.qrc 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ - - - resources/mumble.16x16.png - resources/mumble.32x32.png - resources/mumble.48x48.png - resources/mumble.64x64.png - ../../icons/mumble.icns - ../../icons/mumble.osx.png - resources/talking_on.png - resources/talking_alt.png - resources/talking_off.png - resources/deafened_self.png - resources/deafened_server.png - resources/deafened_overlay.png - resources/muted_self.png - resources/muted_server.png - resources/muted_local.png - resources/muted_overlay.png - resources/authenticated.png - resources/channel.png - resources/channel_linked.png - ../../icons/config_basic.png - ../../icons/config_dsound.png - ../../icons/config_msgs.png - ../../icons/config_plugin.png - ../../icons/config_asio.png - ../../icons/config_osd.png - ../../icons/config_network.png - ../../icons/config_shortcuts.png - ../../icons/config_ui.png - ../../icons/config_lcd.png - resources/wb_male.spx - mumble_en.qm - mumble_es.qm - mumble_fr.qm - mumble_de.qm - mumble_it.qm - mumble_ru.qm - mumble_ja.qm - mumble_cs.qm - mumble_pl.qm - mumble_zh_CN.qm - mumble_zh_TW.qm - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_qt.qrc mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_qt.qrc --- mumble-1.2.3/src/mumble11x/mumble_qt.qrc 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_qt.qrc 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ - - - qt_de.qm - qt_es.qm - qt_fr.qm - qt_ru.qm - qt_pl.qm - qt_ja.qm - - diff -Nru mumble-1.2.3/src/mumble11x/mumble.rc mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble.rc --- mumble-1.2.3/src/mumble11x/mumble.rc 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble.rc 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -#include - -IDI_ICON1 ICON DISCARDABLE "..\\..\\icons\\mumble.ico" - -#ifndef DEBUG -#define VER_DEBUG 0L -#else -#define VER_DEBUG VS_FF_DEBUG -#endif - -#ifndef RELEASE_BUILD -#define VER_RELEASE VS_FF_SPECIALBUILD|VS_FF_PRERELEASE -#else -#define VER_RELEASE 0L -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,8,0 - PRODUCTVERSION 1,1,8,0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS (VER_DEBUG|VER_RELEASE) - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_APP - FILESUBTYPE 0L - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - BEGIN - VALUE "CompanyName", "Thorvald Natvig" - VALUE "FileDescription", "Mumble - Low-latency VoIP client" - VALUE "FileVersion", "1.1.8" - VALUE "ProductVersion", "1.1.8" - VALUE "LegalCopyright", "Copyright (C) 2005-2010, Thorvald Natvig " - VALUE "OriginalFilename", "mumble.exe" - VALUE "ProductName", "Mumble" -#ifndef RELEASE_BUILD - VALUE "SpecialBuild", "Snapshot development release" -#endif - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END - END diff -Nru mumble-1.2.3/src/mumble11x/mumble_ru.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_ru.ts --- mumble-1.2.3/src/mumble11x/mumble_ru.ts 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_ru.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,5674 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - Изменить ACL (список контроля доступа) для %1 - - - - Active ACLs - Активные ACL(списки контроля доступа) - - - - Context - Контекст - - - - User/Group - Пользователь/Группа - - - - Permissions - Разрешения - - - - Group - Группа - - - - Members - Члены группы - - - - &Add - &Добавить - - - - &Remove - &Удалить - - - - &Up - &Вверх - - - - &Down - Вн&из - - - - Inherit ACLs - Наследовать ACL(список контроля доступа) - - - - Applies to this channel - Примененные к этому каналу - - - - Applies to sub-channels - Примененные к подканалам - - - - User ID - Идентификатор пользователя - - - - Deny - Отказать - - - - Allow - Разрешить - - - - Remove - Убрать - - - - Inherit - Наследовать - - - - Inheritable - Наследуемый - - - - Inherited - Унаследованный - - - - Add - Добавить - - - - Add to Remove - Добавить к удаленным - - - - &Groups - &Группы - - - - &ACL - &Списки контроля доступа (ACL) - - - &OK - &Ок - - - Accept changes - Принять изменения - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Эта кнопка примет текущие группы/списки ACL и пошлет их на сервер.Заметьте, что если вы по ошибке сняли с себя разрешения на запись, сервер добавит его. - - - &Cancel - Отм&енить - - - Reject changes - Отклонить изменения - - - This button will cancel all changes and closes the dialog without updating the ACLs or groups on the server. - Эта кнопка отменит все изменения и закроет диалоговое окно без обновления списков ACL или групп на сервере. - - - - List of entries - Список вхождений - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics. - Это покажет все активные вхождения на этом канале. Вхождения, наследованные от родительских каналов будут выделены курсивом. - - - - Inherit ACL of parent? - Унаследовать списки ACL от предков? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - Это унаследует либо нет цепочку списков ACL от каналов-предков для этого объекта. Унаследованы будут только вхождения, помеченные у предков как "Применить к подканалам". - - - - Add new entry - Добавить новый - - - - This adds a new entry, initially set with no permissions and applying to all. - Добавляет новое вхождение, по умолчанию без прав доступа иприменяемое ко всем. - - - - Remove entry - Удалить вхождение - - - - This removes the currently selected entry. - Удалит выделенное вхождение. - - - - Move entry up - Переместить выше - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - Перемещает вхождение выше по списку. Так как вхождения упорядочены, это может изменить эффективные привелегии пользователей. Вы не сможете переместить вхождение выше унаследованного, если вы действительно хотите его переместить, вам придется продублировать унаследованое вхождение. - - - - Move entry down - Переместить ниже - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - Перемещает вхождение ниже по списку. Так как вхождения упорядочены, это может изменить эффективные привелегии пользователей. - - - - Entry should apply to this channel. - Entry should apply to this channel - Применять к каналу - - - - This makes the entry apply to this channel. - Применяет вхождение к этому каналу. - - - - Entry should apply to sub-channels. - Применять к подканалам. - - - - This makes the entry apply to sub-channels of this channel. - Применяет вхождение ко всем подканалам этого канала. - - - - Group this entry applies to - Применить к группе - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - Управляет, к какой группе пользователей применять вхождение.<br />Заметьте, что группа оценивается как контекст канала, в котором используется вхождение. Например, по умолчанию список ACL канала Root дает права на <i>Запись</i> группе <i>admin</i>. Если это вхождение унаследуется каналом, даст пользователю права на запись если он принадлежит к группе <i>admin</i> на этом канале, даже если он не принадлежит к группе <i>admin</i> на канале, от которого унаследовали список ACL.<br />Если имя группы начинается с a !, его членство отрицается, а если начинается с a ~, оно оценивается для канала, которому ACL был определен, чем канал, в котором есть активный ACL. Порядок важен; <i>!~in</i> принимается, но <i>~!in</i> нет.<br />Несколько особых предопределенных групп:<br /><b>all</b> - Соответствует всем.<br /><b>auth</b> - Соответствует всем авторизованным пользователям.<br /><b>sub,a,b,c</b> - Пользователи на подканале с минимум <i>a</i> общими предками, а также между <i>b</i> и <i>c</i> каналами в цепочке. Для более подробной информации посетите вебсайт.<br /><b>in</b> - Подойдут пользователи на текущем канале (удобство для <i>sub,0,0,0</i>).<br /><b>out</b> - Соответствует всем пользователям вне канала (удобство для <i>!sub,0,0,0</i>).<br />Заметьте, что вхождение применяется только к пользователю или к группе, а не к обоим. - - - - User this entry applies to - Применять для пользователя - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - Управляет, к какому пользователю применять вхождение. Просто введите имя пользователя и нажмите Enter, чтобы послать запрос на сервер. - - - - Allow %1 - Позволить %1 - - - - Deny %1 - Запретить %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Это дает привелегию на %1. Если привелегия и позволяет, и запрещает, она запрещает.<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - Отбирает привелегию на %1. Если привелегия и позволяет, и запрещает, она запрещает.<br />%2 - - - - List of groups - Список групп - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - Показывает все группы, определенные для канала. Чтобы создать новую группу, просто введите имя и нажмите Enter. - - - - Remove selected group - Удалить выбранную группу - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - Удаляет выбранную группу. Если группа была унаследована, она не уберется из списка, но вся локальная информация о группе будет стерта. - - - - Inherit group members from parent - Унаследовать членов группы от - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - Наследует всех членов группы от предка, если группа отмечена как <i>Наследуемая</i> в родительском канале. - - - - Make group inheritable to sub-channels - Сделать группу наследуемой для подканалов - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - Сделать группу наследуемой для подканалов. Если группа ненаследованная, подканалы все еще свободны для создания новой группы с таким же именем. - - - - Group was inherited from parent channel - Группа была унаследована от родительского канала - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - Показывает, что группа унаследована от канала-родителя. Вы не можете изменить этот флаг, он просто для информации. - - - - Add member to group - Добавить члена группы - - - Type in the name of a player you wish to add to the group and press enter. - Введите имя игрока, которого вы хотите добавить в группу и нажмите Enter. - - - - Remove member from group - Удалить члена группы - - - Type in the name of a player you wish to remove from the group and press enter. - Введите имя игрока, которого вы хотите удалить из группы и нажмите Enter. - - - - Dialog - - - - - Type in the name of a player you wish to add to the group and click Add. - - - - - Type in the name of a player you wish to remove from the group and click Add. - - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - - - - - ALSAAudioInput - - - Opening chosen ALSA Input failed: %1 - - - - - Default ALSA Card - - - - - ALSAAudioOutput - - - Opening chosen ALSA Output failed: %1 - - - - - Default ALSA Card - - - - - ALSAConfig - - Device selection - Выбор устройства - - - Device to use for speakers/headphones - Устройство, используемое как динамики/наушники - - - Input - Ввод - - - Output - Вывод - - - Output Options - Свойства вывода - - - Output Delay - Задержка вывода - - - %1ms - %1мс - - - - ASIOConfig - - - Device selection - Выбор устройства - - - - Capabilities - Возможности - - - - Channels - Каналы - - - - Configure input channels - Настроить каналы ввода - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples "What you hear".<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be "Mic L" while Speaker should be "Mix L" and "Mix R" - Настраивает входные каналы для ASIO. Убедитесь, что выбрали минимум 1 канал как микрофон и динамик. <i>Микрофон</i> должен быть там, куда подсоединен ваш микрофон, и <i>Динамик</i> должен быть каналом, передающим "Что вы слышите".<br />Например, на Audigy 2 ZS, отличным выбором для Микрофона будет "Mic L", в то время, как динамик - "Mix L" и "Mix R" - - - - Device to use for microphone - Устройство для подключения микрофона - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - Выбирает, какое устройство опрашивать. Вам все еще надо опросить устройство и выбрать канал, который будете использовать. - - - - Device - Устройство - - - - &Query - &Запрос - - - - Query selected device - Опросить выбранное устройство - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Опрашивает выбранное устройство поканально. Опасайтесь того, что многие драйвера ASIO не доделаны, и опрос их может вызвать "зависание" приложения или всей системы. - - - - &Configure - Н&астроить - - - - Configure selected device - Настроить выбранное устройство - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - Настраивает выбранное устройство. Опасайтесь того, что многие драйвера ASIO не доделаны, и опрос их может вызвать "зависание" приложения или всей системы. - - - - Driver name - Имя привода - - - Buffersize - Размер буфера - - - - Microphone - Микрофон - - - - <- - <- - - - - -> - -> - - - - Unused - Не используется - - - - Speakers - Динамики - - - %1 (ver %2) - %1 (версия %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 мс -> %2 мс (%3 мс разрешение) %4Гц - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 мс -> %2 мс (%3 мс разрешение) %4Гц -- Не используемо - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - Mumble - Mumble - - - - - ASIO Initialization failed: %1 - Ошибка инициализации ASIO: %1 - - - - - Failed to instantiate ASIO driver - Невозможно установить драйвер ASIO - - - - ASIO - ASIO - - - - Form - - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - Mumble - Mumble - - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - Вам нужно выбрать хотя бы одно устройство для микрофона и одно для динамика для использования ASIO. Если вам нужно только протестировать микрофон, используйет DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - Невозможно открыть устройство ASIO. Входных данных не получено. - - - - AboutDialog - - <h3>Mumble v1.0.0</h3><p>Copyright 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - <h3>Mumble v1.0.0</h3><p>Все права принадлежат 2005-2006 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p> -Русский перевод Khazov Nick<br />m2k3d0n@users.sourceforge.net</p><p><b>Программа для голосового общения игроков</b></p><p><tt>http://mumble.sourceforge.net/</tt></p> - - - - &About Mumble - &О Mumble - - - - &License - Л&ицензия - - - - OK - ОК - - - - About Mumble - - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - - AboutSpeexDialog - - <h3>About Speex</h3><p><tt>http://www.speex.org/</tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>О Speex</h3><p><tt>http://www.speex.org/</tt></p><p>Эта программа использует Speex версии %1</p><p>Speex используется для подавления эха, шумов<br />фильтрации, определения голосовой активности и сжатия<br />речи.</p> - - - - OK - ОК - - - - About Speex - - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - - - - - AudioConfigDialog - - Interfaces - Интерфейсы - - - Transmission - Передача - - - Compression - Сжатие - - - Jitter Buffer - Буфер Jitter - - - Input - Ввод - - - Input method for audio - Метод ввода для аудио - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Этот метод ввода используется для аудио.</b><br />Скорее всего вы захотите использовать DirectSound. - - - Output - Вывод - - - Output method for audio - Мытод вывода для аудио - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Этот метод вывода используется для аудио.</b><br />Скорее всего вы захотите использовать DirectSound. - - - Continuous - Продолжительный - - - Voice Activity - Голосовая активность - - - Push To Talk - Нажмите для разговора - - - Transmit - Передать - - - When to transmit your speech - Когда передавать вашу речь - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Устанавливает, когда передавать речь.</b><br /><i>Постоянно</i> - Все время<br /><i>При активность голоса</i> - Когда вы говорите четко.<br /><i>Нажмите для разговора</i> - Когда вы зажимаете горячую клавишу, установленную в <i>Ярлыках</i>. - - - Voice Hold - Задержка голоса - - - How long to keep transmitting after silence - Как долго передавать после тишины - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Выбирает, как долго после паузы в речи продолжать передачу.</b><br />Установите ее больше, если у вас много пауз в речи (можно увидеть по часто мигающей иконке голоса рядом с вашим именем).<br />Имеет смысл только когда используется с передачей по активности голоса. - - - Audio per packet - Аудио на пакет - - - How many audio frames to send per packet - Как много аудио фрагментов посылать в пакете - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Выбирает, сколько аудиофрагментов помещать в пакет.</b><br />Увеличение ее увеличит задержку голоса, но также уменьшит требования к толщине канала связи. - - - Use TCP mode - Использовать режим TCP - - - Use TCP Compatibility mode - Включить режим TCP совместимости - - - <b>Enable TCP Compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>Включить режим TCP совместимости</b>.<br />Заставит Mumble использовать только TCP при связи с сервером. Это увеличит загрузку, вызовет потерю пакетов, что приведет к существенным паузам в общении, поэтому следует его использовать только в случае, если вы не можете использовать режим по умолчанию (применяющий UDP для голоса и TCP для контроля). - - - Automatic Reconnect - Автоматическое восстановление связи - - - Reconnect when disconnected - Восстановление связи при обрыве - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Восстановить связь при обрыве</b>.<br />Mumble будет пытаться автоматически восстановить связь через 10 в случае обрыва связи с сервером. - - - Maximum bandwidth used for sent audio - Максимальная скорость, используемая для посылки аудио - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 90% of this overhead). - <b>Показывает пиковую загрузку посланных сигналов.</b><br />Показывает пиковое значение скорости передачи данных от вашего компьютера. Битрейт аудио - максимальный битрейт (по принятым сокращениям, VBR) только для аудиоданных. Позиция - битрейт, используемый для информации о позиции. Загрузка - раскадровка и заголовки IP пакетов (IP и UDP - 90% этой загрузки). - - - Outgoing Bitrate - Исходящий битрейт - - - Quality - Качество - - - Quality of compression (peak bandwidth) - Качество сжатия (пиковая передача) - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Устанавливает качество сжатия.</b><br />Определяет, какую загрузку канала Mumble разрешено использовать для исходящего аудио. - - - Complexity - Сложность - - - Complexity of compression (CPU) - Сложность сжатия (ЦП) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Устанавливает сложность сжатия.</b><br />Определяет, сколько мощности ЦП Mumble разрешено использовать для увеличения качества передаваемого голоса. Установка выше 5 даст только предельный прирост. - - - Amp - Усиление - - - Maximum amplification of input sound - Максимальное усиление входящего звука - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Максимальное усиление входного голоса.</b><br />Mumble нормализует входную громкость до сжатия, эта опция устанавливает, на сколько можно его усилить.<br />Текущий уровень постоянно обновляется на основе текущего образца речи, но никогда не будет выше установленного здесь уровня.<br />Если уровень <i>Громкости микрофона</i> аудиостатистики держится на уровне 100%, вы можете установить его на 2.0 или выше, но если, как многие люди, вы не можете достичь 100%, установите его на чуть более высоком уровне.<br />В идеале, установите его так, чтобы <i>Громкость микрофона * Фактор усиления >= 100</i>, даже если вы говорите слишком мягко.<br /><br />Заметьте, что ничего плохого не случится, если вы установите его на максимум, но Mumble начнет подбирать другие переговоры, если вы оставите его на автоматической настройке на данном уровне. - - - Default Jitter Buffer - Буфер Jitter по умолчанию - - - How long to prebuffer on first packet - Как долго буферизовать первый пакет - - - <b>This sets the default buffer size for the jitter buffer</b>.<br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the default buffer size to use on the first packet to arrive from a new speaker, or when a speaker using Voice Activity or Push-To-Talk just started talking again. If the start of sentences you hear is very jittery, increase this value. - <b>Устанавливает размер буфера Jitter по умолчанию</b>.<br />Все входящее аудио буферизуется, и буфер jitter постоянно пытается послать буфер в минимально поддерживаемый вашей сетью, так что задержка может быть как можно меньшей. Устанавливает размер буфера по умолчанию для использования при приходе первого пакета от нового говорящего, или когда говорящий использует Голосовую активность или Нажмите для разговора и только начал говорить. Если начало предложений, которые вы слишите, неразборчивы, увеличьте это значение. - - - Basic Audio - Основное аудио - - - %1 ms - %1 мс - - - %1s - %1 с - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1кбит/с (Аудио %2, Позиция %4, Загрузка %3) - - - None - Нет - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Показывает пиковую загрузку посланных сигналов.</b><br />Показывает пиковое значение скорости передачи данных от вашего компьютера. Битрейт аудио - максимальный битрейт (по принятым сокращениям, VBR) только для аудиоданных. Позиция - битрейт, используемый для информации о позиции. Загрузка - раскадровка и заголовки IP пакетов (IP и UDP - 90% этой загрузки). {75%?} - - - Volume - Громкость - - - - AudioInput - - - Form - - - - - Interface - - - - - System - - - - - Input method for audio - Метод ввода для аудио - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Этот метод ввода используется для аудио.</b><br />Скорее всего вы захотите использовать DirectSound. - - - - Device - Устройство - - - - Input device for audio - Output method for audio - Мытод вывода для аудио - - - - <b>This is the input device to use for audio.</b> - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Этот метод вывода используется для аудио.</b><br />Скорее всего вы захотите использовать DirectSound. - - - - Cancel Echo - - - - - Transmission - Передача - - - - &Transmit - - - - - When to transmit your speech - Когда передавать вашу речь - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>Устанавливает, когда передавать речь.</b><br /><i>Постоянно</i> - Все время<br /><i>При активность голоса</i> - Когда вы говорите четко.<br /><i>Нажмите для разговора</i> - Когда вы зажимаете горячую клавишу, установленную в <i>Ярлыках</i>. - - - - DoublePush Time - - - - - TextLabel - - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - - - - - PTT Audio cue - - - - - Use SNR based speech detection - - - - - Signal to Noise - - - - - Use Amplitude based speech detection. - - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - - - - - Amplitude - - - - - Voice &Hold - - - - - How long to keep transmitting after silence - Как долго передавать после тишины - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>Выбирает, как долго после паузы в речи продолжать передачу.</b><br />Установите ее больше, если у вас много пауз в речи (можно увидеть по часто мигающей иконке голоса рядом с вашим именем).<br />Имеет смысл только когда используется с передачей по активности голоса. - - - - Silence Below - - - - - Signal values below this counts as silence - - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - - - - - Speech Above - - - - - Signal values above this count as voice - - - - - Compression - Сжатие - - - - &Quality - - - - - Quality of compression (peak bandwidth) - Качество сжатия (пиковая передача) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>Устанавливает качество сжатия.</b><br />Определяет, какую загрузку канала Mumble разрешено использовать для исходящего аудио. - - - Complexity of compression (CPU) - Сложность сжатия (ЦП) - - - <b>This sets the complexity of compression.</b><br />This determines how much CPU Mumble is allowed to use to increase transmitted voice quality. Settings above 5 give only marginal gain. - <b>Устанавливает сложность сжатия.</b><br />Определяет, сколько мощности ЦП Mumble разрешено использовать для увеличения качества передаваемого голоса. Установка выше 5 даст только предельный прирост. - - - - Audio per packet - Аудио на пакет - - - - How many audio frames to send per packet - Как много аудио фрагментов посылать в пакете - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>Выбирает, сколько аудиофрагментов помещать в пакет.</b><br />Увеличение ее увеличит задержку голоса, но также уменьшит требования к толщине канала связи. - - - Maximum bandwidth used for sent audio - Максимальная скорость, используемая для посылки аудио - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>Показывает пиковую загрузку посланных сигналов.</b><br />Показывает пиковое значение скорости передачи данных от вашего компьютера. Битрейт аудио - максимальный битрейт (по принятым сокращениям, VBR) только для аудиоданных. Позиция - битрейт, используемый для информации о позиции. Загрузка - раскадровка и заголовки IP пакетов (IP и UDP - 90% этой загрузки). {75%?} - - - - Audio Processing - - - - - Noise Suppression - - - - - Noise suppression - - - - - Amplification - - - - - Maximum amplification of input sound - Максимальное усиление входящего звука - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>Максимальное усиление входного голоса.</b><br />Mumble нормализует входную громкость до сжатия, эта опция устанавливает, на сколько можно его усилить.<br />Текущий уровень постоянно обновляется на основе текущего образца речи, но никогда не будет выше установленного здесь уровня.<br />Если уровень <i>Громкости микрофона</i> аудиостатистики держится на уровне 100%, вы можете установить его на 2.0 или выше, но если, как многие люди, вы не можете достичь 100%, установите его на чуть более высоком уровне.<br />В идеале, установите его так, чтобы <i>Громкость микрофона * Фактор усиления >= 100</i>, даже если вы говорите слишком мягко.<br /><br />Заметьте, что ничего плохого не случится, если вы установите его на максимум, но Mumble начнет подбирать другие переговоры, если вы оставите его на автоматической настройке на данном уровне. - - - - Current speech detection chance - - - - - Audible audio cue when push-to-talk is activated or deactivated - - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - Idle AutoMute - - - - - How long to remain idle before auto-mute. - - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - - - - - Maximum bandwidth used for sending audio - - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - - - - - AudioInputDialog - - - Continuous - Продолжительный - - - - Voice Activity - Голосовая активность - - - - Push To Talk - Нажмите для разговора - - - - Audio Input - - - - - - %1 ms - %1 мс - - - - - Off - - - - - %1 s - %1мс {1 ?} - - - - -%1 dB - - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1кбит/с (Аудио %2, Позиция %4, Загрузка %3) - - - - %1 min - - - - - AudioOutput - - - Form - - - - - Interface - - - - - System - - - - - Output method for audio - Input method for audio - Метод ввода для аудио - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Этот метод ввода используется для аудио.</b><br />Скорее всего вы захотите использовать DirectSound. - - - - Device - Устройство - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - Positional Audio - Позиционированное аудио - - - - Audio Output - - - - - Default &Jitter Buffer - - - - - Safety margin for jitter buffer - - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - - - - - TextLabel - - - - - Volume - Громкость - - - - Volume of incoming speech - - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - - - - - Output Delay - Задержка вывода - - - - Amount of data to buffer - - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - - MinDistance - МинДистанция - - - Minimum distance to player before sound decreases - Минимальное расстояние до игрока до уменьшения звука - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Устанавливает минимальное расстояние для расчета звука. Громкость речи других игроков не уменьшится до тех пор, пока они по крайней мере на таком расстоянии от вас. - - - MaxDistance - МаксДистанция - - - Maximum distance, beyond which sound won't decrease - Максимальное расстояние, больше которого звук не уменьшится - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Устанавливает максимальное расстояния для рассчета звука. Даже дальше от вас, громкость других игроков больше не уменьшится. - - - RollOff - Откат - - - - Factor for sound volume decrease - Фактор уменьшения громкости звука - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Как быстро будет падать громкость звука после достижения определеной дистанции. Обычно (1.0) - громкость уменьшается вполовину при удвоении расстояния. Увеличение этого значения обозначает, что громкость падает быстрее, уменьшение - замедление падения. - - - - Bloom - - - - - Loopback Test - - - - - Delay Variance - - - - - Variance in packet latency - - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - - - - - Packet Loss - - - - - Packet loss for loopback mode - - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - - - - - &Loopback - - - - - Desired loopback mode - - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - - - - - Factor for sound volume increase - - - - - The connected "speakers" are actually headphones. - - - - - Minimum Distance - - - - - Minimum distance to player before sound volume decreases - - - - - Maximum Distance - - - - - Maximum distance, beyond which speech volume won't decrease - - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - - - - - Minimum Volume - - - - - What should the volume be at the maximum distance? - - - - - How much should sound volume increase for sources that are really close? - - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - - - - - Headphones - - - - - Other Applications - - - - - Volume of other applications during speech - - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - - - - - AudioOutputDialog - - - None - Нет - - - - Local - - - - - Server - - - - - Audio Output - - - - - - %1 ms - %1 мс - - - - - - - - %1% - %1% - - - - %1ms - %1мс - - - - - %1m - %1м - - - %1 - %1 - - - - AudioStats - - - Peak microphone level - Пиковый уровень микрофона - - - - Peak speaker level - Пиковый уровень динамика - - - - Peak clean level - Пиковый уровень очистки - - - Microphone loudness - Громкость микрофона - - - Mic Signal-To-Noise - Сигнал-шум Микрофона - - - - Speech Probability - Вероятность речи - - - Audio bitrate - Битрейт аудио - - - - Peak power in last frame - Пиковая мощность в последнем фрагменте - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Loudness</b> instead, which is much more steady and disregards outliers. - Показывает пиковую мощность в последнем фрагменте (20 мс), и измеряется также, как и "входная мощность". Пожалуйста, оставьте ее и посмотрите на <b>Громкость</b>, которая более устойчива и не пренебрегается. - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - Показывает пиковую мощность в последнем фрагменте (20 мс) динамиков. Пока вы используете мультиканальный метод проб (такой как ASIO),настроенный на каналы динамика, она будет равна 0. Если у вас они так сконфигурированы, все еще будет отображаться 0, пока вы будете прослушивать звук из других программ, ваши настройки не будут работать. - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other players with echoes. - Показывает пиковую мощность в последнем фрагменте (20 мс) после всех обработок. В идеале, должна быть -96 dB когда вы не разговариваете. На самом деле, звуковая программа примет -60 dB, мы можете с большой вероятностью увидеть -20 dB. Когда вы говорите, его следует поднять до уровня от -5 до -10 dB.<br />Если вы используете подавление эха, и оно поднимается выше -15 dB когда вы не говорите, ваши настройки не работают, и вы будете надоедать другим своим эхом. - - - - How close the current input level is to ideal - Как близок текущий входной уровень к идеалу - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality - Как близок текущий входной уровень к идеалу. Чтобы приспособить уровень микрофона, откройте любую программу, которую вы используете для приспособления громкости записи, и посмотрите на значение во время разговора.<br /><b>Говорите громко, как будто от досады, когда вас только что подстрелил нуб.</b><br />Подгоняйте громкость пока это значение не приблизится к 100%, но убедитесь, что оно не выше. Если оно заходит выше, вы будто обрезаете часть своей речи, что понизит качество звука - - - - Signal-To-Noise ratio from the microphone - Соотношение Сигнал-шум микрофона - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - Отношение Сигнал-шум (SNR) микрофона в последнем фрагменте (20 мс). Показывает, насколько чист голос по сравнению с шумом.<br />Если значение ниже 1.0, в сигнале больше шума, нежели голоса, и поэтому ухудшается качество.<br />Верхнего предела не существует, но не ожидайте увидеть выше 40-50 без студии звукозаписи. - - - - Probability of speech - Вероятность речи - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - Вероятность того, что последний фрагмент (20 мс) был речью, а не шумом.<br />Передача голосовой активности зависит от верности этого. Фишка в том, что середина предложения всегда распознается как речь; проблема в паузах между словами и началом разговора. Трудно отделить кашель от слова, начинающегося на 'х'.<br />Если это выделено жирным шрифтом, значит Mumble сейчас передает (если вы подключены). - - - - Bitrate of last frame - Битрейт последнего фрагмента - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. To adjust the peak bitrate, adjust <b>Compression Complexity</b> in the Settings dialog. - Аудио битрейт последнего сжатого фрагмента (20 мс), и поэтому оно может варьироваться, как и VBR применительно к качеству. Чтобы приспособить пиковый битрейт, приспособьте <b>Сложность сжатия</b> в диалоге настроек. - - - - Power spectrum of input signal and noise estimate - Мощностной спектр входного сигнала и оценка шума - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - Показывает мощностной спектр текущего входного сигнала (красная линия) и текущая оценка шума (выполнена синим).<br />Все амплитуды умножены на 30, чтобы показать интересные части (на сколько больше сигнала, чем шума представлено в каждом отрезке).<br />Это только если вы интересуетесь точными условиями шума вашего микрофона. При хороших условиях, это будет всего лишь как крошечный синий отрезок внизу. Если синего на графике более половины, у вас серьезные проблемы с шумом среды. - - - - Weights of the echo canceller - Значения подавителя эха - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - Отображает значение подавителя эха, со временем растущего вниз и увеличением частоты вправо.<br />В идеале, должен быть черным, отображая, что эха нет. В общем, у вас будут 1 или несколько горизонтальных полосок синеватого цвета, отображая время задержки эха. Вы должны увидеть значения в реальном времени.<br />Заметьте пожалуйста, что если вы не отключите эхо, вы не увидите здесь полезной информации. Запустите музыку, и все должно нормализоваться. <br />Вы можете выбрать просмотр реальных или воображаемых частей доменно-частотных значений, или наоборот высчитанные модуль и фазу. Наиболее применимым из них будут, скорее всего модуль, который является амплитудой эха, и показывает, сколько сигнала было вырезано за промежуток времени. Другие режимы просмотра более полезны для людей, желающих настроить алгоритмы глушения эха.<br />Пожалуйста, заметьте: Если картина в целом обширно варьируется в режиме модулей, подавитель эха не модет найти никакого соответствия между двумя входными источниками (динамиками и микрофоном). Или у вас очень долгая задержка эха, или один из входных источников настроен неправильно. - - - Mumble - Mumble - - - - Audio Statistics - - - - - Input Levels - - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - - Signal Analysis - - - - - Microphone power - - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - - - - - Configuration feedback - - - - - Current audio bitrate - - - - - DoublePush interval - - - - - Speech Detection - - - - - Current speech detection chance - - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - - - - - Signal and noise power spectrum - - - - - Echo Analysis - - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - - - - - Introduction - - - - - Welcome to the Mumble Audio Wizard - - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - - - - - Finished - - - - - Enjoy using Mumble - - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - - - - - Device selection - Выбор устройства - - - - Selecting the input and output device to use with Mumble. - - - - - Input device - - - - - This is the device your microphone is connected to. - - - - - - System - - - - - Input method for audio - Метод ввода для аудио - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>Этот метод ввода используется для аудио.</b><br />Скорее всего вы захотите использовать DirectSound. - - - - - Device - Устройство - - - - Input device to use - - - - - <b>Selects which sound card to use for audio input.</b> - - - - - Output device - - - - - This is the device your speakers or headphones are connected to. - - - - - Output method for audio - Мытод вывода для аудио - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - - - - - Output device to use - - - - - <b>Selects which sound card to use for audio Output.</b> - - - - - Volume tuning - - - - - Tuning microphone hardware volume to optimal settings. - - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - - - - - Voice Activity Detection - - - - - Letting Mumble figure out when you're talking and when you're silent. - - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - - - - - Raw amplitude from input - - - - - Signal-To-Noise ratio - - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - - - - - Device tuning - - - - - Changing hardware output delays to their minimum value. - - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - - - - - Amount of data to buffer. - - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - - - - - %1ms - %1мс - - - - %1 s - %1мс {1 ?} - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - - - - - Audio path is %1ms long. - - - - - Audio path cannot be determined. Input not recognized. - - - - - Use echo cancellation - - - - - Cancel echo from headset or speakers. - - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - - - - - Enable positional audio - - - - - Allows positioning of sound. - - - - - This allows Mumble to use positional audio to place voices. - - - - - Positional Audio - Позиционированное аудио - - - - Adjusting attenuation of positional audio. - - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - - - - - Use headphones - - - - - Use headphones instead of speakers. - - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - - - - - Submit anonymous statistics to the Mumble project - - - - - Push To Talk: - - - - - BanEditor - - - Mumble - Edit Bans - Mumble - изменить баны - - - - &Add - &Добавить - - - - &Update - &Обновить - - - - &Remove - &Удалить - - - &OK - О&к - - - Accept changes - Принять изменения - - - This button will accept current groups/ACLs and send them to the server. Note that if you mistakenly remove write permission from yourself, the server will add it. - Данная кнопка примет текущие группы/списки ACL и пошлет их серверу. Заметьте, что если вы по ошибке уберете права на запись с себя, сервер добавит их. - - - &Cancel - Отм&ена - - - Reject changes - Отменяет изменения - - - This button will cancels all changes and closes the dialog without updating the ACLs or groups on the server. - Данная кнопка отменит все изменения и закроет окно без обновления списков ACL или групп на сервере. - - - - 0.0.0.0 - - - - - &Address - - - - - &Mask - - - - - ChanACL - - - W - З - - - - T - Пер - - - - E - В - - - - S - Р - - - - A - А - - - - M - Г - - - - K - П - - - - C - Сзд - - - - L - Св - - - - None - Нет - - - Write - Запись - - - - Traverse - Пересекать - - - - Enter - Вход - - - - Speak - Разговор - - - - AltSpeak - Альтернативный разговор - - - - Mute/Deafen - Глушить - - - - Move/Kick - Переместить/выкинуть - - - - Make channel - Создать канал - - - - Link channel - Связать канал - - - - This represents no privileges. - Представляет отсутствие привелегий. - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - Предоставляет полный доступ к каналу, веключая возможность изменять информацию о группах и ACL. Эта привелегия включает все привелегии. - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - Предоставляет разрешение пересекать канал. Если у пользователя нет такой привилегии, он никак не сможет получить доступ к каналу и подканалам, независимо от разрешений подканалов. - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - Предоставляет разрешение входить на канал. Если у канала иерархическая структура, вы можете дать каждому право пересекать канал, но ограничивать Вход в корне вашей иерархии. - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - Предоставляет разрешение говорить на канале. Пользователи без этой привелегии будут заглушены сервером, и неспособны будут говорить, пока не получат разрешение от кого-то, имеющего соответствующие привелегии. - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - Преставляет разрешение говорить на канале с ослабленной речью. Работает также, как а привелегия <i>говорить</i>, но применяется к пакетам, с зажатой кнопкой Нажмите чтобы говорить - переменно. Может использоваться для передачи к иерархии каналов без связи. - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - Предоставляет привелегии заглушать других игроков. Будучи заглушенным, игрок останется заглушенным пока не будет разглушен другим привелигериванным игроком или не переподключится к серверу. - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - Предоставляет разрешение перемещать игрока на другие каналы или выкидывать его с сервера. Чтобы действительно переместить игрока, игрок должен обладать привелегиями Переместить/Выкинуть на сервере назначения, или игрок должен быть допущен ко входу на сервер. Игроки с этой привелегией могут перемещать игроков на каналы, входить на которые у пользователя нет разрешения. - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - Предоставляет разрешение создавать подканалы. Игрок, создающий подканал, будет добавлен в группу администраторов подканала. - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - Предоставляет привелегию связывать каналы. Игроки на связанных каналах могут слышат друг друга, также, как и говорящий игрок имеет право <i>говорить</i> на канале слушающего. Вы должны связать привелегии на обоих каналах, чтобы создать связь, но на другом канале, чтобы удалить ее. - - - - Write ACL - - - - - ClientPlayer - - - Authenticated - - - - - Muted (server) - - - - - Deafened (server) - - - - - Local Mute - - - - - Muted (self) - - - - - Deafened (self) - - - - - ConfigDialog - - - Mumble Configuration - Настройки Mumble - - - &OK - &Ок - - - - Accept changes - Принять изменения - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - Кнопка примет текущие настройки и вернется в приложении.<br />Настройки будут сохранены на диск, когда вы выйдете из приложения. - - - &Cancel - &Отмена - - - - Reject changes - Отменить изменения - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - Отменит все изменения и вернется в приложение.<br />Настройки будут сброшены до предыдущих значений. - - - &Apply - &Применить - - - - Apply changes - Применить изменения - - - - This button will immediately apply all changes. - Немедленно применяет все изменения. - - - - Undo changes for current page - - - - - This button will revert any changes done on the current page to the most recent applied settings. - - - - - Restore defaults for current page - - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - - Advanced - - - - - ConnectDialog - - &Name - &Имя - - - - A&ddress - А&дрес - - - - &Port - &Порт - - - - &Username - Имя п&ользователя - - - - &Password - П&ароль - - - - &Connect - &Связаться - - - - Cancel - Отмена - - - - &Add - &Добавить - - - - &Remove - &Удалить - - - - &Custom Servers - - - - - Server &Browser - - - - Name - Имя - - - - Address - - - - - URL - - - - - C&opy to custom - - - - - &View Webpage - - - - - Connecting to %1 - - - - - Enter username - - - - Mumble - Mumble - - - - Failed to fetch server list - - - - - &Label - - - - - Label - - - - - Unknown - - - - - -Unnamed entry- - - - - - Mumble Server Connect - - - - - &Cancel - - - - - - New - - - - - - Add - Добавить - - - - Update - - - - - CoreAudioSystem - - - Default Device - - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - Mumble - Mumble - - - Opening chosen DirectSound Input failed. No microphone capture will be done. - Открытие выбранного входа DirectSound невозможно. Ввод с микрофона неосуществим. - - - - Opening chosen DirectSound Input failed. Default device will be used. - Открытие выбранного входа DirectSound невозможно. Будет использовано устройство по умолчанию. - - - - Default DirectSound Voice Input - Голосовой вход DirectSound по умолчанию - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - - - - - Lost DirectSound input device. - - - - - DXAudioOutput - - Mumble - Mumble - - - - Opening chosen DirectSound Output failed. No audio will be heard. - Открытие выбранного выхода DirectSound невозможно. Вы не услышите звука. - - - - Opening chosen DirectSound Output failed. Default device will be used. - Открытие выбранного выхода DirectSound невозможно. Будет использовано устройство по умолчанию. - - - - Default DirectSound Voice Output - Голосовой выход DirectSound по умолчанию - - - - Lost DirectSound output device. - - - - - DXConfigDialog - - Default DirectSound Voice Input - Голосовой вход DirectSound по умолчанию - - - Default DirectSound Voice Output - Голосовой выход DirectSound по умолчанию - - - Device selection - Выбор устройства - - - Device to use for microphone - Устройство, используемое как микрофон - - - This sets the input device to use, which is where you have connected the microphone. - Устанавливает используемое устройство ввода, куда вы подсоединили микрофон. - - - Input - Ввод - - - Device to use for speakers/headphones - Устройство, используемое как динамики/наушники - - - This sets the output device to use, which is where you have connected your speakers or your headset. - Устанавливает используемое устройство вывода, куда вы подсоединили динамики или наушники. - - - Output - Вывод - - - Output Options - Свойства вывода - - - Output Delay - Задержка вывода - - - Amount of data to buffer for DirectSound - Количество данных буфера для DirectSound - - - This sets the amount of data to prebuffer in the DirectSound buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - Устанавливает размер данных для буферизации в буфере DirectSound. Экспериментируйте с различными значениями и установите его на наименьшее, которое не вызывает быстрого ухудшения звука. - - - Positional Audio - Позиционированное аудио - - - None - Нет - - - Panning - Размытие - - - Light HRTF - Легкий HRTF - - - Full HRTF - Полный HRTF - - - 3D Sound Algorithm - Алгоритм 3D звучания - - - This sets what 3D Sound algorithm to use.<br /><b>None</b> - Disable 3D Sound (least CPU).<br /><b>Panning</b> - Just use stereo panning (some CPU).<br /><b>Light/Full HRTF</b> - Head-Related Transfer Functions enabled. This may use a small amount of CPU.<br />Note that if you have a soundcard with <i>hardware</i> 3D processing, HRTF processing will be done on the soundcard and will use practically no processing power. - Устанавливает, какой алгоритм 3D звучания использовать.<br /><b>Нет</b> - Выключить 3D Звучание (наименьшая нагрузка на ЦП).<br /><b>Размытие</b> - Просто ипсользоватьб стьерео размытие (небольшая загрузка ЦП).<br /><b>Легкое/Полное HRTF</b> - Включает Направленные функции передачи. Может немного загружать ЦП.<br />Заметьте, что если ваша звуковая карта поддерживает <i>аппаратную</i> обработку 3D, обработка HRTF будет осуществлятся практически без использования ЦП. - - - Method - Метод - - - MinDistance - МинДистанция - - - Minimum distance to player before sound decreases - Минимальное расстояние до игрока до уменьшения звука - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - Устанавливает минимальное расстояние для расчета звука. Громкость речи других игроков не уменьшится до тех пор, пока они по крайней мере на таком расстоянии от вас. - - - MaxDistance - МаксДистанция - - - Maximum distance, beyond which sound won't decrease - Максимальное расстояние, больше которого звук не уменьшится - - - This sets the maximum distance for sound calculations. When farther away than this, other players' sound volume will not decrease any more. - Устанавливает максимальное расстояния для рассчета звука. Даже дальше от вас, громкость других игроков больше не уменьшится. - - - RollOff - Откат - - - Factor for sound volume decrease - Фактор уменьшения громкости звука - - - How fast should sound volume drop when passing beyond the minimum distance. The normal (1.0) is that sound volume halves each time the distance doubles. Increasing this value means sound volume drops faster, while decreasing it means it drops slower. - Как быстро будет падать громкость звука после достижения определеной дистанции. Обычно (1.0) - громкость уменьшается вполовину при удвоении расстояния. Увеличение этого значения обозначает, что громкость падает быстрее, уменьшение - замедление падения. - - - DirectSound - DirectSound - - - %1ms - %1мс - - - %1m - %1м - - - %1 - %1 - - - Players more than %1 meters away have %2% intensity - Игроки дальше, чем %1 метров дальше будут слышать сигнал %2% интенсивности - - - - Database - - Mumble - Mumble - - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble не удалось инициализировать базу данных ни в -одном из доступных мест. - - - - DirectInputKeyWidget - - Press Shortcut - Нажмите ярлык - - - - GlobalShortcut - - - Shortcuts - Ярлыки - - - - List of configured shortcuts - - - - - Function - Функция - - - - Shortcut - Ярлык - - - - Suppress - - - - - Add new shortcut - - - - - This will add a new global shortcut - - - - - &Add - &Добавить - - - - Remove selected shortcut - - - - - This will permanently remove a selected shortcut. - - - - - &Remove - &Удалить - - - - GlobalShortcutConfig - - - Shortcuts - Ярлыки - - - Function - Функция - - - Shortcut - Ярлык - - - Shortcut bound to %1. - Ярлык указывает на %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Этот глобальный ярлык указывает на %1</b><br />Щелкните на этом поле и затем на выбренной клавише/сочетании клавиш для применения. Дважды кликните для очистки. - - - - Shortcut button combination. - - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - - - - - Suppress keys from other applications - - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - - - - - GlobalShortcutWinConfig - - Shortcuts - Ярлыки - - - Function - Функция - - - Shortcut - Ярлык - - - Shortcut bound to %1. - Ярлык указывает на %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key/button combo to rebind. Double-click to clear. - <b>Этот глобальный ярлык указывает на %1</b><br />Щелкните на этом поле и затем на выбренной клавише/сочетании клавиш для применения. Дважды кликните для очистки. - - - - GlobalShortcutX - - - Mouse %1 - - - - - GlobalShortcutXConfig - - Shortcuts - Ярлыки - - - Function - Функция - - - Shortcut - Ярлык - - - Shortcut bound to %1. - Ярлык указывает на %1. - - - <b>This is the global shortcut bound to %1</b><br />Click this field and then the desired key combo to rebind. Double-click to clear. - <b>Этот глобальный ярлык указывает на %1</b><br />Щелкните на этом поле и затем на выбренной клавише/сочетании клавиш для применения. Дважды кликните для очистки. - - - - LCD - - - Not connected - - - - - LCDConfig - - - Graphic - - - - - Character - - - - - Enable this device - - - - - LCD - - - - - Form - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - - - - - Name - Имя - - - - Type - - - - - Size - - - - - Enabled - - - - - Views - - - - - Minimum Column Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - - - - - Splitter Width - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - Отладка - - - - Critical - Критичный - - - - Warning - Предупреждение - - - - Information - Информация - - - - Server Connected - Сервер подключен - - - - Server Disconnected - Сервер отключен - - - - Player Joined Server - Игнрок присоединился к серверу - - - - Player Left Server - Игрок покинул сервер - - - - Player kicked (you or by you) - Игрок выброшен (Вы или Вами) - - - - Player kicked - Игрок выброшен - - - - You self-muted/deafened - Вы заглушили сами себя - - - - Other self-muted/deafened - Другой игрок заглушил сам себя - - - - Player muted (you) - Игрок заглушил вас - - - - Player muted (by you) - Вы заглушили игрока - - - - Player muted (other) - Игрок заглушен (другим) - - - - Player Joined Channel - Игрок присоединился к каналу - - - - Player Left Channel - Игрок покинул канал - - - - Permission Denied - Доступ запрещен - - - - Text Message - - - - [%2] %1 - [%2] %1 - - - - LogConfig - - - Toggle console for %1 events - - - - - Toggle pop-up notifications for %1 events - - - - - Toggle Text-To-Speech for %1 events - - - - - Click here to toggle sound notification for %1 events - - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - - - - - Choose sound file - - - - - Invalid sound file - - - - - The file '%1' does not exist or is not a valid speex file. - - - - - Messages - Сообщения - - - - Console - Консоль - - - TTS - Текст в речь - - - Enable console for %1 - Включить консоль для %1 - - - Enable Text-To-Speech for %1 - Включить преобразователь текста в речь для %1 - - - - Text To Speech - Текст в речь - - - - Volume - Громкость - - - - Volume of Text-To-Speech Engine - Громкость преобразователя текста в речь - - - - <b>This is the volume used for the speech synthesis.</b> - <b>Эта громкость используется для создания речи.</b> - - - - Length threshold - - - - - Message length threshold for Text-To-Speech Engine - - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - - - - - Message - - - - - Notification - - - - - Text-To-Speech - - - - - Soundfile - - - - - Path - - - - - Characters - - - - - LookConfig - - - Language - - - - - Look and Feel - - - - - - System default - - - - - Language to use (requires restart) - - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - - - - - Style - - - - - Basic widget style - - - - - <b>This sets the basic look and feel to use.</b> - - - - - Skin - - - - - ... - - - - - Skin file to use - - - - - User Interface - - - - - Choose skin file - - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - - - - - Players above Channels - - - - - List players above subchannels (requires restart). - - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - - - - - Form - - - - - None - Нет - - - - Only with players - - - - - All - - - - - Expand - - - - - When to automatically expand channels - - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - - - - - Ask - - - - - Do Nothing - - - - - Move - - - - - Channel Dragging - - - - - This changes the behaviour when moving channels. - - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - - - - - Ask whether to close or minimize when quitting Mumble. - - - - - <b>If set, will verify you want to quit if connected.<b> - - - - - Ask on quit while connected - - - - - Make the Mumble window appear on top of other windows. - - - - - <b>This makes the Mumble window a topmost window.</b> - - - - - Always On Top - - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - - - - - Hide in tray when minimized - - - - - Hide the main Mumble window in the tray when it is minimized. - - - - - MainWindow - - - - Root - Корень - - - - &Connect - &Присоединиться - - - - Open the server connection dialog - Открыть окно соединения с сервером - - - - Shows a dialog of registered servers, and also allows quick connect. - Показывает окно зарегистрированных серверов, а также позволяет быстро связываться. - - - - &Disconnect - &Отключиться - - - - Disconnect from server - Отключить от сервера - - - - Disconnects you from the server. - Отключает вас от сервера. - - - - &Ban lists - &Списки забаненных - - - - Edit ban lists on server - Редактировать список забаненных на сервере - - - - This lets you edit the server-side IP ban lists. - Позволяет вам изменять серверные банлисты по IP. - - - - &Kick - В&ыбросить - - - - Kick player (with reason) - Выкинуть игрока (с причиной) - - - - Kick selected player off server. You'll be asked to specify a reason. - Выкидывает игрока с сервера. Вас спросят о причине. - - - - &Ban - За&банить - - - - Kick and ban player (with reason) - Выкинуть и забанить игрока (с причиной) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - Выкидывает и банит выбранного игрока с сервера. Вас попросят уточнить причину. - - - - &Mute - Сделать &немым - - - - Mute player - Сделать игрока немым - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - Глушить или разглушить игрока на сервере. Разглушение игрока даст ему возможность говорить. - - - - &Deafen - Заг&лушить - - - - Deafen player - Заглушить игрока - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - Глушит или снимает глушение с игрока на сервере. Глушение игрока также сделает его немым. - - - - &Local Mute - &Местное глушение - - - Mute or unmute player locally. - Делает игрока немым локально. - - - - &Add - &Добавить - - - - Add new channel - Добавить новый канал - - - - This adds a new sub-channel to the currently selected channel. - Добавляет новый подканал в выбранный канал. - - - - &Remove - &Удалить - - - - Remove channel - Удалить канал - - - - This removes a channel and all sub-channels. - Удаляет канал и все подканалы. - - - - &Edit ACL - &Редактировать списки ACL - - - - Edit Groups and ACL for channel - Редактировать Группы и списки ACL для канала - - - - This opens the Group and ACL dialog for the channel, to control permissions. - Открывает диалоговое окно групп и списков ACL для каналов, чтобы управлять привилегиями. - - - - &Rename - - - - - &Change Description - - - - - Changes the channel description - - - - - This changes the description of a channel. - - - - - &Link - &Связать - - - - Link your channel to another channel - Связывает ваш канал с другими каналами - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - Связывает ваш текущий канал с выбранным каналом. Если у игроков есть разрешение говорить на канале, они могут слышать друг друга. Эта связь постоянна, и длится до разрыва связи вручную или перезапуска сервера. Пожалуйста, просмотрите ярлыки для нажмите-для-связи. - - - &Unlink - &Разорвать связь - - - - Unlink your channel from another channel - Разорвать связь канала с другим - - - - This unlinks your current channel from the selected channel. - Разрывает связь вашего канала с выбранным каналом. - - - - Unlink &All - Разорвать &Все - - - - Unlinks your channel from all linked channels. - Разрывает канал с остальными каналами. - - - - This unlinks your current channel (not the selected one) from all linked channels. - Разрывает связь вашего канала со всеми (не только с выбранными) каналами. - - - - &Reset - Сб&росить - - - - Reset audio preprocessor - Сбросить аудио препроцессор - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - Сбросит аудио препроцессор, включая подавление шумов, автоматическое получение и определение активности голоса. Если что-то внезапно вмешается в звуковую среду (например падение микрофона) на короткое время, используйте это, чтобы не ждать приспособления препроцессора. - - - - &Mute Self - Загл&ушить себя - - - - Mute yourself - Заглушить себя - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - Заглушает себя. При включении, вы не сможете посылать данных на сервер. - - - - &Deafen Self - Сделать се&бя немым - - - - Deafen yourself - Делает себя немым - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - Делает себя немым или возвращает голос. Когда вы нем, вы не услышите никого. Онемение также и заглушает. - - - - &Text-To-Speech - &Text-To-Speech - - - - Toggle Text-To-Speech - Включить Text-To-Speech - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - Включает или выключает движок Text-To-Speech. Будут произносится сообщения, включенные в диалоговом окне конфигурации TTS. - - - - S&tatistics - С&татистика - - - - Display audio statistics - Показывает аудио статистику - - - - Pops up a small dialog with information about your current audio input. - Вызывает маленькую подсказку о вашем текущем аудио вводе. - - - - Forcibly unlink plugin - Насильно отключить плагин - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - Заставляет текущий плагин разорвать связь, что удобно про считываниии абсолютно неверных данных. - - - - &Settings - &Настройки - - - - Configure Mumble - Настроить Mumble - - - - Allows you to change most settings for Mumble. - Позволяет вам изменять большинство настроек Mumble. - - - - &What's This? - &Что это? - - - - Enter What's This? mode - Войти в Что это? режим - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - Нажмите, чтобы войти в режим "Что это?". Ваш курсор превратится в знак вопроса. Нажмите на любой кнопке, пункту меню или зоне, чтобы получить пояснение. - - - - &About - &О программе - - - - Information about Mumble - Информация о Mumble - - - - Shows a small dialog with information and license for Mumble. - Показывает маленькое диалоговое окно с информацией и лицензией для Mumble. - - - - About &Speex - О &Speex - - - - Information about Speex - Информация о Speex - - - - Shows a small dialog with information about Speex. - Показывает небольшое диалоговое окно с информацией о Speex. - - - &About Qt - &О Qt - - - - Information about Qt - Информация о Qt - - - - Shows a small dialog with information about Qt. - Показывает небольшое диалоговое окно с информацией о Qt. - - - - Check for &Updates - Проверить об&новления - - - - Check for new version of Mumble - Проверить новую версию Mumble - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - Присоединяется к вебстранице Mumble, чтобы проверить доступность новой версии, и уведомляет вас о ссылке для закачки в этом случае. - - - - Mumble -- %1 - Mumble -- %1 - - - Log of messages - История сообщений - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - Показывает все недавние действия. Соединяясь с сервером, сообщения о всех ошибках и информации будут показаны все.<br />Чтобы настроить, какие точно сообщения отображать там, используйте команду <b>Настройки</b> из меню. - - - - &Server - &Сервер - - - - &Player - &Игрок - - - - &Channel - &Канал - - - - &Audio - &Аудио - - - - C&onfigure - Н&астройки - - - - &Help - &Помощь - - - - Push-to-Talk - Global Shortcut - Нажмите чтобы говорить - - - - Push and hold this button to send voice. - Global Shortcut - - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - - - - - Reset Audio Processor - Global Shortcut - Сбросить Аудио препроцессор - - - - Toggle Mute Self - Global Shortcut - Включить заглушение себя - - - - Toggle self-mute status. - Global Shortcut - - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - - - - - Toggle Deafen Self - Global Shortcut - Включить онемение себя - - - - Toggle self-deafen status. - Global Shortcut - - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - - - - - Unlink Plugin - Global Shortcut - Отключить плагин - - - - Force Center Position - Global Shortcut - Принудительная центральная позиция - - - - Chan Parent - Global Shortcut - -Предок канала - - - - Chan Sub#%1 - Global Shortcut - Подканал#%1 - - - - Chan All Subs - Global Shortcut - Все подканалы - - - - Push-to-Mute - Global Shortcut - Нажмите чтобы заглушить - - - - Join Channel - Global Shortcut - Присоединиться к каналу - - - - Toggle Overlay - Global Shortcut - Включить Замещение - - - - Toggle state of in-game overlay. - Global Shortcut - - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - - - - - Alt Push-to-Talk - Global Shortcut - Усиленное нажмите чтобы говорить - - - - Kicking player %1 - Выкидывание игрока %1 - - - - - Enter reason - Введите причину - - - - Banning player %1 - Бан игрока %1 - - - - Mumble - Mumble - - - - - Channel Name - Имя канала - - - - Are you sure you want to delete %1 and all its sub-channels? - Вы уверены, что хотите удалить %1 и все его подканалы? - - - - Unmuted and undeafened. - Онемение и глушение снято. - - - - Unmuted. - Глушение снято. - - - - Muted. - Заглушен. - - - - Muted and deafened. - В онемении и заглушен. - - - - Deafened. - В онемении. - - - - Undeafened. - Онемение снято. - - - - About Qt - О Qt - - - - Joining %1. - Соединяемся с %1. - - - Connected to server. - Соединен с сервером. - - - - Server connection failed: %1. - Попытка соединения с сервером не удалась: %1. - - - - Disconnected from server. - Отключен от сервера. - - - - Reconnecting. - Повтор связи. - - - - Joined server: %1. - Присединились к серверу: %1. - - - - Left server: %1. - Покинут сервер: %1. - - - - %1 is now muted and deafened. - %1 сейчас в онемении и заглушен. - - - - %1 is now muted. - %1 сейчас заглушен. - - - - %1 is now unmuted. - С %1 снято глушение. - - - - - server - сервер - - - - You were muted by %1. - Вы заглушили %1. - - - - You were unmuted by %1. - Вы сняли глушение с %1. - - - - %1 muted by %2. - %1 заглушен %2. - - - - %1 unmuted by %2. - %2 снял глушение с %1. - - - - You were deafened by %1. - На вас наложил онемение %1. - - - - You were undeafened by %1. - С вас снял онемение %1. - - - - %1 deafened by %2. - %1 в онемении из-за %2. - - - - %1 undeafened by %2. - С %1 снято онемение %2. - - - - You were kicked from the server by %1: %2. - Вы были выкинуты с сервера благодаря %1: %2. - - - - %3 was kicked from the server by %1: %2. - %3 был выкинут с сервера %1: %2. - - - - You were kicked and banned from the server by %1: %2. - Вы были выкинуты и забанены на сервере администратором %1: %2. - - - - %3 was kicked and banned from the server by %1: %2. - %3 был выкинут с сервера и забанен администратором %1: %2. - - - - You were moved to %1 by %2. - - - - - %1 left channel. - %1 покинул канал. - - - - %1 moved out by %2 to %3. - - - - - %1 moved in by %2 from %3. - - - - %1 moved out by %2. - %1 перемещен из канала %2. - - - - %1 entered channel. - %1 вошел на канал. - - - %1 moved in by %2. - %1 перемещен сюда %2. - - - - Server connection rejected: %1. - Попытка подключения отклонена: %1. - - - - Denied: %1. - Запрещено: %1. - - - - Welcome to Mumble. - Добро пожаловать в Mumble. - - - - &Quit Mumble - - - - - Closes the program - - - - - Exits the application. - - - - - Send Messa&ge - - - - - Send a Text Message - - - - - Sending message to %1 - - - - - - To %1: %2 - - - - - - Message to %1 - - - - - Invalid username - - - - - You connected with an invalid username, please try another one. - - - - - That username is already in use, please try another username. - - - - - Wrong password - - - - - Wrong password for registered users, please try again. - - - - - Wrong server password for unregistered user account, please try again. - - - - - From %1: %2 - - - - - Message from %1 - - - - - &Audio Wizard - - - - - Sends a text message to another user. - - - - - Start the audio configuration wizard - - - - - This will guide you through the process of configuring your audio hardware. - - - - - SSL Verification failed: %1 - - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - - - - - Sever presented a certificate which failed verification. - - - - - &Information - - - - - Show information about the server connection - - - - - This will show extended information about the connection to the server. - - - - - Opening URL %1 - - - - - URL scheme is not 'mumble' - - - - - Connecting to %1 - - - - - Enter username - - - - - Mumble Server Information - - - - - - &View Certificate - - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - - - - - Voice channel is sent over control channel. - - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - - - - - UDP Statistics - - - - - To Server - - - - - From Server - - - - - Good - - - - - Late - - - - - Lost - - - - - Resync - - - - - Change description of channel %1 - - - - - Sending message to channel %1 - - - - - Sending message to channel tree %1 - - - - - To tree %1: %2 - - - - - Message to tree %1 - - - - - Ctrl+Q - - - - - Mute player locally - - - - - Mute or unmute player locally. Use this on other players in the same room. - - - - - Renames the channel - - - - - This renames a channel. - - - - - About &Qt - - - - - Sends a text message to all users in a channel. - - - - - Send &Tree Message - - - - - Send message to channel tree. - - - - - This sends a text message to a channel and it's subchannels. - - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - - - - - Connected to server %1. - - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - - - - - Close - - - - - - Minimize - - - - - &Window - - - - - Ctrl+M - - - - - Toggle Minimal - Global Shortcut - - - - - &Minimal View - - - - - Toggle minimal window modes - - - - - This will toggle minimal mode, where the log window and menu is hidden. - - - - - Volume Up (+10%) - Global Shortcut - - - - - Volume Down (-10%) - Global Shortcut - - - - - Clear - - - - - Log - - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - - - - - &Unlink - Channel - &Разорвать связь - - - - &Unlink - Plugin - &Разорвать связь - - - - Server - message from - - - - - Hide Frame - - - - - Toggle showing frame on minimal window - - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - - - - - NetworkConfig - - - Network - - - - - Form - - - - - Connection - - - - - Use TCP compatibility mode - Use TCP compatability mode - - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - - - - - Use TCP mode - Использовать режим TCP - - - - Reconnect when disconnected - Восстановление связи при обрыве - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>Восстановить связь при обрыве</b>.<br />Mumble будет пытаться автоматически восстановить связь через 10 в случае обрыва связи с сервером. - - - - Reconnect automatically - - - - - Proxy - - - - - Type - - - - - Type of proxy to connect through - - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - - - - - Direct connection - - - - - HTTP(S) proxy - - - - - SOCKS5 proxy - - - - - Hostname - - - - - Hostname of the proxy - - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - - - - - Port - - - - - Port number of the proxy - - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - - - - - Username - - - - - Username for proxy authentication - - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - Password - - - - - Password for proxy authentication - - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - Mumble services - - - - - Check for updates on startup - - - - - Submit anonymous statistics to the Mumble project - - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - - - - - Submit anonymous statistics - - - - - OSSConfig - - %1ms - %1мс - - - Device selection - Выбор устройства - - - Input - Ввод - - - Output - Вывод - - - Device to use for speakers/headphones - Устройство, используемое как динамики/наушники - - - Output Options - Свойства вывода - - - Output Delay - Задержка вывода - - - - Overlay - - Mumble - Mumble - - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the August 2006 updated version of DX9.0c - Невозможно загрузить библиотеку замещения. Это означает, что либо: -- библиотека (mumble_ol.dll) не была найдена в папке, из которой вы запустили Mumble -- Ваша ОС старше, чем WinXP SP2 -- у Вас нет обновленной в августе 2006 версии DX9.0c - - - - OverlayConfig - - Options - Настройки - - - Position - Позиция - - - Font - Шрифт - - - Enable Overlay - Включить замещение - - - Enable overlay. - Включить замещение. - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - Устанавливает, включить замещение или нет. Опция отмечена, если запущены приложения D3D9, так что удостоверьтесь, что Mumble запущен и эта опция включена перед стартом приложения.<br />Заметьте, что если вы запустите приложение после запуска Mumble, или вы отключите замещение во время действия программы, не будет безопасного способа заново включить замещение без перезапуска программы. - - - No one - Никого - - - Only talking - Только разговаривающие - - - Everyone - Всем - - - Show - Показать - - - Who to show on the overlay - Кого показывать при замещении - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>Определяет, кого показывать в игровом замещении.</b><br />Если много людей на одном канале, замещение может быть очень долгим. Используйте это, чтобы сократить его.<br /><i>Никого</i> -Не показывать никого (но оставить замещение включенным).<br /><i>Только говорящих</i> - Показывать только говорящих людей.<br /><i>Всех</i> - Показывать всех. - - - Always Show Self - Всегда показывать меня - - - Always show yourself on overlay. - Всегда показывать себя в замещении. - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - Устанавливает, всегда ли показывать себя. Настройка применима если вы не отображаете всех в замещении, поэтому тогда вы увидите собственный статус при разговоре, который вы не услышите, если в онемении или заглушены. - - - Grow Left - Расти влево - - - Let overlay grow to the left - Позволяет замещению расти влево - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Замещение пытается остаться как можно меньшим и на выбранной позиции. Позволяет замещению расти влево при необходимости. - - - Grow Right - Расти вправо - - - Let overlay grow to the Right - Позволяет замещению расти вправо - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the Right if needed. - Замещение попытается оставться как можно меньшим и на установленой позиции. Позволяет замещению расти вправо при необходимости. - - - Grow Up - Расти вверх - - - Let overlay grow upwards - Позволяет замещению расти вверх - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the top if needed. - Замещение попытается оставться как можно меньшим и на установленой позиции. Позволяет замещению расти вверх при необходимости. - - - Grow Down - Расти вниз - - - Let overlay grow downwards - Позволяет замещению расти вниз - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow towards the bottom if needed. - Замещение попытается оставться как можно меньшим и на установленой позиции. Позволяет замещению расти вниз при необходимости. - - - X-Position of Overlay - Позиция Х замещения - - - This sets the relative X position of the overlay. - Устанавливает относительную Х позицию замещения. - - - Y-Position of Overlay - Y-позиция замещения - - - This sets the relative Y position of the overlay. - Устанавливает относительную Y - позицию замещения. - - - Current Font - Текущий шрифт - - - Set Font - Установить шрифт - - - Maximum width of names. - Максимальная длина имен. - - - This sets the maximum width of names shown, relative to the height. If you set this to 100%, no line of text will be wider than it is high. At 500%, no line will be more than 5 times wider than its height, and so on. - Устанавливает максимальную ширину отображаемых имен, относительно высоты. Если установить на 100%, ни одна строка в тексте не будет шире его высоты. На 500% ни одна строка не будет больше ширины в 5 раз, и так далее. - - - Maximum width - Максимальная ширина - - - Change - Изменить - - - Color for players - Цвет для игроков - - - Color for talking players - Цвет для разговаривающих игроков - - - Color for alt-talking players - Цвета для усиленно говорящих игроков - - - Color for Channels - Цвет для каналов - - - Color for active Channels - Цвет для Активных каналов - - - Overlay - Замещение - - - - PlayerModel - - Name of player - Имя игрока - - - Name of channel - Имя канала - - - Player flags - Флаги игрока - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src=":/icons/talking_on.png" /> Talking<br /><img src=":/icons/talking_off.png" /> Not talking - Этот игрок подключен к серверу. Иконка слева от игрока отображает, разговаривает он сейчас или нет:<br /><img src=":/icons/talking_on.png" />Говорит<br /><img src=":/icons/talking_off.png" />Не говорит - - - - This is a channel on the server. Only players in the same channel can hear each other. - Канал на сервере. Только игроки на одном канале могут слушать друг друга. - - - This shows the flags the player has on the server, if any:<br /><img src=":/icons/authenticated.png" />Authenticated user<br /><img src=":/icons/muted_self.png" />Muted (by self)<br /><img src=":/icons/muted_server.png" />Muted (by admin)<br /><img src=":/icons/deafened_self.png" />Deafened (by self)<br /><img src=":/icons/deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - Показывает флаги игрока на сервере,если любой:<br /><img src=":/icons/authenticated.png" />Зарегистрированный пользователь<br /><img src=":/icons/muted_self.png" />Заглушенный (собой)<br /><img src=":/icons/muted_server.png" />Заглушенный (администратором)<br /><img src=":/icons/deafened_self.png" />В онемении (собственном)<br /><img src=":/icons/deafened_server.png" />В онемении (администратора)<br />Пользователь,заглушенный собой, обычно отошел от компьютера, говорит по телефону, или что-то в этом роде.<br />Игрок, заглушенный администратором, возможно просто отошел, и шум игрока надоедал администратору,и он заглушил его. - - - - Name - Имя - - - - Flags - Флаги - - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - - - - Mumble - Mumble - - - - Are you sure you want to drag this channel? - - - - - PluginConfig - - - Options - Настройки - - - - - Plugins - Плагины - - - - Link to Game and Transmit Position - Связаться с игрой и передать позицию - - - - Enable plugins and transmit positional information - Включить плагины и передать информацию о позиции - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - Включает плагины для поддерживаемых игр, чтобы соответствовать вашей позиции в игре и передавать их с каждым голосовым пакетом. Позволяет другим игрокам слушать ваш голос в игре оттуда, откуда он расположен по отношению к ним. - - - - &Reload plugins - &Перезагрузить плагины - - - - Reloads all plugins - Перезагрузить все плагины - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - Пересканирует и перезагружает плагины. Используйте, если вы только что добавили или изменили плагин в папке с плагинами. - - - - &About - &О плагине - - - - Information about plugin - Информация о плагине - - - - This shows a small information message about the plugin. - Покажет небольшую справку о плагине. - - - - &Configure - &Настроить - - - - Show configuration page of plugin - Показать страницу настроек плагина - - - - This shows the configuration page of the plugin, if any. - Показывает страницу настроек плагина, если есть. - - - Mumble - Mumble - - - - Plugin has no configure function. - Плагин не имеет функции конфигурирования. - - - - Plugin has no about function. - У плагина нет функции информации. - - - - Form - - - - - Plugins - - Plugin %1 lost link. - Плагин %1 потерял связь. - - - - %1 lost link. - %1 потерял связь. - - - Plugin %1 linked. - Плагин %1 подключен. - - - - %1 linked. - %1 подключен. - - - - PortAudioSystem - - - Default Device - - - - - PulseAudioConfig - - %1ms - %1мс - - - Device selection - Выбор устройства - - - Output - Вывод - - - Device to use for speakers/headphones - Устройство, используемое как динамики/наушники - - - Output Options - Свойства вывода - - - Output Delay - Задержка вывода - - - - PulseAudioSystem - - - Default Input - - - - - Default Output - - - - - ShortcutActionWidget - - - Unassigned - - - - - ShortcutDelegate - - - Unassigned - - - - - ShortcutKeyWidget - - - Press Shortcut - Нажмите ярлык - - - - TextMessage - - - Message to send - - - - - Preview - - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble - Mumble - - - Mumble failed to retrieve version information from the SourceForge server. - Mumble возвратил ошибку при запросе информации о версии с сервера SourceForge. - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - - - - - Certificate chain - - - - - Certificate details - - - - - %1 %2 - %1 %2 - - - - - Common Name: %1 - - - - - - Organization: %1 - - - - - Subunit: %1 - - - - - - Country: %1 - - - - - - Locality: %1 - - - - - - State: %1 - - - - - Valid from: %1 - - - - - Valid to: %1 - - - - - Serial: %1 - - - - - Public Key: %1 bits %2 - - - - - RSA - - - - - DSA - - - - - Digest (MD5): %1 - - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - - - - - Unit Name: %1 - - - - - WASAPIConfig - - Device selection - Выбор устройства - - - Output - Вывод - - - Device to use for speakers/headphones - Устройство, используемое как динамики/наушники - - - - WASAPISystem - - - Default Device - - - - - XInputKeyWidget - - Press Shortcut - Нажмите ярлык - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_zh_CN.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_zh_CN.ts --- mumble-1.2.3/src/mumble11x/mumble_zh_CN.ts 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_zh_CN.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,4936 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - 编辑 访问控制列表 %1 - - - - Deny - 拒绝 - - - - Allow - 允许 - - - - Allow %1 - 允许 %1 - - - - Deny %1 - 拒绝 %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - 授予 %1 权限.如果一个权限同时被拒绝和允许,则被视为拒绝。<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - 撤销 %1 权限.如果一个权限同时被拒绝和允许,则被视为拒绝。<br />%2 - - - - Dialog - 对话框 - - - - &Groups - &群 - - - - Group - - - - - List of groups - 群列表 - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - 这是当前频道内定义的所有群。要创建一个新群,请输入群名然后按回车。 - - - - Remove selected group - 删除选中的群 - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - 删除当前选中的群。如果该群有子群,它将不会被从列表中删除,但是与该群相关的所有本地信息将被清除. - - - - Remove - 删除 - - - - Inherit group members from parent - 从父继承群成员 - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - 如果群在父频道里被标记为<i>可继承</i>,则从父继承所有群成员。 - - - - Inherit - 继承 - - - - Make group inheritable to sub-channels - 使群可被子频道继承 - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - 使该群可被子频道继承。如果该群不可被继承,则可在子频道内创建同名新群。 - - - - Inheritable - 可继承 - - - - Group was inherited from parent channel - 继承自父频道的群 - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - 这表明该群继承自父频道。该标志仅供参考,你不能编辑该标志。 - - - - Inherited - 继承的 - - - - Members - 成员 - - - - Add - 添加 - - - - Add to Remove - 添加到删除列表 - - - - Add member to group - 添加群成员 - - - - Type in the name of a player you wish to add to the group and click Add. - 输入你要添加到群里的玩家名字然后点击添加。 - - - - Remove member from group - 从群里删除成员 - - - - Type in the name of a player you wish to remove from the group and click Add. - 输入你要从群内删除的成员然后点击删除。 - - - - &ACL - &访问控制列表 - - - - Active ACLs - 当前访问控制列表 - - - - List of entries - 条目列表 - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - 显示该频道内所有活跃条目。继承自父频道的条目将以斜体显示.<br/>访问控制列表是自上而下处理,意味着列表越往下优先级越高。 - - - - Inherit ACL of parent? - 继承父访问控制列表? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - 设置是否对当前对象应用父频道的访问控制列表。只有那些在父频道内被标记为“应用到子频道”的条目将被继承。 - - - - Inherit ACLs - 继承访问控制列表 - - - - Move entry up - 上移条目 - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - 在列表中上移条目。由于条目自上而下被处理,这有可能改变用户的有效权限.你不能将一个条目移到继承的条目之上,如果你确实想这么做,你需要复制继承的条目。 - - - - &Up - &上移 - - - - Move entry down - 下移条目 - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - 在列表中下移条目。由于条目自上而下被处理,这有可能改变用户的有效权限。 - - - - &Down - &下移 - - - - Add new entry - 添加新条目 - - - - This adds a new entry, initially set with no permissions and applying to all. - 添加一个新条目,初始设置为无权限并应用到所有。 - - - - &Add - &添加 - - - - Remove entry - 删除条目 - - - - This removes the currently selected entry. - 删除当前选中的条目。 - - - - &Remove - &删除 - - - - Context - 上下文 - - - Entry should apply to this channel - 应用到该频道的条目 - - - - This makes the entry apply to this channel. - 应用该条目到当前频道。 - - - - Applies to this channel - 应用到当前频道 - - - - Entry should apply to sub-channels. - 应用到子频道的条目。 - - - - This makes the entry apply to sub-channels of this channel. - 应用该条目到当前频道的子频道。 - - - - Applies to sub-channels - 应用到子频道 - - - - Permissions - 权限 - - - - User/Group - 用户/群 - - - - Group this entry applies to - 应用该条目的群 - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - - - - - User ID - 用户名 - - - - User this entry applies to - 应用该条目的用户 - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - 控制该条目应用到哪个用户。请输入用户名然后按回车来向服务器做匹配查询。 - - - - Entry should apply to this channel. - - - - - ALSAAudioInput - - - Default ALSA Card - 默认 ALSA 声卡 - - - - Opening chosen ALSA Input failed: %1 - 无法打开所选 ALSA 输入: %1 - - - - ALSAAudioOutput - - - Default ALSA Card - 默认 ALSA 声卡 - - - - Opening chosen ALSA Output failed: %1 - 无法打开所选 ALSA 输出: %1 - - - - ASIOConfig - - %1 (ver %2) - %1 (版本 %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 毫秒 -> %2 毫秒 (%3 毫秒 分辨率) %4赫兹 - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 毫秒 -> %2 毫秒 (%3 毫秒 分辨率) %4 赫兹--不可用 - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - - - ASIO Initialization failed: %1 - ASIO初始化失败: %1 - - - - - Failed to instantiate ASIO driver - 无法初始化 ASIO 驱动 - - - - ASIO - - - - - Form - 表单 - - - - Device selection - 设备选择 - - - - Device - 设备 - - - - Device to use for microphone - 用作麦克风的设备 - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - 选择要查询的设备。你仍需要实际查询该设备然后选择要使用哪些声道。 - - - - Query selected device - 查询所选设备 - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - 查询所选设备的声道。注意大多数 ASIO 驱动有极端漏洞,查询设备可能导致应用程序或系统崩溃。 - - - - &Query - &查询 - - - - Configure selected device - 配置所选设备 - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - 配置所选设备。注意大多数 ASIO 驱动有极端漏洞,查询设备可能导致应用程序或系统崩溃。 - - - - &Configure - &配置 - - - - Capabilities - 设置信息 - - - - Driver name - 驱动名称 - - - TextLabel - 文本标签 - - - Buffersize - 缓冲区大小 - - - - Configure input channels - 配置输入声道 - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - 配置 ASIO 的输入声道.请确保你选择了至少一个声道作为麦克风和扬声器。<i>麦克风</i>应该是你的已连接的麦克风连,<i>扬声器</i>应该是一个采样<i>你听到的声音</i>的声道。<br />比如在 Audigy 2 ZS 上,一个好的麦克风的选择会是<i> Mic L </i>而扬声器会是<i> Mix L </i>和<i> Mix R</i>. - - - - Channels - 声道 - - - - Microphone - 麦克风 - - - - <- - - - - - -> - - - - - Unused - 未使用 - - - - Speakers - 扬声器 - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - 你需要选择至少一个麦克风和一个扬声器源来使用 ASIO.如果你只需要使用要麦克风进行采样,请使用 DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - 无法打开所选 ASIO 设备。没有可用输入。 - - - - AboutDialog - - - About Mumble - 关于 Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble (%1)</h3><p>版权所有 %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>一个游戏玩家的语音聊天工具</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - &About Mumble - &关于 Mumble - - - - &License - &授权 - - - - OK - - - - - AboutSpeexDialog - - - About Speex - 关于 Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>关于 Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>该程序使用 Speex 版本 %1</p><p>Speex 被用于回声消除,噪音<br />过滤,语言活动检测和语音<br />压缩。</p> - - - - OK - - - - - AudioInput - - - Form - 表单 - - - - Interface - 接口 - - - - System - 系统 - - - - Input method for audio - 音频输入方法 - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>这是用于音频的输入方法。</b><br />很有可能你想使用 DirectSound。 - - - - Device - 设备 - - - Output method for audio - 音频输出方法 - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>这是用于音频输出的方法。</b><br />很有可能你想使用 DirectSound。 - - - - Cancel Echo - 消除回声 - - - - Transmission - 传送 - - - - &Transmit - &传送 - - - - When to transmit your speech - 何时传送你的语音 - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>设置何时语音将被传送。</b><br /><i>连续</i>一直<br /><i>有语音活动</i> 当你说话清晰时。<br /><i>按键通话</i> - 当你按住作为<i>快捷键</i>的自定义按键组合时。 - - - - DoublePush Time - 两次按键时间间隔 - - - - TextLabel - 文本标签 - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>启用按键通话的音频提示。</b><br />当你按下或释放按键通话快捷键时会听到一声短的蜂鸣声。 - - - - PTT Audio cue - PTT 提示音 - - - - Use SNR based speech detection - 使用基于 SNR 的语音侦测 - - - - Signal to Noise - 信噪比 - - - - Use Amplitude based speech detection. - 使用基于振幅的语音侦测。 - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>设置用振幅来做语音侦测。</b><br />在此模式下,输入信号的原始强度被用于语音侦测。 - - - - Amplitude - 振幅 - - - - Voice &Hold - &暂停 发言 - - - - How long to keep transmitting after silence - 无声后多长时间内继续传送 - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>设置发言暂停被感知到后多长时间内继续传送。</b>如果你在讲话时你的语音破碎(在你的名字旁边会显示一个快速闪烁的语音图标),增大这个值。<br />只有在使用检测到语音活动时传送时该选项才有用。 - - - - Silence Below - 无声 低于 - - - - Signal values below this counts as silence - 信号值低于这个数值时视为无声 - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>设置语音检测的触发值。</b><br />与音频统计窗口一起来使用该值以手工调整语音侦测的触发值。输入值低于"无声 低于“时总是会被视为无声。值高于”语音 高于“时总是被视为语音。如果你正在讲话,两者之间的值会被视为语音,但是不会触发一个新的侦测。 - - - - Speech Above - 语言 高于 - - - - Signal values above this count as voice - 信号值高于这个数值时视为语音 - - - - Compression - 压缩 - - - - &Quality - &质量 - - - - Quality of compression (peak bandwidth) - 压缩质量(峰值带宽) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>设置压缩质量。</b><br />确定 Mumble 可用于发送音频的带宽大小。 - - - - Audio per packet - 每个数据包的音频帧数 - - - - How many audio frames to send per packet - 每个数据包里发送多少个音频帧 - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>选择一个数据包里放多少个音频帧。</b><br />增加这个数值会增加你的语音延迟,但也会减少带宽需求。 - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>显示已用的发送带宽峰值。</b><br />显示从你的机器发出的峰值带宽大小。音频比特率是仅用于音频数据的最大比特率(由于我们使用VBR)。位置是用于位置信息的比特率。系统开销是我们的组帧和 IP 数据包头(IP 和 UDP 是该系统开销的75%)。 - - - - Audio Processing - 音频处理 - - - - Noise Suppression - 噪音抑制 - - - - Noise suppression - 噪音抑制 - - - - Amplification - 放大率 - - - - Maximum amplification of input sound - 输入声音的最大放大率 - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>输入的最大放大率。</b><br />Mumble 在压缩前会规格化输入音量,该选项设置音量被允许放大多少。<br />实际等级将根据你的语音模式来持续更新,但是不会高于这里指定的等级。<br />如果音频统计的<i>麦克风响度</i>等级在 100%左右,你很有可能想把该值设为大约 2.0,但是如果像大多数人一样,你不能达到 100%,设置一个更高的值。<br />理想状态下,设置该值使<i>麦克风响度 * 放大率 >= 100</i>,甚至当你相当轻声的讲话时。<br /><br />注意设置该值为其最大值不会有任何副作用,但是如果你将该值设为自动调节到其最大值, Mumble 会开始拾取其他人的谈话。 - - - - Current speech detection chance - 当前语音侦测几率 - - - - Audible audio cue when push-to-talk is activated or deactivated - 当按键通话激活或未激活时听到的提示音频 - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>设置使用信噪比来进行语音侦测。</b><br /> 在此模式下,将从输入中寻找并分析出一个近似清晰的信号,而这个信号的清晰度被用于触发语音侦测。 - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>显示当前语音侦测设置。</b><br />你能在设置对话框或音频精灵里修改当前设置。 - - - - Idle AutoMute - 空闲时自动静音 - - - - How long to remain idle before auto-mute. - 空闲多长时间后自动静音。 - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - 设置空闲定时器。如果定时器过期时没有任何音频发送到服务器,你将被静音。 - - - - Maximum bandwidth used for sending audio - 用于发送音频的最大带宽 - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>设置应用于噪音抑制的数值大小.</b><br />数值越高,稳态噪声越会被积极的抑制。 - - - - Input device for audio - - - - - <b>This is the input device to use for audio.</b> - - - - - AudioInputDialog - - - Continuous - 连续 - - - - Voice Activity - 语音活动 - - - - Push To Talk - 按键通话 - - - - Audio Input - 音频输入 - - - - - %1 ms - %1 毫秒 - - - - - Off - 关闭 - - - - %1 s - %1 秒 - - - - -%1 dB - -%1 分贝 - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1 千比特/秒 (音频 %2, 位置 %4, 系统开销 %3) - - - - %1 min - %1 分钟 - - - - AudioOutput - - - Form - 表单 - - - - Interface - 接口 - - - - System - 系统 - - - Input method for audio - 音频输入方法 - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>这是用于音频的输入方法。</b><br />很有可能你想使用 DirectSound。 - - - - Device - 设备 - - - - Output method for audio - 音频输出方法 - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>这是用于音频输出的方法。</b><br />很有可能你想使用 DirectSound。 - - - - Positional Audio - 定位音频 - - - - Audio Output - 音频输出 - - - - Default &Jitter Buffer - 默认 &Jitter 缓冲区 - - - - Safety margin for jitter buffer - Jitter 缓冲区的安全边界 - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>设置 Jitter 缓冲区的最小安全边界. </b><br />所有收到的音频都会被缓冲,而 Jitter 缓冲区不断尝试使该缓冲区保持能被你的网络所允许的最小值, 从而使延迟尽可能的低。 设置使用的缓冲区大小的最小值。如果你听到的句子的起始部分是颤音,请增加这个值。 - - - - TextLabel - 文本标签 - - - - Volume - 音量 - - - - Volume of incoming speech - 收到的语音的音量 - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>调节收到的语音的音量。</b><br />注意如果你增加此值至超过 100%,声音会失真。 - - - - Output Delay - 输出延时 - - - - Amount of data to buffer - 缓冲数据大小 - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 设置输出缓冲区里前置缓冲的数据大小。试验不同值然后设置成不引起快速颤音的最低值. - - - - The connected "speakers" are actually headphones. - 已连接的“扬声器”实际上是耳机. - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - 设置声强计算的最小距离.当别的玩家离你小于这个距离时他的语音将不会减弱. - - - - Factor for sound volume decrease - 音量减弱因子 - - - - Bloom - 声音增强 - - - - Factor for sound volume increase - 音量增强因子 - - - - How much should sound volume increase for sources that are really close? - 当音源距离过近时音量该增强多少? - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - 选中此选项表明你没有连接扬声器,只有耳机。这很重要,因为扬声器通常在你面前,而耳机直接在你左右。 - - - - Headphones - 耳机 - - - - Minimum Distance - 最小距离 - - - - Minimum distance to player before sound volume decreases - 距离玩家至少多远时声音开始减弱 - - - - Maximum Distance - 最大距离 - - - - Maximum distance, beyond which speech volume won't decrease - 超过最大距离时音量将不再减弱 - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - 设置声强计算最大距离。当超过此距离时,别的玩家的音量将不再减弱。 - - - - Minimum Volume - 最小音量 - - - - What should the volume be at the maximum distance? - 位于最大距离时的音量大小? - - - - Loopback Test - 回环测试 - - - - Delay Variance - 延时方差 - - - - Variance in packet latency - 数据包延时的方差 - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>设置回环测试时的数据包延迟方差。</b><br />大多数音频路径含有一定的延迟方差。该选项允许你设置回环测试模式时的方差。例如,如果你设置该值为 15毫秒,将模拟一个 20-35毫秒 ping 延迟或一个 80-95毫秒延迟的网络。大多数国内网络的延迟方差啊大概是5毫秒 - - - - Packet Loss - 数据包丢失 - - - - Packet loss for loopback mode - 回环模式的数据包丢失 - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>设置回环模式时的数据包丢失。</b><br />该值即为丢包率。除非你的出外的带宽达到峰值或者你的网络连接有问题,该值会是 0% - - - - &Loopback - &回环 - - - - Desired loopback mode - 期望的回环模式 - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>该选项启用某种回环测试模式。</b><br /><i>无</i> - 禁用回环<br /><i>本地</i> - 模拟一个本地服务器。<br /><i>服务器</i> - 请求来自服务器的回环。<br />请注意当回环模式启用时,别的玩家不会听到你的声音。当应用程序退出时该选项不会被存盘。 - - - - Other Applications - 其他应用程序 - - - - Volume of other applications during speech - 讲话时别的应用程序的音量 - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>讲话时减小其他应用程序的音量.</b><br />Mumble 支持收到语音时减小其他应用程序的音量。这将设置当其他的人交谈时其他应用程序的相对音量。 - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - AudioOutputDialog - - - None - - - - - Local - 本地 - - - - Server - 服务器 - - - - Audio Output - 音频输出 - - - - - %1 ms - %1 毫秒 - - - - - - - - %1% - - - - - %1ms - %1 毫秒 - - - - - %1m - %1 米 - - - - AudioStats - - >1000ms - >1000毫秒 - - - - Audio Statistics - 音频统计 - - - - Input Levels - 输入级别 - - - - Peak microphone level - 麦克风级别峰值 - - - - Peak power in last frame - 最后帧的峰值功率 - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - TextLabel - 文本标签 - - - - Peak speaker level - 扬声器级别峰值 - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - - - - - Peak clean level - 静输入级别峰值 - - - - Signal Analysis - 信号分析 - - - - Microphone power - 麦克风功率 - - - - How close the current input level is to ideal - 当前输入级别离完美有多近 - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - 信噪比 - - - - Signal-To-Noise ratio from the microphone - 麦克风的信噪音比 - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - - - - - Speech Probability - 语音的概率 - - - - Probability of speech - 语音的概率 - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - - - - - Configuration feedback - 配置反馈 - - - - Current audio bitrate - 当前音频比特率 - - - - Bitrate of last frame - 最后帧的比特率 - - - - DoublePush interval - 两次按键时间间隔 - - - Time between last two PushToTalk presses - 最后两次按下按键通话键的时间间隔 - - - - Speech Detection - 语音侦测 - - - - Current speech detection chance - 当前语音侦测几率 - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>显示当前语音侦测设置。</b><br />你能在设置对话框或音频精灵里修改当前设置。 - - - - Signal and noise power spectrum - 信号和噪音功率频谱 - - - - Power spectrum of input signal and noise estimate - 输入信号和噪音估计的功率频谱 - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - - - - - Echo Analysis - 回声分析 - - - - Weights of the echo canceller - 回声抵消器的影响 - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - 音频调节精灵 - - - - Introduction - 介绍 - - - - Welcome to the Mumble Audio Wizard - 欢迎使用 Mumble 音频精灵 - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - 这是 Mumble 音频调节精灵。这将帮你正确设置你的声卡的输入级别,并正确设置 Mumble 的声音处理参数。 - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - 请注意当音频精灵活跃时,音频将被在本地环回以允许你听到它,没有音频会被发送到服务器。 - - - - Finished - 完成 - - - - Enjoy using Mumble - Mumble 祝你使用愉快 - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - 恭喜。现在你可以准备好享受 Mumble 带给你的丰富声音体验. - - - - Device selection - 设备选择 - - - - Selecting the input and output device to use with Mumble. - 选择 Mumble 用来输入和输出的设备. - - - - Input device - 输入设备 - - - - This is the device your microphone is connected to. - 这是你的麦克风连接到的设备。 - - - - - System - 系统 - - - - Input method for audio - 音频输入方法 - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>这是用于音频的输入方法。</b><br />很有可能你想使用 DirectSound。 - - - - - Device - 设备 - - - - Input device to use - 使用的输入设备 - - - - <b>Selects which sound card to use for audio input.</b> - <b>选择哪个声卡用于音频输入。</b> - - - - Use echo cancellation - 使用回声消除 - - - - Cancel echo from headset or speakers. - 消除来自耳机或扬声器的回声. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - 启用送出音频的回声消除,这在扬声器和耳机上都有帮助。 - - - - Output device - 输出设备 - - - - This is the device your speakers or headphones are connected to. - 这是你的扬声器或耳机连接到的设备. - - - - Output method for audio - 音频输出方法 - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>这是用于音频输出的方法。</b><br />很有可能你想使用 DirectSound。 - - - - Output device to use - 使用的输出设备 - - - - <b>Selects which sound card to use for audio Output.</b> - <b>选择哪个声卡用于音频输出。</b> - - - - Enable positional audio - 启用定位音频 - - - - Allows positioning of sound. - 允许声音定位. - - - - This allows Mumble to use positional audio to place voices. - 这允许 Mumble 使用定位音频来放置语音。 - - - - Positional Audio - 定位音频 - - - - Adjusting attenuation of positional audio. - 调节定位音频的衰减量. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble 支持在某些游戏里使用定位音频,并能根据其他玩家在游戏中的位置来定位他们的发言。音量将会根据说话者的位置来改变以模拟他相对于其他玩家的方向和距离。定位音频依赖于你的操作系统正确的配置了扬声器,因此我们对扬声器进行测试。 - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - 下图中显示<font color="red">你</font>的位置,<font color="yellow">扬声器</font>和一个<font color="green">移动的声源</font>。你应该听到音频在声道间切换. - - - - Use headphones - 使用耳机 - - - - Use headphones instead of speakers. - 使用耳机而不是扬声器. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - 这将忽略操作系统的扬声器配置并为耳机配置音频定位. - - - - Volume tuning - 音量调节 - - - - Tuning microphone hardware volume to optimal settings. - 调节麦克风硬件音量到最佳设置。 - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - 打开你的声音控制面板然后打开录音设置。确保麦克风被选为当前使用的输入并使用最大录音音量。如果有启用“麦克风加强”选项,请确保它被选上。 - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - 请大声讲话,就像你在愤怒或兴奋时那样。减小你的声音控制面板里的音量直到下面的进度条在你讲话时尽可能的停留在蓝区和绿区,而<b>不是</b>红区里. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - 现在轻声讲话,就像你在深夜时不想打扰任何人一样。调节下面的滑块直到下面的进度条在你讲话时进入绿区,而在你沉默时停留在蓝区。 - - - - Voice Activity Detection - 语言活动检测 - - - - Letting Mumble figure out when you're talking and when you're silent. - 让 Mumble 分辨出你是在讲话还是在沉默. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - 这将帮助 Mumble 知道你是在讲话。第一步是选择用哪个数据值。 - - - - Raw amplitude from input - 输入的原始振幅 - - - - Signal-To-Noise ratio - 信噪比 - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - 下一步你需要调节下面两个滑块。你最初讲几句话时进度条应该停留在绿区(确定是讲话)。当你讲话时,进度条应该停留在黄区(可能是讲话);当你没讲话时,进度条应该停留在红区(明确没在讲话). - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - 最后,你需要调节宽限时间.在宽限时间内 Mumble 能够侦测到你没在讲话并继续传送,然后断开连接。这允许你在讲话时喘息。 - - - - Device tuning - 设备调节 - - - - Changing hardware output delays to their minimum value. - 修改硬件输出延时到它们的最小值。 - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - 为了保证延时是绝对最小值,让声卡缓冲尽可能少的音频非常重要。然而大多数声卡声称它们需要比实际需求更小的缓冲区,因此设置这个值的唯一方式是去尝试。 - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - 你应该听到一个不断改变频率的单音。移动下面的滑块直到它是<b>不</b>导致声音中断或颤音的最小值。请注意在测试中本地回声将被禁止以改善音频路径识别. - - - - Amount of data to buffer. - 缓冲数据大小。 - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 设置输出缓冲区里前置缓冲的数据大小。试验不同值然后设置成不引起快速颤音的最低值. - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - 如果你将麦克风放到能捕捉扬声器或耳机声音的地方, Mumble 将计算你的系统中的总的音频路径延时;这个延时是自一个声音样本被放到输出缓冲区后直到它在匹配的输入缓冲区里被找到的时间间隔. - - - - %1ms - %1毫秒 - - - - Audio path is %1ms long. - 音频路径长%1毫秒. - - - - Audio path cannot be determined. Input not recognized. - 音频路径无法被确定。输入无法识别. - - - - %1 s - %1 秒 - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Mumble 正处于开发阶段,开发团队致力于开发能使大多数用户受益的功能。Mumble 支持匿名递交你的配置统计信息给开发人员。这些统计信息对于将来的开发非常重要,并确保你使用的功能不会被弃用。 - - - - Submit anonymous statistics to the Mumble project - 递交匿名统计给 Mumble 项目组 - - - - Push To Talk: - 按键通话: - - - - BanEditor - - - Mumble - Edit Bans - Mumble - 编辑黑名单 - - - - &Address - &地址 - - - - &Mask - &子网掩码 - - - - 0.0.0.0 - - - - - &Add - &添加 - - - - &Update - &更新 - - - - &Remove - &删除 - - - - ChanACL - - - W - - - - - T - - - - - E - - - - - S - - - - - A - - - - - M - - - - - K - - - - - C - - - - - L - - - - - None - - - - - Traverse - 遍历 - - - - Enter - 进入 - - - - Speak - 发言 - - - - AltSpeak - 试图发言 - - - - Mute/Deafen - 禁音/耳聋 - - - - Move/Kick - 移动/踢出 - - - - Make channel - 创建频道 - - - - Link channel - 链接频道 - - - - This represents no privileges. - - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - - - - - Write ACL - 创建访问控制列表 - - - - ClientPlayer - - - Authenticated - 已认证 - - - - Muted (server) - 静音(服务器) - - - - Deafened (server) - 耳聋(服务器) - - - - Local Mute - 本地静音 - - - - Muted (self) - 静音(自己) - - - - Deafened (self) - 耳聋(自己) - - - - ConfigDialog - - - Accept changes - 确定 - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - 该按钮将接受当前设置并返回到应用程序。<br/>当你退出应用程序时这些设置将被存盘。 - - - - Reject changes - 取消 - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - 该按钮将拒绝所有修改并返回到应用程序。<br/>这些设置将被重置到先前的设定。 - - - - Apply changes - 应用 - - - - This button will immediately apply all changes. - 该按钮将立即应用所有修改. - - - - Undo changes for current page - 撤销 - - - - This button will revert any changes done on the current page to the most recent applied settings. - 该按钮将复原对当前页的任意修改到最近使用的设置。 - - - - Restore defaults for current page - 恢复默认值 - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - 该按钮将恢复当前页设置到默认值。其他页面的设置将不被修改。<b r/>为了恢复其他页面上的设置到默认值,你需要在每个页面上都使用该按钮。 - - - - Mumble Configuration - Mumble 配置 - - - Tab 1 - 标签 1 - - - - Advanced - - - - - ConnectDialog - - - Connecting to %1 - 正在连接到 %1 - - - - Enter username - 输入用户名 - - - - Unknown - 未知 - - - - Failed to fetch server list - 无法获取服务器列表 - - - - - New - 新建 - - - - -Unnamed entry- - -未命名条目- - - - - - Add - 添加 - - - - Update - 更新 - - - - Mumble Server Connect - Mumble 服务器连接 - - - - &Custom Servers - &自定义服务器 - - - - &Label - &标签 - - - - A&ddress - &地址 - - - - &Port - &端口 - - - - &Username - &用户名 - - - - &Password - &密码 - - - - &Connect - &连接 - - - - &Cancel - &取消 - - - - &Add - &添加 - - - - &Remove - &删除 - - - - Server &Browser - 服务器&浏览器 - - - - Label - 标签 - - - - Address - 地址 - - - - URL - 网址 - - - - Cancel - 取消 - - - - C&opy to custom - &拷贝到自定义 - - - - &View Webpage - &查看主页 - - - - CoreAudioSystem - - - Default Device - 默认设备 - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - - Default DirectSound Voice Input - 默认 DirectSound 语音输入 - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - 不能打开所选 DirectSound 输入设备。不能捕捉麦克风。 - - - - Opening chosen DirectSound Input failed. Default device will be used. - 不能打开所选 DirectSound 输入。将使用默认设备。 - - - - Lost DirectSound input device. - 丢失 DirectSound 输入设备。 - - - - DXAudioOutput - - - Default DirectSound Voice Output - 默认 DirectSound 语音输出 - - - - Opening chosen DirectSound Output failed. Default device will be used. - 不能打开所选 DirectSound 输出。将使用默认设备。 - - - - Lost DirectSound output device. - 丢失 DirectSound 输出设备。 - - - - Opening chosen DirectSound Output failed. No audio will be heard. - 不能打开所选 DirectSound 输出。将听不到音频。 - - - - Database - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble 无法在任何可能的位置里初始化数据库. - - - - GlobalShortcut - - - Shortcuts - 快捷键 - - - - List of configured shortcuts - 配置好的快捷键列表 - - - - Function - 功能 - - - - Shortcut - 快捷键 - - - - Suppress - 禁止 - - - - Add new shortcut - 添加新快捷键 - - - - This will add a new global shortcut - 这将添加一个新的全局快捷键 - - - - &Add - &添加 - - - - Remove selected shortcut - 移除所选快捷键 - - - - This will permanently remove a selected shortcut. - 这将永久性的删除所选快捷键。 - - - - &Remove - &删除 - - - - GlobalShortcutConfig - - - Shortcuts - 快捷键 - - - - Shortcut button combination. - 快捷键按钮组合. - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>这是全局快捷键组合。</b><br />双击该区域然后绑定想要的按键/按钮组合。 - - - - Suppress keys from other applications - 禁止其他应用程序使用的按键 - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>向其他应用程序隐藏这些按键。</b><br/>允许该选项将向其他应用程序隐藏指定按键(或者组合按键的最后一个按键)。注意并不是所有按键都能被禁用。 - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble 检测到当它位于后台时它不能接收到全局快捷键事件。<br /><br />这是因为被称为‘允许辅助设备的使用’的辅助使用功能当前被禁用。<br /><br />请<a href=" ">启用该选项</a>然后继续。 - - - - GlobalShortcutX - - - Mouse %1 - 鼠标 %1 - - - - LCD - - - Not connected - 未连接 - - - - LCDConfig - - - Graphic - 图形 - - - - Character - 字符 - - - - Enable this device - 启用该设备 - - - - LCD - - - - - Form - 表单 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - 设备 - - - - Name - 名称 - - - - Type - 类型 - - - - Size - 大小 - - - - Enabled - 已启用 - - - - Views - 视图 - - - - Minimum Column Width - 最小列宽 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - 文本标签 - - - - Splitter Width - 分割线宽度 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - 调试 - - - - Critical - 紧急 - - - - Warning - 警告 - - - - Information - 信息 - - - - Server Connected - 服务器已连接 - - - - Server Disconnected - 服务器已断开连接 - - - - Player Joined Server - 玩家加入服务器 - - - - Player Left Server - 玩家离开服务器 - - - - Player kicked (you or by you) - 玩家踢出你(或被你踢出) - - - - Player kicked - 玩家被踢出 - - - - You self-muted/deafened - 你自我静音/耳聋 - - - - Other self-muted/deafened - 其他人自我静音/耳聋 - - - - Player muted (you) - 玩家对你静音 - - - - Player muted (by you) - 玩家被你静音 - - - - Player muted (other) - 玩家静音其他人 - - - - Player Joined Channel - 玩家加入频道 - - - - Player Left Channel - 玩家离开频道 - - - - Permission Denied - 没有权限 - - - - Text Message - 文本消息 - - - Script Errors - 脚本错误 - - - - LogConfig - - - Toggle console for %1 events - 为 %1 事件启用控制台 - - - - Toggle pop-up notifications for %1 events - 为 %1 事件启用弹出窗口通知 - - - - Toggle Text-To-Speech for %1 events - 为%1事件启用文本语音转换 - - - - Click here to toggle sound notification for %1 events - 点击这里为 %1 事件启用声音通知 - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - 在 %1 事件发生时用于声音通知的声音文件的路径<br />单击播放<br/>双击更改 - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - 点击这里为 %1 事件启用控制台输出。<br />如果选中,该选项使 Mumble 输出所有 %1 事件到它的消息日志中。 - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - 点击这里为 %1 事件启用弹出窗口通知。<br />如果选中, Mumble 将为每个 %1 事件创建一个弹出窗口。 - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - 点击这里为 %1 事件启用文本语音转换.<br />如果选中, Mumble 会使用文本语音转化将 %1 事件大声的读出来给你听。当声音文件无效时,文本语音转换也能读取事件内容。文本语音转化和声音文件不能同时使用。 - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - 点击这里为 %1 事件启用声音通知。<br />如果选中, Mumble 会使用一个你预先定义的声音文件来标示 %1 事件。声音文件和文本语音转换不能同时被使用。 - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - 在 %1 事件发生时用于声音通知的声音文件的路径。<br />单击播放<br />双击更换<br />请确认这些事件的声音通知被启用,否则这个字段将没有任何效果。 - - - - Choose sound file - 选择声音文件 - - - - Invalid sound file - 无效声音文件 - - - - The file '%1' does not exist or is not a valid speex file. - 文件 ‘%1’ 不存在或者不是一个有效的语音编码文件。 - - - - Messages - 消息 - - - - Message - 消息 - - - - Console - 控制台 - - - - Notification - 通知 - - - - Text-To-Speech - 文本语音转换 - - - - Soundfile - 声音文件 - - - - Path - 路径 - - - - Text To Speech - 文本语音转换 - - - - Volume - 音量 - - - - Volume of Text-To-Speech Engine - 文本语音转换引擎的音量 - - - - <b>This is the volume used for the speech synthesis.</b> - <b>这是用于语音合成的音量。</b> - - - - Length threshold - 长度阈值 - - - - Message length threshold for Text-To-Speech Engine - 用于文本语音转换的消息长度阈值 - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>这是用于文本语音转换引擎的消息长度阈值。</b><br />消息长于此值时将不会被全部读出来。 - - - - Characters - 字符 - - - - LookConfig - - - - System default - 系统默认 - - - - None - - - - - Only with players - 仅当有玩家时 - - - - All - 所有 - - - - Ask - 询问 - - - - Do Nothing - 无动作 - - - - Move - 移动 - - - - User Interface - 用户界面 - - - - Choose skin file - 选择皮肤文件 - - - - Form - 表单 - - - - Language - 语言 - - - - Language to use (requires restart) - 使用的语言(需要重启) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>设置 Mumble 使用哪种语言。</b><br />你需要重启 Mumble 来使用新语言。 - - - - Look and Feel - 外观 - - - - Style - 风格 - - - - Basic widget style - 基本窗口风格 - - - - <b>This sets the basic look and feel to use.</b> - <b>设置使用基本外观。</b> - - - - Skin - 皮肤 - - - - Skin file to use - 使用的皮肤文件 - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>设置 Mumble 应该使用哪个皮肤文件。</b><br/>皮肤是一个应用在基本窗口风格上的风格文件。如果在与风格相同的目录里有图标,目录中的图标将替换默认图标。 - - - - ... - - - - - Expand - 展开 - - - - When to automatically expand channels - 什么时候自动展开频道 - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - 设置哪些频道将自动展开。<i>无</i>和<i>所有</i>将展开零个或所有频道,而<i>仅当有玩家时<i>将在玩家加入和离开时自动展开和折叠频道。 - - - - List players above subchannels (requires restart). - 在子频道之上列出玩家(需要重启)。 - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>如果选中,玩家将被显示在子频道之上.</b><br/>需要重启 Mumble 来使改变生效。 - - - - Players above Channels - 玩家位于频道之上 - - - - Channel Dragging - 频道拖动 - - - - This changes the behaviour when moving channels. - 改变当移动频道时的行为。 - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - 设置频道拖动时的行为,能被用来防止意外的拖动。<i>移动频道</i>将在移动频道时不做提示.<i>无动作</i>将在试图移动频道时显示一个出错信息。<i>询问</i>使用一个消息框来确认你是真的想移动一个频道。 - - - - Ask whether to close or minimize when quitting Mumble. - 询问退出 Mumble 时是关闭还是最小化。 - - - - <b>If set, will verify you want to quit if connected.<b> - <b>如果选中,当你连接到服务器时将验证你是否想退出.</b> - - - - Ask on quit while connected - 当你连接到服务器时询问是否退出 - - - - Make the Mumble window appear on top of other windows. - 使 Mumble 窗口位于其他窗口之上. - - - - <b>This makes the Mumble window a topmost window.</b> - <b>这将使 Mumble 窗口成为最上面的窗口。</b> - - - - Always On Top - 总在最上 - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>如果选中,最小化 Mumble 主窗口时将使得它被隐藏到系统托盘。否则,它将会像通常一样被最小化。</b> - - - - Hide in tray when minimized - 最小化时隐藏到系统托盘 - - - Show all configuration items - 显示所有配置选项 - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>显示所有配置选项.</b><br/> Mumble 包含许多大多数用户不需要改变的选项。选中该选项将显示所有可配置选项。 - - - Expert Config - 专家配置选项 - - - - Hide the main Mumble window in the tray when it is minimized. - 当最小化时,隐藏 Mumble 主窗口到系统托盘。 - - - - MainWindow - - - - Root - - - - - Push-to-Talk - Global Shortcut - 按键通话 - - - - Push and hold this button to send voice. - Global Shortcut - 按住该按钮来发送语音。 - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - 配置按键发音按键,只要你按住该按键,语音将被传送。 - - - - Reset Audio Processor - Global Shortcut - 重置音频处理器 - - - - Toggle Mute Self - Global Shortcut - 切换自我静音 - - - - Toggle self-mute status. - Global Shortcut - 切换自我静音状态。 - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - 该选项将切换自我静音状态。如果你关闭静音状态,将同时关闭自我耳聋状态。 - - - - Toggle Deafen Self - Global Shortcut - 切换自我耳聋 - - - - Toggle self-deafen status. - Global Shortcut - 切换自我耳聋状态。 - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - 该选项切换自我耳聋状态。如果打开此选项,将同时启用自我禁音。 - - - - Unlink Plugin - Global Shortcut - 卸载插件 - - - - Force Center Position - Global Shortcut - 强制居中 - - - - Chan Parent - Global Shortcut - 父频道 - - - - Chan Sub#%1 - Global Shortcut - 子频道#%1 - - - - Chan All Subs - Global Shortcut - 所有子频道 - - - - Push-to-Mute - Global Shortcut - 按键禁音 - - - - Join Channel - Global Shortcut - 加入频道 - - - - Toggle Overlay - Global Shortcut - 切换 Overlay - - - - Toggle state of in-game overlay. - Global Shortcut - 切换游戏中的 overlay 状态。 - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - 在显示所有人,只有发言的玩家和不显示任何人之间切换游戏中的 overlay 状态。 - - - - Alt Push-to-Talk - Global Shortcut - 交替按键通话 - - - - Toggle Minimal - Global Shortcut - 切换最小化 - - - - Volume Up (+10%) - Global Shortcut - 增大音量(+10%) - - - - Volume Down (-10%) - Global Shortcut - 减小音量(-10%) - - - - Mumble - - - - - Mumble -- %1 - - - - - &Window - &窗口 - - - - - Minimize - 最小化 - - - - Ctrl+M - - - - - Close - 关闭 - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - Mumble 现在连接到了一个服务器。你想要关闭还是最小化它? - - - - Clear - 清除 - - - - Opening URL %1 - 打开网址 %1 - - - - URL scheme is not 'mumble' - 'Mumble' 不支持的网址方案 - - - - Connecting to %1 - 正在连接到 %1 - - - - Enter username - 输入用户名 - - - - Reconnecting. - 正在重新连接中。 - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>控制信道</h2><p>使用 %1 比特 %2 加密<br />平均延迟 %3 毫秒(%4 方差)</p> - - - - Voice channel is sent over control channel. - 语音频道通过控制信道发送。 - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>语音频道</h2><p>使用 128 比特 OCB-AES128 加密<br/>%1 毫秒延迟(%4 方差)</p> - - - - UDP Statistics - UDP 统计 - - - - To Server - 到服务器 - - - - From Server - 来至服务器 - - - - Good - 良好 - - - - Late - 迟到 - - - - Lost - 丢失 - - - - Resync - 重新同步 - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>音频带宽</h2><p>最大 %1千比特/秒<br />当前 %2 千比特/秒 (质量 %3)</p> - - - - Mumble Server Information - Mumble 服务器信息 - - - - - &View Certificate - &查看认证 - - - - Kicking player %1 - 踢出玩家 %1 - - - - - Enter reason - 输入原因 - - - - Banning player %1 - 封禁玩家 %1 - - - - Sending message to %1 - 发送消息给 %1 - - - - - To %1: %2 - 发送给 %1: %2 - - - - - Message to %1 - 发送消息给 %1 - - - - - Channel Name - 频道名 - - - - Are you sure you want to delete %1 and all its sub-channels? - 你确信要删除 %1和它的子频道吗? - - - - Change description of channel %1 - 改变频道 %1的描叙 - - - - Sending message to channel %1 - 发送消息给频道 %1 - - - - Sending message to channel tree %1 - 发送消息给频道树 %1 - - - - To tree %1: %2 - 发送给树 %1: %2 - - - - Message to tree %1 - 发送消息给树 %1 - - - - Unmuted and undeafened. - 解除静音并解除耳聋。 - - - - Unmuted. - 解除静音。 - - - - Muted. - 静音。 - - - - Muted and deafened. - 禁音和耳聋. - - - - Deafened. - 耳聋. - - - - Undeafened. - 解除耳聋。 - - - - About Qt - 关于 Qt - - - - Joining %1. - 加入 %1. - - - - Connected to server %1. - 已连接到服务器 %1. - - - - SSL Verification failed: %1 - SSL 认证失败: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>警告:</b>服务器提供的认证与保存的认证不同。 - - - - Sever presented a certificate which failed verification. - 服务器提供的认证认证失败。 - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br /> 认证中的错误是:</p><ol>%2</ol><p>你希望接受认证吗?<br />(认证将被保存从而你不会被再次索要认证。)</p> - - - - Server connection failed: %1. - 连接服务器失败: %1. - - - - Disconnected from server. - 与服务器断开连接. - - - - Invalid username - 无效用户名 - - - - You connected with an invalid username, please try another one. - 你使用一个无效的用户名连接,请尝试别外一个。 - - - - That username is already in use, please try another username. - 用户名已经被使用,请使用另外一个用户名。 - - - - Wrong password - 密码错误 - - - - Wrong password for registered users, please try again. - 注册用户密码错误,请重试。 - - - - Wrong server password for unregistered user account, please try again. - 未注册用户的服务器密码错误,请重试。 - - - - &Server - &服务器 - - - - &Player - &玩家 - - - - &Channel - &频道 - - - - &Audio - &音频 - - - - C&onfigure - &配置 - - - - &Help - &帮助 - - - - Log - 日志 - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - 这里显示所有最近的活动。正在连接到服务器,错误和通知消息都将在这里显示。<br />要准确配置什么消息将被显示在这里,请从菜单中使用<b>设置</b>命令。 - - - - &Quit Mumble - &退出 Mumble - - - - Closes the program - 关闭程序 - - - - Exits the application. - 退出应用程序。 - - - - Ctrl+Q - - - - - &Connect - &连接 - - - - Open the server connection dialog - 打开服务器连接对话框 - - - - Shows a dialog of registered servers, and also allows quick connect. - 显示一个已注册服务器的对话框,并允许快速连接。 - - - - &Disconnect - &断开 - - - - Disconnect from server - 从服务器断开连接 - - - - Disconnects you from the server. - 使你从服务器断开连接。 - - - - &Ban lists - &黑名单 - - - - Edit ban lists on server - 编辑服务器上的黑名单 - - - - This lets you edit the server-side IP ban lists. - 这让你编辑服务器端的网址黑名单。 - - - - &Information - &信息 - - - - Show information about the server connection - 显示服务器连接信息 - - - - This will show extended information about the connection to the server. - 显示服务器连接的扩展信息. - - - - &Kick - &踢出 - - - - Kick player (with reason) - 踢出玩家(理由) - - - - Kick selected player off server. You'll be asked to specify a reason. - 从服务器踢出所选玩家。你将被要求指定一个原因。 - - - - &Mute - &静音 - - - - Mute player - 静音玩家 - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - 在服务器上对玩家静音或取消静音。取消静音一个耳聋的玩家将同时对他取消耳聋。 - - - - &Ban - &封禁 - - - - Kick and ban player (with reason) - 踢出并封禁玩家(理由) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - 从服务器踢出并封禁所选玩家。你将被要求指定一个原因。 - - - - &Deafen - &耳聋 - - - - Deafen player - 耳聋玩家 - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - 在服务器上使玩家耳聋或取消耳聋。耳聋一个玩家将同时对他静音。 - - - - &Local Mute - &本地静音 - - - - Mute player locally - 本地对玩家静音 - - - - Mute or unmute player locally. Use this on other players in the same room. - 本地对玩家静音或者取消静音. 对相同房间的其他玩家使用该选项。 - - - - Send Messa&ge - 发送&消息 - - - - Send a Text Message - 发送一条文本消息 - - - - Sends a text message to another user. - 向另一个用户发送一条文本消息。 - - - - &Add - &添加 - - - - Add new channel - 添加一个新频道 - - - - This adds a new sub-channel to the currently selected channel. - 在当前所选频道内添加一个子频道。 - - - - &Remove - &删除 - - - - Remove channel - 删除频道 - - - - This removes a channel and all sub-channels. - 删除一个频道及其所有子频道。 - - - - &Edit ACL - &编辑 访问控制列表 - - - - Edit Groups and ACL for channel - 为频道编辑群和访问控制列表 - - - - This opens the Group and ACL dialog for the channel, to control permissions. - 打开频道的群和访问控制列表对话框,来控制频道的访问权限。 - - - - &Rename - &重命名 - - - - Renames the channel - 重命名频道 - - - - This renames a channel. - 重命名一个频道。 - - - - &Change Description - &修改描叙 - - - - Changes the channel description - 修改频道描叙 - - - - This changes the description of a channel. - 修改一个频道的描叙。 - - - - &Link - &链接 - - - - Link your channel to another channel - 链接你的频道和另一个频道 - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - 链接你的当前频道和所选频道。如果他们有权限在对方频道讲话,玩家现在能听到彼此的声音。这是个永久性的链接,直到手动取消链接或者服务器重启。请查看按键链接快捷键。 - - - - &Unlink - Channel - &取消链接 - - - - Unlink your channel from another channel - 取消你的频道和另一个频道之间的链接 - - - - This unlinks your current channel from the selected channel. - 取消你的当前频道和所选频道之间的链接。 - - - - Unlink &All - 取消&所有链接 - - - - Unlinks your channel from all linked channels. - 取消你的频道和所有已链接频道之间的链接。 - - - - This unlinks your current channel (not the selected one) from all linked channels. - 取消你的当前频道(非所选频道)和所有已链接的频道之间的链接。 - - - - &Reset - &重置 - - - - Reset audio preprocessor - 重置音频预处理器 - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - 该选项将重置音频预处理器,包含噪音消除,自动获取和语音活动检测。如果音频环境突然变的恶劣(比如掉麦)并且是暂时的,使用该选项来避免等待预处理器自我调节。 - - - - &Mute Self - &静音自己 - - - - Mute yourself - 自我静音 - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - 对自己静音或取消静音。当静音时,你将不会发送数据到服务器。当耳聋时取消静音将同时取消耳聋。 - - - - &Deafen Self - &耳聋自己 - - - - Deafen yourself - 自我耳聋 - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - 使自己耳聋或取消耳聋。当耳聋时,你将听不到声音。耳聋自己将同时静音自己。 - - - - &Text-To-Speech - &文本语音转换 - - - - Toggle Text-To-Speech - 切换文本语音转换 - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - 启用或禁用文本语音转换引擎。只有在配置对话框里被启用了文本语音转换的消息才会被读出来。 - - - - S&tatistics - &统计 - - - - Display audio statistics - 显示音频统计 - - - - Pops up a small dialog with information about your current audio input. - 弹出一个关于你当前音频输入信息的对话框。 - - - - &Unlink - Plugin - &卸载 - - - - Forcibly unlink plugin - 强行卸载插件 - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - 强行卸载当前插件,当插件读取的数据完全错误时相当有用。 - - - - &Settings - &设置 - - - - Configure Mumble - 配置 Mumble - - - - Allows you to change most settings for Mumble. - 允许你改变 Mumble 的大多数设置。 - - - - &Audio Wizard - &音频精灵 - - - - Start the audio configuration wizard - 启动音频配置精灵 - - - - This will guide you through the process of configuring your audio hardware. - 这将引导你进入配置你的音频硬件的流程。 - - - - &What's This? - &这是什么? - - - - Enter What's This? mode - 进入 这是什么? 模式 - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - 点击进入"这是什么?"模式。你的鼠标指针将变成一个问号。点击任意按钮,菜单或区域来显示它是什么的描叙。 - - - - &About - &关于 - - - - Information about Mumble - Mumble 的相关信息 - - - - Shows a small dialog with information and license for Mumble. - 显示一个 Mumble 相关信息和许可的对话框。 - - - - About &Speex - 关于 &Speex - - - - Information about Speex - Speex 的相关信息 - - - - Shows a small dialog with information about Speex. - 显示一个 Speex 相关信息的小对话框。 - - - - About &Qt - 关于 &Qt - - - - Information about Qt - Qt 相关信息 - - - - Shows a small dialog with information about Qt. - 显示一个 Qt 相关信息的小对话框。 - - - - Check for &Updates - 检测&更新 - - - - Check for new version of Mumble - 检测 Mumble 的新版本 - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - 连接到 Mumble 主页来检测是否有新版本可用,如果有新版本可用将通知你下载。 - - - - Sends a text message to all users in a channel. - 向频道内所有用户发送文本信息。 - - - - Send &Tree Message - 发送信息到频道&树 - - - - Send message to channel tree. - 向频道树发送信息. - - - - This sends a text message to a channel and it's subchannels. - 向一个频道及其所有子频道发送文本消息。 - - - - &Minimal View - &简化窗口 - - - - Toggle minimal window modes - 启用简化窗口模式 - - - - This will toggle minimal mode, where the log window and menu is hidden. - 这将启用简化窗口模式,该模式将隐藏日志窗口和菜单。 - - - - Joined server: %1. - 加入服务器: %1. - - - - Left server: %1. - 离开服务器: %1. - - - - %1 is now muted and deafened. - %1 现在被静音和耳聋. - - - - %1 is now muted. - %1 现在被静音。 - - - - %1 is now unmuted. - %1 现在被取消静音。 - - - - - server - 服务器 - - - - You were muted by %1. - 你被 %1 静音。 - - - - You were unmuted by %1. - 你被 %1 取消静音。 - - - - %1 muted by %2. - %1 被 %2 静音。 - - - - %1 unmuted by %2. - %1 被 %2 取消静音。 - - - - You were deafened by %1. - 你被 %1 耳聋。 - - - - You were undeafened by %1. - 你被 %1 取消耳聋。 - - - - %1 deafened by %2. - %1 被 %2 耳聋。 - - - - %1 undeafened by %2. - %1 被 %2 取消耳聋。 - - - - You were kicked from the server by %1: %2. - 你被 %1 从服务器踢出: %2。 - - - - %3 was kicked from the server by %1: %2. - %3 被 %1 从服务器踢出: %2。 - - - - You were kicked and banned from the server by %1: %2. - 你被 %1 从服务器踢出并封禁: %2。 - - - - %3 was kicked and banned from the server by %1: %2. - %3 被 %1 从服务器踢出并封禁: %2。 - - - - You were moved to %1 by %2. - 你被从 %1 移动到 %2。 - - - - %1 left channel. - %1 离开频道。 - - - - %1 moved out by %2 to %3. - %1 被 %2 移动到 %3。 - - - - %1 moved in by %2 from %3. - %1 被 %2 从 %3 移入。 - - - - %1 entered channel. - %1 进入频道。 - - - - Server connection rejected: %1. - 服务器拒绝连接: %1。 - - - - Denied: %1. - 拒绝: %1。 - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - 服务器最大带宽是 %1 千比特/秒。自动调整质量。 - - - - From %1: %2 - 发送自 %1: %2 - - - - Message from %1 - 来至 %1 的消息 - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - 你设置频道拖动为“无动作"因此频道没有被移动。 - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - 未知的频道拖动模式 PlayerModel::dropMimeData。 - - - - Welcome to Mumble. - 欢迎来到 Mumble。 - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - 这是你第一次启动 Mumble.<br />你想用音频精灵配置声卡吗? - - - - Server - message from - 服务器 - - - - Hide Frame - 隐藏边框 - - - - Toggle showing frame on minimal window - 在简化窗口模式下切换边框显示 - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - 该选项切换简化窗口是否有个用来移动和改变大小的边框。 - - - - NetworkConfig - - - Network - 网络 - - - - Form - 表单 - - - - Connection - 连接 - - - - Use TCP compatibility mode - Use TCP compatability mode - 使用 TCP 兼容模式 - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>启用 TCP 兼容模式</b>。<br/>这将使 Mumble 与服务器通信时只使用 TCP。这将增加系统开销并导致丢包从而使通信时出现明显的暂停,因此只有在你不能使用默认模式时使用它(默认模式使用 UDP 来传输语音,TCP 来控制)。 - - - - Use TCP mode - 使用 TCP 模式 - - - - Reconnect when disconnected - 连接断开后重新连接 - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>连接断开后重新连接</b>。<br/>这将使 Mumble 在与服务器的连接断开 10秒后自动重新连接。 - - - - Reconnect automatically - 自动重新连接 - - - - Proxy - 代理 - - - - Type - 类型 - - - - Type of proxy to connect through - 连接通过的代理类型 - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - <b>连接通过的代理类型</b><br/>这使 Mumble 通过代理来连接到所有出外的连接。注意: 代理隧道封装会迫使 Mumble 进入 TCP 兼容模式,导致所有语音数据都通过控制信道发送。 - - - - Direct connection - 直接连接 - - - - HTTP(S) proxy - HTTP(S) 代理 - - - - SOCKS5 proxy - SOCKS5 代理 - - - - Hostname - 主机名 - - - - Hostname of the proxy - 代理主机名 - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>代理主机名。</b><br />该字段指定你希望用来穿隧传输网络流量的代理主机名。 - - - - Port - 端口 - - - - Port number of the proxy - 代理端口号 - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>代理服务器端口号。</b><br/>该字段指定代理服务器使用的端口号。 - - - - Username - 用户名 - - - - Username for proxy authentication - 用于代理认证的用户名 - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>用于代理认证的用户名。</b><br />该字段指定用于代理认证的用户名。如果代理不需要认证,或者你想要使用匿名连接,请将此字段留白。 - - - - Password - 密码 - - - - Password for proxy authentication - 用于代理认证的密码 - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>用于代理认证的密码。</b><br/>该字段指定用于代理认证的密码。如果代理不需要认证,或者你想要使用匿名连接,请将此字段留白。 - - - - Mumble services - Mumble 服务 - - - - Check for updates on startup - 启动时检测更新 - - - - Submit anonymous statistics to the Mumble project - 递交匿名统计数据给 Mumble 项目 - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>递交匿名统计数据。</b><br />Mumble 有一个小的开发团队,并需要专注于开发用户最想要的功能。通过递交匿名统计数据你将帮助开发团队确定重点开发什么。 - - - - Submit anonymous statistics - 递交匿名统计数据 - - - - Overlay - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - 无法加载 overlay 库。这意味着: -- 库(mumble_ol.dll)没有在 Mumble 的运行目录里被找到。 -- 你的操作系统版本低于 WinXP SP2 -- 你的 DX9.0C 版本低于 2007年6月升级版 - - - - OverlayConfig - - Show no one - 不显示任何人 - - - Show only talking - 当发言时显示 - - - Show everyone - 显示所有人 - - - Form - 表单 - - - Options - 选项 - - - Enable overlay. - 启用 overlay . - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - 设置是否启用 overlay。该设置仅当应用程序已启动时才会被检查,因此确保 Mumble 正在运行并且该选项在你启动应用程序之前已被打开。<br />请注意如果你在启动 Mumble 后启动应用程序,或者你在运行时禁用 overlay,重新启动 overlay 需要重新启动应用程序。 - - - Enable Overlay - 启用 Overlay - - - Who to show on the overlay - 在 overlay 上显示谁 - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>设置在游戏中的 overlay 内显示谁。</b><br />如果许多玩家已经连接到同一个频道,overlay 列表可能会非常长。使用该选项来让列表变短。<br /><i>无人</i> - 不显示任何人(但是让 overlay 运行).<br /><i>仅当用户发言时</i> - 仅显示正在发言的人。<br /><i>所有人</i> - 显示所有人。 - - - Always show yourself on overlay. - 在 overlay 上总是显示自己。 - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - 设置是否总是显示自己。该选项只有当你不在 overlay 中显示所有人时才有用,你在讲话时只能看到自己的状态,你将看不到自己被禁音或耳聋。 - - - Always Show Self - 总是显示自己 - - - Show User custom textures instead of text on the overlay. - 在 overlay 上显示用户自定义纹理而不是文本。 - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - 设置是否让注册用户下载并使用自定义纹理。如果禁用该选项,常规边框文字将被使用。 - - - Show User Textures - 显示用户纹理 - - - Position - 位置 - - - Let overlay grow upwards - 让 overlay 往上增长 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - Overlay 试着保持足够小并固定在你选定的位置上。该选项允许 overlay 在需要时往上增长。 - - - Grow Up - 往上增长 - - - Y-Position of Overlay - Overlay 的 Y-坐标 - - - This sets the relative Y position of the overlay. - 设置 overlay 的相对 Y 坐标。 - - - Let overlay grow to the left - 让 overlay 往左增长 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Overlay 试着保持足够小并固定在你选定的位置上。该选项允许 overlay 在需要时往左增长。 - - - Grow Left - 往左增长 - - - Let overlay grow to the right - 让 overlay 往右增长 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - Overlay 试着保持足够小并固定在你选定的位置上。该选项允许 overlay 在需要时往右增长。 - - - Grow Right - 往右增长 - - - Let overlay grow downwards - 让 overlay 往下增长 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - Overlay 试着保持足够小并固定在你选定的位置上。该选项允许 overlay 在需要时往下增长。 - - - Grow Down - 往下增长 - - - X-Position of Overlay - Overlay 的 X-坐标 - - - This sets the relative X position of the overlay. - 设置 overlay 的相对 X 坐标。 - - - Font - 字体 - - - Current Font - 当前字体 - - - TextLabel - 文本标签 - - - Set Font - 设置字体 - - - Maximum height - 最大高度 - - - Maximum height of names. - 名字的最大高度. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - 设置显示的名字的最大高度,相对于屏幕高度来说。如果你的活跃 3D 窗口是 800像素高而该值被设成 5%,每个名字会是 40像素高。注意无论你在这里设置什么值名字都不会高于 60像素. - - - Color for players - 玩家颜色 - - - Change - 更改 - - - Color for talking players - 正在发言玩家的颜色 - - - Color for alt-talking players - 试图发言玩家的颜色 - - - Color for Channels - 频道的颜色 - - - Color for active Channels - 活跃频道的颜色 - - - - PlayerModel - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - 这是一个连接到服务器的玩家。玩家左边的图标显示他是否在讲话。<br /><img src="skin:talking_on.png" />发言中<br /><img src="skin:talking_off.png" /> 沉默中 - - - - This is a channel on the server. Only players in the same channel can hear each other. - 这是服务器上的一个频道。只有同一频道的玩家能听到彼此的声音。 - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - 显示该玩家在服务器上的标志:<br /><img src="skin:authenticated.png" />已认证的用户<br /><img src="skin:muted_self.png" />静音(被自己)<br /><img src="skin:muted_server.png" />静音(被管理员)<br /><img src="skin:deafened_self.png" />耳聋 (被自己)<br /><img src="skin:deafened_server.png" />耳聋 (被管理员)<br />玩家被自己禁音有可能是他处于离开状态,比如在接电话。<br />玩家被管理员禁音也有可能是他处于离开状态,但是他发出了让管理员恼怒到禁音他的噪音。 - - - - Name - 名字 - - - - Flags - 标志 - - - - Are you sure you want to drag this channel? - 你确信要拖动这个频道吗? - - - - PluginConfig - - - - Plugins - 插件 - - - - Plugin has no configure function. - 插件没有配置选项。 - - - - Plugin has no about function. - 插件没有关于选项. - - - - Form - 表单 - - - - Options - 选项 - - - - Enable plugins and transmit positional information - 启用插件并传送位置信息 - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - 对支持的游戏启用插件以获取你在游戏中的位置并在每个语音包中传送。这将使别的玩家能根据你在游戏中的声音来判断你在游戏中相对于他们自己的方位。 - - - - Link to Game and Transmit Position - 链接到游戏并传送位置 - - - - Reloads all plugins - 重载所有插件 - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - 重新扫描和重载插件。当你添加或改变一个插件目录中的插件时使用该选项。 - - - - &Reload plugins - &重载插件 - - - - Information about plugin - 插件相关信息 - - - - This shows a small information message about the plugin. - 显示插件相关信息。 - - - - &About - &关于 - - - - Show configuration page of plugin - 显示插件配置页面 - - - - This shows the configuration page of the plugin, if any. - 显示插件配置页面。 - - - - &Configure - &配置 - - - - Plugins - - - %1 lost link. - %1 的链接丢失。 - - - - %1 linked. - %1 已链接上。 - - - - PortAudioSystem - - - Default Device - 默认设备 - - - - PulseAudioSystem - - - Default Input - 默认输入 - - - - Default Output - 默认输出 - - - - ShortcutActionWidget - - - Unassigned - 未分配 - - - - ShortcutDelegate - - - Unassigned - 未分配 - - - - ShortcutKeyWidget - - - Press Shortcut - 输入快捷键 - - - - TextMessage - - Send raw message - 发送原始消息 - - - Disables html formating - 禁用 html 格式化 - - - - Message to send - 要发送的消息 - - - - Preview - 预览 - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble failed to retrieve version information from the SourceForge server. - Mumble 无法从 SouceForge 服务器获取版本信息。 - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - 认证链详细信息 - - - - Certificate chain - 认证链 - - - - %1 %2 - - - - - Certificate details - 认证详细信息 - - - - - Common Name: %1 - 通用名: %1 - - - - - Organization: %1 - 组织: %1 - - - - Subunit: %1 - 部门: %1 - - - - - Country: %1 - 国家: %1 - - - - - Locality: %1 - 位置: %1 - - - - - State: %1 - 省(市): %1 - - - - Valid from: %1 - 有效期始于: %1 - - - - Valid to: %1 - 有效期到: %1 - - - - Serial: %1 - 序列号: %1 - - - - Public Key: %1 bits %2 - 公开密钥: %1 比特 %2 - - - - RSA - 非对称加密算法 - - - - DSA - 数字签名算法 - - - - Digest (MD5): %1 - - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - 发布者: - - - - Unit Name: %1 - 部门名: %1 - - - - WASAPISystem - - - Default Device - 默认设备 - - - diff -Nru mumble-1.2.3/src/mumble11x/mumble_zh_TW.ts mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_zh_TW.ts --- mumble-1.2.3/src/mumble11x/mumble_zh_TW.ts 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/mumble_zh_TW.ts 1970-01-01 00:00:00.000000000 +0000 @@ -1,4936 +0,0 @@ - - - - - ACLEditor - - - Mumble - Edit ACL for %1 - Mumble - 編輯 訪問控制列表 %1 - - - - Deny - 拒絕 - - - - Allow - 允許 - - - - Allow %1 - 允許 %1 - - - - Deny %1 - 拒絕 %1 - - - - This grants the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - 授予 %1 權限.如果一個權限同時被拒絕和允許,則被視為拒絕。<br />%2 - - - - This revokes the %1 privilege. If a privilege is both allowed and denied, it is denied.<br />%2 - 撤銷 %1 權限.如果一個權限同時被拒絕和允許,則被視為拒絕。<br />%2 - - - - Dialog - 對話框 - - - - &Groups - &群 - - - - Group - - - - - List of groups - 群列表 - - - - This is all the groups currently defined for the channel. To create a new group, just type in the name and press enter. - 這是當前頻道內定義的所有群。要創建一個新群,請輸入群名然后按回車。 - - - - Remove selected group - 刪除選中的群 - - - - This removes the currently selected group. If the group was inherited, it will not be removed from the list, but all local information about the group will be cleared. - 刪除當前選中的群。如果該群有子群,它將不會被從列表中刪除,但是與該群相關的所有本地信息將被清除. - - - - Remove - 刪除 - - - - Inherit group members from parent - 從父繼承群成員 - - - - This inherits all the members in the group from the parent, if the group is marked as <i>Inheritable</i> in the parent channel. - 如果群在父頻道里被標記為<i>可繼承</i>,則從父繼承所有群成員。 - - - - Inherit - 繼承 - - - - Make group inheritable to sub-channels - 使群可被子頻道繼承 - - - - This makes this group inheritable to sub-channels. If the group is non-inheritable, sub-channels are still free to create a new group with the same name. - 使該群可被子頻道繼承。如果該群不可被繼承,則可在子頻道內創建同名新群。 - - - - Inheritable - 可繼承 - - - - Group was inherited from parent channel - 繼承自父頻道的群 - - - - This indicates that the group was inherited from the parent channel. You cannot edit this flag, it's just for information. - 這表明該群繼承自父頻道。該標志僅供參考,你不能編輯該標志。 - - - - Inherited - 繼承的 - - - - Members - 成員 - - - - Add - 添加 - - - - Add to Remove - 添加到刪除列表 - - - - Add member to group - 添加群成員 - - - - Type in the name of a player you wish to add to the group and click Add. - 輸入你要添加到群里的玩家名字然后點擊添加。 - - - - Remove member from group - 從群里刪除成員 - - - - Type in the name of a player you wish to remove from the group and click Add. - 輸入你要從群內刪除的成員然后點擊刪除。 - - - - &ACL - &訪問控制列表 - - - - Active ACLs - 當前訪問控制列表 - - - - List of entries - 條目列表 - - - - This shows all the entries active on this channel. Entries inherited from parent channels will be show in italics.<br />ACLs are evaluated top to bottom, meaning priority increases as you move down the list. - 顯示該頻道內所有活躍條目。繼承自父頻道的條目將以斜體顯示.<br/>訪問控制列表是自上而下處理,意味著列表越往下優先級越高。 - - - - Inherit ACL of parent? - 繼承父訪問控制列表? - - - - This sets whether or not the ACL up the chain of parent channels are applied to this object. Only those entries that are marked in the parent as "Apply to sub-channels" will be inherited. - 設置是否對當前對象應用父頻道的訪問控制列表。只有那些在父頻道內被標記為“應用到子頻道”的條目將被繼承。 - - - - Inherit ACLs - 繼承訪問控制列表 - - - - Move entry up - 上移條目 - - - - This moves the entry up in the list. As entries are evaluated in order, this may change the effective permissions of users. You cannot move an entry above an inherited entry, if you really need that you'll have to duplicate the inherited entry. - 在列表中上移條目。由于條目自上而下被處理,這有可能改變用戶的有效權限.你不能將一個條目移到繼承的條目之上,如果你確實想這么做,你需要復制繼承的條目。 - - - - &Up - &上移 - - - - Move entry down - 下移條目 - - - - This moves the entry down in the list. As entries are evaluated in order, this may change the effective permissions of users. - 在列表中下移條目。由于條目自上而下被處理,這有可能改變用戶的有效權限。 - - - - &Down - &下移 - - - - Add new entry - 添加新條目 - - - - This adds a new entry, initially set with no permissions and applying to all. - 添加一個新條目,初始設置為無權限并應用到所有。 - - - - &Add - &添加 - - - - Remove entry - 刪除條目 - - - - This removes the currently selected entry. - 刪除當前選中的條目。 - - - - &Remove - &刪除 - - - - Context - 上下文 - - - Entry should apply to this channel - 應用到該頻道的條目 - - - - This makes the entry apply to this channel. - 應用該條目到當前頻道。 - - - - Applies to this channel - 應用到當前頻道 - - - - Entry should apply to sub-channels. - 應用到子頻道的條目。 - - - - This makes the entry apply to sub-channels of this channel. - 應用該條目到當前頻道的子頻道。 - - - - Applies to sub-channels - 應用到子頻道 - - - - Permissions - 權限 - - - - User/Group - 用戶/群 - - - - Group this entry applies to - 應用該條目的群 - - - - This controls which group of users this entry applies to.<br />Note that the group is evaluated in the context of the channel the entry is used in. For example, the default ACL on the Root channel gives <i>Write</i> permission to the <i>admin</i> group. This entry, if inherited by a channel, will give a user write privileges if he belongs to the <i>admin</i> group in that channel, even if he doesn't belong to the <i>admin</i> group in the channel where the ACL originated.<br />If a group name starts with a !, its membership is negated, and if it starts with a ~, it is evaluated in the channel the ACL was defined in, rather than the channel the ACL is active in. Order is important; <i>!~in</i> is valid, but <i>~!in</i> is not.<br />A few special predefined groups are:<br /><b>all</b> - Everyone will match.<br /><b>auth</b> - All authenticated users will match.<br /><b>sub,a,b,c</b> - User currently in a sub-channel minimum <i>a</i> common parents, and between <i>b</i> and <i>c</i> channels down the chain. See the website for more extensive documentation on this one.<br /><b>in</b> - Users currently in the channel will match (convenience for <i>sub,0,0,0</i>).<br /><b>out</b> - Users outside the channel will match (convenience for <i>!sub,0,0,0</i>).<br />Note that an entry applies to either a user or a group, not both. - - - - - User ID - 用戶名 - - - - User this entry applies to - 應用該條目的用戶 - - - - This controls which user this entry applies to. Just type in the user name and hit enter to query the server for a match. - 控制該條目應用到哪個用戶。請輸入用戶名然后按回車來向服務器做匹配查詢。 - - - - Entry should apply to this channel. - - - - - ALSAAudioInput - - - Default ALSA Card - 默認 ALSA 聲卡 - - - - Opening chosen ALSA Input failed: %1 - 無法打開所選 ALSA 輸入: %1 - - - - ALSAAudioOutput - - - Default ALSA Card - 默認 ALSA 聲卡 - - - - Opening chosen ALSA Output failed: %1 - 無法打開所選 ALSA 輸出: %1 - - - - ASIOConfig - - %1 (ver %2) - %1 (版本 %2) - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz - %1 毫秒 -> %2 毫秒 (%3 毫秒 分辨率) %4赫茲 - - - %1 ms -> %2 ms (%3 ms resolution) %4Hz -- Unusable - %1 毫秒 -> %2 毫秒 (%3 毫秒 分辨率) %4 赫茲--不可用 - - - - %1 (version %2) - - - - - %1 -> %2 samples buffer, with %3 sample resolution (%4 preferred) at %5 Hz - - - - - - ASIO Initialization failed: %1 - ASIO初始化失敗: %1 - - - - - Failed to instantiate ASIO driver - 無法初始化 ASIO 驅動 - - - - ASIO - - - - - Form - 表單 - - - - Device selection - 設備選擇 - - - - Device - 設備 - - - - Device to use for microphone - 用作麥克風的設備 - - - - This chooses what device to query. You still need to actually query the device and select which channels to use. - 選擇要查詢的設備。你仍需要實際查詢該設備然后選擇要使用哪些聲道。 - - - - Query selected device - 查詢所選設備 - - - - This queries the selected device for channels. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - 查詢所選設備的聲道。注意大多數 ASIO 驅動有極端漏洞,查詢設備可能導致應用程序或系統崩潰。 - - - - &Query - &查詢 - - - - Configure selected device - 配置所選設備 - - - - This configures the selected device. Be aware that many ASIO drivers are buggy to the extreme, and querying them might cause a crash of either the application or the system. - 配置所選設備。注意大多數 ASIO 驅動有極端漏洞,查詢設備可能導致應用程序或系統崩潰。 - - - - &Configure - &配置 - - - - Capabilities - 設置信息 - - - - Driver name - 驅動名稱 - - - TextLabel - 文本標簽 - - - Buffersize - 緩沖區大小 - - - - Configure input channels - 配置輸入聲道 - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples <i>What you hear</i>.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be <i>Mic L</i> while Speaker should be <i>Mix L</i> and <i>Mix R</i>. - 配置 ASIO 的輸入聲道.請確保你選擇了至少一個聲道作為麥克風和揚聲器。<i>麥克風</i>應該是你的已連接的麥克風連,<i>揚聲器</i>應該是一個采樣<i>你聽到的聲音</i>的聲道。<br />比如在 Audigy 2 ZS 上,一個好的麥克風的選擇會是<i> Mic L </i>而揚聲器會是<i> Mix L </i>和<i> Mix R</i>. - - - - Channels - 聲道 - - - - Microphone - 麥克風 - - - - <- - - - - - -> - - - - - Unused - 未使用 - - - - Speakers - 揚聲器 - - - - Buffer size - - - - - This will configure the input channels for ASIO. Make sure you select at least one channel as microphone and speaker. <i>Microphone</i> should be where your microphone is attached, and <i>Speaker</i> should be a channel that samples '<i>What you hear</i>'.<br />For example, on the Audigy 2 ZS, a good selection for Microphone would be '<i>Mic L</i>' while Speaker should be '<i>Mix L</i>' and '<i>Mix R</i>'. - - - - - ASIOInput - - - You need to select at least one microphone and one speaker source to use ASIO. If you just need microphone sampling, use DirectSound. - 你需要選擇至少一個麥克風和一個揚聲器源來使用 ASIO.如果你只需要使用要麥克風進行采樣,請使用 DirectSound. - - - - Opening selected ASIO device failed. No input will be done. - 無法打開所選 ASIO 設備。沒有可用輸入。 - - - - AboutDialog - - - About Mumble - 關于 Mumble - - - - <h3>Mumble (%1)</h3><p>Copyright %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>A voice-chat utility for gamers</b></p><p><tt><a href="%2">%2</a></tt></p> - <h3>Mumble (%1)</h3><p>版權所有 %3 Thorvald Natvig<br />slicer@users.sourceforge.net</p><p><b>一個游戲玩家的語音聊天工具</b></p><p><tt><a href="%2">%2</a></tt></p> - - - - &About Mumble - &關于 Mumble - - - - &License - &授權 - - - - OK - - - - - AboutSpeexDialog - - - About Speex - 關于 Speex - - - - <h3>About Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>This program uses Speex version %1</p><p>Speex is used for echo cancellation, noise<br />filtering, voice activity detection and speech<br />compression.</p> - <h3>關于 Speex</h3><p><tt><a href="%2">%2</a></tt></p><p>該程序使用 Speex 版本 %1</p><p>Speex 被用于回聲消除,噪音<br />過濾,語言活動檢測和語音<br />壓縮。</p> - - - - OK - - - - - AudioInput - - - Form - 表單 - - - - Interface - 接口 - - - - System - 系統 - - - - Input method for audio - 音頻輸入方法 - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>這是用于音頻的輸入方法。</b><br />很有可能你想使用 DirectSound。 - - - - Device - 設備 - - - Output method for audio - 音頻輸出方法 - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>這是用于音頻輸出的方法。</b><br />很有可能你想使用 DirectSound。 - - - - Cancel Echo - 消除回聲 - - - - Transmission - 傳送 - - - - &Transmit - &傳送 - - - - When to transmit your speech - 何時傳送你的語音 - - - - <b>This sets when speech should be transmitted.</b><br /><i>Continuous</i> - All the time<br /><i>Voice Activity</i> - When you are speaking clearly.<br /><i>Push To Talk</i> - When you hold down the hotkey set under <i>Shortcuts</i>. - <b>設置何時語音將被傳送。</b><br /><i>連續</i>一直<br /><i>有語音活動</i> 當你說話清晰時。<br /><i>按鍵通話</i> - 當你按住作為<i>快捷鍵</i>的自定義按鍵組合時。 - - - - DoublePush Time - 兩次按鍵時間間隔 - - - - TextLabel - 文本標簽 - - - - <b>This enables the audio cues for push to talk.</b><br />Setting this will give you a short audio beep when push to talk is pressed and released. - <b>啟用按鍵通話的音頻提示。</b><br />當你按下或釋放按鍵通話快捷鍵時會聽到一聲短的蜂鳴聲。 - - - - PTT Audio cue - PTT 提示音 - - - - Use SNR based speech detection - 使用基于 SNR 的語音偵測 - - - - Signal to Noise - 信噪比 - - - - Use Amplitude based speech detection. - 使用基于振幅的語音偵測。 - - - - <b>This sets speech detection to use Amplitude.</b><br />In this mode, the raw strength of the input signal is used to detect speech. - <b>設置用振幅來做語音偵測。</b><br />在此模式下,輸入信號的原始強度被用于語音偵測。 - - - - Amplitude - 振幅 - - - - Voice &Hold - &暫停 發言 - - - - How long to keep transmitting after silence - 無聲后多長時間內繼續傳送 - - - - <b>This selects how long after a perceived stop in speech transmission should continue.</b><br />Set this higher if your voice breaks up when you speak (seen by a rapidly blinking voice icon next to your name).<br />Only makes sense when used with Voice Activity transmission. - <b>設置發言暫停被感知到后多長時間內繼續傳送。</b>如果你在講話時你的語音破碎(在你的名字旁邊會顯示一個快速閃爍的語音圖標),增大這個值。<br />只有在使用檢測到語音活動時傳送時該選項才有用。 - - - - Silence Below - 無聲 低于 - - - - Signal values below this counts as silence - 信號值低于這個數值時視為無聲 - - - - <b>This sets the trigger values for voice detection.</b><br />Use this together with the Audio Statistics window to manually tune the trigger values for detecting speech. Input values below "Silence Below" always count as silence. Values above "Speech Above" always count as voice. Values in between will count as voice if you're already talking, but will not trigger a new detection. - <b>設置語音檢測的觸發值。</b><br />與音頻統計窗口一起來使用該值以手工調整語音偵測的觸發值。輸入值低于"無聲 低于“時總是會被視為無聲。值高于”語音 高于“時總是被視為語音。如果你正在講話,兩者之間的值會被視為語音,但是不會觸發一個新的偵測。 - - - - Speech Above - 語言 高于 - - - - Signal values above this count as voice - 信號值高于這個數值時視為語音 - - - - Compression - 壓縮 - - - - &Quality - &質量 - - - - Quality of compression (peak bandwidth) - 壓縮質量(峰值帶寬) - - - - <b>This sets the quality of compression.</b><br />This determines how much bandwidth Mumble is allowed to use for outgoing audio. - <b>設置壓縮質量。</b><br />確定 Mumble 可用于發送音頻的帶寬大小。 - - - - Audio per packet - 每個數據包的音頻幀數 - - - - How many audio frames to send per packet - 每個數據包里發送多少個音頻幀 - - - - <b>This selects how many audio frames should be put in one packet.</b><br />Increasing this will increase the latency of your voice, but will also reduce bandwidth requirements. - <b>選擇一個數據包里放多少個音頻幀。</b><br />增加這個數值會增加你的語音延遲,但也會減少帶寬需求。 - - - - <b>This shows peak outgoing bandwidth used.</b><br />This shows the peak amount of bandwidth sent out from your machine. Audio bitrate is the maximum bitrate (as we use VBR) for the audio data alone. Position is the bitrate used for positional information. Overhead is our framing and the IP packet headers (IP and UDP is 75% of this overhead). - <b>顯示已用的發送帶寬峰值。</b><br />顯示從你的機器發出的峰值帶寬大小。音頻比特率是僅用于音頻數據的最大比特率(由于我們使用VBR)。位置是用于位置信息的比特率。系統開銷是我們的組幀和 IP 數據包頭(IP 和 UDP 是該系統開銷的75%)。 - - - - Audio Processing - 音頻處理 - - - - Noise Suppression - 噪音抑制 - - - - Noise suppression - 噪音抑制 - - - - Amplification - 放大率 - - - - Maximum amplification of input sound - 輸入聲音的最大放大率 - - - - <b>Maximum amplification of input.</b><br />Mumble normalizes the input volume before compressing, and this sets how much it's allowed to amplify.<br />The actual level is continually updated based on your current speech pattern, but it will never go above the level specified here.<br />If the <i>Microphone loudness</i> level of the audio statistics hover around 100%, you probably want to set this to 2.0 or so, but if, like most people, you are unable to reach 100%, set this to something much higher.<br />Ideally, set it so <i>Microphone Loudness * Amplification Factor >= 100</i>, even when you're speaking really soft.<br /><br />Note that there is no harm in setting this to maximum, but Mumble will start picking up other conversations if you leave it to auto-tune to that level. - <b>輸入的最大放大率。</b><br />Mumble 在壓縮前會規格化輸入音量,該選項設置音量被允許放大多少。<br />實際等級將根據你的語音模式來持續更新,但是不會高于這里指定的等級。<br />如果音頻統計的<i>麥克風響度</i>等級在 100%左右,你很有可能想把該值設為大約 2.0,但是如果像大多數人一樣,你不能達到 100%,設置一個更高的值。<br />理想狀態下,設置該值使<i>麥克風響度 * 放大率 >= 100</i>,甚至當你相當輕聲的講話時。<br /><br />注意設置該值為其最大值不會有任何副作用,但是如果你將該值設為自動調節到其最大值, Mumble 會開始拾取其他人的談話。 - - - - Current speech detection chance - 當前語音偵測几率 - - - - Audible audio cue when push-to-talk is activated or deactivated - 當按鍵通話激活或未激活時聽到的提示音頻 - - - - <b>This sets speech detection to use Signal to Noise ratio.</b><br />In this mode, the input is analyzed for something resembling a clear signal, and the clarity of that signal is used to trigger speech detection. - <b>設置使用信噪比來進行語音偵測。</b><br /> 在此模式下,將從輸入中尋找并分析出一個近似清晰的信號,而這個信號的清晰度被用于觸發語音偵測。 - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>顯示當前語音偵測設置。</b><br />你能在設置對話框或音頻精靈里修改當前設置。 - - - - Idle AutoMute - 空閑時自動靜音 - - - - How long to remain idle before auto-mute. - 空閑多長時間后自動靜音。 - - - - This sets an idle timer. If the timer expires without any audio being sent to the server, you are muted. - 設置空閑定時器。如果定時器過期時沒有任何音頻發送到服務器,你將被靜音。 - - - - Maximum bandwidth used for sending audio - 用于發送音頻的最大帶寬 - - - - <b>This sets the amount of noise suppression to apply.</b><br />The higher this value, the more aggressively stationary noise will be supressed. - <b>設置應用于噪音抑制的數值大小.</b><br />數值越高,穩態噪聲越會被積極的抑制。 - - - - Input device for audio - - - - - <b>This is the input device to use for audio.</b> - - - - - AudioInputDialog - - - Continuous - 連續 - - - - Voice Activity - 語音活動 - - - - Push To Talk - 按鍵通話 - - - - Audio Input - 音頻輸入 - - - - - %1 ms - %1 毫秒 - - - - - Off - 關閉 - - - - %1 s - %1 秒 - - - - -%1 dB - -%1 分貝 - - - - %1kbit/s (Audio %2, Position %4, Overhead %3) - %1 千比特/秒 (音頻 %2, 位置 %4, 系統開銷 %3) - - - - %1 min - %1 分鐘 - - - - AudioOutput - - - Form - 表單 - - - - Interface - 接口 - - - - System - 系統 - - - Input method for audio - 音頻輸入方法 - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>這是用于音頻的輸入方法。</b><br />很有可能你想使用 DirectSound。 - - - - Device - 設備 - - - - Output method for audio - 音頻輸出方法 - - - - <b>This is the output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>這是用于音頻輸出的方法。</b><br />很有可能你想使用 DirectSound。 - - - - Positional Audio - 定位音頻 - - - - Audio Output - 音頻輸出 - - - - Default &Jitter Buffer - 默認 &Jitter 緩沖區 - - - - Safety margin for jitter buffer - Jitter 緩沖區的安全邊界 - - - - <b>This sets the minimum safety margin for the jitter buffer.</b><br />All incoming audio is buffered, and the jitter buffer continually tries to push the buffer to the minimum sustainable by your network, so latency can be as low as possible. This sets the minimum buffer size to use. If the start of sentences you hear is very jittery, increase this value. - <b>設置 Jitter 緩沖區的最小安全邊界. </b><br />所有收到的音頻都會被緩沖,而 Jitter 緩沖區不斷嘗試使該緩沖區保持能被你的網絡所允許的最小值, 從而使延遲盡可能的低。 設置使用的緩沖區大小的最小值。如果你聽到的句子的起始部分是顫音,請增加這個值。 - - - - TextLabel - 文本標簽 - - - - Volume - 音量 - - - - Volume of incoming speech - 收到的語音的音量 - - - - <b>This adjusts the volume of incoming speech.</b><br />Note that if you increase this beyond 100%, audio will be distorted. - <b>調節收到的語音的音量。</b><br />注意如果你增加此值至超過 100%,聲音會失真。 - - - - Output Delay - 輸出延時 - - - - Amount of data to buffer - 緩沖數據大小 - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 設置輸出緩沖區里前置緩沖的數據大小。試驗不同值然后設置成不引起快速顫音的最低值. - - - - The connected "speakers" are actually headphones. - 已連接的“揚聲器”實際上是耳機. - - - - This sets the minimum distance for sound calculations. The volume of other players' speech will not decrease until they are at least this far away from you. - 設置聲強計算的最小距離.當別的玩家離你小于這個距離時他的語音將不會減弱. - - - - Factor for sound volume decrease - 音量減弱因子 - - - - Bloom - 聲音增強 - - - - Factor for sound volume increase - 音量增強因子 - - - - How much should sound volume increase for sources that are really close? - 當音源距離過近時音量該增強多少? - - - - Checking this indicates that you don't have speakers connected, just headphones. This is important, as speakers are usually in front of you, while headphones are directly to your left/right. - 選中此選項表明你沒有連接揚聲器,只有耳機。這很重要,因為揚聲器通常在你面前,而耳機直接在你左右。 - - - - Headphones - 耳機 - - - - Minimum Distance - 最小距離 - - - - Minimum distance to player before sound volume decreases - 距離玩家至少多遠時聲音開始減弱 - - - - Maximum Distance - 最大距離 - - - - Maximum distance, beyond which speech volume won't decrease - 超過最大距離時音量將不再減弱 - - - - This sets the maximum distance for sound calculations. When farther away than this, other players' speech volume will not decrease any further. - 設置聲強計算最大距離。當超過此距離時,別的玩家的音量將不再減弱。 - - - - Minimum Volume - 最小音量 - - - - What should the volume be at the maximum distance? - 位于最大距離時的音量大小? - - - - Loopback Test - 回環測試 - - - - Delay Variance - 延時方差 - - - - Variance in packet latency - 數據包延時的方差 - - - - <b>This sets the packet latency variance for loopback testing.</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>This sets the packet latency variance for loopback testing</b><br />Most audio paths contain some variable latency. This allows you set that variance for loopback mode testing. For example, if you set this to 15ms, this will emulate a network with 20-35ms ping latency or one with 80-95ms latency. Most domestic net connections have a variance of about 5ms - <b>設置回環測試時的數據包延遲方差。</b><br />大多數音頻路徑含有一定的延遲方差。該選項允許你設置回環測試模式時的方差。例如,如果你設置該值為 15毫秒,將模擬一個 20-35毫秒 ping 延遲或一個 80-95毫秒延遲的網絡。大多數國內網絡的延遲方差啊大概是5毫秒 - - - - Packet Loss - 數據包丟失 - - - - Packet loss for loopback mode - 回環模式的數據包丟失 - - - - <b>This sets the packet loss for loopback mode.</b><br />This will be the ratio of packets lost. Unless your outgoing bandwidth is peaked or there's something wrong with your network connection, this will be 0% - <b>設置回環模式時的數據包丟失。</b><br />該值即為丟包率。除非你的出外的帶寬達到峰值或者你的網絡連接有問題,該值會是 0% - - - - &Loopback - &回環 - - - - Desired loopback mode - 期望的回環模式 - - - - <b>This enables one of the loopback testmodes.</b><br /><i>None</i> - Loopback disabled<br /><i>Local</i> - Emulate a local server.<br /><i>Server</i> - Request loopback from server.<br />Please note than when loopback is enabled, no other players will hear your voice. This setting is not saved on application exit. - <b>該選項啟用某種回環測試模式。</b><br /><i>無</i> - 禁用回環<br /><i>本地</i> - 模擬一個本地服務器。<br /><i>服務器</i> - 請求來自服務器的回環。<br />請注意當回環模式啟用時,別的玩家不會聽到你的聲音。當應用程序退出時該選項不會被存盤。 - - - - Other Applications - 其他應用程序 - - - - Volume of other applications during speech - 講話時別的應用程序的音量 - - - - <b>Decrease volume of other applications during speech.</b><br />Mumble supports decreasing the volume of other applications during incoming speech. This sets the relative volume of other applications when others are talking. - <b>講話時減小其他應用程序的音量.</b><br />Mumble 支持收到語音時減小其他應用程序的音量。這將設置當其他的人交談時其他應用程序的相對音量。 - - - - Output device for audio - - - - - <b>This is the output device to use for audio.</b> - - - - - AudioOutputDialog - - - None - - - - - Local - 本地 - - - - Server - 服務器 - - - - Audio Output - 音頻輸出 - - - - - %1 ms - %1 毫秒 - - - - - - - - %1% - - - - - %1ms - %1 毫秒 - - - - - %1m - %1 米 - - - - AudioStats - - >1000ms - >1000毫秒 - - - - Audio Statistics - 音頻統計 - - - - Input Levels - 輸入級別 - - - - Peak microphone level - 麥克風級別峰值 - - - - Peak power in last frame - 最后幀的峰值功率 - - - - This shows the peak power in the last frame (20 ms), and is the same measurement as you would usually find displayed as "input power". Please disregard this and look at <b>Microphone power</b> instead, which is much more steady and disregards outliers. - - - - TextLabel - 文本標簽 - - - - Peak speaker level - 揚聲器級別峰值 - - - - This shows the peak power of the speakers in the last frame (20 ms). Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - This shows the peak power in the last frame (20 ms) of the speakers. Unless you are using a multi-channel sampling method (such as ASIO) with speaker channels configured, this will be 0. If you have such a setup configured, and this still shows 0 while you're playing audio from other programs, your setup is not working. - - - - - Peak clean level - 靜輸入級別峰值 - - - - Signal Analysis - 信號分析 - - - - Microphone power - 麥克風功率 - - - - How close the current input level is to ideal - 當前輸入級別離完美有多近 - - - - This shows how close your current input volume is to the ideal. To adjust your microphone level, open whatever program you use to adjust the recording volume, and look at the value here while talking.<br /><b>Talk loud, as you would when you're upset over getting fragged by a noob.</b><br />Adjust the volume until this value is close to 100%, but make sure it doesn't go above. If it does go above, you are likely to get clipping in parts of your speech, which will degrade sound quality. - - - - - Signal-To-Noise ratio - 信噪比 - - - - Signal-To-Noise ratio from the microphone - 麥克風的信噪音比 - - - - This is the Signal-To-Noise Ratio (SNR) of the microphone in the last frame (20 ms). It shows how much clearer the voice is compared to the noise.<br />If this value is below 1.0, there's more noise than voice in the signal, and so quality is reduced.<br />There is no upper limit to this value, but don't expect to see much above 40-50 without a sound studio. - - - - - Speech Probability - 語音的概率 - - - - Probability of speech - 語音的概率 - - - - This is the probability that the last frame (20 ms) was speech and not environment noise.<br />Voice activity transmission depends on this being right. The trick with this is that the middle of a sentence is always detected as speech; the problem is the pauses between words and the start of speech. It's hard to distinguish a sigh from a word starting with 'h'.<br />If this is in bold font, it means Mumble is currently transmitting (if you're connected). - - - - - Configuration feedback - 配置反饋 - - - - Current audio bitrate - 當前音頻比特率 - - - - Bitrate of last frame - 最后幀的比特率 - - - - DoublePush interval - 兩次按鍵時間間隔 - - - Time between last two PushToTalk presses - 最后兩次按下按鍵通話鍵的時間間隔 - - - - Speech Detection - 語音偵測 - - - - Current speech detection chance - 當前語音偵測几率 - - - - <b>This shows the current speech detection settings.</b><br />You can change the settings from the Settings dialog or from the Audio Wizard. - <b>顯示當前語音偵測設置。</b><br />你能在設置對話框或音頻精靈里修改當前設置。 - - - - Signal and noise power spectrum - 信號和噪音功率頻譜 - - - - Power spectrum of input signal and noise estimate - 輸入信號和噪音估計的功率頻譜 - - - - This shows the power spectrum of the current input signal (red line) and the current noise estimate (filled blue).<br />All amplitudes are multiplied by 30 to show the interesting parts (how much more signal than noise is present in each waveband).<br />This is probably only of interest if you're trying to fine-tune noise conditions on your microphone. Under good conditions, there should be just a tiny flutter of blue at the bottom. If the blue is more than halfway up on the graph, you have a seriously noisy environment. - - - - - Echo Analysis - 回聲分析 - - - - Weights of the echo canceller - 回聲抵消器的影響 - - - - This shows the weights of the echo canceller, with time increasing downwards and frequency increasing to the right.<br />Ideally, this should be black, indicating no echo exists at all. More commonly, you'll have one or more horizontal stripes of bluish color representing time delayed echo. You should be able to see the weights updated in real time.<br />Please note that as long as you have nothing to echo off, you won't see much useful data here. Play some music and things should stabilize. <br />You can choose to view the real or imaginary parts of the frequency-domain weights, or alternately the computed modulus and phase. The most useful of these will likely be modulus, which is the amplitude of the echo, and shows you how much of the outgoing signal is being removed at that time step. The other viewing modes are mostly useful to people who want to tune the echo cancellation algorithms.<br />Please note: If the entire image fluctuates massively while in modulus mode, the echo canceller fails to find any correlation whatsoever between the two input sources (speakers and microphone). Either you have a very long delay on the echo, or one of the input sources is configured wrong. - - - - - This shows the peak power in the last frame (20 ms) after all processing. Ideally, this should be -96 dB when you're not talking. In reality, a sound studio should see -60 dB, and you should hopefully see somewhere around -20 dB. When you are talking, this should rise to somewhere between -5 and -10 dB.<br />If you are using echo cancellation, and this rises to more than -15 dB when you're not talking, your setup is not working, and you'll annoy other users with echoes. - - - - - Time between last two Push-To-Talk presses - - - - - >1000 ms - - - - - This is the audio bitrate of the last compressed frame (20 ms), and as such will jump up and down as the VBR adjusts the quality. The peak bitrate can be adjusted in the Settings dialog. - - - - - AudioWizard - - - Audio Tuning Wizard - 音頻調節精靈 - - - - Introduction - 介紹 - - - - Welcome to the Mumble Audio Wizard - 歡迎使用 Mumble 音頻精靈 - - - - This is the audio tuning wizard for Mumble. This will help you correctly set the input levels of your sound card, and also set the correct parameters for sound processing in Mumble. - 這是 Mumble 音頻調節精靈。這將幫你正確設置你的聲卡的輸入級別,并正確設置 Mumble 的聲音處理參數。 - - - - Please be aware that as long as this wizard is active, audio will be looped locally to allow you to listen to it, and no audio will be sent to the server. - 請注意當音頻精靈活躍時,音頻將被在本地環回以允許你聽到它,沒有音頻會被發送到服務器。 - - - - Finished - 完成 - - - - Enjoy using Mumble - Mumble 祝你使用愉快 - - - - Congratulations. You should now be ready to enjoy a richer sound experience with Mumble. - 恭喜。現在你可以准備好享受 Mumble 帶給你的丰富聲音體驗. - - - - Device selection - 設備選擇 - - - - Selecting the input and output device to use with Mumble. - 選擇 Mumble 用來輸入和輸出的設備. - - - - Input device - 輸入設備 - - - - This is the device your microphone is connected to. - 這是你的麥克風連接到的設備。 - - - - - System - 系統 - - - - Input method for audio - 音頻輸入方法 - - - - <b>This is the input method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>這是用于音頻的輸入方法。</b><br />很有可能你想使用 DirectSound。 - - - - - Device - 設備 - - - - Input device to use - 使用的輸入設備 - - - - <b>Selects which sound card to use for audio input.</b> - <b>選擇哪個聲卡用于音頻輸入。</b> - - - - Use echo cancellation - 使用回聲消除 - - - - Cancel echo from headset or speakers. - 消除來自耳機或揚聲器的回聲. - - - - This enables echo cancellation of outgoing audio, which helps both on speakers and on headsets. - 啟用送出音頻的回聲消除,這在揚聲器和耳機上都有幫助。 - - - - Output device - 輸出設備 - - - - This is the device your speakers or headphones are connected to. - 這是你的揚聲器或耳機連接到的設備. - - - - Output method for audio - 音頻輸出方法 - - - - <b>This is the Output method to use for audio.</b><br />Most likely you want to use DirectSound. - <b>這是用于音頻輸出的方法。</b><br />很有可能你想使用 DirectSound。 - - - - Output device to use - 使用的輸出設備 - - - - <b>Selects which sound card to use for audio Output.</b> - <b>選擇哪個聲卡用于音頻輸出。</b> - - - - Enable positional audio - 啟用定位音頻 - - - - Allows positioning of sound. - 允許聲音定位. - - - - This allows Mumble to use positional audio to place voices. - 這允許 Mumble 使用定位音頻來放置語音。 - - - - Positional Audio - 定位音頻 - - - - Adjusting attenuation of positional audio. - 調節定位音頻的衰減量. - - - - Mumble supports positional audio for some games, and will position the voice of other players relative to their position in game. Depending on their position, the volume of the voice will be changed between the speakers to simulate the direction and distance the other player is at. Such positioning depends on your speaker configuration being correct in your operating system, so a test is done here. - Mumble 支持在某些游戲里使用定位音頻,并能根據其他玩家在游戲中的位置來定位他們的發言。音量將會根據說話者的位置來改變以模擬他相對于其他玩家的方向和距離。定位音頻依賴于你的操作系統正確的配置了揚聲器,因此我們對揚聲器進行測試。 - - - - The graph below shows the position of <font color="red">you</font>, the <font color="yellow">speakers</font> and a <font color="green">moving sound source</font> as if seen from above. You should hear the audio move between the channels. - 下圖中顯示<font color="red">你</font>的位置,<font color="yellow">揚聲器</font>和一個<font color="green">移動的聲源</font>。你應該聽到音頻在聲道間切換. - - - - Use headphones - 使用耳機 - - - - Use headphones instead of speakers. - 使用耳機而不是揚聲器. - - - - This ignores the OS speaker configuration and configures the positioning for headphones instead. - 這將忽略操作系統的揚聲器配置并為耳機配置音頻定位. - - - - Volume tuning - 音量調節 - - - - Tuning microphone hardware volume to optimal settings. - 調節麥克風硬件音量到最佳設置。 - - - - Open your sound control panel and go to the recording settings. Make sure the microphone is selected as active input with maximum recording volume. If there's an option to enable a "Microphone boost" make sure it's checked. - 打開你的聲音控制面板然后打開錄音設置。確保麥克風被選為當前使用的輸入并使用最大錄音音量。如果有啟用“麥克風加強”選項,請確保它被選上。 - - - - Speak loudly, as when you are annoyed or excited. Decrease the volume in the sound control panel until the bar below stays as high as possible in the blue and green but <b>not</b> the red zone while you speak. - 請大聲講話,就像你在憤怒或興奮時那樣。減小你的聲音控制面板里的音量直到下面的進度條在你講話時盡可能的停留在藍區和綠區,而<b>不是</b>紅區里. - - - - Now talk softly, as you would when talking late at night and you don't want to disturb anyone. Adjust the slider below so that the bar moves into green when you talk, but stays blue while you're silent. - 現在輕聲講話,就像你在深夜時不想打擾任何人一樣。調節下面的滑塊直到下面的進度條在你講話時進入綠區,而在你沉默時停留在藍區。 - - - - Voice Activity Detection - 語言活動檢測 - - - - Letting Mumble figure out when you're talking and when you're silent. - 讓 Mumble 分辨出你是在講話還是在沉默. - - - - This will help Mumble figure out when you are talking. The first step is selecting which data value to use. - 這將幫助 Mumble 知道你是在講話。第一步是選擇用哪個數據值。 - - - - Raw amplitude from input - 輸入的原始振幅 - - - - Signal-To-Noise ratio - 信噪比 - - - - Next you need to adjust the following two sliders. The first few utterances you say should end up in the green area (definitive speech). While talking, you should stay inside the yellow (might be speech) and when you're not talking, everything should be in the red (definitively not speech). - 下一步你需要調節下面兩個滑塊。你最初講几句話時進度條應該停留在綠區(確定是講話)。當你講話時,進度條應該停留在黃區(可能是講話)﹔當你沒講話時,進度條應該停留在紅區(明確沒在講話). - - - - Last, you need to adjust the grace time. Mumble may detect this much non-speech and still keep transmitting before it breaks off. This allows you to catch your breath while speaking. - 最后,你需要調節寬限時間.在寬限時間內 Mumble 能夠偵測到你沒在講話并繼續傳送,然后斷開連接。這允許你在講話時喘息。 - - - - Device tuning - 設備調節 - - - - Changing hardware output delays to their minimum value. - 修改硬件輸出延時到它們的最小值。 - - - - To keep latency to an absolute minium, it's important to buffer as little audio as possible on the soundcard. However, many soundcards report that they require a much smaller buffer than what they can actually work with, so the only way to set this value is to try and fail. - 為了保証延時是絕對最小值,讓聲卡緩沖盡可能少的音頻非常重要。然而大多數聲卡聲稱它們需要比實際需求更小的緩沖區,因此設置這個值的唯一方式是去嘗試。 - - - - You should hear a single tone that's changing in frequency. Change the slider below to the lowest value which gives <b>no</b> interruptions or jitter in the sound. Please note that local echo is disabled during this test to improve audio path recognition. - 你應該聽到一個不斷改變頻率的單音。移動下面的滑塊直到它是<b>不</b>導致聲音中斷或顫音的最小值。請注意在測試中本地回聲將被禁止以改善音頻路徑識別. - - - - Amount of data to buffer. - 緩沖數據大小。 - - - - This sets the amount of data to prebuffer in the output buffer. Experiment with different values and set it to the lowest which doesn't cause rapid jitter in the sound. - 設置輸出緩沖區里前置緩沖的數據大小。試驗不同值然后設置成不引起快速顫音的最低值. - - - - If you position the microphone so it can pick up the speakers or headset, Mumble will measure the total audio path delay in your system; this means the delay from a sample is placed in an outbound buffer until it's found in a matching incoming buffer. - 如果你將麥克風放到能捕捉揚聲器或耳機聲音的地方, Mumble 將計算你的系統中的總的音頻路徑延時;這個延時是自一個聲音樣本被放到輸出緩沖區后直到它在匹配的輸入緩沖區里被找到的時間間隔. - - - - %1ms - %1毫秒 - - - - Audio path is %1ms long. - 音頻路徑長%1毫秒. - - - - Audio path cannot be determined. Input not recognized. - 音頻路徑無法被確定。輸入無法識別. - - - - %1 s - %1 秒 - - - - Mumble is under continuous development, and the development team wants to focus on the features that benefit the most users. To this end, Mumble supports submitting anonymous statistics about your configuration to the developers. These statistcs are essential for future development, and also make sure the features you use aren't deprecated. - Mumble 正處于開發階段,開發團隊致力于開發能使大多數用戶受益的功能。Mumble 支持匿名遞交你的配置統計信息給開發人員。這些統計信息對于將來的開發非常重要,并確保你使用的功能不會被棄用。 - - - - Submit anonymous statistics to the Mumble project - 遞交匿名統計給 Mumble 項目組 - - - - Push To Talk: - 按鍵通話: - - - - BanEditor - - - Mumble - Edit Bans - Mumble - 編輯黑名單 - - - - &Address - &地址 - - - - &Mask - &子網掩碼 - - - - 0.0.0.0 - - - - - &Add - &添加 - - - - &Update - &更新 - - - - &Remove - &刪除 - - - - ChanACL - - - W - - - - - T - - - - - E - - - - - S - - - - - A - - - - - M - - - - - K - - - - - C - - - - - L - - - - - None - - - - - Traverse - 遍歷 - - - - Enter - 進入 - - - - Speak - 發言 - - - - AltSpeak - 試圖發言 - - - - Mute/Deafen - 禁音/耳聾 - - - - Move/Kick - 移動/踢出 - - - - Make channel - 創建頻道 - - - - Link channel - 鏈接頻道 - - - - This represents no privileges. - - - - - This represents total access to the channel, including the ability to change group and ACL information. This privilege implies all other privileges. - - - - - This represents the permission to traverse the channel. If a user is denied this privilege, he will be unable to access this channel and any sub-channels in any way, regardless of other permissions in the sub-channels. - - - - - This represents the permission to join the channel. If you have a hierarchical channel structure, you might want to give everyone Traverse, but restrict Enter in the root of your hierarchy. - - - - - This represents the permission to speak in a channel. Users without this privilege will be suppressed by the server (seen as muted), and will be unable to speak until they are unmuted by someone with the appropriate privileges. - - - - - This represents the permission to speak in a channel with flagged speech. This works exactly like the <i>speak</i> privilege, but applies to packets spoken with AltPushToTalk held down. This may be used to broadcast to a hierarchy of channels without linking. - - - - - This represents the permission to mute and deafen other players. Once muted, a player will stay muted until he is unmuted by another privileged player or reconnects to the server. - - - - - This represents the permission to move a player to another channel or kick him from the server. To actually move the player, either the moving player must have Move/Kick privileges in the destination channel, or the player must normally be allowed to enter the channel. Players with this privilege can move players into channels the target player normally wouldn't have permission to enter. - - - - - This represents the permission to make sub-channels. The player making the sub-channel will be added to the admin group of the sub-channel. - - - - - This represents the permission to link channels. Players in linked channels hear each other, as long as the speaking player has the <i>speak</i> privilege in the channel of the listener. You need the link privilege in both channels to create a link, but just in either channel to remove it. - - - - - Write ACL - 創建訪問控制列表 - - - - ClientPlayer - - - Authenticated - 已認証 - - - - Muted (server) - 靜音(服務器) - - - - Deafened (server) - 耳聾(服務器) - - - - Local Mute - 本地靜音 - - - - Muted (self) - 靜音(自己) - - - - Deafened (self) - 耳聾(自己) - - - - ConfigDialog - - - Accept changes - 確定 - - - - This button will accept current settings and return to the application.<br />The settings will be stored to disk when you leave the application. - 該按鈕將接受當前設置并返回到應用程序。<br/>當你退出應用程序時這些設置將被存盤。 - - - - Reject changes - 取消 - - - - This button will reject all changes and return to the application.<br />The settings will be reset to the previous positions. - 該按鈕將拒絕所有修改并返回到應用程序。<br/>這些設置將被重置到先前的設定。 - - - - Apply changes - 應用 - - - - This button will immediately apply all changes. - 該按鈕將立即應用所有修改. - - - - Undo changes for current page - 撤銷 - - - - This button will revert any changes done on the current page to the most recent applied settings. - 該按鈕將復原對當前頁的任意修改到最近使用的設置。 - - - - Restore defaults for current page - 恢復默認值 - - - - This button will restore the defaults for the settings on the current page. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - This button will restore the settings for the current page only to their defaults. Other pages will not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - - - - This button will restore the settings for the current page only to their defaults. Other pages will be not be changed.<br />To restore all settings to their defaults, you will have to use this button on every page. - 該按鈕將恢復當前頁設置到默認值。其他頁面的設置將不被修改。<b r/>為了恢復其他頁面上的設置到默認值,你需要在每個頁面上都使用該按鈕。 - - - - Mumble Configuration - Mumble 配置 - - - Tab 1 - 標簽 1 - - - - Advanced - - - - - ConnectDialog - - - Connecting to %1 - 正在連接到 %1 - - - - Enter username - 輸入用戶名 - - - - Unknown - 未知 - - - - Failed to fetch server list - 無法獲取服務器列表 - - - - - New - 新建 - - - - -Unnamed entry- - -未命名條目- - - - - - Add - 添加 - - - - Update - 更新 - - - - Mumble Server Connect - Mumble 服務器連接 - - - - &Custom Servers - &自定義服務器 - - - - &Label - &標簽 - - - - A&ddress - &地址 - - - - &Port - &端口 - - - - &Username - &用戶名 - - - - &Password - &密碼 - - - - &Connect - &連接 - - - - &Cancel - &取消 - - - - &Add - &添加 - - - - &Remove - &刪除 - - - - Server &Browser - 服務器&瀏覽器 - - - - Label - 標簽 - - - - Address - 地址 - - - - URL - 網址 - - - - Cancel - 取消 - - - - C&opy to custom - &拷貝到自定義 - - - - &View Webpage - &查看主頁 - - - - CoreAudioSystem - - - Default Device - 默認設備 - - - - CrashReporter - - - Mumble Crash Report - - - - - <p><b>We're terribly sorry, but it seems Mumble has crashed. Do you want to send a crash report to the Mumble developers?</b></p><p>The crash report contains a partial copy of Mumble's memory at the time it crashed, and will help the developers fix the problem.</p> - - - - - Email address (optional) - - - - - Please describe briefly, in English, what you were doing at the time of the crash - Please briefly describe what you were doing at the time of the crash - - - - - Send Report - - - - - Don't send report - - - - - Crash upload successful - - - - - Thank you for helping make Mumble better! - - - - - - Crash upload failed - - - - - We're really sorry, but it appears the crash upload has failed with error %1 %2. Please inform a developer. - - - - - This really isn't funny, but apparently there's a bug in the crash reporting code, and we've failed to upload the report. You may inform a developer about error %1 - - - - - Uploading crash report - - - - - Abort upload - - - - - DXAudioInput - - - Default DirectSound Voice Input - 默認 DirectSound 語音輸入 - - - - Opening chosen DirectSound Input device failed. No microphone capture will be done. - 不能打開所選 DirectSound 輸入設備。不能捕捉麥克風。 - - - - Opening chosen DirectSound Input failed. Default device will be used. - 不能打開所選 DirectSound 輸入。將使用默認設備。 - - - - Lost DirectSound input device. - 丟失 DirectSound 輸入設備。 - - - - DXAudioOutput - - - Default DirectSound Voice Output - 默認 DirectSound 語音輸出 - - - - Opening chosen DirectSound Output failed. Default device will be used. - 不能打開所選 DirectSound 輸出。將使用默認設備。 - - - - Lost DirectSound output device. - 丟失 DirectSound 輸出設備。 - - - - Opening chosen DirectSound Output failed. No audio will be heard. - 不能打開所選 DirectSound 輸出。將聽不到音頻。 - - - - Database - - - Mumble failed to initialize a database in any -of the possible locations. - Mumble 無法在任何可能的位置里初始化數據庫. - - - - GlobalShortcut - - - Shortcuts - 快捷鍵 - - - - List of configured shortcuts - 配置好的快捷鍵列表 - - - - Function - 功能 - - - - Shortcut - 快捷鍵 - - - - Suppress - 禁止 - - - - Add new shortcut - 添加新快捷鍵 - - - - This will add a new global shortcut - 這將添加一個新的全局快捷鍵 - - - - &Add - &添加 - - - - Remove selected shortcut - 移除所選快捷鍵 - - - - This will permanently remove a selected shortcut. - 這將永久性的刪除所選快捷鍵。 - - - - &Remove - &刪除 - - - - GlobalShortcutConfig - - - Shortcuts - 快捷鍵 - - - - Shortcut button combination. - 快捷鍵按鈕組合. - - - - <b>This is the global shortcut key combination.</b><br />Double-click this field and then the desired key/button combo to rebind. - <b>這是全局快捷鍵組合。</b><br />雙擊該區域然后綁定想要的按鍵/按鈕組合。 - - - - Suppress keys from other applications - 禁止其他應用程序使用的按鍵 - - - - <b>This hides the button presses from other applications.</b><br />Enabling this will hide the button (or the last button of a multi-button combo) from other applications. Note that not all buttons can be suppressed. - <b>向其他應用程序隱藏這些按鍵。</b><br/>允許該選項將向其他應用程序隱藏指定按鍵(或者組合按鍵的最后一個按鍵)。注意并不是所有按鍵都能被禁用。 - - - - GlobalShortcutMacInit - - - Mumble has detected that it is unable to receive Global Shortcut events when it is in the background.<br /><br />This is because the Universal Access feature called 'Enable access for assistive devices' is currently disabled.<br /><br />Please <a href=" ">enable this setting</a> and continue when done. - Mumble 檢測到當它位于后台時它不能接收到全局快捷鍵事件。<br /><br />這是因為被稱為‘允許輔助設備的使用’的輔助使用功能當前被禁用。<br /><br />請<a href=" ">啟用該選項</a>然后繼續。 - - - - GlobalShortcutX - - - Mouse %1 - 鼠標 %1 - - - - LCD - - - Not connected - 未連接 - - - - LCDConfig - - - Graphic - 圖形 - - - - Character - 字符 - - - - Enable this device - 啟用該設備 - - - - LCD - - - - - Form - 表單 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This is the list of available LCD devices on your system. It lists devices by name, but also includes the size of the display and the LCD type. Mumble supports outputting to several LCD devices at a time.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Type:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">Mumble supports two different types of LCD devices. A Graphic LCD allows Mumble to draw each individual pixel of the display, whereas a Character LCD only allows Mumble to show characters. Some features are only available to Graphic LCDs.</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Size:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">This field describes the size of an LCD device. The size is given in either in pixels (for Graphic LCDs) or in characters (for Character LCDs).</p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"><span style=" font-weight:600; font-style:italic;">Enabled:</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt; font-weight:600; font-style:italic;"><span style=" font-weight:400; font-style:normal;">This decides whether Mumble should draw to a particular LCD device.</span></p></body></html> - - - - - Devices - 設備 - - - - Name - 名稱 - - - - Type - 類型 - - - - Size - 大小 - - - - Enabled - 已啟用 - - - - Views - 視圖 - - - - Minimum Column Width - 最小列寬 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This option decides the minimum width a column in the Player View.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">If too many people are speaking at once, the Player View will split itself into columns.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">You can use this option to pick a compromise between number of players shown on the</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;">LCD, and width of player names.</p></body></html> - - - - - TextLabel - 文本標簽 - - - - Splitter Width - 分割線寬度 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This setting decides the width of column splitter.</span></p></body></html> - - - - - Log - - - Debug - 調試 - - - - Critical - 緊急 - - - - Warning - 警告 - - - - Information - 信息 - - - - Server Connected - 服務器已連接 - - - - Server Disconnected - 服務器已斷開連接 - - - - Player Joined Server - 玩家加入服務器 - - - - Player Left Server - 玩家離開服務器 - - - - Player kicked (you or by you) - 玩家踢出你(或被你踢出) - - - - Player kicked - 玩家被踢出 - - - - You self-muted/deafened - 你自我靜音/耳聾 - - - - Other self-muted/deafened - 其他人自我靜音/耳聾 - - - - Player muted (you) - 玩家對你靜音 - - - - Player muted (by you) - 玩家被你靜音 - - - - Player muted (other) - 玩家靜音其他人 - - - - Player Joined Channel - 玩家加入頻道 - - - - Player Left Channel - 玩家離開頻道 - - - - Permission Denied - 沒有權限 - - - - Text Message - 文本消息 - - - Script Errors - 腳本錯誤 - - - - LogConfig - - - Toggle console for %1 events - 為 %1 事件啟用控制台 - - - - Toggle pop-up notifications for %1 events - 為 %1 事件啟用彈出窗口通知 - - - - Toggle Text-To-Speech for %1 events - 為%1事件啟用文本語音轉換 - - - - Click here to toggle sound notification for %1 events - 點擊這里為 %1 事件啟用聲音通知 - - - - Path to soundfile used for sound notifications in the case of %1 events<br />Single click to play<br />Doubleclick to change - 在 %1 事件發生時用于聲音通知的聲音文件的路徑<br />單擊播放<br/>雙擊更改 - - - - Click here to toggle console output for %1 events.<br />If checked, this option makes Mumble output all %1 events in its message log. - 點擊這里為 %1 事件啟用控制台輸出。<br />如果選中,該選項使 Mumble 輸出所有 %1 事件到它的消息日志中。 - - - - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by Mumble for every %1 event. - Click here to toggle pop-up notifications for %1 events.<br />If checked, a notification pop-up will be created by mumble for every %1 event. - 點擊這里為 %1 事件啟用彈出窗口通知。<br />如果選中, Mumble 將為每個 %1 事件創建一個彈出窗口。 - - - - Click here to toggle Text-To-Speech for %1 events.<br />If checked, Mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - Click here to toggle Text-To-Speech for %1 events.<br />If checked, mumble uses Text-To-Speech to read %1 events out loud to you. Text-To-Speech is also able to read the contents of the event which is not true for soundfiles. Text-To-Speech and soundfiles cannot be used at the same time. - 點擊這里為 %1 事件啟用文本語音轉換.<br />如果選中, Mumble 會使用文本語音轉化將 %1 事件大聲的讀出來給你聽。當聲音文件無效時,文本語音轉換也能讀取事件內容。文本語音轉化和聲音文件不能同時使用。 - - - - Click here to toggle sound notification for %1 events.<br />If checked, Mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - Click here to toggle sound notification for %1 events.<br />If checked, mumble uses a soundfile predefined by you to indicate %1 events. Soundfiles and Text-To-Speech cannot be used at the same time. - 點擊這里為 %1 事件啟用聲音通知。<br />如果選中, Mumble 會使用一個你預先定義的聲音文件來標示 %1 事件。聲音文件和文本語音轉換不能同時被使用。 - - - - Path to soundfile used for sound notifications in the case of %1 events.<br />Single click to play<br />Doubleclick to change<br />Be sure that sound notifications for these events are enabled or this field will not have any effect. - 在 %1 事件發生時用于聲音通知的聲音文件的路徑。<br />單擊播放<br />雙擊更換<br />請確認這些事件的聲音通知被啟用,否則這個字段將沒有任何效果。 - - - - Choose sound file - 選擇聲音文件 - - - - Invalid sound file - 無效聲音文件 - - - - The file '%1' does not exist or is not a valid speex file. - 文件 ‘%1’ 不存在或者不是一個有效的語音編碼文件。 - - - - Messages - 消息 - - - - Message - 消息 - - - - Console - 控制台 - - - - Notification - 通知 - - - - Text-To-Speech - 文本語音轉換 - - - - Soundfile - 聲音文件 - - - - Path - 路徑 - - - - Text To Speech - 文本語音轉換 - - - - Volume - 音量 - - - - Volume of Text-To-Speech Engine - 文本語音轉換引擎的音量 - - - - <b>This is the volume used for the speech synthesis.</b> - <b>這是用于語音合成的音量。</b> - - - - Length threshold - 長度閾值 - - - - Message length threshold for Text-To-Speech Engine - 用于文本語音轉換的消息長度閾值 - - - - <b>This is the length threshold used for the Text-To-Speech Engine.</b><br />Messages longer than this limit will not be read aloud in their full length. - <b>這是用于文本語音轉換引擎的消息長度閾值。</b><br />消息長于此值時將不會被全部讀出來。 - - - - Characters - 字符 - - - - LookConfig - - - - System default - 系統默認 - - - - None - - - - - Only with players - 僅當有玩家時 - - - - All - 所有 - - - - Ask - 詢問 - - - - Do Nothing - 無動作 - - - - Move - 移動 - - - - User Interface - 用戶界面 - - - - Choose skin file - 選擇皮膚文件 - - - - Form - 表單 - - - - Language - 語言 - - - - Language to use (requires restart) - 使用的語言(需要重啟) - - - - <b>This sets which language Mumble should use.</b><br />You have to restart Mumble to use the new language. - <b>設置 Mumble 使用哪種語言。</b><br />你需要重啟 Mumble 來使用新語言。 - - - - Look and Feel - 外觀 - - - - Style - 風格 - - - - Basic widget style - 基本窗口風格 - - - - <b>This sets the basic look and feel to use.</b> - <b>設置使用基本外觀。</b> - - - - Skin - 皮膚 - - - - Skin file to use - 使用的皮膚文件 - - - - <b>This sets which skin Mumble should use.</b><br />The skin is a style file applied on top of the basic widget style. If there are icons in the same directory as the style sheet, those will replace the default icons. - <b>設置 Mumble 應該使用哪個皮膚文件。</b><br/>皮膚是一個應用在基本窗口風格上的風格文件。如果在與風格相同的目錄里有圖標,目錄中的圖標將替換默認圖標。 - - - - ... - - - - - Expand - 展開 - - - - When to automatically expand channels - 什么時候自動展開頻道 - - - - This sets which channels to automatically expand. <i>None</i> and <i>All</i> will expand no or all channels, while <i>Only with players</i> will expand and collapse channels as players join and leave them. - 設置哪些頻道將自動展開。<i>無</i>和<i>所有</i>將展開零個或所有頻道,而<i>僅當有玩家時<i>將在玩家加入和離開時自動展開和折疊頻道。 - - - - List players above subchannels (requires restart). - 在子頻道之上列出玩家(需要重啟)。 - - - - <b>If set, players will be shown above subchannels in the channel view.</b><br />A restart of Mumble is required to see the change. - <b>如果選中,玩家將被顯示在子頻道之上.</b><br/>需要重啟 Mumble 來使改變生效。 - - - - Players above Channels - 玩家位于頻道之上 - - - - Channel Dragging - 頻道拖動 - - - - This changes the behaviour when moving channels. - 改變當移動頻道時的行為。 - - - - This sets the behaviour of channel drags, it can be used to prevent accidental dragging. <i>Move Channel</i> moves the channel without prompting. <i>Do Nothing</i> does nothing and prints an error message. <i>Ask</i> uses a message box to confirm if you really wanted to move the channel. - 設置頻道拖動時的行為,能被用來防止意外的拖動。<i>移動頻道</i>將在移動頻道時不做提示.<i>無動作</i>將在試圖移動頻道時顯示一個出錯信息。<i>詢問</i>使用一個消息框來確認你是真的想移動一個頻道。 - - - - Ask whether to close or minimize when quitting Mumble. - 詢問退出 Mumble 時是關閉還是最小化。 - - - - <b>If set, will verify you want to quit if connected.<b> - <b>如果選中,當你連接到服務器時將驗証你是否想退出.</b> - - - - Ask on quit while connected - 當你連接到服務器時詢問是否退出 - - - - Make the Mumble window appear on top of other windows. - 使 Mumble 窗口位于其他窗口之上. - - - - <b>This makes the Mumble window a topmost window.</b> - <b>這將使 Mumble 窗口成為最上面的窗口。</b> - - - - Always On Top - 總在最上 - - - - <b>If set, minimizing the Mumble main window will cause it to be hidden and accessible only from the tray. Otherwise, it will be minimized as a window normally would.</b> - <b>如果選中,最小化 Mumble 主窗口時將使得它被隱藏到系統托盤。否則,它將會像通常一樣被最小化。</b> - - - - Hide in tray when minimized - 最小化時隱藏到系統托盤 - - - Show all configuration items - 顯示所有配置選項 - - - <b>This will show all configuration items.</b><br />Mumble contains a lot of configuration items that most users won't need to change. Checking this will show all configurable items. - <b>顯示所有配置選項.</b><br/> Mumble 包含許多大多數用戶不需要改變的選項。選中該選項將顯示所有可配置選項。 - - - Expert Config - 專家配置選項 - - - - Hide the main Mumble window in the tray when it is minimized. - 當最小化時,隱藏 Mumble 主窗口到系統托盤。 - - - - MainWindow - - - - Root - - - - - Push-to-Talk - Global Shortcut - 按鍵通話 - - - - Push and hold this button to send voice. - Global Shortcut - 按住該按鈕來發送語音。 - - - - This configures the push-to-talk button, and as long as you hold this button down, you will transmit voice. - Global Shortcut - 配置按鍵發音按鍵,只要你按住該按鍵,語音將被傳送。 - - - - Reset Audio Processor - Global Shortcut - 重置音頻處理器 - - - - Toggle Mute Self - Global Shortcut - 切換自我靜音 - - - - Toggle self-mute status. - Global Shortcut - 切換自我靜音狀態。 - - - - This will toggle your muted status. If you toggle this off, you will also disable self-deafen. - Global Shortcut - 該選項將切換自我靜音狀態。如果你關閉靜音狀態,將同時關閉自我耳聾狀態。 - - - - Toggle Deafen Self - Global Shortcut - 切換自我耳聾 - - - - Toggle self-deafen status. - Global Shortcut - 切換自我耳聾狀態。 - - - - This will toggle your deafen status. If you toggle this on, you will also enable self-mute. - Global Shortcut - 該選項切換自我耳聾狀態。如果打開此選項,將同時啟用自我禁音。 - - - - Unlink Plugin - Global Shortcut - 卸載插件 - - - - Force Center Position - Global Shortcut - 強制居中 - - - - Chan Parent - Global Shortcut - 父頻道 - - - - Chan Sub#%1 - Global Shortcut - 子頻道#%1 - - - - Chan All Subs - Global Shortcut - 所有子頻道 - - - - Push-to-Mute - Global Shortcut - 按鍵禁音 - - - - Join Channel - Global Shortcut - 加入頻道 - - - - Toggle Overlay - Global Shortcut - 切換 Overlay - - - - Toggle state of in-game overlay. - Global Shortcut - 切換游戲中的 overlay 狀態。 - - - - This will switch the states of the ingame overlay between showing everybody, just the players who are talking, and nobody. - Global Shortcut - 在顯示所有人,只有發言的玩家和不顯示任何人之間切換游戲中的 overlay 狀態。 - - - - Alt Push-to-Talk - Global Shortcut - 交替按鍵通話 - - - - Toggle Minimal - Global Shortcut - 切換最小化 - - - - Volume Up (+10%) - Global Shortcut - 增大音量(+10%) - - - - Volume Down (-10%) - Global Shortcut - 減小音量(-10%) - - - - Mumble - - - - - Mumble -- %1 - - - - - &Window - &窗口 - - - - - Minimize - 最小化 - - - - Ctrl+M - - - - - Close - 關閉 - - - - Mumble is currently connected to a server. Do you want to Close or Minimize it? - Mumble 現在連接到了一個服務器。你想要關閉還是最小化它? - - - - Clear - 清除 - - - - Opening URL %1 - 打開網址 %1 - - - - URL scheme is not 'mumble' - 'Mumble' 不支持的網址方案 - - - - Connecting to %1 - 正在連接到 %1 - - - - Enter username - 輸入用戶名 - - - - Reconnecting. - 正在重新連接中。 - - - - <h2>Control channel</h2><p>Encrypted with %1 bit %2<br />%3 ms average latency (%4 variance)</p> - <h2>控制信道</h2><p>使用 %1 比特 %2 加密<br />平均延遲 %3 毫秒(%4 方差)</p> - - - - Voice channel is sent over control channel. - 語音頻道通過控制信道發送。 - - - - <h2>Voice channel</h2><p>Encrypted with 128 bit OCB-AES128<br />%1 ms average latency (%4 variance)</p> - <h2>語音頻道</h2><p>使用 128 比特 OCB-AES128 加密<br/>%1 毫秒延遲(%4 方差)</p> - - - - UDP Statistics - UDP 統計 - - - - To Server - 到服務器 - - - - From Server - 來至服務器 - - - - Good - 良好 - - - - Late - 遲到 - - - - Lost - 丟失 - - - - Resync - 重新同步 - - - - <h2>Audio bandwidth</h2><p>Maximum %1 kbit/s<br />Current %2 kbit/s (Quality %3)</p> - <h2>音頻帶寬</h2><p>最大 %1千比特/秒<br />當前 %2 千比特/秒 (質量 %3)</p> - - - - Mumble Server Information - Mumble 服務器信息 - - - - - &View Certificate - &查看認証 - - - - Kicking player %1 - 踢出玩家 %1 - - - - - Enter reason - 輸入原因 - - - - Banning player %1 - 封禁玩家 %1 - - - - Sending message to %1 - 發送消息給 %1 - - - - - To %1: %2 - 發送給 %1: %2 - - - - - Message to %1 - 發送消息給 %1 - - - - - Channel Name - 頻道名 - - - - Are you sure you want to delete %1 and all its sub-channels? - 你確信要刪除 %1和它的子頻道嗎? - - - - Change description of channel %1 - 改變頻道 %1的描敘 - - - - Sending message to channel %1 - 發送消息給頻道 %1 - - - - Sending message to channel tree %1 - 發送消息給頻道樹 %1 - - - - To tree %1: %2 - 發送給樹 %1: %2 - - - - Message to tree %1 - 發送消息給樹 %1 - - - - Unmuted and undeafened. - 解除靜音并解除耳聾。 - - - - Unmuted. - 解除靜音。 - - - - Muted. - 靜音。 - - - - Muted and deafened. - 禁音和耳聾. - - - - Deafened. - 耳聾. - - - - Undeafened. - 解除耳聾。 - - - - About Qt - 關于 Qt - - - - Joining %1. - 加入 %1. - - - - Connected to server %1. - 已連接到服務器 %1. - - - - SSL Verification failed: %1 - SSL 認証失敗: %1 - - - - <b>WARNING:</b> The server presented a certificate that was different from the stored one. - <b>警告:</b>服務器提供的認証與保存的認証不同。 - - - - Sever presented a certificate which failed verification. - 服務器提供的認証認証失敗。 - - - - <p>%1.<br />The specific errors with this certificate are: </p><ol>%2</ol><p>Do you wish to accept this certificate anyway?<br />(It will also be stored so you won't be asked this again.)</p> - <p>%1.<br /> 認証中的錯誤是:</p><ol>%2</ol><p>你希望接受認証嗎?<br />(認証將被保存從而你不會被再次索要認証。)</p> - - - - Server connection failed: %1. - 連接服務器失敗: %1. - - - - Disconnected from server. - 與服務器斷開連接. - - - - Invalid username - 無效用戶名 - - - - You connected with an invalid username, please try another one. - 你使用一個無效的用戶名連接,請嘗試別外一個。 - - - - That username is already in use, please try another username. - 用戶名已經被使用,請使用另外一個用戶名。 - - - - Wrong password - 密碼錯誤 - - - - Wrong password for registered users, please try again. - 注冊用戶密碼錯誤,請重試。 - - - - Wrong server password for unregistered user account, please try again. - 未注冊用戶的服務器密碼錯誤,請重試。 - - - - &Server - &服務器 - - - - &Player - &玩家 - - - - &Channel - &頻道 - - - - &Audio - &音頻 - - - - C&onfigure - &配置 - - - - &Help - &幫助 - - - - Log - 日志 - - - - This shows all recent activity. Connecting to servers, errors and information messages all show up here.<br />To configure exactly which messages show up here, use the <b>Settings</b> command from the menu. - 這里顯示所有最近的活動。正在連接到服務器,錯誤和通知消息都將在這里顯示。<br />要准確配置什么消息將被顯示在這里,請從菜單中使用<b>設置</b>命令。 - - - - &Quit Mumble - &退出 Mumble - - - - Closes the program - 關閉程序 - - - - Exits the application. - 退出應用程序。 - - - - Ctrl+Q - - - - - &Connect - &連接 - - - - Open the server connection dialog - 打開服務器連接對話框 - - - - Shows a dialog of registered servers, and also allows quick connect. - 顯示一個已注冊服務器的對話框,并允許快速連接。 - - - - &Disconnect - &斷開 - - - - Disconnect from server - 從服務器斷開連接 - - - - Disconnects you from the server. - 使你從服務器斷開連接。 - - - - &Ban lists - &黑名單 - - - - Edit ban lists on server - 編輯服務器上的黑名單 - - - - This lets you edit the server-side IP ban lists. - 這讓你編輯服務器端的網址黑名單。 - - - - &Information - &信息 - - - - Show information about the server connection - 顯示服務器連接信息 - - - - This will show extended information about the connection to the server. - 顯示服務器連接的擴展信息. - - - - &Kick - &踢出 - - - - Kick player (with reason) - 踢出玩家(理由) - - - - Kick selected player off server. You'll be asked to specify a reason. - 從服務器踢出所選玩家。你將被要求指定一個原因。 - - - - &Mute - &靜音 - - - - Mute player - 靜音玩家 - - - - Mute or unmute player on server. Unmuting a deafened player will also undeafen them. - 在服務器上對玩家靜音或取消靜音。取消靜音一個耳聾的玩家將同時對他取消耳聾。 - - - - &Ban - &封禁 - - - - Kick and ban player (with reason) - 踢出并封禁玩家(理由) - - - - Kick and ban selected player from server. You'll be asked to specify a reason. - 從服務器踢出并封禁所選玩家。你將被要求指定一個原因。 - - - - &Deafen - &耳聾 - - - - Deafen player - 耳聾玩家 - - - - Deafen or undeafen player on server. Deafening a player will also mute them. - 在服務器上使玩家耳聾或取消耳聾。耳聾一個玩家將同時對他靜音。 - - - - &Local Mute - &本地靜音 - - - - Mute player locally - 本地對玩家靜音 - - - - Mute or unmute player locally. Use this on other players in the same room. - 本地對玩家靜音或者取消靜音. 對相同房間的其他玩家使用該選項。 - - - - Send Messa&ge - 發送&消息 - - - - Send a Text Message - 發送一條文本消息 - - - - Sends a text message to another user. - 向另一個用戶發送一條文本消息。 - - - - &Add - &添加 - - - - Add new channel - 添加一個新頻道 - - - - This adds a new sub-channel to the currently selected channel. - 在當前所選頻道內添加一個子頻道。 - - - - &Remove - &刪除 - - - - Remove channel - 刪除頻道 - - - - This removes a channel and all sub-channels. - 刪除一個頻道及其所有子頻道。 - - - - &Edit ACL - &編輯 訪問控制列表 - - - - Edit Groups and ACL for channel - 為頻道編輯群和訪問控制列表 - - - - This opens the Group and ACL dialog for the channel, to control permissions. - 打開頻道的群和訪問控制列表對話框,來控制頻道的訪問權限。 - - - - &Rename - &重命名 - - - - Renames the channel - 重命名頻道 - - - - This renames a channel. - 重命名一個頻道。 - - - - &Change Description - &修改描敘 - - - - Changes the channel description - 修改頻道描敘 - - - - This changes the description of a channel. - 修改一個頻道的描敘。 - - - - &Link - &鏈接 - - - - Link your channel to another channel - 鏈接你的頻道和另一個頻道 - - - - This links your current channel to the selected channel. If they have permission to speak in the other channel, players can now hear each other. This is a permanent link, and will last until manually unlinked or the server is restarted. Please see the shortcuts for push-to-link. - 鏈接你的當前頻道和所選頻道。如果他們有權限在對方頻道講話,玩家現在能聽到彼此的聲音。這是個永久性的鏈接,直到手動取消鏈接或者服務器重啟。請查看按鍵鏈接快捷鍵。 - - - - &Unlink - Channel - &取消鏈接 - - - - Unlink your channel from another channel - 取消你的頻道和另一個頻道之間的鏈接 - - - - This unlinks your current channel from the selected channel. - 取消你的當前頻道和所選頻道之間的鏈接。 - - - - Unlink &All - 取消&所有鏈接 - - - - Unlinks your channel from all linked channels. - 取消你的頻道和所有已鏈接頻道之間的鏈接。 - - - - This unlinks your current channel (not the selected one) from all linked channels. - 取消你的當前頻道(非所選頻道)和所有已鏈接的頻道之間的鏈接。 - - - - &Reset - &重置 - - - - Reset audio preprocessor - 重置音頻預處理器 - - - - This will reset the audio preprocessor, including noise cancellation, automatic gain and voice activity detection. If something suddenly worsens the audio environment (like dropping the microphone) and it was temporary, use this to avoid having to wait for the preprocessor to readjust. - 該選項將重置音頻預處理器,包含噪音消除,自動獲取和語音活動檢測。如果音頻環境突然變的惡劣(比如掉麥)并且是暫時的,使用該選項來避免等待預處理器自我調節。 - - - - &Mute Self - &靜音自己 - - - - Mute yourself - 自我靜音 - - - - Mute or unmute yourself. When muted, you will not send any data to the server. Unmuting while deafened will also undeafen. - 對自己靜音或取消靜音。當靜音時,你將不會發送數據到服務器。當耳聾時取消靜音將同時取消耳聾。 - - - - &Deafen Self - &耳聾自己 - - - - Deafen yourself - 自我耳聾 - - - - Deafen or undeafen yourself. When deafened, you will not hear anything. Deafening yourself will also mute. - 使自己耳聾或取消耳聾。當耳聾時,你將聽不到聲音。耳聾自己將同時靜音自己。 - - - - &Text-To-Speech - &文本語音轉換 - - - - Toggle Text-To-Speech - 切換文本語音轉換 - - - - Enable or disable the text-to-speech engine. Only messages enabled for TTS in the Configuration dialog will actually be spoken. - 啟用或禁用文本語音轉換引擎。只有在配置對話框里被啟用了文本語音轉換的消息才會被讀出來。 - - - - S&tatistics - &統計 - - - - Display audio statistics - 顯示音頻統計 - - - - Pops up a small dialog with information about your current audio input. - 彈出一個關于你當前音頻輸入信息的對話框。 - - - - &Unlink - Plugin - &卸載 - - - - Forcibly unlink plugin - 強行卸載插件 - - - - This forces the current plugin to unlink, which is handy if it is reading completely wrong data. - 強行卸載當前插件,當插件讀取的數據完全錯誤時相當有用。 - - - - &Settings - &設置 - - - - Configure Mumble - 配置 Mumble - - - - Allows you to change most settings for Mumble. - 允許你改變 Mumble 的大多數設置。 - - - - &Audio Wizard - &音頻精靈 - - - - Start the audio configuration wizard - 啟動音頻配置精靈 - - - - This will guide you through the process of configuring your audio hardware. - 這將引導你進入配置你的音頻硬件的流程。 - - - - &What's This? - &這是什么? - - - - Enter What's This? mode - 進入 這是什么? 模式 - - - - Click this to enter "What's This?" mode. Your cursor will turn into a question mark. Click on any button, menu choice or area to show a description of what it is. - 點擊進入"這是什么?"模式。你的鼠標指針將變成一個問號。點擊任意按鈕,菜單或區域來顯示它是什么的描敘。 - - - - &About - &關于 - - - - Information about Mumble - Mumble 的相關信息 - - - - Shows a small dialog with information and license for Mumble. - 顯示一個 Mumble 相關信息和許可的對話框。 - - - - About &Speex - 關于 &Speex - - - - Information about Speex - Speex 的相關信息 - - - - Shows a small dialog with information about Speex. - 顯示一個 Speex 相關信息的小對話框。 - - - - About &Qt - 關于 &Qt - - - - Information about Qt - Qt 相關信息 - - - - Shows a small dialog with information about Qt. - 顯示一個 Qt 相關信息的小對話框。 - - - - Check for &Updates - 檢測&更新 - - - - Check for new version of Mumble - 檢測 Mumble 的新版本 - - - - Connects to the Mumble webpage to check if a new version is available, and notifies you with an appropriate download URL if this is the case. - 連接到 Mumble 主頁來檢測是否有新版本可用,如果有新版本可用將通知你下載。 - - - - Sends a text message to all users in a channel. - 向頻道內所有用戶發送文本信息。 - - - - Send &Tree Message - 發送信息到頻道&樹 - - - - Send message to channel tree. - 向頻道樹發送信息. - - - - This sends a text message to a channel and it's subchannels. - 向一個頻道及其所有子頻道發送文本消息。 - - - - &Minimal View - &簡化窗口 - - - - Toggle minimal window modes - 啟用簡化窗口模式 - - - - This will toggle minimal mode, where the log window and menu is hidden. - 這將啟用簡化窗口模式,該模式將隱藏日志窗口和菜單。 - - - - Joined server: %1. - 加入服務器: %1. - - - - Left server: %1. - 離開服務器: %1. - - - - %1 is now muted and deafened. - %1 現在被靜音和耳聾. - - - - %1 is now muted. - %1 現在被靜音。 - - - - %1 is now unmuted. - %1 現在被取消靜音。 - - - - - server - 服務器 - - - - You were muted by %1. - 你被 %1 靜音。 - - - - You were unmuted by %1. - 你被 %1 取消靜音。 - - - - %1 muted by %2. - %1 被 %2 靜音。 - - - - %1 unmuted by %2. - %1 被 %2 取消靜音。 - - - - You were deafened by %1. - 你被 %1 耳聾。 - - - - You were undeafened by %1. - 你被 %1 取消耳聾。 - - - - %1 deafened by %2. - %1 被 %2 耳聾。 - - - - %1 undeafened by %2. - %1 被 %2 取消耳聾。 - - - - You were kicked from the server by %1: %2. - 你被 %1 從服務器踢出: %2。 - - - - %3 was kicked from the server by %1: %2. - %3 被 %1 從服務器踢出: %2。 - - - - You were kicked and banned from the server by %1: %2. - 你被 %1 從服務器踢出并封禁: %2。 - - - - %3 was kicked and banned from the server by %1: %2. - %3 被 %1 從服務器踢出并封禁: %2。 - - - - You were moved to %1 by %2. - 你被從 %1 移動到 %2。 - - - - %1 left channel. - %1 離開頻道。 - - - - %1 moved out by %2 to %3. - %1 被 %2 移動到 %3。 - - - - %1 moved in by %2 from %3. - %1 被 %2 從 %3 移入。 - - - - %1 entered channel. - %1 進入頻道。 - - - - Server connection rejected: %1. - 服務器拒絕連接: %1。 - - - - Denied: %1. - 拒絕: %1。 - - - - Server maximum bandwidth is only %1 kbit/s. Quality auto-adjusted. - 服務器最大帶寬是 %1 千比特/秒。自動調整質量。 - - - - From %1: %2 - 發送自 %1: %2 - - - - Message from %1 - 來至 %1 的消息 - - - - You have Channel Dragging set to "Do Nothing" so the channel wasn't moved. - 你設置頻道拖動為“無動作"因此頻道沒有被移動。 - - - - Unknown Channel Drag mode in PlayerModel::dropMimeData. - 未知的頻道拖動模式 PlayerModel::dropMimeData。 - - - - Welcome to Mumble. - 歡迎來到 Mumble。 - - - - This is the first time you're starting Mumble.<br />Would you like to go through the Audio Wizard to configure your soundcard? - 這是你第一次啟動 Mumble.<br />你想用音頻精靈配置聲卡嗎? - - - - Server - message from - 服務器 - - - - Hide Frame - 隱藏邊框 - - - - Toggle showing frame on minimal window - 在簡化窗口模式下切換邊框顯示 - - - - This will toggle whether the minimal window should have a frame for moving and resizing. - 該選項切換簡化窗口是否有個用來移動和改變大小的邊框。 - - - - NetworkConfig - - - Network - 網絡 - - - - Form - 表單 - - - - Connection - 連接 - - - - Use TCP compatibility mode - Use TCP compatability mode - 使用 TCP 兼容模式 - - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - <b>啟用 TCP 兼容模式</b>。<br/>這將使 Mumble 與服務器通信時只使用 TCP。這將增加系統開銷并導致丟包從而使通信時出現明顯的暫停,因此只有在你不能使用默認模式時使用它(默認模式使用 UDP 來傳輸語音,TCP 來控制)。 - - - - Use TCP mode - 使用 TCP 模式 - - - - Reconnect when disconnected - 連接斷開后重新連接 - - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - <b>連接斷開后重新連接</b>。<br/>這將使 Mumble 在與服務器的連接斷開 10秒后自動重新連接。 - - - - Reconnect automatically - 自動重新連接 - - - - Proxy - 代理 - - - - Type - 類型 - - - - Type of proxy to connect through - 連接通過的代理類型 - - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatability mode, causing all voice data to be sent via the control channel. - <b>連接通過的代理類型</b><br/>這使 Mumble 通過代理來連接到所有出外的連接。注意: 代理隧道封裝會迫使 Mumble 進入 TCP 兼容模式,導致所有語音數據都通過控制信道發送。 - - - - Direct connection - 直接連接 - - - - HTTP(S) proxy - HTTP(S) 代理 - - - - SOCKS5 proxy - SOCKS5 代理 - - - - Hostname - 主機名 - - - - Hostname of the proxy - 代理主機名 - - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - <b>代理主機名。</b><br />該字段指定你希望用來穿隧傳輸網絡流量的代理主機名。 - - - - Port - 端口 - - - - Port number of the proxy - 代理端口號 - - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - <b>代理服務器端口號。</b><br/>該字段指定代理服務器使用的端口號。 - - - - Username - 用戶名 - - - - Username for proxy authentication - 用于代理認証的用戶名 - - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>用于代理認証的用戶名。</b><br />該字段指定用于代理認証的用戶名。如果代理不需要認証,或者你想要使用匿名連接,請將此字段留白。 - - - - Password - 密碼 - - - - Password for proxy authentication - 用于代理認証的密碼 - - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - <b>用于代理認証的密碼。</b><br/>該字段指定用于代理認証的密碼。如果代理不需要認証,或者你想要使用匿名連接,請將此字段留白。 - - - - Mumble services - Mumble 服務 - - - - Check for updates on startup - 啟動時檢測更新 - - - - Submit anonymous statistics to the Mumble project - 遞交匿名統計數據給 Mumble 項目 - - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - <b>遞交匿名統計數據。</b><br />Mumble 有一個小的開發團隊,并需要專注于開發用戶最想要的功能。通過遞交匿名統計數據你將幫助開發團隊確定重點開發什么。 - - - - Submit anonymous statistics - 遞交匿名統計數據 - - - - Overlay - - Failed to load overlay library. This means either that: -- the library (mumble_ol.dll) wasn't found in the directory you ran Mumble from -- you're on an OS earlier than WinXP SP2 -- you do not have the June 2007 updated version of DX9.0c - 無法加載 overlay 庫。這意味著: -- 庫(mumble_ol.dll)沒有在 Mumble 的運行目錄里被找到。 -- 你的操作系統版本低于 WinXP SP2 -- 你的 DX9.0C 版本低于 2007年6月升級版 - - - - OverlayConfig - - Show no one - 不顯示任何人 - - - Show only talking - 當發言時顯示 - - - Show everyone - 顯示所有人 - - - Form - 表單 - - - Options - 選項 - - - Enable overlay. - 啟用 overlay . - - - This sets whether the overlay is enabled or not. This setting is only checked with D3D9 applications are started, so make sure Mumble is running and this option is on before you start the application.<br />Please note that if you start the application after starting Mumble, or if you disable the overlay while running, there is no safe way to restart the overlay without also restarting the application. - 設置是否啟用 overlay。該設置僅當應用程序已啟動時才會被檢查,因此確保 Mumble 正在運行并且該選項在你啟動應用程序之前已被打開。<br />請注意如果你在啟動 Mumble 后啟動應用程序,或者你在運行時禁用 overlay,重新啟動 overlay 需要重新啟動應用程序。 - - - Enable Overlay - 啟用 Overlay - - - Who to show on the overlay - 在 overlay 上顯示誰 - - - <b>This sets who to show in the in-game overlay.</b><br />If many people are connected to the same channel, the overlay list might be very long. Use this to shorten it.<br /><i>No one</i> - Don't show anyone (but leave overlay running).<br /><i>Only talking</i> - Only show talking people.<br /><i>Everyone</i> - Show everyone. - <b>設置在游戲中的 overlay 內顯示誰。</b><br />如果許多玩家已經連接到同一個頻道,overlay 列表可能會非常長。使用該選項來讓列表變短。<br /><i>無人</i> - 不顯示任何人(但是讓 overlay 運行).<br /><i>僅當用戶發言時</i> - 僅顯示正在發言的人。<br /><i>所有人</i> - 顯示所有人。 - - - Always show yourself on overlay. - 在 overlay 上總是顯示自己。 - - - This sets whether to always show yourself or not. This setting is useful if you aren't showing everyone in the overlay, as then you would only see your own status if you were talking, which wouldn't let you see that you were deafened or muted. - 設置是否總是顯示自己。該選項只有當你不在 overlay 中顯示所有人時才有用,你在講話時只能看到自己的狀態,你將看不到自己被禁音或耳聾。 - - - Always Show Self - 總是顯示自己 - - - Show User custom textures instead of text on the overlay. - 在 overlay 上顯示用戶自定義紋理而不是文本。 - - - This sets whether to download and use custom textures for registered users. If disabled, the regular outline text will be used instead. - 設置是否讓注冊用戶下載并使用自定義紋理。如果禁用該選項,常規邊框文字將被使用。 - - - Show User Textures - 顯示用戶紋理 - - - Position - 位置 - - - Let overlay grow upwards - 讓 overlay 往上增長 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow upwards if needed. - Overlay 試著保持足夠小并固定在你選定的位置上。該選項允許 overlay 在需要時往上增長。 - - - Grow Up - 往上增長 - - - Y-Position of Overlay - Overlay 的 Y-坐標 - - - This sets the relative Y position of the overlay. - 設置 overlay 的相對 Y 坐標。 - - - Let overlay grow to the left - 讓 overlay 往左增長 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the left if needed. - Overlay 試著保持足夠小并固定在你選定的位置上。該選項允許 overlay 在需要時往左增長。 - - - Grow Left - 往左增長 - - - Let overlay grow to the right - 讓 overlay 往右增長 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow to the right if needed. - Overlay 試著保持足夠小并固定在你選定的位置上。該選項允許 overlay 在需要時往右增長。 - - - Grow Right - 往右增長 - - - Let overlay grow downwards - 讓 overlay 往下增長 - - - The overlay tries to stay as small as possible and at the position you have selected. This allows the overlay to grow downwards if needed. - Overlay 試著保持足夠小并固定在你選定的位置上。該選項允許 overlay 在需要時往下增長。 - - - Grow Down - 往下增長 - - - X-Position of Overlay - Overlay 的 X-坐標 - - - This sets the relative X position of the overlay. - 設置 overlay 的相對 X 坐標。 - - - Font - 字體 - - - Current Font - 當前字體 - - - TextLabel - 文本標簽 - - - Set Font - 設置字體 - - - Maximum height - 最大高度 - - - Maximum height of names. - 名字的最大高度. - - - This sets the maximum height of names shown, relative to the screen height. If your active 3D window is 800 pixels tall and this is set to 5%, each name will be 40 pixels tall. Note that the names will not be taller than 60 pixels no matter what you set here. - 設置顯示的名字的最大高度,相對于屏幕高度來說。如果你的活躍 3D 窗口是 800像素高而該值被設成 5%,每個名字會是 40像素高。注意無論你在這里設置什么值名字都不會高于 60像素. - - - Color for players - 玩家顏色 - - - Change - 更改 - - - Color for talking players - 正在發言玩家的顏色 - - - Color for alt-talking players - 試圖發言玩家的顏色 - - - Color for Channels - 頻道的顏色 - - - Color for active Channels - 活躍頻道的顏色 - - - - PlayerModel - - - This is a player connected to the server. The icon to the left of the player indicates whether or not they are talking:<br /><img src="skin:talking_on.png" /> Talking<br /><img src="skin:talking_off.png" /> Not talking - 這是一個連接到服務器的玩家。玩家左邊的圖標顯示他是否在講話。<br /><img src="skin:talking_on.png" />發言中<br /><img src="skin:talking_off.png" /> 沉默中 - - - - This is a channel on the server. Only players in the same channel can hear each other. - 這是服務器上的一個頻道。只有同一頻道的玩家能聽到彼此的聲音。 - - - - This shows the flags the player has on the server, if any:<br /><img src="skin:authenticated.png" />Authenticated user<br /><img src="skin:muted_self.png" />Muted (by self)<br /><img src="skin:muted_server.png" />Muted (by admin)<br /><img src="skin:deafened_self.png" />Deafened (by self)<br /><img src="skin:deafened_server.png" />Deafened (by admin)<br />A player muted by himself is probably just away, talking on the phone or something like that.<br />A player muted by an admin is probably also just away, and the noise the player is making was annoying enough that an admin muted him. - 顯示該玩家在服務器上的標志:<br /><img src="skin:authenticated.png" />已認証的用戶<br /><img src="skin:muted_self.png" />靜音(被自己)<br /><img src="skin:muted_server.png" />靜音(被管理員)<br /><img src="skin:deafened_self.png" />耳聾 (被自己)<br /><img src="skin:deafened_server.png" />耳聾 (被管理員)<br />玩家被自己禁音有可能是他處于離開狀態,比如在接電話。<br />玩家被管理員禁音也有可能是他處于離開狀態,但是他發出了讓管理員惱怒到禁音他的噪音。 - - - - Name - 名字 - - - - Flags - 標志 - - - - Are you sure you want to drag this channel? - 你確信要拖動這個頻道嗎? - - - - PluginConfig - - - - Plugins - 插件 - - - - Plugin has no configure function. - 插件沒有配置選項。 - - - - Plugin has no about function. - 插件沒有關于選項. - - - - Form - 表單 - - - - Options - 選項 - - - - Enable plugins and transmit positional information - 啟用插件并傳送位置信息 - - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - 對支持的游戲啟用插件以獲取你在游戲中的位置并在每個語音包中傳送。這將使別的玩家能根據你在游戲中的聲音來判斷你在游戲中相對于他們自己的方位。 - - - - Link to Game and Transmit Position - 鏈接到游戲并傳送位置 - - - - Reloads all plugins - 重載所有插件 - - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - 重新掃描和重載插件。當你添加或改變一個插件目錄中的插件時使用該選項。 - - - - &Reload plugins - &重載插件 - - - - Information about plugin - 插件相關信息 - - - - This shows a small information message about the plugin. - 顯示插件相關信息。 - - - - &About - &關于 - - - - Show configuration page of plugin - 顯示插件配置頁面 - - - - This shows the configuration page of the plugin, if any. - 顯示插件配置頁面。 - - - - &Configure - &配置 - - - - Plugins - - - %1 lost link. - %1 的鏈接丟失。 - - - - %1 linked. - %1 已鏈接上。 - - - - PortAudioSystem - - - Default Device - 默認設備 - - - - PulseAudioSystem - - - Default Input - 默認輸入 - - - - Default Output - 默認輸出 - - - - ShortcutActionWidget - - - Unassigned - 未分配 - - - - ShortcutDelegate - - - Unassigned - 未分配 - - - - ShortcutKeyWidget - - - Press Shortcut - 輸入快捷鍵 - - - - TextMessage - - Send raw message - 發送原始消息 - - - Disables html formating - 禁用 html 格式化 - - - - Message to send - 要發送的消息 - - - - Preview - 預覽 - - - - Disables html formatting - - - - - Disable text formatting - - - - - This field reflects how the message will look like in the chat. - - - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - - - VersionCheck - - Mumble failed to retrieve version information from the SourceForge server. - Mumble 無法從 SouceForge 服務器獲取版本信息。 - - - - Upgrade Mumble - - - - - A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now? - - - - - Failed to launch snapshot installer. - - - - - Corrupt download of new version detected. Automatically removed. - - - - - Downloading new snapshot from %1 to %2 - - - - - Failed to write new version to disk. - Failed to write new version to disc. - - - - - Mumble failed to retrieve version information from the central server. - - - - - ViewCert - - - Certificate Chain Details - 認証鏈詳細信息 - - - - Certificate chain - 認証鏈 - - - - %1 %2 - - - - - Certificate details - 認証詳細信息 - - - - - Common Name: %1 - 通用名: %1 - - - - - Organization: %1 - 組織: %1 - - - - Subunit: %1 - 部門: %1 - - - - - Country: %1 - 國家: %1 - - - - - Locality: %1 - 位置: %1 - - - - - State: %1 - 省(市): %1 - - - - Valid from: %1 - 有效期始于: %1 - - - - Valid to: %1 - 有效期到: %1 - - - - Serial: %1 - 序列號: %1 - - - - Public Key: %1 bits %2 - 公開密鑰: %1 比特 %2 - - - - RSA - 非對稱加密算法 - - - - DSA - 數字簽名算法 - - - - Digest (MD5): %1 - - - - - Email: %1 - - - - - DNS: %1 - - - - - Issued by: - 發布者: - - - - Unit Name: %1 - 部門名: %1 - - - - WASAPISystem - - - Default Device - 默認設備 - - - diff -Nru mumble-1.2.3/src/mumble11x/murmur_pch.h mumble-1.2.3-87-gf7d8711/src/mumble11x/murmur_pch.h --- mumble-1.2.3/src/mumble11x/murmur_pch.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/murmur_pch.h 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -#include "mumble_pch.hpp" diff -Nru mumble-1.2.3/src/mumble11x/NetworkConfig.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/NetworkConfig.cpp --- mumble-1.2.3/src/mumble11x/NetworkConfig.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/NetworkConfig.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,171 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "NetworkConfig.h" -#include "Global.h" -#include "MainWindow.h" -#include "OSInfo.h" - -static ConfigWidget *NetworkConfigNew(Settings &st) { - return new NetworkConfig(st); -} - -static ConfigRegistrar registrar(1300, NetworkConfigNew); - -NetworkConfig::NetworkConfig(Settings &st) : ConfigWidget(st) { - setupUi(this); -#ifdef NO_UPDATE_CHECK - qcbAutoUpdate->hide(); -#endif -} - -QString NetworkConfig::title() const { - return tr("Network"); -} - -QIcon NetworkConfig::icon() const { - return QIcon(QLatin1String("skin:config_network.png")); -} - -void NetworkConfig::load(const Settings &r) { - - loadCheckBox(qcbTcpMode, s.bTCPCompat); - loadCheckBox(qcbAutoReconnect, s.bReconnect); - loadComboBox(qcbType, s.ptProxyType); - - qleHostname->setText(r.qsProxyHost); - - if (r.usProxyPort > 0) { - QString port; - port.setNum(r.usProxyPort); - qlePort->setText(port); - } else - qlePort->setText(QString()); - - qleUsername->setText(r.qsProxyUsername); - qlePassword->setText(r.qsProxyPassword); - - loadCheckBox(qcbAutoUpdate, r.bUpdateCheck); - loadCheckBox(qcbUsage, r.bUsage); -} - -void NetworkConfig::save() const { - s.bTCPCompat = qcbTcpMode->isChecked(); - s.bReconnect = qcbAutoReconnect->isChecked(); - - s.ptProxyType = static_cast(qcbType->currentIndex()); - s.qsProxyHost = qleHostname->text(); - s.usProxyPort = qlePort->text().toUShort(); - s.qsProxyUsername = qleUsername->text(); - s.qsProxyPassword = qlePassword->text(); - - s.bUpdateCheck=qcbAutoUpdate->isChecked(); - s.bUsage=qcbUsage->isChecked(); -} - -static QNetworkProxy::ProxyType local_to_qt_proxy(Settings::ProxyType pt) { - switch (pt) { - case Settings::NoProxy: - return QNetworkProxy::NoProxy; - case Settings::HttpProxy: - return QNetworkProxy::HttpProxy; - case Settings::Socks5Proxy: - return QNetworkProxy::Socks5Proxy; - } - - return QNetworkProxy::NoProxy; -} - -void NetworkConfig::SetupProxy() { - QNetworkProxy proxy; - proxy.setType(local_to_qt_proxy(g.s.ptProxyType)); - proxy.setHostName(g.s.qsProxyHost); - proxy.setPort(g.s.usProxyPort); - proxy.setUser(g.s.qsProxyUsername); - proxy.setPassword(g.s.qsProxyPassword); - QNetworkProxy::setApplicationProxy(proxy); -} - -bool NetworkConfig::TcpModeEnabled() { - /* - * We force TCP mode for both HTTP and SOCKS5 proxies, even though SOCKS5 supports UDP. - * - * This is because Qt's automatic application-wide proxying fails when we're in UDP - * mode since the datagram transmission code assumes that its socket is created in its - * own thread. Due to the automatic proxying, this assumption is incorrect, because of - * Qt's behind-the-scenes magic. - * - * However, TCP mode uses Qt events to make sure packets are sent off from the right - * thread, and this is what we utilize here. - * - * This is probably not even something that should even be taken care of, as proxying - * itself already is a potential latency killer. - */ - - return g.s.ptProxyType != Settings::NoProxy || g.s.bTCPCompat; -} - -void NetworkConfig::accept() const { - NetworkConfig::SetupProxy(); -} - -bool NetworkConfig::expert(bool b) { - qcbTcpMode->setVisible(b); - qgbProxy->setVisible(b); - qcbUsage->setVisible(b); - return true; -} - -void NetworkConfig::on_qcbType_currentIndexChanged(int v) { - Settings::ProxyType pt = static_cast(v); - - qleHostname->setEnabled(pt != Settings::NoProxy); - qlePort->setEnabled(pt != Settings::NoProxy); - qleUsername->setEnabled(pt != Settings::NoProxy); - qlePassword->setEnabled(pt != Settings::NoProxy); - qcbTcpMode->setEnabled(pt == Settings::NoProxy); - - s.ptProxyType = pt; -} - - -QNetworkReply *Network::get(const QUrl &url) { - QNetworkRequest req(url); - prepareRequest(req); - return g.nam->get(req); -} - -void Network::prepareRequest(QNetworkRequest &req) { -#if QT_VERSION >= 0x040600 - req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); -#endif - req.setRawHeader(QString::fromLatin1("User-Agent").toUtf8(), QString::fromLatin1("Mozilla/5.0 (%1; %2) Mumble/%3 %4").arg(OSInfo::getOS(), OSInfo::getOSVersion(), QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING)), QLatin1String(MUMBLE_RELEASE)).toUtf8()); -} diff -Nru mumble-1.2.3/src/mumble11x/NetworkConfig.h mumble-1.2.3-87-gf7d8711/src/mumble11x/NetworkConfig.h --- mumble-1.2.3/src/mumble11x/NetworkConfig.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/NetworkConfig.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _NETWORKCONFIG_H -#define _NETWORKCONFIG_H - -#include "ConfigDialog.h" -#include "ui_NetworkConfig.h" - -class NetworkConfig : public ConfigWidget, Ui::NetworkConfig { - private: - Q_OBJECT - Q_DISABLE_COPY(NetworkConfig) - public: - NetworkConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - static void SetupProxy(); - static bool TcpModeEnabled(); - public slots: - void accept() const; - void save() const; - void load(const Settings &r); - bool expert(bool); - - void on_qcbType_currentIndexChanged(int v); -}; - -namespace Network { - void prepareRequest(QNetworkRequest &); - QNetworkReply *get(const QUrl &); -} - -#else -class NetworkConfig; -#endif diff -Nru mumble-1.2.3/src/mumble11x/NetworkConfig.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/NetworkConfig.ui --- mumble-1.2.3/src/mumble11x/NetworkConfig.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/NetworkConfig.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,287 +0,0 @@ - - NetworkConfig - - - - 0 - 0 - 257 - 328 - - - - Form - - - - - - - 0 - 0 - - - - Connection - - - - - - Use TCP compatibility mode - - - <b>Enable TCP compatibility mode</b>.<br />This will make Mumble use only TCP when communicating with the server. This will increase overhead and cause lost packets to produce noticeable pauses in communication, so this should only be used if you are unable to use the default (which uses UDP for voice and TCP for control). - - - Use TCP mode - - - - - - - Reconnect when disconnected - - - <b>Reconnect when disconnected</b>.<br />This will make Mumble try to automatically reconnect after 10 seconds if your server connection fails. - - - Reconnect automatically - - - - - - - - - - - 0 - 0 - - - - Proxy - - - - - - Type - - - - - - - - 0 - 0 - - - - Type of proxy to connect through - - - <b>Type of proxy to connect through</b><br />This makes Mumble connect through a proxy for all outgoing connections. Note: Proxy tunneling forces Mumble into TCP compatibility mode, causing all voice data to be sent via the control channel. - - - - Direct connection - - - - - HTTP(S) proxy - - - - - SOCKS5 proxy - - - - - - - - Hostname - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - 0 - 0 - - - - Hostname of the proxy - - - <b>Hostname of the proxy.<b><br />This field specifies the hostname of the proxy you wish to tunnel network traffic through. - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - Port - - - - - - - - 0 - 0 - - - - - 20 - 0 - - - - - 60 - 16777215 - - - - Port number of the proxy - - - <b>Port number of the proxy.</b><br />This field specifies the port number that the proxy expects connections on. - - - - - - - - - 5 - - - - - - - Username - - - - - - - Username for proxy authentication - - - <b>Username for proxy authentication.</b><br />This specifies the username you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - - - Password - - - - - - - Password for proxy authentication - - - <b>Password for proxy authentication.</b><br />This specifies the password you use for authenticating yourself with the proxy. In case the proxy does not use authentication, or you want to connect anonymously, simply leave this field blank. - - - - - - - - - QLineEdit::Password - - - - - - - - - - Mumble services - - - - - - Check for updates on startup - - - - - - - Submit anonymous statistics to the Mumble project - - - <b>Submit anonymous statistics.</b><br />Mumble has a small development team, and as such needs to focus it's development where it's needed most. By submitting a bit of statistics you help the project determine where to focus development. - - - Submit anonymous statistics - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 40 - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/os_macx.mm mumble-1.2.3-87-gf7d8711/src/mumble11x/os_macx.mm --- mumble-1.2.3/src/mumble11x/os_macx.mm 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/os_macx.mm 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "mumble_pch.hpp" -#include "Global.h" -#ifndef COMPAT_CLIENT -#include "Overlay.h" -#endif -#include "MainWindow.h" - -char *os_url = NULL; // fixme(mkrautz): Remove this when mumble11x is gone. -char *os_lang = NULL; -static FILE *fConsole = NULL; - -#define PATH_MAX 1024 -static char crashhandler_fn[PATH_MAX]; - -static void crashhandler_signals_restore(); -static void crashhandler_handle_crash(); - -static void mumbleMessageOutput(QtMsgType type, const char *msg) { - char c; - - switch (type) { - case QtDebugMsg: - c='D'; - break; - case QtWarningMsg: - c='W'; - break; - case QtFatalMsg: - c='F'; - break; - default: - c='X'; - } - -#define LOG(f, msg) fprintf(f, "<%c>%s %s\n", c, \ - qPrintable(QDateTime::currentDateTime().toString(QLatin1String("yyyy-MM-dd hh:mm:ss.zzz"))), msg) - - LOG(stderr, msg); - LOG(fConsole, msg); - fflush(fConsole); - - if (type == QtFatalMsg) { - CFStringRef csMsg = CFStringCreateWithFormat(kCFAllocatorDefault, NULL, CFSTR("%s\n\nThe error has been logged. Please submit your log file to the Mumble project if the problem persists."), msg); - CFUserNotificationDisplayAlert(0, 0, NULL, NULL, NULL, CFSTR("Mumble has encountered a fatal error"), csMsg, CFSTR("OK"), NULL, NULL, NULL); - CFRelease(csMsg); - exit(0); - } -} - -void query_language() { - CFPropertyListRef cfaLangs; - CFStringRef cfsLang; - static char lang[16]; - - cfaLangs = CFPreferencesCopyAppValue(CFSTR("AppleLanguages"), kCFPreferencesCurrentApplication); - cfsLang = (CFStringRef) CFArrayGetValueAtIndex((CFArrayRef)cfaLangs, 0); - - if (! CFStringGetCString(cfsLang, lang, 16, kCFStringEncodingUTF8)) - return; - - os_lang = lang; -} - -static void crashhandler_signal_handler(int signal) { - switch (signal) { - case SIGQUIT: - case SIGILL: - case SIGTRAP: - case SIGABRT: - case SIGEMT: - case SIGFPE: - case SIGBUS: - case SIGSEGV: - case SIGSYS: - crashhandler_signals_restore(); - crashhandler_handle_crash(); - break; - default: - break; - } -} - -/* These are the signals that according to signal(3) produce a coredump by default. */ -int sigs[] = { SIGQUIT, SIGILL, SIGTRAP, SIGABRT, SIGEMT, SIGFPE, SIGBUS, SIGSEGV, SIGSYS }; -#define NSIGS sizeof(sigs)/sizeof(sigs[0]) - -static void crashhandler_signals_setup() { - for (int i = 0; i < NSIGS; i++) { - signal(sigs[i], crashhandler_signal_handler); - } -} - -static void crashhandler_signals_restore() { - for (int i = 0; i < NSIGS; i++) { - signal(sigs[i], NULL); - } -} - -static void crashhandler_init() { -#ifdef COMPAT_CLIENT - QString dump = QDir::homePath() + QLatin1String("/Library/Preferences/Mumble/mumble11x.dmp"); -#else - QString dump = g.qdBasePath.filePath(QLatin1String("mumble.dmp")); -#endif - if (strncpy(crashhandler_fn, dump.toUtf8().data(), PATH_MAX)) { - crashhandler_signals_setup(); - /* todo: Change the behavior of the Apple crash dialog? Maybe? */ - } -} - -static void crashhandler_handle_crash() { - /* Abuse mtime for figuring out which crashdump we should send. */ - FILE *f = fopen(crashhandler_fn, "w"); - fflush(f); - fclose(f); -} - -void os_init() { - crashhandler_init(); - - const char *home = getenv("HOME"); -#ifdef COMPAT_CLIENT - const char *logpath = "/Library/Logs/Mumble11x.log"; -#else - const char *logpath = "/Library/Logs/Mumble.log"; -#endif - - if (home) { - size_t len = strlen(home) + strlen(logpath) + 1; - STACKVAR(char, buff, len); - memset(buff, 0, len); - strcat(buff, home); - strcat(buff, logpath); - fConsole = fopen(buff, "a+"); - if (fConsole) - qInstallMsgHandler(mumbleMessageOutput); - } - - /* Query for language setting. OS X's LANG environment variable is determined from the region selected - * in SystemPrefs -> International -> Formats -> Region instead of the system language. We override this - * by always using the system langauge, to get rid of all sorts of nasty langauge inconsistencies. */ - query_language(); -} diff -Nru mumble-1.2.3/src/mumble11x/OSS.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/OSS.cpp --- mumble-1.2.3/src/mumble11x/OSS.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/OSS.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,367 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "OSS.h" -#include "User.h" -#include "Global.h" -#include "MainWindow.h" -#include -#include -#include -#include - -#define NBLOCKS 8 - -#define MAX(a,b) ( (a) > (b) ? (a) : (b) ) -#define MIN(a,b) ( (a) < (b) ? (a) : (b) ) - -class OSSEnumerator { - public: - QHash qhInput; - QHash qhOutput; - QHash qhDevices; - OSSEnumerator(); -}; - -static OSSEnumerator *cards = NULL; - -class OSSInit : public DeferInit { - void initialize() { - cards = new OSSEnumerator(); - }; - void destroy() { - delete cards; - cards = NULL; - }; -}; - -static OSSInit ossi; - -class OSSInputRegistrar : public AudioInputRegistrar { - public: - OSSInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; -}; - - -class OSSOutputRegistrar : public AudioOutputRegistrar { - public: - OSSOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); -}; - -static OSSInputRegistrar airOSS; -static OSSOutputRegistrar aorOSS; - -OSSInputRegistrar::OSSInputRegistrar() : AudioInputRegistrar(QLatin1String("OSS")) { -} - -AudioInput *OSSInputRegistrar::create() { - return new OSSInput(); -} - -const QList OSSInputRegistrar::getDeviceChoices() { - QList qlReturn; - - QStringList qlInputDevs = cards->qhInput.keys(); - qSort(qlInputDevs); - - if (qlInputDevs.contains(g.s.qsOSSInput)) { - qlInputDevs.removeAll(g.s.qsOSSInput); - qlInputDevs.prepend(g.s.qsOSSInput); - } - - foreach(const QString &dev, qlInputDevs) { - qlReturn << audioDevice(cards->qhInput.value(dev), dev); - } - - return qlReturn; -} - -void OSSInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsOSSInput = choice.toString(); -} - -bool OSSInputRegistrar::canEcho(const QString &) const { - return false; -} - -OSSOutputRegistrar::OSSOutputRegistrar() : AudioOutputRegistrar(QLatin1String("OSS")) { -} - -AudioOutput *OSSOutputRegistrar::create() { - return new OSSOutput(); -} - -const QList OSSOutputRegistrar::getDeviceChoices() { - QList qlReturn; - - QStringList qlOutputDevs = cards->qhOutput.keys(); - qSort(qlOutputDevs); - - if (qlOutputDevs.contains(g.s.qsOSSOutput)) { - qlOutputDevs.removeAll(g.s.qsOSSOutput); - qlOutputDevs.prepend(g.s.qsOSSOutput); - } - - foreach(const QString &dev, qlOutputDevs) { - qlReturn << audioDevice(cards->qhOutput.value(dev), dev); - } - - return qlReturn; -} - -void OSSOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsOSSOutput = choice.toString(); -} - -OSSEnumerator::OSSEnumerator() { - qhInput.insert(QString(), QLatin1String("Default OSS Device")); - qhOutput.insert(QString(), QLatin1String("Default OSS Device")); - qhDevices.insert(QString(), QLatin1String("/dev/dsp")); - -#if (SOUND_VERSION >= 0x040002) - int mixerfd = open("/dev/mixer", O_RDWR, 0); - if (mixerfd == -1) { - qWarning("OSSEnumerator: Failed to open /dev/mixer"); - return; - } - - oss_sysinfo sysinfo; - - if (ioctl(mixerfd, SNDCTL_SYSINFO, &sysinfo) == -1) { - qWarning("OSSEnumerator: Failed SNDCTL_SYSINFO"); - return; - } - - for (int i=0;i< sysinfo.numaudios;i++) { - oss_audioinfo ainfo; - ainfo.dev = i; - if (ioctl(mixerfd, SNDCTL_AUDIOINFO, &ainfo) == -1) { - qWarning("OSSEnumerator: SNDCTL_AUDIOINFO failed for device %d", i); - continue; - } - - QString handle = QLatin1String(ainfo.handle); - QString name = QLatin1String(ainfo.name); - QString device = QLatin1String(ainfo.devnode); - - if (ainfo.caps & PCM_CAP_HIDDEN) - continue; - - qhDevices.insert(handle, device); - - if (ainfo.caps & PCM_CAP_INPUT) - qhInput.insert(handle, name); - if (ainfo.caps & PCM_CAP_OUTPUT) - qhOutput.insert(handle, name); - } - close(mixerfd); -#endif -} - -OSSInput::OSSInput() { - bRunning = true; -} - -OSSInput::~OSSInput() { - // Signal input thread to end - bRunning = false; - wait(); -} - -void OSSInput::run() { - QByteArray device = cards->qhDevices.value(g.s.qsOSSInput).toLatin1(); - if (device.isEmpty()) { - qWarning("OSSInput: Stored device not found, falling back to default"); - device = cards->qhDevices.value(QString()).toLatin1(); - } - - int fd = open(device.constData(), O_RDONLY, 0); - if (fd == -1) { - qWarning("OSSInput: Failed to open %s", device.constData()); - return; - } - - int ival; - - ival = AFMT_S16_NE; - if ((ioctl(fd, SNDCTL_DSP_SETFMT, &ival) == -1) || (ival != AFMT_S16_NE)) { - qWarning("OSSInput: Failed to set sound format"); - goto out; - } - - ival = 1; - if ((ioctl(fd, SNDCTL_DSP_CHANNELS, &ival) == -1)) { - qWarning("OSSInput: Failed to set mono mode"); - goto out; - } - iMicChannels = ival; - - ival = SAMPLE_RATE; - if (ioctl(fd, SNDCTL_DSP_SPEED, &ival) == -1) { - qWarning("OSSInput: Failed to set speed"); - goto out; - } - iMicFreq = ival; - - qWarning("OSSInput: Staring audio capture from %s", device.constData()); - - eMicFormat = SampleShort; - initializeMixer(); - - short buffer[iMicLength]; - - while (bRunning) { - int len = static_cast(iMicLength * iMicChannels * sizeof(short)); - ssize_t l = read(fd, buffer, len); - if (l != len) { - qWarning("OSSInput: Read %ld", l); - break; - } - addMic(buffer, iMicLength); - } - - qWarning("OSSInput: Releasing."); - ioctl(fd, SNDCTL_DSP_RESET, NULL); - -out: - close(fd); -} - -OSSOutput::OSSOutput() { - bRunning = true; - - qWarning("OSSOutput: Initialized"); -} - -OSSOutput::~OSSOutput() { - bRunning = false; - // Call destructor of all children - wipe(); - // Wait for terminate - wait(); - qWarning("OSSOutput: Destroyed"); -} - -void OSSOutput::run() { - QByteArray device = cards->qhDevices.value(g.s.qsOSSOutput).toLatin1(); - if (device.isEmpty()) { - qWarning("OSSOutput: Stored device not found, falling back to default"); - device = cards->qhDevices.value(QString()).toLatin1(); - } - - int fd = open(device.constData(), O_WRONLY, 0); - if (fd == -1) { - qWarning("OSSOutput: Failed to open %s", device.constData()); - return; - } - - int ival; - - ival = (g.s.iOutputDelay+1) << 16 | 11; - - if (ioctl(fd, SNDCTL_DSP_SETFRAGMENT, &ival) == -1) { - qWarning("OSSOutput: Failed to set fragment"); - } - - ival = AFMT_S16_NE; - if ((ioctl(fd, SNDCTL_DSP_SETFMT, &ival) == -1) || (ival != AFMT_S16_NE)) { - qWarning("OSSOutput: Failed to set sound format"); - return; - } - - iChannels = 0; - - if (g.s.doPositionalAudio()) - iChannels = 2; - else - iChannels = 1; - - ival = iChannels; - if ((ioctl(fd, SNDCTL_DSP_CHANNELS, &ival) == -1) && (ival == static_cast(iChannels))) { - qWarning("OSSOutput: Failed to set channels"); - return; - } - iChannels = ival; - - ival = SAMPLE_RATE; - if (ioctl(fd, SNDCTL_DSP_SPEED, &ival) == -1) { - qWarning("OSSOutput: Failed to set speed"); - return; - } - iMixerFreq = ival; - - const unsigned int chanmasks[32] = { - SPEAKER_FRONT_LEFT, - SPEAKER_FRONT_RIGHT, - SPEAKER_FRONT_CENTER, - SPEAKER_LOW_FREQUENCY, - SPEAKER_BACK_LEFT, - SPEAKER_BACK_RIGHT, - SPEAKER_SIDE_LEFT, - SPEAKER_SIDE_RIGHT, - SPEAKER_BACK_CENTER - }; - - eSampleFormat = SampleShort; - - initializeMixer(chanmasks); - - int iOutputBlock = (iFrameSize * iMixerFreq) / SAMPLE_RATE; - - qWarning("OSSOutput: Staring audio playback to %s", device.constData()); - - ssize_t blocklen = iOutputBlock * iChannels * sizeof(short); - short mbuffer[iOutputBlock * iChannels]; - - while (bRunning) { - bool stillRun = mix(mbuffer, iOutputBlock); - if (stillRun) { - ssize_t l = write(fd, mbuffer, blocklen); - if (l != blocklen) { - qWarning("OSSOutput: Write %ld != %ld", l, blocklen); - break; - } - } else { - while (! mix(mbuffer, iOutputBlock) && bRunning) - this->msleep(20); - write(fd, mbuffer, blocklen); - } - } - qWarning("OSSOutput: Releasing device"); - ioctl(fd, SNDCTL_DSP_RESET, NULL); - close(fd); -} diff -Nru mumble-1.2.3/src/mumble11x/OSS.h mumble-1.2.3-87-gf7d8711/src/mumble11x/OSS.h --- mumble-1.2.3/src/mumble11x/OSS.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/OSS.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,61 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _OSS_H -#define _OSS_H - -#include "AudioInput.h" -#include "AudioOutput.h" - -class OSSInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(OSSInput) - protected: - void release(); - public: - OSSInput(); - ~OSSInput(); - void run(); -}; - -class OSSOutput : public AudioOutput { - friend class OSSUser; - private: - Q_OBJECT - Q_DISABLE_COPY(OSSOutput) - public: - OSSOutput(); - ~OSSOutput(); - void run(); -}; - -#else -#endif diff -Nru mumble-1.2.3/src/mumble11x/os_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/os_win.cpp --- mumble-1.2.3/src/mumble11x/os_win.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/os_win.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,268 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include -#include -#include - -#include "Global.h" -#include "Version.h" - -extern "C" { - void __cpuid(int a[4], int b); - void mumble_speex_init(); -}; - -#define PATH_MAX 1024 - -static wchar_t wcCrashDumpPath[PATH_MAX]; -static FILE *fConsole = NULL; - -static wchar_t wcComment[PATH_MAX] = L""; -static MINIDUMP_USER_STREAM musComment; - -static int cpuinfo[4]; - -bool bIsWin7 = false; -bool bIsVistaSP1 = false; - -static void mumbleMessageOutput(QtMsgType type, const char *msg) { - char c; - switch (type) { - case QtDebugMsg: - c='D'; - break; - case QtWarningMsg: - c='W'; - break; - case QtFatalMsg: - c='F'; - break; - default: - c='X'; - } - fprintf(fConsole, "<%c>%s %s\n", c, qPrintable(QDateTime::currentDateTime().toString(QLatin1String("yyyy-MM-dd hh:mm:ss.zzz"))), msg); - fflush(fConsole); - OutputDebugStringA(msg); - if (type == QtFatalMsg) { - ::MessageBoxA(NULL, msg, "Mumble", MB_OK | MB_ICONERROR); - exit(0); - } -} - -static LONG WINAPI MumbleUnhandledExceptionFilter(struct _EXCEPTION_POINTERS* ExceptionInfo) { - MINIDUMP_EXCEPTION_INFORMATION i; - i.ThreadId = GetCurrentThreadId(); - i.ExceptionPointers = ExceptionInfo; - - MINIDUMP_USER_STREAM_INFORMATION musi; - - musi.UserStreamCount = 1; - musi.UserStreamArray = &musComment; - - HANDLE hMinidump = CreateFile(wcCrashDumpPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if (hMinidump != INVALID_HANDLE_VALUE) { - if (MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hMinidump, static_cast(MiniDumpWithIndirectlyReferencedMemory | MiniDumpWithThreadInfo), &i, &musi, NULL)) { - FlushFileBuffers(hMinidump); - } - CloseHandle(hMinidump); - } - - return EXCEPTION_CONTINUE_SEARCH; -} - -BOOL SetHeapOptions() { - HMODULE hLib = LoadLibrary(L"kernel32.dll"); - if (hLib == NULL) - return FALSE; - - typedef BOOL (WINAPI *HSI)(HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T); - HSI pHsi = (HSI)GetProcAddress(hLib, "HeapSetInformation"); - if (!pHsi) { - FreeLibrary(hLib); - return FALSE; - } - -#ifndef HeapEnableTerminationOnCorruption -#define HeapEnableTerminationOnCorruption (HEAP_INFORMATION_CLASS)1 -#endif - - BOOL fRet = (pHsi)(NULL, HeapEnableTerminationOnCorruption, NULL, 0) ? TRUE : FALSE; - if (hLib) - FreeLibrary(hLib); - - return fRet; -} - -FARPROC WINAPI delayHook(unsigned dliNotify, PDelayLoadInfo pdli) { - if (dliNotify != dliNotePreLoadLibrary) - return 0; - - - size_t length = strlen(pdli->szDll); - if (length < 5) - return 0; - - size_t buflen = length + 10; - - STACKVAR(char, filename, buflen); - strcpy_s(filename, buflen, pdli->szDll); - - size_t offset = 0; - - if (_stricmp(filename + length - 4, ".dll") == 0) - offset = length-4; - else - offset = length; - - HMODULE hmod = 0; - - // SSE? - if (cpuinfo[3] & 0x02000000) { - // SSE2? - if (cpuinfo[3] & 0x04000000) { - // And SSE3? - if (cpuinfo[2] & 0x00000001) { - strcpy_s(filename + offset, 10, ".sse3.dll"); - hmod = LoadLibraryA(filename); - if (hmod) - return (FARPROC) hmod; - } - - strcpy_s(filename + offset, 10, ".sse2.dll"); - hmod = LoadLibraryA(filename); - if (hmod) - return (FARPROC) hmod; - } - - strcpy_s(filename + offset, 10, ".sse.dll"); - hmod = LoadLibraryA(filename); - if (hmod) - return (FARPROC) hmod; - } - - return 0; -} - -void os_init() { - __pfnDliNotifyHook2 = delayHook; - __cpuid(cpuinfo, 1); - -#define MMXSSE 0x02800000 - if ((cpuinfo[3] & MMXSSE) != MMXSSE) { - ::MessageBoxA(NULL, "Mumble requires a SSE capable processor (Pentium 3 / Ahtlon-XP)", "Mumble", MB_OK | MB_ICONERROR); - exit(0); - } - - OSVERSIONINFOEXW ovi; - memset(&ovi, 0, sizeof(ovi)); - - ovi.dwOSVersionInfoSize = sizeof(ovi); - GetVersionEx(reinterpret_cast(&ovi)); - bIsWin7 = (ovi.dwMajorVersion >= 7) || ((ovi.dwMajorVersion == 6) &&(ovi.dwBuildNumber >= 7100)); - bIsVistaSP1 = (ovi.dwMajorVersion >= 7) || ((ovi.dwMajorVersion == 6) &&(ovi.dwBuildNumber >= 6001)); - - unsigned int currentControl = 0; - _controlfp_s(¤tControl, _DN_FLUSH, _MCW_DN); - - SetHeapOptions(); - mumble_speex_init(); - -#ifdef QT_NO_DEBUG -#ifdef COMPAT_CLIENT - errno_t res = 0; - size_t reqSize; - _wgetenv_s(&reqSize, NULL, 0, L"APPDATA"); - if (reqSize > 0) { - reqSize += strlen("/Mumble/Console11x.txt"); - size_t bSize = reqSize; - - STACKVAR(wchar_t, buff, reqSize+1); - - _wgetenv_s(&reqSize, buff, bSize, L"APPDATA"); - wcscat_s(buff, bSize, L"/Mumble/Console11x.txt"); - res = _wfopen_s(&fConsole, buff, L"a+"); - } - if ((res != 0) || (! fConsole)) { - res=_wfopen_s(&fConsole, L"Console11x.txt", L"a+"); - } -#else - QString console = g.qdBasePath.filePath(QLatin1String("Console.txt")); - fConsole = _wfsopen(console.utf16(), L"a+", _SH_DENYWR); -#endif - - if (fConsole) - qInstallMsgHandler(mumbleMessageOutput); - - QString hash; - QFile f(qApp->applicationFilePath()); - if (! f.open(QIODevice::ReadOnly)) { - qWarning("VersionCheck: Failed to open binary"); - } else { - QByteArray a = f.readAll(); - if (a.size() > 0) { - QCryptographicHash qch(QCryptographicHash::Sha1); - qch.addData(a); - hash = QLatin1String(qch.result().toHex()); - } - } - - QString comment = QString::fromLatin1("%1\n%2\n%3").arg(QString::fromLatin1(MUMBLE_RELEASE), QString::fromLatin1(MUMTEXT(MUMBLE_VERSION_STRING)), hash); - - wcscpy_s(wcComment, PATH_MAX, comment.utf16()); - musComment.Type = CommentStreamW; - musComment.Buffer = wcComment; - musComment.BufferSize = wcslen(wcComment) * sizeof(wchar_t); - -#ifdef COMPAT_CLIENT - QString dump = QDesktopServices::storageLocation(QDesktopServices::DataLocation) + QLatin1String("\\mumble11x.dmp"); -#else - QString dump = g.qdBasePath.filePath(QLatin1String("mumble.dmp")); -#endif - - QFileInfo fi(dump); - QDir::root().mkpath(fi.absolutePath()); - - if (wcscpy_s(wcCrashDumpPath, PATH_MAX, dump.utf16()) == 0) - SetUnhandledExceptionFilter(MumbleUnhandledExceptionFilter); - - // Increase our priority class to live alongside games. - if (!SetPriorityClass(GetCurrentProcess(),HIGH_PRIORITY_CLASS)) - qWarning("Application: Failed to set priority!"); -#endif - -#ifndef COMPAT_CLIENT - g.qdBasePath.mkpath(QLatin1String("Snapshots")); - if (bIsWin7) - SetCurrentProcessExplicitAppUserModelID(QString::fromLatin1("net.sourceforge.mumble.Mumble").utf16()); -#endif -} - diff -Nru mumble-1.2.3/src/mumble11x/PAAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/PAAudio.cpp --- mumble-1.2.3/src/mumble11x/PAAudio.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/PAAudio.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,425 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2007, Stefan Gehn - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "PAAudio.h" -#include "Global.h" - -QMutex PortAudioSystem::qmStream; - -class PortAudioInputRegistrar : public AudioInputRegistrar { - public: - PortAudioInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; -}; - -class PortAudioOutputRegistrar : public AudioOutputRegistrar { - public: - PortAudioOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); -}; - -class PAInit : public DeferInit { - protected: - bool bInit; - PortAudioInputRegistrar *pairReg; - PortAudioOutputRegistrar *paorReg; - public: - void initialize(); - void destroy(); -}; - -static PAInit spaiInit; - -void PAInit::initialize() { - pairReg = NULL; - paorReg = NULL; - bInit = false; - - PaError err = Pa_Initialize(); - if (err != paNoError) { - qWarning("PortAudio: Failed library initialization: %s",Pa_GetErrorText(err)); - return; - } - bInit = true; - pairReg = new PortAudioInputRegistrar(); - paorReg = new PortAudioOutputRegistrar(); -} - -void PAInit::destroy() { - delete pairReg; - delete paorReg; - if (bInit) { - PaError err = Pa_Terminate(); - if (err != paNoError) { - qWarning("PortAudio: Failed termination: %s", Pa_GetErrorText(err)); - } - } -} - -PortAudioInputRegistrar::PortAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("PortAudio")) { -} - -AudioInput *PortAudioInputRegistrar::create() { - return new PortAudioInput(); -} - -const QList PortAudioInputRegistrar::getDeviceChoices() { - return PortAudioSystem::enumerateDevices(true, g.s.iPortAudioInput); -} - -void PortAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.iPortAudioInput = choice.toInt(); -} - -bool PortAudioInputRegistrar::canEcho(const QString &) const { - return false; -} - -PortAudioOutputRegistrar::PortAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("PortAudio")) { -} - -AudioOutput *PortAudioOutputRegistrar::create() { - return new PortAudioOutput(); -} - -const QList PortAudioOutputRegistrar::getDeviceChoices() { - return PortAudioSystem::enumerateDevices(false, g.s.iPortAudioOutput); -} - -void PortAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.iPortAudioOutput = choice.toInt(); -} - - -bool PortAudioSystem::initStream(PaStream **stream, PaDeviceIndex devIndex, int frameSize, int *chans, bool isInput) { - QMutexLocker lock(&qmStream); - PaError err; - PaStreamParameters streamPar; - int nchans = 1; - - if (!stream) // null pointer passed - return false; - - if (*stream) // pointer valid but already initialized, exit gracefully - return true; - - // -1 is default device, otherwise pass value straight to PA - if (devIndex == -1) - devIndex = (isInput ? Pa_GetDefaultInputDevice() : Pa_GetDefaultOutputDevice()); - - const PaDeviceInfo *devInfo = Pa_GetDeviceInfo(devIndex); - if (!devInfo) { - qWarning("PortAudioSystem: Failed to find information about device %d", devIndex); - return false; - } - - const PaHostApiInfo *apiInfo = Pa_GetHostApiInfo(devInfo->hostApi); - if (!apiInfo) { - qWarning("PortAudioSystem: Failed to find information about API %d (dev %d)", devInfo->hostApi, devIndex); - return false; - } - - qWarning("PortAudioSystem: Will use device %d: %s %s",devIndex, apiInfo->name, devInfo->name); - - if (!isInput) { - if (g.s.doPositionalAudio() && devInfo->maxOutputChannels > 1) - nchans = 2; - } - - if (chans) - *chans = nchans; - - streamPar.device = devIndex; - streamPar.channelCount = nchans; - streamPar.sampleFormat = paInt16; - //TODO: Can I determine this latency from mumble settings? - streamPar.suggestedLatency = (isInput ? devInfo->defaultLowInputLatency : devInfo->defaultLowOutputLatency); - streamPar.hostApiSpecificStreamInfo = NULL; - - qWarning("suggestedLatency : %6d ms",int(streamPar.suggestedLatency * 1000)); - qWarning("channels: : %6d", nchans); - qWarning("frameSize : %6d bytes", frameSize); - qWarning("sample rate : %6d samples/sec", SAMPLE_RATE); - - err = Pa_OpenStream(stream, - (isInput ? &streamPar : NULL), // input parameters - (isInput ? NULL : &streamPar), // output parameters - SAMPLE_RATE, // sample rate (from Audio.h) - frameSize, // frames per buffer - paClipOff|paDitherOff, // stream flags, do not clip or dither data - NULL, // callback funtion, UNUSED - NULL); // callback data, UNUSED - if (err != paNoError) { - qCritical("PortAudioSystem: Could not open PortAudio stream, error %s", Pa_GetErrorText(err)); - stream = 0; - return false; - } - - qWarning("PortAudioSystem Opened PortAudio stream %p", *stream); - return true; -} - -bool PortAudioSystem::terminateStream(PaStream *stream) { - QMutexLocker lock(&qmStream); - PaError err; - - if (!stream) { - return false; - } - - err = Pa_CloseStream(stream); - if (err != paNoError) { - qCritical("PortAudioSystem: Could not close PortAudio stream, error %s", Pa_GetErrorText(err)); - return false; - } - - qWarning("PortAudioSystem: Closed PortAudio stream %p", stream); - return true; -} - -bool PortAudioSystem::startStream(PaStream *stream) { - PaError err; - - if (!stream) { - qWarning("PortAudioSystem: NULL PaStream passed to startStream()"); - return false; - } - - err = Pa_IsStreamStopped(stream); - if (err == 0) { // stream running - return true; - } else if (err != 1) { // some error, 1 means "stopped" - qCritical("PortAudioSystem: Could not determine status of PortAudio stream, error %s", Pa_GetErrorText(err)); - return false; - } - - err = Pa_StartStream(stream); - if (err != paNoError) { - qCritical("PortAudioSystem: Could not start PortAudio stream, error %s",Pa_GetErrorText(err)); - return false; - } - - return true; -} - -bool PortAudioSystem::stopStream(PaStream *stream) { - PaError err; - - if (!stream) { - qWarning("PortAudioSystem: NULL PaStream passed to stopStream()"); - return false; - } - - err = Pa_IsStreamStopped(stream); - if (err == 1) { // stream already stopped - return true; - } else if (err != 0) { // some error, 0 means "running" - qCritical("PortAudioSystem: Could not determine status of PortAudio stream, error %s", Pa_GetErrorText(err)); - return false; - } - - err = Pa_StopStream(stream); - if (err != paNoError) { - qWarning("PortAudioSystem: Could not stop PortAudio stream, error %s",Pa_GetErrorText(err)); - return false; - } - - //qWarning() << "PortAudioSystem::stopStream(); stopped stream" << stream ; - return true; -} - -const QList PortAudioSystem::enumerateDevices(bool input, PaDeviceIndex match) { - PaHostApiIndex iApiCnt; - PaHostApiIndex iApiIndex; - int iApiDevIndex; - PaDeviceIndex iDevIndex; - const PaDeviceInfo *pDevInfo; - - QList adl; - - adl << audioDevice(tr("Default Device"), -1); - - iApiCnt = Pa_GetHostApiCount(); - for (iApiIndex = 0; iApiIndex < iApiCnt; iApiIndex++) { - const PaHostApiInfo *apiInfo = Pa_GetHostApiInfo(iApiIndex); - if (!apiInfo) - continue; - - QString qsApiName = QLatin1String(apiInfo->name); - - for (iApiDevIndex = 0; iApiDevIndex < apiInfo->deviceCount; iApiDevIndex++) { - iDevIndex = Pa_HostApiDeviceIndexToDeviceIndex(iApiIndex, iApiDevIndex); - pDevInfo = Pa_GetDeviceInfo(iDevIndex); - if (!pDevInfo) - continue; - - QString qsDevName = QLatin1String(pDevInfo->name); - - if ((input && (pDevInfo->maxInputChannels > 0)) || - (!input && (pDevInfo->maxOutputChannels > 0))) - adl << audioDevice(qsApiName + QLatin1String(": ") + qsDevName, iDevIndex); - } - } - for (int i=0;i(&iMicChannels), true)) - return; // PA init or stream opening failed, we will give up - - iMicFreq = SAMPLE_RATE; - eMicFormat = SampleShort; - initializeMixer(); - - short inBuffer[iMicLength * iMicChannels]; - - // depend on the stream having started - bRunning = PortAudioSystem::startStream(inputStream); - while (bRunning) { - err = Pa_ReadStream(inputStream, inBuffer, iMicLength); - if (err == paNoError) { - addMic(inBuffer, iMicLength); - } else if (err == paInputOverflowed) { - qWarning("PortAudioInput: Overflow on PortAudio input-stream, we lost incoming data!"); - } else { // other error, aborg - qWarning("PortAudioInput: Could not read from PortAudio stream, error %s", Pa_GetErrorText(err)); - bRunning = false; - } - } - // ignoring return value on purpose, we cannot do anything about it anyway - PortAudioSystem::stopStream(inputStream); - - // ignoring return value on purpose, we cannot do anything about it anyway - PortAudioSystem::terminateStream(inputStream); - inputStream = 0; // just for gdb sessions ;) -} - - - -// ------------------------------------------------------------------------------------------------ - - -PortAudioOutput::PortAudioOutput() { - bRunning = true; -} - -PortAudioOutput::~PortAudioOutput() { - bRunning = false; // inform loop in run() about exit - wipe(); // Call destructor of all children - wait(); // wait for thread termination -} - -//TODO: redo this without busy waiting if possible -void PortAudioOutput::run() { - PaStream *outputStream = 0; - PaError err = paNoError; - int chans = 0; - bool zero = true; - - if (!PortAudioSystem::initStream(&outputStream, g.s.iPortAudioOutput, iFrameSize, &chans, false)) - return; // PA initialization or stream opening failed, we will give up - - const unsigned int cmask[2] = { - SPEAKER_FRONT_LEFT, - SPEAKER_FRONT_RIGHT - }; - - iChannels = chans; - iMixerFreq = SAMPLE_RATE; - eSampleFormat = SampleShort; - initializeMixer(cmask); - - short outBuffer[iFrameSize * iChannels]; - - while (bRunning) { - bool avail = true; - - if (zero) - memset(outBuffer, 0, sizeof(short) * iFrameSize * iChannels); - else - avail = mix(outBuffer, iFrameSize); - - if (avail) { - if (! PortAudioSystem::startStream(outputStream)) { - bRunning = false; - break; - } - err = Pa_WriteStream(outputStream, outBuffer, iFrameSize); - if (err == paOutputUnderflowed) { - qWarning("PortAudioOutput: Output underflowed. Attempting graceful recovery."); - zero = true; - continue; - } else if (err != paNoError) { - qWarning("PortAudioOutput: Could not write to PortAudio stream, error %s", Pa_GetErrorText(err)); - bRunning = false; - } - } else { - if (! PortAudioSystem::stopStream(outputStream)) - bRunning = false; - this->msleep(20); - } - - zero = false; - } - - PortAudioSystem::terminateStream(outputStream); - outputStream = NULL; // just for gdb sessions -} diff -Nru mumble-1.2.3/src/mumble11x/PAAudio.h mumble-1.2.3-87-gf7d8711/src/mumble11x/PAAudio.h --- mumble-1.2.3/src/mumble11x/PAAudio.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/PAAudio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2007, Stefan Gehn - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _MUMBLE_PAAUDIO_H -#define _MUMBLE_PAAUDIO_H - -#include "AudioInput.h" -#include "AudioOutput.h" - -#include - -class PortAudioSystem; -typedef boost::shared_ptr PortAudioSystemPtr; -typedef boost::weak_ptr WeakPortAudioSystemPtr; - -/** - * Small wrapper around some critical PortAudio functions. - * - * Basically this ensures that the PA lib is initialized and terminated properly and that - * several threads can open/close streams as they like. - */ -class PortAudioSystem : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(PortAudioSystem) - protected: - //! Mutex around PA stream creation/deletion - static QMutex qmStream; - public: - static bool initStream(PaStream **stream, PaDeviceIndex devIndex, int frameSize, int *chans, bool isInput); - static bool terminateStream(PaStream *stream); - - static bool startStream(PaStream *stream); - static bool stopStream(PaStream *stream); - - static const QList enumerateDevices(bool input, PaDeviceIndex match = -1); -}; - - -class PortAudioInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(PortAudioInput) - public: - PortAudioInput(); - ~PortAudioInput(); - void run(); -}; - - -class PortAudioOutput : public AudioOutput { - private: - Q_OBJECT - Q_DISABLE_COPY(PortAudioOutput) - public: - PortAudioOutput(); - ~PortAudioOutput(); - void run(); -}; - -#else -class PortAudioSystem; -class PortAudioInput; -class PortAudioOutput; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Player.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Player.cpp --- mumble-1.2.3/src/mumble11x/Player.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Player.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,153 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Player.h" -#include "Channel.h" - -QHash ClientPlayer::c_qmPlayers; -QReadWriteLock ClientPlayer::c_qrwlPlayers; - -Player::Player() { - sState = Player::Connected; - uiSession = 0; - iId = -1; - bMute = bDeaf = false; - bSelfMute = bSelfDeaf = false; - bTalking = bAltSpeak = false; - bLocalMute = false; - bSuppressed = false; - cChannel = 0; -} - -QString Player::getFlagsString() const { - QStringList flags; - - if (iId >= 0) - flags << ClientPlayer::tr("Authenticated"); - if (bMute) - flags << ClientPlayer::tr("Muted (server)"); - if (bDeaf) - flags << ClientPlayer::tr("Deafened (server)"); - if (bLocalMute) - flags << ClientPlayer::tr("Local Mute"); - if (bSelfMute) - flags << ClientPlayer::tr("Muted (self)"); - if (bSelfDeaf) - flags << ClientPlayer::tr("Deafened (self)"); - - return flags.join(QLatin1String(", ")); -} - -Player::operator const QString() const { - return QString::fromLatin1("%1:%2(%3)").arg(qsName).arg(uiSession).arg(iId); -} - -ClientPlayer::ClientPlayer(QObject *p) : QObject(p) { -} - -ClientPlayer *ClientPlayer::get(unsigned int uiSession) { - QReadLocker lock(&c_qrwlPlayers); - ClientPlayer *p = c_qmPlayers.value(uiSession); - return p; -} - -ClientPlayer *ClientPlayer::add(unsigned int uiSession, QObject *po) { - QWriteLocker lock(&c_qrwlPlayers); - - ClientPlayer *p = new ClientPlayer(po); - p->uiSession = uiSession; - c_qmPlayers[uiSession] = p; - return p; -} - -ClientPlayer *ClientPlayer::match(const ClientPlayer *other, bool matchname) { - QReadLocker lock(&c_qrwlPlayers); - - ClientPlayer *p; - foreach(p, c_qmPlayers) { - if (p == other) - continue; - if ((p->iId >= 0) && (p->iId == other->iId)) - return p; - if (matchname && (p->qsName == other->qsName)) - return p; - } - return NULL; -} - -void ClientPlayer::remove(unsigned int uiSession) { - QWriteLocker lock(&c_qrwlPlayers); - Player *p = c_qmPlayers.take(uiSession); - if (p && p->cChannel) - p->cChannel->removePlayer(p); -} - -void ClientPlayer::remove(ClientPlayer *p) { - remove(p->uiSession); -} - -void ClientPlayer::setTalking(bool talking, bool altspeech) { - if ((bTalking == talking) && (bAltSpeak == altspeech)) - return; - bTalking = talking; - bAltSpeak = altspeech; - emit talkingChanged(bTalking); -} - -void ClientPlayer::setMute(bool mute) { - if (bMute == mute) - return; - bMute = mute; - if (! bMute && bDeaf) - bDeaf = false; - emit muteDeafChanged(); -} - -void ClientPlayer::setLocalMute(bool mute) { - if (bLocalMute == mute) - return; - bLocalMute = mute; - emit muteDeafChanged(); -} - -void ClientPlayer::setDeaf(bool deaf) { - if (bDeaf == deaf) - return; - bDeaf = deaf; - if (bDeaf && ! bMute) - bMute = true; - emit muteDeafChanged(); -} - -void ClientPlayer::setSelfMuteDeaf(bool mute, bool deaf) { - bSelfDeaf = deaf; - bSelfMute = mute; - emit muteDeafChanged(); -} diff -Nru mumble-1.2.3/src/mumble11x/Player.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Player.h --- mumble-1.2.3/src/mumble11x/Player.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Player.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,86 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _PLAYER_H -#define _PLAYER_H - -#include "murmur_pch.h" - -class Channel; - -class Player { - private: - Q_DISABLE_COPY(Player) - public: - enum State { Connected, Authenticated }; - State sState; - unsigned int uiSession; - int iId; - QString qsName; - bool bMute, bDeaf, bSuppressed; - bool bLocalMute; - bool bSelfMute, bSelfDeaf; - bool bTalking, bAltSpeak; - Channel *cChannel; - QString getFlagsString() const; - - Player(); - virtual ~Player() {}; - - operator const QString() const; -}; - -class ClientPlayer : public QObject, public Player { - private: - Q_OBJECT - Q_DISABLE_COPY(ClientPlayer) - public: - ClientPlayer(QObject *p = NULL); - static QHash c_qmPlayers; - static QReadWriteLock c_qrwlPlayers; - static ClientPlayer *get(unsigned int); - static ClientPlayer *add(unsigned int, QObject *p = NULL); - static ClientPlayer *match(const ClientPlayer *p, bool matchname = false); - static void remove(unsigned int); - static void remove(ClientPlayer *); - public slots: - void setTalking(bool talking, bool altspeech); - void setMute(bool mute); - void setDeaf(bool deaf); - void setLocalMute(bool mute); - void setSelfMuteDeaf(bool mute, bool deaf); - signals: - void talkingChanged(bool talking); - void muteDeafChanged(); -}; - -#else -class Player; -#endif diff -Nru mumble-1.2.3/src/mumble11x/PlayerModel.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/PlayerModel.cpp --- mumble-1.2.3/src/mumble11x/PlayerModel.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/PlayerModel.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1051 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "PlayerModel.h" -#include "MainWindow.h" -#include "Message.h" -#include "ServerHandler.h" -#include "Channel.h" -#include "Player.h" -#include "Global.h" -#include "LCD.h" -#include "Log.h" - -QHash ModelItem::c_qhChannels; -QHash ModelItem::c_qhPlayers; -bool ModelItem::bPlayersTop = false; - -ModelItem::ModelItem(Channel *c) { - this->cChan = c; - this->pPlayer = NULL; - c_qhChannels.insert(c, this); - parent = c_qhChannels.value(c->cParent); - iPlayers = 0; -} - -ModelItem::ModelItem(ClientPlayer *p) { - this->cChan = NULL; - this->pPlayer = p; - c_qhPlayers.insert(p, this); - parent = c_qhChannels.value(p->cChannel); - iPlayers = 0; -} - -ModelItem::ModelItem(ModelItem *i) { - // Create a shallow clone - this->cChan = i->cChan; - this->pPlayer = i->pPlayer; - this->parent = i->parent; - - if (pPlayer) - c_qhPlayers.insert(pPlayer, this); - else if (cChan) - c_qhChannels.insert(cChan, this); - - iPlayers = i->iPlayers; -} - -ModelItem::~ModelItem() { - Q_ASSERT(qlChildren.count() == 0); - - if (cChan && c_qhChannels.value(cChan) == this) - c_qhChannels.remove(cChan); - if (pPlayer && c_qhPlayers.value(pPlayer) == this) - c_qhPlayers.remove(pPlayer); -} - -void ModelItem::wipe() { - foreach(ModelItem *i, qlChildren) { - i->wipe(); - delete i; - } - qlChildren.clear(); - iPlayers = 0; -} - -ModelItem *ModelItem::child(int idx) const { - if (! validRow(idx)) - return NULL; - - return qlChildren.at(idx); -} - -bool ModelItem::validRow(int idx) const { - return ((idx >= 0) && (idx < qlChildren.count())); -} - -ClientPlayer *ModelItem::playerAt(int idx) const { - if (! validRow(idx)) - return NULL; - return qlChildren.at(idx)->pPlayer; -} - -Channel *ModelItem::channelAt(int idx) const { - if (! validRow(idx)) - return NULL; - return qlChildren.at(idx)->cChan; -} - -int ModelItem::rowOf(Channel *c) const { - for (int i=0;icChan == c) - return i; - return -1; -} - -int ModelItem::rowOf(ClientPlayer *p) const { - for (int i=0;ipPlayer == p) - return i; - return -1; -} - -int ModelItem::rowOfSelf() const { - // Root? - if (! parent) - return 0; - - if (pPlayer) - return parent->rowOf(pPlayer); - else - return parent->rowOf(cChan); -} - -int ModelItem::rows() const { - return qlChildren.count(); -} - -int ModelItem::insertIndex(Channel *c) const { - QList qls; - ModelItem *item; - - int ocount = 0; - - foreach(item, qlChildren) { - if (item->cChan) { - if (item->cChan != c) - qls << item->cChan->qsName; - } else - ocount++; - } - qls << c->qsName; - qSort(qls); - - return qls.indexOf(c->qsName) + (bPlayersTop ? ocount : 0); -} - -int ModelItem::insertIndex(ClientPlayer *p) const { - QList qls; - ModelItem *item; - - int ocount = 0; - - foreach(item, qlChildren) { - if (item->pPlayer) { - if (item->pPlayer != p) - qls << item->pPlayer->qsName; - } else - ocount++; - } - - qls << p->qsName; - qSort(qls); - - return qls.indexOf(p->qsName) + (bPlayersTop ? 0 : ocount); -} - -PlayerModel::PlayerModel(QObject *p) : QAbstractItemModel(p) { - qiTalkingOn=QIcon(QLatin1String("skin:talking_on.png")); - qiTalkingAlt=QIcon(QLatin1String("skin:talking_alt.png")); - qiTalkingOff=QIcon(QLatin1String("skin:talking_off.png")); - qiMutedSelf=QIcon(QLatin1String("skin:muted_self.png")); - qiMutedServer=QIcon(QLatin1String("skin:muted_server.png")); - qiMutedLocal=QIcon(QLatin1String("skin:muted_local.png")); - qiDeafenedSelf=QIcon(QLatin1String("skin:deafened_self.png")); - qiDeafenedServer=QIcon(QLatin1String("skin:deafened_server.png")); - qiAuthenticated=QIcon(QLatin1String("skin:authenticated.png")); - qiChannel=QIcon(QLatin1String("skin:channel.png")); - qiLinkedChannel=QIcon(QLatin1String("skin:channel_linked.png")); - - ModelItem::bPlayersTop = g.s.bPlayerTop; - - miRoot = new ModelItem(Channel::get(0)); -} - -PlayerModel::~PlayerModel() { - removeAll(); - Q_ASSERT(ModelItem::c_qhPlayers.count() == 0); - Q_ASSERT(ModelItem::c_qhChannels.count() == 1); - delete miRoot; -} - - -int PlayerModel::columnCount(const QModelIndex &) const { - return 2; -} - -QModelIndex PlayerModel::index(int row, int column, const QModelIndex &p) const { - ModelItem *item; - QModelIndex idx = QModelIndex(); - - if ((row < 0) || (column < 0) || (column > 1)) { - return QModelIndex(); - } - - if (! p.isValid()) { - return createIndex(row, column, miRoot); - } else { - item = static_cast(p.internalPointer()); - } - - if (! item) - return idx; - - if (! item->validRow(row)) - return idx; - - idx = createIndex(row, column, item->child(row)); - - return idx; -} - -QModelIndex PlayerModel::index(ClientPlayer *p, int column) const { - ModelItem *item = ModelItem::c_qhPlayers.value(p); - Q_ASSERT(p); - Q_ASSERT(item); - if (!p || ! item) - return QModelIndex(); - QModelIndex idx=createIndex(item->rowOfSelf(), column, item); - return idx; -} - -QModelIndex PlayerModel::index(Channel *c) const { - ModelItem *item = ModelItem::c_qhChannels.value(c); - Q_ASSERT(c); - Q_ASSERT(item); - if (!item || !c) - return QModelIndex(); - QModelIndex idx=createIndex(item->rowOfSelf(), 0, item); - return idx; -} - -QModelIndex PlayerModel::index(ModelItem *item) const { - return createIndex(item->rowOfSelf(), 0, item); -} - -QModelIndex PlayerModel::parent(const QModelIndex &idx) const { - if (! idx.isValid()) - return QModelIndex(); - - ModelItem *item = static_cast(idx.internalPointer()); - - ModelItem *pitem = (item) ? item->parent : NULL; - - if (! pitem) - return QModelIndex(); - - return createIndex(pitem->rowOfSelf(), 0, pitem); -} - -int PlayerModel::rowCount(const QModelIndex &p) const { - ModelItem *item; - - int val = 0; - - if (!p.isValid()) - return 1; - else - item = static_cast(p.internalPointer()); - - if (! item || (p.column() != 0)) - return 0; - - val = item->rows(); - - return val; -} - -QString PlayerModel::stringIndex(const QModelIndex &idx) const { - ModelItem *item = static_cast(idx.internalPointer()); - if (!idx.isValid()) - return QLatin1String("invIdx"); - if (!item) - return QLatin1String("invPtr"); - if (item->pPlayer) - return QString::fromLatin1("P:%1 [%2,%3]").arg(item->pPlayer->qsName).arg(idx.row()).arg(idx.column()); - else - return QString::fromLatin1("C:%1 [%2,%3]").arg(item->cChan->qsName).arg(idx.row()).arg(idx.column()); -} - -QVariant PlayerModel::data(const QModelIndex &idx, int role) const { - if (!idx.isValid()) - return QVariant(); - - ModelItem *item = static_cast(idx.internalPointer()); - - Channel *c = item->cChan; - ClientPlayer *p = item->pPlayer; - - if (!c && !p) { - return QVariant(); - } - - QVariant v = otherRoles(idx, role); - if (v.isValid()) - return v; - - QList l; - - if (p) { - switch (role) { - case Qt::DecorationRole: - if (idx.column() == 0) - return (p->bTalking) ? (p->bAltSpeak ? qiTalkingAlt : qiTalkingOn) : qiTalkingOff; - break; - case Qt::FontRole: - if ((idx.column() == 0) && (p->uiSession == g.uiSession)) { - QFont f = g.mw->font(); - f.setBold(! f.bold()); - return f; - } - break; - case Qt::DisplayRole: - if (idx.column() == 0) - return p->qsName; - if (p->iId >= 0) - l << qiAuthenticated; - if (p->bMute) - l << qiMutedServer; - if (p->bDeaf) - l << qiDeafenedServer; - if (p->bSelfMute) - l << qiMutedSelf; - if (p->bSelfDeaf) - l << qiDeafenedSelf; - if (p->bLocalMute) - l << qiMutedLocal; - return l; - default: - break; - } - } else { - switch (role) { - case Qt::DecorationRole: - if (idx.column() == 0) { - return qsLinked.contains(c) ? qiLinkedChannel : qiChannel; - } - case Qt::DisplayRole: - if (idx.column() == 0) - return c->qsName; - else - return l; - case Qt::FontRole: - if (g.uiSession) { - Channel *home = ClientPlayer::get(g.uiSession)->cChannel; - - if ((c == home) || qsLinked.contains(c)) { - QFont f = g.mw->font(); - if (qsLinked.count() > 1) - f.setItalic(! f.italic()); - if (c == home) - f.setBold(! f.bold()); - return f; - } - } - break; - default: - break; - } - } - return QVariant(); -} - -Qt::ItemFlags PlayerModel::flags(const QModelIndex &idx) const { - if (!idx.isValid()) - return Qt::ItemIsDropEnabled; - - if (idx.column() != 0) - return Qt::ItemIsEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled; - - return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled; -} - -QVariant PlayerModel::otherRoles(const QModelIndex &idx, int role) const { - ModelItem *item = static_cast(idx.internalPointer()); - ClientPlayer *p = item->pPlayer; - Channel *c = item->cChan; - int section = idx.column(); - bool isPlayer = p != NULL; - - switch (role) { - case Qt::ToolTipRole: - switch (section) { - case 0: - return isPlayer ? p->qsName : c->qsName; - case 1: - return isPlayer ? p->getFlagsString() : QVariant(); - } - break; - case Qt::WhatsThisRole: - switch (section) { - case 0: - if (isPlayer) - return tr("This is a player connected to the server. The icon to the left of the player indicates " - "whether or not they are talking:
    " - " Talking
    " - " Not talking" - ); - else - return tr("This is a channel on the server. Only players in the same channel can hear each other."); - case 1: - return tr("This shows the flags the player has on the server, if any:
    " - "Authenticated user
    " - "Muted (by self)
    " - "Muted (by admin)
    " - "Deafened (by self)
    " - "Deafened (by admin)
    " - "A player muted by himself is probably just away, talking on the phone or something like that.
    " - "A player muted by an admin is probably also just away, and the noise the player is making was annoying " - "enough that an admin muted him."); - } - break; - } - return QVariant(); -} - -QVariant PlayerModel::headerData(int section, Qt::Orientation orientation, - int role) const { - if (orientation != Qt::Horizontal) - return QVariant(); - - switch (role) { - case Qt::DisplayRole: - switch (section) { - case 0: - return tr("Name"); - case 1: - return tr("Flags"); - } - } - - return QVariant(); -} - -void PlayerModel::recursiveClone(const ModelItem *old, ModelItem *item, QModelIndexList &from, QModelIndexList &to) { - if (old->qlChildren.isEmpty()) - return; - - beginInsertRows(index(item), 0, old->qlChildren.count()); - - for (int i=0;iqlChildren.count();++i) { - ModelItem *o = old->qlChildren.at(i); - ModelItem *mi = new ModelItem(o); - mi->parent = item; - - item->qlChildren << mi; - - from << createIndex(i, 0, o); - from << createIndex(i, 1, o); - to << createIndex(i, 0, mi); - to << createIndex(i, 1, mi); - } - - endInsertRows(); - - for (int i=0;iqlChildren.count();++i) - recursiveClone(old->qlChildren.at(i), item->qlChildren.at(i), from, to); -} - -ModelItem *PlayerModel::moveItem(ModelItem *oldparent, ModelItem *newparent, ModelItem *item) { - // Here's the idea. We insert the item, update persistent indexes, THEN remove it. - - int oldrow = oldparent->qlChildren.indexOf(item); - int newrow = -1; - - if (item->cChan) - newrow = newparent->insertIndex(item->cChan); - else - newrow = newparent->insertIndex(item->pPlayer); - - if ((oldparent == newparent) && (newrow == oldrow)) { - emit dataChanged(index(item),index(item)); - return item; - } - - // Shallow clone - ModelItem *t = new ModelItem(item); - - // Store the index if it's "active". - // The selection is stored as "from"-"to" pairs, so if we move up in the same channel, - // we'd move only "from" and select half the channel. - - QTreeView *v=g.mw->qtvPlayers; - QItemSelectionModel *sel=v->selectionModel(); - QPersistentModelIndex active; - QModelIndex oindex = createIndex(oldrow, 0, item); - if (sel->isSelected(oindex) || (oindex == v->currentIndex())) { - active = index(item); - v->clearSelection(); - v->setCurrentIndex(QModelIndex()); - } - - bool expanded = v->isExpanded(index(item)); - - if (newparent == oldparent) { - // Mangle rows. newrow needs to be pre-remove. oldrow needs to be postremove. - if (oldrow >= newrow) { - oldrow++; - } else { - newrow++; - } - } - - beginInsertRows(index(newparent), newrow, newrow); - t->parent = newparent; - newparent->qlChildren.insert(newrow, t); - - if (item->cChan) { - oldparent->cChan->removeChannel(item->cChan); - newparent->cChan->addChannel(item->cChan); - } else { - newparent->cChan->addPlayer(item->pPlayer); - } - - endInsertRows(); - - - QModelIndexList from, to; - from << createIndex(oldrow, 0, item); - from << createIndex(oldrow, 1, item); - to << createIndex(newrow, 0, t); - to << createIndex(newrow, 1, t); - - recursiveClone(item, t, from, to); - - changePersistentIndexList(from, to); - - beginRemoveRows(index(oldparent), oldrow, oldrow); - oldparent->qlChildren.removeAt(oldrow); - endRemoveRows(); - - item->wipe(); - delete item; - - if (active.isValid()) { - sel->select(active, QItemSelectionModel::SelectCurrent); - } - if (expanded) - v->expand(index(t)); - return t; -} - -void PlayerModel::expandAll(Channel *c) { - QStack chans; - - while (c) { - chans.push(c); - c = c->cParent; - } - while (! chans.isEmpty()) { - c = chans.pop(); - g.mw->qtvPlayers->setExpanded(index(c), true); - } -} - -void PlayerModel::collapseEmpty(Channel *c) { - while (c) { - ModelItem *mi = ModelItem::c_qhChannels.value(c); - if (mi->iPlayers == 0) - g.mw->qtvPlayers->setExpanded(index(c), false); - else - break; - c = c->cParent; - } -} - -void PlayerModel::ensureSelfVisible() { - if (! g.uiSession) - return; - - g.mw->qtvPlayers->scrollTo(index(ClientPlayer::get(g.uiSession))); -} - -void PlayerModel::recheckLinks() { - if (! g.uiSession) - return; - - bool bChanged = false; - - Channel *home = ClientPlayer::get(g.uiSession)->cChannel; - - QSet all = home->allLinks(); - - if (all == qsLinked) - return; - - QSet changed = (all - qsLinked); - changed += (qsLinked - all); - - if ((all.count() == 1) || (qsLinked.count() == 1)) - changed += home; - - qsLinked = all; - - foreach(Channel *c, changed) { - QModelIndex idx = index(c); - emit dataChanged(idx, idx); - bChanged = true; - } - if (bChanged) - updateOverlay(); -} - -ClientPlayer *PlayerModel::addPlayer(unsigned int id, const QString &name) { - ClientPlayer *p = ClientPlayer::add(id, this); - p->qsName = name; - - ModelItem *item = new ModelItem(p); - - connect(p, SIGNAL(talkingChanged(bool)), this, SLOT(playerTalkingChanged(bool))); - connect(p, SIGNAL(muteDeafChanged()), this, SLOT(playerMuteDeafChanged())); - - Channel *c = Channel::get(0); - ModelItem *citem = ModelItem::c_qhChannels.value(c); - - item->parent = citem; - - int row = citem->insertIndex(p); - - beginInsertRows(index(citem), row, row); - citem->qlChildren.insert(row, item); - c->addPlayer(p); - endInsertRows(); - - while (citem) { - citem->iPlayers++; - citem = citem->parent; - } - - if (g.uiSession && (p->cChannel == ClientPlayer::get(g.uiSession)->cChannel)) - updateOverlay(); - - return p; -} - -void PlayerModel::removePlayer(ClientPlayer *p) { - Channel *c = p->cChannel; - ModelItem *item = ModelItem::c_qhPlayers.value(p); - ModelItem *citem = ModelItem::c_qhChannels.value(c); - - int row = citem->qlChildren.indexOf(item); - - beginRemoveRows(index(citem), row, row); - c->removePlayer(p); - citem->qlChildren.removeAt(row); - endRemoveRows(); - - p->cChannel = NULL; - - ClientPlayer::remove(p); - delete p; - delete item; - - while (citem) { - citem->iPlayers--; - citem = citem->parent; - } - - if (g.s.ceExpand == Settings::ChannelsWithPlayers) - collapseEmpty(c); - - if (g.uiSession && (p->cChannel == ClientPlayer::get(g.uiSession)->cChannel)) - updateOverlay(); -} - -void PlayerModel::movePlayer(ClientPlayer *p, Channel *np) { - Channel *oc = p->cChannel; - ModelItem *opi = ModelItem::c_qhChannels.value(oc); - ModelItem *pi = ModelItem::c_qhChannels.value(np); - ModelItem *item = ModelItem::c_qhPlayers.value(p); - - item = moveItem(opi, pi, item); - - if (p->uiSession == g.uiSession) { - ensureSelfVisible(); - recheckLinks(); - } - - while (opi) { - opi->iPlayers--; - opi = opi->parent; - } - while (pi) { - pi->iPlayers++; - pi = pi->parent; - } - - if (g.s.ceExpand == Settings::ChannelsWithPlayers) { - expandAll(np); - collapseEmpty(oc); - } - - if (g.uiSession) { - Channel *home = ClientPlayer::get(g.uiSession)->cChannel; - if (home==np || home == oc) - updateOverlay(); - } -} - -void PlayerModel::renamePlayer(ClientPlayer *p, const QString &name) { - Channel *c = p->cChannel; - p->qsName = name; - - ModelItem *pi = ModelItem::c_qhChannels.value(c); - ModelItem *item = ModelItem::c_qhPlayers.value(p); - moveItem(pi, pi, item); - - if (g.uiSession && (p->cChannel == ClientPlayer::get(g.uiSession)->cChannel)) - updateOverlay(); -} - -void PlayerModel::renameChannel(Channel *c, const QString &name) { - c->qsName = name; - - if (c->iId == 0) { - QModelIndex idx = index(c); - emit dataChanged(idx, idx); - } else { - Channel *pc = c->cParent; - ModelItem *pi = ModelItem::c_qhChannels.value(pc); - ModelItem *item = ModelItem::c_qhChannels.value(c); - - moveItem(pi, pi, item); - } -} - - -Channel *PlayerModel::addChannel(int id, Channel *p, const QString &name) { - Channel *c = Channel::add(id, name); - - if (! c) - return NULL; - - ModelItem *item = new ModelItem(c); - ModelItem *citem = ModelItem::c_qhChannels.value(p); - - item->parent = citem; - - int row = citem->insertIndex(c); - - beginInsertRows(index(citem), row, row); - p->addChannel(c); - citem->qlChildren.insert(row, item); - endInsertRows(); - - if (g.s.ceExpand == Settings::AllChannels) - g.mw->qtvPlayers->setExpanded(index(item), true); - - return c; -} - -void PlayerModel::removeChannel(Channel *c) { - ModelItem *item, *i; - - item=ModelItem::c_qhChannels.value(c); - - foreach(i, item->qlChildren) { - if (i->pPlayer) - removePlayer(i->pPlayer); - else - removeChannel(i->cChan); - } - - Channel *p = c->cParent; - - if (! p) - return; - - ModelItem *citem = ModelItem::c_qhChannels.value(p); - - int row = citem->rowOf(c); - - beginRemoveRows(index(citem), row, row); - p->removeChannel(c); - citem->qlChildren.removeAt(row); - qsLinked.remove(c); - endRemoveRows(); - - Channel::remove(c); - - delete item; - delete c; -} - -void PlayerModel::moveChannel(Channel *c, Channel *p) { - Channel *oc = c->cParent; - ModelItem *opi = ModelItem::c_qhChannels.value(c->cParent); - ModelItem *pi = ModelItem::c_qhChannels.value(p); - ModelItem *item = ModelItem::c_qhChannels.value(c); - item = moveItem(opi, pi, item); - - while (opi) { - opi->iPlayers -= item->iPlayers; - opi = opi->parent; - } - while (pi) { - pi->iPlayers += item->iPlayers; - pi = pi->parent; - } - - ensureSelfVisible(); - - if (g.s.ceExpand == Settings::ChannelsWithPlayers) { - collapseEmpty(oc); - } -} - -void PlayerModel::linkChannels(Channel *c, QList links) { - foreach(Channel *l, links) - c->link(l); - recheckLinks(); -} - -void PlayerModel::unlinkChannels(Channel *c, QList links) { - foreach(Channel *l, links) - c->unlink(l); - recheckLinks(); -} - -void PlayerModel::unlinkAll(Channel *c) { - c->unlink(NULL); - recheckLinks(); -} - -void PlayerModel::removeAll() { - ModelItem *item = miRoot; - ModelItem *i; - - foreach(i, item->qlChildren) { - if (i->pPlayer) - removePlayer(i->pPlayer); - else - removeChannel(i->cChan); - } - - qsLinked.clear(); - - updateOverlay(); -} - -ClientPlayer *PlayerModel::getPlayer(const QModelIndex &idx) const { - if (! idx.isValid()) - return NULL; - - ModelItem *item; - item = static_cast(idx.internalPointer()); - - return item->pPlayer; -} - -Channel *PlayerModel::getChannel(const QModelIndex &idx) const { - if (! idx.isValid()) - return NULL; - - ModelItem *item; - item = static_cast(idx.internalPointer()); - - if (item->pPlayer) - return item->pPlayer->cChannel; - else - return item->cChan; -} - -Channel *PlayerModel::getSubChannel(Channel *p, int idx) const { - ModelItem *item=ModelItem::c_qhChannels.value(p); - if (! item) - return NULL; - - foreach(ModelItem *i, item->qlChildren) { - if (i->cChan) { - if (idx == 0) - return i->cChan; - idx--; - } - } - return NULL; -} - -void PlayerModel::playerTalkingChanged(bool) { - ClientPlayer *p=static_cast(sender()); - QModelIndex idx = index(p); - emit dataChanged(idx, idx); - updateOverlay(); -} - -void PlayerModel::playerMuteDeafChanged() { - ClientPlayer *p=static_cast(sender()); - QModelIndex idx = index(p, 1); - emit dataChanged(idx, idx); - if (g.uiSession && (p->cChannel == ClientPlayer::get(g.uiSession)->cChannel)) - updateOverlay(); -} - -Qt::DropActions PlayerModel::supportedDropActions() const { - return Qt::CopyAction; -} - -QStringList PlayerModel::mimeTypes() const { - QStringList sl; - sl << QLatin1String("mumble/dragentry"); - return sl; -} - -QMimeData *PlayerModel::mimeData(const QModelIndexList &idxs) const { - QModelIndex idx; - QByteArray qba; - QDataStream ds(&qba, QIODevice::WriteOnly); - - foreach(idx, idxs) { - ClientPlayer *p = getPlayer(idx); - Channel *c = getChannel(idx); - if (p) { - ds << false; - ds << p->uiSession; - } else if (c) { - ds << true; - ds << c->iId; - } - } - QMimeData *md = new QMimeData(); - md->setData(QLatin1String("mumble/dragentry"), qba); - return md; -} - -bool PlayerModel::dropMimeData(const QMimeData *md, Qt::DropAction, int, int, const QModelIndex &p) { - if (! md->hasFormat(mimeTypes().at(0))) - return false; - - QByteArray qba = md->data(mimeTypes().at(0)); - QDataStream ds(qba); - - bool isChannel; - int iId = -1; - unsigned int uiSession = 0; - ds >> isChannel; - - if (isChannel) - ds >> iId; - else - ds >> uiSession; - - Channel *c; - if (! p.isValid()) { - c = Channel::get(0); - } else { - c = getChannel(p); - } - - if (! c) - return false; - - expandAll(c); - - if (! isChannel) { - MessagePlayerMove mpm; - mpm.uiVictim = uiSession; - mpm.iChannelId = c->iId; - g.sh->sendMessage(&mpm); - } else { - int ret; - switch (g.s.ceChannelDrag) { - case Settings::Ask: - ret=QMessageBox::question(g.mw, QLatin1String("Mumble"), tr("Are you sure you want to drag this channel?"), QMessageBox::Yes, QMessageBox::No); - - if (ret == QMessageBox::No) - return false; - break; - case Settings::DoNothing: - g.l->log(Log::Information, MainWindow::tr("You have Channel Dragging set to \"Do Nothing\" so the channel wasn't moved.")); - return false; - break; - case Settings::Move: - break; - default: - g.l->log(Log::CriticalError, MainWindow::tr("Unknown Channel Drag mode in PlayerModel::dropMimeData.")); - break; - } - MessageChannelMove mcm; - mcm.iId = iId; - mcm.iParent = c->iId; - g.sh->sendMessage(&mcm); - } - - return true; -} - -void PlayerModel::updateOverlay() const { - g.lcd->updatePlayerView(); -} - -PlayerDelegate::PlayerDelegate(QObject *p) : QItemDelegate(p) { -} - -QSize PlayerDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { - if (index.column() == 1) { - const QAbstractItemModel *m = index.model(); - QVariant data = m->data(index); - QList ql = data.toList(); - return QSize(18 * ql.count(), 18); - } else { - return QItemDelegate::sizeHint(option, index); - } -} - -void PlayerDelegate::paint(QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { - if (index.column() == 1) { - const QAbstractItemModel *m = index.model(); - QVariant data = m->data(index); - QList ql = data.toList(); - - painter->save(); - for (int i=0;i(ql[i]).pixmap(QSize(16,16))); - QPoint p = QStyle::alignedRect(option.direction, option.decorationAlignment, pixmap.size(), r).topLeft(); - painter->drawPixmap(p, pixmap); - } - painter->restore(); - return; - } else { - QItemDelegate::paint(painter,option,index); - } -} diff -Nru mumble-1.2.3/src/mumble11x/PlayerModel.h mumble-1.2.3-87-gf7d8711/src/mumble11x/PlayerModel.h --- mumble-1.2.3/src/mumble11x/PlayerModel.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/PlayerModel.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,160 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _PLAYERMODEL_H -#define _PLAYERMODEL_H - -#include "mumble_pch.hpp" - -class Player; -class ClientPlayer; -class Channel; - -class PlayerDelegate : public QItemDelegate { - private: - Q_OBJECT - Q_DISABLE_COPY(PlayerDelegate) - public: - PlayerDelegate(QObject *parent = NULL); - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; - void paint(QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; -}; - -struct ModelItem { - friend class PlayerModel; - -private: - Q_DISABLE_COPY(ModelItem); -public: - Channel *cChan; - ClientPlayer *pPlayer; - - ModelItem *parent; - QList qlChildren; - int iPlayers; - - static QHash c_qhChannels; - static QHash c_qhPlayers; - static bool bPlayersTop; - - ModelItem(Channel *c); - ModelItem(ClientPlayer *p); - ModelItem(ModelItem *); - ~ModelItem(); - - ModelItem *child(int idx) const; - - bool validRow(int idx) const; - ClientPlayer *playerAt(int idx) const; - Channel *channelAt(int idx) const; - int rowOf(Channel *c) const; - int rowOf(ClientPlayer *p) const; - int rowOfSelf() const; - int rows() const; - int insertIndex(Channel *c) const; - int insertIndex(ClientPlayer *p) const; - void wipe(); -}; - -class PlayerModel : public QAbstractItemModel { - friend struct ModelItem; - private: - Q_OBJECT - Q_DISABLE_COPY(PlayerModel) - protected: - QIcon qiTalkingOn, qiTalkingAlt, qiTalkingOff; - QIcon qiMutedSelf, qiMutedServer, qiMutedLocal; - QIcon qiDeafenedSelf, qiDeafenedServer; - QIcon qiAuthenticated, qiChannel, qiLinkedChannel; - ModelItem *miRoot; - QSet qsLinked; - - QModelIndex index(ClientPlayer *, int column = 0) const; - QModelIndex index(Channel *) const; - QModelIndex index(ModelItem *) const; - - void recursiveClone(const ModelItem *old, ModelItem *item, QModelIndexList &from, QModelIndexList &to); - ModelItem *moveItem(ModelItem *oldparent, ModelItem *newparent, ModelItem *item); - - QString stringIndex(const QModelIndex &index) const; - public: - PlayerModel(QObject *parent = 0); - ~PlayerModel(); - - QVariant data(const QModelIndex &index, int role) const; - Qt::ItemFlags flags(const QModelIndex &index) const; - QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; - QModelIndex parent(const QModelIndex &index) const; - int rowCount(const QModelIndex &parent = QModelIndex()) const; - int columnCount(const QModelIndex &parent = QModelIndex()) const; - Qt::DropActions supportedDropActions() const; - QStringList mimeTypes() const; - QMimeData *mimeData(const QModelIndexList &idx) const; - bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex & parent); - - ClientPlayer *addPlayer(unsigned int id, const QString &name); - ClientPlayer *getPlayer(const QModelIndex &idx) const; - - Channel *addChannel(int id, Channel *p, const QString &name); - Channel *getChannel(const QModelIndex &idx) const; - - Channel *getSubChannel(Channel *p, int idx) const; - - void renamePlayer(ClientPlayer *p, const QString &name); - void renameChannel(Channel *c, const QString &name); - - void movePlayer(ClientPlayer *p, Channel *c); - void moveChannel(Channel *c, Channel *p); - - void removePlayer(ClientPlayer *p); - void removeChannel(Channel *c); - - void linkChannels(Channel *c, QList links); - void unlinkChannels(Channel *c, QList links); - void unlinkAll(Channel *c); - - void removeAll(); - - void expandAll(Channel *c); - void collapseEmpty(Channel *c); - - QVariant otherRoles(const QModelIndex &idx, int role) const; - public slots: - void playerTalkingChanged(bool talking); - void playerMuteDeafChanged(); - void ensureSelfVisible(); - void recheckLinks(); - void updateOverlay() const; -}; - -#else -class PlayerModel; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Plugins.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Plugins.cpp --- mumble-1.2.3/src/mumble11x/Plugins.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Plugins.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,282 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Plugins.h" -#include "Log.h" -#include "../../plugins/mumble_plugin.h" -#include "Global.h" - -static ConfigWidget *PluginConfigDialogNew(Settings &st) { - return new PluginConfig(st); -} - -static ConfigRegistrar registrar(5000, PluginConfigDialogNew); - -struct PluginInfo { - bool locked; - QLibrary lib; - QString filename; - QString description; - QString shortname; - MumblePlugin *p; - PluginInfo(); -}; - -PluginInfo::PluginInfo() { - locked = false; - p = NULL; -} - -PluginConfig::PluginConfig(Settings &st) : ConfigWidget(st) { - setupUi(this); - - refillPluginList(); -} - -QString PluginConfig::title() const { - return tr("Plugins"); -} - -QIcon PluginConfig::icon() const { - return QIcon(QLatin1String("skin:config_plugin.png")); -} - -void PluginConfig::load(const Settings &r) { - loadCheckBox(qcbTransmit, r.bTransmitPosition); -} - -void PluginConfig::save() const { - s.bTransmitPosition = qcbTransmit->isChecked(); -} - -bool PluginConfig::expert(bool) { - return false; -} - -void PluginConfig::on_qpbConfig_clicked() { - QListWidgetItem *i = qlwPlugins->currentItem(); - if (!i) - return; - PluginInfo *pi=qhInfos[i]; - - if (pi->p->config) - pi->p->config(winId()); - else - QMessageBox::information(this, QLatin1String("Mumble"), tr("Plugin has no configure function."), QMessageBox::Ok, QMessageBox::NoButton); -} - -void PluginConfig::on_qpbAbout_clicked() { - QListWidgetItem *i = qlwPlugins->currentItem(); - if (!i) - return; - PluginInfo *pi=qhInfos[i]; - - if (pi->p->about) - pi->p->about(winId()); - else - QMessageBox::information(this, QLatin1String("Mumble"), tr("Plugin has no about function."), QMessageBox::Ok, QMessageBox::NoButton); -} - -void PluginConfig::on_qpbReload_clicked() { - g.p->rescanPlugins(); - refillPluginList(); -} - -void PluginConfig::refillPluginList() { - QMutexLocker lock(&g.p->qmPlugins); - qlwPlugins->clear(); - qhInfos.clear(); - PluginInfo *pi; - foreach(pi, g.p->qlPlugins) { - QListWidgetItem *i = new QListWidgetItem(pi->description, qlwPlugins); - i->setData(Qt::ToolTipRole, pi->lib.fileName()); - qhInfos[i]=pi; - } -} - -Plugins::Plugins(QObject *p) : QObject(p) { - QTimer *timer=new QTimer(this); - timer->setObjectName(QLatin1String("Timer")); - timer->start(1000); - locked = prevlocked = NULL; - bValid = false; - for (int i=0;i<3;i++) - fPosition[i]=fFront[i]=fTop[i]= 0.0; - QMetaObject::connectSlotsByName(this); -} - -void Plugins::rescanPlugins() { - QMutexLocker lock(&qmPlugins); - PluginInfo *pi; - foreach(pi, qlPlugins) { - if (pi->locked) - pi->p->unlock(); - pi->lib.unload(); - delete pi; - } - qlPlugins.clear(); - prevlocked = locked = NULL; - bValid = false; - -#ifndef PLUGIN_PATH -#ifndef Q_OS_MAC - const QString path=QString::fromLatin1("%1/plugins").arg(qApp->applicationDirPath()); -#else - const QString path=QString::fromLatin1("%1/../Plugins").arg(qApp->applicationDirPath()); -#endif -#else - const QString path=QLatin1String(MUMTEXT(PLUGIN_PATH)); -#endif - QDir qd(path,QString(), QDir::Name, QDir::Files | QDir::Readable); - QFileInfoList libs = qd.entryInfoList(); - foreach(const QFileInfo &libinfo, libs) { - QString libname = libinfo.absoluteFilePath(); - if (QLibrary::isLibrary(libname)) { - pi = new PluginInfo(); - pi->filename = libname; - pi->lib.setFileName(pi->filename); - if (pi->lib.load()) { - mumblePluginFunc mpf = reinterpret_cast(pi->lib.resolve("getMumblePlugin")); - if (mpf) { - pi->p = mpf(); - if (pi->p && (pi->p->magic == MUMBLE_PLUGIN_MAGIC)) { - pi->description=QString::fromStdWString(pi->p->description); - pi->shortname=QString::fromStdWString(pi->p->shortname); - qlPlugins << pi; - continue; - } - } - pi->lib.unload(); - } else { - qWarning("Plugins: Failed to load %s: %s", qPrintable(pi->filename), qPrintable(pi->lib.errorString())); - } - delete pi; - } - } -} - -bool Plugins::fetch() { - if (g.bPosTest) { - fPosition[0] = fPosition[1] = fPosition[2] = 0.0f; - fFront[0] = 0.0f; - fFront[1] = 0.0f; - fFront[2] = 1.0f; - fTop[0] = 0.0f; - fTop[1] = 1.0f; - fTop[2] = 0.0f; - bValid = true; - return true; - } - - if (! locked) { - bValid = false; - return bValid; - } - - QMutexLocker lock(&qmPlugins); - - if (! locked) { - bValid = false; - return bValid; - } - float dummy_pos[3], dummy_front[3], dummy_top[3]; - std::string dummy_context; - std::wstring dummy_identity; - bool ok=locked->p->fetch(fPosition, dummy_front, dummy_top, dummy_pos, fFront, fTop, dummy_context, dummy_identity); - if (! ok || bUnlink) { - locked->p->unlock(); - locked->locked = false; - prevlocked = locked; - locked = NULL; - for (int i=0;i<3;i++) - fPosition[i]=fFront[i]=fTop[i]= 0.0f; - } - bValid = ok; - return bValid; -} - -void Plugins::on_Timer_timeout() { - fetch(); - - QMutexLocker lock(&qmPlugins); - - if (prevlocked) { - g.l->log(Log::Information, tr("%1 lost link.").arg(prevlocked->shortname)); - prevlocked = NULL; - } - - if (locked) - return; - - if (! g.s.bTransmitPosition) - return; - -#ifdef Q_OS_WIN - // According to MS KB Q131065, we need this to OpenProcess() - - HANDLE hToken = NULL; - - if (!OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken)) { - if (GetLastError() == ERROR_NO_TOKEN) { - ImpersonateSelf(SecurityImpersonation); - OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, FALSE, &hToken); - } - } - - TOKEN_PRIVILEGES tp; - LUID luid; - TOKEN_PRIVILEGES tpPrevious; - DWORD cbPrevious=sizeof(TOKEN_PRIVILEGES); - - LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid); - - tp.PrivilegeCount = 1; - tp.Privileges[0].Luid = luid; - tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - - AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &tpPrevious, &cbPrevious); -#endif - - foreach(PluginInfo *pi, qlPlugins) { - if (pi->p->trylock()) { - pi->shortname = QString::fromStdWString(pi->p->shortname); - g.l->log(Log::Information, tr("%1 linked.").arg(pi->shortname)); - pi->locked = true; - bUnlink = false; - locked = pi; - break; - } - } - -#ifdef Q_OS_WIN - AdjustTokenPrivileges(hToken, FALSE, &tpPrevious, cbPrevious, NULL, NULL); - CloseHandle(hToken); -#endif -} diff -Nru mumble-1.2.3/src/mumble11x/Plugins.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Plugins.h --- mumble-1.2.3/src/mumble11x/Plugins.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Plugins.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _PLUGINS_H -#define _PLUGINS_H - -#include "ConfigDialog.h" -#include "ui_Plugins.h" - -struct PluginInfo; - -class PluginConfig : public ConfigWidget, public Ui::PluginConfig { - private: - Q_OBJECT - Q_DISABLE_COPY(PluginConfig) - protected: - void refillPluginList(); - QHash qhInfos; - public: - PluginConfig(Settings &st); - virtual QString title() const; - virtual QIcon icon() const; - public slots: - void save() const; - void load(const Settings &r); - bool expert(bool); - void on_qpbConfig_clicked(); - void on_qpbAbout_clicked(); - void on_qpbReload_clicked(); -}; - -class Plugins : public QObject { - friend class PluginConfig; - private: - Q_OBJECT - Q_DISABLE_COPY(Plugins) - protected: - QMutex qmPlugins; - QList qlPlugins; - PluginInfo *locked; - PluginInfo *prevlocked; - public: - bool bValid; - bool bUnlink; - float fPosition[3], fFront[3], fTop[3]; - - Plugins(QObject *p = NULL); - public slots: - void on_Timer_timeout(); - void rescanPlugins(); - bool fetch(); -}; - -#else -class Log; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Plugins.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/Plugins.ui --- mumble-1.2.3/src/mumble11x/Plugins.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Plugins.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ - - PluginConfig - - - - 0 - 0 - 321 - 235 - - - - Form - - - - - - Options - - - - - - Enable plugins and transmit positional information - - - This enables plugins for supported games to fetch your in-game position and transmit that with each voice packet. This enables other players to hear your voice in-game from the direction your character is in relation to their own. - - - Link to Game and Transmit Position - - - - - - - - - - Plugins - - - - - - - - - - - Reloads all plugins - - - This rescans and reloads plugins. Use this if you just added or changed a plugin to the plugins directory. - - - &Reload plugins - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Information about plugin - - - This shows a small information message about the plugin. - - - &About - - - - - - - Show configuration page of plugin - - - This shows the configuration page of the plugin, if any. - - - &Configure - - - - - - - - - - - - - diff -Nru mumble-1.2.3/src/mumble11x/PulseAudio.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/PulseAudio.cpp --- mumble-1.2.3/src/mumble11x/PulseAudio.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/PulseAudio.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,686 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "PulseAudio.h" -#include "User.h" -#include "Global.h" -#include "MainWindow.h" -#include "Timer.h" -#include -#include -#include -#include - -static PulseAudioSystem *pasys = NULL; - -#define NBLOCKS 8 - -class PulseAudioInputRegistrar : public AudioInputRegistrar { - public: - PulseAudioInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; -}; - - -class PulseAudioOutputRegistrar : public AudioOutputRegistrar { - public: - PulseAudioOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); -}; - -class PulseAudioInit : public DeferInit { - public: - PulseAudioInputRegistrar *airPulseAudio; - PulseAudioOutputRegistrar *aorPulseAudio; - void initialize() { - pasys = new PulseAudioSystem(); - pasys->qmWait.lock(); - pasys->qwcWait.wait(&pasys->qmWait, 1000); - pasys->qmWait.unlock(); - if (pasys->bPulseIsGood) { - airPulseAudio = new PulseAudioInputRegistrar(); - aorPulseAudio = new PulseAudioOutputRegistrar(); - } else { - airPulseAudio = NULL; - aorPulseAudio = NULL; - delete pasys; - pasys = NULL; - } - }; - void destroy() { - delete airPulseAudio; - delete aorPulseAudio; - delete pasys; - pasys = NULL; - }; -}; - -static PulseAudioInit pulseinit; - -PulseAudioSystem::PulseAudioSystem() { - pasInput = pasOutput = pasSpeaker = NULL; - bSourceDone=bSinkDone=bServerDone = false; - iDelayCache = 0; - bPositionalCache = false; - bPulseIsGood = false; - - pam = pa_threaded_mainloop_new(); - pa_mainloop_api *api = pa_threaded_mainloop_get_api(pam); - - pacContext = pa_context_new(api, "Mumble"); - - pa_context_set_subscribe_callback(pacContext, subscribe_callback, this); - - pa_context_set_state_callback(pacContext, context_state_callback, this); - pa_context_connect(pacContext, NULL, PA_CONTEXT_NOAUTOSPAWN, NULL); - - pade = api->defer_new(api, defer_event_callback, this); - api->defer_enable(pade, false); - - pa_threaded_mainloop_start(pam); -} - -PulseAudioSystem::~PulseAudioSystem() { - pa_threaded_mainloop_stop(pam); - pa_context_disconnect(pacContext); - pa_context_unref(pacContext); - pa_threaded_mainloop_free(pam); -} - -void PulseAudioSystem::wakeup() { - pa_mainloop_api *api = pa_threaded_mainloop_get_api(pam); - api->defer_enable(pade, true); -} - -void PulseAudioSystem::wakeup_lock() { - pa_threaded_mainloop_lock(pam); - pa_mainloop_api *api = pa_threaded_mainloop_get_api(pam); - api->defer_enable(pade, true); - pa_threaded_mainloop_unlock(pam); -} - -void PulseAudioSystem::defer_event_callback(pa_mainloop_api *a, pa_defer_event *e, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - pas->eventCallback(a, e); -} - -void PulseAudioSystem::eventCallback(pa_mainloop_api *api, pa_defer_event *) { - api->defer_enable(pade, false); - - if (! bSourceDone || ! bSinkDone || ! bServerDone) - return; - - AudioInputPtr ai = g.ai; - AudioOutputPtr ao = g.ao; - AudioInput *raw_ai = ai.get(); - AudioOutput *raw_ao = ao.get(); - PulseAudioInput *pai = dynamic_cast(raw_ai); - PulseAudioOutput *pao = dynamic_cast(raw_ao); - - if (raw_ao) { - QString odev = g.s.qsPulseAudioOutput.isEmpty() ? qsDefaultOutput : g.s.qsPulseAudioOutput; - pa_stream_state ost = pasOutput ? pa_stream_get_state(pasOutput) : PA_STREAM_TERMINATED; - bool do_stop = false; - bool do_start = false; - - if (! pao && (ost == PA_STREAM_READY)) { - do_stop = true; - } else if (pao) { - switch (ost) { - case PA_STREAM_TERMINATED: { - if (pasOutput) - pa_stream_unref(pasOutput); - pa_sample_spec pss = qhSpecMap.value(odev); - if (pss.rate == 0) - pss.rate = SAMPLE_RATE; - if ((pss.channels == 0) || (! g.s.doPositionalAudio())) - pss.channels = 1; - if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) - pss.format = PA_SAMPLE_FLOAT32NE; - pasOutput = pa_stream_new(pacContext, "Mumble Speakers", &pss, NULL); - pa_stream_set_state_callback(pasOutput, stream_callback, this); - pa_stream_set_write_callback(pasOutput, write_callback, this); - } - case PA_STREAM_UNCONNECTED: - do_start = true; - break; - case PA_STREAM_READY: { - if (g.s.iOutputDelay != iDelayCache) { - do_stop = true; - } else if (g.s.doPositionalAudio() != bPositionalCache) { - do_stop = true; - } else if (odev != qsOutputCache) { - do_stop = true; - } - break; - } - default: - break; - } - } - if (do_stop) { - qWarning("PulseAudio: Stopping output"); - pa_stream_disconnect(pasOutput); - } else if (do_start) { - qWarning("PulseAudio: Starting output: %s", qPrintable(odev)); - pa_buffer_attr buff; - const pa_sample_spec *pss = pa_stream_get_sample_spec(pasOutput); - const unsigned int iBlockLen = ((pao->iFrameSize * pss->rate) / SAMPLE_RATE) * pss->channels * ((pss->format == PA_SAMPLE_FLOAT32NE) ? sizeof(float) : sizeof(short)); - buff.tlength = iBlockLen * (g.s.iOutputDelay+1); - buff.minreq = iBlockLen; - buff.maxlength = -1; - buff.prebuf = -1; - buff.fragsize = iBlockLen; - - iDelayCache = g.s.iOutputDelay; - bPositionalCache = g.s.doPositionalAudio(); - qsOutputCache = odev; - - pa_stream_connect_playback(pasOutput, qPrintable(odev), &buff, PA_STREAM_ADJUST_LATENCY, NULL, NULL); - } - } - - if (raw_ai) { - QString idev = g.s.qsPulseAudioInput.isEmpty() ? qsDefaultInput : g.s.qsPulseAudioInput; - pa_stream_state ist = pasInput ? pa_stream_get_state(pasInput) : PA_STREAM_TERMINATED; - bool do_stop = false; - bool do_start = false; - - if (! pai && (ist == PA_STREAM_READY)) { - do_stop = true; - } else if (pai) { - switch (ist) { - case PA_STREAM_TERMINATED: { - if (pasInput) - pa_stream_unref(pasInput); - - pa_sample_spec pss = qhSpecMap.value(idev); - if (pss.rate == 0) - pss.rate = SAMPLE_RATE; - pss.channels = 1; - if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) - pss.format = PA_SAMPLE_FLOAT32NE; - - pasInput = pa_stream_new(pacContext, "Microphone", &pss, NULL); - pa_stream_set_state_callback(pasInput, stream_callback, this); - pa_stream_set_read_callback(pasInput, read_callback, this); - } - case PA_STREAM_UNCONNECTED: - do_start = true; - break; - case PA_STREAM_READY: { - if (idev != qsInputCache) { - do_stop = true; - } - break; - } - default: - break; - } - } - if (do_stop) { - qWarning("PulseAudio: Stopping input"); - pa_stream_disconnect(pasInput); - } else if (do_start) { - qWarning("PulseAudio: Starting input %s",qPrintable(idev)); - pa_buffer_attr buff; - const pa_sample_spec *pss = pa_stream_get_sample_spec(pasInput); - const unsigned int iBlockLen = ((pai->iFrameSize * pss->rate) / SAMPLE_RATE) * pss->channels * ((pss->format == PA_SAMPLE_FLOAT32NE) ? sizeof(float) : sizeof(short)); - buff.tlength = iBlockLen; - buff.minreq = iBlockLen; - buff.maxlength = -1; - buff.prebuf = -1; - buff.fragsize = iBlockLen; - - qsInputCache = idev; - - pa_stream_connect_record(pasInput, qPrintable(idev), &buff, PA_STREAM_ADJUST_LATENCY); - } - } - - if (raw_ai) { - QString odev = g.s.qsPulseAudioOutput.isEmpty() ? qsDefaultOutput : g.s.qsPulseAudioOutput; - QString edev = qhEchoMap.value(odev); - pa_stream_state est = pasSpeaker ? pa_stream_get_state(pasSpeaker) : PA_STREAM_TERMINATED; - bool do_stop = false; - bool do_start = false; - - if ((! pai || ! g.s.doEcho()) && (est == PA_STREAM_READY)) { - do_stop = true; - } else if (pai && g.s.doEcho()) { - switch (est) { - case PA_STREAM_TERMINATED: { - if (pasSpeaker) - pa_stream_unref(pasSpeaker); - - pa_sample_spec pss = qhSpecMap.value(edev); - if (pss.rate == 0) - pss.rate = SAMPLE_RATE; - pss.channels = 1; - if ((pss.format != PA_SAMPLE_FLOAT32NE) && (pss.format != PA_SAMPLE_S16NE)) - pss.format = PA_SAMPLE_FLOAT32NE; - pasSpeaker = pa_stream_new(pacContext, "Mumble Speakers (Echo)", &pss, NULL); - pa_stream_set_state_callback(pasSpeaker, stream_callback, this); - pa_stream_set_read_callback(pasSpeaker, read_callback, this); - } - case PA_STREAM_UNCONNECTED: - do_start = true; - break; - case PA_STREAM_READY: { - if (edev != qsEchoCache) { - do_stop = true; - } - break; - } - default: - break; - } - } - if (do_stop) { - qWarning("PulseAudio: Stopping echo"); - pa_stream_disconnect(pasSpeaker); - } else if (do_start) { - qWarning("PulseAudio: Starting echo: %s", qPrintable(edev)); - pa_buffer_attr buff; - const pa_sample_spec *pss = pa_stream_get_sample_spec(pasSpeaker); - const unsigned int iBlockLen = ((pai->iFrameSize * pss->rate) / SAMPLE_RATE) * pss->channels * ((pss->format == PA_SAMPLE_FLOAT32NE) ? sizeof(float) : sizeof(short)); - buff.tlength = iBlockLen; - buff.minreq = iBlockLen; - buff.maxlength = -1; - buff.prebuf = -1; - buff.fragsize = iBlockLen; - - qsEchoCache = edev; - - pa_stream_connect_record(pasSpeaker, qPrintable(edev), &buff, PA_STREAM_ADJUST_LATENCY); - } - } -} - -void PulseAudioSystem::context_state_callback(pa_context *c, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - pas->contextCallback(c); -} - -void PulseAudioSystem::subscribe_callback(pa_context *, pa_subscription_event_type evt, unsigned int, void *userdata) { - switch (evt & PA_SUBSCRIPTION_EVENT_TYPE_MASK) { - case PA_SUBSCRIPTION_EVENT_NEW: - case PA_SUBSCRIPTION_EVENT_REMOVE: - break; - default: - return; - } - switch (evt & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { - case PA_SUBSCRIPTION_EVENT_SINK: - case PA_SUBSCRIPTION_EVENT_SOURCE: - break; - default: - return; - } - PulseAudioSystem *pas = reinterpret_cast(userdata); - qWarning("PulseAudio: Sinks or inputs changed (inserted or removed sound card)"); - pas->query(); -} - -void PulseAudioSystem::sink_callback(pa_context *, const pa_sink_info *i, int eol, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - if (!i || eol) { - pas->bSinkDone = true; - pas->wakeup(); - return; - } - - const QString name = QLatin1String(i->name); - - pas->qhIndexMap.insert(name, i->index); - pas->qhSpecMap.insert(name, i->sample_spec); - pas->qhOutput.insert(name, QLatin1String(i->description)); - pas->qhEchoMap.insert(name, QLatin1String(i->monitor_source_name)); -} - -void PulseAudioSystem::source_callback(pa_context *, const pa_source_info *i, int eol, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - if (!i || eol) { - pas->bSourceDone = true; - pas->wakeup(); - return; - } - - const QString name = QLatin1String(i->name); - - pas->qhIndexMap.insert(name, i->index); - pas->qhSpecMap.insert(name, i->sample_spec); - - if (i->monitor_of_sink == PA_INVALID_INDEX) - pas->qhInput.insert(QLatin1String(i->name), QLatin1String(i->description)); -} - -void PulseAudioSystem::server_callback(pa_context *, const pa_server_info *i, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - - pas->qsDefaultInput = QLatin1String(i->default_source_name); - pas->qsDefaultOutput = QLatin1String(i->default_sink_name); - - pas->bServerDone = true; - pas->wakeup(); -} - -void PulseAudioSystem::stream_callback(pa_stream *s, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - switch (pa_stream_get_state(s)) { - case PA_STREAM_FAILED: - qWarning("PulseAudio: Stream error: %s", pa_strerror(pa_context_errno(pa_stream_get_context(s)))); - break; - default: - break; - } - pas->wakeup(); -} - -void PulseAudioSystem::read_callback(pa_stream *s, size_t bytes, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - - size_t length = bytes; - const void *data; - pa_stream_peek(s, &data, &length); - - AudioInputPtr ai = g.ai; - PulseAudioInput *pai = dynamic_cast(ai.get()); - if (! pai) { - pa_stream_drop(s); - pas->wakeup(); - return; - } - - const pa_sample_spec *pss = pa_stream_get_sample_spec(s); - - if (s == pas->pasInput) { - if (!pa_sample_spec_equal(pss, &pai->pssMic)) { - pai->pssMic = *pss; - pai->iMicFreq = pss->rate; - pai->iMicChannels = pss->channels; - if (pss->format == PA_SAMPLE_FLOAT32NE) - pai->eMicFormat = AudioInput::SampleFloat; - else - pai->eMicFormat = AudioInput::SampleShort; - pai->initializeMixer(); - } - pai->addMic(data, length / pai->iMicSampleSize); - } else if (s == pas->pasSpeaker) { - if (!pa_sample_spec_equal(pss, &pai->pssEcho)) { - pai->pssEcho = *pss; - pai->iEchoFreq = pss->rate; - pai->iEchoChannels = pss->channels; - if (pss->format == PA_SAMPLE_FLOAT32NE) - pai->eEchoFormat = AudioInput::SampleFloat; - else - pai->eEchoFormat = AudioInput::SampleShort; - pai->initializeMixer(); - } - pai->addEcho(data, length / pai->iEchoSampleSize); - } - - pa_stream_drop(s); -} - -void PulseAudioSystem::write_callback(pa_stream *s, size_t bytes, void *userdata) { - PulseAudioSystem *pas = reinterpret_cast(userdata); - Q_ASSERT(s == pas->pasOutput); - - AudioOutputPtr ao = g.ao; - PulseAudioOutput *pao = dynamic_cast(ao.get()); - - unsigned char buffer[bytes]; - - if (! pao) { - // Transitioning, but most likely transitions back, so just zero. - memset(buffer, 0, bytes); - pa_stream_write(s, buffer, bytes, NULL, 0, PA_SEEK_RELATIVE); - pas->wakeup(); - return; - } - - const pa_sample_spec *pss = pa_stream_get_sample_spec(s); - const pa_channel_map *pcm = pa_stream_get_channel_map(pas->pasOutput); - if (!pa_sample_spec_equal(pss, &pao->pss) || !pa_channel_map_equal(pcm, &pao->pcm)) { - pao->pss = *pss; - pao->pcm = *pcm; - if (pss->format == PA_SAMPLE_FLOAT32NE) - pao->eSampleFormat = AudioOutput::SampleFloat; - else - pao->eSampleFormat = AudioOutput::SampleShort; - pao->iMixerFreq = pss->rate; - pao->iChannels = pss->channels; - unsigned int chanmasks[pss->channels]; - for (int i=0;ichannels;++i) { - unsigned int cm = 0; - switch (pcm->map[i]) { - case PA_CHANNEL_POSITION_LEFT: - cm = SPEAKER_FRONT_LEFT; - break; - case PA_CHANNEL_POSITION_RIGHT: - cm = SPEAKER_FRONT_RIGHT; - break; - case PA_CHANNEL_POSITION_CENTER: - cm = SPEAKER_FRONT_CENTER; - break; - case PA_CHANNEL_POSITION_REAR_LEFT: - cm = SPEAKER_BACK_LEFT; - break; - case PA_CHANNEL_POSITION_REAR_RIGHT: - cm = SPEAKER_BACK_RIGHT; - break; - case PA_CHANNEL_POSITION_REAR_CENTER: - cm = SPEAKER_BACK_CENTER; - break; - case PA_CHANNEL_POSITION_LFE: - cm = SPEAKER_LOW_FREQUENCY; - break; - case PA_CHANNEL_POSITION_SIDE_LEFT: - cm = SPEAKER_SIDE_LEFT; - break; - case PA_CHANNEL_POSITION_SIDE_RIGHT: - cm = SPEAKER_SIDE_RIGHT; - break; - case PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER: - cm = SPEAKER_FRONT_LEFT_OF_CENTER; - break; - case PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER: - cm = SPEAKER_FRONT_RIGHT_OF_CENTER; - break; - default: - cm = 0; - break; - } - chanmasks[i] = cm; - } - pao->initializeMixer(chanmasks); - } - - const unsigned int iSampleSize = pao->iSampleSize; - const unsigned int samples = bytes / iSampleSize; - - if (! pao->mix(buffer, samples)) - memset(buffer, 0, bytes); - pa_stream_write(s, buffer, iSampleSize * samples, NULL, 0, PA_SEEK_RELATIVE); -} - -void PulseAudioSystem::query() { - bSourceDone=bSinkDone=bServerDone = false; - qhInput.clear(); - qhOutput.clear(); - qhEchoMap.clear(); - qhInput.insert(QString(), tr("Default Input")); - qhOutput.insert(QString(), tr("Default Output")); - pa_operation_unref(pa_context_get_server_info(pacContext, server_callback, this)); - pa_operation_unref(pa_context_get_sink_info_list(pacContext, sink_callback, this)); - pa_operation_unref(pa_context_get_source_info_list(pacContext, source_callback, this)); - wakeup(); -} - -void PulseAudioSystem::contextCallback(pa_context *c) { - Q_ASSERT(c == pacContext); - switch (pa_context_get_state(c)) { - case PA_CONTEXT_READY: - bPulseIsGood = true; - pa_operation_unref(pa_context_subscribe(pacContext, PA_SUBSCRIPTION_MASK_SOURCE, NULL, this)); - pa_operation_unref(pa_context_subscribe(pacContext, PA_SUBSCRIPTION_MASK_SINK, NULL, this)); - query(); - break; - case PA_CONTEXT_TERMINATED: - qWarning("PulseAudio: Forcibly disconnected from PulseAudio"); - break; - case PA_CONTEXT_FAILED: - qWarning("PulseAudio: Connection failure: %s", pa_strerror(pa_context_errno(c))); - break; - default: - return; - } - qmWait.lock(); - qwcWait.wakeAll(); - qmWait.unlock(); -} - -PulseAudioInputRegistrar::PulseAudioInputRegistrar() : AudioInputRegistrar(QLatin1String("PulseAudio"), 10) { -} - -AudioInput *PulseAudioInputRegistrar::create() { - return new PulseAudioInput(); -} - -const QList PulseAudioInputRegistrar::getDeviceChoices() { - QList qlReturn; - - QStringList qlInputDevs = pasys->qhInput.keys(); - qSort(qlInputDevs); - - if (qlInputDevs.contains(g.s.qsPulseAudioInput)) { - qlInputDevs.removeAll(g.s.qsPulseAudioInput); - qlInputDevs.prepend(g.s.qsPulseAudioInput); - } - - foreach(const QString &dev, qlInputDevs) { - qlReturn << audioDevice(pasys->qhInput.value(dev), dev); - } - - return qlReturn; -} - -void PulseAudioInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsPulseAudioInput = choice.toString(); -} - -bool PulseAudioInputRegistrar::canEcho(const QString &osys) const { - return (osys == name); -} - -PulseAudioOutputRegistrar::PulseAudioOutputRegistrar() : AudioOutputRegistrar(QLatin1String("PulseAudio"), 10) { -} - -AudioOutput *PulseAudioOutputRegistrar::create() { - return new PulseAudioOutput(); -} - -const QList PulseAudioOutputRegistrar::getDeviceChoices() { - QList qlReturn; - - QStringList qlOutputDevs = pasys->qhOutput.keys(); - qSort(qlOutputDevs); - - if (qlOutputDevs.contains(g.s.qsPulseAudioOutput)) { - qlOutputDevs.removeAll(g.s.qsPulseAudioOutput); - qlOutputDevs.prepend(g.s.qsPulseAudioOutput); - } - - foreach(const QString &dev, qlOutputDevs) { - qlReturn << audioDevice(pasys->qhOutput.value(dev), dev); - } - - return qlReturn; -} - -void PulseAudioOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsPulseAudioOutput = choice.toString(); -} - -PulseAudioInput::PulseAudioInput() { - memset(&pssMic, 0, sizeof(pssMic)); - memset(&pssEcho, 0, sizeof(pssEcho)); - bRunning = true; - if (pasys) - pasys->wakeup_lock(); -} - -PulseAudioInput::~PulseAudioInput() { - bRunning = false; - qmMutex.lock(); - qwcWait.wakeAll(); - qmMutex.unlock(); - wait(); - if (pasys) - pasys->wakeup_lock(); -} - -void PulseAudioInput::run() { - qmMutex.lock(); - while (bRunning) - qwcWait.wait(&qmMutex); - qmMutex.unlock(); -} - -PulseAudioOutput::PulseAudioOutput() { - memset(&pss, 0, sizeof(pss)); - memset(&pcm, 0, sizeof(pcm)); - bRunning = true; - if (pasys) - pasys->wakeup_lock(); -} - -PulseAudioOutput::~PulseAudioOutput() { - bRunning = false; - qmMutex.lock(); - qwcWait.wakeAll(); - qmMutex.unlock(); - wait(); - if (pasys) - pasys->wakeup_lock(); -} - -void PulseAudioOutput::run() { - qmMutex.lock(); - while (bRunning) - qwcWait.wait(&qmMutex); - qmMutex.unlock(); -} diff -Nru mumble-1.2.3/src/mumble11x/PulseAudio.h mumble-1.2.3-87-gf7d8711/src/mumble11x/PulseAudio.h --- mumble-1.2.3/src/mumble11x/PulseAudio.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/PulseAudio.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,121 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _PULSEAUDIO_H -#define _PULSEAUDIO_H - -#include "AudioInput.h" -#include "AudioOutput.h" -#include - -class PulseAudioInput; -class PulseAudioOutput; - -class PulseAudioSystem : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(PulseAudioSystem) - protected: - void wakeup(); - pa_context *pacContext; - pa_stream *pasInput, *pasOutput, *pasSpeaker; - pa_threaded_mainloop *pam; - pa_defer_event *pade; - - bool bSourceDone, bSinkDone, bServerDone; - - QString qsDefaultInput, qsDefaultOutput; - - int iDelayCache; - QString qsOutputCache, qsInputCache, qsEchoCache; - bool bPositionalCache; - QHash qhEchoMap; - QHash qhSpecMap; - QHash qhIndexMap; - - static void defer_event_callback(pa_mainloop_api *a, pa_defer_event *e, void *userdata); - static void context_state_callback(pa_context *c, void *userdata); - static void subscribe_callback(pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata); - static void sink_callback(pa_context *c, const pa_sink_info *i, int eol, void *userdata); - static void source_callback(pa_context *c, const pa_source_info *i, int eol, void *userdata); - static void server_callback(pa_context *c, const pa_server_info *i, void *userdata); - static void stream_callback(pa_stream *s, void *userdata); - static void read_callback(pa_stream *s, size_t bytes, void *userdata); - static void write_callback(pa_stream *s, size_t bytes, void *userdata); - void contextCallback(pa_context *c); - void eventCallback(pa_mainloop_api *a, pa_defer_event *e); - - void query(); - - public: - QHash qhInput; - QHash qhOutput; - bool bPulseIsGood; - QMutex qmWait; - QWaitCondition qwcWait; - - void wakeup_lock(); - - PulseAudioSystem(); - ~PulseAudioSystem(); -}; - -class PulseAudioInput : public AudioInput { - friend class PulseAudioSystem; - private: - Q_OBJECT - Q_DISABLE_COPY(PulseAudioInput) - protected: - QMutex qmMutex; - QWaitCondition qwcWait; - pa_sample_spec pssMic, pssEcho; - public: - PulseAudioInput(); - ~PulseAudioInput(); - void run(); -}; - -class PulseAudioOutput : public AudioOutput { - friend class PulseAudioSystem; - private: - Q_OBJECT - Q_DISABLE_COPY(PulseAudioOutput) - protected: - QMutex qmMutex; - QWaitCondition qwcWait; - pa_sample_spec pss; - pa_channel_map pcm; - public: - PulseAudioOutput(); - ~PulseAudioOutput(); - void run(); -}; - -#endif Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/authenticated.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/authenticated.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/channel_linked.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/channel_linked.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/channel.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/channel.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/deafened_overlay.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/deafened_overlay.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/deafened_self.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/deafened_self.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/deafened_server.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/deafened_server.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/mumble.16x16.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/mumble.16x16.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/mumble.32x32.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/mumble.32x32.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/mumble.48x48.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/mumble.48x48.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/mumble.64x64.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/mumble.64x64.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/muted_local.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/muted_local.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/muted_overlay.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/muted_overlay.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/muted_self.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/muted_self.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/muted_server.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/muted_server.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/talking_alt.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/talking_alt.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/talking_off.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/talking_off.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/talking_on.png and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/talking_on.png differ Binary files /tmp/8eeFEDlL6u/mumble-1.2.3/src/mumble11x/resources/wb_male.spx and /tmp/DXl4nUFXdU/mumble-1.2.3-87-gf7d8711/src/mumble11x/resources/wb_male.spx differ diff -Nru mumble-1.2.3/src/mumble11x/ServerHandler.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ServerHandler.cpp --- mumble-1.2.3/src/mumble11x/ServerHandler.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ServerHandler.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,376 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ServerHandler.h" -#include "MainWindow.h" -#include "AudioInput.h" -#include "AudioOutput.h" -#include "Message.h" -#include "Player.h" -#include "Connection.h" -#include "Global.h" -#include "Database.h" -#include "PacketDataStream.h" -#include "NetworkConfig.h" - -ServerHandlerMessageEvent::ServerHandlerMessageEvent(QByteArray &msg, bool flush) : QEvent(static_cast(SERVERSEND_EVENT)) { - qbaMsg = msg; - bFlush = flush; -} - -ServerHandler::ServerHandler() { - cConnection.reset(); - qusUdp = NULL; - - // For some strange reason, on Win32, we have to call supportsSsl before the cipher list is ready. - qWarning("OpenSSL Support: %d", QSslSocket::supportsSsl()); - - QList pref; - foreach(QSslCipher c, QSslSocket::defaultCiphers()) { - if (c.usedBits() < 128) - continue; - pref << c; - } - if (pref.isEmpty()) - qFatal("No ciphers of at least 128 bit found"); - QSslSocket::setDefaultCiphers(pref); - -#ifdef Q_OS_WIN - QOS_VERSION qvVer; - qvVer.MajorVersion = 1; - qvVer.MinorVersion = 0; - - hQoS = NULL; - - HMODULE hLib = LoadLibrary(L"qWave.dll"); - if (hLib == NULL) { - qWarning("ServerHandler: Failed to load qWave.dll, no QoS available"); - } else { - FreeLibrary(hLib); - if (! QOSCreateHandle(&qvVer, &hQoS)) - qWarning("ServerHandler: Failed to create QOS2 handle"); - else - Connection::setQoS(hQoS); - } -#endif -} - -ServerHandler::~ServerHandler() { - wait(); - cConnection.reset(); -#ifdef Q_OS_WIN - if (hQoS) { - QOSCloseHandle(hQoS); - Connection::setQoS(NULL); - } -#endif -} - -void ServerHandler::customEvent(QEvent *evt) { - if (evt->type() != SERVERSEND_EVENT) - return; - - ServerHandlerMessageEvent *shme=static_cast(evt); - - if (cConnection) { - if (shme->qbaMsg.size() > 0) { - cConnection->sendMessage(shme->qbaMsg); - if (shme->bFlush) - cConnection->forceFlush(); - } else { - exit(0); - } - } -} - -void ServerHandler::udpReady() { - while (qusUdp->hasPendingDatagrams()) { - char encrypted[65536]; - char buffer[65535]; - unsigned int buflen = static_cast(qusUdp->pendingDatagramSize()); - QHostAddress senderAddr; - quint16 senderPort; - qusUdp->readDatagram(encrypted, qMin(65536U, buflen), &senderAddr, &senderPort); - - if (!(senderAddr == qhaRemote) || (senderPort != usPort)) - continue; - - if (! cConnection) - continue; - - if (! cConnection->csCrypt.isValid()) - continue; - - if (! cConnection->csCrypt.decrypt(reinterpret_cast(encrypted), reinterpret_cast(buffer), buflen)) { - if (cConnection->csCrypt.tLastGood.elapsed() > 5000000ULL) { - if (cConnection->csCrypt.tLastRequest.elapsed() > 5000000ULL) { - cConnection->csCrypt.tLastRequest.restart(); - MessageCryptSync mcs; - sendMessage(&mcs); - } - } - continue; - } - - PacketDataStream pds(buffer, buflen-4); - - quint32 msgType, uiSession; - pds >> msgType >> uiSession; - - if (msgType == Message::Ping) { - quint64 t; - pds >> t; - Connection::updatePing(cConnection->dUDPPingAvg, cConnection->dUDPPingVar, cConnection->uiUDPPackets, tTimestamp.elapsed() - t); - } else if (msgType == Message::Speex) { - ClientPlayer *p = ClientPlayer::get(uiSession); - AudioOutputPtr ao = g.ao; - if (ao) { - if (p) { - if (! p->bLocalMute) { - unsigned int iSeq; - pds >> iSeq; - QByteArray qbaSpeexPacket(pds.dataBlock(pds.left())); - ao->addFrameToBuffer(p, qbaSpeexPacket, iSeq); - } - } else { - ao->removeBuffer(p); - } - } - } - } -} - -void ServerHandler::sendMessage(Message *mMsg) { - bool mayUdp = (mMsg->messageType() == Message::Speex) || (mMsg->messageType() == Message::Ping); - mMsg->uiSession = g.uiSession; - - if (mayUdp && !NetworkConfig::TcpModeEnabled()) { - QMutexLocker qml(&qmUdp); - if (! qusUdp) - return; - if (! cConnection->csCrypt.isValid()) - return; - unsigned char buffer[65536]; - unsigned char crypto[65540]; - PacketDataStream pds(buffer, 65536); - mMsg->messageToNetwork(pds); - cConnection->csCrypt.encrypt(buffer, crypto, pds.size()); - qusUdp->writeDatagram(reinterpret_cast(crypto), pds.size() + 4, qhaRemote, usPort); - } else { - QByteArray qbaBuffer; - mMsg->messageToNetwork(qbaBuffer); - - ServerHandlerMessageEvent *shme=new ServerHandlerMessageEvent(qbaBuffer, mayUdp); - QApplication::postEvent(this, shme); - } -} - -void ServerHandler::run() { - QSslSocket *qtsSock = new QSslSocket(this); - cConnection = ConnectionPtr(new Connection(this, qtsSock)); - - qlErrors.clear(); - qscCert.clear(); - - connect(qtsSock, SIGNAL(encrypted()), this, SLOT(serverConnectionConnected())); - connect(cConnection.get(), SIGNAL(connectionClosed(QString)), this, SLOT(serverConnectionClosed(QString))); - connect(cConnection.get(), SIGNAL(message(QByteArray &)), this, SLOT(message(QByteArray &))); - connect(cConnection.get(), SIGNAL(handleSslErrors(const QList &)), this, SLOT(setSslErrors(const QList &))); - qtsSock->connectToHostEncrypted(qsHostName, usPort); - - QTimer *ticker = new QTimer(this); - connect(ticker, SIGNAL(timeout()), this, SLOT(sendPing())); - ticker->start(5000); - - g.mw->rtLast = MessageServerReject::None; - - exec(); - - if (qusUdp) { - QMutexLocker qml(&qmUdp); - -#ifdef Q_OS_WIN - if (hQoS != NULL) { - if (! QOSRemoveSocketFromFlow(hQoS, 0, dwFlowUDP, 0)) - qWarning("ServerHandler: Failed to remove UDP from QoS"); - dwFlowUDP = 0; - } -#endif - delete qusUdp; - qusUdp = NULL; - } - - ticker->stop(); - cConnection->disconnectSocket(true); - cConnection.reset(); -} - -void ServerHandler::setSslErrors(const QList &errors) { - qscCert = cConnection->peerCertificateChain(); - if ((qscCert.size() > 0) && (QString::fromLatin1(qscCert.at(0).digest(QCryptographicHash::Sha1).toHex()) == Database::getDigest(qsHostName, usPort))) - cConnection->proceedAnyway(); - else - qlErrors = errors; -} - -void ServerHandler::sendPing() { - CryptState &cs = cConnection->csCrypt; - MessagePingStats mps; - mps.uiTimestamp = tTimestamp.elapsed(); - mps.uiGood = cs.uiGood; - mps.uiLate = cs.uiLate; - mps.uiLost = cs.uiLost; - mps.uiResync = cs.uiResync; - mps.dUDPPingAvg = cConnection->dUDPPingAvg; - mps.dUDPPingVar = cConnection->dUDPPingVar; - mps.dTCPPingAvg = cConnection->dTCPPingAvg; - mps.dTCPPingVar = cConnection->dTCPPingVar; - sendMessage(&mps); - - if (!NetworkConfig::TcpModeEnabled()) { - MessagePing mp; - mp.uiTimestamp = mps.uiTimestamp; - sendMessage(&mp); - } -} - -void ServerHandler::message(QByteArray &qbaMsg) { - Message *mMsg = Message::networkToMessage(qbaMsg); - if (! mMsg) - return; - - ClientPlayer *p = ClientPlayer::get(mMsg->uiSession); - AudioOutputPtr ao = g.ao; - - if (mMsg->messageType() == Message::Speex) { - if (ao) { - if (p) { - MessageSpeex *msMsg=static_cast(mMsg); - if (! p->bLocalMute) - ao->addFrameToBuffer(p, msMsg->qbaSpeexPacket, msMsg->iSeq); - } else { - // Eek, we just got a late packet for a player already removed. Remove - // the buffer and pretend this never happened. - // If ~AudioOutputPlayer or decendants uses the Player object now, - // Bad Things happen. - ao->removeBuffer(p); - } - } - } else if (mMsg->messageType() == Message::PingStats) { - MessagePingStats *mpsMsg = static_cast(mMsg); - CryptState &cs = cConnection->csCrypt; - cs.uiRemoteGood = mpsMsg->uiGood; - cs.uiRemoteLate = mpsMsg->uiLate; - cs.uiRemoteLost = mpsMsg->uiLost; - cs.uiRemoteResync = mpsMsg->uiResync; - Connection::updatePing(cConnection->dTCPPingAvg, cConnection->dTCPPingVar, cConnection->uiTCPPackets, tTimestamp.elapsed() - mpsMsg->uiTimestamp); - } else { - if (mMsg->messageType() == Message::ServerLeave) { - if (ao) - ao->removeBuffer(p); - } - ServerHandlerMessageEvent *shme=new ServerHandlerMessageEvent(qbaMsg, false); - QApplication::postEvent(g.mw, shme); - } - - delete mMsg; -} - -void ServerHandler::disconnect() { - // Actual TCP object is in a different thread, so signal it - QByteArray qbaBuffer; - ServerHandlerMessageEvent *shme=new ServerHandlerMessageEvent(qbaBuffer, false); - QApplication::postEvent(this, shme); -} - -void ServerHandler::serverConnectionClosed(QString reason) { - AudioOutputPtr ao = g.ao; - if (ao) - ao->wipe(); - emit disconnected(reason); - exit(0); -} - -void ServerHandler::serverConnectionConnected() { - qscCert = cConnection->peerCertificateChain(); - qscCipher = cConnection->sessionCipher(); - - cConnection->setToS(); - - MessageServerAuthenticate msaMsg; - msaMsg.qsUsername = qsUserName; - msaMsg.qsPassword = qsPassword; - - cConnection->sendMessage(&msaMsg); - - { - QMutexLocker qml(&qmUdp); - - qusUdp = new QUdpSocket(this); - qusUdp->bind(); - connect(qusUdp, SIGNAL(readyRead()), this, SLOT(udpReady())); - - qhaRemote = cConnection->peerAddress(); - -#if defined(Q_OS_UNIX) - int val = 0xe0; - if (setsockopt(qusUdp->socketDescriptor(), IPPROTO_IP, IP_TOS, &val, sizeof(val))) - qWarning("ServerHandler: Failed to set TOS for UDP Socket"); -#elif defined(Q_OS_WIN) - if (hQoS != NULL) { - struct sockaddr_in addr; - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(usPort); - addr.sin_addr.s_addr = htonl(qhaRemote.toIPv4Address()); - - dwFlowUDP = 0; - if (! QOSAddSocketToFlow(hQoS, qusUdp->socketDescriptor(), reinterpret_cast(&addr), QOSTrafficTypeVoice, QOS_NON_ADAPTIVE_FLOW, &dwFlowUDP)) - qWarning("ServerHandler: Failed to add UDP to QOS"); - } -#endif - } - - emit connected(); -} - -void ServerHandler::setConnectionInfo(const QString &host, unsigned short port, const QString &username, const QString &pw) { - qsHostName = host; - usPort = port; - qsUserName = username; - qsPassword = pw; -} - -void ServerHandler::getConnectionInfo(QString &host, unsigned short &port, QString &username, QString &pw) { - host = qsHostName; - port = usPort; - username = qsUserName; - pw = qsPassword; -} diff -Nru mumble-1.2.3/src/mumble11x/ServerHandler.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ServerHandler.h --- mumble-1.2.3/src/mumble11x/ServerHandler.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ServerHandler.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _SERVERHANDLER_H -#define _SERVERHANDLER_H - -#define SERVERSEND_EVENT 3501 - -#include "mumble_pch.hpp" -#include "Timer.h" - - -class Connection; -class Message; - -class ServerHandlerMessageEvent : public QEvent { - public: - QByteArray qbaMsg; - bool bFlush; - ServerHandlerMessageEvent(QByteArray &msg, bool flush); -}; - -typedef boost::shared_ptr ConnectionPtr; - -class ServerHandler : public QThread { - private: - Q_OBJECT - Q_DISABLE_COPY(ServerHandler) - protected: - QString qsHostName; - QString qsUserName; - QString qsPassword; - QString qsDigest; - unsigned short usPort; - -#ifdef Q_OS_WIN - HANDLE hQoS; - DWORD dwFlowUDP; -#endif - - QHostAddress qhaRemote; - QUdpSocket *qusUdp; - QMutex qmUdp; - Timer tTimestamp; - public: - QList qlErrors; - QList qscCert; - QSslCipher qscCipher; - ConnectionPtr cConnection; - - ServerHandler(); - ~ServerHandler(); - void setConnectionInfo(const QString &host, unsigned short port, const QString &username, const QString &pw); - void getConnectionInfo(QString &host, unsigned short &port, QString &username, QString &pw); - void customEvent(QEvent *evt); - void sendMessage(Message *m); - void disconnect(); - void run(); - signals: - void disconnected(QString reason); - void connected(); - protected slots: - void message(QByteArray &); - void serverConnectionConnected(); - void serverConnectionClosed(QString); - void setSslErrors(const QList &); - void udpReady(); - void sendPing(); -}; - -#else -class ServerHandler; -#endif diff -Nru mumble-1.2.3/src/mumble11x/Settings.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Settings.cpp --- mumble-1.2.3/src/mumble11x/Settings.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Settings.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,492 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Settings.h" -#include "Log.h" -#include "Global.h" -#include "AudioInput.h" - -bool Shortcut::operator <(const Shortcut &other) const { - return (iIndex < other.iIndex); -} - -Settings::Settings() { - bHighContrast = false; - atTransmit = VAD; - bTransmitPosition = false; - bMute = bDeaf = false; - bTTS = true; - iTTSVolume = 75; - iTTSThreshold = 250; - iQuality = 6; - fVolume = 1.0f; - fOtherVolume = 0.5f; - bAttenuateOthersOnTalk = false; - bAttenuateOthers = false; - iMinLoudness = 1000; - iVoiceHold = 50; - iJitterBufferSize = 1; - iFramesPerPacket = 2; - iNoiseSuppress = -30; - iIdleTime = 0; - vsVAD = SignalToNoise; - fVADmin = 0.80f; - fVADmax = 0.98f; - bPushClick = false; - - bExclusiveInput = bExclusiveOutput = false; - - bPlayerTop = false; - - uiDoublePush = 0; - bExpert = false; - - // Update checks will always fail. - bUpdateCheck = false; - - bFirstTime = true; - ceExpand = ChannelsWithPlayers; - ceChannelDrag = Ask; - bMinimalView = false; - bHideFrame = false; - bAlwaysOnTop = false; - bAskOnQuit = true; - bHideTray = true; - bUsage = true; - - iOutputDelay = 5; - - qsALSAInput=QLatin1String("default"); - qsALSAOutput=QLatin1String("default"); - - bEcho = false; - - iPortAudioInput = -1; // default device - iPortAudioOutput = -1; // default device - - bPositionalAudio = false; - bPositionalHeadphone = false; - fAudioMinDistance = 1.0f; - fAudioMaxDistance = 15.0f; - fAudioMaxDistVolume = 0.15f; - fAudioBloom = 0.5f; - - bOverlayEnable = true; - bOverlayUserTextures=true; - osOverlay = All; - bOverlayAlwaysSelf = true; - fOverlayX = 0.8f; - fOverlayY = 0.0f; - bOverlayTop = false; - bOverlayBottom = true; - bOverlayLeft = true; - bOverlayRight = false; -#ifdef Q_OS_WIN - qfOverlayFont = QFont(QLatin1String("Comic Sans MS"), 20); -#else - qfOverlayFont = QFont(QLatin1String("Arial"), 20); -#endif - fOverlayHeight = .03f; - qcOverlayPlayer = QColor(255,255,255,128); - qcOverlayTalking = QColor(255,255,196,255); - qcOverlayAltTalking = QColor(255,128,128,255); - qcOverlayChannel = QColor(192,192,255,192); - qcOverlayChannelTalking = QColor(224,224,255,255); - - iLCDPlayerViewMinColWidth = 50; - iLCDPlayerViewSplitterWidth = 2; - - // Network settings - bTCPCompat = false; - bReconnect = true; - ptProxyType = NoProxy; - usProxyPort = 0; - -#ifdef AUDIO_TEST - lmLoopMode = Local; -#else - lmLoopMode = None; -#endif - dPacketLoss = 0; - dMaxPacketDelay = 0.0f; - - for (int i=Log::firstMsgType;i<=Log::lastMsgType;++i) - qmMessages.insert(i, Settings::LogConsole | Settings::LogBalloon | Settings::LogTTS); - - for (int i=Log::firstMsgType;i<=Log::lastMsgType;++i) - qmMessageSounds.insert(i, QString()); - - qmMessages[Log::DebugInfo] = Settings::LogConsole; - qmMessages[Log::Information] = Settings::LogConsole; - - iServerRow = -1; -} - -bool Settings::doEcho() const { - if (! bEcho) - return false; - - if (AudioInputRegistrar::qmNew) { - AudioInputRegistrar *air = AudioInputRegistrar::qmNew->value(qsAudioInput); - if (air) { - if (air->canEcho(qsAudioOutput)) - return true; - } - } - return false; -} - -bool Settings::doPositionalAudio() const { - return bPositionalAudio; -} - -#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() - - -BOOST_TYPEOF_REGISTER_TYPE(Settings::AudioTransmit); -BOOST_TYPEOF_REGISTER_TYPE(Settings::VADSource); -BOOST_TYPEOF_REGISTER_TYPE(Settings::LoopMode) -BOOST_TYPEOF_REGISTER_TYPE(Settings::OverlayShow) -BOOST_TYPEOF_REGISTER_TYPE(Settings::ProxyType) -BOOST_TYPEOF_REGISTER_TYPE(Settings::ChannelExpand) -BOOST_TYPEOF_REGISTER_TYPE(Settings::ChannelDrag) -BOOST_TYPEOF_REGISTER_TYPE(QString) -BOOST_TYPEOF_REGISTER_TYPE(QByteArray) -BOOST_TYPEOF_REGISTER_TYPE(QColor) -BOOST_TYPEOF_REGISTER_TYPE(QVariant) -BOOST_TYPEOF_REGISTER_TYPE(QFont) -BOOST_TYPEOF_REGISTER_TEMPLATE(QList, 1) - -#define SAVELOAD(var,name) var = qvariant_cast(g.qs->value(QLatin1String(name), var)) -#define LOADENUM(var, name) var = static_cast(g.qs->value(QLatin1String(name), var).toInt()) - -void Settings::load() { - SAVELOAD(bMute, "audio/mute"); - SAVELOAD(bDeaf, "audio/deaf"); - LOADENUM(atTransmit, "audio/transmit"); - SAVELOAD(uiDoublePush, "audio/doublepush"); - SAVELOAD(bPushClick, "audio/pushclick"); - SAVELOAD(iQuality, "audio/quality"); - SAVELOAD(iMinLoudness, "audio/loudness"); - SAVELOAD(fVolume, "audio/volume"); - SAVELOAD(fOtherVolume, "audio/othervolume"); - LOADENUM(vsVAD, "audio/vadsource"); - SAVELOAD(fVADmin, "audio/vadmin"); - SAVELOAD(fVADmax, "audio/vadmax"); - SAVELOAD(iNoiseSuppress, "audio/noisesupress"); - SAVELOAD(iVoiceHold, "audio/voicehold"); - SAVELOAD(iOutputDelay, "audio/outputdelay"); - SAVELOAD(iIdleTime, "audio/idletime"); - SAVELOAD(fAudioMinDistance, "audio/mindistance"); - SAVELOAD(fAudioMaxDistance, "audio/maxdistance"); - SAVELOAD(fAudioMaxDistVolume, "audio/maxdistancevolume"); - SAVELOAD(fAudioBloom, "audio/bloom"); - SAVELOAD(bEcho, "audio/echo"); - SAVELOAD(bPositionalAudio, "audio/positional"); - SAVELOAD(bPositionalHeadphone, "audio/headphone"); - SAVELOAD(qsAudioInput, "audio/input"); - SAVELOAD(qsAudioOutput, "audio/output"); - - SAVELOAD(iJitterBufferSize, "net/jitterbuffer"); - SAVELOAD(iFramesPerPacket, "net/framesperpacket"); - - SAVELOAD(qsASIOclass, "asio/class"); - SAVELOAD(qlASIOmic, "asio/mic"); - SAVELOAD(qlASIOspeaker, "asio/speaker"); - - SAVELOAD(qsWASAPIInput, "wasapi/input"); - SAVELOAD(qsWASAPIOutput, "wasapi/output"); - - SAVELOAD(qsCoreAudioInput, "coreaudio/input"); - SAVELOAD(qsCoreAudioOutput, "coreaudio/output"); - - SAVELOAD(qsALSAInput, "alsa/input"); - SAVELOAD(qsALSAOutput, "alsa/output"); - - SAVELOAD(qsPulseAudioInput, "pulseaudio/input"); - SAVELOAD(qsPulseAudioOutput, "pulseaudio/output"); - - SAVELOAD(qsOSSInput, "oss/input"); - SAVELOAD(qsOSSOutput, "oss/output"); - - SAVELOAD(iPortAudioInput, "portaudio/input"); - SAVELOAD(iPortAudioOutput, "portaudio/output"); - - SAVELOAD(qbaDXInput, "directsound/input"); - SAVELOAD(qbaDXOutput, "directsound/output"); - - SAVELOAD(bTTS, "tts/enable"); - SAVELOAD(iTTSVolume, "tts/volume"); - SAVELOAD(iTTSThreshold, "tts/threshold"); - - SAVELOAD(bOverlayEnable, "overlay/enable"); - LOADENUM(osOverlay, "overlay/show"); - SAVELOAD(bOverlayUserTextures, "overlay/usertextures"); - SAVELOAD(bOverlayAlwaysSelf, "overlay/alwaysself"); - SAVELOAD(fOverlayX, "overlay/x"); - SAVELOAD(fOverlayY, "overlay/y"); - SAVELOAD(bTransmitPosition, "audio/postransmit"); - SAVELOAD(bOverlayTop, "overlay/top"); - SAVELOAD(bOverlayBottom, "overlay/bottom"); - SAVELOAD(bOverlayLeft, "overlay/left"); - SAVELOAD(bOverlayRight, "overlay/right"); - SAVELOAD(qfOverlayFont, "overlay/font"); - SAVELOAD(fOverlayHeight, "overlay/height"); - SAVELOAD(qcOverlayPlayer, "overlay/player"); - SAVELOAD(qcOverlayTalking, "overlay/talking"); - SAVELOAD(qcOverlayChannel, "overlay/channel"); - SAVELOAD(qcOverlayChannelTalking, "overlay/channeltalking"); - - // Network settings - SAVELOAD(bTCPCompat, "net/tcponly"); - SAVELOAD(bReconnect, "net/reconnect"); - LOADENUM(ptProxyType, "net/proxytype"); - SAVELOAD(qsProxyHost, "net/proxyhost"); - SAVELOAD(usProxyPort, "net/proxyport"); - SAVELOAD(qsProxyUsername, "net/proxyusername"); - SAVELOAD(qsProxyPassword, "net/proxypassword"); - - SAVELOAD(bExpert, "ui/expert"); - SAVELOAD(qsLanguage, "ui/language"); - SAVELOAD(qsStyle, "ui/style"); - SAVELOAD(qsSkin, "ui/skin"); - LOADENUM(ceExpand, "ui/expand"); - LOADENUM(ceChannelDrag, "ui/drag"); - SAVELOAD(bAlwaysOnTop, "ui/alwaysontop"); - SAVELOAD(bAskOnQuit, "ui/askonquit"); - SAVELOAD(bMinimalView, "ui/minimalview"); - SAVELOAD(bHideFrame, "ui/hideframe"); - SAVELOAD(bPlayerTop, "ui/playertop"); - SAVELOAD(bFirstTime, "ui/firsttime"); - SAVELOAD(qbaMainWindowGeometry, "ui/geometry"); - SAVELOAD(qbaMainWindowState, "ui/state"); - SAVELOAD(qbaMinimalViewGeometry, "ui/minimalviewgeometry"); - SAVELOAD(qbaConfigGeometry, "ui/ConfigGeometry"); - SAVELOAD(qbaSplitterState, "ui/splitter"); - SAVELOAD(qbaHeaderState, "ui/header"); - SAVELOAD(qsUsername, "ui/username"); - SAVELOAD(iServerRow, "ui/serverrow"); - SAVELOAD(bUpdateCheck, "ui/updatecheck"); - SAVELOAD(bHideTray, "ui/hidetray"); - SAVELOAD(bUsage, "ui/usage"); - - SAVELOAD(iLCDPlayerViewMinColWidth, "lcd/playerview/mincolwidth"); - SAVELOAD(iLCDPlayerViewSplitterWidth, "lcd/playerview/splitterwidth"); - - int nshorts = g.qs->beginReadArray(QLatin1String("shortcuts")); - for (int i=0;isetArrayIndex(i); - Shortcut s; - - s.iIndex = -2; - - SAVELOAD(s.iIndex, "index"); - SAVELOAD(s.qlButtons, "keys"); - SAVELOAD(s.bSuppress, "suppress"); - if (s.iIndex >= -1) - qlShortcuts << s; - } - g.qs->endArray(); - - g.qs->beginReadArray(QLatin1String("messages")); - for (QMap::const_iterator it = qmMessages.constBegin(); it != qmMessages.constEnd(); ++it) { - g.qs->setArrayIndex(it.key()); - SAVELOAD(qmMessages[it.key()], "log"); - } - g.qs->endArray(); - - g.qs->beginReadArray(QLatin1String("messagesounds")); - for (QMap::const_iterator it = qmMessageSounds.constBegin(); it != qmMessageSounds.constEnd(); ++it) { - g.qs->setArrayIndex(it.key()); - SAVELOAD(qmMessageSounds[it.key()], "logsound"); - } - g.qs->endArray(); - - g.qs->beginGroup(QLatin1String("lcd/devices")); - foreach(const QString &d, g.qs->childKeys()) { - qmLCDDevices.insert(d, g.qs->value(d, true).toBool()); - } - g.qs->endGroup(); -} - -#undef SAVELOAD -#define SAVELOAD(var,name) if (var != def.var) g.qs->setValue(QLatin1String(name), var); else g.qs->remove(QLatin1String(name)) - -void Settings::save() { - Settings def; - - SAVELOAD(bMute, "audio/mute"); - SAVELOAD(bDeaf, "audio/deaf"); - SAVELOAD(atTransmit, "audio/transmit"); - SAVELOAD(uiDoublePush, "audio/doublepush"); - SAVELOAD(bPushClick, "audio/pushclick"); - SAVELOAD(iQuality, "audio/quality"); - SAVELOAD(iMinLoudness, "audio/loudness"); - SAVELOAD(fVolume, "audio/volume"); - SAVELOAD(fOtherVolume, "audio/othervolume"); - SAVELOAD(vsVAD, "audio/vadsource"); - SAVELOAD(fVADmin, "audio/vadmin"); - SAVELOAD(fVADmax, "audio/vadmax"); - SAVELOAD(iNoiseSuppress, "audio/noisesupress"); - SAVELOAD(iVoiceHold, "audio/voicehold"); - SAVELOAD(iOutputDelay, "audio/outputdelay"); - SAVELOAD(iIdleTime, "audio/idletime"); - SAVELOAD(fAudioMinDistance, "audio/mindistance"); - SAVELOAD(fAudioMaxDistance, "audio/maxdistance"); - SAVELOAD(fAudioMaxDistVolume, "audio/maxdistancevolume"); - SAVELOAD(fAudioBloom, "audio/bloom"); - SAVELOAD(bEcho, "audio/echo"); - SAVELOAD(bPositionalAudio, "audio/positional"); - SAVELOAD(bPositionalHeadphone, "audio/headphone"); - SAVELOAD(qsAudioInput, "audio/input"); - SAVELOAD(qsAudioOutput, "audio/output"); - - SAVELOAD(iJitterBufferSize, "net/jitterbuffer"); - SAVELOAD(iFramesPerPacket, "net/framesperpacket"); - - SAVELOAD(qsASIOclass, "asio/class"); - SAVELOAD(qlASIOmic, "asio/mic"); - SAVELOAD(qlASIOspeaker, "asio/speaker"); - - SAVELOAD(qsWASAPIInput, "wasapi/input"); - SAVELOAD(qsWASAPIOutput, "wasapi/output"); - - SAVELOAD(qsCoreAudioInput, "coreaudio/input"); - SAVELOAD(qsCoreAudioOutput, "coreaudio/output"); - - SAVELOAD(qsALSAInput, "alsa/input"); - SAVELOAD(qsALSAOutput, "alsa/output"); - - SAVELOAD(qsPulseAudioInput, "pulseaudio/input"); - SAVELOAD(qsPulseAudioOutput, "pulseaudio/output"); - - SAVELOAD(qsOSSInput, "oss/input"); - SAVELOAD(qsOSSOutput, "oss/output"); - - SAVELOAD(iPortAudioInput, "portaudio/input"); - SAVELOAD(iPortAudioOutput, "portaudio/output"); - - SAVELOAD(qbaDXInput, "directsound/input"); - SAVELOAD(qbaDXOutput, "directsound/output"); - - SAVELOAD(bTTS, "tts/enable"); - SAVELOAD(iTTSVolume, "tts/volume"); - SAVELOAD(iTTSThreshold, "tts/threshold"); - - SAVELOAD(bOverlayEnable, "overlay/enable"); - SAVELOAD(osOverlay, "overlay/show"); - SAVELOAD(bOverlayUserTextures, "overlay/usertextures"); - SAVELOAD(bOverlayAlwaysSelf, "overlay/alwaysself"); - SAVELOAD(fOverlayX, "overlay/x"); - SAVELOAD(fOverlayY, "overlay/y"); - SAVELOAD(bTransmitPosition, "audio/postransmit"); - SAVELOAD(bOverlayTop, "overlay/top"); - SAVELOAD(bOverlayBottom, "overlay/bottom"); - SAVELOAD(bOverlayLeft, "overlay/left"); - SAVELOAD(bOverlayRight, "overlay/right"); - SAVELOAD(qfOverlayFont, "overlay/font"); - SAVELOAD(fOverlayHeight, "overlay/height"); - SAVELOAD(qcOverlayPlayer, "overlay/player"); - SAVELOAD(qcOverlayTalking, "overlay/talking"); - SAVELOAD(qcOverlayChannel, "overlay/channel"); - SAVELOAD(qcOverlayChannelTalking, "overlay/channeltalking"); - - // Network settings - SAVELOAD(bTCPCompat, "net/tcponly"); - SAVELOAD(bReconnect, "net/reconnect"); - SAVELOAD(ptProxyType, "net/proxytype"); - SAVELOAD(qsProxyHost, "net/proxyhost"); - SAVELOAD(usProxyPort, "net/proxyport"); - SAVELOAD(qsProxyUsername, "net/proxyusername"); - SAVELOAD(qsProxyPassword, "net/proxypassword"); - - SAVELOAD(bExpert, "ui/expert"); - SAVELOAD(qsLanguage, "ui/language"); - SAVELOAD(qsStyle, "ui/style"); - SAVELOAD(qsSkin, "ui/skin"); - SAVELOAD(ceExpand, "ui/expand"); - SAVELOAD(ceChannelDrag, "ui/drag"); - SAVELOAD(bAlwaysOnTop, "ui/alwaysontop"); - SAVELOAD(bAskOnQuit, "ui/askonquit"); - SAVELOAD(bMinimalView, "ui/minimalview"); - SAVELOAD(bHideFrame, "ui/hideframe"); - SAVELOAD(bPlayerTop, "ui/playertop"); - SAVELOAD(bFirstTime, "ui/firsttime"); - SAVELOAD(qbaMainWindowGeometry, "ui/geometry"); - SAVELOAD(qbaMainWindowState, "ui/state"); - SAVELOAD(qbaMinimalViewGeometry, "ui/minimalviewgeometry"); - SAVELOAD(qbaConfigGeometry, "ui/ConfigGeometry"); - SAVELOAD(qbaSplitterState, "ui/splitter"); - SAVELOAD(qbaHeaderState, "ui/header"); - SAVELOAD(qsUsername, "ui/username"); - SAVELOAD(iServerRow, "ui/serverrow"); -#ifndef NO_UPDATE_CHECK - SAVELOAD(bUpdateCheck, "ui/updatecheck"); -#endif - SAVELOAD(bHideTray, "ui/hidetray"); - SAVELOAD(bUsage, "ui/usage"); - - SAVELOAD(iLCDPlayerViewMinColWidth, "lcd/playerview/mincolwidth"); - SAVELOAD(iLCDPlayerViewSplitterWidth, "lcd/playerview/splitterwidth"); - - g.qs->beginWriteArray(QLatin1String("shortcuts")); - int idx = 0; - foreach(const Shortcut &s, qlShortcuts) { - g.qs->setArrayIndex(idx++); - g.qs->setValue(QLatin1String("index"), s.iIndex); - g.qs->setValue(QLatin1String("keys"), s.qlButtons); - g.qs->setValue(QLatin1String("suppress"), s.bSuppress); - } - g.qs->endArray(); - - g.qs->beginWriteArray(QLatin1String("messages")); - for (QMap::const_iterator it = qmMessages.constBegin(); it != qmMessages.constEnd(); ++it) { - g.qs->setArrayIndex(it.key()); - SAVELOAD(qmMessages[it.key()], "log"); - } - g.qs->endArray(); - - g.qs->beginWriteArray(QLatin1String("messagesounds")); - for (QMap::const_iterator it = qmMessageSounds.constBegin(); it != qmMessageSounds.constEnd(); ++it) { - g.qs->setArrayIndex(it.key()); - SAVELOAD(qmMessageSounds[it.key()], "logsound"); - } - g.qs->endArray(); - - g.qs->beginGroup(QLatin1String("lcd/devices")); - foreach(const QString &d, qmLCDDevices.keys()) { - bool v = qmLCDDevices.value(d); - if (!v) - g.qs->setValue(d, v); - else - g.qs->remove(d); - } - g.qs->endGroup(); -} diff -Nru mumble-1.2.3/src/mumble11x/Settings.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Settings.h --- mumble-1.2.3/src/mumble11x/Settings.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Settings.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,169 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _SETTINGS_H -#define _SETTINGS_H - -#include "mumble_pch.hpp" - -// Global helper class to spread variables around across threads -// especially helpfull to initialize things like the stored -// preference for audio transmission, since the GUI elements -// will be created long before the AudioInput object, and the -// latter lives in a separate thread and so cannot touch the -// GUI. - -struct Shortcut { - int iIndex; - QList qlButtons; - bool bSuppress; - bool operator <(const Shortcut &) const; -}; - -struct Settings { - enum AudioTransmit { Continous, VAD, PushToTalk }; - enum VADSource { Amplitude, SignalToNoise }; - enum LoopMode { None, Local, Server }; - enum OverlayShow { Nothing, Talking, All }; - enum ChannelExpand { NoChannels, ChannelsWithPlayers, AllChannels }; - enum ChannelDrag { Ask, DoNothing, Move }; - AudioTransmit atTransmit; - quint64 uiDoublePush; - - bool bExpert; - - bool bTransmitPosition; - bool bPushClick; - bool bMute, bDeaf; - bool bTTS; - bool bPlayerTop; - int iTTSVolume, iTTSThreshold; - int iQuality, iMinLoudness, iVoiceHold, iJitterBufferSize; - int iNoiseSuppress; - unsigned int iIdleTime; - VADSource vsVAD; - float fVADmin, fVADmax; - int iFramesPerPacket; - QString qsAudioInput, qsAudioOutput; - float fVolume; - float fOtherVolume; - bool bAttenuateOthersOnTalk; - bool bAttenuateOthers; - int iOutputDelay; - bool bExclusiveInput, bExclusiveOutput; - - QString qsALSAInput, qsALSAOutput; - QString qsPulseAudioInput, qsPulseAudioOutput; - QString qsOSSInput, qsOSSOutput; - int iPortAudioInput, iPortAudioOutput; - QString qsASIOclass; - QList qlASIOmic; - QList qlASIOspeaker; - QString qsCoreAudioInput, qsCoreAudioOutput; - QString qsWASAPIInput, qsWASAPIOutput; - - QByteArray qbaDXInput, qbaDXOutput; - - bool bEcho; - bool bPositionalAudio; - bool bPositionalHeadphone; - float fAudioMinDistance, fAudioMaxDistance, fAudioMaxDistVolume, fAudioBloom; - - bool bOverlayEnable; - bool bOverlayUserTextures; - OverlayShow osOverlay; - bool bOverlayAlwaysSelf; - float fOverlayX; - float fOverlayY; - bool bOverlayLeft, bOverlayRight, bOverlayTop, bOverlayBottom; - QFont qfOverlayFont; - float fOverlayHeight; - QColor qcOverlayPlayer; - QColor qcOverlayTalking; - QColor qcOverlayAltTalking; - QColor qcOverlayChannel; - QColor qcOverlayChannelTalking; - - int iLCDPlayerViewMinColWidth; - int iLCDPlayerViewSplitterWidth; - QMap qmLCDDevices; - - QList qlShortcuts; - - enum MessageLog { LogConsole = 0x01, LogTTS = 0x02, LogBalloon = 0x04, LogSoundfile = 0x08}; - QMap qmMessageSounds; - QMap qmMessages; - - QString qsLanguage; - QString qsStyle; - QString qsSkin; - bool bFirstTime; - QByteArray qbaMainWindowGeometry, qbaMainWindowState, qbaMinimalViewGeometry, qbaSplitterState, qbaHeaderState; - QByteArray qbaConfigGeometry; - ChannelExpand ceExpand; - ChannelDrag ceChannelDrag; - bool bMinimalView; - bool bHideFrame; - bool bAlwaysOnTop; - bool bAskOnQuit; - bool bHideTray; - bool bUsage; - - QString qsUsername; - int iServerRow; - - bool bUpdateCheck; - - // Network settings - enum ProxyType { NoProxy, HttpProxy, Socks5Proxy }; - bool bTCPCompat, bReconnect; - ProxyType ptProxyType; - QString qsProxyHost, qsProxyUsername, qsProxyPassword; - unsigned short usProxyPort; - - // Accessibility - bool bHighContrast; - - // Nonsaved - LoopMode lmLoopMode; - float dPacketLoss; - float dMaxPacketDelay; - - bool doEcho() const; - bool doPositionalAudio() const; - - Settings(); - void load(); - void save(); -}; - -#else -struct Settings; -#endif diff -Nru mumble-1.2.3/src/mumble11x/smallft.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/smallft.cpp --- mumble-1.2.3/src/mumble11x/smallft.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/smallft.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,1261 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - -Copyright (c) 2002-2007 Xiph.org Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -- Neither the name of the Xiph.org Foundation nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -`AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ********************************************************************/ - -#include "mumble_pch.hpp" -#include "smallft.h" - -static void drfti1(int n, float *wa, int *ifac) { - static int ntryh[4] = { 4,2,3,5 }; - static float tpi = 6.28318530717958648f; - float arg,argh,argld,fi; - int ntry=0,i,j=-1; - int k1, l1, l2, ib; - int ld, ii, ip, is, nq, nr; - int ido, ipm, nfm1; - int nl=n; - int nf=0; - -L101: - j++; - if (j < 4) - ntry=ntryh[j]; - else - ntry+=2; - -L104: - nq=nl/ntry; - nr=nl-ntry*nq; - if (nr!=0) goto L101; - - nf++; - ifac[nf+1]=ntry; - nl=nq; - if (ntry!=2)goto L107; - if (nf==1)goto L107; - - for (i=1;i(n); - is=0; - nfm1=nf-1; - l1=1; - - if (nfm1==0)return; - - for (k1=0;k1(ld)*argh; - fi=0.f; - for (ii=2;ii(ip); - dcp=cosf(arg); - dsp=sinf(arg); - ipph=(ip+1)>>1; - ipp2=ip; - idp2=ido; - nbd=(ido-1)>>1; - t0=l1*ido; - t10=ip*ido; - - if (ido==1)goto L119; - for (ik=0;ikl1) { - for (j=1;j(ip); - dcp=cosf(arg); - dsp=sinf(arg); - nbd=(ido-1)>>1; - ipp2=ip; - ipph=(ip+1)>>1; - if (idol1)goto L139; - - is= -ido-1; - t1=0; - for (j=1;jn==1)return; - drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); -} - -void mumble_drft_backward(drft_lookup *l,float *data) { - if (l->n==1)return; - drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache); -} - -void mumble_drft_init(drft_lookup *l,int n) { - l->n=n; - l->trigcache=reinterpret_cast(calloc(3*n,sizeof(*l->trigcache))); - l->splitcache=reinterpret_cast(calloc(32,sizeof(*l->splitcache))); - fdrffti(n, l->trigcache, l->splitcache); -} - -void mumble_drft_clear(drft_lookup *l) { - if (l) { - free(l->trigcache); - free(l->splitcache); - memset(l,0,sizeof(*l)); - } -} diff -Nru mumble-1.2.3/src/mumble11x/smallft.h mumble-1.2.3-87-gf7d8711/src/mumble11x/smallft.h --- mumble-1.2.3/src/mumble11x/smallft.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/smallft.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -/******************************************************************** - * * - * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * - * * - * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * - * by the Xiph.Org Foundation http://www.xiph.org/ * - * * - ******************************************************************** - -Copyright (c) 2002-2007 Xiph.org Foundation - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -- Neither the name of the Xiph.org Foundation nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -`AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - ********************************************************************/ - -#ifndef _MUMBLE_SMFT_H_ -#define _MUMBLE_SMFT_H_ - -typedef struct { - int n; - float *trigcache; - int *splitcache; -} drft_lookup; - - -extern void mumble_drft_forward(drft_lookup *l,float *data); -extern void mumble_drft_backward(drft_lookup *l,float *data); -extern void mumble_drft_init(drft_lookup *l,int n); -extern void mumble_drft_clear(drft_lookup *l); - -#endif diff -Nru mumble-1.2.3/src/mumble11x/SocketRPC.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/SocketRPC.cpp --- mumble-1.2.3/src/mumble11x/SocketRPC.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/SocketRPC.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,293 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "SocketRPC.h" -#include "Global.h" -#include "MainWindow.h" -#include "ServerHandler.h" -#include "Channel.h" -#ifdef COMPAT_CLIENT -#include "Player.h" -#else -#include "ClientUser.h" -#endif - -SocketRPCClient::SocketRPCClient(QLocalSocket *s, QObject *p) : QObject(p), qlsSocket(s), qbBuffer(NULL) { - qlsSocket->setParent(this); - - connect(qlsSocket, SIGNAL(disconnected()), this, SLOT(disconnected())); - connect(qlsSocket, SIGNAL(error(QLocalSocket::LocalSocketError)), this, SLOT(error(QLocalSocket::LocalSocketError))); - connect(qlsSocket, SIGNAL(readyRead()), this, SLOT(readyRead())); - - qxsrReader.setDevice(qlsSocket); - qxswWriter.setAutoFormatting(true); - - qbBuffer = new QBuffer(&qbaOutput, this); - qbBuffer->open(QIODevice::WriteOnly); - qxswWriter.setDevice(qbBuffer); -} - -void SocketRPCClient::disconnected() { - deleteLater(); -} - -void SocketRPCClient::error(QLocalSocket::LocalSocketError) { -} - -void SocketRPCClient::readyRead() { - forever { - switch (qxsrReader.readNext()) { - case QXmlStreamReader::Invalid: { - if (qxsrReader.error() != QXmlStreamReader::PrematureEndOfDocumentError) { - qWarning() << "Malformed" << qxsrReader.error(); - qlsSocket->abort(); - } - return; - } - break; - case QXmlStreamReader::EndDocument: { - qxswWriter.writeCurrentToken(qxsrReader); - - processXml(); - - qxsrReader.clear(); - qxsrReader.setDevice(qlsSocket); - - qxswWriter.setDevice(NULL); - delete qbBuffer; - qbaOutput = QByteArray(); - qbBuffer = new QBuffer(&qbaOutput, this); - qbBuffer->open(QIODevice::WriteOnly); - qxswWriter.setDevice(qbBuffer); - } - break; - default: - qxswWriter.writeCurrentToken(qxsrReader); - break; - } - } -} - -void SocketRPCClient::processXml() { - QDomDocument qdd; - qdd.setContent(qbaOutput, false); - - QDomElement request = qdd.firstChildElement(); - - if (! request.isNull()) { - bool ack = false; - QMap qmRequest; - QMap qmReply; - QMap::const_iterator iter; - - QDomNamedNodeMap attributes = request.attributes(); - for (int i=0;ishow(); - g.mw->raise(); - g.mw->activateWindow(); - - ack = true; - } else if (request.nodeName() == QLatin1String("self")) { - iter = qmRequest.find(QLatin1String("mute")); - if (iter != qmRequest.constEnd()) { - bool set = iter.value().toBool(); - if (set != g.s.bMute) { - g.mw->qaAudioMute->setChecked(! set); - g.mw->qaAudioMute->trigger(); - } - } - iter = qmRequest.find(QLatin1String("deaf")); - if (iter != qmRequest.constEnd()) { - bool set = iter.value().toBool(); - if (set != g.s.bDeaf) { - g.mw->qaAudioDeaf->setChecked(! set); - g.mw->qaAudioDeaf->trigger(); - } - } - - ack = true; - } else if (request.nodeName() == QLatin1String("url")) { - if (g.sh && g.sh->isRunning() && g.uiSession) { - QString host, user, pw; - unsigned short port; - QUrl u; - - g.sh->getConnectionInfo(host, port, user, pw); - u.setScheme(QLatin1String("mumble")); - u.setHost(host); - u.setPort(port); - u.setUserName(user); - u.addQueryItem(QLatin1String("version"), QLatin1String("1.2.0")); - QStringList path; -#ifdef COMPAT_CLIENT - Channel *c = ClientPlayer::get(g.uiSession)->cChannel; -#else - Channel *c = ClientUser::get(g.uiSession)->cChannel; -#endif - while (c->cParent) { - path.prepend(c->qsName); - c = c->cParent; - } - u.setPath(path.join(QLatin1String("/"))); - qmReply.insert(QLatin1String("href"), u); - } - - iter = qmRequest.find(QLatin1String("href")); - if (iter != qmRequest.constEnd()) { - QUrl u = iter.value().toUrl(); - if (u.isValid() && u.scheme() == QLatin1String("mumble")) { -#ifdef COMPAT_CLIENT - if (u.userName().isEmpty()) - u.setUserName(QLatin1String("Unknown")); - g.mw->openUrl(u); -#else - OpenURLEvent *oue = new OpenURLEvent(u); - qApp->postEvent(g.mw, oue); -#endif - ack = true; - } - } else { - ack = true; - } - } - - QDomDocument replydoc; - QDomElement reply = replydoc.createElement(QLatin1String("reply")); - - qmReply.insert(QLatin1String("succeeded"), ack); - - for (iter = qmReply.constBegin(); iter != qmReply.constEnd(); ++iter) { - QDomElement elem = replydoc.createElement(iter.key()); - QDomText text = replydoc.createTextNode(iter.value().toString()); - elem.appendChild(text); - reply.appendChild(elem); - } - - replydoc.appendChild(reply); - - qlsSocket->write(replydoc.toByteArray()); - } -} - -SocketRPC::SocketRPC(const QString &basename, QObject *p) : QObject(p) { - qlsServer = new QLocalServer(this); - - QString pipepath; - -#ifdef Q_OS_WIN - pipepath = basename; -#else - pipepath = QDir::home().absoluteFilePath(QLatin1String(".") + basename + QLatin1String("Socket")); - { - QFile f(pipepath); - if (f.exists()) { - qWarning() << "SocketRPC: Removing old socket on" << pipepath; - f.remove(); - } - } -#endif - - if (! qlsServer->listen(pipepath)) { - qWarning() << "SocketRPC: Listen failed"; - delete qlsServer; - qlsServer = NULL; - } else { - connect(qlsServer, SIGNAL(newConnection()), this, SLOT(newConnection())); - } -} - -void SocketRPC::newConnection() { - while (1) { - QLocalSocket *qls = qlsServer->nextPendingConnection(); - if (! qls) - break; - new SocketRPCClient(qls, this); - } -} - -bool SocketRPC::send(const QString &basename, const QString &request, const QMap ¶m) { - QString pipepath; - -#ifdef Q_OS_WIN - pipepath = basename; -#else - pipepath = QDir::home().absoluteFilePath(QLatin1String(".") + basename + QLatin1String("Socket")); -#endif - - QLocalSocket qls; - qls.connectToServer(pipepath); - if (! qls.waitForConnected(1000)) { - return false; - } - - QDomDocument requestdoc; - QDomElement req = requestdoc.createElement(request); - for (QMap::const_iterator iter = param.constBegin(); iter != param.constEnd(); ++iter) { - QDomElement elem = requestdoc.createElement(iter.key()); - QDomText text = requestdoc.createTextNode(iter.value().toString()); - elem.appendChild(text); - req.appendChild(elem); - } - requestdoc.appendChild(req); - - qls.write(requestdoc.toByteArray()); - qls.flush(); - - if (! qls.waitForReadyRead(2000)) { - return false; - } - - QByteArray qba = qls.readAll(); - - QDomDocument replydoc; - replydoc.setContent(qba); - - QDomElement succ = replydoc.firstChildElement(QLatin1String("reply")); - succ = succ.firstChildElement(QLatin1String("succeeded")); - if (succ.isNull()) - return false; - - return QVariant(succ.text()).toBool(); -} diff -Nru mumble-1.2.3/src/mumble11x/SocketRPC.h mumble-1.2.3-87-gf7d8711/src/mumble11x/SocketRPC.h --- mumble-1.2.3/src/mumble11x/SocketRPC.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/SocketRPC.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _SOCKETRPC_H -#define _SOCKETRPC_H - -#include "mumble_pch.hpp" - -class SocketRPCClient : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(SocketRPCClient) - protected: - QLocalSocket *qlsSocket; - QXmlStreamReader qxsrReader; - QXmlStreamWriter qxswWriter; - QBuffer *qbBuffer; - QByteArray qbaOutput; - - void processXml(); - public: - SocketRPCClient(QLocalSocket *s, QObject *p = NULL); - public slots: - void disconnected(); - void error(QLocalSocket::LocalSocketError); - void readyRead(); -}; - -class SocketRPC : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(SocketRPC) - protected: - QLocalServer *qlsServer; - public: - typedef QMap ParameterMap; - SocketRPC(const QString &basename, QObject *p = NULL); - static bool send(const QString &basename, const QString &request, const ParameterMap ¶m = ParameterMap()); - public slots: - void newConnection(); -}; - -#else -class SocketRPC; -#endif diff -Nru mumble-1.2.3/src/mumble11x/TextMessage.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/TextMessage.cpp --- mumble-1.2.3/src/mumble11x/TextMessage.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextMessage.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "TextMessage.h" - -TextMessage::TextMessage(QWidget *p) : QDialog(p) { - setupUi(this); - qtbPreview->document()->setDefaultStyleSheet(qApp->styleSheet()); - qteEdit->installEventFilter(this); - qteEdit->setFocus(); -} - -void TextMessage::on_qcbRawMessage_stateChanged(int) { - on_qteEdit_textChanged(); -} - -QString TextMessage::autoFormat(QString qsPlain) { - QRegExp qr; - qr.setMinimal(true); - qr.setPatternSyntax(QRegExp::RegExp2); - qr.setCaseSensitivity(Qt::CaseInsensitive); - - qr.setPattern(QLatin1String("[\\r\\n]+")); - qsPlain.replace(qr, QLatin1String("
    ")); - - qr.setPattern(QLatin1String("\\*(\\w+)\\*")); - qsPlain.replace(qr, QLatin1String("\\1")); - - qr.setPattern(QLatin1String("\"([^\"]+)\"")); - qsPlain.replace(qr, QLatin1String("\"\\1\"")); - - qr.setPattern(QLatin1String("[a-z]+://[^ <$]*")); - qr.setMinimal(false); - - int idx = 0; - do { - idx = qr.indexIn(qsPlain, idx); - if (idx >= 0) { - QString url = qr.capturedTexts().at(0); - QUrl u(url); - if (u.isValid()) { - int len = qr.matchedLength(); - QString replacement = QString::fromLatin1("%1").arg(url); - qsPlain.replace(idx, len, replacement); - idx += replacement.length(); - } else { - idx++; - } - } - } while (idx >= 0); - return qsPlain; -} -void TextMessage::on_qteEdit_textChanged() { - qsRep = qteEdit->toPlainText(); - - if (qcbRawMessage->isChecked()) { - qsRep = Qt::convertFromPlainText(qsRep); - } - - if (! Qt::mightBeRichText(qsRep) && !qcbRawMessage->isChecked()) { - qsRep = autoFormat(qsRep); - } - - qtbPreview->setHtml(qsRep); -} - -QString TextMessage::message() { - return qsRep; -} - -bool TextMessage::eventFilter(QObject *obj, QEvent *evt) { - if (obj != qteEdit) - return false; - if (evt->type() == QEvent::KeyPress) { - QKeyEvent *keyEvent = static_cast(evt); - if (((keyEvent->key() == Qt::Key_Enter) || (keyEvent->key() == Qt::Key_Return)) && - (keyEvent->modifiers() == Qt::NoModifier)) { - accept(); - return true; - } - } - return false; -} - diff -Nru mumble-1.2.3/src/mumble11x/TextMessage.h mumble-1.2.3-87-gf7d8711/src/mumble11x/TextMessage.h --- mumble-1.2.3/src/mumble11x/TextMessage.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextMessage.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,53 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _TEXTMESSAGE_H -#define _TEXTMESSAGE_H - -#include "mumble_pch.hpp" -#include "ui_TextMessage.h" - -class TextMessage : public QDialog, public Ui::TextMessage { - private: - Q_OBJECT - Q_DISABLE_COPY(TextMessage) - protected: - QString qsRep; - public: - TextMessage(QWidget *parent = NULL); - QString message(); - bool eventFilter(QObject *obj, QEvent *event); - static QString autoFormat(QString qsPlain); - public slots: - void on_qteEdit_textChanged(); - void on_qcbRawMessage_stateChanged(int); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/TextMessage.ui mumble-1.2.3-87-gf7d8711/src/mumble11x/TextMessage.ui --- mumble-1.2.3/src/mumble11x/TextMessage.ui 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextMessage.ui 1970-01-01 00:00:00.000000000 +0000 @@ -1,123 +0,0 @@ - - - TextMessage - - - - 0 - 0 - 397 - 297 - - - - - - - Disables html formatting - - - Disable text formatting - - - - - - - - 0 - 2 - - - - Message to send - - - - - - - - - - - - - 0 - 1 - - - - Preview - - - - - - This field reflects how the message will look like in the chat. - - - <b>Preview</b><br />This field takes the raw string entered above and renders it like it will look like in the log. For example &lt;b&gt;Test&lt;/b&gt; will display as: <b>Test<b>. - - - QFrame::NoFrame - - - QFrame::Plain - - - false - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - qbbButtons - accepted() - TextMessage - accept() - - - 257 - 287 - - - 157 - 274 - - - - - qbbButtons - rejected() - TextMessage - reject() - - - 325 - 287 - - - 286 - 274 - - - - - diff -Nru mumble-1.2.3/src/mumble11x/TextToSpeech.h mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech.h --- mumble-1.2.3/src/mumble11x/TextToSpeech.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _TEXTTOSPEECH_H -#define _TEXTTOSPEECH_H - -#include "mumble_pch.hpp" - -class TextToSpeechPrivate; - -class TextToSpeech : public QObject { - friend class TextToSpeechPrivate; - private: - Q_OBJECT - Q_DISABLE_COPY(TextToSpeech) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) - protected: - bool enabled; - public: - TextToSpeech(QObject *parent = NULL); - ~TextToSpeech(); - bool isEnabled() const; - public slots: - void say(const QString &text); - void setEnabled(bool ena); - void setVolume(int volume); - private: - TextToSpeechPrivate *d; -}; - -#else -class TextToSpeech; -#endif diff -Nru mumble-1.2.3/src/mumble11x/TextToSpeech_macx.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech_macx.cpp --- mumble-1.2.3/src/mumble11x/TextToSpeech_macx.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech_macx.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,142 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2007, Sebastian Schlingmann - Copyright (C) 2008-2009, Mikkel Krautz - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "Global.h" -#include "TextToSpeech.h" - -class TextToSpeechPrivate { - public: - SpeechChannel scChannel; - QMutex qmLock; - Fixed fVolume; - QList qlMessages; - bool bRunning; - - TextToSpeechPrivate(); - void ProcessSpeech(); - void say(const QString &text); - void setVolume(int v); -}; - -static void speech_done_cb(SpeechChannel scChannel, void *udata) { - TextToSpeechPrivate *tts = reinterpret_cast(udata); - - Q_ASSERT(scChannel == tts->scChannel); - - DisposeSpeechChannel(tts->scChannel); - - if (tts->qlMessages.isEmpty()) - tts->bRunning = false; - else - tts->ProcessSpeech(); -} - -TextToSpeechPrivate::TextToSpeechPrivate() { - bRunning = false; -} - -void TextToSpeechPrivate::ProcessSpeech() { - QByteArray ba; - - qmLock.lock(); - ba = qlMessages.takeFirst(); - qmLock.unlock(); - - NewSpeechChannel(NULL, &scChannel); - SetSpeechInfo(scChannel, soVolume, &fVolume); - SetSpeechInfo(scChannel, soRefCon, this); - SetSpeechInfo(scChannel, soSpeechDoneCallBack, reinterpret_cast(speech_done_cb)); - SpeakText(scChannel, ba.constData(), ba.size()); -} - -void TextToSpeechPrivate::say(const QString &text) { - QTextCodec *codec = QTextCodec::codecForName("Apple Roman"); - Q_ASSERT(codec != NULL); - - qmLock.lock(); - qlMessages.append(codec->fromUnicode(text)); - qmLock.unlock(); - - if (!bRunning) { - ProcessSpeech(); - bRunning = true; - } -} - -void TextToSpeechPrivate::setVolume(int volume) { - fVolume = FixRatio(volume, 100); -} - -TextToSpeech::TextToSpeech(QObject *) { - enabled = true; - d = NULL; - - /* Determine which release of OS X we're running on. Tiger has a buggy implementation, and - * therefore we'll just disable ourselves when we're running on that. - * - * What it comes down to, is that calling DisposeSpeechChannel() on Tiger will crash in certain - * situations. - * - * For more information, see this thread on Apple's speech mailing list: - * http://lists.apple.com/archives/speech-dev/2005/Aug/msg00000.html - */ - - int version = qMacVersion(); - if (version != QSysInfo::MV_Unknown && version < QSysInfo::MV_LEOPARD) { - qWarning("Mac OS X 10.4 (Tiger) detected. Disabling Text-to-Speech because of a buggy implementation in 10.4."); - return; - } - - d = new TextToSpeechPrivate(); -} - -TextToSpeech::~TextToSpeech() { - delete d; -} - -void TextToSpeech::say(const QString &text) { - if (d && enabled) - d->say(text); -} - -void TextToSpeech::setEnabled(bool e) { - enabled = e; -} - -void TextToSpeech::setVolume(int volume) { - if (d && enabled) - d->setVolume(volume); -} - -bool TextToSpeech::isEnabled() const { - return enabled; -} diff -Nru mumble-1.2.3/src/mumble11x/TextToSpeech_unix.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech_unix.cpp --- mumble-1.2.3/src/mumble11x/TextToSpeech_unix.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech_unix.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,119 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "TextToSpeech.h" -#include "Global.h" -#ifdef USE_SPEECHD -#include -#endif - -class TextToSpeechPrivate { -#ifdef USE_SPEECHD - protected: - SPDConnection *spd; -#endif - public: - TextToSpeechPrivate(); - ~TextToSpeechPrivate(); - void say(const QString &text); - void setVolume(int v); -}; - -#ifdef USE_SPEECHD -TextToSpeechPrivate::TextToSpeechPrivate() { - spd = spd_open("Mumble", NULL, NULL, SPD_MODE_THREADED); - if (! spd) { - qWarning("TextToSpeech: Failed to contact speech dispatcher."); - } else { - if (spd_set_punctuation(spd, SPD_PUNCT_NONE) != 0) - qWarning("TextToSpech: Failed to set punctuation mode."); - if (spd_set_spelling(spd, SPD_SPELL_ON) != 0) - qWarning("TextToSpeech: Failed to set spelling mode."); - } -} - -TextToSpeechPrivate::~TextToSpeechPrivate() { - if (spd) { - spd_close(spd); - spd = NULL; - } -} - -void TextToSpeechPrivate::say(const QString &txt) { - if (spd) - spd_say(spd, SPD_MESSAGE, txt.toUtf8()); -} - -void TextToSpeechPrivate::setVolume(int vol) { - if (spd) - spd_set_volume(spd, vol * 2 - 100); -} -#else -TextToSpeechPrivate::TextToSpeechPrivate() { - qWarning("TextToSpeech: Compiled without support for speech-dispatcher"); -} - -TextToSpeechPrivate::~TextToSpeechPrivate() { -} - -void TextToSpeechPrivate::say(const QString &) { -} - -void TextToSpeechPrivate::setVolume(int) { -} -#endif - - -TextToSpeech::TextToSpeech(QObject *p) : QObject(p) { - enabled = true; - d = new TextToSpeechPrivate(); -} - -TextToSpeech::~TextToSpeech() { - delete d; -} - -void TextToSpeech::say(const QString &text) { - if (enabled) - d->say(text); -} - -void TextToSpeech::setEnabled(bool e) { - enabled = e; -} - -void TextToSpeech::setVolume(int volume) { - d->setVolume(volume); -} - - -bool TextToSpeech::isEnabled() const { - return enabled; -} diff -Nru mumble-1.2.3/src/mumble11x/TextToSpeech_win.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech_win.cpp --- mumble-1.2.3/src/mumble11x/TextToSpeech_win.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/TextToSpeech_win.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,96 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include - -#include "TextToSpeech.h" - -#undef FAILED -#define FAILED(Status) (static_cast(Status)<0) - -class TextToSpeechPrivate { - public: - ISpVoice * pVoice; - TextToSpeechPrivate(); - ~TextToSpeechPrivate(); - void say(const QString &text); - void setVolume(int v); -}; - -TextToSpeechPrivate::TextToSpeechPrivate() { - pVoice = NULL; - - HRESULT hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void **)&pVoice); - if (FAILED(hr)) - qWarning("TextToSpeechPrivate: Failed to allocate TTS Voice"); -} - -TextToSpeechPrivate::~TextToSpeechPrivate() { - if (pVoice) - pVoice->Release(); -} - -void TextToSpeechPrivate::say(const QString &text) { - if (pVoice) { - pVoice->Speak((const wchar_t *) text.utf16(), SPF_ASYNC, NULL); - } -} - -void TextToSpeechPrivate::setVolume(int volume) { - if (pVoice) - pVoice->SetVolume(volume); -} - -TextToSpeech::TextToSpeech(QObject *p) : QObject(p) { - enabled = true; - d = new TextToSpeechPrivate(); -} - -TextToSpeech::~TextToSpeech() { - delete d; -} - -void TextToSpeech::say(const QString &text) { - if (enabled) - d->say(text); -} - -void TextToSpeech::setEnabled(bool e) { - enabled = e; -} - -void TextToSpeech::setVolume(int volume) { - d->setVolume(volume); -} - -bool TextToSpeech::isEnabled() const { - return enabled; -} diff -Nru mumble-1.2.3/src/mumble11x/Usage.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/Usage.cpp --- mumble-1.2.3/src/mumble11x/Usage.cpp 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Usage.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include - -#include "Usage.h" -#include "Version.h" -#include "Global.h" -#include "OSInfo.h" -#include "LCD.h" - -Usage::Usage(QObject *p) : QObject(p) { - // Wait 10 minutes (so we know they're actually using this), then... - QTimer::singleShot(60 * 10 * 1000, this, SLOT(registerUsage())); -} - -void Usage::registerUsage() { - if (! g.s.bUsage || g.s.bFirstTime) - return; - - QDomDocument doc; - QDomElement root=doc.createElement(QLatin1String("usage")); - doc.appendChild(root); - - QDomElement tag; - QDomText t; - - OSInfo::fillXml(doc, root); - - tag=doc.createElement(QLatin1String("in")); - root.appendChild(tag); - t=doc.createTextNode(g.s.qsAudioInput); - tag.appendChild(t); - - tag=doc.createElement(QLatin1String("out")); - root.appendChild(tag); - t=doc.createTextNode(g.s.qsAudioOutput); - tag.appendChild(t); - - tag=doc.createElement(QLatin1String("lcd")); - root.appendChild(tag); - t=doc.createTextNode(QString::number(g.lcd->hasDevices() ? 1 : 0)); - tag.appendChild(t); - - QBuffer *qb = new QBuffer(); - qb->setData(doc.toString().toUtf8()); - qb->open(QIODevice::ReadOnly); - - QNetworkRequest req(QUrl(QLatin1String("http://mumble.info/usage.cgi"))); - req.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml")); - - QNetworkReply *rep = g.nam->post(req, qb); - qb->setParent(rep); - - connect(rep, SIGNAL(finished()), rep, SLOT(deleteLater())); -} diff -Nru mumble-1.2.3/src/mumble11x/Usage.h mumble-1.2.3-87-gf7d8711/src/mumble11x/Usage.h --- mumble-1.2.3/src/mumble11x/Usage.h 2011-02-19 21:35:18.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/Usage.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _USAGE_H -#define _USAGE_H - -#include "mumble_pch.hpp" - -class Usage : public QObject { - Q_OBJECT - public: - Usage(QObject *p = NULL); - public slots: - void registerUsage(); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/VersionCheck.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/VersionCheck.cpp --- mumble-1.2.3/src/mumble11x/VersionCheck.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/VersionCheck.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,195 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "VersionCheck.h" -#include "Global.h" -#include "MainWindow.h" -#include "NetworkConfig.h" - -VersionCheck::VersionCheck(bool autocheck, QObject *p, bool focus) : QObject(p) { - bSilent = autocheck; - - QUrl url; - url.setScheme(QLatin1String("http")); - url.setHost(g.qsRegionalHost); - url.setPath(focus ? QLatin1String("/focus.php") : QLatin1String("/ver.php")); - - url.addQueryItem(QLatin1String("ver"), QLatin1String(QUrl::toPercentEncoding(QLatin1String(MUMBLE_RELEASE)))); - url.addQueryItem(QLatin1String("date"), QLatin1String(QUrl::toPercentEncoding(QLatin1String(__DATE__)))); - url.addQueryItem(QLatin1String("time"), QLatin1String(QUrl::toPercentEncoding(QLatin1String(__TIME__)))); -#if defined(Q_OS_WIN) - url.addQueryItem(QLatin1String("os"), QLatin1String("Win32")); -#elif defined(Q_OS_MAC) - url.addQueryItem(QLatin1String("os"), QLatin1String("MacOSX")); -#else - url.addQueryItem(QLatin1String("os"), QLatin1String("Unix")); -#endif - if (! g.s.bUsage) - url.addQueryItem(QLatin1String("nousage"), QLatin1String("1")); - if (autocheck) - url.addQueryItem(QLatin1String("auto"), QLatin1String("1")); - - url.addQueryItem(QLatin1String("locale"), g.s.qsLanguage.isEmpty() ? QLocale::system().name() : g.s.qsLanguage); - - QFile f(qApp->applicationFilePath()); - if (! f.open(QIODevice::ReadOnly)) { - qWarning("VersionCheck: Failed to open binary"); - } else { - QByteArray a = f.readAll(); - if (a.size() < 1) { - qWarning("VersionCheck: suspiciously small binary"); - } else { - QCryptographicHash qch(QCryptographicHash::Sha1); - qch.addData(a); - url.addQueryItem(QLatin1String("sha1"), QLatin1String(qch.result().toHex())); - } - } - - QNetworkReply *rep = Network::get(url); - connect(rep, SIGNAL(finished()), this, SLOT(finished())); -} - -void VersionCheck::finished() { - QNetworkReply *rep = qobject_cast(sender()); - QUrl url = rep->request().url(); - - if (rep->error() == QNetworkReply::NoError) { - const QByteArray &a=rep->readAll(); - if (! a.isEmpty()) { -#if defined(SNAPSHOT_BUILD) && ! defined(COMPAT_CLIENT) - if (url.path() == QLatin1String("/focus.php")) { - g.mw->msgBox(QString::fromUtf8(a)); - } else if (url.path() == QLatin1String("/ver.php")) { -#ifndef Q_OS_WIN - g.mw->msgBox(QString::fromUtf8(a)); -#else - QDomDocument qdd; - qdd.setContent(a); - - QDomElement elem = qdd.firstChildElement(QLatin1String("p")); - elem = elem.firstChildElement(QLatin1String("a")); - - QUrl fetch = QUrl(elem.attribute(QLatin1String("href"))); - if (! fetch.isValid()) { - g.mw->msgBox(QString::fromUtf8(a)); - } else { - QString filename = g.qdBasePath.absoluteFilePath(QLatin1String("Snapshots/") + QFileInfo(fetch.path()).fileName()); - - QFile qf(filename); - if (qf.exists()) { - QString native = QDir::toNativeSeparators(filename); - - WINTRUST_FILE_INFO file; - ZeroMemory(&file, sizeof(file)); - file.cbStruct = sizeof(file); - file.pcwszFilePath = native.utf16(); - - WINTRUST_DATA data; - ZeroMemory(&data, sizeof(data)); - data.cbStruct = sizeof(data); - data.dwUIChoice = WTD_UI_NONE; - data.fdwRevocationChecks = WTD_REVOKE_NONE; - data.dwUnionChoice = WTD_CHOICE_FILE; - data.pFile = &file; - data.dwProvFlags = WTD_SAFER_FLAG | WTD_USE_DEFAULT_OSVER_CHECK | WTD_LIFETIME_SIGNING_FLAG; - data.dwUIContext = WTD_UICONTEXT_INSTALL; - - static GUID guid = WINTRUST_ACTION_GENERIC_VERIFY_V2; - - LONG ts = WinVerifyTrust(0, &guid , &data); - - if (ts == 0) { - if (QMessageBox::question(g.mw, - tr("Upgrade Mumble"), - tr("A new version of Mumble has been detected and automatically downloaded. It is recommended that you either upgrade to this version, or downgrade to the latest stable release. Do you want to launch the installer now?"), - QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) { - SHELLEXECUTEINFOW execinfo; - ZeroMemory(&execinfo, sizeof(execinfo)); - execinfo.cbSize = sizeof(execinfo); - execinfo.lpFile = filename.utf16(); - execinfo.lpDirectory = QDir::toNativeSeparators(QDir::tempPath()).utf16(); - execinfo.nShow = SW_NORMAL; - - if (ShellExecuteExW(&execinfo)) { - g.mw->bSuppressAskOnQuit = true; - qApp->closeAllWindows(); - } else { - g.mw->msgBox(tr("Failed to launch snapshot installer.")); - } - } - - } else { - g.mw->msgBox(tr("Corrupt download of new version detected. Automatically removed.")); - qf.remove(); - } - } else { - fetch.setHost(g.qsRegionalHost); - g.mw->msgBox(tr("Downloading new snapshot from %1 to %2").arg(fetch.toString(), filename)); - - QNetworkReply *nrep = Network::get(fetch); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - - rep->deleteLater(); - return; - } - } - } else { - QString filename = g.qdBasePath.absoluteFilePath(QLatin1String("Snapshots/") + QFileInfo(url.path()).fileName()); - - QFile qf(filename); - if (qf.open(QIODevice::WriteOnly)) { - qf.write(a); - qf.close(); - new VersionCheck(true, g.mw); - } else { - g.mw->msgBox(tr("Failed to write new version to disk.")); - } -#endif - } -#else - g.mw->msgBox(QString::fromUtf8(a)); -#endif - } - } else { - if (url.host() == g.qsRegionalHost) { - url.setHost(QLatin1String("mumble.info")); - QNetworkReply *nrep = Network::get(url); - connect(nrep, SIGNAL(finished()), this, SLOT(finished())); - - rep->deleteLater(); - return; - } else if (bSilent) { - g.mw->msgBox(tr("Mumble failed to retrieve version information from the central server.")); - } - } - - rep->deleteLater(); - deleteLater(); -} diff -Nru mumble-1.2.3/src/mumble11x/VersionCheck.h mumble-1.2.3-87-gf7d8711/src/mumble11x/VersionCheck.h --- mumble-1.2.3/src/mumble11x/VersionCheck.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/VersionCheck.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -- Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -- Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _VERSIONCHECK_H -#define _VERSIONCHECK_H - -#include "mumble_pch.hpp" - -class VersionCheck : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(VersionCheck) - protected: - bool bSilent; - public slots: - void finished(); - public: - VersionCheck(bool autocheck, QObject *parent = NULL, bool focus = false); -}; - -#else -class VersionCheck; -#endif diff -Nru mumble-1.2.3/src/mumble11x/ViewCert.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/ViewCert.cpp --- mumble-1.2.3/src/mumble11x/ViewCert.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ViewCert.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,120 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "ViewCert.h" - -static QString decode_utf8_qssl_string(const QString &input) { - QString i = input; - return QUrl::fromPercentEncoding(i.replace(QLatin1String("\\x"), QLatin1String("%")).toLatin1()); -} - -ViewCert::ViewCert(QList cl, QWidget *p) : QDialog(p) { - qlCerts = cl; - - setWindowTitle(tr("Certificate Chain Details")); - - QHBoxLayout *h; - QVBoxLayout *v; - QGroupBox *qcbChain, *qcbDetails; - - qcbChain=new QGroupBox(tr("Certificate chain"), this); - h = new QHBoxLayout(qcbChain); - qlwChain = new QListWidget(qcbChain); - qlwChain->setObjectName(QLatin1String("Chain")); - - foreach(QSslCertificate c, qlCerts) - qlwChain->addItem(tr("%1 %2").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::CommonName)), decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::Organization)))); - h->addWidget(qlwChain); - - qcbDetails=new QGroupBox(tr("Certificate details"), this); - h = new QHBoxLayout(qcbDetails); - qlwCert = new QListWidget(qcbDetails); - h->addWidget(qlwCert); - - QDialogButtonBox *qdbb = new QDialogButtonBox(QDialogButtonBox::Ok, Qt::Horizontal, this); - - v = new QVBoxLayout(this); - v->addWidget(qcbChain); - v->addWidget(qcbDetails); - v->addWidget(qdbb); - - QMetaObject::connectSlotsByName(this); - connect(qdbb, SIGNAL(accepted()), this, SLOT(accept())); - - resize(500,300); -} - -void ViewCert::on_Chain_currentRowChanged(int idx) { - qlwCert->clear(); - if ((idx < 0) || (idx >= qlCerts.size())) - return; - - QStringList l; - const QSslCertificate &c=qlCerts.at(idx); - const QMultiMap &alts = c.alternateSubjectNames(); - QMultiMap::const_iterator i; - - l << tr("Common Name: %1").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::CommonName))); - l << tr("Organization: %1").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::Organization))); - l << tr("Subunit: %1").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::OrganizationalUnitName))); - l << tr("Country: %1").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::CountryName))); - l << tr("Locality: %1").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::LocalityName))); - l << tr("State: %1").arg(decode_utf8_qssl_string(c.subjectInfo(QSslCertificate::StateOrProvinceName))); - l << tr("Valid from: %1").arg(c.effectiveDate().toString()); - l << tr("Valid to: %1").arg(c.expiryDate().toString()); - l << tr("Serial: %1").arg(QString::fromLatin1(c.serialNumber().toHex())); - l << tr("Public Key: %1 bits %2").arg(c.publicKey().length()).arg((c.publicKey().algorithm() == QSsl::Rsa) ? tr("RSA") : tr("DSA")); - l << tr("Digest (MD5): %1").arg(QString::fromLatin1(c.digest().toHex())); - for (i=alts.constBegin(); i != alts.constEnd(); ++i) { - switch (i.key()) { - case QSsl::EmailEntry: { - l << tr("Email: %1").arg(i.value()); - } - break; - case QSsl::DnsEntry: { - l << tr("DNS: %1").arg(i.value()); - } - break; - default: - break; - } - } - - l << QString(); - l << tr("Issued by:"); - l << tr("Common Name: %1").arg(decode_utf8_qssl_string(c.issuerInfo(QSslCertificate::CommonName))); - l << tr("Organization: %1").arg(decode_utf8_qssl_string(c.issuerInfo(QSslCertificate::Organization))); - l << tr("Unit Name: %1").arg(decode_utf8_qssl_string(c.issuerInfo(QSslCertificate::OrganizationalUnitName))); - l << tr("Country: %1").arg(decode_utf8_qssl_string(c.issuerInfo(QSslCertificate::CountryName))); - l << tr("Locality: %1").arg(decode_utf8_qssl_string(c.issuerInfo(QSslCertificate::LocalityName))); - l << tr("State: %1").arg(decode_utf8_qssl_string(c.issuerInfo(QSslCertificate::StateOrProvinceName))); - - qlwCert->addItems(l); -} diff -Nru mumble-1.2.3/src/mumble11x/ViewCert.h mumble-1.2.3-87-gf7d8711/src/mumble11x/ViewCert.h --- mumble-1.2.3/src/mumble11x/ViewCert.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/ViewCert.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,49 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _VIEWCERT_H -#define _VIEWCERT_H - -#include "mumble_pch.hpp" - -class ViewCert : public QDialog { - private: - Q_OBJECT - Q_DISABLE_COPY(ViewCert) - protected: - QList qlCerts; - QListWidget *qlwChain, *qlwCert; - protected slots: - void on_Chain_currentRowChanged(int); - public: - ViewCert(QList c, QWidget *p); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble11x/WASAPI.cpp mumble-1.2.3-87-gf7d8711/src/mumble11x/WASAPI.cpp --- mumble-1.2.3/src/mumble11x/WASAPI.cpp 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/WASAPI.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,967 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "WASAPI.h" -#include "User.h" -#include "Global.h" -#include "MainWindow.h" -#include "Timer.h" - -// Now that Win7 is published, which includes public versions of these -// interfaces, we simply inherit from those but use the "old" IIDs. - -MIDL_INTERFACE("33969B1D-D06F-4281-B837-7EAAFD21A9C0") -IVistaAudioSessionControl2 : -public IAudioSessionControl2 { -}; - -MIDL_INTERFACE("94BE9D30-53AC-4802-829C-F13E5AD34775") -IAudioSessionQuery : -public IUnknown { - virtual HRESULT STDMETHODCALLTYPE GetQueryInterface(IAudioSessionEnumerator **) = 0; -}; - -class WASAPIInputRegistrar : public AudioInputRegistrar { - public: - WASAPIInputRegistrar(); - virtual AudioInput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - virtual bool canEcho(const QString &) const; - virtual bool canExclusive() const; -}; - -class WASAPIOutputRegistrar : public AudioOutputRegistrar { - public: - WASAPIOutputRegistrar(); - virtual AudioOutput *create(); - virtual const QList getDeviceChoices(); - virtual void setDeviceChoice(const QVariant &, Settings &); - bool canMuteOthers() const; - virtual bool canExclusive() const; -}; - -class WASAPIInit : public DeferInit { - WASAPIInputRegistrar *wirReg; - WASAPIOutputRegistrar *worReg; - public: - void initialize(); - void destroy(); -}; - -static WASAPIInit wasapiinit; - -extern bool bIsWin7, bIsVistaSP1; - -void WASAPIInit::initialize() { - wirReg = NULL; - worReg = NULL; - - if (! bIsVistaSP1) { - qWarning("WASAPIInit: Requires Vista SP1"); - return; - } - - HMODULE hLib = LoadLibrary(L"AVRT.DLL"); - if (hLib == NULL) { - qWarning("WASAPIInit: Failed to load avrt.dll"); - return; - } - FreeLibrary(hLib); - - wirReg = new WASAPIInputRegistrar(); - worReg = new WASAPIOutputRegistrar(); -} - -void WASAPIInit::destroy() { - delete wirReg; - delete worReg; -} - - -WASAPIInputRegistrar::WASAPIInputRegistrar() : AudioInputRegistrar(QLatin1String("WASAPI"), 10) { -} - -AudioInput *WASAPIInputRegistrar::create() { - return new WASAPIInput(); -} - -const QList WASAPIInputRegistrar::getDeviceChoices() { - return WASAPISystem::mapToDevice(WASAPISystem::getInputDevices(), g.s.qsWASAPIInput); -} - -void WASAPIInputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsWASAPIInput = choice.toString(); -} - -bool WASAPIInputRegistrar::canEcho(const QString &outputsys) const { - return (outputsys == name); -} - -bool WASAPIInputRegistrar::canExclusive() const { - return true; -} - -WASAPIOutputRegistrar::WASAPIOutputRegistrar() : AudioOutputRegistrar(QLatin1String("WASAPI"), 10) { -} - -AudioOutput *WASAPIOutputRegistrar::create() { - return new WASAPIOutput(); -} - -const QList WASAPIOutputRegistrar::getDeviceChoices() { - return WASAPISystem::mapToDevice(WASAPISystem::getOutputDevices(), g.s.qsWASAPIOutput); -} - -void WASAPIOutputRegistrar::setDeviceChoice(const QVariant &choice, Settings &s) { - s.qsWASAPIOutput = choice.toString(); -} - -bool WASAPIOutputRegistrar::canMuteOthers() const { - return true; -} - -bool WASAPIOutputRegistrar::canExclusive() const { - return true; -} - -const QHash WASAPISystem::getInputDevices() { - return getDevices(eCapture); -} - -const QHash WASAPISystem::getOutputDevices() { - return getDevices(eRender); -} - -const QHash WASAPISystem::getDevices(EDataFlow dataflow) { - QHash devices; - - HRESULT hr; - - IMMDeviceEnumerator *pEnumerator = NULL; - IMMDeviceCollection *pCollection = NULL; - - hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), reinterpret_cast(&pEnumerator)); - - if (! pEnumerator || FAILED(hr)) { - qWarning("WASAPI: Failed to instatiate enumerator: hr=0x%08lx", hr); - } else { - hr = pEnumerator->EnumAudioEndpoints(dataflow, DEVICE_STATE_ACTIVE, &pCollection); - if (! pCollection || FAILED(hr)) { - qWarning("WASAPI: Failed to enumerate: hr=0x%08lx", hr); - } else { - devices.insert(QString(), tr("Default Device")); - - UINT ndev = 0; - pCollection->GetCount(&ndev); - for (unsigned int idx=0;idxItem(idx, &pDevice); - pDevice->OpenPropertyStore(STGM_READ, &pStore); - - LPWSTR strid = NULL; - pDevice->GetId(&strid); - - PROPVARIANT varName; - PropVariantInit(&varName); - - pStore->GetValue(PKEY_Device_FriendlyName, &varName); - - devices.insert(QString::fromWCharArray(strid), QString::fromWCharArray(varName.pwszVal)); - - PropVariantClear(&varName); - CoTaskMemFree(strid); - - pStore->Release(); - pDevice->Release(); - } - pCollection->Release(); - } - pEnumerator->Release(); - } - - return devices; -} - -const QList WASAPISystem::mapToDevice(const QHash devs, const QString &match) { - QList qlReturn; - - QStringList qlDevices = devs.keys(); - qSort(qlDevices); - - if (qlDevices.contains(match)) { - qlDevices.removeAll(match); - qlDevices.prepend(match); - } - - foreach(const QString &dev, qlDevices) { - qlReturn << audioDevice(devs.value(dev), dev); - } - return qlReturn; -} - -WASAPIInput::WASAPIInput() { -}; - -WASAPIInput::~WASAPIInput() { - bRunning = false; - wait(); -} - -void WASAPIInput::run() { - HRESULT hr; - IMMDeviceEnumerator *pEnumerator = NULL; - IMMDevice *pMicDevice = NULL; - IAudioClient *pMicAudioClient = NULL; - IAudioCaptureClient *pMicCaptureClient = NULL; - IMMDevice *pEchoDevice = NULL; - IAudioClient *pEchoAudioClient = NULL; - IAudioCaptureClient *pEchoCaptureClient = NULL; - WAVEFORMATEX *micpwfx = NULL, *echopwfx = NULL; - WAVEFORMATEXTENSIBLE *micpwfxe = NULL, *echopwfxe = NULL; - WAVEFORMATEXTENSIBLE wfe; - UINT32 bufferFrameCount; - UINT32 numFramesAvailable; - UINT32 numFramesLeft; - UINT32 micPacketLength = 0, echoPacketLength = 0; - UINT32 allocLength; - UINT64 devicePosition; - UINT64 qpcPosition; - HANDLE hEvent; - BYTE *pData; - DWORD flags; - DWORD dwTaskIndex = 0; - HANDLE hMmThread; - float *tbuff = NULL; - short *sbuff = NULL; - bool doecho = g.s.doEcho(); - REFERENCE_TIME def, min, latency, want; - bool exclusive = false; - - CoInitialize(NULL); - - hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - - hMmThread = AvSetMmThreadCharacteristics(L"Pro Audio", &dwTaskIndex); - if (hMmThread == NULL) { - qWarning("WASAPIInput: Failed to set Pro Audio thread priority"); - } - - hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), reinterpret_cast(&pEnumerator)); - - if (! pEnumerator || FAILED(hr)) { - qWarning("WASAPIInput: Failed to instatiate enumerator: hr=0x%08lx", hr); - return; - } - - if (! g.s.qsWASAPIInput.isEmpty()) { - STACKVAR(wchar_t, devname, g.s.qsWASAPIInput.length() + 1); - int len = g.s.qsWASAPIInput.toWCharArray(devname); - devname[len] = 0; - hr = pEnumerator->GetDevice(devname, &pMicDevice); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to open selected input device %s %ls (hr=0x%08lx), falling back to default", qPrintable(g.s.qsWASAPIInput), devname, hr); - } - } - - if (! pMicDevice) { - hr = pEnumerator->GetDefaultAudioEndpoint(eCapture, eCommunications, &pMicDevice); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to open input device: hr=0x%08lx", hr); - goto cleanup; - } - wchar_t *devname = NULL; - hr = pMicDevice->GetId(&devname); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to query input device: hr=0x%08lx", hr); - goto cleanup; - } - pMicDevice->Release(); - hr = pEnumerator->GetDevice(devname, &pMicDevice); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to reopen default input device: hr=0x%08lx", hr); - goto cleanup; - } - CoTaskMemFree(devname); - } - - if (doecho) { - if (! g.s.qsWASAPIOutput.isEmpty()) { - STACKVAR(wchar_t, devname, g.s.qsWASAPIOutput.length()); - g.s.qsWASAPIOutput.toWCharArray(devname); - hr = pEnumerator->GetDevice(devname, &pEchoDevice); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to open selected echo device (hr=0x%08lx), falling back to default", hr); - } - } - - if (! pEchoDevice) { - hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &pEchoDevice); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to open echo device: hr=0x%08lx", hr); - goto cleanup; - } - wchar_t *devname = NULL; - hr = pEchoDevice->GetId(&devname); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to query echo device: hr=0x%08lx", hr); - goto cleanup; - } - pEchoDevice->Release(); - hr = pEnumerator->GetDevice(devname, &pEchoDevice); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to reopen default echo device: hr=0x%08lx", hr); - goto cleanup; - } - CoTaskMemFree(devname); - } - } - - pEnumerator->Release(); - pEnumerator = NULL; - - hr = pMicDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void **) &pMicAudioClient); - if (FAILED(hr)) { - qWarning("WASAPIInput: Activate Mic AudioClient failed: hr=0x%08lx", hr); - goto cleanup; - } - - def = min = latency = 0; - - pMicAudioClient->GetDevicePeriod(&def, &min); - - want = qMax(min, 100000); - qWarning("WASAPIInput: Latencies %lld %lld => %lld", def, min, want); - - if (g.s.bExclusiveInput && ! doecho) { - for (int channels = 1; channels<=2; ++channels) { - ZeroMemory(&wfe, sizeof(wfe)); - wfe.Format.cbSize = 0; - wfe.Format.wFormatTag = WAVE_FORMAT_PCM; - wfe.Format.nChannels = channels; - wfe.Format.nSamplesPerSec = 48000; - wfe.Format.wBitsPerSample = 16; - wfe.Format.nBlockAlign = wfe.Format.nChannels * wfe.Format.wBitsPerSample / 8; - wfe.Format.nAvgBytesPerSec = wfe.Format.nBlockAlign * wfe.Format.nSamplesPerSec; - - micpwfxe = &wfe; - micpwfx = reinterpret_cast(&wfe); - - hr = pMicAudioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, want, want, micpwfx, NULL); - if (SUCCEEDED(hr)) { - eMicFormat = SampleShort; - exclusive = true; - qWarning("WASAPIInput: Successfully opened exclusive mode"); - break; - } - - micpwfxe = NULL; - micpwfx = NULL; - } - } - - if (! micpwfxe) { - if (g.s.bExclusiveInput) - qWarning("WASAPIInput: Failed to open exclusive mode."); - - hr = pMicAudioClient->GetMixFormat(&micpwfx); - micpwfxe = reinterpret_cast(micpwfx); - - if (FAILED(hr) || (micpwfx->wBitsPerSample != (sizeof(float) * 8)) || (micpwfxe->SubFormat != KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)) { - qWarning("WASAPIInput: Mic Subformat is not IEEE Float: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pMicAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 0, 0, micpwfx, NULL); - if (FAILED(hr)) { - qWarning("WASAPIInput: Mic Initialize failed: hr=0x%08lx", hr); - goto cleanup; - } - } - - pMicAudioClient->GetStreamLatency(&latency); - hr = pMicAudioClient->GetBufferSize(&bufferFrameCount); - qWarning("WASAPIInput: Stream Latency %lld (%d)", latency, bufferFrameCount); - - hr = pMicAudioClient->GetService(__uuidof(IAudioCaptureClient), (void**)&pMicCaptureClient); - if (FAILED(hr)) { - qWarning("WASAPIInput: Mic GetService failed: hr=0x%08lx", hr); - goto cleanup; - } - - pMicAudioClient->SetEventHandle(hEvent); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to set mic event: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pMicAudioClient->Start(); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to start mic: hr=0x%08lx", hr); - goto cleanup; - } - - iMicChannels = micpwfx->nChannels; - iMicFreq = micpwfx->nSamplesPerSec; - - if (doecho) { - hr = pEchoDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void **) &pEchoAudioClient); - if (FAILED(hr)) { - qWarning("WASAPIInput: Activate Echo AudioClient failed: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pEchoAudioClient->GetMixFormat(&echopwfx); - echopwfxe = reinterpret_cast(echopwfx); - - if (FAILED(hr) || (echopwfx->wBitsPerSample != (sizeof(float) * 8)) || (echopwfxe->SubFormat != KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)) { - qWarning("WASAPIInput: Echo Subformat is not IEEE Float: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pEchoAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK | AUDCLNT_STREAMFLAGS_LOOPBACK, 0, 0, echopwfx, NULL); - if (FAILED(hr)) { - qWarning("WASAPIInput: Echo Initialize failed: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pEchoAudioClient->GetBufferSize(&bufferFrameCount); - hr = pEchoAudioClient->GetService(__uuidof(IAudioCaptureClient), (void**)&pEchoCaptureClient); - if (FAILED(hr)) { - qWarning("WASAPIInput: Echo GetService failed: hr=0x%08lx", hr); - goto cleanup; - } - - pEchoAudioClient->SetEventHandle(hEvent); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to set echo event: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pEchoAudioClient->Start(); - if (FAILED(hr)) { - qWarning("WASAPIInput: Failed to start Echo: hr=0x%08lx", hr); - goto cleanup; - } - - iEchoChannels = echopwfx->nChannels; - iEchoFreq = echopwfx->nSamplesPerSec; - } - - initializeMixer(); - - allocLength = (iMicLength / 2) * micpwfx->nChannels; - - if (exclusive) { - sbuff = new short[allocLength]; - while (bRunning && ! FAILED(hr)) { - hr = pMicCaptureClient->GetBuffer(&pData, &numFramesAvailable, &flags, &devicePosition, &qpcPosition); - if (hr != AUDCLNT_S_BUFFER_EMPTY) { - if (FAILED(hr)) - goto cleanup; - - numFramesLeft = numFramesAvailable; - - UINT32 nFrames = numFramesAvailable * micpwfx->nChannels; - if (nFrames > allocLength) { - delete [] sbuff; - allocLength = nFrames; - sbuff = new short[allocLength]; - } - - memcpy(sbuff, pData, nFrames * sizeof(short)); - hr = pMicCaptureClient->ReleaseBuffer(numFramesAvailable); - if (FAILED(hr)) - goto cleanup; - addMic(sbuff, numFramesAvailable); - } - if (! FAILED(hr)) - WaitForSingleObject(hEvent, 100); - } - } else { - tbuff = new float[allocLength]; - while (bRunning && ! FAILED(hr)) { - hr = pMicCaptureClient->GetNextPacketSize(&micPacketLength); - if (! FAILED(hr) && iEchoChannels) - hr = pEchoCaptureClient->GetNextPacketSize(&echoPacketLength); - if (FAILED(hr)) - goto cleanup; - - while ((micPacketLength > 0) || (echoPacketLength > 0)) { - if (echoPacketLength > 0) { - hr = pEchoCaptureClient->GetBuffer(&pData, &numFramesAvailable, &flags, &devicePosition, &qpcPosition); - numFramesLeft = numFramesAvailable; - if (FAILED(hr)) - goto cleanup; - - UINT32 nFrames = numFramesAvailable * echopwfx->nChannels; - if (nFrames > allocLength) { - delete [] tbuff; - allocLength = nFrames; - tbuff = new float[allocLength]; - } - memcpy(tbuff, pData, nFrames * sizeof(float)); - hr = pEchoCaptureClient->ReleaseBuffer(numFramesAvailable); - if (FAILED(hr)) - goto cleanup; - addEcho(tbuff, numFramesAvailable); - } else if (micPacketLength > 0) { - hr = pMicCaptureClient->GetBuffer(&pData, &numFramesAvailable, &flags, &devicePosition, &qpcPosition); - numFramesLeft = numFramesAvailable; - if (FAILED(hr)) - goto cleanup; - - UINT32 nFrames = numFramesAvailable * micpwfx->nChannels; - if (nFrames > allocLength) { - delete [] tbuff; - allocLength = nFrames; - tbuff = new float[allocLength]; - } - memcpy(tbuff, pData, nFrames * sizeof(float)); - hr = pMicCaptureClient->ReleaseBuffer(numFramesAvailable); - if (FAILED(hr)) - goto cleanup; - addMic(tbuff, numFramesAvailable); - } - hr = pMicCaptureClient->GetNextPacketSize(&micPacketLength); - if (! FAILED(hr) && iEchoChannels) - hr = pEchoCaptureClient->GetNextPacketSize(&echoPacketLength); - } - if (! FAILED(hr)) - WaitForSingleObject(hEvent, 2000); - } - } - -cleanup: - if (micpwfx && !exclusive) - CoTaskMemFree(micpwfx); - if (echopwfx) - CoTaskMemFree(echopwfx); - - if (pMicAudioClient) { - pMicAudioClient->Stop(); - pMicAudioClient->Release(); - } - if (pMicCaptureClient) - pMicCaptureClient->Release(); - if (pMicDevice) - pMicDevice->Release(); - - if (pEchoAudioClient) { - pEchoAudioClient->Stop(); - pEchoAudioClient->Release(); - } - if (pEchoCaptureClient) - pEchoCaptureClient->Release(); - if (pEchoDevice) - pEchoDevice->Release(); - - if (pEnumerator) - pEnumerator->Release(); - - if (hMmThread != NULL) - AvRevertMmThreadCharacteristics(hMmThread); - - if (hEvent != NULL) - CloseHandle(hEvent); - - delete [] tbuff; - delete [] sbuff; -} - -WASAPIOutput::WASAPIOutput() { -} - -WASAPIOutput::~WASAPIOutput() { - bRunning = false; - wait(); -} - -void WASAPIOutput::setVolumes(IMMDevice *pDevice, bool talking) { - HRESULT hr; - - if (! talking) { - QMap::const_iterator i; - for (i=qmVolumes.constBegin(); i != qmVolumes.constEnd(); ++i) { - float fVolume = 1.0f; - hr = i.key()->GetMasterVolume(&fVolume); - if (qFuzzyCompare(i.value().second, fVolume)) - hr = i.key()->SetMasterVolume(i.value().first, NULL); - i.key()->Release(); - } - qmVolumes.clear(); - return; - } - - IAudioSessionManager2 *pAudioSessionManager = NULL; - int max = 0; - DWORD dwMumble = GetCurrentProcessId(); - - qmVolumes.clear(); - if (qFuzzyCompare(g.s.fOtherVolume, 1.0f)) - return; - - // FIXME: Try to keep the session object around when returning volume. - - if (SUCCEEDED(hr = pDevice->Activate(bIsWin7 ? __uuidof(IAudioSessionManager2) : __uuidof(IAudioSessionManager), CLSCTX_ALL, NULL, (void **) &pAudioSessionManager))) { - IAudioSessionEnumerator *pEnumerator = NULL; - IAudioSessionQuery *pMysticQuery = NULL; - if (! bIsWin7) { - if (SUCCEEDED(hr = pAudioSessionManager->QueryInterface(__uuidof(IAudioSessionQuery), (void **) &pMysticQuery))) { - hr = pMysticQuery->GetQueryInterface(&pEnumerator); - } - } else { - hr = pAudioSessionManager->GetSessionEnumerator(&pEnumerator); - } - - QSet seen; - - if (SUCCEEDED(hr)) { - if (SUCCEEDED(hr = pEnumerator->GetCount(&max))) { - for (int i=0;iGetSession(i, &pControl))) { - IAudioSessionControl2 *pControl2 = NULL; - if (SUCCEEDED(hr = pControl->QueryInterface(bIsWin7 ? __uuidof(IAudioSessionControl2) : __uuidof(IVistaAudioSessionControl2), (void **) &pControl2))) { - DWORD pid; - if (SUCCEEDED(hr = pControl2->GetProcessId(&pid)) && (pid != dwMumble)) { - AudioSessionState ass; - if (SUCCEEDED(hr = pControl2->GetState(&ass)) && (ass != AudioSessionStateExpired)) { - GUID group; - if (SUCCEEDED(hr = pControl2->GetGroupingParam(&group))) { - QUuid quuid(group); - if (! seen.contains(quuid)) { - seen.insert(quuid); - ISimpleAudioVolume *pVolume = NULL; - if (SUCCEEDED(hr = pControl2->QueryInterface(__uuidof(ISimpleAudioVolume), (void **) &pVolume))) { - BOOL bMute = TRUE; - bool keep = false; - if (SUCCEEDED(hr = pVolume->GetMute(&bMute)) && ! bMute) { - float fVolume = 1.0f; - if (SUCCEEDED(hr = pVolume->GetMasterVolume(&fVolume)) && ! qFuzzyCompare(fVolume,0.0f)) { - float fSetVolume = fVolume * g.s.fOtherVolume; - if (SUCCEEDED(hr = pVolume->SetMasterVolume(fSetVolume, NULL))) { - hr = pVolume->GetMasterVolume(&fSetVolume); - qmVolumes.insert(pVolume, VolumePair(fVolume,fSetVolume)); - keep = true; - } - } - } - if (! keep) - pVolume->Release(); - } - } - } - } - } - pControl2->Release(); - } - pControl->Release(); - } - } - } - pEnumerator->Release(); - } - if (pMysticQuery) - pMysticQuery->Release(); - pAudioSessionManager->Release(); - } -} - -void WASAPIOutput::run() { - HRESULT hr; - IMMDeviceEnumerator *pEnumerator = NULL; - IMMDevice *pDevice = NULL; - IAudioClient *pAudioClient = NULL; - IAudioRenderClient *pRenderClient = NULL; - WAVEFORMATEX *pwfx = NULL; - WAVEFORMATEXTENSIBLE *pwfxe = NULL; - UINT32 bufferFrameCount; - REFERENCE_TIME def, min, latency, want; - UINT32 numFramesAvailable; - UINT32 wantLength; - HANDLE hEvent; - BYTE *pData; - DWORD dwTaskIndex = 0; - HANDLE hMmThread; - int ns = 0; - unsigned int chanmasks[32]; - QMap qmVolumes; - bool lastspoke = false; - REFERENCE_TIME bufferDuration = (g.s.iOutputDelay > 1) ? (g.s.iOutputDelay + 1) * 100000 : 0; - bool exclusive = false; - - CoInitialize(NULL); - - hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - - hMmThread = AvSetMmThreadCharacteristics(L"Pro Audio", &dwTaskIndex); - if (hMmThread == NULL) { - qWarning("WASAPIOutput: Failed to set Pro Audio thread priority"); - } - - hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), reinterpret_cast(&pEnumerator)); - - if (! pEnumerator || FAILED(hr)) { - qWarning("WASAPIOutput: Failed to instatiate enumerator: hr=0x%08lx", hr); - return; - } - - if (! g.s.qsWASAPIOutput.isEmpty()) { - STACKVAR(wchar_t, devname, g.s.qsWASAPIOutput.length() + 1); - int len = g.s.qsWASAPIOutput.toWCharArray(devname); - devname[len] = 0; - hr = pEnumerator->GetDevice(devname, &pDevice); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Failed to open selected input device (hr=0x%08lx), falling back to default", hr); - } - } - - if (! pDevice) { - hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eCommunications, &pDevice); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Failed to open output device: hr=0x%08lx", hr); - goto cleanup; - } - wchar_t *devname = NULL; - hr = pDevice->GetId(&devname); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Failed to query output device: hr=0x%08lx", hr); - goto cleanup; - } - pDevice->Release(); - hr = pEnumerator->GetDevice(devname, &pDevice); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Failed to reopen default output device: hr=0x%08lx", hr); - goto cleanup; - } - CoTaskMemFree(devname); - } - - pEnumerator->Release(); - pEnumerator = NULL; - - hr = pDevice->Activate(__uuidof(IAudioClient), CLSCTX_ALL, NULL, (void **) &pAudioClient); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Activate AudioClient failed: hr=0x%08lx", hr); - goto cleanup; - } - - pAudioClient->GetDevicePeriod(&def, &min); - want = qMax(min, 100000); - qWarning("WASAPIOutput: Latencies %lld %lld => %lld", def, min, want); - - if (g.s.bExclusiveOutput) { - hr = pAudioClient->GetMixFormat(&pwfx); - if (FAILED(hr)) { - qWarning("WASAPIOutput: GetMixFormat failed: hr=0x%08lx", hr); - goto cleanup; - } - - pwfx->cbSize = 0; - pwfx->wFormatTag = WAVE_FORMAT_PCM; - pwfx->nSamplesPerSec = 48000; - pwfx->wBitsPerSample = 16; - pwfx->nBlockAlign = pwfx->nChannels * pwfx->wBitsPerSample / 8; - pwfx->nAvgBytesPerSec = pwfx->nBlockAlign * pwfx->nSamplesPerSec; - - pwfxe = reinterpret_cast(pwfx); - - hr = pAudioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, want, want, pwfx, NULL); - if (SUCCEEDED(hr)) { - eSampleFormat = SampleShort; - exclusive = true; - qWarning("WASAPIOutput: Successfully opened exclusive mode"); - } else { - CoTaskMemFree(pwfx); - - pwfxe = NULL; - pwfx = NULL; - } - } - - if (! pwfxe) { - if (g.s.bExclusiveOutput) - qWarning("WASAPIOutput: Failed to open exclusive mode."); - - hr = pAudioClient->GetMixFormat(&pwfx); - if (FAILED(hr)) { - qWarning("WASAPIOutput: GetMixFormat failed: hr=0x%08lx", hr); - goto cleanup; - } - pwfxe = reinterpret_cast(pwfx); - - if (FAILED(hr) || (pwfx->wBitsPerSample != (sizeof(float) * 8)) || (pwfxe->SubFormat != KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)) { - qWarning("WASAPIOutput: Subformat is not IEEE Float: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pAudioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, bufferDuration, 0, pwfx, NULL); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Initialize failed: hr=0x%08lx", hr); - goto cleanup; - } - } - - pAudioClient->GetStreamLatency(&latency); - pAudioClient->GetBufferSize(&bufferFrameCount); - qWarning("WASAPIOutput: Stream Latency %lld (%d)", latency, bufferFrameCount); - - iMixerFreq = pwfx->nSamplesPerSec; - - qWarning("WASAPIOutput: Periods %lldus %lldus (latency %lldus)", def / 10LL, min / 10LL, latency / 10LL); - qWarning("WASAPIOutput: Buffer is %dus (%d)", (bufferFrameCount * 1000000) / iMixerFreq, g.s.iOutputDelay); - - hr = pAudioClient->GetService(__uuidof(IAudioRenderClient), (void**)&pRenderClient); - if (FAILED(hr)) { - qWarning("WASAPIOutput: GetService failed: hr=0x%08lx", hr); - goto cleanup; - } - - wantLength = lroundf(ceilf((iFrameSize * pwfx->nSamplesPerSec) / (SAMPLE_RATE * 1.0f))); - - pAudioClient->SetEventHandle(hEvent); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Failed to set event: hr=0x%08lx", hr); - goto cleanup; - } - - hr = pAudioClient->Start(); - if (FAILED(hr)) { - qWarning("WASAPIOutput: Failed to start: hr=0x%08lx", hr); - goto cleanup; - } - - for (int i=0;i<32;i++) { - if (pwfxe->dwChannelMask & (1 << i)) { - chanmasks[ns++] = 1 << i; - } - } - if (ns != pwfx->nChannels) { - qWarning("WASAPIOutput: Chanmask bits doesn't match number of channels."); - } - - iChannels = pwfx->nChannels; - initializeMixer(chanmasks); - - bool mixed = false; - if (! exclusive) { - while (bRunning && ! FAILED(hr)) { - hr = pAudioClient->GetCurrentPadding(&numFramesAvailable); - if (FAILED(hr)) - goto cleanup; - - UINT32 packetLength = bufferFrameCount - numFramesAvailable; - - if (lastspoke != (g.bAttenuateOthers || mixed)) { - lastspoke = g.bAttenuateOthers || mixed; - setVolumes(pDevice, lastspoke); - } - - while (packetLength > 0) { - hr = pRenderClient->GetBuffer(packetLength, &pData); - if (FAILED(hr)) - goto cleanup; - - mixed = mix(reinterpret_cast(pData), packetLength); - if (mixed) - hr = pRenderClient->ReleaseBuffer(packetLength, 0); - else - hr = pRenderClient->ReleaseBuffer(packetLength, AUDCLNT_BUFFERFLAGS_SILENT); - if (FAILED(hr)) - goto cleanup; - - if (!g.s.bAttenuateOthers && !g.bAttenuateOthers) { - mixed = false; - } - - if (lastspoke != (g.bAttenuateOthers || mixed)) { - lastspoke = g.bAttenuateOthers || mixed; - setVolumes(pDevice, lastspoke); - } - - hr = pAudioClient->GetCurrentPadding(&numFramesAvailable); - if (FAILED(hr)) - goto cleanup; - - packetLength = bufferFrameCount - numFramesAvailable; - } - if (! FAILED(hr)) - WaitForSingleObject(hEvent, 2000); - } - } else { - wantLength = bufferFrameCount; - - while (bRunning && ! FAILED(hr)) { - hr = pRenderClient->GetBuffer(wantLength, &pData); - if (FAILED(hr)) - goto cleanup; - - mixed = mix(pData, wantLength); - - if (mixed) - hr = pRenderClient->ReleaseBuffer(wantLength, 0); - else - hr = pRenderClient->ReleaseBuffer(wantLength, AUDCLNT_BUFFERFLAGS_SILENT); - - if (FAILED(hr)) - goto cleanup; - - if (! FAILED(hr)) - WaitForSingleObject(hEvent, 100); - } - } - -cleanup: - if (pwfx) - CoTaskMemFree(pwfx); - - setVolumes(pDevice, false); - - if (pAudioClient) { - pAudioClient->Stop(); - pAudioClient->Release(); - } - if (pRenderClient) - pRenderClient->Release(); - if (pDevice) - pDevice->Release(); - - if (pEnumerator) - pEnumerator->Release(); - - if (hMmThread != NULL) - AvRevertMmThreadCharacteristics(hMmThread); - - if (hEvent != NULL) - CloseHandle(hEvent); -} diff -Nru mumble-1.2.3/src/mumble11x/WASAPI.h mumble-1.2.3-87-gf7d8711/src/mumble11x/WASAPI.h --- mumble-1.2.3/src/mumble11x/WASAPI.h 2011-02-19 21:35:17.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble11x/WASAPI.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - Neither the name of the Mumble Developers nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef _WASAPI_H -#define _WASAPI_H - -#include "AudioInput.h" -#include "AudioOutput.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class WASAPISystem : public QObject { - private: - Q_OBJECT - Q_DISABLE_COPY(WASAPISystem) - public: - static const QHash getDevices(EDataFlow dataflow); - static const QHash getInputDevices(); - static const QHash getOutputDevices(); - static const QList mapToDevice(const QHash, const QString &); -}; - -class WASAPIInput : public AudioInput { - private: - Q_OBJECT - Q_DISABLE_COPY(WASAPIInput) - public: - WASAPIInput(); - ~WASAPIInput(); - void run(); -}; - -class WASAPIOutput : public AudioOutput { - private: - Q_OBJECT - Q_DISABLE_COPY(WASAPIOutput) - protected: - typedef QPair VolumePair; - QMap qmVolumes; - void setVolumes(IMMDevice *, bool talking); - public: - WASAPIOutput(); - ~WASAPIOutput(); - void run(); -}; - -#endif diff -Nru mumble-1.2.3/src/mumble.pri mumble-1.2.3-87-gf7d8711/src/mumble.pri --- mumble-1.2.3/src/mumble.pri 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/mumble.pri 2011-04-02 22:20:48.000000000 +0000 @@ -1,12 +1,12 @@ include(../compiler.pri) -VERSION = 1.2.3 +VERSION = 1.2.4 DIST = mumble.pri Message.h PacketDataStream.h CryptState.h Timer.h Version.h OSInfo.h SSL.h Mumble.proto CONFIG += qt thread debug_and_release warn_on DEFINES *= MUMBLE_VERSION_STRING=$$VERSION INCLUDEPATH += $$PWD . VPATH += $$PWD -HEADERS *= ACL.h Group.h Channel.h Connection.h User.h Net.h +HEADERS *= ACL.h Channel.h CryptState.h Connection.h Group.h User.h Net.h OSInfo.h Timer.h SSL.h Version.h SOURCES *= Mumble.pb.cc ACL.cpp Group.cpp Channel.cpp Connection.cpp User.cpp Timer.cpp CryptState.cpp OSInfo.cpp Net.cpp SSL.cpp Version.cpp PROTOBUF *= ../Mumble.proto diff -Nru mumble-1.2.3/src/Mumble.proto mumble-1.2.3-87-gf7d8711/src/Mumble.proto --- mumble-1.2.3/src/Mumble.proto 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Mumble.proto 2011-04-02 22:20:48.000000000 +0000 @@ -269,6 +269,12 @@ optional bool strong_certificate = 18 [default = false]; } +message SuggestConfig { + optional uint32 version = 1; + optional bool positional = 2; + optional bool push_to_talk = 3; +} + message RequestBlob { repeated uint32 session_texture = 1; repeated uint32 session_comment = 2; diff -Nru mumble-1.2.3/src/murmur/BonjourServer.cpp mumble-1.2.3-87-gf7d8711/src/murmur/BonjourServer.cpp --- mumble-1.2.3/src/murmur/BonjourServer.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/BonjourServer.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/murmur/BonjourServer.h mumble-1.2.3-87-gf7d8711/src/murmur/BonjourServer.h --- mumble-1.2.3/src/murmur/BonjourServer.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/BonjourServer.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/murmur/Cert.cpp mumble-1.2.3-87-gf7d8711/src/murmur/Cert.cpp --- mumble-1.2.3/src/murmur/Cert.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Cert.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/DBus.cpp mumble-1.2.3-87-gf7d8711/src/murmur/DBus.cpp --- mumble-1.2.3/src/murmur/DBus.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/DBus.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/DBus.h mumble-1.2.3-87-gf7d8711/src/murmur/DBus.h --- mumble-1.2.3/src/murmur/DBus.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/DBus.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/main.cpp mumble-1.2.3-87-gf7d8711/src/murmur/main.cpp --- mumble-1.2.3/src/murmur/main.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/main.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -208,15 +208,23 @@ for (int i=1;iopen(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { + delete qfLog; + qfLog = NULL; +#ifdef Q_OS_UNIX + fprintf(stderr, "murmurd: failed to open logfile %s: no logging will be done\n",qPrintable(Meta::mp.qsLogfile)); +#else + qWarning("Failed to open logfile %s. Will not detach.",qPrintable(Meta::mp.qsLogfile)); + detach = false; +#endif + } else { + qfLog->setTextModeEnabled(true); + QFileInfo qfi(*qfLog); + Meta::mp.qsLogfile = qfi.absoluteFilePath(); +#ifdef Q_OS_UNIX + if (Meta::mp.uiUid != 0 && fchown(qfLog->handle(), Meta::mp.uiUid, Meta::mp.uiGid) == -1) { + qFatal("can't change log file owner to %d %d:%d - %s", qfLog->handle(), Meta::mp.uiUid, Meta::mp.uiGid, strerror(errno)); + } +#endif + } + } else { + detach = false; + } #ifdef Q_OS_UNIX unixhandler.setuid(); #endif + + MumbleSSL::addSystemCA(); + ServerDB db; meta = new Meta(); @@ -316,25 +353,6 @@ } } - if (detach && ! Meta::mp.qsLogfile.isEmpty()) { - qfLog = new QFile(Meta::mp.qsLogfile); - if (! qfLog->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { - delete qfLog; - qfLog = NULL; -#ifdef Q_OS_UNIX - fprintf(stderr, "murmurd: failed to open logfile %s: no logging will be done\n",qPrintable(Meta::mp.qsLogfile)); -#else - qWarning("Failed to open logfile %s. Will not detach.",qPrintable(Meta::mp.qsLogfile)); - detach = false; -#endif - } else { - qfLog->setTextModeEnabled(true); - QFileInfo qfi(*qfLog); - Meta::mp.qsLogfile = qfi.absoluteFilePath(); - } - } else { - detach = false; - } #ifdef Q_OS_UNIX if (detach) { if (fork() != 0) { diff -Nru mumble-1.2.3/src/murmur/Messages.cpp mumble-1.2.3-87-gf7d8711/src/murmur/Messages.cpp --- mumble-1.2.3/src/murmur/Messages.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Messages.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -379,6 +379,15 @@ mpsc.set_image_message_length(iMaxImageMessageLength); sendMessage(uSource, mpsc); + MumbleProto::SuggestConfig mpsug; + if (! qvSuggestVersion.isNull()) + mpsug.set_version(qvSuggestVersion.toUInt()); + if (! qvSuggestPositional.isNull()) + mpsug.set_positional(qvSuggestPositional.toBool()); + if (! qvSuggestPushToTalk.isNull()) + mpsug.set_push_to_talk(qvSuggestPushToTalk.toBool()); + sendMessage(uSource, mpsug); + log(uSource, "Authenticated"); emit userConnected(uSource); @@ -1616,3 +1625,6 @@ void Server::msgServerConfig(ServerUser *, MumbleProto::ServerConfig &) { } + +void Server::msgSuggestConfig(ServerUser *, MumbleProto::SuggestConfig &) { +} diff -Nru mumble-1.2.3/src/murmur/Meta.cpp mumble-1.2.3-87-gf7d8711/src/murmur/Meta.cpp --- mumble-1.2.3/src/murmur/Meta.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Meta.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,8 +31,10 @@ #include "ServerDB.h" #include "Server.h" #include "Meta.h" +#include "Net.h" #include "DBus.h" #include "OSInfo.h" +#include "Version.h" MetaParams Meta::mp; @@ -42,7 +44,7 @@ MetaParams::MetaParams() { qsPassword = QString(); - usPort = 64738; + usPort = DEFAULT_MUMBLE_PORT; iTimeout = 30; iMaxBandwidth = 72000; iMaxUsers = 1000; @@ -71,7 +73,9 @@ iBanTimeframe = 120; iBanTime = 300; +#ifdef Q_OS_UNIX uiUid = uiGid = 0; +#endif qrUserName = QRegExp(QLatin1String("[-=\\w\\[\\]\\{\\}\\(\\)\\@\\|\\.]+")); qrChannelName = QRegExp(QLatin1String("[ \\-=\\w\\#\\[\\]\\{\\}\\(\\)\\@\\|]+")); @@ -263,16 +267,35 @@ iBanTimeframe = qsSettings->value("autobanTimeframe", iBanTimeframe).toInt(); iBanTime = qsSettings->value("autobanTime", iBanTime).toInt(); + qvSuggestVersion = MumbleVersion::getRaw(qsSettings->value("suggestVersion").toString()); + if (qvSuggestVersion.toUInt() == 0) + qvSuggestVersion = QVariant(); + + qvSuggestPositional = qsSettings->value("suggestPositional"); + if (qvSuggestPositional.toString().trimmed().isEmpty()) + qvSuggestPositional = QVariant(); + + qvSuggestPushToTalk = qsSettings->value("suggestPushToTalk"); + if (qvSuggestPushToTalk.toString().trimmed().isEmpty()) + qvSuggestPushToTalk = QVariant(); + #ifdef Q_OS_UNIX - const QString uname = qsSettings->value("uname").toString(); - if (! uname.isEmpty() && (geteuid() == 0)) { - struct passwd *pw = getpwnam(qPrintable(uname)); + qsName = qsSettings->value("uname").toString(); + if (geteuid() == 0) { + // TODO: remove this silent fallback to enforce running as non-root + bool requested = true; + if (qsName.isEmpty()) { + // default server user name + qsName = "mumble-server"; + requested = false; + } + struct passwd *pw = getpwnam(qPrintable(qsName)); if (pw) { uiUid = pw->pw_uid; uiGid = pw->pw_gid; - } - if (uiUid == 0) { - qFatal("Cannot find username %s", qPrintable(uname)); + qsHome = pw->pw_dir; + } else if (requested) { + qFatal("Cannot find username %s", qPrintable(qsName)); } endpwent(); } @@ -411,6 +434,9 @@ qmConfig.insert(QLatin1String("username"),qrUserName.pattern()); qmConfig.insert(QLatin1String("channelname"),qrChannelName.pattern()); qmConfig.insert(QLatin1String("certrequired"), bCertRequired ? QLatin1String("true") : QLatin1String("false")); + qmConfig.insert(QLatin1String("suggestversion"), qvSuggestVersion.isNull() ? QString() : qvSuggestVersion.toString()); + qmConfig.insert(QLatin1String("suggestpositional"), qvSuggestPositional.isNull() ? QString() : qvSuggestPositional.toString()); + qmConfig.insert(QLatin1String("suggestpushtotalk"), qvSuggestPushToTalk.isNull() ? QString() : qvSuggestPushToTalk.toString()); } Meta::Meta() { diff -Nru mumble-1.2.3/src/murmur/Meta.h mumble-1.2.3-87-gf7d8711/src/murmur/Meta.h --- mumble-1.2.3/src/murmur/Meta.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Meta.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -96,7 +96,15 @@ QMap qmConfig; +#ifdef Q_OS_UNIX unsigned int uiUid, uiGid; + QString qsHome; + QString qsName; +#endif + + QVariant qvSuggestVersion; + QVariant qvSuggestPositional; + QVariant qvSuggestPushToTalk; QSettings *qsSettings; diff -Nru mumble-1.2.3/src/murmur/Murmur.ice mumble-1.2.3-87-gf7d8711/src/murmur/Murmur.ice --- mumble-1.2.3/src/murmur/Murmur.ice 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Murmur.ice 2011-04-02 22:20:48.000000000 +0000 @@ -64,6 +64,10 @@ bool tcponly; /** Idle time. This is how many seconds it is since the user last spoke. Other activity is not counted. */ int idlesecs; + /** UDP Ping Average. This is the average ping for the user via UDP over the duration of the connection. */ + float udpPing; + /** TCP Ping Average. This is the average ping for the user via TCP over the duration of the connection. */ + float tcpPing; }; sequence IntList; diff -Nru mumble-1.2.3/src/murmur/MurmurIce.cpp mumble-1.2.3-87-gf7d8711/src/murmur/MurmurIce.cpp --- mumble-1.2.3/src/murmur/MurmurIce.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/MurmurIce.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -91,6 +91,8 @@ mp.identity = u8(u->qsIdentity); mp.context = u->ssContext; mp.idlesecs = u->bwr.idleSeconds(); + mp.udpPing = u->dUDPPingAvg; + mp.tcpPing = u->dTCPPingAvg; mp.tcponly = ! u->bUdp; @@ -829,6 +831,7 @@ cb->ice_response(ll); } +#define ACCESS_Server_getLogLen_READ static void impl_Server_getLogLen(const ::Murmur::AMD_Server_getLogLenPtr cb, int server_id) { NEED_SERVER_EXISTS; diff -Nru mumble-1.2.3/src/murmur/MurmurIce.h mumble-1.2.3-87-gf7d8711/src/murmur/MurmurIce.h --- mumble-1.2.3/src/murmur/MurmurIce.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/MurmurIce.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/murmur_pch.h mumble-1.2.3-87-gf7d8711/src/murmur/murmur_pch.h --- mumble-1.2.3/src/murmur/murmur_pch.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/murmur_pch.h 2011-04-02 22:20:48.000000000 +0000 @@ -56,10 +56,12 @@ #include #include #ifdef Q_OS_LINUX +#include // needed to work around evil magic stuff in capability.h #include #include #endif #include +#include #ifdef __FreeBSD__ #include #endif diff -Nru mumble-1.2.3/src/murmur/murmur.plist mumble-1.2.3-87-gf7d8711/src/murmur/murmur.plist --- mumble-1.2.3/src/murmur/murmur.plist 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/murmur.plist 2011-04-02 22:20:48.000000000 +0000 @@ -13,7 +13,7 @@ CFBundleSignature MMUR CFBundleVersion - 1.2.3 + 1.2.4 NSHumanReadableCopyright Copyright (c) 2005-2010 Thorvald Natvig <slicer@users.sourceforge.net> diff -Nru mumble-1.2.3/src/murmur/murmur.rc mumble-1.2.3-87-gf7d8711/src/murmur/murmur.rc --- mumble-1.2.3/src/murmur/murmur.rc 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/murmur.rc 2011-04-02 22:20:48.000000000 +0000 @@ -8,15 +8,15 @@ #define VER_DEBUG VS_FF_DEBUG #endif -#ifndef RELEASE_BUILD +#ifdef SNAPSHOT_BUILD #define VER_RELEASE VS_FF_SPECIALBUILD|VS_FF_PRERELEASE #else #define VER_RELEASE 0L #endif VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,2,3,0 - PRODUCTVERSION 1,2,3,0 + FILEVERSION 1,2,4,0 + PRODUCTVERSION 1,2,4,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS (VER_DEBUG|VER_RELEASE) FILEOS VOS_NT_WINDOWS32 @@ -29,12 +29,12 @@ BEGIN VALUE "CompanyName", "Thorvald Natvig" VALUE "FileDescription", "Murmur - Low-latency VoIP server" - VALUE "FileVersion", "1.2.3" - VALUE "ProductVersion", "1.2.3" - VALUE "LegalCopyright", "Copyright (C) 2005-2010, Thorvald Natvig " + VALUE "FileVersion", "1.2.4" + VALUE "ProductVersion", "1.2.4" + VALUE "LegalCopyright", "Copyright (C) 2005-2011, Thorvald Natvig " VALUE "OriginalFilename", "murmur.exe" VALUE "ProductName", "Mumble" -#ifndef RELEASE_BUILD +#ifdef SNAPSHOT_BUILD VALUE "SpecialBuild", "Snapshot development release" #endif END diff -Nru mumble-1.2.3/src/murmur/Register.cpp mumble-1.2.3-87-gf7d8711/src/murmur/Register.cpp --- mumble-1.2.3/src/murmur/Register.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Register.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/RPC.cpp mumble-1.2.3-87-gf7d8711/src/murmur/RPC.cpp --- mumble-1.2.3/src/murmur/RPC.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/RPC.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/Server.cpp mumble-1.2.3-87-gf7d8711/src/murmur/Server.cpp --- mumble-1.2.3/src/murmur/Server.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Server.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -312,6 +312,9 @@ bCertRequired = Meta::mp.bCertRequired; qrUserName = Meta::mp.qrUserName; qrChannelName = Meta::mp.qrChannelName; + qvSuggestVersion = Meta::mp.qvSuggestVersion; + qvSuggestPositional = Meta::mp.qvSuggestPositional; + qvSuggestPushToTalk = Meta::mp.qvSuggestPushToTalk; QString qsHost = getConf("host", QString()).toString(); if (! qsHost.isEmpty()) { @@ -362,6 +365,18 @@ bAllowPing = getConf("allowping", bAllowPing).toBool(); bCertRequired = getConf("certrequired", bCertRequired).toBool(); + qvSuggestVersion = getConf("suggestversion", qvSuggestVersion); + if (qvSuggestVersion.toUInt() == 0) + qvSuggestVersion = QVariant(); + + qvSuggestPositional = getConf("suggestpositional", qvSuggestPositional); + if (qvSuggestPositional.toString().trimmed().isEmpty()) + qvSuggestPositional = QVariant(); + + qvSuggestPushToTalk = getConf("suggestpushtotalk", qvSuggestPushToTalk); + if (qvSuggestPushToTalk.toString().trimmed().isEmpty()) + qvSuggestPushToTalk = QVariant(); + qrUserName=QRegExp(getConf("username", qrUserName.pattern()).toString()); qrChannelName=QRegExp(getConf("channelname", qrChannelName.pattern()).toString()); } @@ -461,6 +476,12 @@ qrUserName=!v.isNull() ? QRegExp(v) : Meta::mp.qrUserName; else if (key == "channelname") qrChannelName=!v.isNull() ? QRegExp(v) : Meta::mp.qrChannelName; + else if (key == "suggestversion") + qvSuggestVersion = ! v.isNull() ? (v.isEmpty() ? QVariant() : v ) : Meta::mp.qvSuggestVersion; + else if (key == "suggestpositional") + qvSuggestPositional = ! v.isNull() ? (v.isEmpty() ? QVariant() : v ) : Meta::mp.qvSuggestPositional; + else if (key == "suggestpushtotalk") + qvSuggestPushToTalk = ! v.isNull() ? (v.isEmpty() ? QVariant() : v ) : Meta::mp.qvSuggestPushToTalk; } #ifdef USE_BONJOUR diff -Nru mumble-1.2.3/src/murmur/ServerDB.cpp mumble-1.2.3-87-gf7d8711/src/murmur/ServerDB.cpp --- mumble-1.2.3/src/murmur/ServerDB.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/ServerDB.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/ServerDB.h mumble-1.2.3-87-gf7d8711/src/murmur/ServerDB.h --- mumble-1.2.3/src/murmur/ServerDB.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/ServerDB.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/Server.h mumble-1.2.3-87-gf7d8711/src/murmur/Server.h --- mumble-1.2.3/src/murmur/Server.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Server.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. @@ -127,6 +127,10 @@ QRegExp qrUserName; QRegExp qrChannelName; + QVariant qvSuggestVersion; + QVariant qvSuggestPositional; + QVariant qvSuggestPushToTalk; + QList qlCA; QSslCertificate qscCert; QSslKey qskKey; diff -Nru mumble-1.2.3/src/murmur/ServerUser.cpp mumble-1.2.3-87-gf7d8711/src/murmur/ServerUser.cpp --- mumble-1.2.3/src/murmur/ServerUser.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/ServerUser.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/murmur/ServerUser.h mumble-1.2.3-87-gf7d8711/src/murmur/ServerUser.h --- mumble-1.2.3/src/murmur/ServerUser.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/ServerUser.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2009, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2009-2011, Stefan Hacker All rights reserved. diff -Nru mumble-1.2.3/src/murmur/Tray.cpp mumble-1.2.3-87-gf7d8711/src/murmur/Tray.cpp --- mumble-1.2.3/src/murmur/Tray.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Tray.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/Tray.h mumble-1.2.3-87-gf7d8711/src/murmur/Tray.h --- mumble-1.2.3/src/murmur/Tray.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/Tray.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/murmur/UnixMurmur.cpp mumble-1.2.3-87-gf7d8711/src/murmur/UnixMurmur.cpp --- mumble-1.2.3/src/murmur/UnixMurmur.cpp 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/UnixMurmur.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -161,12 +161,14 @@ void UnixMurmur::hupSignalHandler(int) { char a = 1; - ::write(iHupFd[0], &a, sizeof(a)); + ssize_t len = ::write(iHupFd[0], &a, sizeof(a)); + Q_UNUSED(len); } void UnixMurmur::termSignalHandler(int) { char a = 1; - ::write(iTermFd[0], &a, sizeof(a)); + ssize_t len = ::write(iTermFd[0], &a, sizeof(a)); + Q_UNUSED(len); } @@ -175,25 +177,29 @@ void UnixMurmur::handleSigHup() { qsnHup->setEnabled(false); char tmp; - ::read(iHupFd[1], &tmp, sizeof(tmp)); + ssize_t len = ::read(iHupFd[1], &tmp, sizeof(tmp)); + Q_UNUSED(len); - if (! qfLog || ! qfLog->isOpen()) { - if (qfLog) { - qWarning("Caught SIGHUP, but logfile not in use -- interpreting as hint to quit"); - QCoreApplication::instance()->quit(); - } else { - qWarning("Caught SIGHUP, but logfile not in use"); - } + if (! qfLog) { + qWarning("Caught SIGHUP, but logfile not in use"); + } else if (! qfLog->isOpen()) { + qWarning("Caught SIGHUP, but logfile not in use -- interpreting as hint to quit"); + QCoreApplication::instance()->quit(); } else { qWarning("Caught SIGHUP, will reopen %s", qPrintable(Meta::mp.qsLogfile)); - qfLog->close(); - qfLog->setFileName(Meta::mp.qsLogfile); - bool result = qfLog->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text); + + QFile *newlog = new QFile(Meta::mp.qsLogfile); + bool result = newlog->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text); if (! result) { - delete qfLog; - qfLog = NULL; + delete newlog; + qCritical("Failed to reopen logfile for writing, keeping old log"); } else { - qfLog->setTextModeEnabled(true); + QFile *oldlog = qfLog; + + newlog->setTextModeEnabled(true); + qfLog = newlog; + oldlog->close(); + delete oldlog; qWarning("Log rotated successfully"); } } @@ -203,7 +209,8 @@ void UnixMurmur::handleSigTerm() { qsnTerm->setEnabled(false); char tmp; - ::read(iTermFd[1], &tmp, sizeof(tmp)); + ssize_t len = ::read(iTermFd[1], &tmp, sizeof(tmp)); + Q_UNUSED(len); qCritical("Caught SIGTERM, exiting"); @@ -231,14 +238,22 @@ } else qFatal("Couldn't switch uid/gid."); #else - if (setregid(Meta::mp.uiGid, Meta::mp.uiGid) != 0) + if (::initgroups(qPrintable(Meta::mp.qsName), Meta::mp.uiGid) != 0) + qCritical("Can't initialize supplementary groups"); + if (::setgid(Meta::mp.uiGid) != 0) qCritical("Failed to switch to gid %d", Meta::mp.uiGid); - if (setresuid(Meta::mp.uiUid, Meta::mp.uiUid, 0) != 0) { + if (::setuid(Meta::mp.uiUid) != 0) { qFatal("Failed to become uid %d", Meta::mp.uiUid); } else { qCritical("Successfully switched to uid %d", Meta::mp.uiUid); initialcap(); } + if (!Meta::mp.qsHome.isEmpty()) { + // QDir::homePath is broken. It only looks at $HOME + // instead of getpwuid() so we have to set our home + // ourselves + ::setenv("HOME", qPrintable(Meta::mp.qsHome), 1); + } #endif } else if (bRoot) { qCritical("WARNING: You are running murmurd as root, without setting a uname in the ini file. This might be a security risk."); @@ -247,7 +262,7 @@ void UnixMurmur::initialcap() { #ifdef Q_OS_LINUX - cap_value_t caps[] = {CAP_NET_ADMIN, CAP_SETUID, CAP_SETGID, CAP_SYS_RESOURCE, CAP_DAC_OVERRIDE }; + cap_value_t caps[] = {CAP_NET_ADMIN, CAP_SETUID, CAP_SETGID, CAP_CHOWN, CAP_SYS_RESOURCE, CAP_DAC_OVERRIDE }; if (! bRoot) return; diff -Nru mumble-1.2.3/src/murmur/UnixMurmur.h mumble-1.2.3-87-gf7d8711/src/murmur/UnixMurmur.h --- mumble-1.2.3/src/murmur/UnixMurmur.h 2011-02-19 21:35:19.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/murmur/UnixMurmur.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Net.cpp mumble-1.2.3-87-gf7d8711/src/Net.cpp --- mumble-1.2.3/src/Net.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Net.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Net.h mumble-1.2.3-87-gf7d8711/src/Net.h --- mumble-1.2.3/src/Net.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Net.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,6 +31,10 @@ #ifndef _NET_H #define _NET_H +#ifndef DEFAULT_MUMBLE_PORT +#define DEFAULT_MUMBLE_PORT 64738 +#endif + #include "murmur_pch.h" struct HostAddress { diff -Nru mumble-1.2.3/src/OSInfo.cpp mumble-1.2.3-87-gf7d8711/src/OSInfo.cpp --- mumble-1.2.3/src/OSInfo.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/OSInfo.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/OSInfo.h mumble-1.2.3-87-gf7d8711/src/OSInfo.h --- mumble-1.2.3/src/OSInfo.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/OSInfo.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/PacketDataStream.h mumble-1.2.3-87-gf7d8711/src/PacketDataStream.h --- mumble-1.2.3/src/PacketDataStream.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/PacketDataStream.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/SSL.cpp mumble-1.2.3-87-gf7d8711/src/SSL.cpp --- mumble-1.2.3/src/SSL.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/SSL.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -28,9 +28,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include "SSL.h" #include "Version.h" +#include /* CAs we recommend to end users, so support these */ @@ -213,7 +213,7 @@ QStringList qsl; #ifdef SYSTEM_CA_DIR - QSslSocket::addDefaultCaCertificates(MUMTEXT(SYSTEM_CA_DIR)); + QSslSocket::addDefaultCaCertificates(QLatin1String(MUMTEXT(SYSTEM_CA_DIR))); #else #ifdef SYSTEM_CA_BUNDLE qsl << QLatin1String(MUMTEXT(SYSTEM_CA_BUNDLE)); diff -Nru mumble-1.2.3/src/SSL.h mumble-1.2.3-87-gf7d8711/src/SSL.h --- mumble-1.2.3/src/SSL.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/SSL.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Timer.cpp mumble-1.2.3-87-gf7d8711/src/Timer.cpp --- mumble-1.2.3/src/Timer.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Timer.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -31,15 +31,17 @@ #include #include "Timer.h" -Timer::Timer() { - uiStart = now(); +Timer::Timer(bool start) { + uiStart = start ? now() : 0; } quint64 Timer::elapsed() const { + Q_ASSERT(uiStart != 0); return now() - uiStart; } bool Timer::isElapsed(quint64 us) { + Q_ASSERT(uiStart != 0); if (elapsed() > us) { uiStart += us; return true; @@ -54,6 +56,18 @@ return e; } +bool Timer::isStarted() const { + return uiStart != 0; +} + +bool Timer::operator<(const Timer &other) const { + return uiStart > other.uiStart; +} + +bool Timer::operator>(const Timer &other) const { + return uiStart < other.uiStart; +} + #if defined(Q_OS_WIN) #include diff -Nru mumble-1.2.3/src/Timer.h mumble-1.2.3-87-gf7d8711/src/Timer.h --- mumble-1.2.3/src/Timer.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Timer.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. @@ -33,15 +33,24 @@ // All timer resolutions are in microseconds. -struct Timer { -protected: - quint64 uiStart; - static quint64 now(); -public: - Timer(); - bool isElapsed(quint64 us); - quint64 elapsed() const; - quint64 restart(); +class Timer { + protected: + quint64 uiStart; + static quint64 now(); + public: + Timer(bool start = true); + bool isElapsed(quint64 us); + quint64 elapsed() const; + quint64 restart(); + bool isStarted() const; + + /*! Compares the elapsed time, not the start time + */ + bool operator<(const Timer &other) const; + + /*! Compares the elapsed time, not the start time + */ + bool operator>(const Timer &other) const; }; #endif diff -Nru mumble-1.2.3/src/User.cpp mumble-1.2.3-87-gf7d8711/src/User.cpp --- mumble-1.2.3/src/User.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/User.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/User.h mumble-1.2.3-87-gf7d8711/src/User.h --- mumble-1.2.3/src/User.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/User.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig +/* Copyright (C) 2005-2011, Thorvald Natvig All rights reserved. diff -Nru mumble-1.2.3/src/Version.cpp mumble-1.2.3-87-gf7d8711/src/Version.cpp --- mumble-1.2.3/src/Version.cpp 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Version.cpp 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2010, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2010-2011, Stefan Hacker All rights reserved. @@ -40,6 +40,12 @@ return 0; } +QString MumbleVersion::toString(unsigned int v) { + int major, minor, patch; + fromRaw(v, &major, &minor, &patch); + return QString::fromLatin1("%1.%2.%3").arg(major).arg(minor).arg(patch); +} + bool MumbleVersion::get(int *major, int *minor, int *patch, const QString &version) { QRegExp rx(QLatin1String("(\\d+)\\.(\\d+)\\.(\\d+)")); diff -Nru mumble-1.2.3/src/Version.h mumble-1.2.3-87-gf7d8711/src/Version.h --- mumble-1.2.3/src/Version.h 2011-02-19 21:35:16.000000000 +0000 +++ mumble-1.2.3-87-gf7d8711/src/Version.h 2011-04-02 22:20:48.000000000 +0000 @@ -1,5 +1,5 @@ -/* Copyright (C) 2005-2010, Thorvald Natvig - Copyright (C) 2010, Stefan Hacker +/* Copyright (C) 2005-2011, Thorvald Natvig + Copyright (C) 2010-2011, Stefan Hacker All rights reserved. @@ -38,7 +38,7 @@ #define MUMTEXT(X) MUMXTEXT(X) #ifndef MUMBLE_VERSION -#define MUMBLE_VERSION 1.2.3 +#define MUMBLE_VERSION 1.2.3-87-gf7d8711 #endif #ifndef MUMBLE_VERSION #define MUMBLE_RELEASE "Compiled " __DATE__ " " __TIME__ @@ -49,6 +49,7 @@ class MumbleVersion { public: static unsigned int getRaw(const QString &version = QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING))); + static QString toString(unsigned int version); static bool get(int *major, int *minor, int *patch, const QString &version = QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING))); static unsigned int toRaw(int major, int minor, int patch);