diff options
-rw-r--r-- | indra/newview/llfloatervoiceeffect.cpp | 5 | ||||
-rw-r--r-- | indra/newview/llvoiceclient.h | 6 | ||||
-rw-r--r-- | indra/newview/llvoicevivox.cpp | 86 | ||||
-rw-r--r-- | indra/newview/llvoicevivox.h | 13 |
4 files changed, 53 insertions, 57 deletions
diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp index 60831936ca..f38a56a06d 100644 --- a/indra/newview/llfloatervoiceeffect.cpp +++ b/indra/newview/llfloatervoiceeffect.cpp @@ -75,6 +75,9 @@ BOOL LLFloaterVoiceEffect::postBuild() if (effect_interface) { effect_interface->addObserver(this); + + // Disconnect from the current voice channel ready to record a voice sample for previewing + effect_interface->enablePreviewBuffer(true); } update(); @@ -88,7 +91,7 @@ void LLFloaterVoiceEffect::onClose(bool app_quitting) LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface(); if (effect_interface) { - effect_interface->clearPreviewBuffer(); + effect_interface->enablePreviewBuffer(false); } } diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 5caf26c492..2fa309d959 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -306,9 +306,9 @@ public: ////////////////////////////// /// @name Preview buffer //@{ - virtual void recordPreviewBuffer(bool enable) = 0; - virtual void playPreviewBuffer(bool enable, const LLUUID& effect_id = LLUUID::null) = 0; - virtual void clearPreviewBuffer() = 0; + virtual void enablePreviewBuffer(bool enable) = 0; + virtual void recordPreviewBuffer(bool record) = 0; + virtual void playPreviewBuffer(bool play, const LLUUID& effect_id = LLUUID::null) = 0; virtual bool isPreviewRecording() = 0; virtual bool isPreviewReady() = 0; diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 7daf865151..a64c05a3c6 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -342,7 +342,9 @@ LLVivoxVoiceClient::LLVivoxVoiceClient() : mVoiceFontsReceived(false), mVoiceFontsNew(false), + mCaptureBufferMode(false), mCaptureBufferRecording(false), + mCaptureBufferRecorded(false), mCaptureBufferPlaying(false) { mSpeakerVolume = scale_speaker_volume(0); @@ -1130,7 +1132,12 @@ void LLVivoxVoiceClient::stateMachine() //MARK: stateCaptureBufferPaused case stateCaptureBufferPaused: - if (mCaptureBufferRecording) + if (!mCaptureBufferMode) + { + mCaptureBufferRecorded = false; + setState(stateNoChannel); + } + else if (mCaptureBufferRecording) { setState(stateCaptureBufferRecStart); // Update UI, should really be separated from the VoiceFont callback @@ -1141,22 +1148,18 @@ void LLVivoxVoiceClient::stateMachine() setState(stateCaptureBufferPlayStart); notifyVoiceFontObservers(); } - else if (mCaptureBufferClear) - { - mCaptureBufferClear = false; - setState(stateNoChannel); - } break; //MARK: stateCaptureBufferRecStart case stateCaptureBufferRecStart: captureBufferRecordStartSendMessage(); + mCaptureBufferRecorded = true; setState(stateCaptureBufferRecording); break; //MARK: stateCaptureBufferRecording case stateCaptureBufferRecording: - if (!mCaptureBufferRecording || mCaptureBufferPlaying || mCaptureBufferClear) + if (!mCaptureBufferMode || !mCaptureBufferRecording || mCaptureBufferPlaying) { mCaptureBufferRecording = false; captureBufferRecordStopSendMessage(); @@ -1173,7 +1176,7 @@ void LLVivoxVoiceClient::stateMachine() //MARK: stateCaptureBufferPlaying case stateCaptureBufferPlaying: - if (!mCaptureBufferPlaying || mCaptureBufferRecording || mCaptureBufferClear) + if (!mCaptureBufferMode || !mCaptureBufferPlaying || mCaptureBufferRecording) { mCaptureBufferPlaying = false; captureBufferPlayStopSendMessage(); @@ -1382,10 +1385,9 @@ void LLVivoxVoiceClient::stateMachine() mTuningExitState = stateNoChannel; setState(stateMicTuningStart); } - else if(mCaptureBufferRecording) + else if(mCaptureBufferMode) { - mTuningExitState = stateNoChannel; - setState(stateCaptureBufferRecStart); + setState(stateCaptureBufferPaused); } else if(sessionNeedsRelog(mNextAudioSession)) { @@ -6693,42 +6695,43 @@ void LLVivoxVoiceClient::notifyVoiceFontObservers(bool new_fonts) } } -void LLVivoxVoiceClient::recordPreviewBuffer(bool enable) +void LLVivoxVoiceClient::enablePreviewBuffer(bool enable) { - if (enable) - { - mCaptureBufferRecording = true; - LL_DEBUGS("Voice") << "Starting recording" << LL_ENDL; - if(getState() >= stateNoChannel) - { - LL_DEBUGS("Voice") << "no channel" << LL_ENDL; - sessionTerminate(); - } - } - else + mCaptureBufferMode = enable; + if(mCaptureBufferMode && getState() >= stateNoChannel) { - mCaptureBufferRecording = false; + LL_DEBUGS("Voice") << "no channel" << LL_ENDL; + sessionTerminate(); } } -void LLVivoxVoiceClient::playPreviewBuffer(bool enable, const LLUUID& effect_id) +void LLVivoxVoiceClient::recordPreviewBuffer(bool record) { - if (enable && !isPreviewReady()) + if (record && !mCaptureBufferMode) { - LL_DEBUGS("Voice") << "No preview buffer to play" << LL_ENDL; + LL_DEBUGS("Voice") << "Cannot start recording, not in preview mode." << LL_ENDL; return; } - mCaptureBufferPlaying = enable; - if (mCaptureBufferPlaying) - { - mPreviewVoiceFontID = effect_id; - } + mCaptureBufferRecording = record; } -void LLVivoxVoiceClient::clearPreviewBuffer() +void LLVivoxVoiceClient::playPreviewBuffer(bool play, const LLUUID& effect_id) { - mCaptureBufferClear = true; + if (play) + { + if (mCaptureBufferMode && mCaptureBufferRecorded) + { + mPreviewVoiceFontID = effect_id; + } + else + { + LL_DEBUGS("Voice") << "No preview buffer to play." << LL_ENDL; + return; + } + } + + mCaptureBufferPlaying = play; } bool LLVivoxVoiceClient::isPreviewRecording() @@ -6738,18 +6741,8 @@ bool LLVivoxVoiceClient::isPreviewRecording() bool LLVivoxVoiceClient::isPreviewReady() { - state preview_state = getState(); - switch (preview_state) - { - case stateCaptureBufferPaused: - case stateCaptureBufferRecording: - case stateCaptureBufferPlaying: - return true; - break; - default: - return false; - break; - } + return mCaptureBufferRecorded; + } bool LLVivoxVoiceClient::isPreviewPlaying() @@ -6767,7 +6760,6 @@ void LLVivoxVoiceClient::captureBufferRecordStartSendMessage() // Start capture stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.StartBufferCapture.1\">" - << "<AccountHandle>" << mAccountHandle << "</AccountHandle>" << "</Request>" << "\n\n\n"; diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index 5ba8082d56..e4250d2ba3 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -257,9 +257,9 @@ public: ////////////////////////////// /// @name Effect preview buffer //@{ - virtual void recordPreviewBuffer(bool enable); - virtual void playPreviewBuffer(bool enable, const LLUUID& effect_id = LLUUID::null); - virtual void clearPreviewBuffer(); + virtual void enablePreviewBuffer(bool enable); + virtual void recordPreviewBuffer(bool record); + virtual void playPreviewBuffer(bool play, const LLUUID& effect_id = LLUUID::null); virtual bool isPreviewRecording(); virtual bool isPreviewReady(); @@ -919,9 +919,10 @@ private: void captureBufferPlayStartSendMessage(const LLUUID& voice_font_id = LLUUID::null); void captureBufferPlayStopSendMessage(); - bool mCaptureBufferRecording; - bool mCaptureBufferPlaying; - bool mCaptureBufferClear; + bool mCaptureBufferMode; // Disconnected from voice channels while using the capture buffer. + bool mCaptureBufferRecording; // A voice sample is being captured. + bool mCaptureBufferRecorded; // A voice sample is captured in the buffer ready to play. + bool mCaptureBufferPlaying; // A voice sample is being played. LLUUID mPreviewVoiceFontID; }; |