Merge remote-tracking branch 'origin/release/webrtc-voice' into release/2024.06-atlasaurus
# Conflicts: # autobuild.xml # indra/newview/llvoicechannel.cppmeow-7.2.2
commit
3e4b23539c
190
autobuild.xml
190
autobuild.xml
|
|
@ -412,11 +412,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>f6835c4d7745cd1cadfbce47b40331d08affb532</string>
|
||||
<string>e03eb77224290c875ff84f75b7fe3d0e7c162c94</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-dictionaries/releases/download/v1.0.1-dev2.gf887629-f887629/dictionaries-common-None.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-dictionaries/releases/download/v1-a01bb6c/dictionaries-1.a01bb6c-common-a01bb6c.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
|
|
@ -429,7 +429,7 @@
|
|||
<key>copyright</key>
|
||||
<string>Copyright 2014 Apache OpenOffice software</string>
|
||||
<key>version</key>
|
||||
<string>None</string>
|
||||
<string>1.a01bb6c</string>
|
||||
<key>name</key>
|
||||
<string>dictionaries</string>
|
||||
<key>description</key>
|
||||
|
|
@ -720,11 +720,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>6604c1cca515d287e697997a8d5593d1cae172a9</string>
|
||||
<string>066625e7aa7f697a4b6cd461aad960c57181011f</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-glh_linear/releases/download/v1.0.1-dev2.g3253ed7-3253ed7/glh_linear-common-None.tar.zst</string>
|
||||
<string>https://github.com/secondlife/3p-glh_linear/releases/download/v1.0.1-dev4-984c397/glh_linear-1.0.1-dev4-common-984c397.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
|
|
@ -737,7 +737,7 @@
|
|||
<key>copyright</key>
|
||||
<string>Copyright (c) 2000 Cass Everitt</string>
|
||||
<key>version</key>
|
||||
<string>None</string>
|
||||
<string>1.0.1-dev4</string>
|
||||
<key>name</key>
|
||||
<string>glh_linear</string>
|
||||
<key>description</key>
|
||||
|
|
@ -852,11 +852,11 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>a193ff65d6db48626d65d96c6124c6efca85e8ec</string>
|
||||
<string>ae2c2a215b1bc2e3f37a67e301926dc405902d1a</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912596</string>
|
||||
<string>https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/136778143</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -880,11 +880,11 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>ebfb82b6143874e7938b9d1e8a70d0a2e28aa818</string>
|
||||
<string>0393dd75c58f7046bed47e62a8884a78cb02a5c3</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/108912599</string>
|
||||
<string>https://api.github.com/repos/secondlife/3p-havok-source/releases/assets/136778145</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -1030,11 +1030,11 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>bcc7e2c34896fc9cbc41828dee8a4ddf54f10453</string>
|
||||
<string>ad72fa1d103df777906f0d98f3e882b9916aeada</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/108298968</string>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774118</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -1046,11 +1046,11 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>9de772df2ed12e9c742df6c90670c7cbbb9c93a6</string>
|
||||
<string>e46e4ac93a237b5c4a14183766f76ba5d58935a2</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/108298969</string>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774125</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
|
|
@ -1062,15 +1062,31 @@
|
|||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>92533ff0f8c1881ad85e75800f9072c413ccf7b7</string>
|
||||
<string>bb37557f78c72b26580a521f8b8dabfa1b34e6e6</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/108298970</string>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774126</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
<key>linux</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>creds</key>
|
||||
<string>github</string>
|
||||
<key>hash</key>
|
||||
<string>711b82f9f588d3a125af7dcd8c81f93d9c343a7d</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://api.github.com/repos/secondlife/3p-kdu/releases/assets/136774121</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>Kakadu</string>
|
||||
|
|
@ -1079,7 +1095,7 @@
|
|||
<key>copyright</key>
|
||||
<string>Kakadu software</string>
|
||||
<key>version</key>
|
||||
<string>7.10.4.539108</string>
|
||||
<string>7.10.4.4b9ec5f</string>
|
||||
<key>name</key>
|
||||
<string>kdu</string>
|
||||
<key>description</key>
|
||||
|
|
@ -1378,11 +1394,11 @@
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e50ea94bbaa4ff41bf53b84b7192df1a694c5337</string>
|
||||
<string>a9503e1b4e1d9790cf29d18a3d9ab39e6a515679</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/llca/releases/download/v202310121525.0-d22bd98/llca-202310121530.0-common-d22bd98.tar.zst</string>
|
||||
<string>https://github.com/secondlife/llca/releases/download/v202402012004.0-0f5d9c3/llca-202402012004.0-common-0f5d9c3.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
|
|
@ -1644,6 +1660,18 @@
|
|||
</map>
|
||||
<key>mikktspace</key>
|
||||
<map>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://bitbucket.org/lindenlab/3p-mikktspace</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 2011 by Morten S. Mikkelsen, Copyright (C) 2022 Blender Authors</string>
|
||||
<key>description</key>
|
||||
<string>Mikktspace Tangent Generator</string>
|
||||
<key>license</key>
|
||||
<string>Apache 2.0</string>
|
||||
<key>license_file</key>
|
||||
<string>mikktspace.txt</string>
|
||||
<key>name</key>
|
||||
<string>mikktspace</string>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
|
|
@ -1689,20 +1717,8 @@
|
|||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>Apache 2.0</string>
|
||||
<key>license_file</key>
|
||||
<string>mikktspace.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (C) 2011 by Morten S. Mikkelsen, Copyright (C) 2022 Blender Authors</string>
|
||||
<key>version</key>
|
||||
<string>1</string>
|
||||
<key>name</key>
|
||||
<string>mikktspace</string>
|
||||
<key>canonical_repo</key>
|
||||
<string>https://bitbucket.org/lindenlab/3p-mikktspace</string>
|
||||
<key>description</key>
|
||||
<string>Mikktspace Tangent Generator</string>
|
||||
</map>
|
||||
<key>minizip-ng</key>
|
||||
<map>
|
||||
|
|
@ -2351,9 +2367,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4dad1c0948141e1667c01a3ee755e4dc</string>
|
||||
<string>2c47ae2d0c38c86b8c2db8d9317f0ab15edfc74f</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/105849/926137/tinygltf-v2.5.0-common-575729.tar.bz2</string>
|
||||
<string>https://github.com/secondlife/3p-tinygltf/releases/download/v2.5.0-1ae57fd/tinygltf-v2.5.0-common-1ae57fd.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
|
|
@ -2387,9 +2405,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>9b6e1a1f4b0969d38a1ca8ee00aeb548</string>
|
||||
<string>49650353442698c3e05102676fe427d0ebe02f0b</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/110584/960613/tracy-v0.8.1.578241-darwin64-578241.tar.bz2</string>
|
||||
<string>https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-eecbf72/tracy-v0.8.1-eecbf72-darwin64-eecbf72.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
|
|
@ -2399,11 +2419,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>05b72ae5d733aed7d3bf142287601cc6</string>
|
||||
<string>2b80e7407e4f3e82eff3879add0e9ad63e7fcace</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>md5</string>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/110586/960637/tracy-v0.8.1.578241-windows64-578241.tar.bz2</string>
|
||||
<string>https://github.com/secondlife/3p-tracy/releases/download/v0.8.1-eecbf72/tracy-v0.8.1-eecbf72-windows64-eecbf72.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
|
|
@ -2416,7 +2436,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>copyright</key>
|
||||
<string>Copyright (c) 2017-2022, Bartosz Taudul (wolf@nereid.pl)</string>
|
||||
<key>version</key>
|
||||
<string>v0.8.1.578241</string>
|
||||
<string>v0.8.1-eecbf72</string>
|
||||
<key>name</key>
|
||||
<string>tracy</string>
|
||||
<key>canonical_repo</key>
|
||||
|
|
@ -2615,8 +2635,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<string>LICENSE</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2000-2012, Linden Research, Inc.</string>
|
||||
<key>version</key>
|
||||
<string>3.0-f14b5ec</string>
|
||||
<key>name</key>
|
||||
<string>viewer-manager</string>
|
||||
<key>description</key>
|
||||
|
|
@ -2625,6 +2643,8 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<string>https://bitbucket.org/lindenlab/vmp-standalone</string>
|
||||
<key>source_type</key>
|
||||
<string>hg</string>
|
||||
<key>version</key>
|
||||
<string>3.0-f14b5ec</string>
|
||||
</map>
|
||||
<key>vlc-bin</key>
|
||||
<map>
|
||||
|
|
@ -2734,51 +2754,29 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<map>
|
||||
<key>platforms</key>
|
||||
<map>
|
||||
<key>darwin64</key>
|
||||
<key>common</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>8cff2060843db3db788511ee34a8e8cc</string>
|
||||
<string>8e365eff8dcace48d91e2530f8b13e420849aefc</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/101316/891509/vulkan_gltf-1-darwin64-572743.tar.bz2</string>
|
||||
<string>https://github.com/secondlife/3p-vulkan-gltf-pbr/releases/download/v1.0.0-d7c372f/vulkan_gltf-1.0.0-common-d7c372f.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>windows</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>58eea384be49ba756ce9c5e66669540b</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/101318/891520/vulkan_gltf-1-windows-572743.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>79b6a11622c2f83cfc2b7cd1fafb867b</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/101319/891521/vulkan_gltf-1-windows64-572743.tar.bz2</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
<string>common</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>Copyright (c) 2018 Sascha Willems</string>
|
||||
<key>license_file</key>
|
||||
<string>LICENSES/vulkan_gltf.txt</string>
|
||||
<string>vulkan_gltf.txt</string>
|
||||
<key>copyright</key>
|
||||
<string>Copyright (c) 2018 Sascha Willems</string>
|
||||
<key>version</key>
|
||||
<string>1</string>
|
||||
<string>1.0.0</string>
|
||||
<key>name</key>
|
||||
<string>vulkan_gltf</string>
|
||||
<key>canonical_repo</key>
|
||||
|
|
@ -2861,55 +2859,15 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>e4f77ba0a9b8ec3cc3fabc51c4da81d2</string>
|
||||
<string>1a73c476b371b62066d1c3eced249660e9467e53</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://automated-builds-secondlife-com.s3.amazonaws.com/ct2/110070/956941/xxhash-0.8.1.578006-windows-578006.tar.bz2</string>
|
||||
<string>https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1-69ff69a/xxhash-0.8.1-69ff69a-common-69ff69a.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>common</string>
|
||||
</map>
|
||||
<key>darwin64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>fdcc803a76a3359bb426db7dac161406676d51e7</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-darwin64-7501c90.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>darwin64</string>
|
||||
</map>
|
||||
<key>linux64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>7acb3f94a549fbb9bd7bc16604e34f33c5365a9b</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-linux64-7501c90.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>linux64</string>
|
||||
</map>
|
||||
<key>windows64</key>
|
||||
<map>
|
||||
<key>archive</key>
|
||||
<map>
|
||||
<key>hash</key>
|
||||
<string>4522d075ea4703ef4b527c3039864ef735ea7953</string>
|
||||
<key>hash_algorithm</key>
|
||||
<string>sha1</string>
|
||||
<key>url</key>
|
||||
<string>https://github.com/secondlife/3p-xxhash/releases/download/v0.8.1.7501c90/xxhash-0.8.1.7501c90-windows64-7501c90.tar.zst</string>
|
||||
</map>
|
||||
<key>name</key>
|
||||
<string>windows64</string>
|
||||
</map>
|
||||
</map>
|
||||
<key>license</key>
|
||||
<string>xxhash</string>
|
||||
|
|
@ -2918,7 +2876,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
|
|||
<key>copyright</key>
|
||||
<string>Copyright (c) 2012-2021 Yann Collet</string>
|
||||
<key>version</key>
|
||||
<string>0.8.1.7501c90</string>
|
||||
<string>0.8.1-69ff69a</string>
|
||||
<key>name</key>
|
||||
<string>xxhash</string>
|
||||
<key>description</key>
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#include "api/media_stream_interface.h"
|
||||
#include "api/media_stream_track.h"
|
||||
#include "modules/audio_processing/audio_buffer.h"
|
||||
#include "modules/audio_mixer/audio_mixer_impl.h"
|
||||
|
||||
namespace llwebrtc
|
||||
{
|
||||
|
|
@ -88,7 +89,7 @@ void LLAudioDeviceObserver::OnRenderData(const void *audio_samples,
|
|||
{
|
||||
}
|
||||
|
||||
LLCustomProcessor::LLCustomProcessor() : mSampleRateHz(0), mNumChannels(0), mMicrophoneEnergy(0.0)
|
||||
LLCustomProcessor::LLCustomProcessor() : mSampleRateHz(0), mNumChannels(0), mMicrophoneEnergy(0.0), mGain(1.0)
|
||||
{
|
||||
memset(mSumVector, 0, sizeof(mSumVector));
|
||||
}
|
||||
|
|
@ -128,9 +129,13 @@ void LLCustomProcessor::Process(webrtc::AudioBuffer *audio_in)
|
|||
for (size_t index = 0; index < stream_config.num_samples(); index++)
|
||||
{
|
||||
float sample = frame_samples[index];
|
||||
sample = sample * mGain; // apply gain
|
||||
frame_samples[index] = sample; // write processed sample back to buffer.
|
||||
energy += sample * sample;
|
||||
}
|
||||
|
||||
audio_in->CopyFrom(&frame[0], stream_config);
|
||||
|
||||
// smooth it.
|
||||
size_t buffer_size = sizeof(mSumVector) / sizeof(mSumVector[0]);
|
||||
float totalSum = 0;
|
||||
|
|
@ -236,9 +241,9 @@ void LLWebRTCImpl::init()
|
|||
webrtc::AudioProcessing::Config apm_config;
|
||||
apm_config.echo_canceller.enabled = false;
|
||||
apm_config.echo_canceller.mobile_mode = false;
|
||||
apm_config.gain_controller1.enabled = true;
|
||||
apm_config.gain_controller1.enabled = false;
|
||||
apm_config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveAnalog;
|
||||
apm_config.gain_controller2.enabled = true;
|
||||
apm_config.gain_controller2.enabled = false;
|
||||
apm_config.high_pass_filter.enabled = true;
|
||||
apm_config.noise_suppression.enabled = true;
|
||||
apm_config.noise_suppression.level = webrtc::AudioProcessing::Config::NoiseSuppression::kVeryHigh;
|
||||
|
|
@ -260,6 +265,7 @@ void LLWebRTCImpl::init()
|
|||
mAudioProcessingModule->ApplyConfig(apm_config);
|
||||
mAudioProcessingModule->Initialize(processing_config);
|
||||
|
||||
|
||||
mPeerConnectionFactory = webrtc::CreatePeerConnectionFactory(mNetworkThread.get(),
|
||||
mWorkerThread.get(),
|
||||
mSignalingThread.get(),
|
||||
|
|
@ -336,9 +342,9 @@ void LLWebRTCImpl::setAudioConfig(LLWebRTCDeviceInterface::AudioConfig config)
|
|||
webrtc::AudioProcessing::Config apm_config;
|
||||
apm_config.echo_canceller.enabled = config.mEchoCancellation;
|
||||
apm_config.echo_canceller.mobile_mode = false;
|
||||
apm_config.gain_controller1.enabled = true;
|
||||
apm_config.gain_controller1.enabled = config.mAGC;
|
||||
apm_config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveAnalog;
|
||||
apm_config.gain_controller2.enabled = true;
|
||||
apm_config.gain_controller2.enabled = false;
|
||||
apm_config.high_pass_filter.enabled = true;
|
||||
apm_config.transient_suppression.enabled = true;
|
||||
apm_config.pipeline.multi_channel_render = true;
|
||||
|
|
@ -452,7 +458,7 @@ void ll_set_device_module_render_device(rtc::scoped_refptr<webrtc::AudioDeviceMo
|
|||
{
|
||||
device_module->SetPlayoutDevice(webrtc::AudioDeviceModule::kDefaultDevice);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
device_module->SetPlayoutDevice(device);
|
||||
}
|
||||
|
|
@ -612,6 +618,8 @@ float LLWebRTCImpl::getTuningAudioLevel() { return -20 * log10f(mTuningAudioDevi
|
|||
|
||||
float LLWebRTCImpl::getPeerConnectionAudioLevel() { return -20 * log10f(mPeerCustomProcessor->getMicrophoneEnergy()); }
|
||||
|
||||
void LLWebRTCImpl::setPeerConnectionGain(float gain) { mPeerCustomProcessor->setGain(gain); }
|
||||
|
||||
|
||||
//
|
||||
// Peer Connection Helpers
|
||||
|
|
@ -648,7 +656,7 @@ void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnectionInterface* peer_conn
|
|||
// Most peer connection (signaling) happens on
|
||||
// the signaling thread.
|
||||
|
||||
LLWebRTCPeerConnectionImpl::LLWebRTCPeerConnectionImpl() :
|
||||
LLWebRTCPeerConnectionImpl::LLWebRTCPeerConnectionImpl() :
|
||||
mWebRTCImpl(nullptr),
|
||||
mPeerConnection(nullptr),
|
||||
mMute(false),
|
||||
|
|
@ -937,7 +945,7 @@ void LLWebRTCPeerConnectionImpl::setSendVolume(float volume)
|
|||
{
|
||||
for (auto &track : mLocalStream->GetAudioTracks())
|
||||
{
|
||||
track->GetSource()->SetVolume(volume);
|
||||
track->GetSource()->SetVolume(volume*5.0);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
@ -1163,7 +1171,7 @@ void LLWebRTCPeerConnectionImpl::OnSuccess(webrtc::SessionDescriptionInterface *
|
|||
{
|
||||
observer->OnOfferAvailable(mangled_sdp);
|
||||
}
|
||||
|
||||
|
||||
mPeerConnection->SetLocalDescription(std::unique_ptr<webrtc::SessionDescriptionInterface>(
|
||||
webrtc::CreateSessionDescription(webrtc::SdpType::kOffer, mangled_sdp)),
|
||||
rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface>(this));
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ class LLWebRTCDeviceInterface
|
|||
};
|
||||
|
||||
virtual void setAudioConfig(AudioConfig config) = 0;
|
||||
|
||||
|
||||
// instructs webrtc to refresh the device list.
|
||||
virtual void refreshDevices() = 0;
|
||||
|
||||
|
|
@ -145,6 +145,7 @@ class LLWebRTCDeviceInterface
|
|||
virtual void setTuningMode(bool enable) = 0;
|
||||
virtual float getTuningAudioLevel() = 0; // for use during tuning
|
||||
virtual float getPeerConnectionAudioLevel() = 0; // for use when not tuning
|
||||
virtual void setPeerConnectionGain(float gain) = 0;
|
||||
};
|
||||
|
||||
// LLWebRTCAudioInterface provides the viewer with a way
|
||||
|
|
@ -230,7 +231,7 @@ class LLWebRTCSignalingObserver
|
|||
class LLWebRTCPeerConnectionInterface
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
struct InitOptions
|
||||
{
|
||||
// equivalent of PeerConnectionInterface::IceServer
|
||||
|
|
|
|||
|
|
@ -121,6 +121,8 @@ class LLCustomProcessor : public webrtc::CustomProcessing
|
|||
|
||||
float getMicrophoneEnergy() { return mMicrophoneEnergy; }
|
||||
|
||||
void setGain(float gain) { mGain = gain; }
|
||||
|
||||
protected:
|
||||
static const int NUM_PACKETS_TO_FILTER = 30; // 300 ms of smoothing
|
||||
int mSampleRateHz;
|
||||
|
|
@ -128,6 +130,7 @@ class LLCustomProcessor : public webrtc::CustomProcessing
|
|||
|
||||
float mSumVector[NUM_PACKETS_TO_FILTER];
|
||||
float mMicrophoneEnergy;
|
||||
float mGain;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -160,6 +163,8 @@ class LLWebRTCImpl : public LLWebRTCDeviceInterface, public webrtc::AudioDeviceS
|
|||
float getTuningAudioLevel() override;
|
||||
float getPeerConnectionAudioLevel() override;
|
||||
|
||||
void setPeerConnectionGain(float gain) override;
|
||||
|
||||
//
|
||||
// AudioDeviceSink
|
||||
//
|
||||
|
|
@ -230,7 +235,7 @@ class LLWebRTCImpl : public LLWebRTCDeviceInterface, public webrtc::AudioDeviceS
|
|||
|
||||
// The factory that allows creation of native webrtc PeerConnections.
|
||||
rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> mPeerConnectionFactory;
|
||||
|
||||
|
||||
rtc::scoped_refptr<webrtc::AudioProcessing> mAudioProcessingModule;
|
||||
|
||||
// more native webrtc stuff
|
||||
|
|
|
|||
|
|
@ -3412,11 +3412,11 @@ LLUUID LLIMMgr::addSession(
|
|||
((IM_NOTHING_SPECIAL == dialog) || (IM_SESSION_P2P_INVITE == dialog) || (IM_SESSION_CONFERENCE_START == dialog)) &&
|
||||
ids.size())
|
||||
{
|
||||
LLIMModel::LLIMSession* ad_hoc_found = LLIMModel::getInstance()->findAdHocIMSession(ids);
|
||||
if (ad_hoc_found)
|
||||
session = LLIMModel::getInstance()->findAdHocIMSession(ids);
|
||||
if (session)
|
||||
{
|
||||
new_session = false;
|
||||
session_id = ad_hoc_found->mSessionID;
|
||||
session_id = session->mSessionID;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3852,7 +3852,7 @@ bool LLIMMgr::startCall(const LLUUID& session_id, LLVoiceChannel::EDirection dir
|
|||
{
|
||||
LLVoiceChannel* voice_channel = LLIMModel::getInstance()->getVoiceChannel(session_id);
|
||||
if (!voice_channel) return false;
|
||||
if (!voice_channel_info.isUndefined())
|
||||
if (voice_channel_info.isDefined() && voice_channel_info.isMap() && voice_channel_info.size() > 0)
|
||||
{
|
||||
voice_channel->setChannelInfo(voice_channel_info);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9481,15 +9481,6 @@ class LLUpdateMembershipLabel : public view_listener_t
|
|||
}
|
||||
};
|
||||
|
||||
void handle_voice_morphing_subscribe()
|
||||
{
|
||||
LLWeb::loadURL(LLTrans::getString("voice_morphing_url"));
|
||||
}
|
||||
|
||||
void handle_premium_voice_morphing_subscribe()
|
||||
{
|
||||
LLWeb::loadURL(LLTrans::getString("premium_voice_morphing_url"));
|
||||
}
|
||||
|
||||
class LLToggleUIHints : public view_listener_t
|
||||
{
|
||||
|
|
@ -9690,16 +9681,6 @@ void initialize_menus()
|
|||
//Communicate Nearby chat
|
||||
view_listener_t::addMenu(new LLCommunicateNearbyChat(), "Communicate.NearbyChat");
|
||||
|
||||
// Communicate > Voice morphing > Subscribe...
|
||||
commit.add("Communicate.VoiceMorphing.Subscribe", boost::bind(&handle_voice_morphing_subscribe));
|
||||
// Communicate > Voice morphing > Premium perk...
|
||||
commit.add("Communicate.VoiceMorphing.PremiumPerk", boost::bind(&handle_premium_voice_morphing_subscribe));
|
||||
LLVivoxVoiceClient * voice_clientp = LLVivoxVoiceClient::getInstance();
|
||||
enable.add("Communicate.VoiceMorphing.NoVoiceMorphing.Check"
|
||||
, boost::bind(&LLVivoxVoiceClient::onCheckVoiceEffect, voice_clientp, "NoVoiceMorphing"));
|
||||
commit.add("Communicate.VoiceMorphing.NoVoiceMorphing.Click"
|
||||
, boost::bind(&LLVivoxVoiceClient::onClickVoiceEffect, voice_clientp, "NoVoiceMorphing"));
|
||||
|
||||
// World menu
|
||||
view_listener_t::addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
|
||||
view_listener_t::addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark");
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ void LLVoiceChannel::setChannelInfo(const LLSD &channelInfo)
|
|||
|
||||
if (mState == STATE_NO_CHANNEL_INFO)
|
||||
{
|
||||
if (mChannelInfo.isUndefined())
|
||||
if (mChannelInfo.isUndefined() || !mChannelInfo.isMap() || mChannelInfo.size() == 0)
|
||||
{
|
||||
LLNotificationsUtil::add("VoiceChannelJoinFailed", mNotifyArgs);
|
||||
LL_WARNS("Voice") << "Received empty channel info for channel " << mSessionName << LL_ENDL;
|
||||
|
|
@ -122,7 +122,7 @@ void LLVoiceChannel::onChange(EStatusType type, const LLSD& channelInfo, bool pr
|
|||
{
|
||||
LL_DEBUGS("Voice") << "Incoming channel info: " << channelInfo << LL_ENDL;
|
||||
LL_DEBUGS("Voice") << "Current channel info: " << mChannelInfo << LL_ENDL;
|
||||
if (mChannelInfo.isUndefined())
|
||||
if (mChannelInfo.isUndefined() || (mChannelInfo.isMap() && mChannelInfo.size() == 0))
|
||||
{
|
||||
mChannelInfo = channelInfo;
|
||||
}
|
||||
|
|
@ -477,7 +477,7 @@ void LLVoiceChannelGroup::setChannelInfo(const LLSD& channelInfo)
|
|||
|
||||
if (mState == STATE_NO_CHANNEL_INFO)
|
||||
{
|
||||
if(!mChannelInfo.isUndefined())
|
||||
if(mChannelInfo.isDefined() && mChannelInfo.isMap())
|
||||
{
|
||||
setState(STATE_READY);
|
||||
|
||||
|
|
@ -676,9 +676,9 @@ void LLVoiceChannelProximal::activate()
|
|||
// we're connected to a non-spatial channel, so disconnect.
|
||||
LLVoiceClient::getInstance()->leaveNonSpatialChannel();
|
||||
}
|
||||
|
||||
LLVoiceClient::getInstance()->activateSpatialChannel(true);
|
||||
LLVoiceChannel::activate();
|
||||
|
||||
}
|
||||
|
||||
void LLVoiceChannelProximal::onChange(EStatusType type, const LLSD& channelInfo, bool proximal)
|
||||
|
|
@ -751,7 +751,7 @@ void LLVoiceChannelProximal::deactivate()
|
|||
{
|
||||
setState(STATE_HUNG_UP);
|
||||
}
|
||||
|
||||
LLVoiceClient::getInstance()->removeObserver(this);
|
||||
LLVoiceClient::getInstance()->activateSpatialChannel(false);
|
||||
}
|
||||
|
||||
|
|
@ -907,7 +907,7 @@ void LLVoiceChannelP2P::setChannelInfo(const LLSD& channel_info)
|
|||
}
|
||||
|
||||
mReceivedCall = true;
|
||||
if (!channel_info.isUndefined())
|
||||
if (channel_info.isDefined() && channel_info.isMap())
|
||||
{
|
||||
mIncomingCallInterface = LLVoiceClient::getInstance()->getIncomingCallInterface(channel_info);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -139,6 +139,7 @@ LLVoiceClient::LLVoiceClient(LLPumpIO *pump)
|
|||
m_servicePump(NULL),
|
||||
mVoiceEffectEnabled(LLCachedControl<bool>(gSavedSettings, "VoiceMorphingEnabled", true)),
|
||||
mVoiceEffectDefault(LLCachedControl<std::string>(gSavedPerAccountSettings, "VoiceEffectDefault", "00000000-0000-0000-0000-000000000000")),
|
||||
mVoiceEffectSupportNotified(false),
|
||||
mPTTDirty(true),
|
||||
mPTT(true),
|
||||
mUsePTT(true),
|
||||
|
|
@ -569,11 +570,37 @@ void LLVoiceClient::setMicGain(F32 gain)
|
|||
//------------------------------------------
|
||||
// enable/disable voice features
|
||||
|
||||
// static
|
||||
bool LLVoiceClient::onVoiceEffectsNotSupported(const LLSD ¬ification, const LLSD &response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
switch (option)
|
||||
{
|
||||
case 0: // "Okay"
|
||||
gSavedPerAccountSettings.setString("VoiceEffectDefault", LLUUID::null.asString());
|
||||
break;
|
||||
|
||||
case 1: // "Cancel"
|
||||
break;
|
||||
|
||||
default:
|
||||
llassert(0);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LLVoiceClient::voiceEnabled()
|
||||
{
|
||||
static LLCachedControl<bool> enable_voice_chat(gSavedSettings, "EnableVoiceChat");
|
||||
static LLCachedControl<bool> cmd_line_disable_voice(gSavedSettings, "CmdLineDisableVoice");
|
||||
return enable_voice_chat && !cmd_line_disable_voice && !gNonInteractive;
|
||||
bool enabled = enable_voice_chat && !cmd_line_disable_voice && !gNonInteractive;
|
||||
if (enabled && !mVoiceEffectSupportNotified && getVoiceEffectEnabled() && !getVoiceEffectDefault().isNull())
|
||||
{
|
||||
LLNotificationsUtil::add("VoiceEffectsNotSupported", LLSD(), LLSD(), &LLVoiceClient::onVoiceEffectsNotSupported);
|
||||
mVoiceEffectSupportNotified = true;
|
||||
}
|
||||
return enabled;
|
||||
}
|
||||
|
||||
void LLVoiceClient::setVoiceEnabled(bool enabled)
|
||||
|
|
@ -812,7 +839,7 @@ std::string LLVoiceClient::sipURIFromID(const LLUUID &id)
|
|||
|
||||
LLVoiceEffectInterface* LLVoiceClient::getVoiceEffectInterface() const
|
||||
{
|
||||
return getVoiceEffectEnabled() ? dynamic_cast<LLVoiceEffectInterface*>(mSpatialVoiceModule) : NULL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
///////////////////
|
||||
|
|
|
|||
|
|
@ -508,6 +508,8 @@ public:
|
|||
|
||||
protected:
|
||||
|
||||
static bool onVoiceEffectsNotSupported(const LLSD ¬ification, const LLSD &response);
|
||||
|
||||
LLVoiceModuleInterface* mSpatialVoiceModule;
|
||||
LLVoiceModuleInterface* mNonSpatialVoiceModule;
|
||||
LLSD mSpatialCredentials; // used to store spatial credentials for vivox
|
||||
|
|
@ -519,6 +521,7 @@ protected:
|
|||
|
||||
LLCachedControl<bool> mVoiceEffectEnabled;
|
||||
LLCachedControl<std::string> mVoiceEffectDefault;
|
||||
bool mVoiceEffectSupportNotified;
|
||||
|
||||
bool mPTTDirty;
|
||||
bool mPTT;
|
||||
|
|
|
|||
|
|
@ -2540,7 +2540,6 @@ void LLVivoxVoiceClient::sessionCreateSendMessage(const sessionStatePtr_t &sessi
|
|||
stream
|
||||
<< "<ConnectAudio>" << (startAudio?"true":"false") << "</ConnectAudio>"
|
||||
<< "<ConnectText>" << (startText?"true":"false") << "</ConnectText>"
|
||||
<< "<VoiceFontID>" << font_index << "</VoiceFontID>"
|
||||
<< "<Name>" << mChannelName << "</Name>"
|
||||
<< "</Request>\n\n\n";
|
||||
LL_WARNS("Voice") << "Session.Create: " << stream.str() << LL_ENDL;
|
||||
|
|
@ -2579,7 +2578,6 @@ void LLVivoxVoiceClient::sessionGroupAddSessionSendMessage(const sessionStatePtr
|
|||
<< "<Name>" << mChannelName << "</Name>"
|
||||
<< "<ConnectAudio>" << (startAudio?"true":"false") << "</ConnectAudio>"
|
||||
<< "<ConnectText>" << (startText?"true":"false") << "</ConnectText>"
|
||||
<< "<VoiceFontID>" << font_index << "</VoiceFontID>"
|
||||
<< "<Password>" << password << "</Password>"
|
||||
<< "<PasswordHashAlgorithm>SHA1UserName</PasswordHashAlgorithm>"
|
||||
<< "</Request>\n\n\n"
|
||||
|
|
@ -2603,7 +2601,6 @@ void LLVivoxVoiceClient::sessionMediaConnectSendMessage(const sessionStatePtr_t
|
|||
<< "<Request requestId=\"" << session->mHandle << "\" action=\"Session.MediaConnect.1\">"
|
||||
<< "<SessionGroupHandle>" << session->mGroupHandle << "</SessionGroupHandle>"
|
||||
<< "<SessionHandle>" << session->mHandle << "</SessionHandle>"
|
||||
<< "<VoiceFontID>" << font_index << "</VoiceFontID>"
|
||||
<< "<Media>Audio</Media>"
|
||||
<< "</Request>\n\n\n";
|
||||
|
||||
|
|
@ -5107,25 +5104,31 @@ void LLVivoxVoiceClient::processChannels(bool process)
|
|||
|
||||
bool LLVivoxVoiceClient::isCurrentChannel(const LLSD &channelInfo)
|
||||
{
|
||||
if (!mProcessChannels || (channelInfo["voice_server_type"].asString() != VIVOX_VOICE_SERVER_TYPE))
|
||||
if (!mProcessChannels || (channelInfo.has("voice_server_type") && channelInfo["voice_server_type"].asString() != VIVOX_VOICE_SERVER_TYPE))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (mAudioSession)
|
||||
// favor the next audio session, as that's the one we're bringing up.
|
||||
sessionStatePtr_t session = mNextAudioSession;
|
||||
if (!session)
|
||||
{
|
||||
session = mAudioSession;
|
||||
}
|
||||
if (session)
|
||||
{
|
||||
if (!channelInfo["session_handle"].asString().empty())
|
||||
{
|
||||
return mAudioSession->mHandle == channelInfo["session_handle"].asString();
|
||||
return session->mHandle == channelInfo["session_handle"].asString();
|
||||
}
|
||||
return channelInfo["channel_uri"].asString() == mAudioSession->mSIPURI;
|
||||
return channelInfo["channel_uri"].asString() == session->mSIPURI;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool LLVivoxVoiceClient::compareChannels(const LLSD& channelInfo1, const LLSD& channelInfo2)
|
||||
{
|
||||
return (channelInfo1["voice_server_type"] == VIVOX_VOICE_SERVER_TYPE) &&
|
||||
(channelInfo1["voice_server_type"] == channelInfo2["voice_server_type"]) &&
|
||||
return (!channelInfo1.has("voice_server_type") || (channelInfo1["voice_server_type"] == VIVOX_VOICE_SERVER_TYPE)) &&
|
||||
(!channelInfo2.has("voice_server_type") || (channelInfo2["voice_server_type"] == VIVOX_VOICE_SERVER_TYPE)) &&
|
||||
(channelInfo1["channel_uri"] == channelInfo2["channel_uri"]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ namespace {
|
|||
const F32 VOLUME_SCALE_WEBRTC = 0.01f;
|
||||
const F32 LEVEL_SCALE_WEBRTC = 0.008f;
|
||||
|
||||
const F32 SPEAKING_AUDIO_LEVEL = 0.35;
|
||||
const F32 SPEAKING_AUDIO_LEVEL = 0.30;
|
||||
|
||||
static const std::string REPORTED_VOICE_SERVER_TYPE = "Secondlife WebRTC Gateway";
|
||||
|
||||
|
|
@ -1486,14 +1486,10 @@ void LLWebRTCVoiceClient::setMicGain(F32 gain)
|
|||
if (gain != mMicGain)
|
||||
{
|
||||
mMicGain = gain;
|
||||
sessionState::for_each(boost::bind(predSetMicGain, _1, gain));
|
||||
mWebRTCDeviceInterface->setPeerConnectionGain(gain);
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::predSetMicGain(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 gain)
|
||||
{
|
||||
session->setMicGain(gain);
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::setVoiceEnabled(bool enabled)
|
||||
{
|
||||
|
|
@ -1692,7 +1688,6 @@ std::map<std::string, LLWebRTCVoiceClient::sessionState::ptr_t> LLWebRTCVoiceCli
|
|||
LLWebRTCVoiceClient::sessionState::sessionState() :
|
||||
mHangupOnLastLeave(false),
|
||||
mNotifyOnFirstJoin(false),
|
||||
mMicGain(1.0),
|
||||
mMuted(false),
|
||||
mSpeakerVolume(1.0),
|
||||
mShuttingDown(false)
|
||||
|
|
@ -1737,15 +1732,6 @@ void LLWebRTCVoiceClient::sessionState::setMuteMic(bool muted)
|
|||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::sessionState::setMicGain(F32 gain)
|
||||
{
|
||||
mMicGain = gain;
|
||||
for (auto &connection : mWebRTCConnections)
|
||||
{
|
||||
connection->setMicGain(gain);
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::sessionState::setSpeakerVolume(F32 volume)
|
||||
{
|
||||
mSpeakerVolume = volume;
|
||||
|
|
@ -1850,7 +1836,6 @@ LLWebRTCVoiceClient::sessionStatePtr_t LLWebRTCVoiceClient::addSession(const std
|
|||
|
||||
LL_DEBUGS("Voice") << "adding new session with channel: " << channel_id << LL_ENDL;
|
||||
session->setMuteMic(mMuteMic);
|
||||
session->setMicGain(mMicGain);
|
||||
session->setSpeakerVolume(mSpeakerVolume);
|
||||
|
||||
sessionState::addSession(channel_id, session);
|
||||
|
|
@ -1976,7 +1961,6 @@ bool LLWebRTCVoiceClient::estateSessionState::processConnectionStates()
|
|||
connectionPtr_t connection(new LLVoiceWebRTCSpatialConnection(neighbor, INVALID_PARCEL_ID, mChannelID));
|
||||
|
||||
mWebRTCConnections.push_back(connection);
|
||||
connection->setMicGain(mMicGain);
|
||||
connection->setMuteMic(mMuted);
|
||||
connection->setSpeakerVolume(mSpeakerVolume);
|
||||
}
|
||||
|
|
@ -2106,7 +2090,6 @@ LLVoiceWebRTCConnection::LLVoiceWebRTCConnection(const LLUUID ®ionID, const s
|
|||
mShutDown(false),
|
||||
mIceCompleted(false),
|
||||
mSpeakerVolume(0.0),
|
||||
mMicGain(0.0),
|
||||
mOutstandingRequests(0),
|
||||
mChannelID(channelID),
|
||||
mRegionID(regionID),
|
||||
|
|
@ -2369,15 +2352,6 @@ void LLVoiceWebRTCConnection::setMuteMic(bool muted)
|
|||
}
|
||||
}
|
||||
|
||||
void LLVoiceWebRTCConnection::setMicGain(F32 gain)
|
||||
{
|
||||
mMicGain = gain;
|
||||
if (mWebRTCAudioInterface)
|
||||
{
|
||||
mWebRTCAudioInterface->setSendVolume(gain);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceWebRTCConnection::setSpeakerVolume(F32 volume)
|
||||
{
|
||||
mSpeakerVolume = volume;
|
||||
|
|
@ -2677,7 +2651,6 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
|
|||
// this connection.
|
||||
mWebRTCAudioInterface->setMute(mMuted);
|
||||
mWebRTCAudioInterface->setReceiveVolume(mSpeakerVolume);
|
||||
mWebRTCAudioInterface->setSendVolume(mMicGain);
|
||||
LLWebRTCVoiceClient::getInstance()->OnConnectionEstablished(mChannelID, mRegionID);
|
||||
setVoiceConnectionState(VOICE_STATE_WAIT_FOR_DATA_CHANNEL);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -282,7 +282,6 @@ public:
|
|||
virtual void sendData(const std::string &data);
|
||||
|
||||
void setMuteMic(bool muted);
|
||||
void setMicGain(F32 volume);
|
||||
void setSpeakerVolume(F32 volume);
|
||||
void setUserVolume(const LLUUID& id, F32 volume);
|
||||
|
||||
|
|
@ -303,7 +302,6 @@ public:
|
|||
std::string mName;
|
||||
|
||||
bool mMuted; // this session is muted.
|
||||
F32 mMicGain; // gain for this session.
|
||||
F32 mSpeakerVolume; // volume for this session.
|
||||
|
||||
bool mShuttingDown;
|
||||
|
|
@ -382,7 +380,6 @@ public:
|
|||
static void predSendData(const LLWebRTCVoiceClient::sessionStatePtr_t &session, const std::string& spatial_data);
|
||||
static void predUpdateOwnVolume(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 audio_level);
|
||||
static void predSetMuteMic(const LLWebRTCVoiceClient::sessionStatePtr_t &session, bool mute);
|
||||
static void predSetMicGain(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 volume);
|
||||
static void predSetSpeakerVolume(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 volume);
|
||||
static void predShutdownSession(const LLWebRTCVoiceClient::sessionStatePtr_t &session);
|
||||
static void predSetUserMute(const LLWebRTCVoiceClient::sessionStatePtr_t &session, const LLUUID& id, bool mute);
|
||||
|
|
@ -607,7 +604,6 @@ class LLVoiceWebRTCConnection :
|
|||
void processIceUpdatesCoro();
|
||||
|
||||
virtual void setMuteMic(bool muted);
|
||||
virtual void setMicGain(F32 volume);
|
||||
virtual void setSpeakerVolume(F32 volume);
|
||||
|
||||
void setUserVolume(const LLUUID& id, F32 volume);
|
||||
|
|
@ -686,7 +682,6 @@ class LLVoiceWebRTCConnection :
|
|||
std::string mRemoteChannelSDP;
|
||||
|
||||
bool mMuted;
|
||||
F32 mMicGain;
|
||||
F32 mSpeakerVolume;
|
||||
|
||||
bool mShutDown;
|
||||
|
|
|
|||
|
|
@ -42,12 +42,6 @@
|
|||
<menu_item_call label="Facebook..." name="Facebook"/>
|
||||
<menu_item_call label="Twitter..." name="Twitter"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu label="Voice-Morphing" name="VoiceMorphing">
|
||||
<menu_item_check label="Kein Voice-Morphing" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="Vorschau..." name="Preview"/>
|
||||
<menu_item_call label="Abonnieren..." name="Subscribe"/>
|
||||
<menu_item_call label="Premium-Vorteil..." name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="Gesten..." name="Gestures"/>
|
||||
<menu_item_check label="Freunde" name="My Friends"/>
|
||||
<menu_item_check label="Gruppen" name="My Groups"/>
|
||||
|
|
|
|||
|
|
@ -561,42 +561,6 @@
|
|||
parameter="conversation" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator/>
|
||||
<menu
|
||||
label="Voice morphing"
|
||||
name="VoiceMorphing"
|
||||
visibility_control="VoiceMorphingEnabled">
|
||||
<menu_item_check
|
||||
label="No voice morphing"
|
||||
name="NoVoiceMorphing">
|
||||
<menu_item_check.on_check
|
||||
function="Communicate.VoiceMorphing.NoVoiceMorphing.Check" />
|
||||
<menu_item_check.on_click
|
||||
function="Communicate.VoiceMorphing.NoVoiceMorphing.Click" />
|
||||
</menu_item_check>
|
||||
<menu_item_separator/>
|
||||
<menu_item_check
|
||||
label="Preview..."
|
||||
name="Preview">
|
||||
<menu_item_check.on_check
|
||||
function="Floater.Visible"
|
||||
parameter="voice_effect" />
|
||||
<menu_item_check.on_click
|
||||
function="Floater.Toggle"
|
||||
parameter="voice_effect" />
|
||||
</menu_item_check>
|
||||
<menu_item_call
|
||||
label="Subscribe..."
|
||||
name="Subscribe">
|
||||
<menu_item_call.on_click
|
||||
function="Communicate.VoiceMorphing.Subscribe" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Premium perk..."
|
||||
name="PremiumPerk">
|
||||
<menu_item_call.on_click
|
||||
function="Communicate.VoiceMorphing.PremiumPerk" />
|
||||
</menu_item_call>
|
||||
</menu>
|
||||
<menu_item_check
|
||||
label="Gestures..."
|
||||
name="Gestures"
|
||||
|
|
|
|||
|
|
@ -8841,6 +8841,20 @@ New Voice Morphs are available!
|
|||
<tag>voice</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="VoiceEffectsNotSupported"
|
||||
sound="UISndAlert"
|
||||
persist="true"
|
||||
type="alertmodal">
|
||||
Voice Morphs are not supported by this viewer.
|
||||
<usetemplate
|
||||
notext="Cancel"
|
||||
name="okcancelbuttons"
|
||||
yestext="Disable Voice Morphing"/>
|
||||
<tag>voice</tag>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="notifytip.tga"
|
||||
name="Cannot enter parcel: not a group member"
|
||||
|
|
|
|||
|
|
@ -42,12 +42,6 @@
|
|||
<menu_item_call label="Facebook..." name="Facebook"/>
|
||||
<menu_item_call label="Twitter..." name="Twitter"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu label="Transformación de voz" name="VoiceMorphing">
|
||||
<menu_item_check label="Sin transformación de voz" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="Probar..." name="Preview"/>
|
||||
<menu_item_call label="Suscribir..." name="Subscribe"/>
|
||||
<menu_item_call label="Ventaja Premium..." name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="Gestos..." name="Gestures"/>
|
||||
<menu_item_check label="Amigos" name="My Friends"/>
|
||||
<menu_item_check label="Grupos" name="My Groups"/>
|
||||
|
|
|
|||
|
|
@ -42,12 +42,6 @@
|
|||
<menu_item_call label="Facebook..." name="Facebook"/>
|
||||
<menu_item_call label="Twitter..." name="Twitter"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu label="Manipolazione voce" name="VoiceMorphing">
|
||||
<menu_item_check label="Nessuna manipolazione voce" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="Anteprima..." name="Preview"/>
|
||||
<menu_item_call label="Abbonati..." name="Subscribe"/>
|
||||
<menu_item_call label="Vantaggio Premium..." name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="Gesture..." name="Gestures"/>
|
||||
<menu_item_check label="Amici" name="My Friends"/>
|
||||
<menu_item_check label="Gruppi" name="My Groups"/>
|
||||
|
|
|
|||
|
|
@ -74,7 +74,6 @@
|
|||
<menu_item_check label="ボイスチャット" name="Speak"/>
|
||||
<menu_item_check name="Conversation Log..." label="会話ログ…"/>
|
||||
<menu_item_separator/>
|
||||
<menu label="ボイスモーフィング" name="VoiceMorphing"/>
|
||||
<menu_item_check label="ジェスチャー…" name="Gestures"/>
|
||||
<menu_item_separator/>
|
||||
<menu_item_check label="フレンド" name="My Friends"/>
|
||||
|
|
|
|||
|
|
@ -35,11 +35,6 @@
|
|||
<menu_item_check label="Czat lokalny..." name="Nearby Chat" />
|
||||
<menu_item_check label="Mowa" name="Speak" />
|
||||
<menu_item_check name="Conversation Log..." label="Dziennik rozmów..." />
|
||||
<menu label="Przekształcanie głosu" name="VoiceMorphing">
|
||||
<menu_item_check label="Bez przekształcania" name="NoVoiceMorphing" />
|
||||
<menu_item_check label="Podgląd..." name="Preview" />
|
||||
<menu_item_call label="Subskrybuj..." name="Subscribe" />
|
||||
</menu>
|
||||
<menu_item_check label="Gesty..." name="Gestures" />
|
||||
<menu_item_check label="Znajomi" name="My Friends" />
|
||||
<menu_item_check label="Grupy" name="My Groups" />
|
||||
|
|
|
|||
|
|
@ -42,12 +42,6 @@
|
|||
<menu_item_call label="Facebook..." name="Facebook"/>
|
||||
<menu_item_call label="Twitter..." name="Twitter"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu label="Distorção de voz" name="VoiceMorphing">
|
||||
<menu_item_check label="Não distorcer voz" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="Visualizar..." name="Preview"/>
|
||||
<menu_item_call label="Assinar..." name="Subscribe"/>
|
||||
<menu_item_call label="Benefício Premium..." name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="Gestos..." name="Gestures"/>
|
||||
<menu_item_check label="Amigos" name="My Friends"/>
|
||||
<menu_item_check label="Grupos" name="My Groups"/>
|
||||
|
|
|
|||
|
|
@ -40,12 +40,6 @@
|
|||
<menu_item_call label="Facebook..." name="Facebook"/>
|
||||
<menu_item_call label="Twitter..." name="Twitter"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu label="Изменение голоса" name="VoiceMorphing">
|
||||
<menu_item_check label="Без изменения голоса" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="Просмотр..." name="Preview"/>
|
||||
<menu_item_call label="Подписаться..." name="Subscribe"/>
|
||||
<menu_item_call label="Премиум-бонус..." name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="Жесты..." name="Gestures"/>
|
||||
<menu_item_check label="Друзья" name="My Friends"/>
|
||||
<menu_item_check label="Группы" name="My Groups"/>
|
||||
|
|
|
|||
|
|
@ -40,12 +40,6 @@
|
|||
<menu_item_call label="Facebook..." name="Facebook"/>
|
||||
<menu_item_call label="Twitter..." name="Twitter"/>
|
||||
<menu_item_call label="Flickr..." name="Flickr"/>
|
||||
<menu label="Ses şekillendirme" name="VoiceMorphing">
|
||||
<menu_item_check label="Ses şekillendirme yok" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="Önizleme..." name="Preview"/>
|
||||
<menu_item_call label="Abone ol..." name="Subscribe"/>
|
||||
<menu_item_call label="Özel üye avantajı..." name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="Mimikler..." name="Gestures"/>
|
||||
<menu_item_check label="Arkadaşlar" name="My Friends"/>
|
||||
<menu_item_check label="Gruplar" name="My Groups"/>
|
||||
|
|
|
|||
|
|
@ -40,12 +40,6 @@
|
|||
<menu_item_call label="臉書…" name="Facebook"/>
|
||||
<menu_item_call label="推特…" name="Twitter"/>
|
||||
<menu_item_call label="Flickr…" name="Flickr"/>
|
||||
<menu label="語音變聲" name="VoiceMorphing">
|
||||
<menu_item_check label="沒有變聲效果" name="NoVoiceMorphing"/>
|
||||
<menu_item_check label="預覽……" name="Preview"/>
|
||||
<menu_item_call label="訂閱……" name="Subscribe"/>
|
||||
<menu_item_call label="付費會員獨享…" name="PremiumPerk"/>
|
||||
</menu>
|
||||
<menu_item_check label="姿勢…" name="Gestures"/>
|
||||
<menu_item_check label="朋友" name="My Friends"/>
|
||||
<menu_item_check label="群組" name="My Groups"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue