diff options
author | Robert Adam <dev@robert-adam.de> | 2022-09-10 16:50:08 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-10 16:50:08 +0300 |
commit | c8bf3b203c404c5e7223979f62efc08c607b2be8 (patch) | |
tree | dd79c0de1366c1d23e039857bf729c369132431b | |
parent | dd55822180b50a2969ce8addc82757a4073a58bc (diff) | |
parent | 7f47d120c571828a154e240ede533aebc69bc5f2 (diff) |
Merge PR #5869: CHANGE(client): Drop support for all legacy codecs
87 files changed, 564 insertions, 3135 deletions
diff --git a/.gitmodules b/.gitmodules index bcd8afb96..5a4fea7b2 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,3 @@ -[submodule "speex"] - path = 3rdparty/speex-src - url = https://github.com/mumble-voip/speex.git -[submodule "celt-0.7.0-src"] - path = 3rdparty/celt-0.7.0-src - url = https://github.com/mumble-voip/celt-0.7.0.git [submodule "opus"] path = 3rdparty/opus url = https://gitlab.xiph.org/xiph/opus.git diff --git a/3rdparty/celt-0.7.0-build/CMakeLists.txt b/3rdparty/celt-0.7.0-build/CMakeLists.txt deleted file mode 100644 index 9f46276d5..000000000 --- a/3rdparty/celt-0.7.0-build/CMakeLists.txt +++ /dev/null @@ -1,80 +0,0 @@ -set(CELT_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../celt-0.7.0-src") -set(LIBCELT_SRC_DIR "${CELT_SRC_DIR}/libcelt") - -if(NOT EXISTS "${CELT_SRC_DIR}/COPYING") - message(FATAL_ERROR - "${CELT_SRC_DIR} was not found.\n" - "Please checkout the submodule:\n" - "git submodule update --init --recursive" - ) -endif() - -add_library(celt SHARED) - -# Celt doesn't work in unity builds -set_target_properties(celt PROPERTIES UNITY_BUILD FALSE) - -set_target_properties(celt PROPERTIES VERSION "0.7.0") - -target_compile_definitions(celt PRIVATE "HAVE_CONFIG_H") - -target_include_directories(celt PUBLIC SYSTEM "${CELT_SRC_DIR}/libcelt") - -if(MSVC) - # We include "win32" only for MSVC because MinGW uses the "config.h" for Unix-like systems. - target_include_directories(celt PRIVATE SYSTEM BEFORE "${CMAKE_CURRENT_SOURCE_DIR}/win32") -else() - target_include_directories(celt PRIVATE SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}) -endif() - -if(WIN32) - set_target_properties(celt - PROPERTIES - OUTPUT_NAME "celt0.0.7.0" - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} - ) - if(MINGW) - # Remove "lib" prefix. - set_target_properties(celt PROPERTIES PREFIX "") - endif() -else() - set_target_properties(celt - PROPERTIES - OUTPUT_NAME "celt0" - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} - ) -endif() - -target_sources(celt PRIVATE - "${LIBCELT_SRC_DIR}/bands.c" - "${LIBCELT_SRC_DIR}/celt.c" - "${LIBCELT_SRC_DIR}/cwrs.c" - "${LIBCELT_SRC_DIR}/entcode.c" - "${LIBCELT_SRC_DIR}/entdec.c" - "${LIBCELT_SRC_DIR}/entenc.c" - "${LIBCELT_SRC_DIR}/header.c" - "${LIBCELT_SRC_DIR}/kiss_fft.c" - "${LIBCELT_SRC_DIR}/kiss_fftr.c" - "${LIBCELT_SRC_DIR}/laplace.c" - "${LIBCELT_SRC_DIR}/mdct.c" - "${LIBCELT_SRC_DIR}/modes.c" - "${LIBCELT_SRC_DIR}/pitch.c" - "${LIBCELT_SRC_DIR}/psy.c" - "${LIBCELT_SRC_DIR}/quant_bands.c" - "${LIBCELT_SRC_DIR}/rangedec.c" - "${LIBCELT_SRC_DIR}/rangeenc.c" - "${LIBCELT_SRC_DIR}/rate.c" - "${LIBCELT_SRC_DIR}/vq.c" -) - -target_disable_warnings(celt) - -# We have to explicitly link to the "m" (math) library. -# See https://stackoverflow.com/q/1033898/3907364 for why -find_library(MATH_LIBRARY m) - -# If -lm exists -if(MATH_LIBRARY) - # Link it to prevent "contains an unresolvable reference to symbol sin: it's probably a plugin" - target_link_libraries(celt PUBLIC ${MATH_LIBRARY}) -endif() diff --git a/3rdparty/celt-0.7.0-build/celt-0.7.0.rc b/3rdparty/celt-0.7.0-build/celt-0.7.0.rc deleted file mode 100644 index cbec28050..000000000 --- a/3rdparty/celt-0.7.0-build/celt-0.7.0.rc +++ /dev/null @@ -1,42 +0,0 @@ -#include <winver.h> - -#ifndef DEBUG -#define VER_DEBUG 0L -#else -#define VER_DEBUG VS_FF_DEBUG -#endif - -#ifdef SNAPSHOT_BUILD -#define VER_RELEASE VS_FF_SPECIALBUILD|VS_FF_PRERELEASE -#else -#define VER_RELEASE 0L -#endif - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,3,0,0 - PRODUCTVERSION 1,3,0,0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS (VER_DEBUG|VER_RELEASE) - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0L - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - BEGIN - VALUE "FileDescription", "Mumble CELT 0.7.0 DLL" - VALUE "FileVersion", "1.3.0" - VALUE "ProductVersion", "1.3.0" - VALUE "OriginalFilename", "celt0.0.7.0.dll" - VALUE "ProductName", "Mumble" -#ifdef SNAPSHOT_BUILD - VALUE "SpecialBuild", "Snapshot development release" -#endif - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END - END diff --git a/3rdparty/celt-0.7.0-build/config.h b/3rdparty/celt-0.7.0-build/config.h deleted file mode 100644 index f2af5dc12..000000000 --- a/3rdparty/celt-0.7.0-build/config.h +++ /dev/null @@ -1,175 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* This is a build of CELT */ -#define CELT_BUILD /**/ - -/* Version extra */ -#define CELT_EXTRA_VERSION "" - -/* Version major */ -#define CELT_MAJOR_VERSION 0 - -/* Version micro */ -#define CELT_MICRO_VERSION 0 - -/* Version minor */ -#define CELT_MINOR_VERSION 7 - -/* Complete version string */ -#define CELT_VERSION "0.7.0" - -/* Compile as fixed-point */ -/* #undef DOUBLE_PRECISION */ - -/* Assertions */ -/* #undef ENABLE_ASSERTIONS */ - -/* Debug fixed-point implementation */ -/* #undef FIXED_DEBUG */ - -/* Compile as fixed-point */ -/* #undef FIXED_POINT */ - -/* Compile as floating-point */ -#define FLOATING_POINT /**/ - -/* Define to 1 if you have the <alloca.h> header file. */ -#define HAVE_ALLOCA_H 1 - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the <getopt.h> header file. */ -#define HAVE_GETOPT_H 1 - -/* Define to 1 if you have the `getopt_long' function. */ -#define HAVE_GETOPT_LONG 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define to 1 if you have the `winmm' library (-lwinmm). */ -/* #undef HAVE_LIBWINMM */ - -/* Define if you have C99's lrint function. */ -#define HAVE_LRINT 1 - -/* Define if you have C99's lrintf function. */ -#define HAVE_LRINTF 1 - -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the <stdint.h> header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the <sys/audioio.h> header file. */ -/* #undef HAVE_SYS_AUDIOIO_H */ - -/* Define to 1 if you have the <sys/soundcard.h> header file. */ -#define HAVE_SYS_SOUNDCARD_H 1 - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#define LT_OBJDIR ".libs/" - -/* Compile as fixed-point */ -/* #undef MIXED_PRECISION */ - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "" - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 8 - -/* The size of `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - -/* The size of `short', as computed by sizeof. */ -#define SIZEOF_SHORT 2 - -/* Static modes */ -/* #undef STATIC_MODES */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Make use of alloca */ -/* #undef USE_ALLOCA */ - -/* Use C99 variable-size arrays */ -#define VAR_ARRAYS /**/ - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#define restrict __restrict -/* Work around a bug in Sun C++: it does not support _Restrict, even - though the corresponding Sun C compiler does, which causes - "#define restrict _Restrict" in the previous line. Perhaps some future - version of Sun C++ will work with _Restrict; if so, it'll probably - define __RESTRICT, just as Sun C does. */ -#if defined __SUNPRO_CC && !defined __RESTRICT -# define _Restrict -#endif diff --git a/3rdparty/celt-0.7.0-build/win32/config.h b/3rdparty/celt-0.7.0-build/win32/config.h deleted file mode 100644 index 21f701047..000000000 --- a/3rdparty/celt-0.7.0-build/win32/config.h +++ /dev/null @@ -1,168 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define if building universal (internal helper macro) */ -/* #undef AC_APPLE_UNIVERSAL_BUILD */ - -/* This is a build of CELT */ -#define CELT_BUILD /**/ - -/* Version extra */ -#define CELT_EXTRA_VERSION "" - -/* Version major */ -#define CELT_MAJOR_VERSION 0 - -/* Version micro */ -#define CELT_MICRO_VERSION 2 - -/* Version minor */ -#define CELT_MINOR_VERSION 5 - -/* Complete version string */ -#define CELT_VERSION "0.5.2" - -/* Compile as fixed-point */ -/* #undef DOUBLE_PRECISION */ - -/* Assertions */ -/* #undef ENABLE_ASSERTIONS */ - -/* Debug fixed-point implementation */ -/* #undef FIXED_DEBUG */ - -/* Compile as fixed-point */ -/* #undef FIXED_POINT */ - -/* Compile as floating-point */ -#define FLOATING_POINT /**/ - -/* Define to 1 if you have the <alloca.h> header file. */ -#define HAVE_ALLOCA_H 1 - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the <getopt.h> header file. */ -#define HAVE_GETOPT_H 1 - -/* Define to 1 if you have the `getopt_long' function. */ -#define HAVE_GETOPT_LONG 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -// #define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define to 1 if you have the `winmm' library (-lwinmm). */ -/* #undef HAVE_LIBWINMM */ - -/* Define if you have C99's lrint function. */ -// #define HAVE_LRINT 1 - -/* Define if you have C99's lrintf function. */ -// #define HAVE_LRINTF 1 - -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the <stdint.h> header file. */ -// #define HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the <sys/audioio.h> header file. */ -/* #undef HAVE_SYS_AUDIOIO_H */ - -/* Define to 1 if you have the <sys/soundcard.h> header file. */ -#define HAVE_SYS_SOUNDCARD_H 1 - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#define LT_OBJDIR ".libs/" - -/* Compile as fixed-point */ -/* #undef MIXED_PRECISION */ - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "" - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 8 - -/* The size of `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 - -/* The size of `short', as computed by sizeof. */ -#define SIZEOF_SHORT 2 - -/* Static modes */ -/* #undef STATIC_MODES */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Make use of alloca */ -/* #undef USE_ALLOCA */ -#define USE_ALLOCA 1 - -/* Use C99 variable-size arrays */ -// #define VAR_ARRAYS /**/ - -/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most - significant byte first (like Motorola and SPARC, unlike Intel). */ -#if defined AC_APPLE_UNIVERSAL_BUILD -# if defined __BIG_ENDIAN__ -# define WORDS_BIGENDIAN 1 -# endif -#else -# ifndef WORDS_BIGENDIAN -/* # undef WORDS_BIGENDIAN */ -# endif -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#define inline -#endif - -/* Define to the equivalent of the C99 'restrict' keyword, or to - nothing if this is not supported. Do not define if restrict is - supported directly. */ -#define restrict diff --git a/3rdparty/celt-0.7.0-src b/3rdparty/celt-0.7.0-src deleted file mode 160000 -Subproject 01c3967bd4029583d2c13acc6690b5682616494 diff --git a/3rdparty/speex-build/AGC.cpp b/3rdparty/speex-build/AGC.cpp deleted file mode 100644 index b4faa19e2..000000000 --- a/3rdparty/speex-build/AGC.cpp +++ /dev/null @@ -1,153 +0,0 @@ -#include <QtCore> - -#ifdef Q_OS_WIN -#define _WIN32_IE 0x0600 -#include <windows.h> -#include <shellapi.h> -#define CALLGRIND_START_INSTRUMENTATION -#define CALLGRIND_STOP_INSTRUMENTATION -#define CALLGRIND_ZERO_STATS -#else -#include <valgrind/callgrind.h> -#endif - -#include <math.h> -#include <speex/speex.h> -#include <speex/speex_preprocess.h> - -#include "Timer.h" - -template<class T> -static inline double veccomp(const QVector<T> &a, const QVector<T> &b, const char *n) { - long double gdiff = 0.0; - if (a.size() != b.size()) { - qFatal("%s: %d <=> %d", n, a.size(), b.size()); - } - for (int i=0;i<a.size();++i) { - double diff = fabs(a[i] - b[i]); - if (diff > gdiff) - gdiff = diff; -#ifdef EXACT - - if (a[i] != b[i]) { -#else - union { T tv; - uint32_t uv; - } v1, v2; - v1.uv = v2.uv = 0; - v1.tv = a[i]; - v2.tv = b[i]; - if (fabsf(a[i] - b[i]) > 1000) { - qWarning("%08x %08x %08x", v1.uv, v2.uv, v1.uv ^ v2.uv); -#endif - qFatal("%s: Offset %d: %.10g <=> %.10g", n, i, static_cast<double>(a[i]), static_cast<double>(b[i])); - } - } - return gdiff; -} - -int main(int argc, char **argv) { - - CALLGRIND_STOP_INSTRUMENTATION; - CALLGRIND_ZERO_STATS; - - QCoreApplication a(argc, argv); - - QFile f((argc >= 2) ? argv[1] : "wb_male.wav"); - if (! f.open(QIODevice::ReadOnly)) { - qFatal("Failed to open file!"); - } - f.seek(36 + 8); - - QFile o("output.agc"); - if (! o.open(QIODevice::WriteOnly)) - qFatal("Failed to open out file!"); - - QFile vf("verify.agc"); - if (! vf.open(QIODevice::ReadOnly)) - qWarning("No verify!"); - - QDataStream out(&o); - QDataStream verify(&vf); - - static const int iFrameSize = 320; - int iarg; - - SpeexPreprocessState *spp = speex_preprocess_state_init(iFrameSize, 16000); - iarg = 0; - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_VAD, &iarg); - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_DENOISE, &iarg); - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_DEREVERB, &iarg); - - iarg = 1; - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_AGC, &iarg); - iarg = 21747; - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_AGC_TARGET, &iarg); - - - QVector<QByteArray> v; - while (1) { - QByteArray qba = f.read(iFrameSize * sizeof(short)); - if (qba.size() != iFrameSize * sizeof(short)) - break; - v.append(qba); - } - - int nframes = v.size(); - - qWarning("Ready to process %d frames of %d samples", nframes, iFrameSize); - - QVector<short *> qvIn; - QVector<short> sIn(nframes * iFrameSize); - - for (int i=0;i<nframes;i++) { - const short *ptr = reinterpret_cast<const short *>(v[i].constData()); - short *s = sIn.data() + i * iFrameSize; - for (int j=0;j<iFrameSize;++j) - s[j] = ptr[j]; - qvIn.append(s); - } - -#ifdef Q_OS_WIN - if (!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) - qWarning("Application: Failed to set priority!"); -#endif - - Timer t; - t.restart(); - - CALLGRIND_START_INSTRUMENTATION; - - for (int i=0;i<nframes;i++) { - speex_preprocess_run(spp, qvIn[i]); - - int v; - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_GET_AGC_GAIN, &v); - qWarning("%d %d", i, v); - - } - CALLGRIND_STOP_INSTRUMENTATION; - - quint64 e = t.elapsed(); - -#ifdef Q_OS_WIN - if (!SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS)) - qWarning("Application: Failed to reset priority!"); -#endif - - qWarning("Used %llu usec", e); - qWarning("%.2f times realtime", (20000ULL * nframes) / (e * 1.0)); - - if (! RUNNING_ON_VALGRIND) { - - out << sIn; - - if (vf.isOpen()) { - QVector<short> vIn; - verify >> vIn; - veccomp(vIn, sIn, "AGC"); - } - } - - return 0; -} diff --git a/3rdparty/speex-build/CMakeLists.txt b/3rdparty/speex-build/CMakeLists.txt deleted file mode 100644 index 90d2c68cc..000000000 --- a/3rdparty/speex-build/CMakeLists.txt +++ /dev/null @@ -1,97 +0,0 @@ -set(SPEEX_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../speex-src") -set(SPEEXDSP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../speexdsp") - -set(SPEEX_SRC_DIR "${SPEEX_DIR}/libspeex") -set(SPEEXDSP_SRC_DIR "${SPEEXDSP_DIR}/libspeexdsp") - -if(NOT EXISTS "${SPEEX_DIR}/COPYING" OR NOT EXISTS "${SPEEXDSP_DIR}/COPYING") - message(FATAL_ERROR - "${SPEEX_DIR} or ${SPEEXDSP_DIR} was not found. You need to do one of the following:\n" - "Option 1: Checkout the submodule:\n" - "git submodule update --init --recursive\n" - "Option 2: Use system Speex and SpeexDSP (v1.2 or later):\n" - "cmake .. -Dbundled-speex=OFF" - ) -endif() - -if(WIN32) - add_library(speex SHARED) - set_target_properties(speex PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - if(MINGW) - # Remove "lib" prefix. - set_target_properties(speex PROPERTIES PREFIX "") - endif() -else() - add_library(speex STATIC) -endif() - -# Speex doesn't use include guards in its headers, so unity builds will fail -set_target_properties(speex PROPERTIES UNITY_BUILD FALSE) - -target_compile_definitions(speex PRIVATE "HAVE_CONFIG_H") - -target_include_directories(speex PRIVATE SYSTEM "${SPEEX_DIR}/libspeex" "${SPEEXDSP_DIR}/libspeexdsp") -target_include_directories(speex PUBLIC SYSTEM "${SPEEX_DIR}/include" "${SPEEXDSP_DIR}/include") - -if(MSVC) - # We include "win32" only for MSVC because MinGW uses the "config.h" for Unix-like systems. - target_include_directories(speex PRIVATE SYSTEM BEFORE "${CMAKE_CURRENT_SOURCE_DIR}/win32") -else() - target_include_directories(speex PUBLIC SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}) -endif() - -if(WIN32) - target_compile_definitions(speex PRIVATE "_USE_MATH_DEFINES" "USE_SMALLFT") - target_sources(speex PRIVATE "mumble_speex_init.c") -endif() - -set(SPEEXDSP_SOURCES - "${SPEEXDSP_SRC_DIR}/fftwrap.c" - "${SPEEXDSP_SRC_DIR}/filterbank.c" - "${SPEEXDSP_SRC_DIR}/jitter.c" - "${SPEEXDSP_SRC_DIR}/mdf.c" - "${SPEEXDSP_SRC_DIR}/preprocess.c" - "${SPEEXDSP_SRC_DIR}/resample.c" - "${SPEEXDSP_SRC_DIR}/scal.c" - "${SPEEXDSP_SRC_DIR}/smallft.c" -) - -set(SPEEX_SOURCES - "${SPEEX_SRC_DIR}/bits.c" - "${SPEEX_SRC_DIR}/cb_search.c" - "${SPEEX_SRC_DIR}/exc_5_64_table.c" - "${SPEEX_SRC_DIR}/exc_5_256_table.c" - "${SPEEX_SRC_DIR}/exc_8_128_table.c" - "${SPEEX_SRC_DIR}/exc_10_16_table.c" - "${SPEEX_SRC_DIR}/exc_10_32_table.c" - "${SPEEX_SRC_DIR}/exc_20_32_table.c" - "${SPEEX_SRC_DIR}/filters.c" - "${SPEEX_SRC_DIR}/gain_table.c" - "${SPEEX_SRC_DIR}/gain_table_lbr.c" - "${SPEEX_SRC_DIR}/hexc_10_32_table.c" - "${SPEEX_SRC_DIR}/hexc_table.c" - "${SPEEX_SRC_DIR}/high_lsp_tables.c" - "${SPEEX_SRC_DIR}/kiss_fft.c" - "${SPEEX_SRC_DIR}/kiss_fftr.c" - "${SPEEX_SRC_DIR}/lpc.c" - "${SPEEX_SRC_DIR}/lsp.c" - "${SPEEX_SRC_DIR}/lsp_tables_nb.c" - "${SPEEX_SRC_DIR}/ltp.c" - "${SPEEX_SRC_DIR}/modes.c" - "${SPEEX_SRC_DIR}/modes_wb.c" - "${SPEEX_SRC_DIR}/nb_celp.c" - "${SPEEX_SRC_DIR}/quant_lsp.c" - "${SPEEX_SRC_DIR}/sb_celp.c" - "${SPEEX_SRC_DIR}/speex.c" - "${SPEEX_SRC_DIR}/speex_callbacks.c" - "${SPEEX_SRC_DIR}/speex_header.c" - "${SPEEX_SRC_DIR}/stereo.c" - "${SPEEX_SRC_DIR}/vbr.c" - "${SPEEX_SRC_DIR}/vorbis_psy.c" - "${SPEEX_SRC_DIR}/vq.c" - "${SPEEX_SRC_DIR}/window.c" -) - -target_sources(speex PRIVATE ${SPEEXDSP_SOURCES} ${SPEEX_SOURCES} "speex.def") - -target_disable_warnings(speex) diff --git a/3rdparty/speex-build/ResampMark.cpp b/3rdparty/speex-build/ResampMark.cpp deleted file mode 100644 index 01c0c4a33..000000000 --- a/3rdparty/speex-build/ResampMark.cpp +++ /dev/null @@ -1,383 +0,0 @@ -#include <QtCore> - -static const float tfreq1 = 48000.f; -static const float tfreq2 = 44100.f; -static const int qual = 3; -static const int loops = 2000 / qual; -// static const int loops = 1; -#define SM_VERIFY -// #define EXACT - -#ifdef Q_OS_WIN -#define _WIN32_IE 0x0600 -#include <windows.h> -#include <shellapi.h> -#include <mathimf.h> -#define CALLGRIND_START_INSTRUMENTATION -#define CALLGRIND_STOP_INSTRUMENTATION -#define CALLGRIND_ZERO_STATS -#define RUNNING_ON_VALGRIND 0 -#else -#include <sched.h> -#include <sys/mman.h> -#include <valgrind/callgrind.h> -#endif - -#include <math.h> -#include <speex/speex_resampler.h> - -#include <emmintrin.h> - - -#include "Timer.h" - -template<class T> -static inline double veccomp(const QVector<T> &a, const QVector<T> &b, const char *n) { - long double gdiff = 0.0; - if (a.size() != b.size()) { - qFatal("%s: %d <=> %d", n, a.size(), b.size()); - } - for (int i=0;i<a.size();++i) { - double diff = fabs(a[i] - b[i]); - if (diff > gdiff) - gdiff = diff; -#ifdef EXACT - - if (a[i] != b[i]) { -#else - union { T tv; - quint32 uv; - } v1, v2; - v1.uv = v2.uv = 0; - v1.tv = a[i]; - v2.tv = b[i]; - if (fabsf(a[i] - b[i]) > 1) { - qWarning("%08x %08x %08x", v1.uv, v2.uv, v1.uv ^ v2.uv); -#endif - qFatal("%s: Offset %d: %.10g <=> %.10g", n, i, static_cast<double>(a[i]), static_cast<double>(b[i])); - } - } - return gdiff; -} - -template<class T> -QPair<T, T> confint(const QVector<T> &vecin) { - long double avg = 0.0; - long double stddev = 0.0; - QVector<T> vec = vecin; - qSort(vec.begin(), vec.end()); - for (int i=0;i<vec.count() / 20;++i) { - vec.pop_front(); - vec.pop_back(); - } - - foreach(T v, vec) - avg += v; - avg /= vec.count(); - - foreach(T v, vec) - stddev += (v-avg)*(v-avg); - stddev = sqrtl(stddev / vec.count()); - return QPair<T,T>(static_cast<T>(avg), static_cast<T>(1.96 * stddev)); -} - -int main(int argc, char **argv) { - - CALLGRIND_STOP_INSTRUMENTATION; - CALLGRIND_ZERO_STATS; - - QCoreApplication a(argc, argv); - - QFile f((argc >= 2) ? argv[1] : "wb_male.wav"); - if (! f.open(QIODevice::ReadOnly)) { - qFatal("Failed to open file!"); - } - f.seek(36 + 8); - - QFile o("output.raw"); - if (!(RUNNING_ON_VALGRIND)) - if (! o.open(QIODevice::WriteOnly)) - qFatal("Failed to open output!"); - - QFile vf((argc >= 3) ? argv[2] : "verify.raw"); - if (! vf.open(QIODevice::ReadOnly)) { - qWarning("Failed to open validate file!"); - } - - QDataStream out(&o); - QDataStream verify(&vf); - - const int iFrameSize = 320; - - QVector<QByteArray> v; - while (1) { - QByteArray qba = f.read(iFrameSize * 2); - if (qba.size() != iFrameSize * 2) - break; - v.append(qba); - } - - int nframes = v.size(); - - - qWarning("Ready to process %d frames of %d samples", nframes, iFrameSize); - - QVector<short *> qvInShort; - QVector<float *> qvIn; - QVector<float *> qvDirect; - QVector<float *> qvInterpolate; - QVector<float *> qvInterpolateMC; - QVector<short *> qvInterpolateShort; - QVector<float *> qv8; - QVector<float *> qv96; - - const float sfraq1 = tfreq1 / 16000.0f; - float fOutSize1 = iFrameSize * sfraq1; - int iOutSize1 = lroundf(fOutSize1); - - const float sfraq2 = tfreq2 / 16000.0f; - float fOutSize2 = iFrameSize * sfraq2; - int iOutSize2 = lroundf(fOutSize2); - - int iOutSize8 = iFrameSize / 2; - int iOutSize96 = iFrameSize * 6; - - if (RUNNING_ON_VALGRIND) - nframes = qMin(nframes, 10); - - QVector<float> fInput(nframes * iFrameSize); - QVector<float> fDirect(nframes * iOutSize1); - QVector<float> fInterpolate(nframes * iOutSize2); - QVector<float> fInterpolateMC(nframes * iOutSize2); - QVector<short> sInterpolate(nframes * iOutSize2); - QVector<float> f96(nframes * iOutSize96); - QVector<float> f8(nframes *iOutSize8); - - for (int i=0;i<nframes;i++) { - short *s = reinterpret_cast<short *>(v[i].data()); - float *f = fInput.data() + i * iFrameSize; - - for (int j=0;j<iFrameSize;j++) - f[j]=s[j]+20; - - qvInShort.append(s); - qvIn.append(f); - qvDirect.append(fDirect.data() + i * iOutSize1); - qvInterpolate.append(fInterpolate.data() + i * iOutSize2); - qvInterpolateMC.append(fInterpolateMC.data() + i * iOutSize2); - qvInterpolateShort.append(sInterpolate.data() + i * iOutSize2); - qv8.append(f8.data() + i * iOutSize8); - qv96.append(f96.data() + i * iOutSize96); - } - - int err; - SpeexResamplerState *srs1 = speex_resampler_init(1, 16000, lroundf(tfreq1), qual, &err); - SpeexResamplerState *srs2 = speex_resampler_init(1, 16000, lroundf(tfreq2), qual, &err); - SpeexResamplerState *srs2i = speex_resampler_init(1, 16000, lroundf(tfreq2), qual, &err); - SpeexResamplerState *srss = speex_resampler_init(3, 16000, lroundf(tfreq2), qual, &err); - - SpeexResamplerState *srsto96 = speex_resampler_init(1, 16000, 96000, 5, &err); - SpeexResamplerState *srs8to96 = speex_resampler_init(1, 8000, 96000, qual, &err); - SpeexResamplerState *srs96to8 = speex_resampler_init(1, 96000, 8000, qual, &err); - - -#ifdef Q_OS_WIN - if (!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) - qWarning("Application: Failed to set priority!"); -#endif - - spx_uint32_t inlen; - spx_uint32_t outlen; - - Timer t; - quint64 e; - - if (! RUNNING_ON_VALGRIND) { -#ifndef Q_OS_WIN - struct sched_param sp; - sp.sched_priority = sched_get_priority_max(SCHED_FIFO); - - cpu_set_t cpuset; - CPU_ZERO(&cpuset); - CPU_SET(1, &cpuset); - - if (sched_setscheduler(getpid(), SCHED_FIFO, &sp) != 0) - qWarning("No realtime."); - if (mlockall(MCL_CURRENT | MCL_FUTURE) != 0) - qWarning("No mlock."); - if (sched_setaffinity(0, sizeof(cpuset), &cpuset) != 0) - qWarning("No affinity"); - - sched_yield(); -#endif - - for (int i=0;i<nframes;++i) { - inlen = iFrameSize; - outlen = iOutSize96; - speex_resampler_process_float(srsto96, 0, qvIn[i], &inlen, qv96[i], &outlen); - } - - QVector<unsigned long long> qvTimes; - QPair<unsigned long long, unsigned long long> ci; - - for (int j=0;j<loops;j++) { - t.restart(); - for (int i=0;i<nframes;i++) { - inlen = iFrameSize; - outlen = iOutSize1; - speex_resampler_process_float(srs1, 0, qvIn[i], &inlen, qvDirect[i], &outlen); - } - e = t.elapsed(); - qvTimes.append(e); - } - ci = confint(qvTimes); - qWarning("Direct: %8llu +/- %3llu usec (%d)", ci.first, ci.second, qvTimes.count(), qvTimes.count()); - - qvTimes.clear(); - - for (int j=0;j<loops;j++) { - t.restart(); - for (int i=0;i<nframes;i++) { - inlen = iFrameSize; - outlen = iOutSize2; - speex_resampler_process_float(srs2, 0, qvIn[i], &inlen, qvInterpolate[i], &outlen); - } - e = t.elapsed(); - qvTimes.append(e); - } - ci = confint(qvTimes); - qWarning("Interpolate: %8llu +/- %3llu usec (%d)", ci.first, ci.second, qvTimes.count()); - - qvTimes.clear(); - for (int j=0;j<loops;j++) { - t.restart(); - for (int i=0;i<nframes;i++) { - inlen = iOutSize96; - outlen = iOutSize8; - speex_resampler_process_float(srs96to8, 0, qv96[i], &inlen, qv8[i], &outlen); - } - e = t.elapsed(); - qvTimes.append(e); - } - ci = confint(qvTimes); - qWarning("96 => 8: %8llu +/- %3llu usec (%d)", ci.first, ci.second, qvTimes.count()); - - qvTimes.clear(); - t.restart(); - for (int j=0;j<loops;j++) { - t.restart(); - for (int i=0;i<nframes;i++) { - inlen = iOutSize8; - outlen = iOutSize96; - speex_resampler_process_float(srs8to96, 0, qv8[i], &inlen, qv96[i], &outlen); - } - e = t.elapsed(); - qvTimes.append(e); - } - ci = confint(qvTimes); - qWarning("8 => 96: %8llu +/- %3llu usec (%d)", ci.first, ci.second, qvTimes.count()); - - speex_resampler_reset_mem(srs1); - speex_resampler_reset_mem(srs2); - } - - t.restart(); - CALLGRIND_START_INSTRUMENTATION; - - for (int i=0;i<nframes;i++) { - inlen = iFrameSize; - outlen = iOutSize1; - speex_resampler_process_float(srs1, 0, qvIn[i], &inlen, qvDirect[i], &outlen); - - inlen = iFrameSize; - outlen = iOutSize2; - speex_resampler_process_float(srs2, 0, qvIn[i], &inlen, qvInterpolate[i], &outlen); - - inlen = iFrameSize; - outlen = iOutSize2; - speex_resampler_process_int(srs2i, 0, qvInShort[i], &inlen, qvInterpolateShort[i], &outlen); - - inlen = iFrameSize / 4; - outlen = iOutSize2 / 4; - speex_resampler_process_interleaved_float(srss, qvIn[i], &inlen, qvInterpolateMC[i], &outlen); - } - e = t.elapsed(); - -#ifdef Q_OS_WIN - if (!SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS)) - qWarning("Application: Failed to reset priority!"); -#endif - - const int freq[10] = { 22050, 32000, 11025, 16000, 48000, 41000, 8000, 96000, 11025, 1600 }; - - QVector<float> fMagic; - - for (int f=0;f<10;f++) { - float fbuff[32767]; - speex_resampler_set_rate(srs1, 16000, freq[f]); - for (int q = 0;q < 10;q++) { - speex_resampler_set_quality(srs1, (3*q) % 7); - inlen = iFrameSize; - outlen = 32767; - speex_resampler_process_float(srs1, 0, qvIn[(f*10+q) % nframes], &inlen, fbuff, &outlen); - for (int j=0;j<outlen;j++) - fMagic.append(fbuff[j]); - } - inlen = iFrameSize; - outlen = 32767; - speex_resampler_process_float(srs1, 0, NULL, &inlen, fbuff, &outlen); - for (int j=0;j<outlen;j++) - fMagic.append(fbuff[j]); - } - - // Cropped magic test - for (int f=0;f<10;f++) { - float fbuff[32767]; - speex_resampler_set_rate(srs1, 16000, freq[f]); - for (int q = 0;q < 10;q++) { - speex_resampler_set_quality(srs1, (3*q) % 7); - inlen = iFrameSize; - outlen = 16; - speex_resampler_process_float(srs1, 0, qvIn[(f*10+q) % nframes], &inlen, fbuff, &outlen); - for (int j=0;j<outlen;j++) - fMagic.append(fbuff[j]); - } - inlen = iFrameSize; - outlen = 32767; - speex_resampler_process_float(srs1, 0, NULL, &inlen, fbuff, &outlen); - for (int j=0;j<outlen;j++) - fMagic.append(fbuff[j]); - } - - - CALLGRIND_STOP_INSTRUMENTATION; - - qWarning("Used %llu usec", e); - qWarning("%.2f times realtime", (20000ULL * nframes) / (e * 1.0)); - - if (! RUNNING_ON_VALGRIND) { - QVector<float> vDirect; - QVector<float> vInterpolate; - QVector<short> vsInterpolate; - QVector<float> vMagic; - QVector<float> vInterpolateMC; - - out << fDirect << fInterpolate << sInterpolate << fMagic << fInterpolateMC; - - if (vf.isOpen()) { - verify >> vDirect >> vInterpolate >> vsInterpolate >> vMagic >> vInterpolateMC; - - double rmsd = veccomp(vDirect, fDirect, "SRS1"); - double rmsi = veccomp(vInterpolate, fInterpolate, "SRS2"); - veccomp(vsInterpolate, sInterpolate, "SRS2i"); - veccomp(vMagic, fMagic, "Magic"); - veccomp(vInterpolateMC, fInterpolateMC, "MC"); - qWarning("Direct: %g", rmsd); - qWarning("Interp: %g", rmsi); - } else { - qWarning("No verification!"); - } - } - - return 0; -} diff --git a/3rdparty/speex-build/SpeexMark.cpp b/3rdparty/speex-build/SpeexMark.cpp deleted file mode 100644 index 937c273a3..000000000 --- a/3rdparty/speex-build/SpeexMark.cpp +++ /dev/null @@ -1,179 +0,0 @@ - -#if defined(__INTEL_COMPILER) -#include <mathimf.h> -#else -#include <math.h> -#endif - -#include <QtCore> - -static const float tfreq1 = 48000.f; -static const float tfreq2 = 44100.f; - -#ifdef Q_OS_WIN -#define _WIN32_IE 0x0600 -#include <windows.h> -#include <shellapi.h> -#define CALLGRIND_START_INSTRUMENTATION -#define CALLGRIND_STOP_INSTRUMENTATION -#define CALLGRIND_ZERO_STATS -#define lroundf(x) ( static_cast<long int>( (x) + ((x) >= 0.0f ? 0.5f : -0.5f) ) ) -#define lround(x) ( static_cast<long int>( (x) + ((x) >= 0.0 ? 0.5 : -0.5) ) ) -#else -#include <valgrind/callgrind.h> -#endif - -#include <speex/speex.h> -#include <speex/speex_jitter.h> -#include <speex/speex_preprocess.h> -#include <speex/speex_echo.h> -#include <speex/speex_callbacks.h> -#include <speex/speex_resampler.h> - -#include "Timer.h" - -int main(int argc, char **argv) { - - CALLGRIND_STOP_INSTRUMENTATION; - CALLGRIND_ZERO_STATS; - - QCoreApplication a(argc, argv); - - QFile f((argc >= 2) ? argv[1] : "wb_male.wav"); - if (! f.open(QIODevice::ReadOnly)) { - qFatal("Failed to open file!"); - } - f.seek(36 + 8); - - void *enc = speex_encoder_init(&speex_wb_mode); - - int iarg = 1; - speex_encoder_ctl(enc, SPEEX_SET_VBR, &iarg); - iarg = 0; - speex_encoder_ctl(enc, SPEEX_SET_VAD, &iarg); - speex_encoder_ctl(enc, SPEEX_SET_DTX, &iarg); - - float farg = 6.0; - speex_encoder_ctl(enc, SPEEX_SET_VBR_QUALITY, &farg); - speex_encoder_ctl(enc, SPEEX_GET_BITRATE, &iarg); - speex_encoder_ctl(enc, SPEEX_SET_VBR_MAX_BITRATE, &iarg); - - iarg = 4; - speex_encoder_ctl(enc, SPEEX_SET_COMPLEXITY, &iarg); - - int iFrameSize; - speex_encoder_ctl(enc, SPEEX_GET_FRAME_SIZE, &iFrameSize); - - void *dec = speex_decoder_init(&speex_wb_mode); - iarg = 1; - speex_decoder_ctl(dec, SPEEX_SET_ENH, &iarg); - - SpeexPreprocessState *spp = speex_preprocess_state_init(iFrameSize, 16000); - iarg = 1; - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_VAD, &iarg); - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_DENOISE, &iarg); - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_AGC, &iarg); - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_DEREVERB, &iarg); - - SpeexEchoState *ses = speex_echo_state_init(iFrameSize, iFrameSize * 10); - iarg = 16000; - speex_echo_ctl(ses, SPEEX_SET_SAMPLING_RATE, &iarg); - speex_preprocess_ctl(spp, SPEEX_PREPROCESS_SET_ECHO_STATE, ses); - - QVector<QByteArray> v; - while (1) { - QByteArray qba = f.read(iFrameSize * 2); - if (qba.size() != iFrameSize * 2) - break; - v.append(qba); - } - - int nframes = v.size(); - - qWarning("Ready to process %d frames of %d samples", nframes, iFrameSize); - - QVector<short *> sv; - - short tframe[2048]; - for (int i=0;i<iFrameSize;i++) - tframe[i] = 0; - - for (int i=0;i<nframes;i++) { - sv.append(reinterpret_cast<short *>(v[i].data())); - } - - float oframe[2048]; - float resampframe[32768]; - - const float sfraq1 = tfreq1 / 16000.0f; - float fOutSize1 = iFrameSize * sfraq1; - int iOutSize1 = lroundf(fOutSize1); - - const float sfraq2 = tfreq2 / 16000.0f; - float fOutSize2 = iFrameSize * sfraq2; - int iOutSize2 = lroundf(fOutSize2); - - int err; - SpeexResamplerState *srs1 = speex_resampler_init(1, 16000, lroundf(tfreq1), 3, &err); - SpeexResamplerState *srs2 = speex_resampler_init(1, 16000, lroundf(tfreq2), 3, &err); - - SpeexBits sb; - speex_bits_init(&sb); - -#ifdef Q_OS_WIN - if (!SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)) - qWarning("Application: Failed to set priority!"); -#endif - - int len; - char data[4096]; - spx_uint32_t inlen; - spx_uint32_t outlen; - - Timer t; - t.restart(); - - nframes = qMin(nframes, 10); - - int iter = 100; - - CALLGRIND_START_INSTRUMENTATION; - - for (int j=0;j<iter;j++) { - for (int i=0;i<nframes-2;i++) { - speex_bits_reset(&sb); - - speex_echo_cancellation(ses, sv[i], sv[i+2], tframe); - - speex_preprocess_run(spp, tframe); - - speex_encode_int(enc, tframe, &sb); - len = speex_bits_nbytes(&sb); - speex_bits_write(&sb, data, len); - - speex_bits_read_from(&sb, data, len); - speex_decode(dec, &sb, oframe); - - inlen = iFrameSize; - outlen = iOutSize1; - speex_resampler_process_float(srs1, 0, oframe, &inlen, resampframe, &outlen); - - inlen = iFrameSize; - outlen = iOutSize2; - speex_resampler_process_float(srs2, 0, oframe, &inlen, resampframe, &outlen); - - } - } - CALLGRIND_STOP_INSTRUMENTATION; - - quint64 e = t.elapsed(); - -#ifdef Q_OS_WIN - if (!SetPriorityClass(GetCurrentProcess(),NORMAL_PRIORITY_CLASS)) - qWarning("Application: Failed to reset priority!"); -#endif - - qWarning("Used %llu usec", e); - qWarning("%.2f times realtime", (20000ULL * nframes * iter) / (e * 1.0)); - return 0; -} diff --git a/3rdparty/speex-build/config.h b/3rdparty/speex-build/config.h deleted file mode 100644 index 7b3f42b68..000000000 --- a/3rdparty/speex-build/config.h +++ /dev/null @@ -1,152 +0,0 @@ -/* config.h. Generated from config.h.in by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Make use of ARM4 assembly optimizations */ -/* #undef ARM4_ASM */ - -/* Make use of ARM5E assembly optimizations */ -/* #undef ARM5E_ASM */ - -/* Make use of Blackfin assembly optimizations */ -/* #undef BFIN_ASM */ - -/* Enable valgrind extra checks */ -/* #undef ENABLE_VALGRIND */ - -/* Debug fixed-point implementation */ -/* #undef FIXED_DEBUG */ - -/* Compile as fixed-point */ -/* #undef FIXED_POINT */ - -/* Compile as floating-point */ -#define FLOATING_POINT - -/* Define to 1 if you have the <alloca.h> header file. */ -#define HAVE_ALLOCA_H 1 - -/* Define to 1 if you have the <dlfcn.h> header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you have the `getopt_long' function. */ -#define HAVE_GETOPT_LONG 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `m' library (-lm). */ -#define HAVE_LIBM 1 - -/* Define to 1 if you have the `winmm' library (-lwinmm). */ -/* #undef HAVE_LIBWINMM */ - -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the <stdint.h> header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the <sys/audioio.h> header file. */ -/* #undef HAVE_SYS_AUDIOIO_H */ - -/* Define to 1 if you have the <sys/soundcard.h> header file. */ -#define HAVE_SYS_SOUNDCARD_H 1 - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "" - -/* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 - -/* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 4 - -/* The size of `short', as computed by sizeof. */ -#define SIZEOF_SHORT 2 - -/* Version extra */ -#define SPEEX_EXTRA_VERSION "-git" - -/* Version major */ -#define SPEEX_MAJOR_VERSION 1 - -/* Version micro */ -#define SPEEX_MICRO_VERSION 15 - -/* Version minor */ -#define SPEEX_MINOR_VERSION 1 - -/* Complete version string */ -#define SPEEX_VERSION "1.2beta3" - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Enable support for TI C55X DSP */ -/* #undef TI_C55X */ - -/* Make use of alloca */ -/* #undef USE_ALLOCA */ - -/* Use C99 variable-size arrays */ -#define VAR_ARRAYS - -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -/* #undef WORDS_BIGENDIAN */ - -/* Enable SSE support */ -#ifdef __SSE__ -#define _USE_SSE -#endif - -#ifdef __SSE2__ -#define _USE_SSE2 -#endif - -#define EXPORT - -#define USE_SMALLFT - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to equivalent of C99 restrict keyword, or to nothing if this is not - supported. Do not define if restrict is supported directly. */ -#define restrict __restrict diff --git a/3rdparty/speex-build/speex_config_types.h b/3rdparty/speex-build/speex_config_types.h deleted file mode 100644 index bd548546b..000000000 --- a/3rdparty/speex-build/speex_config_types.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __SPEEX_TYPES_H__ -#define __SPEEX_TYPES_H__ - -/* these are filled in by configure */ -typedef short spx_int16_t; -typedef unsigned short spx_uint16_t; -typedef int spx_int32_t; -typedef unsigned int spx_uint32_t; - -#endif - diff --git a/3rdparty/speex-build/speexdsp_config_types.h b/3rdparty/speex-build/speexdsp_config_types.h deleted file mode 100644 index bd548546b..000000000 --- a/3rdparty/speex-build/speexdsp_config_types.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef __SPEEX_TYPES_H__ -#define __SPEEX_TYPES_H__ - -/* these are filled in by configure */ -typedef short spx_int16_t; -typedef unsigned short spx_uint16_t; -typedef int spx_int32_t; -typedef unsigned int spx_uint32_t; - -#endif - diff --git a/3rdparty/speex-build/win32/config.h b/3rdparty/speex-build/win32/config.h deleted file mode 100644 index 47a4ffd13..000000000 --- a/3rdparty/speex-build/win32/config.h +++ /dev/null @@ -1,26 +0,0 @@ -// Microsoft version of 'inline' -#define inline __inline - -// In Visual Studio, _M_IX86_FP=1 means /arch:SSE was used, likewise -// _M_IX86_FP=2 means /arch:SSE2 was used. -// Also, enable both _USE_SSE and _USE_SSE2 if we're compiling for x86-64 -#if _M_IX86_FP >= 1 || defined(_M_X64) -#define _USE_SSE -#endif - -#if _M_IX86_FP >= 2 || defined(_M_X64) -#define _USE_SSE2 -#endif - -// Visual Studio support alloca(), but it always align variables to 16-bit -// boundary, while SSE need 128-bit alignment. So we disable alloca() when -// SSE is enabled. -#ifndef _USE_SSE -# define USE_ALLOCA -#endif - -/* Default to floating point */ -#define FLOATING_POINT - -/* We don't support visibility on Win32 */ -#define EXPORT diff --git a/3rdparty/speex-src b/3rdparty/speex-src deleted file mode 160000 -Subproject ecc63b360cbf6675d905ae278776c628fdfda00 diff --git a/3rdparty/speexdsp-build/CMakeLists.txt b/3rdparty/speexdsp-build/CMakeLists.txt new file mode 100644 index 000000000..470444fdf --- /dev/null +++ b/3rdparty/speexdsp-build/CMakeLists.txt @@ -0,0 +1,153 @@ +# Copyright 2020-2022 The Mumble Developers. All rights reserved. +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file at the root of the +# Mumble source tree or at <https://www.mumble.info/LICENSE>. + +set(SPEEXDSP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../speexdsp") + +set(SPEEXDSP_SRC_DIR "${SPEEXDSP_DIR}/libspeexdsp") + +if(NOT EXISTS "${SPEEXDSP_DIR}/COPYING") + message(FATAL_ERROR + "${SPEEX_DIR} or ${SPEEXDSP_DIR} was not found. You need to do one of the following:\n" + "Option 1: Checkout the submodule:\n" + "git submodule update --init --recursive\n" + "Option 2: Use system SpeexDSP (v1.2 or later):\n" + "cmake .. -Dbundled-speex=OFF" + ) +endif() + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +include(try_compile_snippet) +include(CheckIncludeFile) + +if(WIN32) + add_library(speexdsp SHARED) + set_target_properties(speexdsp PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + if(MINGW) + # Remove "lib" prefix. + set_target_properties(speexdsp PROPERTIES PREFIX "") + endif() +else() + add_library(speexdsp STATIC) +endif() + +CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H) + +if(NOT HAVE_STDINT_H) + message(FATAL_ERROR "Assumed header stdint.h to be available") +endif() + +target_include_directories(speexdsp PRIVATE SYSTEM "${SPEEXDSP_DIR}/libspeexdsp") +target_include_directories(speexdsp PUBLIC SYSTEM "${SPEEXDSP_DIR}/include") + +if(WIN32) + target_compile_definitions(speexdsp PRIVATE "_USE_MATH_DEFINES") + target_sources(speexdsp PRIVATE "mumble_speex_init.c") +endif() + +set(SPEEXDSP_SOURCES + "${SPEEXDSP_SRC_DIR}/fftwrap.c" + "${SPEEXDSP_SRC_DIR}/filterbank.c" + "${SPEEXDSP_SRC_DIR}/jitter.c" + "${SPEEXDSP_SRC_DIR}/mdf.c" + "${SPEEXDSP_SRC_DIR}/preprocess.c" + "${SPEEXDSP_SRC_DIR}/resample.c" + "${SPEEXDSP_SRC_DIR}/scal.c" + "${SPEEXDSP_SRC_DIR}/smallft.c" +) + +target_sources(speexdsp PRIVATE ${SPEEXDSP_SOURCES} "speexdsp.def") + +########################################################## +####### Check whether given features are available ####### +########################################################## + +try_compile_snippet( + RESULT_VAR VARIABLE_SIZE_ARRAYS_SUPPORTED + LANG C + STATEMENTS + "int size = 4;" + "int array[size];" +) + +message(STATUS "speexdsp: Variable sized arrays supported: ${VARIABLE_SIZE_ARRAYS_SUPPORTED}") +if(VARIABLE_SIZE_ARRAYS_SUPPORTED) + target_compile_definitions(speexdsp PRIVATE "VAR_ARRAYS") +endif() + +try_compile_snippet( + RESULT_VAR ALLOCA_AVAILABLE + LANG C + INCLUDES + "#ifdef HAVE_ALLOCA_H\n#include <alloca.h>\n#endif" + INCLUDE_HEADERS + "stdlib.h" + STATEMENTS + "int size = 10;" + "int *array = alloca(size);" +) + +message(STATUS "speexdsp: alloca available: ${ALLOCA_AVAILABLE}") +if(ALLOCA_AVAILABLE AND NOT VARIABLE_SIZE_ARRAYS_SUPPORTED) + # If available, variable-sized arrays should be preferred + target_compile_definitions(speexdsp PRIVATE "USE_ALLOCA") +endif() + +try_compile_snippet( + RESULT_VAR SSE_AVAILABLE + LANG C + INCLUDE_HEADERS + "xmmintrin.h" + STATEMENTS + "float a = 0.8;" + "float b = 0.5;" + "_mm_add_ps(_mm_loadu_ps(&a), _mm_loadu_ps(&b));" +) + +message(STATUS "speexdsp: SSE available: ${SSE_AVAILABLE}") +if(SSE_AVAILABLE) + target_compile_definitions(speexdsp PRIVATE "USE_SSE") +endif() + +try_compile_snippet( + RESULT_VAR SSE2_AVAILABLE + LANG C + INCLUDE_HEADERS + "emmintrin.h" + STATEMENTS + "double a = 0.8;" + "double b = 0.5;" + "_mm_add_pd(_mm_loadu_pd(&a), _mm_loadu_pd(&b));" +) + +message(STATUS "speexdsp: SSE2 available: ${SSE2_AVAILABLE}") +if(SSE2_AVAILABLE) + target_compile_definitions(speexdsp PRIVATE "USE_SSE2") +endif() + +# We simply assume that any machine this runs on has a floating point unit (FPU) available and +# thus we'll always use the floating point implementation, for which smallft is the default +# FFT implementation. +target_compile_definitions(speexdsp PRIVATE "FLOATING_POINT") +target_compile_definitions(speexdsp PRIVATE "USE_SMALLFT") + +# Define empty EXPORT macro, as we don't care about messing with symbol visibility +target_compile_definitions(speexdsp PRIVATE EXPORT=) + + +# Generate a header with the necessary type definitions for fixed-width integers. We have +# checked before, that stdint.h is available, so we'll just default to using that. +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/include/speexdsp_config_types.h" +"#ifndef SPEEXDSP_CONFIGTYPES_H__\n\ +#define SPEEXDSP_CONFIGTYPES_H__ +#include <stdint.h>\n\ +\n\ +typedef int16_t spx_int16_t;\n\ +typedef uint16_t spx_uint16_t;\n\ +typedef int32_t spx_int32_t;\n\ +typedef uint32_t spx_uint32_t;\n\ +#endif\n") + +target_include_directories(speexdsp PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/include") diff --git a/3rdparty/speexdsp-build/cmake/try_compile_snippet.cmake b/3rdparty/speexdsp-build/cmake/try_compile_snippet.cmake new file mode 100644 index 000000000..de9c590f4 --- /dev/null +++ b/3rdparty/speexdsp-build/cmake/try_compile_snippet.cmake @@ -0,0 +1,68 @@ +# Copyright 2022 The Mumble Developers. All rights reserved. +# Use of this source code is governed by a BSD-style license +# that can be found in the LICENSE file at the root of the +# Mumble source tree or at <https://www.mumble.info/LICENSE>. + +function(try_compile_snippet) + set(options) + set(oneValueArgs RESULT_VAR LANG) + set(multiValueArgs INCLUDES INCLUDE_HEADERS STATEMENTS COMPILE_DEFINITIONS LINK_OPTIONS LINK_LIBRARIES OUTPUT_VARIABLE CMAKE_FLAGS) + + cmake_parse_arguments(COMPILE_SNIPPET "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if(COMPILE_SNIPPET_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "try_compile_snippet: Unrecognized arguments: ${COMPILE_SNIPPET_UNPARSED_ARGUMENTS}") + endif() + + set(REQUIRED_ARGS ${oneValueArgs} STATEMENTS) + foreach(CURRENT IN LISTS REQUIRED_ARGS) + if(NOT COMPILE_SNIPPET_${CURRENT}) + message(FATAL_ERROR "try_compile_snippet: Missing argument ${CURRENT}") + endif() + endforeach() + + list(JOIN COMPILE_SNIPPET_INCLUDES "\n" INCLUDE_STATEMENTS) + string(APPEND INCLUDE_STATEMENTS "\n") + foreach(CURRENT IN LISTS COMPILE_SNIPPET_INCLUDE_HEADERS) + string(APPEND INCLUDE_STATEMENTS "\n#include <${CURRENT}>") + endforeach() + + list(JOIN COMPILE_SNIPPET_STATEMENTS ";\n" JOINED_STATEMENTS) + set(SOURCE_CODE "\ + ${INCLUDE_STATEMENTS}\n\ + \n\ + int main() {\n\ + ${JOINED_STATEMENTS};\n\ + \n\ + return 0;\n\ + }" + ) + + string(TOLOWER "${COMPILE_SNIPPET_LANG}" COMPILE_SNIPPET_LANG) + + if("${COMPILE_SNIPPET_LANG}" MATCHES "^(cxx|cpp|c\\+\\+)$") + set(FILE_EXTENSION "cpp") + elseif("${COMPILE_SNIPPET_LANG}" MATCHES "^(c)$") + set(FILE_EXTENSION "c") + else() + message(FATAL_ERROR "try_compile_snippet: Unsupported language ${COMPILE_SNIPPET_LANG}") + endif() + + set(FILENAME "${CMAKE_CURRENT_BINARY_DIR}/try_compile_snippet.${FILE_EXTENSION}") + + file(WRITE "${FILENAME}" "${SOURCE_CODE}") + + try_compile(COMPILE_SUCCESS "${CMAKE_CURRENT_BINARY_DIR}" + SOURCES "${FILENAME}" + CMAKE_FLAGS ${COMPILE_SNIPPET_CMAKE_FLAGS} + COMPILE_DEFINITIONS ${COMPILE_SNIPPET_COMPILE_DEFINITIONS} + LINK_OPTIONS ${COMPILE_SNIPPET_LINK_OPTIONS} + LINK_LIBRARIES ${COMPILE_SNIPPET_LINK_LIBRARIES} + OUTPUT_VARIABLE BUILD_OUTPUT + ) + + set(${COMPILE_SNIPPET_RESULT_VAR} ${COMPILE_SUCCESS} PARENT_SCOPE) + if(COMPILE_SNIPPET_OUTPUT_VARIABLE) + set(${COMPILE_SNIPPET_OUTPUT_VARIABLE} ${BUILD_OUTPUT} PARENT_SCOPE) + endif() +endfunction() diff --git a/3rdparty/speex-build/mumble_speex_init.c b/3rdparty/speexdsp-build/mumble_speex_init.c index 0be73bc91..0be73bc91 100644 --- a/3rdparty/speex-build/mumble_speex_init.c +++ b/3rdparty/speexdsp-build/mumble_speex_init.c diff --git a/3rdparty/speex-build/speex.def b/3rdparty/speexdsp-build/speexdsp.def index 1a23179ff..3a0e9e735 100644 --- a/3rdparty/speex-build/speex.def +++ b/3rdparty/speexdsp-build/speexdsp.def @@ -1,68 +1,8 @@ ; -; speex.def +; speexdsp.def ; -LIBRARY speex +LIBRARY speexdsp EXPORTS -; -; -; speex.h -; -speex_encoder_init -speex_encoder_destroy -speex_encode -speex_encode_int -speex_encoder_ctl -speex_decoder_init -speex_decoder_destroy -speex_decode -speex_decode_int -speex_decoder_ctl -speex_mode_query -speex_lib_ctl -speex_lib_get_mode - -; -; speex_bits.h -; -speex_bits_init -speex_bits_init_buffer -speex_bits_set_bit_buffer -speex_bits_destroy -speex_bits_reset -speex_bits_rewind -speex_bits_read_from -speex_bits_read_whole_bytes -speex_bits_write -speex_bits_write_whole_bytes -speex_bits_pack -speex_bits_unpack_signed -speex_bits_unpack_unsigned -speex_bits_nbytes -speex_bits_peek_unsigned -speex_bits_peek -speex_bits_advance -speex_bits_remaining -speex_bits_insert_terminator - -; -; speex_callbacks.h -; -speex_inband_handler -speex_std_mode_request_handler -speex_std_high_mode_request_handler -speex_std_char_handler -speex_default_user_handler -speex_std_low_mode_request_handler -speex_std_vbr_request_handler -speex_std_enh_request_handler -speex_std_vbr_quality_request_handler - -; -; speex_header.h -; -speex_init_header -speex_header_to_packet -speex_packet_to_header ; ; speex_echo.h diff --git a/docs/dev/build-instructions/cmake_options.md b/docs/dev/build-instructions/cmake_options.md index 0fa83201f..f4f165314 100644 --- a/docs/dev/build-instructions/cmake_options.md +++ b/docs/dev/build-instructions/cmake_options.md @@ -34,11 +34,6 @@ Build an x86 overlay Bundle Qt's translations as well (Default: ${static}) -### bundled-celt - -Build the included version of CELT instead of looking for one on the system. -(Default: ON) - ### bundled-gsl Use the bundled GSL version instead of looking for one on the system diff --git a/installer/ClientInstaller.cs b/installer/ClientInstaller.cs index 8c30f4283..6c463ed30 100644 --- a/installer/ClientInstaller.cs +++ b/installer/ClientInstaller.cs @@ -86,10 +86,9 @@ public class ClientInstaller : MumbleInstall { // 64 bit this.Platform = WixSharp.Platform.x64; binaries = new List<string>() { - "celt0.0.7.0.dll", "opus.dll", "rnnoise.dll", - "speex.dll", + "speexdsp.dll", "mumble.exe", "mumble_app.dll", }; @@ -108,10 +107,9 @@ public class ClientInstaller : MumbleInstall { // 32 bit this.Platform = WixSharp.Platform.x86; binaries = new List<string>() { - "celt0.0.7.0.dll", "opus.dll", "rnnoise.dll", - "speex.dll", + "speexdsp.dll", "mumble.exe", "mumble_app.dll", }; diff --git a/src/mumble/Audio.cpp b/src/mumble/Audio.cpp index 0ec63e8a9..12f5c4390 100644 --- a/src/mumble/Audio.cpp +++ b/src/mumble/Audio.cpp @@ -7,7 +7,6 @@ #include "AudioInput.h" #include "AudioOutput.h" -#include "CELTCodec.h" #include "Log.h" #include "OpusCodec.h" #include "PacketDataStream.h" @@ -41,36 +40,10 @@ void CodecInit::initialize() { QObject::tr("CodecInit: Failed to load Opus, it will not be available for encoding/decoding audio.")); delete oCodec; } - - if (Global::get().s.bDisableCELT) { - // Kill switch for CELT activated. Do not initialize it. - return; - } - - CELTCodec *codec = nullptr; - - codec = new CELTCodec070(QLatin1String("0.7.0")); - if (codec->isValid()) { - codec->report(); - Global::get().qmCodecs.insert(codec->bitstreamVersion(), codec); - } else { - delete codec; - codec = new CELTCodec070(QLatin1String("0.0.0")); - if (codec->isValid()) { - codec->report(); - Global::get().qmCodecs.insert(codec->bitstreamVersion(), codec); - } else { - delete codec; - } - } } void CodecInit::destroy() { delete Global::get().oCodec; - - foreach (CELTCodec *codec, Global::get().qmCodecs) - delete codec; - Global::get().qmCodecs.clear(); } LoopUser::LoopUser() { diff --git a/src/mumble/AudioInput.cpp b/src/mumble/AudioInput.cpp index 3b212f1c6..3c8d104e0 100644 --- a/src/mumble/AudioInput.cpp +++ b/src/mumble/AudioInput.cpp @@ -7,7 +7,6 @@ #include "API.h" #include "AudioOutput.h" -#include "CELTCodec.h" #include "MainWindow.h" #include "MumbleProtocol.h" #include "NetworkConfig.h" @@ -226,13 +225,11 @@ AudioInput::AudioInput() : opusBuffer(Global::get().s.iFramesPerPacket * (SAMPLE Global::get().iAudioBandwidth = getNetworkBandwidth(iAudioQuality, iAudioFrames); - m_codec = Mumble::Protocol::AudioCodec::CELT_Alpha; + m_codec = Mumble::Protocol::AudioCodec::Opus; activityState = ActivityStateActive; oCodec = nullptr; opusState = nullptr; - cCodec = nullptr; - ceEncoder = nullptr; oCodec = Global::get().oCodec; if (oCodec) { @@ -308,10 +305,6 @@ AudioInput::~AudioInput() { } #endif - if (ceEncoder) { - cCodec->celt_encoder_destroy(ceEncoder); - } - if (sppPreprocess) speex_preprocess_state_destroy(sppPreprocess); if (sesEcho) @@ -800,71 +793,12 @@ void AudioInput::resetAudioProcessor() { } bool AudioInput::selectCodec() { - bool useOpus = false; - - // Currently talking, use previous Opus status. - if (bPreviousVoice) { - useOpus = (m_codec == Mumble::Protocol::AudioCodec::Opus); - } else { - if (Global::get().bOpus || (Global::get().s.lmLoopMode == Settings::Local)) { - useOpus = true; - } - } - - if (!useOpus) { - CELTCodec *switchto = nullptr; - if ((!Global::get().uiSession || (Global::get().s.lmLoopMode == Settings::Local)) - && (!Global::get().qmCodecs.isEmpty())) { - // Use latest for local loopback - QMap< int, CELTCodec * >::const_iterator i = Global::get().qmCodecs.constEnd(); - --i; - switchto = i.value(); - } else { - // Currently talking, don't switch unless you must. - if (cCodec && bPreviousVoice) { - int v = cCodec->bitstreamVersion(); - if ((v == Global::get().iCodecAlpha) || (v == Global::get().iCodecBeta)) - switchto = cCodec; - } - } - if (!switchto) { - switchto = Global::get().qmCodecs.value(Global::get().bPreferAlpha ? Global::get().iCodecAlpha - : Global::get().iCodecBeta); - if (!switchto) - switchto = Global::get().qmCodecs.value(Global::get().bPreferAlpha ? Global::get().iCodecBeta - : Global::get().iCodecAlpha); - } - if (switchto != cCodec) { - if (cCodec && ceEncoder) { - cCodec->celt_encoder_destroy(ceEncoder); - ceEncoder = nullptr; - } - cCodec = switchto; - if (cCodec) - ceEncoder = cCodec->encoderCreate(); - } + // We only ever use Opus + Mumble::Protocol::AudioCodec previousCodec = m_codec; - if (!cCodec) - return false; - } + assert(previousCodec == Mumble::Protocol::AudioCodec::Opus); - Mumble::Protocol::AudioCodec previousCodec = m_codec; - if (useOpus) { - m_codec = Mumble::Protocol::AudioCodec::Opus; - } else { - if (!Global::get().uiSession) { - m_codec = Mumble::Protocol::AudioCodec::CELT_Alpha; - } else { - int v = cCodec->bitstreamVersion(); - if (v == Global::get().iCodecAlpha) { - m_codec = Mumble::Protocol::AudioCodec::CELT_Alpha; - } else if (v == Global::get().iCodecBeta) { - m_codec = Mumble::Protocol::AudioCodec::CELT_Beta; - } else { - qWarning() << "Couldn't find message type for codec version" << v; - } - } - } + m_codec = Mumble::Protocol::AudioCodec::Opus; if (m_codec != previousCodec) { iBufferedFrames = 0; @@ -929,26 +863,6 @@ int AudioInput::encodeOpusFrame(short *source, int size, EncodingOutputBuffer &b return len; } -int AudioInput::encodeCELTFrame(short *psSource, EncodingOutputBuffer &buffer) { - int len; - if (!cCodec) - return 0; - - if (bResetEncoder) { - cCodec->celt_encoder_ctl(ceEncoder, CELT_RESET_STATE); - bResetEncoder = false; - } - - 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[0], - qMin< int >(iAudioQuality / (8 * 100), static_cast< int >(buffer.size()))); - iBitrate = len * 100 * 8; - - return len; -} - void AudioInput::encodeAudioFrame(AudioChunk chunk) { int iArg; int i; @@ -1176,43 +1090,36 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { if (!selectCodec()) return; - if (m_codec == Mumble::Protocol::AudioCodec::CELT_Alpha || m_codec == Mumble::Protocol::AudioCodec::CELT_Beta) { - len = encodeCELTFrame(psSource, buffer); - if (len <= 0) { - iBitrate = 0; - qWarning() << "encodeCELTFrame failed" << iBufferedFrames << iFrameSize << len; - return; + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + + // Encode via Opus + encoded = false; + opusBuffer.insert(opusBuffer.end(), psSource, psSource + iFrameSize); + ++iBufferedFrames; + + if (!bIsSpeech || iBufferedFrames >= iAudioFrames) { + if (iBufferedFrames < iAudioFrames) { + // Stuff frame to framesize if speech ends and we don't have enough audio + // this way we are guaranteed to have a valid framecount and won't cause + // a codec configuration switch by suddenly using a wildly different + // framecount per packet. + const int missingFrames = iAudioFrames - iBufferedFrames; + opusBuffer.insert(opusBuffer.end(), iFrameSize * missingFrames, 0); + iBufferedFrames += missingFrames; + iFrameCounter += missingFrames; } - ++iBufferedFrames; - } else if (m_codec == Mumble::Protocol::AudioCodec::Opus) { - encoded = false; - opusBuffer.insert(opusBuffer.end(), psSource, psSource + iFrameSize); - ++iBufferedFrames; - - if (!bIsSpeech || iBufferedFrames >= iAudioFrames) { - if (iBufferedFrames < iAudioFrames) { - // Stuff frame to framesize if speech ends and we don't have enough audio - // this way we are guaranteed to have a valid framecount and won't cause - // a codec configuration switch by suddenly using a wildly different - // framecount per packet. - const int missingFrames = iAudioFrames - iBufferedFrames; - opusBuffer.insert(opusBuffer.end(), iFrameSize * missingFrames, 0); - iBufferedFrames += missingFrames; - iFrameCounter += missingFrames; - } - Q_ASSERT(iBufferedFrames == iAudioFrames); + Q_ASSERT(iBufferedFrames == iAudioFrames); - len = encodeOpusFrame(&opusBuffer[0], iBufferedFrames * iFrameSize, buffer); - opusBuffer.clear(); - if (len <= 0) { - iBitrate = 0; - qWarning() << "encodeOpusFrame failed" << iBufferedFrames << iFrameSize << len; - iBufferedFrames = 0; // These are lost. Make sure not to mess up our sequence counter next flushCheck. - return; - } - encoded = true; + len = encodeOpusFrame(&opusBuffer[0], iBufferedFrames * iFrameSize, buffer); + opusBuffer.clear(); + if (len <= 0) { + iBitrate = 0; + qWarning() << "encodeOpusFrame failed" << iBufferedFrames << iFrameSize << len; + iBufferedFrames = 0; // These are lost. Make sure not to mess up our sequence counter next flushCheck. + return; } + encoded = true; } if (encoded) { @@ -1277,37 +1184,12 @@ void AudioInput::flushCheck(const QByteArray &frame, bool terminator, int voiceT audioData.containsPositionalData = true; } - if (m_codec == Mumble::Protocol::AudioCodec::Opus) { - // In Opus mode we only expect a single frame per packet - assert(qlFrames.size() == 1); - - audioData.payload = gsl::span< const Mumble::Protocol::byte >( - reinterpret_cast< const Mumble::Protocol::byte * >(qlFrames[0].constData()), qlFrames[0].size()); - } else { - // Legacy codecs (Speex or CELT) may use multiple frames for a single packet - if (!m_legacyBuffer) { - m_legacyBuffer = std::make_unique< Mumble::Protocol::byte[] >(Mumble::Protocol::MAX_UDP_PACKET_SIZE); - } - - if (terminator) { - qlFrames << QByteArray(); - ++frames; - } - - std::size_t offset = 0; - for (int i = 0; i < frames; ++i) { - const QByteArray &qba = qlFrames[0]; - unsigned char head = static_cast< unsigned char >(qba.size()); - if (i < frames - 1) - head |= 0x80; - std::memcpy(m_legacyBuffer.get() + offset, &head, sizeof(head)); - offset += sizeof(head); - std::memcpy(m_legacyBuffer.get() + offset, qba.constData(), qba.size()); - offset += qba.size(); - } + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + // In Opus mode we only expect a single frame per packet + assert(qlFrames.size() == 1); - audioData.payload = gsl::span< const Mumble::Protocol::byte >(m_legacyBuffer.get(), offset); - } + audioData.payload = gsl::span< const Mumble::Protocol::byte >( + reinterpret_cast< const Mumble::Protocol::byte * >(qlFrames[0].constData()), qlFrames[0].size()); { ServerHandlerPtr sh = Global::get().sh; diff --git a/src/mumble/AudioInput.h b/src/mumble/AudioInput.h index 13cbe5577..7ce81c5d0 100644 --- a/src/mumble/AudioInput.h +++ b/src/mumble/AudioInput.h @@ -7,19 +7,21 @@ #define MUMBLE_MUMBLE_AUDIOINPUT_H_ #include <QElapsedTimer> -#include <QtCore/QObject> -#include <QtCore/QThread> +#include <QObject> +#include <QThread> + #include <boost/array.hpp> #include <boost/shared_ptr.hpp> + #include <fstream> #include <list> #include <memory> #include <mutex> -#include <speex/speex.h> +#include <vector> + #include <speex/speex_echo.h> #include <speex/speex_preprocess.h> #include <speex/speex_resampler.h> -#include <vector> #include "Audio.h" #include "EchoCancelOption.h" @@ -28,9 +30,7 @@ #include "Timer.h" class AudioInput; -class CELTCodec; class OpusCodec; -struct CELTEncoder; struct OpusEncoder; struct DenoiseState; typedef boost::shared_ptr< AudioInput > AudioInputPtr; @@ -170,7 +170,6 @@ private: Q_OBJECT Q_DISABLE_COPY(AudioInput) protected: - typedef enum { CodecCELT, CodecSpeex } CodecFormat; typedef enum { SampleShort, SampleFloat } SampleFormat; typedef void (*inMixerFunc)(float *RESTRICT, const void *RESTRICT, unsigned int, unsigned int, quint64); @@ -197,7 +196,6 @@ private: typedef boost::array< unsigned char, 960 > EncodingOutputBuffer; int encodeOpusFrame(short *source, int size, EncodingOutputBuffer &buffer); - int encodeCELTFrame(short *pSource, EncodingOutputBuffer &buffer); QElapsedTimer qetLastMuteCue; @@ -225,9 +223,6 @@ protected: SpeexPreprocessState *sppPreprocess; SpeexEchoState *sesEcho; - CELTCodec *cCodec; - CELTEncoder *ceEncoder; - /// bResetEncoder is a flag that notifies /// our encoder functions that the encoder /// needs to be reset. diff --git a/src/mumble/AudioOutputSpeech.cpp b/src/mumble/AudioOutputSpeech.cpp index 52da02a0f..26cf06eab 100644 --- a/src/mumble/AudioOutputSpeech.cpp +++ b/src/mumble/AudioOutputSpeech.cpp @@ -6,7 +6,6 @@ #include "AudioOutputSpeech.h" #include "Audio.h" -#include "CELTCodec.h" #include "ClientUser.h" #include "OpusCodec.h" #include "PacketDataStream.h" @@ -60,9 +59,6 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Mumble : AudioOutputUser(user->qsName), iMixerFreq(freq), m_codec(codec), p(user) { int err; - cCodec = nullptr; - cdDecoder = nullptr; - dsSpeex = nullptr; oCodec = nullptr; opusState = nullptr; @@ -80,25 +76,16 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Mumble // sample rate / 100 means 10ms mono audio data per frame. iFrameSizePerChannel = iFrameSize = iSampleRate / 100; // for mono stream - if (m_codec == Mumble::Protocol::AudioCodec::Opus) { - // Always pretend Stereo mode is true by default. since opus will convert mono stream to stereo stream. - // https://tools.ietf.org/html/rfc6716#section-2.1.2 - bStereo = true; - oCodec = Global::get().oCodec; - if (oCodec) { - opusState = oCodec->opus_decoder_create(iSampleRate, bStereo ? 2 : 1, nullptr); - oCodec->opus_decoder_ctl( - opusState, OPUS_SET_PHASE_INVERSION_DISABLED(1)); // Disable phase inversion for better mono downmix. - } - } else if (m_codec == Mumble::Protocol::AudioCodec::Speex) { - speex_bits_init(&sbBits); - - dsSpeex = speex_decoder_init(speex_lib_get_mode(SPEEX_MODEID_UWB)); - int iArg = 1; - speex_decoder_ctl(dsSpeex, SPEEX_SET_ENH, &iArg); - speex_decoder_ctl(dsSpeex, SPEEX_GET_FRAME_SIZE, &iFrameSize); - speex_decoder_ctl(dsSpeex, SPEEX_GET_SAMPLING_RATE, &iSampleRate); - iAudioBufferSize = iFrameSize; + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + + // Always pretend Stereo mode is true by default. since opus will convert mono stream to stereo stream. + // https://tools.ietf.org/html/rfc6716#section-2.1.2 + bStereo = true; + oCodec = Global::get().oCodec; + if (oCodec) { + opusState = oCodec->opus_decoder_create(iSampleRate, bStereo ? 2 : 1, nullptr); + oCodec->opus_decoder_ctl( + opusState, OPUS_SET_PHASE_INVERSION_DISABLED(1)); // Disable phase inversion for better mono downmix. } // iAudioBufferSize: size (in unit of float) of the buffer used to store decoded pcm data. @@ -169,13 +156,8 @@ AudioOutputSpeech::AudioOutputSpeech(ClientUser *user, unsigned int freq, Mumble } AudioOutputSpeech::~AudioOutputSpeech() { - if (opusState) + if (opusState) { oCodec->opus_decoder_destroy(opusState); - if (cdDecoder) { - cCodec->celt_decoder_destroy(cdDecoder); - } else if (dsSpeex) { - speex_bits_destroy(&sbBits); - speex_decoder_destroy(dsSpeex); } if (srs) @@ -199,58 +181,24 @@ void AudioOutputSpeech::addFrameToBuffer(const Mumble::Protocol::AudioData &audi return; } - assert(audioData.usedCodec == m_codec); - int samples = 0; - switch (audioData.usedCodec) { - case Mumble::Protocol::AudioCodec::Opus: { - if (oCodec) { - samples = oCodec->opus_decoder_get_nb_samples( - opusState, audioData.payload.data(), - audioData.payload.size()); // this function return samples per channel - samples *= 2; // since we assume all input stream is stereo. - } - // We can't handle frames which are not a multiple of our configured framesize. - if (samples % iFrameSize != 0) { - qWarning("AudioOutputSpeech: Dropping Opus audio packet, because its sample count (%d) is not a " - "multiple of our frame size (%d)", - samples, iFrameSize); - return; - } - break; - } - case Mumble::Protocol::AudioCodec::CELT_Alpha: - case Mumble::Protocol::AudioCodec::CELT_Beta: - case Mumble::Protocol::AudioCodec::Speex: { - // These legacy codecs may send multiple frames at once, so we want to add up all samples across - // all frames - std::size_t offset = 0; - bool framesContinue = true; - while (framesContinue && offset < audioData.payload.size()) { - Mumble::Protocol::byte headerByte = audioData.payload[offset]; - - // The least significant 7 bits encode the frame's size and the most significant bit is the - // "continuation bit" indicating that there are more frames to come. - unsigned int currentFrameSize = headerByte & 0x7f; - framesContinue = headerByte & 0x80; - - offset += currentFrameSize; - samples += iFrameSize; - } + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + assert(audioData.usedCodec == m_codec); - if (offset >= audioData.payload.size()) { - qWarning( - "AudioOutputSpeech: Invalid legacy audio packet encountered (specification exceeds actual length)"); - return; - } else if (offset < audioData.payload.size() - 1) { - qWarning( - "AudioOutputSpeech: Invalid legacy audio packet encountered (audio payload contains unused data)"); - return; - } + if (oCodec) { + samples = + oCodec->opus_decoder_get_nb_samples(opusState, audioData.payload.data(), + audioData.payload.size()); // this function return samples per channel + samples *= 2; // since we assume all input stream is stereo. + } - break; - } + // We can't handle frames which are not a multiple of our configured framesize. + if (samples % iFrameSize != 0) { + qWarning("AudioOutputSpeech: Dropping Opus audio packet, because its sample count (%d) is not a " + "multiple of our frame size (%d)", + samples, iFrameSize); + return; } // Copy the audio data to an AudioOutputCache instance and store that in our global chunk list @@ -343,35 +291,11 @@ bool AudioOutputSpeech::prepareSampleBuffer(unsigned int frameCount) { bHasTerminator = cache.isLastFrame(); - if (m_codec == Mumble::Protocol::AudioCodec::Opus) { - // Copy audio data into qlFrames - qlFrames << QByteArray(reinterpret_cast< const char * >(cache.getAudioData().data()), - cache.getAudioData().size()); - } else { - // Split data into the individual frames and copy those into qlFrames - const gsl::span< const Mumble::Protocol::byte > audioData = cache.getAudioData(); - std::size_t offset = 0; - bool hasNextFrame = true; - while (hasNextFrame && offset < audioData.size()) { - Mumble::Protocol::byte headerByte = audioData[offset]; - - // Least significant 7bits encode the frame's size - int currentFrameSize = headerByte & 0x7f; - // The most significant bit is the "continuation bit" - hasNextFrame = headerByte & 0x80; - - // Copy current frame into qlFrames - if (currentFrameSize > 0) { - if (offset + 1 >= audioData.size() - || offset + 1 + currentFrameSize >= audioData.size()) { - qWarning("AudioOutputSpeech: Malformed legacy audio data encountered (mismatched " - "frame size)"); - } else { - qlFrames << QByteArray(audioData[offset + 1], currentFrameSize); - } - } - } - } + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + + // Copy audio data into qlFrames + qlFrames << QByteArray(reinterpret_cast< const char * >(cache.getAudioData().data()), + cache.getAudioData().size()); if (cache.containsPositionalInformation()) { assert(cache.getPositionalInformation().size() == 3); @@ -408,78 +332,33 @@ bool AudioOutputSpeech::prepareSampleBuffer(unsigned int frameCount) { if (!qlFrames.isEmpty()) { QByteArray qba = qlFrames.takeFirst(); - switch (m_codec) { - case Mumble::Protocol::AudioCodec::CELT_Alpha: - case Mumble::Protocol::AudioCodec::CELT_Beta: { - int wantversion = (m_codec == Mumble::Protocol::AudioCodec::CELT_Alpha) - ? Global::get().iCodecAlpha - : Global::get().iCodecBeta; - if ((p == &LoopUser::lpLoopy) && (!Global::get().qmCodecs.isEmpty())) { - QMap< int, CELTCodec * >::const_iterator i = Global::get().qmCodecs.constEnd(); - --i; - wantversion = i.key(); - } - if (cCodec && (cCodec->bitstreamVersion() != wantversion)) { - cCodec->celt_decoder_destroy(cdDecoder); - cdDecoder = nullptr; - } - if (!cCodec) { - cCodec = Global::get().qmCodecs.value(wantversion); - if (cCodec) { - cdDecoder = cCodec->decoderCreate(); - } - } - if (cdDecoder) - cCodec->decode_float( - cdDecoder, - qba.isEmpty() ? nullptr : reinterpret_cast< const unsigned char * >(qba.constData()), - qba.size(), pOut); - else - memset(pOut, 0, sizeof(float) * iFrameSize); - - break; + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + + if (oCodec) { + if (qba.isEmpty() || !(p && p->bLocalMute)) { + // If qba is empty, we have to let Opus know about the packet loss + // Otherwise if the associated user is not locally muted, we want to decode the audio + // packet normally in order to be able to play it. + decodedSamples = oCodec->opus_decode_float( + opusState, + qba.isEmpty() ? nullptr : reinterpret_cast< const unsigned char * >(qba.constData()), + qba.size(), pOut, iAudioBufferSize, 0); + } else { + // If the packet is non-empty, but the associated user is locally muted, + // we don't have to decode the packet. Instead it is enough to know how many + // samples it contained so that we can then mute the appropriate output length + decodedSamples = oCodec->opus_packet_get_samples_per_frame( + reinterpret_cast< const unsigned char * >(qba.constData()), SAMPLE_RATE); } - case Mumble::Protocol::AudioCodec::Opus: { - if (oCodec) { - if (qba.isEmpty() || !(p && p->bLocalMute)) { - // If qba is empty, we have to let Opus know about the packet loss - // Otherwise if the associated user is not locally muted, we want to decode the audio - // packet normally in order to be able to play it. - decodedSamples = oCodec->opus_decode_float( - opusState, - qba.isEmpty() ? nullptr - : reinterpret_cast< const unsigned char * >(qba.constData()), - qba.size(), pOut, iAudioBufferSize, 0); - } else { - // If the packet is non-empty, but the associated user is locally muted, - // we don't have to decode the packet. Instead it is enough to know how many - // samples it contained so that we can then mute the appropriate output length - decodedSamples = oCodec->opus_packet_get_samples_per_frame( - reinterpret_cast< const unsigned char * >(qba.constData()), SAMPLE_RATE); - } - - // The returned sample count we get from the Opus functions refer to samples per channel. - // Thus in order to get the total amount, we have to multiply by the channel count. - decodedSamples *= channels; - } - if (decodedSamples < 0) { - decodedSamples = iFrameSize; - memset(pOut, 0, iFrameSize * sizeof(float)); - } - break; - } - case Mumble::Protocol::AudioCodec::Speex: { - if (qba.isEmpty()) { - speex_decode(dsSpeex, nullptr, pOut); - } else { - speex_bits_read_from(&sbBits, qba.data(), qba.size()); - speex_decode(dsSpeex, &sbBits, pOut); - } - for (unsigned int i = 0; i < iFrameSize; ++i) - pOut[i] *= (1.0f / 32767.f); - break; - } + // The returned sample count we get from the Opus functions refer to samples per channel. + // Thus in order to get the total amount, we have to multiply by the channel count. + decodedSamples *= channels; + } + + if (decodedSamples < 0) { + decodedSamples = iFrameSize; + memset(pOut, 0, iFrameSize * sizeof(float)); } bool update = true; @@ -515,36 +394,15 @@ bool AudioOutputSpeech::prepareSampleBuffer(unsigned int frameCount) { nextalive = false; } } else { - switch (m_codec) { - case Mumble::Protocol::AudioCodec::CELT_Alpha: - case Mumble::Protocol::AudioCodec::CELT_Beta: { - if (cdDecoder) { - cCodec->decode_float(cdDecoder, nullptr, 0, pOut); - } else { - memset(pOut, 0, sizeof(float) * iFrameSize); - } - - break; - } - case Mumble::Protocol::AudioCodec::Opus: { - if (oCodec) { - decodedSamples = oCodec->opus_decode_float(opusState, nullptr, 0, pOut, iFrameSize, 0); - decodedSamples *= channels; - } - - if (decodedSamples < 0) { - decodedSamples = iFrameSize; - memset(pOut, 0, iFrameSize * sizeof(float)); - } - break; - } - case Mumble::Protocol::AudioCodec::Speex: { - speex_decode(dsSpeex, nullptr, pOut); - for (unsigned int i = 0; i < iFrameSize; ++i) - pOut[i] *= (1.0f / 32767.f); + assert(m_codec == Mumble::Protocol::AudioCodec::Opus); + if (oCodec) { + decodedSamples = oCodec->opus_decode_float(opusState, nullptr, 0, pOut, iFrameSize, 0); + decodedSamples *= channels; + } - break; - } + if (decodedSamples < 0) { + decodedSamples = iFrameSize; + memset(pOut, 0, iFrameSize * sizeof(float)); } } diff --git a/src/mumble/AudioOutputSpeech.h b/src/mumble/AudioOutputSpeech.h index ecddee438..36c03a4ed 100644 --- a/src/mumble/AudioOutputSpeech.h +++ b/src/mumble/AudioOutputSpeech.h @@ -6,8 +6,6 @@ #ifndef MUMBLE_MUMBLE_AUDIOOUTPUTSPEECH_H_ #define MUMBLE_MUMBLE_AUDIOOUTPUTSPEECH_H_ -#include <celt.h> -#include <speex/speex.h> #include <speex/speex_jitter.h> #include <speex/speex_resampler.h> @@ -20,7 +18,6 @@ #include <mutex> #include <vector> -class CELTCodec; class OpusCodec; class ClientUser; struct OpusDecoder; @@ -58,15 +55,9 @@ protected: JitterBuffer *jbJitter; int iMissCount; - CELTCodec *cCodec; - CELTDecoder *cdDecoder; - OpusCodec *oCodec; OpusDecoder *opusState; - SpeexBits sbBits; - void *dsSpeex; - QList< QByteArray > qlFrames; public: diff --git a/src/mumble/CELTCodec.cpp b/src/mumble/CELTCodec.cpp deleted file mode 100644 index 197e399b5..000000000 --- a/src/mumble/CELTCodec.cpp +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2012-2022 The Mumble Developers. All rights reserved. -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file at the root of the -// Mumble source tree or at <https://www.mumble.info/LICENSE>. - -#include "CELTCodec.h" - -#include "Audio.h" -#include "MumbleApplication.h" -#include "Version.h" - -#ifdef Q_CC_GNU -# define RESOLVE(var) \ - { \ - var = reinterpret_cast< __typeof__(var) >(qlCELT.resolve(#var)); \ - bValid = bValid && var; \ - } -#else -# define RESOLVE(var) \ - { \ - *reinterpret_cast< void ** >(&var) = static_cast< void * >(qlCELT.resolve(#var)); \ - bValid = bValid && var; \ - } -#endif - -#ifdef Q_OS_WIN -extern "C" { -void __cpuid(int a[4], int b); -}; -#endif - -CELTCodec::CELTCodec(const QString &celt_version) { - bValid = false; - cmMode = nullptr; - qsVersion = celt_version; - iBitstreamVersion = INT_MIN; - qlCELT.setLoadHints(QLibrary::ResolveAllSymbolsHint); - - QStringList alternatives; -#if defined(Q_OS_MAC) - alternatives << QString::fromLatin1("libcelt0.%1.dylib").arg(celt_version); - alternatives << QString::fromLatin1("celt0.%1.dylib").arg(celt_version); - alternatives << QString::fromLatin1("libcelt.%1.dylib").arg(celt_version); - alternatives << QString::fromLatin1("celt.%1.dylib").arg(celt_version); -#elif defined(Q_OS_UNIX) - alternatives << QString::fromLatin1("libcelt0.so.%1").arg(celt_version); - alternatives << QString::fromLatin1("libcelt.so.%1").arg(celt_version); - alternatives << QString::fromLatin1("celt.so.%1").arg(celt_version); -#else - int cpuinfo[4]; - __cpuid(cpuinfo, 1); - if (cpuinfo[3] & 0x02000000) { - if (cpuinfo[3] & 0x04000000) { - if (cpuinfo[2] & 0x00000001) { - alternatives << QString::fromLatin1("celt0.%1.sse3.dll").arg(celt_version); - } - alternatives << QString::fromLatin1("celt0.%1.sse2.dll").arg(celt_version); - } - alternatives << QString::fromLatin1("celt0.%1.sse.dll").arg(celt_version); - } - - alternatives << QString::fromLatin1("celt0.%1.dll").arg(celt_version); -#endif - foreach (const QString &lib, alternatives) { - qlCELT.setFileName(MumbleApplication::instance()->applicationVersionRootPath() + QLatin1String("/") + lib); - if (qlCELT.load()) { - bValid = true; - break; - } - -#ifdef Q_OS_MAC - qlCELT.setFileName(QApplication::instance()->applicationDirPath() + QLatin1String("/../Codecs/") + lib); - if (qlCELT.load()) { - bValid = true; - break; - } -#endif - -#ifdef MUMBLE_LIBRARY_PATH - qlCELT.setFileName(QLatin1String(MUMTEXT(MUMBLE_LIBRARY_PATH) "/") + lib); - if (qlCELT.load()) { - bValid = true; - break; - } -#endif - - qlCELT.setFileName(lib); - if (qlCELT.load()) { - bValid = true; - break; - } - } - - RESOLVE(celt_mode_destroy); - RESOLVE(celt_mode_info); - - RESOLVE(celt_encoder_destroy); - RESOLVE(celt_encoder_ctl); - - RESOLVE(celt_decoder_destroy); - RESOLVE(celt_decoder_ctl); -} - -CELTCodec::~CELTCodec() { - if (cmMode) - celt_mode_destroy(const_cast< CELTMode * >(cmMode)); -} - -bool CELTCodec::isValid() const { - return bValid; -} - -int CELTCodec::bitstreamVersion() const { - if (cmMode && iBitstreamVersion == INT_MIN) - celt_mode_info(cmMode, CELT_GET_BITSTREAM_VERSION, reinterpret_cast< celt_int32 * >(&iBitstreamVersion)); - - return iBitstreamVersion; -} - -QString CELTCodec::version() const { - return qsVersion; -} - -void CELTCodec::report() const { - qWarning("CELT bitstream %08x from %s", bitstreamVersion(), qPrintable(qlCELT.fileName())); -} - -CELTCodec070::CELTCodec070(const QString &celt_version) : CELTCodec(celt_version) { - RESOLVE(celt_mode_create); - RESOLVE(celt_encoder_create); - RESOLVE(celt_decoder_create); - RESOLVE(celt_encode_float); - RESOLVE(celt_encode); - RESOLVE(celt_decode_float); - RESOLVE(celt_decode); - RESOLVE(celt_strerror); - - if (bValid) { - cmMode = celt_mode_create(SAMPLE_RATE, SAMPLE_RATE / 100, nullptr); - } -} - -CELTEncoder *CELTCodec070::encoderCreate() { - return celt_encoder_create(cmMode, 1, nullptr); -} - -CELTDecoder *CELTCodec070::decoderCreate() { - return celt_decoder_create(cmMode, 1, nullptr); -} - -int CELTCodec070::encode(CELTEncoder *st, const celt_int16 *pcm, unsigned char *compressed, int nbCompressedBytes) { - return celt_encode(st, pcm, nullptr, compressed, nbCompressedBytes); -} - -int CELTCodec070::decode_float(CELTDecoder *st, const unsigned char *data, int len, float *pcm) { - return celt_decode_float(st, data, len, pcm); -} - -#undef RESOLVE diff --git a/src/mumble/CELTCodec.h b/src/mumble/CELTCodec.h deleted file mode 100644 index 22717b4f7..000000000 --- a/src/mumble/CELTCodec.h +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2012-2022 The Mumble Developers. All rights reserved. -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file at the root of the -// Mumble source tree or at <https://www.mumble.info/LICENSE>. - -#ifndef MUMBLE_MUMBLE_CELTCODEC_H_ -#define MUMBLE_MUMBLE_CELTCODEC_H_ - -#include <celt.h> - -#include <QtCore/QLibrary> -#include <QtCore/QString> - -#ifndef Q_OS_WIN -# define __cdecl -#endif - -class CELTCodec { -private: - Q_DISABLE_COPY(CELTCodec) -protected: - const CELTMode *cmMode; - QString qsVersion; - QLibrary qlCELT; - bool bValid; - mutable int iBitstreamVersion; - - void (*celt_mode_destroy)(CELTMode *mode); - int(__cdecl *celt_mode_info)(const CELTMode *mode, int request, celt_int32 *value); - -public: - void(__cdecl *celt_encoder_destroy)(CELTEncoder *st); - int(__cdecl *celt_encoder_ctl)(CELTEncoder *st, int request, ...); - - void(__cdecl *celt_decoder_destroy)(CELTDecoder *st); - int(__cdecl *celt_decoder_ctl)(CELTDecoder *st, int request, ...); - - CELTCodec(const QString &celt_version); - virtual ~CELTCodec(); - bool isValid() const; - int bitstreamVersion() const; - QString version() const; - - virtual void report() const; - - virtual CELTEncoder *encoderCreate() = 0; - virtual CELTDecoder *decoderCreate() = 0; - virtual int encode(CELTEncoder *st, const celt_int16 *pcm, unsigned char *compressed, int nbCompressedBytes) = 0; - virtual int decode_float(CELTDecoder *st, const unsigned char *data, int len, float *pcm) = 0; -}; - -class CELTCodec070 : public CELTCodec { -protected: - CELTMode *(*celt_mode_create)(celt_int32 Fs, int frame_size, int *error); - CELTEncoder *(__cdecl *celt_encoder_create)(const CELTMode *mode, int channels, int *error); - CELTDecoder *(__cdecl *celt_decoder_create)(const CELTMode *mode, int channels, int *error); - int(__cdecl *celt_encode_float)(CELTEncoder *st, const float *pcm, float *optional_synthesis, - unsigned char *compressed, int nbCompressedBytes); - int(__cdecl *celt_encode)(CELTEncoder *st, const celt_int16 *pcm, celt_int16 *optional_synthesis, - unsigned char *compressed, int nbCompressedBytes); - int(__cdecl *celt_decode_float)(CELTDecoder *st, const unsigned char *data, int len, float *pcm); - int(__cdecl *celt_decode)(CELTDecoder *st, const unsigned char *data, int len, celt_int16 *pcm); - const char *(__cdecl *celt_strerror)(int error); - -public: - CELTCodec070(const QString &celt_version); - CELTEncoder *encoderCreate() Q_DECL_OVERRIDE; - CELTDecoder *decoderCreate() Q_DECL_OVERRIDE; - int encode(CELTEncoder *st, const celt_int16 *pcm, unsigned char *compressed, - int nbCompressedBytes) Q_DECL_OVERRIDE; - int decode_float(CELTDecoder *st, const unsigned char *data, int len, float *pcm) Q_DECL_OVERRIDE; -}; - -#endif // CELTCODEC_H_ diff --git a/src/mumble/CMakeLists.txt b/src/mumble/CMakeLists.txt index 2189f9525..0fb585354 100644 --- a/src/mumble/CMakeLists.txt +++ b/src/mumble/CMakeLists.txt @@ -23,7 +23,6 @@ option(translations "Include languages other than English." ON) option(bundle-qt-translations "Bundle Qt's translations as well" ${static}) option(bundled-opus "Build the included version of Opus instead of looking for one on the system." ON) -option(bundled-celt "Build the included version of CELT instead of looking for one on the system." ON) option(bundled-speex "Build the included version of Speex instead of looking for one on the system." ON) option(rnnoise "Use RNNoise for machine learning noise reduction." ON) option(bundled-rnnoise "Build the included version of RNNoise instead of looking for one on the system." ${rnnoise}) @@ -122,8 +121,6 @@ set(MUMBLE_SOURCES "BanEditor.cpp" "BanEditor.h" "BanEditor.ui" - "CELTCodec.cpp" - "CELTCodec.h" "Cert.cpp" "Cert.h" "Cert.ui" @@ -706,58 +703,28 @@ else() target_include_directories(mumble_client_object_lib PUBLIC ${opus_INCLUDE_DIRS}) endif() -if(bundled-celt) - add_subdirectory("${3RDPARTY_DIR}/celt-0.7.0-build" "${CMAKE_CURRENT_BINARY_DIR}/celt") - - # Disable all warnings that the Celt code may emit - disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/celt-0.7.0-build") - - add_dependencies(mumble_client_object_lib celt) - - target_include_directories(mumble_client_object_lib PUBLIC "${3RDPARTY_DIR}/celt-0.7.0-src/libcelt") - - if(WIN32) - # Shared library on Windows (e.g. ".dll") - set_target_properties(celt PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - else() - # Shared library on UNIX (e.g. ".so") - set_target_properties(celt PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) - endif() - - install_library(celt mumble_client) -else() - find_pkg(celt REQUIRED) - if(${celt_VERSION} VERSION_LESS 0.7 OR - ${celt_VERSION} VERSION_GREATER_EQUAL 0.8) - message(FATAL_ERROR "CELT 0.7.x is required, found ${celt_VERSION}!") - endif() - target_include_directories(mumble_client_object_lib PUBLIC ${celt_INCLUDE_DIRS}) -endif() - if(bundled-speex) - add_subdirectory("${3RDPARTY_DIR}/speex-build" "${CMAKE_CURRENT_BINARY_DIR}/speex") + add_subdirectory("${3RDPARTY_DIR}/speexdsp-build" "${CMAKE_CURRENT_BINARY_DIR}/speexdsp") - # Disable all warnings that the speex code may emit - disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/speex-build") + # Disable all warnings that the speexdsp code may emit + disable_warnings_for_all_targets_in("${3RDPARTY_DIR}/speexdsp-build") - target_link_libraries(mumble_client_object_lib PUBLIC speex) + target_link_libraries(mumble_client_object_lib PUBLIC speexdsp) if(WIN32) # Shared library on Windows (e.g. ".dll") - set_target_properties(speex PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + set_target_properties(speexdsp PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) else() # Shared library on UNIX (e.g. ".so") - set_target_properties(speex PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) + set_target_properties(speexdsp PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) endif() - install_library(speex mumble_client) + install_library(speexdsp mumble_client) else() - find_pkg(speex REQUIRED) find_pkg(speexdsp REQUIRED) target_link_libraries(mumble_client_object_lib PUBLIC - ${speex_LIBRARIES} ${speexdsp_LIBRARIES} ) endif() diff --git a/src/mumble/Global.cpp b/src/mumble/Global.cpp index 48cef2e2d..e76a7d0b1 100644 --- a/src/mumble/Global.cpp +++ b/src/mumble/Global.cpp @@ -111,11 +111,6 @@ Global::Global(const QString &qsConfigPath) { iAudioBandwidth = -1; iMaxBandwidth = -1; - iCodecAlpha = 0; - iCodecBeta = 0; - bPreferAlpha = true; - bOpus = true; - bAttenuateOthers = false; prioritySpeakerActiveOverride = false; diff --git a/src/mumble/Global.h b/src/mumble/Global.h index 31b1c3b9b..415ff63d7 100644 --- a/src/mumble/Global.h +++ b/src/mumble/Global.h @@ -31,7 +31,6 @@ class Overlay; class LCD; class Zeroconf; class OverlayClient; -class CELTCodec; class OpusCodec; class LogEmitter; class DeveloperConsole; @@ -97,11 +96,7 @@ public: int iMaxBandwidth; int iAudioBandwidth; QDir qdBasePath; - QMap< int, CELTCodec * > qmCodecs; OpusCodec *oCodec; - int iCodecAlpha, iCodecBeta; - bool bPreferAlpha; - bool bOpus; bool bAttenuateOthers; /// If set the AudioOutput::mix will forcefully adjust the volume of all /// non-priority speakers. diff --git a/src/mumble/MainWindow.cpp b/src/mumble/MainWindow.cpp index 1774c74c2..02db85f04 100644 --- a/src/mumble/MainWindow.cpp +++ b/src/mumble/MainWindow.cpp @@ -12,7 +12,6 @@ #include "AudioStats.h" #include "AudioWizard.h" #include "BanEditor.h" -#include "CELTCodec.h" #include "Cert.h" #include "Channel.h" #include "ConnectDialog.h" @@ -3209,10 +3208,6 @@ void MainWindow::viewCertificate(bool) { void MainWindow::serverConnected() { Global::get().uiSession = 0; Global::get().pPermissions = ChanACL::None; - Global::get().iCodecAlpha = 0x8000000b; - Global::get().bPreferAlpha = true; - Global::get().bOpus = true; - Global::get().iCodecBeta = 0; #ifdef Q_OS_MAC // Suppress AppNap while we're connected to a server. diff --git a/src/mumble/Messages.cpp b/src/mumble/Messages.cpp index 6e581ae9e..cf4a4e819 100644 --- a/src/mumble/Messages.cpp +++ b/src/mumble/Messages.cpp @@ -1211,58 +1211,15 @@ void MainWindow::msgPermissionQuery(const MumbleProto::PermissionQuery &msg) { } } -/// This message is being received in order for the server to instruct this client which version of the CELT -/// codec it should use. +/// This message is being received in order for the server to instruct this client which codec it should use. /// /// @param msg The message object void MainWindow::msgCodecVersion(const MumbleProto::CodecVersion &msg) { - int alpha = msg.has_alpha() ? msg.alpha() : -1; - int beta = msg.has_beta() ? msg.beta() : -1; - bool pref = msg.prefer_alpha(); + if (!msg.opus()) { + Global::get().l->log(Log::CriticalError, tr("Server instructed us to use an audio codec different from Opus, " + "which is no longer supported. Disconnecting...")); - static bool warnedOpus = false; - Global::get().bOpus = msg.opus(); - - if (!Global::get().oCodec && !warnedOpus) { - Global::get().l->log(Log::CriticalError, - tr("Failed to load Opus, it will not be available for audio encoding/decoding.")); - warnedOpus = true; - } - - // Workaround for broken 1.2.2 servers - if (Global::get().sh && Global::get().sh->m_version == Version::fromComponents(1, 2, 2) && alpha != -1 - && alpha == beta) { - if (pref) - beta = Global::get().iCodecBeta; - else - alpha = Global::get().iCodecAlpha; - } - - if ((alpha != -1) && (alpha != Global::get().iCodecAlpha)) { - Global::get().iCodecAlpha = alpha; - if (pref && !Global::get().qmCodecs.contains(alpha)) - pref = !pref; - } - if ((beta != -1) && (beta != Global::get().iCodecBeta)) { - Global::get().iCodecBeta = beta; - if (!pref && !Global::get().qmCodecs.contains(beta)) - pref = !pref; - } - Global::get().bPreferAlpha = pref; - - int willuse = pref ? Global::get().iCodecAlpha : Global::get().iCodecBeta; - - static bool warnedCELT = false; - - if (!Global::get().qmCodecs.contains(willuse)) { - if (!warnedCELT) { - Global::get().l->log(Log::CriticalError, - tr("Unable to find matching CELT codecs with other clients. You will not be " - "able to talk to all users.")); - warnedCELT = true; - } - } else { - warnedCELT = false; + Global::get().sh->disconnect(); } } diff --git a/src/mumble/ServerHandler.cpp b/src/mumble/ServerHandler.cpp index e4048e400..21d330057 100644 --- a/src/mumble/ServerHandler.cpp +++ b/src/mumble/ServerHandler.cpp @@ -274,6 +274,11 @@ void ServerHandler::udpReady() { } void ServerHandler::handleVoicePacket(const Mumble::Protocol::AudioData &audioData) { + if (audioData.usedCodec != Mumble::Protocol::AudioCodec::Opus) { + qWarning("Dropping audio packet using invalid codec (not Opus): %d", static_cast< int >(audioData.usedCodec)); + return; + } + ClientUser *sender = ClientUser::get(audioData.senderSession); AudioOutputPtr ao = Global::get().ao; @@ -791,9 +796,6 @@ void ServerHandler::serverConnectionConnected() { foreach (const QString &qs, tokens) mpa.add_tokens(u8(qs)); - QMap< int, CELTCodec * >::const_iterator i; - for (i = Global::get().qmCodecs.constBegin(); i != Global::get().qmCodecs.constEnd(); ++i) - mpa.add_celt_versions(i.key()); mpa.set_opus(true); sendMessage(mpa); diff --git a/src/mumble/ServerInformation.cpp b/src/mumble/ServerInformation.cpp index bef224c8a..5644cd177 100644 --- a/src/mumble/ServerInformation.cpp +++ b/src/mumble/ServerInformation.cpp @@ -4,7 +4,6 @@ // Mumble source tree or at <https://www.mumble.info/LICENSE>. #include "ServerInformation.h" -#include "CELTCodec.h" #include "Connection.h" #include "MainWindow.h" #include "NetworkConfig.h" @@ -77,15 +76,8 @@ void ServerInformation::updateServerInformation() { } static const QString currentCodec() { - if (Global::get().bOpus) - return QLatin1String("Opus"); - - int v = Global::get().bPreferAlpha ? Global::get().iCodecAlpha : Global::get().iCodecBeta; - CELTCodec *cc = Global::get().qmCodecs.value(v); - if (cc) - return QString::fromLatin1("CELT %1").arg(cc->version()); - else - return QString::fromLatin1("CELT %1").arg(QString::number(v, 16)); + // We now always use Opus + return "Opus"; } void ServerInformation::updateAudioBandwidth() { diff --git a/src/mumble/Settings.cpp b/src/mumble/Settings.cpp index 15e7e7a90..637069420 100644 --- a/src/mumble/Settings.cpp +++ b/src/mumble/Settings.cpp @@ -1026,7 +1026,6 @@ void Settings::legacyLoad(const QString &path) { LOAD(iRecordingFormat, "recording/format"); // Special configuration options not exposed to UI - LOAD(bDisableCELT, "audio/disablecelt"); LOAD(disableConnectDialogEditing, "ui/disableconnectdialogediting"); LOAD(bPingServersDialogViewed, "consent/pingserversdialogviewed"); diff --git a/src/mumble/Settings.h b/src/mumble/Settings.h index 6d5a4ee4b..6f470f449 100644 --- a/src/mumble/Settings.h +++ b/src/mumble/Settings.h @@ -525,9 +525,6 @@ struct Settings { // Special configuration options not exposed to UI - /// Codec kill-switch - bool bDisableCELT = false; - /// Removes the add and edit options in the connect dialog if set. bool disableConnectDialogEditing = false; diff --git a/src/mumble/SettingsKeys.h b/src/mumble/SettingsKeys.h index 990307b43..eb20a3088 100644 --- a/src/mumble/SettingsKeys.h +++ b/src/mumble/SettingsKeys.h @@ -251,7 +251,6 @@ const SettingsKey RECORDING_MODE_KEY = { "recording_mode" }; const SettingsKey RECORDING_FORMAT_KEY = { "recording_format" }; // Hidden -const SettingsKey DISABLE_CELT_KEY = { "disable_celt" }; const SettingsKey DISABLE_CONNECT_DIALOG_EDITING_KEY = { "disable_connect_dialog_editing" }; // Overlay (win) diff --git a/src/mumble/SettingsMacros.h b/src/mumble/SettingsMacros.h index 87e48618b..093256657 100644 --- a/src/mumble/SettingsMacros.h +++ b/src/mumble/SettingsMacros.h @@ -223,9 +223,7 @@ PROCESS(recording, RECORDING_FORMAT_KEY, iRecordingFormat) -#define HIDDEN_SETTINGS \ - PROCESS(hidden, DISABLE_CELT_KEY, bDisableCELT) \ - PROCESS(hidden, DISABLE_CONNECT_DIALOG_EDITING_KEY, disableConnectDialogEditing) +#define HIDDEN_SETTINGS PROCESS(hidden, DISABLE_CONNECT_DIALOG_EDITING_KEY, disableConnectDialogEditing) #define WIN_OVERLAY_SETTINGS \ diff --git a/src/mumble/UserInformation.cpp b/src/mumble/UserInformation.cpp index c9668bfdd..b027c0b74 100644 --- a/src/mumble/UserInformation.cpp +++ b/src/mumble/UserInformation.cpp @@ -6,7 +6,6 @@ #include "UserInformation.h" #include "Audio.h" -#include "CELTCodec.h" #include "HostAddress.h" #include "ProtoUtils.h" #include "QtUtils.h" @@ -140,18 +139,6 @@ void UserInformation::update(const MumbleProto::UserStats &msg) { qlVersionNote->show(); } } - if (msg.celt_versions_size() > 0) { - QStringList qsl; - for (int i = 0; i < msg.celt_versions_size(); ++i) { - int v = msg.celt_versions(i); - CELTCodec *cc = Global::get().qmCodecs.value(v); - if (cc) - qsl << cc->version(); - else - qsl << QString::number(v, 16); - } - qlCELT->setText(qsl.join(tr(", "))); - } if (msg.has_opus()) { qlOpus->setText(msg.opus() ? tr("Supported") : tr("Not Supported")); } diff --git a/src/mumble/UserInformation.ui b/src/mumble/UserInformation.ui index dbb0d53b9..e5b9a3c95 100644 --- a/src/mumble/UserInformation.ui +++ b/src/mumble/UserInformation.ui @@ -20,6 +20,13 @@ <string>Connection Information</string> </property> <layout class="QGridLayout" name="gridLayout"> + <item row="6" column="0"> + <widget class="QLabel" name="qliOpus"> + <property name="text"> + <string notr="true">Opus</string> + </property> + </widget> + </item> <item row="4" column="1"> <widget class="QLabel" name="qlCertificate"> <property name="sizePolicy"> @@ -46,29 +53,25 @@ </property> </widget> </item> - <item row="2" column="1" colspan="2"> - <widget class="QLabel" name="qlOS"> + <item row="1" column="0" colspan="3"> + <widget class="QLabel" name="qlVersionNote"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>1</horstretch> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="text"> - <string/> + <property name="visible"> + <bool>false</bool> </property> - <property name="textFormat"> - <enum>Qt::PlainText</enum> + <property name="text"> + <string>Warning: The server seems to report a truncated protocol version for this client. (See: <a href="https://github.com/mumble-voip/mumble/issues/5827/">Issue #5827</a>)</string> </property> - <property name="textInteractionFlags"> - <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + <property name="wordWrap"> + <bool>true</bool> </property> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="qliCertificate"> - <property name="text"> - <string>Certificate</string> + <property name="openExternalLinks"> + <bool>true</bool> </property> </widget> </item> @@ -79,8 +82,8 @@ </property> </widget> </item> - <item row="6" column="1" colspan="2"> - <widget class="QLabel" name="qlCELT"> + <item row="5" column="1" colspan="2"> + <widget class="QLabel" name="qlAddress"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>1</horstretch> @@ -95,29 +98,8 @@ </property> </widget> </item> - <item row="7" column="0"> - <widget class="QLabel" name="qliOpus"> - <property name="text"> - <string notr="true">Opus</string> - </property> - </widget> - </item> - <item row="6" column="0"> - <widget class="QLabel" name="qliCELT"> - <property name="text"> - <string>CELT Versions</string> - </property> - </widget> - </item> - <item row="7" column="1" colspan="2"> - <widget class="QLabel" name="qlOpus"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="1" colspan="2"> - <widget class="QLabel" name="qlVersion"> + <item row="2" column="1" colspan="2"> + <widget class="QLabel" name="qlOS"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>1</horstretch> @@ -164,8 +146,15 @@ </property> </widget> </item> - <item row="5" column="1" colspan="2"> - <widget class="QLabel" name="qlAddress"> + <item row="4" column="0"> + <widget class="QLabel" name="qliCertificate"> + <property name="text"> + <string>Certificate</string> + </property> + </widget> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QLabel" name="qlVersion"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>1</horstretch> @@ -175,30 +164,18 @@ <property name="text"> <string/> </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> <property name="textInteractionFlags"> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> </property> </widget> </item> - <item row="1" column="0" colspan="3"> - <widget class="QLabel" name="qlVersionNote"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="visible"> - <bool>false</bool> - </property> + <item row="6" column="1" colspan="2"> + <widget class="QLabel" name="qlOpus"> <property name="text"> - <string>Warning: The server seems to report a truncated protocol version for this client. (See: <a href="https://github.com/mumble-voip/mumble/issues/5827/">Issue #5827</a>)</string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - <property name="openExternalLinks"> - <bool>true</bool> + <string/> </property> </widget> </item> diff --git a/src/mumble/mumble_ar.ts b/src/mumble/mumble_ar.ts index 057789707..f78e0c0f0 100644 --- a/src/mumble/mumble_ar.ts +++ b/src/mumble/mumble_ar.ts @@ -5655,10 +5655,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5707,10 +5703,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6375,6 +6367,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8303,10 +8299,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_bg.ts b/src/mumble/mumble_bg.ts index 5f8a184bb..f7c98675b 100644 --- a/src/mumble/mumble_bg.ts +++ b/src/mumble/mumble_bg.ts @@ -5652,10 +5652,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished">Сървър</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5704,10 +5700,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6372,6 +6364,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8296,10 +8292,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>Адрес по ИП</translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation>Подробности...</translation> </message> diff --git a/src/mumble/mumble_br.ts b/src/mumble/mumble_br.ts index 6707d2ee0..d3112d7bd 100644 --- a/src/mumble/mumble_br.ts +++ b/src/mumble/mumble_br.ts @@ -5651,10 +5651,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished">Servijer</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5703,10 +5699,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6371,6 +6363,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8295,10 +8291,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished">Chomlec'h IP</translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_ca.ts b/src/mumble/mumble_ca.ts index 681798b1b..95302482f 100644 --- a/src/mumble/mumble_ca.ts +++ b/src/mumble/mumble_ca.ts @@ -5677,10 +5677,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished">Servidor</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5729,10 +5725,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6397,6 +6389,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8321,10 +8317,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_cs.ts b/src/mumble/mumble_cs.ts index 8e5abf9a6..dca1723bd 100644 --- a/src/mumble/mumble_cs.ts +++ b/src/mumble/mumble_cs.ts @@ -5708,10 +5708,6 @@ Jinak přerušte a zkontrolujte Váš certifikát a uživatelské jméno.</trans <translation>Serveru</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Server vyžaduje minimální verze klienta %1</translation> </message> @@ -5760,10 +5756,6 @@ Jinak přerušte a zkontrolujte Váš certifikát a uživatelské jméno.</trans <translation>%1 zesílil %2.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Nelze nalézt odpovídající kodeky CELT s ostatními klienty. Nebudete schopni mluvit ke všem uživatelům.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 Vás zeslabil a ohlušil.</translation> @@ -6431,6 +6423,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8363,10 +8359,6 @@ Znak přístupu je textový řetězec, který může být použit jako heslo pro <translation>IP Adresa</translation> </message> <message> - <source>CELT Versions</source> - <translation>Verze CELT</translation> - </message> - <message> <source>Details...</source> <translation>Podrobnosti...</translation> </message> diff --git a/src/mumble/mumble_cy.ts b/src/mumble/mumble_cy.ts index 8ce16c1f1..c4356a282 100644 --- a/src/mumble/mumble_cy.ts +++ b/src/mumble/mumble_cy.ts @@ -5655,10 +5655,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5707,10 +5703,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6375,6 +6367,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8302,10 +8298,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>Cyfeiriad IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Fersiynau CELT</translation> - </message> - <message> <source>Details...</source> <translation>Manylion...</translation> </message> diff --git a/src/mumble/mumble_da.ts b/src/mumble/mumble_da.ts index 8e3188d6d..b1c525c19 100644 --- a/src/mumble/mumble_da.ts +++ b/src/mumble/mumble_da.ts @@ -5704,10 +5704,6 @@ Otherwise abort and check your certificate and username.</source> <translation>server</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Serveren kræver minimum klientversion %1</translation> </message> @@ -5756,10 +5752,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%2 aktiverede mikrofon for %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Kunne ikke finde matchende CELT-codecs host andre klienter. Du vil ikke være i stand til at snakke med alle brugere.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 deaktiverede din mikrofon og lyd.</translation> @@ -6427,6 +6419,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8357,10 +8353,6 @@ Et adgangsudtryk er en tekststreng, der kan bruges som en adgangskode for meget <translation>IP Adresse</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT Versioner</translation> - </message> - <message> <source>Details...</source> <translation>Detaljer...</translation> </message> diff --git a/src/mumble/mumble_de.ts b/src/mumble/mumble_de.ts index 92e6ca9d1..010f22afa 100644 --- a/src/mumble/mumble_de.ts +++ b/src/mumble/mumble_de.ts @@ -5715,10 +5715,6 @@ Falls nicht, brechen Sie ab und überprüfen Sie Ihr Zertifikat und Ihren Benutz <translation>Server</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Das Laden von Opus ist fehlgeschlagen, es ist nicht für die Audiokodierung/Dekodierung verfügbar.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Der Server empfiehlt mindestens die Client-Version %1</translation> </message> @@ -5767,10 +5763,6 @@ Falls nicht, brechen Sie ab und überprüfen Sie Ihr Zertifikat und Ihren Benutz <translation>Stummstellen von %1 wurde durch %2 deaktiviert.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Es wurde kein für alle Benutzer passender CELT-Codec gefunden. Sie werden nicht zu allen Benutzern sprechen können.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Sie wurden taub gestellt durch %1.</translation> @@ -6518,6 +6510,10 @@ Gültige Optionen sind: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8453,10 +8449,6 @@ Ein Zugriffscode ist eine Zeichenfolge, die als Passwort für ein sehr einfaches <translation>IP-Adresse</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT-Versionen</translation> - </message> - <message> <source>Details...</source> <translation>Details …</translation> </message> diff --git a/src/mumble/mumble_el.ts b/src/mumble/mumble_el.ts index 4c10bd06e..c29717eeb 100644 --- a/src/mumble/mumble_el.ts +++ b/src/mumble/mumble_el.ts @@ -5715,10 +5715,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Διακομιστής</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Αποτυχία φόρτωσης του Opus, δεν θα είναι διαθέσιμο για κωδικοποίηση/αποκωδικοποίηση ήχου.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Η ελάχιστη έκδοση προγράμματος-πελάτη που θέλει ο διακομιστής είναι %1</translation> </message> @@ -5767,10 +5763,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Ο %1 ξεφιμώθηκε από τον %2.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Δεν βρέθηκαν CELT codecs συμβατά με άλλους πελάτες. Δεν θα μπορείτε να μιλήσετε με όλους τους χρήστες.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Φιμωθήκατε και κωφωθήκατε από τον %1.</translation> @@ -6465,6 +6457,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8400,10 +8396,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>Διεύθυνση IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT εκδόσεις</translation> - </message> - <message> <source>Details...</source> <translation>Λεπτομέρειες...</translation> </message> diff --git a/src/mumble/mumble_en.ts b/src/mumble/mumble_en.ts index 2a18e5e8b..c3effd0c5 100644 --- a/src/mumble/mumble_en.ts +++ b/src/mumble/mumble_en.ts @@ -5650,10 +5650,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5702,10 +5698,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6370,6 +6362,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8293,10 +8289,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_en_GB.ts b/src/mumble/mumble_en_GB.ts index c07142abc..5f8a81514 100644 --- a/src/mumble/mumble_en_GB.ts +++ b/src/mumble/mumble_en_GB.ts @@ -5687,10 +5687,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5739,10 +5735,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6407,6 +6399,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8334,10 +8330,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_eo.ts b/src/mumble/mumble_eo.ts index 0f4df4cb1..361ade150 100644 --- a/src/mumble/mumble_eo.ts +++ b/src/mumble/mumble_eo.ts @@ -5662,10 +5662,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Servilo</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5714,10 +5710,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%1 malmutiĝis de %2.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Vi mutiĝis kaj surdiĝis de %1.</translation> @@ -6383,6 +6375,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8307,10 +8303,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP-adreso</translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation>Detaloj…</translation> </message> diff --git a/src/mumble/mumble_es.ts b/src/mumble/mumble_es.ts index 2366c216e..044334fe4 100644 --- a/src/mumble/mumble_es.ts +++ b/src/mumble/mumble_es.ts @@ -5716,10 +5716,6 @@ De lo contrario, aborte y compruebe su certificado y nombre de usuario.</transla <translation>Servidor</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>No se pudo cargar Opus, no estará disponible para la codificación/decodificación del audio.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>El servidor solicita que el cliente tenga la versión %1 como mínimo</translation> </message> @@ -5768,10 +5764,6 @@ De lo contrario, aborte y compruebe su certificado y nombre de usuario.</transla <translation>%2 dio voz a %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>No se pudieron encontrar codecs CELT adecuados para los otros clientes. No podrá hablar a todos los usuarios.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Fue enmudecido y ensordecido por %1.</translation> @@ -6443,6 +6435,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8378,10 +8374,6 @@ Una credencial de acceso es una cadena de texto que puede ser usada como contras <translation>Dirección IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Versiones CELT</translation> - </message> - <message> <source>Details...</source> <translation>Detalles...</translation> </message> diff --git a/src/mumble/mumble_et.ts b/src/mumble/mumble_et.ts index a7cc3c0bb..3a84afcde 100644 --- a/src/mumble/mumble_et.ts +++ b/src/mumble/mumble_et.ts @@ -5652,10 +5652,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Server</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5704,10 +5700,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6372,6 +6364,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8296,10 +8292,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP aadress</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT versioonid</translation> - </message> - <message> <source>Details...</source> <translation>Üksikasjad...</translation> </message> diff --git a/src/mumble/mumble_eu.ts b/src/mumble/mumble_eu.ts index 9a1b25b4f..02c0138de 100644 --- a/src/mumble/mumble_eu.ts +++ b/src/mumble/mumble_eu.ts @@ -5669,10 +5669,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Zerbitzaria</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Zerbitzariak gutxienez %1 bertsioa eskatzen du.</translation> </message> @@ -5721,10 +5717,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 -(e)k isildu eta gortu zaitu</translation> @@ -6392,6 +6384,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8316,10 +8312,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP Helbidea</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT bertsioak</translation> - </message> - <message> <source>Details...</source> <translation>Xehetasunak...</translation> </message> diff --git a/src/mumble/mumble_fa_IR.ts b/src/mumble/mumble_fa_IR.ts index 05a6a3b55..8c51b6be6 100644 --- a/src/mumble/mumble_fa_IR.ts +++ b/src/mumble/mumble_fa_IR.ts @@ -5650,10 +5650,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5702,10 +5698,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6370,6 +6362,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8293,10 +8289,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_fi.ts b/src/mumble/mumble_fi.ts index 62ddebeed..d2db9e637 100644 --- a/src/mumble/mumble_fi.ts +++ b/src/mumble/mumble_fi.ts @@ -5715,10 +5715,6 @@ Muutoin keskeytä ja tarkista varmenteesi sekä käyttäjänimesi.</translation> <translation>Palvelin</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Opusin lataaminen epäonnistui, se ei ole käytettävissä äänen pakkaukseen ja purkuun.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Palvelin vaatii ohjelmaversion olevan vähintään %1</translation> </message> @@ -5767,10 +5763,6 @@ Muutoin keskeytä ja tarkista varmenteesi sekä käyttäjänimesi.</translation> <translation>%2 poisti käyttäjän %1 mykistyksen.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Vastaavia CELT-koodekkeja ei löydy muilta käyttäjiltä. Et pysty puhumaan kaikille käyttäjille.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 mykisti ja hiljensi sinut.</translation> @@ -6464,6 +6456,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8399,10 +8395,6 @@ Pääsypoletti on merkkijonoketju, jota voidaan käyttää salasanana yksinkerta <translation>IP-osoite</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT-versiot</translation> - </message> - <message> <source>Details...</source> <translation>Lisätietoja...</translation> </message> diff --git a/src/mumble/mumble_fr.ts b/src/mumble/mumble_fr.ts index 926274815..f71e783c5 100644 --- a/src/mumble/mumble_fr.ts +++ b/src/mumble/mumble_fr.ts @@ -5715,10 +5715,6 @@ veuillez réessayer. Sinon annulez et vérifiez votre certificat et nom d'u <translation>Serveur</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Impossible de charger Opus, ce codec ne sera pas disponible pour le codage/décodage audio.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Le serveur requière au minimum la version %1 du client</translation> </message> @@ -5767,10 +5763,6 @@ veuillez réessayer. Sinon annulez et vérifiez votre certificat et nom d'u <translation>%2 a rendu la voix à %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Incapable de trouver des codecs CELT correspondant aux autres clients. Vous ne serez pas capable de parler aux autres utilisateurs.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 vous a rendu sourd et muet.</translation> @@ -6526,6 +6518,10 @@ Les options valides sont : <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8461,10 +8457,6 @@ Un jeton d'accès est une chaîne de caractères qui peut être utilisée c <translation>Adresse IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Versions CELT</translation> - </message> - <message> <source>Details...</source> <translation>Détails...</translation> </message> diff --git a/src/mumble/mumble_gl.ts b/src/mumble/mumble_gl.ts index a6f614803..b7f2399bf 100644 --- a/src/mumble/mumble_gl.ts +++ b/src/mumble/mumble_gl.ts @@ -5653,10 +5653,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5705,10 +5701,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6373,6 +6365,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8297,10 +8293,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_he.ts b/src/mumble/mumble_he.ts index 43d6294dc..b33087df8 100644 --- a/src/mumble/mumble_he.ts +++ b/src/mumble/mumble_he.ts @@ -5701,10 +5701,6 @@ Otherwise abort and check your certificate and username.</source> <translation>שרת</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>השרת הנוכחי דורש גרסאת לקוח מינימאלית %1</translation> </message> @@ -5753,10 +5749,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%2 ביטל את השתקתו של %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>לא ניתן למצוא קידודי CELT תואמים עבור משתמשים אחרים. ייתכן ולא תוכלו לדבר לכל המשתמשים.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>הושתקת והוחרשת על ידי %1.</translation> @@ -6423,6 +6415,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8354,10 +8350,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>כתובת IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>גירסאות CELT</translation> - </message> - <message> <source>Details...</source> <translation>פרטים...</translation> </message> diff --git a/src/mumble/mumble_hu.ts b/src/mumble/mumble_hu.ts index 0e524c4ac..490b1b8b9 100644 --- a/src/mumble/mumble_hu.ts +++ b/src/mumble/mumble_hu.ts @@ -5701,10 +5701,6 @@ Ha nem ön az, ellenőrizze a felhasználónevét és a tanúsítványt!</transl <translation>Kiszolgáló</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Opus kódoló betöltése sikertelen, így más kódoló lesz betöltve.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>A kiszolgálóhoz való csatlakozáshoz legalább %1 változat telepítése szükséges</translation> </message> @@ -5753,10 +5749,6 @@ Ha nem ön az, ellenőrizze a felhasználónevét és a tanúsítványt!</transl <translation>%2 hangosította %1-t.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Nem sikerült a többi kliens CELT kódolójának megfelelő kódolót találni. Ön nem lesz képes minden felhasználóval beszélni.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 kikapcsolta az ön mikrofonját és hangszóróit.</translation> @@ -6423,6 +6415,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8350,10 +8346,6 @@ A kulcs egy szöveges karaktersorozat, amely jelszóként használható a csator <translation>IP-cím</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT verzió</translation> - </message> - <message> <source>Details...</source> <translation>Részletek...</translation> </message> diff --git a/src/mumble/mumble_it.ts b/src/mumble/mumble_it.ts index 47c8151b2..412eef0a9 100644 --- a/src/mumble/mumble_it.ts +++ b/src/mumble/mumble_it.ts @@ -5715,10 +5715,6 @@ Altrimenti annulla e controlla il tuo certificato ed il nome utente.</translatio <translation>Server</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Caricamento Opus fallito, non sarà disponibile per la codifica/decodifica audio.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Il server richiede una versione superiore o uguale alla %1</translation> </message> @@ -5767,10 +5763,6 @@ Altrimenti annulla e controlla il tuo certificato ed il nome utente.</translatio <translation>%2 ha riattivato il microfono di %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Impossibile trovare una versione del codec CELT uguale a quella degli altri utenti. Non sarai in grado di parlare con gli altri utenti.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 ti ha mutato.</translation> @@ -6465,6 +6457,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8400,10 +8396,6 @@ Un token di accesso è una stringa di testo, che può essere usata come password <translation>Indirizzo IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Versioni CELT</translation> - </message> - <message> <source>Details...</source> <translation>Dettagli...</translation> </message> diff --git a/src/mumble/mumble_ja.ts b/src/mumble/mumble_ja.ts index a52a4b66f..7c5a6a173 100644 --- a/src/mumble/mumble_ja.ts +++ b/src/mumble/mumble_ja.ts @@ -5701,10 +5701,6 @@ Otherwise abort and check your certificate and username.</source> <translation>サーバ</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>サーバは最低でもバージョン%1のクライアントを要求しています</translation> </message> @@ -5753,10 +5749,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%1は%2によって発言禁止を解除されました。</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>他のクライアントとマッチするCELTコーデックが見つかりません。あなたは全てのユーザとは話せないでしょう。</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 があなたの聴取を禁止しました。</translation> @@ -6421,6 +6413,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8350,10 +8346,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IPアドレス</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELTバージョン</translation> - </message> - <message> <source>Details...</source> <translation>詳細...</translation> </message> diff --git a/src/mumble/mumble_ko.ts b/src/mumble/mumble_ko.ts index e505b4fde..cbfe5c9ec 100644 --- a/src/mumble/mumble_ko.ts +++ b/src/mumble/mumble_ko.ts @@ -5714,10 +5714,6 @@ Otherwise abort and check your certificate and username.</source> <translation>서버</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Opus를 로드하지 못했습니다. 오디오 인코딩/디코딩에 사용할 수 없습니다.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>서버가 최소 클라이언트 %1 버전을 요청합니다</translation> </message> @@ -5766,10 +5762,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%2이(가) %1의 마이크 음소거를 해제했습니다.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>다른 클라이언트와 일치하는 CELT 코덱을 찾을 수 없습니다. 모든 유저와 대화할 수 없습니다.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1이(가) 나의 마이크와 오디오를 음소거했습니다.</translation> @@ -6464,6 +6456,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8398,10 +8394,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP 주소</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT 버전</translation> - </message> - <message> <source>Details...</source> <translation>세부 정보...</translation> </message> diff --git a/src/mumble/mumble_lt.ts b/src/mumble/mumble_lt.ts index d8896a43b..afe6f5f49 100644 --- a/src/mumble/mumble_lt.ts +++ b/src/mumble/mumble_lt.ts @@ -5683,10 +5683,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Serveris</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5735,10 +5731,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 jus nutildė ir apkurtino.</translation> @@ -6405,6 +6397,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8337,10 +8333,6 @@ Prieigos raktas yra tekstinė eilutė, kuri gali būti naudojama kaip slaptažod <translation>IP adresas</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT versijos</translation> - </message> - <message> <source>Details...</source> <translation>Išsamiau...</translation> </message> diff --git a/src/mumble/mumble_nl.ts b/src/mumble/mumble_nl.ts index 93d0df321..0f16c88be 100644 --- a/src/mumble/mumble_nl.ts +++ b/src/mumble/mumble_nl.ts @@ -5715,10 +5715,6 @@ Indien niet, gelieve te annuleren en beide opnieuw te controleren.</translation> <translation>Server</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Laden van Opus mislukt; het zal niet beschikbaar zijn bij het encoderen en decoderen van geluid.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Server verwacht minstens Mumble versie %1</translation> </message> @@ -5767,10 +5763,6 @@ Indien niet, gelieve te annuleren en beide opnieuw te controleren.</translation> <translation>%2 liet %1 weer spreken.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Kon samen met de andere deelnemers geen gemeenschappelijke CELT-codec vinden. Je zal niet met iedereen kunnen spreken.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Je werd stom en doof gemaakt door %1.</translation> @@ -6465,6 +6457,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8400,10 +8396,6 @@ Een toegangssleutel is een tekenreeks die gebruikt kan worden als wachtwoord om <translation>IP-Adres</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT-versies</translation> - </message> - <message> <source>Details...</source> <translation>Details...</translation> </message> diff --git a/src/mumble/mumble_no.ts b/src/mumble/mumble_no.ts index 361c60304..d76524ff6 100644 --- a/src/mumble/mumble_no.ts +++ b/src/mumble/mumble_no.ts @@ -5731,10 +5731,6 @@ Ellers avbryt alt og sjekk ditt sertifikat og brukernavn.</translation> <translation>Tjener</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished">Klarte ikke å laste inn Opus til bruk for lydkoding og dekoding.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Tjeneren forespør minimum klientversjon %1</translation> </message> @@ -5783,10 +5779,6 @@ Ellers avbryt alt og sjekk ditt sertifikat og brukernavn.</translation> <translation>%2 opphevet %1 sin stumhet.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Kunne ikke finne samsvarende CELT-kodek delt av andre klienter. Du vil ikke kunne snakke med alle brukerne.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Du ble gjort stum og døv av %1.</translation> @@ -6480,6 +6472,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8416,10 +8412,6 @@ Et tilgangssymbol er en tekststring, som kan brukes som et passord for veldig en <translation>IP-adresse</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT-versjoner</translation> - </message> - <message> <source>Details...</source> <translation>Detaljer…</translation> </message> diff --git a/src/mumble/mumble_oc.ts b/src/mumble/mumble_oc.ts index 3d9d07d91..97b8d2c6f 100644 --- a/src/mumble/mumble_oc.ts +++ b/src/mumble/mumble_oc.ts @@ -5652,10 +5652,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Servidor</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5704,10 +5700,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6372,6 +6364,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8296,10 +8292,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>Adreça IP</translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation>Detalhs...</translation> </message> diff --git a/src/mumble/mumble_pch.hpp b/src/mumble/mumble_pch.hpp deleted file mode 100644 index abe9168ff..000000000 --- a/src/mumble/mumble_pch.hpp +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2008-2022 The Mumble Developers. All rights reserved. -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file at the root of the -// Mumble source tree or at <https://www.mumble.info/LICENSE>. - -#ifndef Q_MOC_RUN -# ifndef MUMBLE_MUMBLE_MUMBLE_PCH_H_ -# define MUMBLE_MUMBLE_MUMBLE_PCH_H_ - -# define QT_NO_CAST_TO_ASCII -# define QT_NO_CAST_FROM_ASCII -# define QT_USE_FAST_CONCATENATION -# define QT_USE_FAST_OPERATOR_PLUS - -# include <QtCore/QtGlobal> - -# ifdef Q_OS_WIN -# include "win.h" -# endif - -# define BOOST_TYPEOF_SUPPRESS_UNNAMED_NAMESPACE - -# ifdef __APPLE__ -# include <ApplicationServices/ApplicationServices.h> -# include <Carbon/Carbon.h> -# include <CoreFoundation/CoreFoundation.h> -# undef nil -# undef check -# undef TYPE_BOOL -# endif - -# include <QtCore/QtCore> -# include <QtGui/QtGui> -# include <QtWidgets/QtWidgets> - -# include <QtSvg/QtSvg> -# ifdef USE_DBUS -# include <QtDBus/QtDBus> -# endif -# include <QtNetwork/QtNetwork> -# include <QtSql/QtSql> -# include <QtXml/QtXml> - -# ifdef Q_OS_WIN -# define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1 -# endif -# include <celt.h> -# include <sndfile.h> -# include <speex/speex.h> -# include <speex/speex_echo.h> -# include <speex/speex_jitter.h> -# include <speex/speex_preprocess.h> -# include <speex/speex_resampler.h> - -# include <boost/accumulators/accumulators.hpp> -# include <boost/accumulators/statistics/extended_p_square.hpp> -# include <boost/accumulators/statistics/mean.hpp> -# include <boost/accumulators/statistics/stats.hpp> -# include <boost/accumulators/statistics/variance.hpp> -# include <boost/array.hpp> -# include <boost/bind.hpp> -# include <boost/enable_shared_from_this.hpp> -# include <boost/make_shared.hpp> -# include <boost/scoped_array.hpp> -# include <boost/scoped_ptr.hpp> -# include <boost/shared_array.hpp> -# include <boost/shared_ptr.hpp> -# include <boost/typeof/typeof.hpp> -# include <boost/weak_ptr.hpp> - -# include <algorithm> -# include <cmath> - -# ifdef Q_OS_WIN -# include <dbt.h> -# include <delayimp.h> -# include <mmreg.h> -# include <psapi.h> -# include <qos2.h> -# include <shellapi.h> -# include <shlobj.h> -# include <softpub.h> -# include <tlhelp32.h> -# include <wintrust.h> -# include <ws2tcpip.h> -# else // ifndef Q_OS_WIN -# include <arpa/inet.h> -# include <netinet/in.h> -# include <netinet/tcp.h> -# include <sys/socket.h> -# include <sys/types.h> -# endif - -# if !defined(Q_OS_OPENBSD) && (defined(__MMX__) || defined(Q_OS_WIN)) -# include <mmintrin.h> -# endif - -# ifdef USE_ZEROCONF -# include <dns_sd.h> -# endif - -# ifdef __OBJC__ -# define nil 0 -# endif - -# include <openssl/aes.h> -# include <openssl/conf.h> -# include <openssl/pem.h> -# include <openssl/pkcs12.h> -# include <openssl/rand.h> -# include <openssl/ssl.h> -# include <openssl/x509v3.h> -/* OpenSSL defines set_key. This breaks our protobuf-generated setters. */ -# undef set_key - -# endif -#endif diff --git a/src/mumble/mumble_pl.ts b/src/mumble/mumble_pl.ts index d61b3bd85..1504294ad 100644 --- a/src/mumble/mumble_pl.ts +++ b/src/mumble/mumble_pl.ts @@ -5716,10 +5716,6 @@ W przeciwnym razie proszę przerwać i sprawdzić swój certyfikat oraz nazwę u <translation>Serwera</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Nie udało się załadować Opus, nie będzie on dostępny do kodowania i dekodowania dźwięku.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Serwer wymaga minimalnej wersji klienta: %1</translation> </message> @@ -5768,10 +5764,6 @@ W przeciwnym razie proszę przerwać i sprawdzić swój certyfikat oraz nazwę u <translation>%2 wyłączył wyciszenie mikrofonu %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Nie udało się odnaleźć pasujących kodeków CELT. Nie będziesz mógł rozmawiać do wszystkich użytkowników.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Zostałeś ogłuszony oraz wyciszony przez %1.</translation> @@ -6526,6 +6518,10 @@ Prawidłowe opcje to: <comment>Global Shortcut</comment> <translation>Przełącza słuchanie danego kanału.</translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8462,10 +8458,6 @@ Token dostępu to ciąg tekstowy, który może służyć jako hasło do bardzo p <translation>Adres IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Wersje CELT</translation> - </message> - <message> <source>Details...</source> <translation>Szczegóły...</translation> </message> diff --git a/src/mumble/mumble_pt_BR.ts b/src/mumble/mumble_pt_BR.ts index 8d3543c67..6d1e6ea19 100644 --- a/src/mumble/mumble_pt_BR.ts +++ b/src/mumble/mumble_pt_BR.ts @@ -5716,10 +5716,6 @@ seu certificado e nome de usuário.</translation> <translation>Servidor</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Falhou ao carregar Opus, ele estará indisponível para de/codificação de áudio.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>O servidor requer a versão %1 mínima de cliente</translation> </message> @@ -5768,10 +5764,6 @@ seu certificado e nome de usuário.</translation> <translation>%1 desemudecido por %2.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Impossível encontrar decodificadores CELT correspondentes com outros clientes. Você não será capaz de falar com todos usuários.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Você foi emudecido e ensurdecido por %1.</translation> @@ -6465,6 +6457,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8399,10 +8395,6 @@ Uma credencial de acesso é uma cadeia de caracteres de texto, que podem ser usa <translation>Endereço IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Versões do CELT</translation> - </message> - <message> <source>Details...</source> <translation>Detalhes...</translation> </message> diff --git a/src/mumble/mumble_pt_PT.ts b/src/mumble/mumble_pt_PT.ts index c0082d137..75225cc13 100644 --- a/src/mumble/mumble_pt_PT.ts +++ b/src/mumble/mumble_pt_PT.ts @@ -5716,10 +5716,6 @@ o seu certificado e nome de utilizador.</translation> <translation>Servidor</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Falhou ao carregar Opus, ele estará indisponível para de/codificação de áudio.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>O servidor requer a versão %1 mínima de cliente</translation> </message> @@ -5768,10 +5764,6 @@ o seu certificado e nome de utilizador.</translation> <translation>%1 retirado silenciar por %2.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Não foi possível encontrar decodificadores CELT correspondentes com outros clientes. Não será capaz de falar com todos utilizadores.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Foi-lhe retirado silenciar e ensurder por %1.</translation> @@ -6443,6 +6435,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8377,10 +8373,6 @@ Uma credencial de acesso é uma sequência de texto, que pode ser usada como uma <translation>Endereço IP</translation> </message> <message> - <source>CELT Versions</source> - <translation>Versões CELT</translation> - </message> - <message> <source>Details...</source> <translation>Detalhes...</translation> </message> diff --git a/src/mumble/mumble_ro.ts b/src/mumble/mumble_ro.ts index 6ab0b8987..8a29e2878 100644 --- a/src/mumble/mumble_ro.ts +++ b/src/mumble/mumble_ro.ts @@ -5656,10 +5656,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5708,10 +5704,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6376,6 +6368,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8301,10 +8297,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished">Adresa IP</translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_ru.ts b/src/mumble/mumble_ru.ts index c264a7ee8..61995ccf5 100644 --- a/src/mumble/mumble_ru.ts +++ b/src/mumble/mumble_ru.ts @@ -5716,10 +5716,6 @@ Otherwise abort and check your certificate and username.</source> <translation>Сервер</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Не удалось загрузить Opus, он не будет доступен для кодирования/декодирования звука.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Сервер запрашивает минимальную версию клиента %1</translation> </message> @@ -5768,10 +5764,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%2 включил микрофон у %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Не найдены соответствующие CELT-кодеки у других пользователей. Вы не сможете говорить со всеми пользователями.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 выключил у Вас звук и микрофон.</translation> @@ -6466,6 +6458,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8402,10 +8398,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP адрес</translation> </message> <message> - <source>CELT Versions</source> - <translation>Версия CELT</translation> - </message> - <message> <source>Details...</source> <translation>Детали...</translation> </message> diff --git a/src/mumble/mumble_si.ts b/src/mumble/mumble_si.ts index fccaa18a3..373b0572c 100644 --- a/src/mumble/mumble_si.ts +++ b/src/mumble/mumble_si.ts @@ -6141,14 +6141,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -6334,6 +6326,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8253,10 +8249,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_sk.ts b/src/mumble/mumble_sk.ts index d949eda31..4e605bc8a 100644 --- a/src/mumble/mumble_sk.ts +++ b/src/mumble/mumble_sk.ts @@ -6277,14 +6277,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -6338,6 +6330,10 @@ Otherwise abort and check your certificate and username.</source> <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8258,10 +8254,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_sq.ts b/src/mumble/mumble_sq.ts index 04d36c6ff..e8b2249c2 100644 --- a/src/mumble/mumble_sq.ts +++ b/src/mumble/mumble_sq.ts @@ -6158,14 +6158,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -6336,6 +6328,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8255,10 +8251,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_sv.ts b/src/mumble/mumble_sv.ts index 365de522d..4a782be87 100644 --- a/src/mumble/mumble_sv.ts +++ b/src/mumble/mumble_sv.ts @@ -5715,10 +5715,6 @@ Om inte, avbryt och kontrollera ditt certifikat eller användarnamn.</translatio <translation>server</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Misslyckades med att ladda Opus, den kommer inte att vara tillgängligt för ljudkodning/avkodning.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Servern kräver klientversionen %1</translation> </message> @@ -5767,10 +5763,6 @@ Om inte, avbryt och kontrollera ditt certifikat eller användarnamn.</translatio <translation>%2 aktiverade mikrofon för %1.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Kunde inte hitta liknande CELT-kodekar med andra klienter. Du kan inte tala med alla användare.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>Din mikrofon och ljud avaktiverades av %1.</translation> @@ -6465,6 +6457,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8399,10 +8395,6 @@ En token är en textsträng, som kan användas som ett lösenord för enkel till <translation>IP adress</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT versioner</translation> - </message> - <message> <source>Details...</source> <translation>Detaljer...</translation> </message> diff --git a/src/mumble/mumble_te.ts b/src/mumble/mumble_te.ts index ba14f05c4..f051f4728 100644 --- a/src/mumble/mumble_te.ts +++ b/src/mumble/mumble_te.ts @@ -5663,10 +5663,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5715,10 +5711,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6383,6 +6375,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8313,10 +8309,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_th.ts b/src/mumble/mumble_th.ts index 28f2e4296..e34582867 100644 --- a/src/mumble/mumble_th.ts +++ b/src/mumble/mumble_th.ts @@ -5650,10 +5650,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5702,10 +5698,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6370,6 +6362,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8293,10 +8289,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_tr.ts b/src/mumble/mumble_tr.ts index f2ba99729..19321a801 100644 --- a/src/mumble/mumble_tr.ts +++ b/src/mumble/mumble_tr.ts @@ -5714,10 +5714,6 @@ deneyiniz. Yoksa iptal edip parolanızı kontrol ediniz.</translation> <translation>Sunucu</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>Opus'ın yüklenmesi başarısız oldu, ses kodlaması ve kodlama çözmesi için kullanılamayacaktır.</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>Sunucu asgari %1 istemci sürümünü talep ediyor</translation> </message> @@ -5766,10 +5762,6 @@ deneyiniz. Yoksa iptal edip parolanızı kontrol ediniz.</translation> <translation>%1 adlı kullanıcının susturulması %2 tarafından kaldırıldı.</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>Diğer istemcilerle uyumlu CELT kodekleri bulunamadı. Diğer kullanıcılar ile konuşamayacaksınız.</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 tarafından susturuldunuz ve sağır edildiniz.</translation> @@ -6524,6 +6516,10 @@ Geçerli seçenekler şunlardır: <comment>Global Shortcut</comment> <translation>Verilen kanalı dinlemeye geçer.</translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8458,10 +8454,6 @@ Erişim jetonu bir metindir ve kanallara erişimin çok basit bir şekilde yöne <translation>İP Adresi</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT Sürümleri</translation> - </message> - <message> <source>Details...</source> <translation>Ayrıntılar...</translation> </message> diff --git a/src/mumble/mumble_uk.ts b/src/mumble/mumble_uk.ts index db9b7c6e6..4fa94f3f0 100644 --- a/src/mumble/mumble_uk.ts +++ b/src/mumble/mumble_uk.ts @@ -5653,10 +5653,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation type="unfinished"></translation> </message> @@ -5705,10 +5701,6 @@ Otherwise abort and check your certificate and username.</source> <translation type="unfinished"></translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation type="unfinished"></translation> @@ -6373,6 +6365,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8298,10 +8294,6 @@ An access token is a text string, which can be used as a password for very simpl <translation type="unfinished"></translation> </message> <message> - <source>CELT Versions</source> - <translation type="unfinished"></translation> - </message> - <message> <source>Details...</source> <translation type="unfinished"></translation> </message> diff --git a/src/mumble/mumble_zh_CN.ts b/src/mumble/mumble_zh_CN.ts index 542ea6f13..395b3e498 100644 --- a/src/mumble/mumble_zh_CN.ts +++ b/src/mumble/mumble_zh_CN.ts @@ -5714,10 +5714,6 @@ Otherwise abort and check your certificate and username.</source> <translation>服务器</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation>加载 Opus 失败,无法进行音频编解码。</translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>服务器要求客户端版本至少为 %1</translation> </message> @@ -5766,10 +5762,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%2 开启了 %1 麦克风。</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>无法找到与其他客户端匹配的 CELT 编解码器。您将无法与所有用户交谈。</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>%1 关闭了您的麦克风和扬声器。</translation> @@ -6524,6 +6516,10 @@ mumble://[<用户名>[:<密码>]@]<主机名>[:<端口>] <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8458,10 +8454,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP 地址</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT 版本</translation> - </message> - <message> <source>Details...</source> <translation>详情...</translation> </message> diff --git a/src/mumble/mumble_zh_HK.ts b/src/mumble/mumble_zh_HK.ts index f784c32f9..211eb8102 100644 --- a/src/mumble/mumble_zh_HK.ts +++ b/src/mumble/mumble_zh_HK.ts @@ -5652,10 +5652,6 @@ Otherwise abort and check your certificate and username.</source> <translation>伺服器</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>伺服器要求使用 %1 以上版本客戶端</translation> </message> @@ -5704,10 +5700,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%1 被 %2 重新開啟語音。</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation>找不到符合CELT編碼的使用者。您不能對所有人說話。</translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>您被 %1 關閉語音與聲音。</translation> @@ -6375,6 +6367,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8304,10 +8300,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP位址</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT版本</translation> - </message> - <message> <source>Details...</source> <translation>詳細資料...</translation> </message> diff --git a/src/mumble/mumble_zh_TW.ts b/src/mumble/mumble_zh_TW.ts index 907e57a3c..db87b09e6 100644 --- a/src/mumble/mumble_zh_TW.ts +++ b/src/mumble/mumble_zh_TW.ts @@ -5678,10 +5678,6 @@ Otherwise abort and check your certificate and username.</source> <translation>伺服器</translation> </message> <message> - <source>Failed to load Opus, it will not be available for audio encoding/decoding.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>The server requests minimum client version %1</source> <translation>伺服器要求使用 %1 以上版本客戶端</translation> </message> @@ -5730,10 +5726,6 @@ Otherwise abort and check your certificate and username.</source> <translation>%1 被 %2 取消關閉麥克風。</translation> </message> <message> - <source>Unable to find matching CELT codecs with other clients. You will not be able to talk to all users.</source> - <translation type="unfinished"></translation> - </message> - <message> <source>You were muted and deafened by %1.</source> <oldsource>You were deafened by %1.</oldsource> <translation>你被 %1 關閉麥克風與喇叭。</translation> @@ -6398,6 +6390,10 @@ Valid options are: <comment>Global Shortcut</comment> <translation type="unfinished"></translation> </message> + <message> + <source>Server instructed us to use an audio codec different from Opus, which is no longer supported. Disconnecting...</source> + <translation type="unfinished"></translation> + </message> </context> <context> <name>Manual</name> @@ -8324,10 +8320,6 @@ An access token is a text string, which can be used as a password for very simpl <translation>IP位置</translation> </message> <message> - <source>CELT Versions</source> - <translation>CELT 版本</translation> - </message> - <message> <source>Details...</source> <translation>細節...</translation> </message> diff --git a/src/murmur/murmur_pch.h b/src/murmur/murmur_pch.h deleted file mode 100644 index bdff9d1b9..000000000 --- a/src/murmur/murmur_pch.h +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2007-2022 The Mumble Developers. All rights reserved. -// Use of this source code is governed by a BSD-style license -// that can be found in the LICENSE file at the root of the -// Mumble source tree or at <https://www.mumble.info/LICENSE>. - -#ifndef Q_MOC_RUN -# ifndef MUMBLE_MURMUR_MURMUR_PCH_H_ -# define MUMBLE_MURMUR_MURMUR_PCH_H_ - -# include <QtCore/QtGlobal> - -# ifdef Q_OS_WIN -# include "win.h" -# endif - -# ifdef __APPLE__ -# include <CoreFoundation/CoreFoundation.h> -# include <CoreServices/CoreServices.h> -# undef check -# undef TYPE_BOOL -# endif - -# include <QtCore/QtCore> -# include <QtNetwork/QtNetwork> -# include <QtSql/QtSql> -# include <QtXml/QtXml> -# ifdef USE_DBUS -# include <QtDBus/QtDBus> -# endif - -# ifdef Q_OS_WIN -# include <QtGui/QtGui> - -# include <delayimp.h> -# include <qos2.h> -# include <shellapi.h> -# include <ws2tcpip.h> - -extern "C" { -void __cpuid(int a[4], int b); -}; -# endif - -# ifdef Q_OS_UNIX -# include <fcntl.h> -# include <stdio.h> -# include <stdlib.h> -# include <sys/resource.h> -# include <sys/socket.h> -# include <sys/stat.h> -# include <sys/time.h> -# include <sys/types.h> -# include <syslog.h> -# include <unistd.h> -# ifdef Q_OS_LINUX -# include <linux/types.h> // needed to work around evil magic stuff in capability.h -# include <sys/capability.h> -# include <sys/prctl.h> -# endif -# include <grp.h> -# include <pwd.h> -# if defined __FreeBSD__ || defined __OpenBSD__ -# include <netinet/in_systm.h> -# endif -# include <errno.h> -# include <netinet/in.h> -# include <netinet/ip.h> -# include <poll.h> -# include <signal.h> -# ifdef Q_OS_DARWIN -# include <poll.h> -# endif -# endif - -# include <cmath> - -# include <boost/bind.hpp> -# include <boost/function.hpp> -# include <boost/shared_ptr.hpp> -# include <boost/weak_ptr.hpp> - -# ifdef USE_ZEROCONF -# include <dns_sd.h> -# endif - -# include <openssl/aes.h> -# include <openssl/bn.h> -# include <openssl/conf.h> -# include <openssl/err.h> -# include <openssl/opensslv.h> -# include <openssl/pem.h> -# include <openssl/rand.h> -# include <openssl/ssl.h> -# include <openssl/x509v3.h> -/* OpenSSL defines set_key. This breaks our protobuf-generated setters. */ -# undef set_key - -# endif -#endif |