diff --git a/src/MumbleProtocol.h b/src/MumbleProtocol.h index 5732d6a5c3b..fd95d5aeae5 100644 --- a/src/MumbleProtocol.h +++ b/src/MumbleProtocol.h @@ -89,8 +89,9 @@ namespace Protocol { }; namespace ReservedTargetIDs { - constexpr unsigned int REGULAR_SPEECH = 0; - constexpr unsigned int SERVER_LOOPBACK = 31; + constexpr unsigned int REGULAR_SPEECH = 0; + constexpr unsigned int SERVER_LOOPBACK_REGULAR = 30; + constexpr unsigned int SERVER_LOOPBACK_ONLY = 31; } // namespace ReservedTargetIDs using audio_context_t = byte; diff --git a/src/mumble/AudioConfigDialog.cpp b/src/mumble/AudioConfigDialog.cpp index cf83d6fa812..8918c52763b 100644 --- a/src/mumble/AudioConfigDialog.cpp +++ b/src/mumble/AudioConfigDialog.cpp @@ -640,8 +640,10 @@ AudioOutputDialog::AudioOutputDialog(Settings &st) : ConfigWidget(st) { qcbSystem->setEnabled(qcbSystem->count() > 1); qcbLoopback->addItem(tr("None"), Settings::None); - qcbLoopback->addItem(tr("Local"), Settings::Local); - qcbLoopback->addItem(tr("Server"), Settings::Server); + qcbLoopback->addItem(tr("Local (don't send to others)"), Settings::LocalOnly); + qcbLoopback->addItem(tr("Local (send to others)"), Settings::LocalRegular); + qcbLoopback->addItem(tr("Server (don't send to others)"), Settings::ServerOnly); + qcbLoopback->addItem(tr("Server (send to others)"), Settings::ServerRegular); qcbDevice->view()->setTextElideMode(Qt::ElideRight); @@ -729,7 +731,7 @@ void AudioOutputDialog::load(const Settings &r) { enablePulseAudioAttenuationOptionsFor(AudioOutputRegistrar::current); loadSlider(qsJitter, r.iJitterBufferSize); - loadComboBox(qcbLoopback, r.lmLoopMode); + loadComboBox(qcbLoopback, QVariant::fromValue(r.lmLoopMode)); loadSlider(qsPacketDelay, static_cast< int >(r.dMaxPacketDelay)); loadSlider(qsPacketLoss, static_cast< int >(r.dPacketLoss * 100.0f + 0.5f)); qsbMinimumDistance->setValue(r.fAudioMinDistance); @@ -755,7 +757,7 @@ void AudioOutputDialog::save() const { s.bAttenuateUsersOnPrioritySpeak = qcbAttenuateUsersOnPrioritySpeak->isChecked(); s.iJitterBufferSize = qsJitter->value(); s.qsAudioOutput = qcbSystem->currentText(); - s.lmLoopMode = static_cast< Settings::LoopMode >(qcbLoopback->currentIndex()); + s.lmLoopMode = qcbLoopback->currentData().value< Settings::LoopMode >(); s.dMaxPacketDelay = static_cast< float >(qsPacketDelay->value()); s.dPacketLoss = static_cast< float >(qsPacketLoss->value()) / 100.0f; s.fAudioMinDistance = static_cast< float >(qsbMinimumDistance->value()); diff --git a/src/mumble/AudioInput.cpp b/src/mumble/AudioInput.cpp index 3187704d1b8..2c9388f2993 100644 --- a/src/mumble/AudioInput.cpp +++ b/src/mumble/AudioInput.cpp @@ -992,7 +992,8 @@ void AudioInput::encodeAudioFrame(AudioChunk chunk) { ClientUser *p = ClientUser::get(Global::get().uiSession); bool bTalkingWhenMuted = false; - if (Global::get().s.bMute || ((Global::get().s.lmLoopMode != Settings::Local) && p && (p->bMute || p->bSuppress)) + if (Global::get().s.bMute + || ((Global::get().s.lmLoopMode != Settings::LocalOnly) && p && (p->bMute || p->bSuppress)) || Global::get().bPushToMute || (voiceTargetID < 0)) { bTalkingWhenMuted = bIsSpeech; bIsSpeech = false; @@ -1173,8 +1174,16 @@ void AudioInput::flushCheck(const QByteArray &frame, bool terminator, std::int32 // accordingly once the client whispers for the next time. Global::get().iPrevTarget = 0; } - if (Global::get().s.lmLoopMode == Settings::Server) { - audioData.targetOrContext = Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK; + + switch (Global::get().s.lmLoopMode) { + case Settings::ServerOnly: + audioData.targetOrContext = Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK_ONLY; + break; + case Settings::ServerRegular: + audioData.targetOrContext = Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK_REGULAR; + break; + default: + break; } audioData.usedCodec = m_codec; @@ -1215,14 +1224,20 @@ void AudioInput::flushCheck(const QByteArray &frame, bool terminator, std::int32 } } - if (Global::get().s.lmLoopMode == Settings::Local) { - // Only add audio data to local loop buffer - LoopUser::lpLoopy.addFrame(audioData); - } else { - // Encode audio frame and send out - gsl::span< const Mumble::Protocol::byte > encodedAudioPacket = m_udpEncoder.encodeAudioPacket(audioData); - - sendAudioFrame(encodedAudioPacket); + switch (Global::get().s.lmLoopMode) { + case Settings::LocalOnly: + // Only add audio data to local loop buffer + LoopUser::lpLoopy.addFrame(audioData); + break; + case Settings::LocalRegular: + LoopUser::lpLoopy.addFrame(audioData); + [[fallthrough]]; + default: { + // Encode audio frame and send out + gsl::span< const Mumble::Protocol::byte > encodedAudioPacket = m_udpEncoder.encodeAudioPacket(audioData); + + sendAudioFrame(encodedAudioPacket); + } } qlFrames.clear(); diff --git a/src/mumble/AudioWizard.cpp b/src/mumble/AudioWizard.cpp index 608b1c55f53..d8aa944e3f7 100644 --- a/src/mumble/AudioWizard.cpp +++ b/src/mumble/AudioWizard.cpp @@ -173,7 +173,7 @@ AudioWizard::AudioWizard(QWidget *p) : QWizard(p) { updateTriggerWidgets(qrPTT->isChecked()); sOldSettings = Global::get().s; - Global::get().s.lmLoopMode = Settings::Local; + Global::get().s.lmLoopMode = Settings::LocalOnly; Global::get().s.dPacketLoss = 0.0; Global::get().s.dMaxPacketDelay = 0.0; Global::get().s.bMute = true; diff --git a/src/mumble/ConfigWidget.cpp b/src/mumble/ConfigWidget.cpp index 4c005db1de4..1e4105e7f0a 100644 --- a/src/mumble/ConfigWidget.cpp +++ b/src/mumble/ConfigWidget.cpp @@ -69,3 +69,18 @@ void ConfigWidget::loadComboBox(QComboBox *c, int v) { disconnect(SIGNAL(intSignal(int))); } } + +void ConfigWidget::loadComboBox(QComboBox *c, const QVariant &v) { + const int index = c->findData(v); + if (index == -1) { + return; + } + + if (c->currentIndex() != index) { + c->setCurrentIndex(index); + } else { + connect(this, SIGNAL(intSignal(int)), c, SIGNAL(currentIndexChanged(int))); + emit intSignal(index); + disconnect(SIGNAL(intSignal(int))); + } +} diff --git a/src/mumble/ConfigWidget.h b/src/mumble/ConfigWidget.h index 3c3802d54c1..c3250d0237c 100644 --- a/src/mumble/ConfigWidget.h +++ b/src/mumble/ConfigWidget.h @@ -24,6 +24,7 @@ class ConfigWidget : public QWidget { void loadSlider(QSlider *, int); void loadCheckBox(QAbstractButton *, bool); void loadComboBox(QComboBox *, int); + void loadComboBox(QComboBox *, const QVariant &); signals: void intSignal(int); diff --git a/src/mumble/EnumStringConversions.cpp b/src/mumble/EnumStringConversions.cpp index 48e3b8b1fec..c0c442438d9 100644 --- a/src/mumble/EnumStringConversions.cpp +++ b/src/mumble/EnumStringConversions.cpp @@ -14,10 +14,12 @@ PROCESS(Settings::VADSource, Amplitude, "Amplitude") \ PROCESS(Settings::VADSource, SignalToNoise, "SignalToNoise") -#define LOOP_MODE_VALUES \ - PROCESS(Settings::LoopMode, None, "None") \ - PROCESS(Settings::LoopMode, Local, "Local") \ - PROCESS(Settings::LoopMode, Server, "Server") +#define LOOP_MODE_VALUES \ + PROCESS(Settings::LoopMode, None, "None") \ + PROCESS(Settings::LoopMode, LocalOnly, "LocalOnly") \ + PROCESS(Settings::LoopMode, ServerOnly, "ServerOnly") \ + PROCESS(Settings::LoopMode, LocalRegular, "LocalRegular") \ + PROCESS(Settings::LoopMode, ServerRegular, "ServerRegular") #define CHANNEL_EXPAND_VALUES \ PROCESS(Settings::ChannelExpand, NoChannels, "NoChannels") \ diff --git a/src/mumble/Settings.h b/src/mumble/Settings.h index 09b37d69388..13ac86fe206 100644 --- a/src/mumble/Settings.h +++ b/src/mumble/Settings.h @@ -188,7 +188,7 @@ struct OverlaySettings { struct Settings { enum AudioTransmit { Continuous, VAD, PushToTalk }; enum VADSource { Amplitude, SignalToNoise }; - enum LoopMode { None, Local, Server }; + enum LoopMode { None, LocalOnly, ServerOnly, LocalRegular, ServerRegular }; enum ChannelExpand { NoChannels, ChannelsWithUsers, AllChannels }; enum ChannelDrag { Ask, DoNothing, Move }; enum ServerShow { ShowPopulated, ShowReachable, ShowAll }; @@ -579,4 +579,6 @@ struct Settings { QString findSettingsLocation(bool legacy = false, bool *foundExistingFile = nullptr) const; }; +Q_DECLARE_METATYPE(Settings::LoopMode) + #endif // MUMBLE_MUMBLE_SETTINGS_H_ diff --git a/src/mumble/mumble_ar.ts b/src/mumble/mumble_ar.ts index 95efae83480..d57d44871a5 100644 --- a/src/mumble/mumble_ar.ts +++ b/src/mumble/mumble_ar.ts @@ -1631,14 +1631,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output @@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_bg.ts b/src/mumble/mumble_bg.ts index 7e64e706db9..03e875f2756 100644 --- a/src/mumble/mumble_bg.ts +++ b/src/mumble/mumble_bg.ts @@ -1632,14 +1632,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - Сървър - Audio Output Звуков изход @@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_br.ts b/src/mumble/mumble_br.ts index 7af7aeddb7c..15ec8cd5695 100644 --- a/src/mumble/mumble_br.ts +++ b/src/mumble/mumble_br.ts @@ -1631,14 +1631,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Hini ebet - - Local - Lec'hel - - - Server - Servijer - Audio Output @@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_ca.ts b/src/mumble/mumble_ca.ts index 148f7835759..2eb392053b4 100644 --- a/src/mumble/mumble_ca.ts +++ b/src/mumble/mumble_ca.ts @@ -1639,14 +1639,6 @@ Aquest valor us permet establir el nombre màxim d'usuaris permesos al cana None Cap - - Local - Local - - - Server - Servidor - Audio Output Sortida d'àudio @@ -1683,6 +1675,22 @@ Aquest valor us permet establir el nombre màxim d'usuaris permesos al cana meters metres + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_cs.ts b/src/mumble/mumble_cs.ts index 0a5a486e83c..d20c55bbdf4 100644 --- a/src/mumble/mumble_cs.ts +++ b/src/mumble/mumble_cs.ts @@ -1639,14 +1639,6 @@ Tato hodnota Vám umožňuje nastavit maximální počet povolených uživatelů None Žádná - - Local - Místní - - - Server - Server - Audio Output Výstup Zvuku @@ -1683,6 +1675,22 @@ Tato hodnota Vám umožňuje nastavit maximální počet povolených uživatelů meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample @@ -3331,7 +3339,7 @@ Jste si jisti, že chcete certifikát nahradit? Server - + Serveru diff --git a/src/mumble/mumble_cy.ts b/src/mumble/mumble_cy.ts index bca051f771c..1655c285898 100644 --- a/src/mumble/mumble_cy.ts +++ b/src/mumble/mumble_cy.ts @@ -1632,14 +1632,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Dim - - Local - - - - Server - - Audio Output @@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_da.ts b/src/mumble/mumble_da.ts index 31bd1cfd393..d631914aa74 100644 --- a/src/mumble/mumble_da.ts +++ b/src/mumble/mumble_da.ts @@ -1638,14 +1638,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Ingen - - Local - Lokal - - - Server - Server - Audio Output Lydafspilning @@ -1682,6 +1674,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample @@ -3329,7 +3337,7 @@ Er du sikker på du vil erstatte dit certifikat? Server - + server diff --git a/src/mumble/mumble_de.ts b/src/mumble/mumble_de.ts index 7bd4f8fdd5e..e636a237278 100644 --- a/src/mumble/mumble_de.ts +++ b/src/mumble/mumble_de.ts @@ -1639,14 +1639,6 @@ Dieser Wert erlaubt das Einstellen der maximal im Kanal erlaubten Benutzeranzahl None Keine - - Local - Lokal - - - Server - Server - Audio Output Audioausgabe @@ -1683,6 +1675,22 @@ Dieser Wert erlaubt das Einstellen der maximal im Kanal erlaubten Benutzeranzahl meters Meter + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_el.ts b/src/mumble/mumble_el.ts index 4a9619fc047..46030b951f0 100644 --- a/src/mumble/mumble_el.ts +++ b/src/mumble/mumble_el.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Κανένα - - Local - Τοπικό - - - Server - Διακομιστής - Audio Output Εξοδος Ήχου @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_en.ts b/src/mumble/mumble_en.ts index 6a7dbd488e1..b35bd91f01c 100644 --- a/src/mumble/mumble_en.ts +++ b/src/mumble/mumble_en.ts @@ -1631,14 +1631,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output @@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_en_GB.ts b/src/mumble/mumble_en_GB.ts index 3e69d6d8127..e4a75be5e97 100644 --- a/src/mumble/mumble_en_GB.ts +++ b/src/mumble/mumble_en_GB.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None None - - Local - Local - - - Server - Server - Audio Output Audio Output @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_eo.ts b/src/mumble/mumble_eo.ts index 315681b4e2f..462f56e09fc 100644 --- a/src/mumble/mumble_eo.ts +++ b/src/mumble/mumble_eo.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Neniu - - Local - Loke - - - Server - Servilo - Audio Output Son-eligo @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_es.ts b/src/mumble/mumble_es.ts index a4a381d2522..ff120075f23 100644 --- a/src/mumble/mumble_es.ts +++ b/src/mumble/mumble_es.ts @@ -1639,14 +1639,6 @@ Este valor permite fijar el número máximo de usuarios permitidos en el canal. None Ninguno - - Local - Local - - - Server - Servidor - Audio Output Salida de audio @@ -1683,6 +1675,22 @@ Este valor permite fijar el número máximo de usuarios permitidos en el canal. meters metros + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample @@ -3775,11 +3783,11 @@ Sin esta opción habilitada, los métodos abreviados globales de Mumble en aplic checked - + marcado unchecked - + sin marcar @@ -4496,15 +4504,15 @@ La configuración solo se aplica a los mensajes nuevos, los que ya se muestran c checked - + marcado unchecked - + sin marcar decibels - + decibelios @@ -7242,7 +7250,7 @@ Las opciones válidas son: Graphical positional audio simulation view - + Vista gráfica de simulación de audio posicional This visually represents the positional audio configuration that is currently being used diff --git a/src/mumble/mumble_et.ts b/src/mumble/mumble_et.ts index e336e59c541..11044149a6c 100644 --- a/src/mumble/mumble_et.ts +++ b/src/mumble/mumble_et.ts @@ -1632,14 +1632,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Pole - - Local - Kohalik - - - Server - Server - Audio Output Heliväljund @@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_eu.ts b/src/mumble/mumble_eu.ts index d014f8f5ca2..be744ee03f0 100644 --- a/src/mumble/mumble_eu.ts +++ b/src/mumble/mumble_eu.ts @@ -1641,14 +1641,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Bat ere ez - - Local - Lokala - - - Server - Zerbitzaria - Audio Output Audio Irteera @@ -1685,6 +1677,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_fa_IR.ts b/src/mumble/mumble_fa_IR.ts index d6604d9a7c0..5e03aa97557 100644 --- a/src/mumble/mumble_fa_IR.ts +++ b/src/mumble/mumble_fa_IR.ts @@ -1633,14 +1633,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output خروجی صدا @@ -1677,6 +1669,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_fi.ts b/src/mumble/mumble_fi.ts index 3f26dbe7f13..cfc918fa559 100644 --- a/src/mumble/mumble_fi.ts +++ b/src/mumble/mumble_fi.ts @@ -1639,14 +1639,6 @@ Tämän numeron ollessa suurempi kuin nolla kanava sallii enintään numeron suu None Ei mikään - - Local - Paikallinen - - - Server - Palvelin - Audio Output Äänen ulostulo @@ -1683,6 +1675,22 @@ Tämän numeron ollessa suurempi kuin nolla kanava sallii enintään numeron suu meters metriä + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_fr.ts b/src/mumble/mumble_fr.ts index dc9ab84de2c..540630eb972 100644 --- a/src/mumble/mumble_fr.ts +++ b/src/mumble/mumble_fr.ts @@ -1639,14 +1639,6 @@ Cette valeur vous permet de définir un nombre maximum d'utilisateurs autor None Aucun - - Local - Local - - - Server - Serveur - Audio Output Sortie audio @@ -1683,6 +1675,22 @@ Cette valeur vous permet de définir un nombre maximum d'utilisateurs autor meters mètres + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_gl.ts b/src/mumble/mumble_gl.ts index e37841c63db..3f86f70acdb 100644 --- a/src/mumble/mumble_gl.ts +++ b/src/mumble/mumble_gl.ts @@ -1633,14 +1633,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output @@ -1677,6 +1669,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_he.ts b/src/mumble/mumble_he.ts index 9bca42d93bf..e0a2a3f119d 100644 --- a/src/mumble/mumble_he.ts +++ b/src/mumble/mumble_he.ts @@ -1640,14 +1640,6 @@ This value allows you to set the maximum number of users allowed in the channel. None ללא - - Local - מקומי - - - Server - שרת - Audio Output פלט שמע @@ -1684,6 +1676,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_hi.ts b/src/mumble/mumble_hi.ts index 8b5d71d66f5..5daf4532a8a 100644 --- a/src/mumble/mumble_hi.ts +++ b/src/mumble/mumble_hi.ts @@ -1625,14 +1625,6 @@ Contains the list of members inherited by the current channel. Uncheck <i> None - - Local - - - - Server - - Distance at which audio volume from another player starts decreasing @@ -1669,6 +1661,22 @@ Contains the list of members inherited by the current channel. Uncheck <i> meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_hu.ts b/src/mumble/mumble_hu.ts index 6360fd8d5ae..9f9038743d3 100644 --- a/src/mumble/mumble_hu.ts +++ b/src/mumble/mumble_hu.ts @@ -1635,14 +1635,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Nincs - - Local - Helyi - - - Server - Kiszolgáló - Audio Output Hangkimenet @@ -1679,6 +1671,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_it.ts b/src/mumble/mumble_it.ts index 46496fd75c7..501a580060f 100644 --- a/src/mumble/mumble_it.ts +++ b/src/mumble/mumble_it.ts @@ -1639,14 +1639,6 @@ Questo valore ti permette di impostare il numero massimo di utenti consentiti ne None Disattivato - - Local - Locale - - - Server - Server - Audio Output Uscita Audio @@ -1683,6 +1675,22 @@ Questo valore ti permette di impostare il numero massimo di utenti consentiti ne meters metri + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample @@ -2252,7 +2260,7 @@ Parla ad alta voce, come quando sei infastidito o eccitato. Poi diminuisci il vo Speech is dynamically amplified by at most this amount - + Il parlato è dinamicamente amplificato di questa quantità Voice activity detection level @@ -4503,7 +4511,7 @@ Questa impostazione si applica solo ai nuovi messaggi, quelli già mostrati mant decibels - + decibel diff --git a/src/mumble/mumble_ja.ts b/src/mumble/mumble_ja.ts index f39d5fcffbd..f825270e5a2 100644 --- a/src/mumble/mumble_ja.ts +++ b/src/mumble/mumble_ja.ts @@ -1640,14 +1640,6 @@ This value allows you to set the maximum number of users allowed in the channel. None なし - - Local - ローカル - - - Server - サーバ - Audio Output 音声出力 @@ -1684,6 +1676,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_ko.ts b/src/mumble/mumble_ko.ts index ae3098eac6f..8280e025e04 100644 --- a/src/mumble/mumble_ko.ts +++ b/src/mumble/mumble_ko.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None 없음 - - Local - 로컬 - - - Server - 서버 - Audio Output 오디오 출력 @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_lt.ts b/src/mumble/mumble_lt.ts index d80fc171fb1..fdf51421603 100644 --- a/src/mumble/mumble_lt.ts +++ b/src/mumble/mumble_lt.ts @@ -1635,14 +1635,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Nėra - - Local - Vietinis - - - Server - Serveris - Audio Output Garso išvestis @@ -1679,6 +1671,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_nl.ts b/src/mumble/mumble_nl.ts index 4a1ec6fadb7..29b4fc44c9b 100644 --- a/src/mumble/mumble_nl.ts +++ b/src/mumble/mumble_nl.ts @@ -1639,14 +1639,6 @@ Deze waarde laat je toe om een maximum aantal gebruikers in te stellen voor het None Geen - - Local - Lokaal - - - Server - Server - Audio Output Geluidsuitvoer @@ -1683,6 +1675,22 @@ Deze waarde laat je toe om een maximum aantal gebruikers in te stellen voor het meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_no.ts b/src/mumble/mumble_no.ts index 0a75e1e91ba..fc6db70d434 100644 --- a/src/mumble/mumble_no.ts +++ b/src/mumble/mumble_no.ts @@ -1641,14 +1641,6 @@ Når du er lenger unna enn dette vil andres stemme ikke bli dempet ytterligere.< None Ingen - - Local - Lokal - - - Server - Tjener - Audio Output Lydutgang @@ -1685,6 +1677,22 @@ Når du er lenger unna enn dette vil andres stemme ikke bli dempet ytterligere.< meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_oc.ts b/src/mumble/mumble_oc.ts index 9901cc6cefe..3a5d348aa71 100644 --- a/src/mumble/mumble_oc.ts +++ b/src/mumble/mumble_oc.ts @@ -1632,14 +1632,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - Local - - - Server - Servidor - Audio Output Sortida àudio @@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_pl.ts b/src/mumble/mumble_pl.ts index fc9d236943b..0e2a6cf4f72 100644 --- a/src/mumble/mumble_pl.ts +++ b/src/mumble/mumble_pl.ts @@ -1639,14 +1639,6 @@ Określa maksymalną dozwoloną liczbę użytkowników na tym kanale. Jeżeli wa None Brak - - Local - Lokalny - - - Server - Serwer - Audio Output Wyjście audio @@ -1683,6 +1675,22 @@ Określa maksymalną dozwoloną liczbę użytkowników na tym kanale. Jeżeli wa meters metry + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_pt_BR.ts b/src/mumble/mumble_pt_BR.ts index 8282a907483..f76571e80ae 100644 --- a/src/mumble/mumble_pt_BR.ts +++ b/src/mumble/mumble_pt_BR.ts @@ -1639,14 +1639,6 @@ Este valor permite que você especifique o número máximo de usuários permitid None Nenhum - - Local - Local - - - Server - Servidor - Audio Output Saída de Áudio @@ -1683,6 +1675,22 @@ Este valor permite que você especifique o número máximo de usuários permitid meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_pt_PT.ts b/src/mumble/mumble_pt_PT.ts index c042d4a0ad1..4c69746c89d 100644 --- a/src/mumble/mumble_pt_PT.ts +++ b/src/mumble/mumble_pt_PT.ts @@ -1639,14 +1639,6 @@ Este valor permite definir o número máximo de utilizadores permitido no canal. None Nenhum - - Local - Local - - - Server - Servidor - Audio Output Saída de Áudio @@ -1683,6 +1675,22 @@ Este valor permite definir o número máximo de utilizadores permitido no canal. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_ro.ts b/src/mumble/mumble_ro.ts index ffb9a761c14..eef9af930cc 100644 --- a/src/mumble/mumble_ro.ts +++ b/src/mumble/mumble_ro.ts @@ -1639,14 +1639,6 @@ Această valoare vă permite să setați numărul maxim de utilizatori permis î None - - Local - - - - Server - - Audio Output Ieșire audio @@ -1683,6 +1675,22 @@ Această valoare vă permite să setați numărul maxim de utilizatori permis î meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_ru.ts b/src/mumble/mumble_ru.ts index de4a736a7e2..5cc49952678 100644 --- a/src/mumble/mumble_ru.ts +++ b/src/mumble/mumble_ru.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None Нет - - Local - Локально - - - Server - Сервер - Audio Output Входящий звук @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_si.ts b/src/mumble/mumble_si.ts index 476b67e765c..2aba9cb5bb3 100644 --- a/src/mumble/mumble_si.ts +++ b/src/mumble/mumble_si.ts @@ -1625,14 +1625,6 @@ Contains the list of members inherited by the current channel. Uncheck <i> None - - Local - - - - Server - - Audio Output @@ -1669,6 +1661,22 @@ Contains the list of members inherited by the current channel. Uncheck <i> meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_sk.ts b/src/mumble/mumble_sk.ts index fff386def7b..44cf61b43eb 100644 --- a/src/mumble/mumble_sk.ts +++ b/src/mumble/mumble_sk.ts @@ -1628,14 +1628,6 @@ Contains the list of members inherited by the current channel. Uncheck <i> None - - Local - - - - Server - - Distance at which audio volume from another player starts decreasing @@ -1672,6 +1664,22 @@ Contains the list of members inherited by the current channel. Uncheck <i> meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_sq.ts b/src/mumble/mumble_sq.ts index de4968a2316..92d64268b99 100644 --- a/src/mumble/mumble_sq.ts +++ b/src/mumble/mumble_sq.ts @@ -1627,14 +1627,6 @@ Contains the list of members inherited by the current channel. Uncheck <i> None - - Local - - - - Server - - Audio Output @@ -1671,6 +1663,22 @@ Contains the list of members inherited by the current channel. Uncheck <i> meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_sv.ts b/src/mumble/mumble_sv.ts index 152494daee4..745a65961b6 100644 --- a/src/mumble/mumble_sv.ts +++ b/src/mumble/mumble_sv.ts @@ -1639,14 +1639,6 @@ Det värdet tillåter dig att ställa in ett maximalt antal av användare som ä None Ingen - - Local - Lokal - - - Server - Server - Audio Output Ljudutgång @@ -1683,6 +1675,22 @@ Det värdet tillåter dig att ställa in ett maximalt antal av användare som ä meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample @@ -3330,7 +3338,7 @@ Are you sure you wish to replace your certificate? Server - + server diff --git a/src/mumble/mumble_te.ts b/src/mumble/mumble_te.ts index 6130230b235..76090198c30 100644 --- a/src/mumble/mumble_te.ts +++ b/src/mumble/mumble_te.ts @@ -1637,14 +1637,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output @@ -1681,6 +1673,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_th.ts b/src/mumble/mumble_th.ts index 101a68fb641..89fb50e4fac 100644 --- a/src/mumble/mumble_th.ts +++ b/src/mumble/mumble_th.ts @@ -1631,14 +1631,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output @@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_tr.ts b/src/mumble/mumble_tr.ts index ae093425753..b0b2c140468 100644 --- a/src/mumble/mumble_tr.ts +++ b/src/mumble/mumble_tr.ts @@ -1639,14 +1639,6 @@ Bu değer kanalda izin verilen azami kullanıcı sayısını ayarlamanıza izin None Hiçbiri - - Local - Yerel - - - Server - Sunucu - Audio Output Ses Çıktısı @@ -1683,6 +1675,22 @@ Bu değer kanalda izin verilen azami kullanıcı sayısını ayarlamanıza izin meters metre + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_uk.ts b/src/mumble/mumble_uk.ts index ee2dcef5240..08a3ff9699b 100644 --- a/src/mumble/mumble_uk.ts +++ b/src/mumble/mumble_uk.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - - Audio Output @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_zh_CN.ts b/src/mumble/mumble_zh_CN.ts index 417a4413f10..00ac1e69ce2 100644 --- a/src/mumble/mumble_zh_CN.ts +++ b/src/mumble/mumble_zh_CN.ts @@ -1639,14 +1639,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - 本地 - - - Server - 服务器 - Audio Output 音频输出 @@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_zh_HK.ts b/src/mumble/mumble_zh_HK.ts index 5e407465a9a..eff2eacc316 100644 --- a/src/mumble/mumble_zh_HK.ts +++ b/src/mumble/mumble_zh_HK.ts @@ -1631,14 +1631,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - - - - Server - 伺服器 - Audio Output @@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/mumble/mumble_zh_TW.ts b/src/mumble/mumble_zh_TW.ts index 4494612b4d7..f06b132b8ee 100644 --- a/src/mumble/mumble_zh_TW.ts +++ b/src/mumble/mumble_zh_TW.ts @@ -1634,14 +1634,6 @@ This value allows you to set the maximum number of users allowed in the channel. None - - Local - 本地 - - - Server - 伺服器 - Audio Output 音效輸出 @@ -1678,6 +1670,22 @@ This value allows you to set the maximum number of users allowed in the channel. meters + + Local (don't send to others) + + + + Local (send to others) + + + + Server (don't send to others) + + + + Server (send to others) + + AudioOutputSample diff --git a/src/murmur/Server.cpp b/src/murmur/Server.cpp index bc89c653066..74fcb50fefa 100644 --- a/src/murmur/Server.cpp +++ b/src/murmur/Server.cpp @@ -1171,114 +1171,128 @@ void Server::processMsg(ServerUser *u, Mumble::Protocol::AudioData audioData, Au buffer.clear(); - if (audioData.targetOrContext == Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK) { - buffer.forceAddReceiver(*u, Mumble::Protocol::AudioContext::NORMAL, audioData.containsPositionalData); - } else if (audioData.targetOrContext == Mumble::Protocol::ReservedTargetIDs::REGULAR_SPEECH) { - Channel *c = u->cChannel; - - // Send audio to all users that are listening to the channel - foreach (unsigned int currentSession, m_channelListenerManager.getListenersForChannel(c->iId)) { - ServerUser *pDst = static_cast< ServerUser * >(qhUsers.value(currentSession)); - if (pDst) { - buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::LISTEN, audioData.containsPositionalData, - m_channelListenerManager.getListenerVolumeAdjustment(pDst->uiSession, c->iId)); + switch (audioData.targetOrContext) { + case Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK_ONLY: + buffer.forceAddReceiver(*u, Mumble::Protocol::AudioContext::NORMAL, audioData.containsPositionalData); + break; + case Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK_REGULAR: + buffer.forceAddReceiver(*u, Mumble::Protocol::AudioContext::NORMAL, audioData.containsPositionalData); + [[fallthrough]]; + case Mumble::Protocol::ReservedTargetIDs::REGULAR_SPEECH: { + Channel *c = u->cChannel; + + // Send audio to all users that are listening to the channel + foreach (unsigned int currentSession, m_channelListenerManager.getListenersForChannel(c->iId)) { + ServerUser *pDst = static_cast< ServerUser * >(qhUsers.value(currentSession)); + if (pDst) { + buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::LISTEN, + audioData.containsPositionalData, + m_channelListenerManager.getListenerVolumeAdjustment(pDst->uiSession, c->iId)); + } } - } - // Send audio to all users in the same channel - for (User *p : c->qlUsers) { - ServerUser *pDst = static_cast< ServerUser * >(p); + // Send audio to all users in the same channel + for (User *p : c->qlUsers) { + ServerUser *pDst = static_cast< ServerUser * >(p); - buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::NORMAL, audioData.containsPositionalData); - } + buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::NORMAL, audioData.containsPositionalData); + } + + // Send audio to all linked channels the user has speak-permission + if (!c->qhLinks.isEmpty()) { + QSet< Channel * > chans = c->allLinks(); + chans.remove(c); - // Send audio to all linked channels the user has speak-permission - if (!c->qhLinks.isEmpty()) { - QSet< Channel * > chans = c->allLinks(); - chans.remove(c); - - QMutexLocker qml(&qmCache); - - for (Channel *l : chans) { - if (ChanACL::hasPermission(u, l, ChanACL::Speak, &acCache)) { - // Send the audio stream to all users that are listening to the linked channel - for (unsigned int currentSession : m_channelListenerManager.getListenersForChannel(l->iId)) { - ServerUser *pDst = static_cast< ServerUser * >(qhUsers.value(currentSession)); - if (pDst) { - buffer.addReceiver( - *u, *pDst, Mumble::Protocol::AudioContext::LISTEN, audioData.containsPositionalData, - m_channelListenerManager.getListenerVolumeAdjustment(pDst->uiSession, l->iId)); + QMutexLocker qml(&qmCache); + + for (Channel *l : chans) { + if (ChanACL::hasPermission(u, l, ChanACL::Speak, &acCache)) { + // Send the audio stream to all users that are listening to the linked channel + for (unsigned int currentSession : m_channelListenerManager.getListenersForChannel(l->iId)) { + ServerUser *pDst = static_cast< ServerUser * >(qhUsers.value(currentSession)); + if (pDst) { + buffer.addReceiver( + *u, *pDst, Mumble::Protocol::AudioContext::LISTEN, audioData.containsPositionalData, + m_channelListenerManager.getListenerVolumeAdjustment(pDst->uiSession, l->iId)); + } } - } - // Send audio to users in the linked channel - for (User *p : l->qlUsers) { - ServerUser *pDst = static_cast< ServerUser * >(p); + // Send audio to users in the linked channel + for (User *p : l->qlUsers) { + ServerUser *pDst = static_cast< ServerUser * >(p); - buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::NORMAL, - audioData.containsPositionalData); + buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::NORMAL, + audioData.containsPositionalData); + } } } } + + break; } - } else if (u->qmTargets.contains(static_cast< int >(audioData.targetOrContext))) { // Whisper/Shout - QSet< ServerUser * > channel; - QSet< ServerUser * > direct; - QHash< ServerUser *, VolumeAdjustment > cachedListeners; - - if (u->qmTargetCache.contains(static_cast< int >(audioData.targetOrContext))) { - ZoneScopedN(TracyConstants::AUDIO_WHISPER_CACHE_STORE); - - const WhisperTargetCache &cache = u->qmTargetCache.value(static_cast< int >(audioData.targetOrContext)); - channel = cache.channelTargets; - direct = cache.directTargets; - cachedListeners = cache.listeningTargets; - } else { - ZoneScopedN(TracyConstants::AUDIO_WHISPER_CACHE_CREATE); + default: + if (u->qmTargets.contains(static_cast< int >(audioData.targetOrContext))) { // Whisper/Shout + QSet< ServerUser * > channel; + QSet< ServerUser * > direct; + QHash< ServerUser *, VolumeAdjustment > cachedListeners; - const unsigned int uiSession = u->uiSession; - qrwlVoiceThread.unlock(); - qrwlVoiceThread.lockForWrite(); + if (u->qmTargetCache.contains(static_cast< int >(audioData.targetOrContext))) { + ZoneScopedN(TracyConstants::AUDIO_WHISPER_CACHE_STORE); - if (!qhUsers.contains(uiSession)) { - return; - } + const WhisperTargetCache &cache = + u->qmTargetCache.value(static_cast< int >(audioData.targetOrContext)); + channel = cache.channelTargets; + direct = cache.directTargets; + cachedListeners = cache.listeningTargets; + } else { + ZoneScopedN(TracyConstants::AUDIO_WHISPER_CACHE_CREATE); - // Create cache entry for the given target - // Note: We have to compute the cache entry and add it to the user's cache store in an atomic - // transaction (ensured by the lock) to avoid running into situations in which a user from the cache - // gets deleted without this particular cache entry being purged (which happens, if the cache entry is - // in the store at the point of deleting the user). - const WhisperTarget &wt = u->qmTargets.value(static_cast< int >(audioData.targetOrContext)); - WhisperTargetCache cache = createWhisperTargetCacheFor(*u, wt); + const unsigned int uiSession = u->uiSession; + qrwlVoiceThread.unlock(); + qrwlVoiceThread.lockForWrite(); - u->qmTargetCache.insert(static_cast< int >(audioData.targetOrContext), std::move(cache)); + if (!qhUsers.contains(uiSession)) { + return; + } + // Create cache entry for the given target + // Note: We have to compute the cache entry and add it to the user's cache store in an atomic + // transaction (ensured by the lock) to avoid running into situations in which a user from the cache + // gets deleted without this particular cache entry being purged (which happens, if the cache entry + // is in the store at the point of deleting the user). + const WhisperTarget &wt = u->qmTargets.value(static_cast< int >(audioData.targetOrContext)); + WhisperTargetCache cache = createWhisperTargetCacheFor(*u, wt); - qrwlVoiceThread.unlock(); - qrwlVoiceThread.lockForRead(); - if (!qhUsers.contains(uiSession)) - return; - } + u->qmTargetCache.insert(static_cast< int >(audioData.targetOrContext), std::move(cache)); - // These users receive the audio because someone is shouting to their channel - for (ServerUser *pDst : channel) { - buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::SHOUT, audioData.containsPositionalData); - } - // These users receive audio because someone is whispering to them - for (ServerUser *pDst : direct) { - buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::WHISPER, audioData.containsPositionalData); - } - // These users receive audio because someone is sending audio to one of their listeners - QHashIterator< ServerUser *, VolumeAdjustment > it(cachedListeners); - while (it.hasNext()) { - it.next(); - ServerUser *user = it.key(); - const VolumeAdjustment &volumeAdjustment = it.value(); - - buffer.addReceiver(*u, *user, Mumble::Protocol::AudioContext::LISTEN, audioData.containsPositionalData, - volumeAdjustment); - } + + qrwlVoiceThread.unlock(); + qrwlVoiceThread.lockForRead(); + if (!qhUsers.contains(uiSession)) + return; + } + + // These users receive the audio because someone is shouting to their channel + for (ServerUser *pDst : channel) { + buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::SHOUT, + audioData.containsPositionalData); + } + // These users receive audio because someone is whispering to them + for (ServerUser *pDst : direct) { + buffer.addReceiver(*u, *pDst, Mumble::Protocol::AudioContext::WHISPER, + audioData.containsPositionalData); + } + // These users receive audio because someone is sending audio to one of their listeners + QHashIterator< ServerUser *, VolumeAdjustment > it(cachedListeners); + while (it.hasNext()) { + it.next(); + ServerUser *user = it.key(); + const VolumeAdjustment &volumeAdjustment = it.value(); + + buffer.addReceiver(*u, *user, Mumble::Protocol::AudioContext::LISTEN, + audioData.containsPositionalData, volumeAdjustment); + } + } } ZoneNamedN(__tracy_scoped_zone2, TracyConstants::AUDIO_SENDOUT_ZONE, true); diff --git a/src/tests/TestMumbleProtocol/TestMumbleProtocol.cpp b/src/tests/TestMumbleProtocol/TestMumbleProtocol.cpp index 9ca521486c5..420c549d287 100644 --- a/src/tests/TestMumbleProtocol/TestMumbleProtocol.cpp +++ b/src/tests/TestMumbleProtocol/TestMumbleProtocol.cpp @@ -195,7 +195,7 @@ template< Mumble::Protocol::Role encoderRole, Mumble::Protocol::Role decoderRole } else { QVERIFY(encoder.getRole() == Mumble::Protocol::Role::Client); - data.targetOrContext = Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK; + data.targetOrContext = Mumble::Protocol::ReservedTargetIDs::SERVER_LOOPBACK_ONLY; } auto encodedData = encoder.encodeAudioPacket(data);