diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index f167e2a2dead5ac999e2f678fc48e7f67c26570f..450f6c996154026bcc25da1a19ec89755ef29d06 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -1039,5 +1039,16 @@ <key>Value</key> <string>8dcd4a48-2d37-4909-9f78-f7a9eb4ef903</string> </map> + <key>VoiceMultiInstance</key> + <map> + <key>Comment</key> + <string>Enables using voice in multiple simultaneous viewer instances</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>1</integer> + </map> </map> </llsd> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 417f9d6aa28ac5fb9d9a664664d783de21b0819a..c5371064fd4abc961349c06f1996ba344ad60cca 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2879,7 +2879,7 @@ bool LLAppViewer::initConfiguration() // This is the second instance of SL. Turn off voice support, // but make sure the setting is *not* persisted. LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice"); - if(disable_voice) + if (disable_voice && !gSavedSettings.getBOOL("VoiceMultiInstance")) { const BOOL DO_NOT_PERSIST = FALSE; disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST); diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index b751f9f7c4197a654bca6d28c1e5df9ce2c749b5..1b498c341fc7d29faf2bd7e92b8a992843896c59 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -536,6 +536,7 @@ void LLVivoxVoiceClient::connectorCreate() << "<ClientName>V2 SDK</ClientName>" << "<AccountManagementServer>" << mVoiceAccountServerURI << "</AccountManagementServer>" << "<Mode>Normal</Mode>" + << (gSavedSettings.getBOOL("VoiceMultiInstance") ? "<MinimumPort>30000</MinimumPort><MaximumPort>50000</MaximumPort>" : "") #ifndef LL_LINUX << "<ConnectorHandle>" << LLVivoxSecurity::getInstance()->connectorHandle() << "</ConnectorHandle>" #endif @@ -965,6 +966,18 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon() params.args.add("-ll"); params.args.add(loglevel); + if (gSavedSettings.getBOOL("VoiceMultiInstance")) + { + S32 port_nr = 30000 + ll_rand(20000); + LLControlVariable* voice_port = gSavedSettings.getControl("VivoxVoicePort"); + if (voice_port) + { + voice_port->setValue(LLSD(port_nr), false); + params.args.add("-i"); + params.args.add(llformat("127.0.0.1:%u", gSavedSettings.getU32("VivoxVoicePort"))); + } + } + std::string log_folder = gSavedSettings.getString("VivoxLogDirectory"); if (log_folder.empty())