Using the device module to set speaker/mic volume set the system mic/volume
for all applications. Instead, modify the volume on the various streams.meow-7.2.2
parent
82c9e52865
commit
7a6c796452
|
|
@ -399,11 +399,6 @@ float LLWebRTCImpl::getTuningAudioLevel() { return 20 * mTuningAudioDeviceObserv
|
|||
|
||||
float LLWebRTCImpl::getPeerAudioLevel() { return 20 * mPeerAudioDeviceObserver->getMicrophoneEnergy(); }
|
||||
|
||||
void LLWebRTCImpl::setSpeakerVolume(float volume) { mPeerDeviceModule->SetSpeakerVolume( (uint32_t)(volume * VOLUME_SCALE_WEBRTC));}
|
||||
void LLWebRTCImpl::setMicrophoneVolume(float volume) { mPeerDeviceModule->SetMicrophoneVolume((uint32_t)(volume * VOLUME_SCALE_WEBRTC));}
|
||||
|
||||
void LLWebRTCImpl::setMute(bool mute) { mPeerDeviceModule->SetMicrophoneMute(mute); }
|
||||
|
||||
//
|
||||
// Helpers
|
||||
//
|
||||
|
|
@ -417,6 +412,7 @@ LLWebRTCPeerConnection * LLWebRTCImpl::newPeerConnection()
|
|||
peerConnection->enableTracks(!mMute);
|
||||
return peerConnection.get();
|
||||
}
|
||||
|
||||
void LLWebRTCImpl::freePeerConnection(LLWebRTCPeerConnection * peer_connection)
|
||||
{
|
||||
std::vector<rtc::scoped_refptr<LLWebRTCPeerConnectionImpl>>::iterator it =
|
||||
|
|
@ -506,12 +502,11 @@ bool LLWebRTCPeerConnectionImpl::initializeConnection()
|
|||
audioOptions.echo_cancellation = false; // incompatible with opus stereo
|
||||
audioOptions.noise_suppression = true;
|
||||
|
||||
rtc::scoped_refptr<webrtc::MediaStreamInterface> stream = mPeerConnectionFactory->CreateLocalMediaStream("SLStream");
|
||||
|
||||
mLocalStream = mPeerConnectionFactory->CreateLocalMediaStream("SLStream");
|
||||
rtc::scoped_refptr<webrtc::AudioTrackInterface> audio_track(
|
||||
mPeerConnectionFactory->CreateAudioTrack("SLAudio", mPeerConnectionFactory->CreateAudioSource(audioOptions).get()));
|
||||
audio_track->set_enabled(true);
|
||||
stream->AddTrack(audio_track);
|
||||
mLocalStream->AddTrack(audio_track);
|
||||
|
||||
mPeerConnection->AddTrack(audio_track, {"SLStream"});
|
||||
|
||||
|
|
@ -545,6 +540,7 @@ bool LLWebRTCPeerConnectionImpl::initializeConnection()
|
|||
params.codecs.push_back(codecparam);
|
||||
receiver->SetParameters(params);
|
||||
}
|
||||
|
||||
webrtc::PeerConnectionInterface::RTCOfferAnswerOptions offerOptions;
|
||||
mPeerConnection->CreateOffer(this, offerOptions);
|
||||
|
||||
|
|
@ -606,13 +602,47 @@ void LLWebRTCPeerConnectionImpl::AnswerAvailable(const std::string &sdp)
|
|||
void LLWebRTCPeerConnectionImpl::setMute(bool mute)
|
||||
{
|
||||
mMute = mute;
|
||||
auto senders = mPeerConnection->GetSenders();
|
||||
|
||||
RTC_LOG(LS_INFO) << __FUNCTION__ << (mute ? "disabling" : "enabling") << " streams count " << senders.size();
|
||||
|
||||
for (auto &sender : senders)
|
||||
if (mPeerConnection)
|
||||
{
|
||||
sender->track()->set_enabled(!mMute);
|
||||
auto senders = mPeerConnection->GetSenders();
|
||||
|
||||
RTC_LOG(LS_INFO) << __FUNCTION__ << (mute ? "disabling" : "enabling") << " streams count " << senders.size();
|
||||
for (auto &sender : senders)
|
||||
{
|
||||
auto track = sender->track();
|
||||
if(track)
|
||||
{
|
||||
track->set_enabled(!mMute);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCPeerConnectionImpl::setReceiveVolume(float volume)
|
||||
{
|
||||
auto receivers = mPeerConnection->GetReceivers();
|
||||
|
||||
for (auto &receiver : receivers)
|
||||
{
|
||||
for (auto& stream : receiver->streams())
|
||||
{
|
||||
for (auto& track : stream->GetAudioTracks())
|
||||
{
|
||||
track->GetSource()->SetVolume(volume);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCPeerConnectionImpl::setSendVolume(float volume)
|
||||
{
|
||||
if (mLocalStream)
|
||||
{
|
||||
auto track = mLocalStream->FindAudioTrack("SLStream");
|
||||
if (track)
|
||||
{
|
||||
track->GetSource()->SetVolume(volume);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -85,10 +85,6 @@ class LLWebRTCDeviceInterface
|
|||
|
||||
virtual void setTuningMode(bool enable) = 0;
|
||||
virtual float getTuningAudioLevel() = 0;
|
||||
|
||||
virtual void setSpeakerVolume(float volume) = 0; // volume between 0.0 and 1.0
|
||||
virtual void setMicrophoneVolume(float volume) = 0; // volume between 0.0 and 1.0
|
||||
virtual void setMute(bool mute) = 0;
|
||||
virtual float getPeerAudioLevel() = 0;
|
||||
};
|
||||
|
||||
|
|
@ -96,6 +92,8 @@ class LLWebRTCAudioInterface
|
|||
{
|
||||
public:
|
||||
virtual void setMute(bool mute) = 0;
|
||||
virtual void setReceiveVolume(float volume) = 0; // volume between 0.0 and 1.0
|
||||
virtual void setSendVolume(float volume) = 0; // volume between 0.0 and 1.0
|
||||
};
|
||||
|
||||
class LLWebRTCDataObserver
|
||||
|
|
|
|||
|
|
@ -116,10 +116,6 @@ class LLWebRTCImpl : public LLWebRTCDeviceInterface
|
|||
void setTuningMode(bool enable) override;
|
||||
float getTuningAudioLevel() override;
|
||||
float getPeerAudioLevel() override;
|
||||
|
||||
void setSpeakerVolume(float volume) override; // range 0.0-1.0
|
||||
void setMicrophoneVolume(float volume) override; // range 0.0-1.0
|
||||
void setMute(bool mute) override;
|
||||
|
||||
//
|
||||
// Helpers
|
||||
|
|
@ -224,12 +220,13 @@ class LLWebRTCPeerConnectionImpl : public LLWebRTCPeerConnection,
|
|||
void shutdownConnection() override;
|
||||
void AnswerAvailable(const std::string &sdp) override;
|
||||
|
||||
|
||||
//
|
||||
// LLWebRTCAudioInterface
|
||||
//
|
||||
void setMute(bool mute) override;
|
||||
|
||||
void setReceiveVolume(float volume) override; // volume between 0.0 and 1.0
|
||||
void setSendVolume(float volume) override; // volume between 0.0 and 1.0
|
||||
|
||||
//
|
||||
// LLWebRTCDataInterface
|
||||
//
|
||||
|
|
@ -291,6 +288,7 @@ class LLWebRTCPeerConnectionImpl : public LLWebRTCPeerConnection,
|
|||
bool mAnswerReceived;
|
||||
|
||||
rtc::scoped_refptr<webrtc::PeerConnectionInterface> mPeerConnection;
|
||||
rtc::scoped_refptr<webrtc::MediaStreamInterface> mLocalStream;
|
||||
|
||||
std::vector<LLWebRTCDataObserver *> mDataObserverList;
|
||||
rtc::scoped_refptr<webrtc::DataChannelInterface> mDataChannel;
|
||||
|
|
|
|||
|
|
@ -746,7 +746,7 @@ void LLWebRTCVoiceClient::sendPositionAndVolumeUpdate(bool force)
|
|||
|
||||
if (!mMuteMic)
|
||||
{
|
||||
audio_level = (F32) mWebRTCDeviceInterface->getPeerAudioLevel();
|
||||
audio_level = (F32) mWebRTCDeviceInterface->getPeerAudioLevel() * mMicVolume;
|
||||
uint_audio_level = (uint32_t) (audio_level * 128);
|
||||
|
||||
}
|
||||
|
|
@ -853,6 +853,33 @@ void LLWebRTCVoiceClient::sessionState::sendData(const std::string &data)
|
|||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::sessionState::setMuteMic(bool muted)
|
||||
{
|
||||
mMuted = muted;
|
||||
for (auto& connection : mWebRTCConnections)
|
||||
{
|
||||
connection.second->setMuteMic(muted);
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::sessionState::setMicGain(F32 gain)
|
||||
{
|
||||
mMicGain = gain;
|
||||
for (auto& connection : mWebRTCConnections)
|
||||
{
|
||||
connection.second->setMicGain(gain);
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::sessionState::setSpeakerVolume(F32 volume)
|
||||
{
|
||||
mSpeakerVolume = volume;
|
||||
for (auto& connection : mWebRTCConnections)
|
||||
{
|
||||
connection.second->setSpeakerVolume(volume);
|
||||
}
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::sendLocalAudioUpdates()
|
||||
{
|
||||
}
|
||||
|
|
@ -1723,10 +1750,6 @@ void LLWebRTCVoiceClient::leaveChannel(void)
|
|||
void LLWebRTCVoiceClient::setMuteMic(bool muted)
|
||||
{
|
||||
|
||||
if (mWebRTCDeviceInterface)
|
||||
{
|
||||
mWebRTCDeviceInterface->setMute(muted);
|
||||
}
|
||||
mMuteMic = muted;
|
||||
sessionState::for_each(boost::bind(predSetMuteMic, _1, muted));
|
||||
}
|
||||
|
|
@ -1738,6 +1761,17 @@ void LLWebRTCVoiceClient::predSetMuteMic(const LLWebRTCVoiceClient::sessionState
|
|||
{
|
||||
participant->mPower = 0.0;
|
||||
}
|
||||
session->setMuteMic(muted);
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::predSetSpeakerVolume(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 volume)
|
||||
{
|
||||
session->setSpeakerVolume(volume);
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::predSetMicGain(const LLWebRTCVoiceClient::sessionStatePtr_t &session, F32 volume)
|
||||
{
|
||||
session->setMicGain(volume);
|
||||
}
|
||||
|
||||
void LLWebRTCVoiceClient::setVoiceEnabled(bool enabled)
|
||||
|
|
@ -1838,10 +1872,7 @@ void LLWebRTCVoiceClient::setVoiceVolume(F32 volume)
|
|||
mSpeakerVolume = volume;
|
||||
mSpeakerVolumeDirty = true;
|
||||
}
|
||||
if (mWebRTCDeviceInterface)
|
||||
{
|
||||
mWebRTCDeviceInterface->setSpeakerVolume(volume);
|
||||
}
|
||||
sessionState::for_each(boost::bind(predSetSpeakerVolume, _1, volume));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1854,6 +1885,7 @@ void LLWebRTCVoiceClient::setMicGain(F32 volume)
|
|||
mMicVolume = scaled_volume;
|
||||
mMicVolumeDirty = true;
|
||||
}
|
||||
sessionState::for_each(boost::bind(predSetMicGain, _1, scaled_volume));
|
||||
}
|
||||
|
||||
/////////////////////////////
|
||||
|
|
@ -2059,7 +2091,9 @@ LLWebRTCVoiceClient::sessionState::ptr_t LLWebRTCVoiceClient::sessionState::crea
|
|||
|
||||
sessionState::ptr_t session(new sessionState());
|
||||
session->mChannelID = channelID;
|
||||
session->mWebRTCConnections[channelID] = connectionPtr_t(new LLVoiceWebRTCConnection(region_id, parcelLocalID, channelID));
|
||||
connectionPtr_t connection = connectionPtr_t(new LLVoiceWebRTCConnection(region_id, parcelLocalID, channelID));
|
||||
session->mWebRTCConnections[channelID] = connection;
|
||||
|
||||
session->mPrimaryConnectionID = channelID;
|
||||
|
||||
// add agent as participant
|
||||
|
|
@ -2190,6 +2224,9 @@ LLWebRTCVoiceClient::sessionStatePtr_t LLWebRTCVoiceClient::addSession(const std
|
|||
|
||||
LL_DEBUGS("Voice") << "adding new session: CHANNEL " << channel_id << LL_ENDL;
|
||||
result = sessionState::createSession(channel_id, parcel_local_id);
|
||||
result->setMuteMic(mMuteMic);
|
||||
result->setMicGain(mMicVolume);
|
||||
result->setSpeakerVolume(mSpeakerVolume);
|
||||
|
||||
if (LLVoiceClient::instance().getVoiceEffectEnabled())
|
||||
{
|
||||
|
|
@ -2442,7 +2479,10 @@ LLVoiceWebRTCConnection::LLVoiceWebRTCConnection(const LLUUID ®ionID, S32 par
|
|||
mChannelID(channelID),
|
||||
mRegionID(regionID),
|
||||
mParcelLocalID(parcelLocalID),
|
||||
mShutDown(false)
|
||||
mShutDown(false),
|
||||
mMuted(true),
|
||||
mSpeakerVolume(0.0),
|
||||
mMicGain(0.0)
|
||||
{
|
||||
mWebRTCPeerConnection = llwebrtc::newPeerConnection();
|
||||
mWebRTCPeerConnection->setSignalingObserver(this);
|
||||
|
|
@ -2821,6 +2861,9 @@ bool LLVoiceWebRTCConnection::connectionStateMachine()
|
|||
|
||||
case VOICE_STATE_SESSION_ESTABLISHED:
|
||||
{
|
||||
mWebRTCAudioInterface->setMute(mMuted);
|
||||
mWebRTCAudioInterface->setReceiveVolume(mSpeakerVolume);
|
||||
mWebRTCAudioInterface->setSendVolume(mMicGain);
|
||||
LLWebRTCVoiceClient::getInstance()->OnConnectionEstablished(mChannelID);
|
||||
setVoiceConnectionState(VOICE_STATE_SESSION_UP);
|
||||
}
|
||||
|
|
@ -2958,3 +3001,30 @@ void LLVoiceWebRTCConnection::OnVoiceDisconnectionRequestFailure(std::string url
|
|||
}
|
||||
setVoiceConnectionState(VOICE_STATE_SESSION_EXIT);
|
||||
}
|
||||
|
||||
void LLVoiceWebRTCConnection::setMuteMic(bool muted)
|
||||
{
|
||||
mMuted = true;
|
||||
if (mWebRTCAudioInterface)
|
||||
{
|
||||
mWebRTCAudioInterface->setMute(muted);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceWebRTCConnection::setMicGain(F32 gain)
|
||||
{
|
||||
mMicGain = gain;
|
||||
if (mWebRTCAudioInterface)
|
||||
{
|
||||
mWebRTCAudioInterface->setSendVolume(gain);
|
||||
}
|
||||
}
|
||||
|
||||
void LLVoiceWebRTCConnection::setSpeakerVolume(F32 volume)
|
||||
{
|
||||
mSpeakerVolume = volume;
|
||||
if (mWebRTCAudioInterface)
|
||||
{
|
||||
mWebRTCAudioInterface->setReceiveVolume(volume);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -336,6 +336,10 @@ public:
|
|||
void OnConnectionFailure(const std::string &channelID);
|
||||
|
||||
void sendData(const std::string &data);
|
||||
|
||||
void setMuteMic(bool muted);
|
||||
void setMicGain(F32 volume);
|
||||
void setSpeakerVolume(F32 volume);
|
||||
|
||||
static void for_each(sessionFunc_t func);
|
||||
|
||||
|
|
@ -350,6 +354,10 @@ public:
|
|||
std::string mName;
|
||||
std::string mErrorStatusString;
|
||||
std::queue<std::string> mTextMsgQueue;
|
||||
|
||||
bool mMuted;
|
||||
F32 mMicGain;
|
||||
F32 mSpeakerVolume;
|
||||
|
||||
LLUUID mIMSessionID;
|
||||
LLUUID mCallerID;
|
||||
|
|
@ -404,6 +412,9 @@ public:
|
|||
static void predSendData(const LLWebRTCVoiceClient::sessionStatePtr_t &session, const std::string& spatial_data, const std::string& volume_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);
|
||||
|
||||
//////////////////////////////
|
||||
/// @name TVC/Server management and communication
|
||||
//@{
|
||||
|
|
@ -746,6 +757,9 @@ class LLVoiceWebRTCConnection :
|
|||
bool connectionStateMachine();
|
||||
|
||||
void sendData(const std::string &data);
|
||||
void setMuteMic(bool muted);
|
||||
void setMicGain(F32 volume);
|
||||
void setSpeakerVolume(F32 volume);
|
||||
|
||||
void shutDown()
|
||||
{
|
||||
|
|
@ -811,6 +825,10 @@ protected:
|
|||
|
||||
bool mShutDown;
|
||||
|
||||
bool mMuted;
|
||||
F32 mMicGain;
|
||||
F32 mSpeakerVolume;
|
||||
|
||||
std::vector<llwebrtc::LLWebRTCIceCandidate> mIceCandidates;
|
||||
bool mIceCompleted;
|
||||
bool mTrickling;
|
||||
|
|
|
|||
Loading…
Reference in New Issue