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.
-
-
-
-
-
-
-
-
@@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
- Сървър
- Звуков изход
@@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Hini ebet
-
-
- Lec'hel
-
-
-
- Servijer
-
@@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Cap
-
-
- Local
-
-
-
- Servidor
- Sortida d'àudio
@@ -1683,6 +1675,22 @@ Aquest valor us permet establir el nombre màxim d'usuaris permesos al cana
metres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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ů
Žádná
-
-
- Místní
-
-
-
- Server
- Výstup Zvuku
@@ -1683,6 +1675,22 @@ Tato hodnota Vám umožňuje nastavit maximální počet povolených uživatelů
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AudioOutputSample
@@ -3331,7 +3339,7 @@ Jste si jisti, že chcete certifikát nahradit?
-
+ 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.
Dim
-
-
-
-
-
-
-
-
@@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Ingen
-
-
- Lokal
-
-
-
- Server
- Lydafspilning
@@ -1682,6 +1674,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AudioOutputSample
@@ -3329,7 +3337,7 @@ Er du sikker på du vil erstatte dit certifikat?
-
+ 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
Keine
-
-
- Lokal
-
-
-
- Server
- Audioausgabe
@@ -1683,6 +1675,22 @@ Dieser Wert erlaubt das Einstellen der maximal im Kanal erlaubten Benutzeranzahl
Meter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Κανένα
-
-
- Τοπικό
-
-
-
- Διακομιστής
- Εξοδος Ήχου
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
-
-
@@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
-
-
- Local
-
-
-
- Server
- Audio Output
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Neniu
-
-
- Loke
-
-
-
- Servilo
- Son-eligo
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Ninguno
-
-
- Local
-
-
-
- Servidor
- Salida de audio
@@ -1683,6 +1675,22 @@ Este valor permite fijar el número máximo de usuarios permitidos en el canal.
metros
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AudioOutputSample
@@ -3775,11 +3783,11 @@ Sin esta opción habilitada, los métodos abreviados globales de Mumble en aplic
-
+ marcado
-
+ sin marcar
@@ -4496,15 +4504,15 @@ La configuración solo se aplica a los mensajes nuevos, los que ya se muestran c
-
+ marcado
-
+ sin marcar
-
+ decibelios
@@ -7242,7 +7250,7 @@ Las opciones válidas son:
-
+ Vista gráfica de simulación de audio posicional
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.
Pole
-
-
- Kohalik
-
-
-
- Server
- Heliväljund
@@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Bat ere ez
-
-
- Lokala
-
-
-
- Zerbitzaria
- Audio Irteera
@@ -1685,6 +1677,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
-
- خروجی صدا
@@ -1677,6 +1669,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Ei mikään
-
-
- Paikallinen
-
-
-
- Palvelin
- Äänen ulostulo
@@ -1683,6 +1675,22 @@ Tämän numeron ollessa suurempi kuin nolla kanava sallii enintään numeron suu
metriä
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Aucun
-
-
- Local
-
-
-
- Serveur
- Sortie audio
@@ -1683,6 +1675,22 @@ Cette valeur vous permet de définir un nombre maximum d'utilisateurs autor
mètres
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
-
-
@@ -1677,6 +1669,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
ללא
-
-
- מקומי
-
-
-
- שרת
- פלט שמע
@@ -1684,6 +1676,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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>
-
-
-
-
-
-
-
-
@@ -1669,6 +1661,22 @@ Contains the list of members inherited by the current channel. Uncheck <i>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Nincs
-
-
- Helyi
-
-
-
- Kiszolgáló
- Hangkimenet
@@ -1679,6 +1671,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Disattivato
-
-
- Locale
-
-
-
- Server
- Uscita Audio
@@ -1683,6 +1675,22 @@ Questo valore ti permette di impostare il numero massimo di utenti consentiti ne
metri
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AudioOutputSample
@@ -2252,7 +2260,7 @@ Parla ad alta voce, come quando sei infastidito o eccitato. Poi diminuisci il vo
-
+ Il parlato è dinamicamente amplificato di questa quantità
@@ -4503,7 +4511,7 @@ Questa impostazione si applica solo ai nuovi messaggi, quelli già mostrati mant
-
+ 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.
なし
-
-
- ローカル
-
-
-
- サーバ
- 音声出力
@@ -1684,6 +1676,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
없음
-
-
- 로컬
-
-
-
- 서버
- 오디오 출력
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Nėra
-
-
- Vietinis
-
-
-
- Serveris
- Garso išvestis
@@ -1679,6 +1671,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Geen
-
-
- Lokaal
-
-
-
- Server
- Geluidsuitvoer
@@ -1683,6 +1675,22 @@ Deze waarde laat je toe om een maximum aantal gebruikers in te stellen voor het
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.<
Ingen
-
-
- Lokal
-
-
-
- Tjener
- Lydutgang
@@ -1685,6 +1677,22 @@ Når du er lenger unna enn dette vil andres stemme ikke bli dempet ytterligere.<
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
- Local
-
-
-
- Servidor
- Sortida àudio
@@ -1676,6 +1668,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Brak
-
-
- Lokalny
-
-
-
- Serwer
- Wyjście audio
@@ -1683,6 +1675,22 @@ Określa maksymalną dozwoloną liczbę użytkowników na tym kanale. Jeżeli wa
metry
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Nenhum
-
-
- Local
-
-
-
- Servidor
- Saída de Áudio
@@ -1683,6 +1675,22 @@ Este valor permite que você especifique o número máximo de usuários permitid
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Nenhum
-
-
- Local
-
-
-
- Servidor
- Saída de Áudio
@@ -1683,6 +1675,22 @@ Este valor permite definir o número máximo de utilizadores permitido no canal.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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 î
-
-
-
-
-
-
-
- Ieșire audio
@@ -1683,6 +1675,22 @@ Această valoare vă permite să setați numărul maxim de utilizatori permis î
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
Нет
-
-
- Локально
-
-
-
- Сервер
- Входящий звук
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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>
-
-
-
-
-
-
-
-
@@ -1669,6 +1661,22 @@ Contains the list of members inherited by the current channel. Uncheck <i>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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>
-
-
-
-
-
-
-
-
@@ -1672,6 +1664,22 @@ Contains the list of members inherited by the current channel. Uncheck <i>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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>
-
-
-
-
-
-
-
-
@@ -1671,6 +1663,22 @@ Contains the list of members inherited by the current channel. Uncheck <i>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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 ä
Ingen
-
-
- Lokal
-
-
-
- Server
- Ljudutgång
@@ -1683,6 +1675,22 @@ Det värdet tillåter dig att ställa in ett maximalt antal av användare som ä
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AudioOutputSample
@@ -3330,7 +3338,7 @@ Are you sure you wish to replace your certificate?
-
+ 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.
-
-
-
-
-
-
-
-
@@ -1681,6 +1673,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
-
-
@@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
Hiçbiri
-
-
- Yerel
-
-
-
- Sunucu
- Ses Çıktısı
@@ -1683,6 +1675,22 @@ Bu değer kanalda izin verilen azami kullanıcı sayısını ayarlamanıza izin
metre
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
-
-
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
无
-
-
- 本地
-
-
-
- 服务器
- 音频输出
@@ -1683,6 +1675,22 @@ This value allows you to set the maximum number of users allowed in the channel.
米
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
-
-
-
-
-
-
- 伺服器
-
@@ -1675,6 +1667,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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.
無
-
-
- 本地
-
-
-
- 伺服器
- 音效輸出
@@ -1678,6 +1670,22 @@ This value allows you to set the maximum number of users allowed in the channel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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);