diff options
| -rw-r--r-- | indra/llwebrtc/llwebrtc.cpp | 20 | ||||
| -rw-r--r-- | indra/llwebrtc/llwebrtc.h | 1 | ||||
| -rw-r--r-- | indra/llwebrtc/llwebrtc_impl.h | 5 | ||||
| -rw-r--r-- | indra/newview/llvoicewebrtc.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llvoicewebrtc.h | 5 | 
5 files changed, 22 insertions, 40 deletions
| diff --git a/indra/llwebrtc/llwebrtc.cpp b/indra/llwebrtc/llwebrtc.cpp index 14fb63ec2a..d5bd913315 100644 --- a/indra/llwebrtc/llwebrtc.cpp +++ b/indra/llwebrtc/llwebrtc.cpp @@ -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; @@ -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 @@ -937,7 +945,7 @@ void LLWebRTCPeerConnectionImpl::setSendVolume(float volume)              {                  for (auto &track : mLocalStream->GetAudioTracks())                  { -                    track->GetSource()->SetVolume(volume); +                    track->GetSource()->SetVolume(volume*5.0);                  }              }          }); diff --git a/indra/llwebrtc/llwebrtc.h b/indra/llwebrtc/llwebrtc.h index ecbab81538..f447ea990a 100644 --- a/indra/llwebrtc/llwebrtc.h +++ b/indra/llwebrtc/llwebrtc.h @@ -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 diff --git a/indra/llwebrtc/llwebrtc_impl.h b/indra/llwebrtc/llwebrtc_impl.h index 448d36e3ea..6672f8ce90 100644 --- a/indra/llwebrtc/llwebrtc_impl.h +++ b/indra/llwebrtc/llwebrtc_impl.h @@ -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      // diff --git a/indra/newview/llvoicewebrtc.cpp b/indra/newview/llvoicewebrtc.cpp index ddad470149..36e998af89 100644 --- a/indra/newview/llvoicewebrtc.cpp +++ b/indra/newview/llvoicewebrtc.cpp @@ -87,7 +87,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"; @@ -1484,14 +1484,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)  { @@ -1690,7 +1686,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) @@ -1735,15 +1730,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; @@ -1848,7 +1834,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); @@ -1974,7 +1959,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);          } @@ -2104,7 +2088,6 @@ LLVoiceWebRTCConnection::LLVoiceWebRTCConnection(const LLUUID ®ionID, const s      mShutDown(false),      mIceCompleted(false),      mSpeakerVolume(0.0), -    mMicGain(0.0),      mOutstandingRequests(0),      mChannelID(channelID),      mRegionID(regionID), @@ -2367,15 +2350,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; @@ -2683,7 +2657,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; diff --git a/indra/newview/llvoicewebrtc.h b/indra/newview/llvoicewebrtc.h index 60724a4a2a..7042bbae00 100644 --- a/indra/newview/llvoicewebrtc.h +++ b/indra/newview/llvoicewebrtc.h @@ -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; | 
