summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llfloatervoiceeffect.cpp5
-rw-r--r--indra/newview/llvoiceclient.h6
-rw-r--r--indra/newview/llvoicevivox.cpp86
-rw-r--r--indra/newview/llvoicevivox.h13
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;
};