Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mumble.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Adam <dev@robert-adam.de>2022-09-10 16:50:08 +0300
committerGitHub <noreply@github.com>2022-09-10 16:50:08 +0300
commitc8bf3b203c404c5e7223979f62efc08c607b2be8 (patch)
treedd79c0de1366c1d23e039857bf729c369132431b
parentdd55822180b50a2969ce8addc82757a4073a58bc (diff)
parent7f47d120c571828a154e240ede533aebc69bc5f2 (diff)
Merge PR #5869: CHANGE(client): Drop support for all legacy codecs
-rw-r--r--.gitmodules6
-rw-r--r--3rdparty/celt-0.7.0-build/CMakeLists.txt80
-rw-r--r--3rdparty/celt-0.7.0-build/celt-0.7.0.rc42
-rw-r--r--3rdparty/celt-0.7.0-build/config.h175
-rw-r--r--3rdparty/celt-0.7.0-build/win32/config.h168
m---------3rdparty/celt-0.7.0-src0
-rw-r--r--3rdparty/speex-build/AGC.cpp153
-rw-r--r--3rdparty/speex-build/CMakeLists.txt97
-rw-r--r--3rdparty/speex-build/ResampMark.cpp383
-rw-r--r--3rdparty/speex-build/SpeexMark.cpp179
-rw-r--r--3rdparty/speex-build/config.h152
-rw-r--r--3rdparty/speex-build/speex_config_types.h11
-rw-r--r--3rdparty/speex-build/speexdsp_config_types.h11
-rw-r--r--3rdparty/speex-build/win32/config.h26
m---------3rdparty/speex-src0
-rw-r--r--3rdparty/speexdsp-build/CMakeLists.txt153
-rw-r--r--3rdparty/speexdsp-build/cmake/try_compile_snippet.cmake68
-rw-r--r--3rdparty/speexdsp-build/mumble_speex_init.c (renamed from 3rdparty/speex-build/mumble_speex_init.c)0
-rw-r--r--3rdparty/speexdsp-build/speexdsp.def (renamed from 3rdparty/speex-build/speex.def)64
-rw-r--r--docs/dev/build-instructions/cmake_options.md5
-rw-r--r--installer/ClientInstaller.cs6
-rw-r--r--src/mumble/Audio.cpp27
-rw-r--r--src/mumble/AudioInput.cpp190
-rw-r--r--src/mumble/AudioInput.h17
-rw-r--r--src/mumble/AudioOutputSpeech.cpp268
-rw-r--r--src/mumble/AudioOutputSpeech.h9
-rw-r--r--src/mumble/CELTCodec.cpp159
-rw-r--r--src/mumble/CELTCodec.h74
-rw-r--r--src/mumble/CMakeLists.txt47
-rw-r--r--src/mumble/Global.cpp5
-rw-r--r--src/mumble/Global.h5
-rw-r--r--src/mumble/MainWindow.cpp5
-rw-r--r--src/mumble/Messages.cpp53
-rw-r--r--src/mumble/ServerHandler.cpp8
-rw-r--r--src/mumble/ServerInformation.cpp12
-rw-r--r--src/mumble/Settings.cpp1
-rw-r--r--src/mumble/Settings.h3
-rw-r--r--src/mumble/SettingsKeys.h1
-rw-r--r--src/mumble/SettingsMacros.h4
-rw-r--r--src/mumble/UserInformation.cpp13
-rw-r--r--src/mumble/UserInformation.ui99
-rw-r--r--src/mumble/mumble_ar.ts16
-rw-r--r--src/mumble/mumble_bg.ts16
-rw-r--r--src/mumble/mumble_br.ts16
-rw-r--r--src/mumble/mumble_ca.ts16
-rw-r--r--src/mumble/mumble_cs.ts16
-rw-r--r--src/mumble/mumble_cy.ts16
-rw-r--r--src/mumble/mumble_da.ts16
-rw-r--r--src/mumble/mumble_de.ts16
-rw-r--r--src/mumble/mumble_el.ts16
-rw-r--r--src/mumble/mumble_en.ts16
-rw-r--r--src/mumble/mumble_en_GB.ts16
-rw-r--r--src/mumble/mumble_eo.ts16
-rw-r--r--src/mumble/mumble_es.ts16
-rw-r--r--src/mumble/mumble_et.ts16
-rw-r--r--src/mumble/mumble_eu.ts16
-rw-r--r--src/mumble/mumble_fa_IR.ts16
-rw-r--r--src/mumble/mumble_fi.ts16
-rw-r--r--src/mumble/mumble_fr.ts16
-rw-r--r--src/mumble/mumble_gl.ts16
-rw-r--r--src/mumble/mumble_he.ts16
-rw-r--r--src/mumble/mumble_hu.ts16
-rw-r--r--src/mumble/mumble_it.ts16
-rw-r--r--src/mumble/mumble_ja.ts16
-rw-r--r--src/mumble/mumble_ko.ts16
-rw-r--r--src/mumble/mumble_lt.ts16
-rw-r--r--src/mumble/mumble_nl.ts16
-rw-r--r--src/mumble/mumble_no.ts16
-rw-r--r--src/mumble/mumble_oc.ts16
-rw-r--r--src/mumble/mumble_pch.hpp117
-rw-r--r--src/mumble/mumble_pl.ts16
-rw-r--r--src/mumble/mumble_pt_BR.ts16
-rw-r--r--src/mumble/mumble_pt_PT.ts16
-rw-r--r--src/mumble/mumble_ro.ts16
-rw-r--r--src/mumble/mumble_ru.ts16
-rw-r--r--src/mumble/mumble_si.ts16
-rw-r--r--src/mumble/mumble_sk.ts16
-rw-r--r--src/mumble/mumble_sq.ts16
-rw-r--r--src/mumble/mumble_sv.ts16
-rw-r--r--src/mumble/mumble_te.ts16
-rw-r--r--src/mumble/mumble_th.ts16
-rw-r--r--src/mumble/mumble_tr.ts16
-rw-r--r--src/mumble/mumble_uk.ts16
-rw-r--r--src/mumble/mumble_zh_CN.ts16
-rw-r--r--src/mumble/mumble_zh_HK.ts16
-rw-r--r--src/mumble/mumble_zh_TW.ts16
-rw-r--r--src/murmur/murmur_pch.h99
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: &lt;a href=&quot;https://github.com/mumble-voip/mumble/issues/5827/&quot;&gt;Issue #5827&lt;/a&gt;)</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: &lt;a href=&quot;https://github.com/mumble-voip/mumble/issues/5827/&quot;&gt;Issue #5827&lt;/a&gt;)</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&apos;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&#xa0;…</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&apos;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&apos;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&#xa0;:
<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&apos;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&apos;ı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://[&lt;用户名&gt;[:&lt;密码&gt;]@]&lt;主机名&gt;[:&lt;端口&gt;]
<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