[Voice Update] LLFloaterVoiceEffect (Lives in File->Show Voice Morpher for now)
This commit is contained in:
@@ -260,6 +260,7 @@ set(viewer_SOURCE_FILES
|
||||
llfloatertos.cpp
|
||||
llfloaterurldisplay.cpp
|
||||
llfloaterurlentry.cpp
|
||||
llfloatervoiceeffect.cpp
|
||||
llfloaterwater.cpp
|
||||
llfloaterwebcontent.cpp
|
||||
llfloaterwindlight.cpp
|
||||
@@ -765,6 +766,7 @@ set(viewer_HEADER_FILES
|
||||
llfloatertos.h
|
||||
llfloaterurldisplay.h
|
||||
llfloaterurlentry.h
|
||||
llfloatervoiceeffect.h
|
||||
llfloaterwater.h
|
||||
llfloaterwebcontent.h
|
||||
llfloaterwindlight.h
|
||||
|
||||
@@ -7427,6 +7427,22 @@ This should be as low as possible, but too low may break functionality</string>
|
||||
<key>Value</key>
|
||||
<integer>-1</integer>
|
||||
</map>
|
||||
<key>FloaterVoiceEffectRect</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Rectangle for voice morpher floater</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Rect</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>300</integer>
|
||||
<integer>360</integer>
|
||||
<integer>0</integer>
|
||||
</array>
|
||||
</map>
|
||||
<key>FloaterWorldMapRect2</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
318
indra/newview/llfloatervoiceeffect.cpp
Normal file
318
indra/newview/llfloatervoiceeffect.cpp
Normal file
@@ -0,0 +1,318 @@
|
||||
/**
|
||||
* @file llfloatervoiceeffect.cpp
|
||||
* @author Aimee
|
||||
* @brief Selection and preview of voice effect.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llfloatervoiceeffect.h"
|
||||
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "lltexteditor.h" // For linked text hack
|
||||
#include "lltrans.h"
|
||||
#include "lluictrlfactory.h"
|
||||
#include "llweb.h"
|
||||
|
||||
LLFloaterVoiceEffect::LLFloaterVoiceEffect(const LLSD& key)
|
||||
: LLFloater(/*key*/)
|
||||
{
|
||||
mCommitCallbackRegistrar.add("VoiceEffect.Record", boost::bind(&LLFloaterVoiceEffect::onClickRecord, this));
|
||||
mCommitCallbackRegistrar.add("VoiceEffect.Play", boost::bind(&LLFloaterVoiceEffect::onClickPlay, this));
|
||||
mCommitCallbackRegistrar.add("VoiceEffect.Stop", boost::bind(&LLFloaterVoiceEffect::onClickStop, this));
|
||||
mCommitCallbackRegistrar.add("VoiceEffect.Activate", boost::bind(&LLFloaterVoiceEffect::onClickActivate, this));
|
||||
LLUICtrlFactory::getInstance()->buildFloater(this, "floater_voice_effect.xml");
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLFloaterVoiceEffect::~LLFloaterVoiceEffect()
|
||||
{
|
||||
if(LLVoiceClient::instanceExists())
|
||||
{
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface)
|
||||
{
|
||||
effect_interface->removeObserver(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLFloaterVoiceEffect::postBuild()
|
||||
{
|
||||
setDefaultBtn("record_btn");
|
||||
getChild<LLButton>("record_btn")->setFocus(true);
|
||||
|
||||
// Singu Note: Here we must hack together a linked piece of text
|
||||
if (LLTextEditor* editor = getChild<LLTextEditor>("voice_morphing_link"))
|
||||
{
|
||||
editor->setParseHTML(true); // For some reason, adding style doesn't work unless this is true.
|
||||
const std::string text = editor->getValue();
|
||||
editor->clear();
|
||||
LLStyleSP link(new LLStyle);
|
||||
link->setLinkHREF(LLTrans::getString("voice_morphing_url"));
|
||||
link->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
|
||||
editor->appendStyledText(text, false, false, link);
|
||||
}
|
||||
|
||||
mVoiceEffectList = getChild<LLScrollListCtrl>("voice_effect_list");
|
||||
if (mVoiceEffectList)
|
||||
{
|
||||
mVoiceEffectList->setCommitCallback(boost::bind(&LLFloaterVoiceEffect::onClickPlay, this));
|
||||
// mVoiceEffectList->setDoubleClickCallback(boost::bind(&LLFloaterVoiceEffect::onClickActivate, this));
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLFloaterVoiceEffect::onOpen()
|
||||
{
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
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);
|
||||
}
|
||||
|
||||
refreshEffectList();
|
||||
updateControls();
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLFloaterVoiceEffect::onClose(bool app_quitting)
|
||||
{
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface)
|
||||
{
|
||||
effect_interface->enablePreviewBuffer(false);
|
||||
}
|
||||
setVisible(false);
|
||||
}
|
||||
|
||||
void LLFloaterVoiceEffect::refreshEffectList()
|
||||
{
|
||||
if (!mVoiceEffectList)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (!effect_interface)
|
||||
{
|
||||
mVoiceEffectList->setEnabled(false);
|
||||
return;
|
||||
}
|
||||
|
||||
LL_DEBUGS("Voice")<< "Rebuilding Voice Morph list."<< LL_ENDL;
|
||||
|
||||
// Preserve selected items and scroll position
|
||||
S32 scroll_pos = mVoiceEffectList->getScrollPos();
|
||||
uuid_vec_t selected_items;
|
||||
std::vector<LLScrollListItem*> items = mVoiceEffectList->getAllSelected();
|
||||
for(std::vector<LLScrollListItem*>::const_iterator it = items.begin(); it != items.end(); it++)
|
||||
{
|
||||
selected_items.push_back((*it)->getUUID());
|
||||
}
|
||||
|
||||
mVoiceEffectList->deleteAllItems();
|
||||
|
||||
{
|
||||
// Add the "No Voice Morph" entry
|
||||
LLSD element;
|
||||
|
||||
element["id"] = LLUUID::null;
|
||||
element["columns"][NAME_COLUMN]["column"] = "name";
|
||||
element["columns"][NAME_COLUMN]["value"] = getString("no_voice_effect");
|
||||
element["columns"][NAME_COLUMN]["font"] = "SANSSERIF";
|
||||
element["columns"][NAME_COLUMN]["font-style"] = "BOLD";
|
||||
|
||||
/*LLScrollListItem* sl_item =*/ mVoiceEffectList->addElement(element, ADD_BOTTOM);
|
||||
/* Singu Note: Ours works
|
||||
// *HACK: Copied from llfloatergesture.cpp : ["font"]["style"] does not affect font style :(
|
||||
if(sl_item)
|
||||
{
|
||||
((LLScrollListText*)sl_item->getColumn(0))->setFontStyle(LLFontGL::BOLD);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// Add each Voice Morph template, if there are any (template list includes all usable effects)
|
||||
const voice_effect_list_t& template_list = effect_interface->getVoiceEffectTemplateList();
|
||||
if (!template_list.empty())
|
||||
{
|
||||
for (voice_effect_list_t::const_iterator it = template_list.begin(); it != template_list.end(); ++it)
|
||||
{
|
||||
const LLUUID& effect_id = it->second;
|
||||
|
||||
std::string localized_effect = "effect_" + it->first;
|
||||
std::string effect_name = hasString(localized_effect) ? getString(localized_effect) : it->first; // XML contains localized effects names
|
||||
|
||||
LLSD effect_properties = effect_interface->getVoiceEffectProperties(effect_id);
|
||||
|
||||
// Tag the active effect.
|
||||
if (effect_id == LLVoiceClient::instance().getVoiceEffectDefault())
|
||||
{
|
||||
effect_name += " " + getString("active_voice_effect");
|
||||
}
|
||||
|
||||
// Tag available effects that are new this session
|
||||
if (effect_properties["is_new"].asBoolean())
|
||||
{
|
||||
effect_name += " " + getString("new_voice_effect");
|
||||
}
|
||||
|
||||
LLDate expiry_date = effect_properties["expiry_date"].asDate();
|
||||
bool is_template_only = effect_properties["template_only"].asBoolean();
|
||||
|
||||
std::string font_style = "NORMAL";
|
||||
if (!is_template_only)
|
||||
{
|
||||
font_style = "BOLD";
|
||||
}
|
||||
|
||||
LLSD element;
|
||||
element["id"] = effect_id;
|
||||
|
||||
element["columns"][NAME_COLUMN]["column"] = "name";
|
||||
element["columns"][NAME_COLUMN]["value"] = effect_name;
|
||||
element["columns"][NAME_COLUMN]["font"] = "SANSSERIF";
|
||||
element["columns"][NAME_COLUMN]["font-style"] = font_style;
|
||||
|
||||
element["columns"][1]["column"] = "expires";
|
||||
if (!is_template_only)
|
||||
{
|
||||
element["columns"][DATE_COLUMN]["value"] = expiry_date;
|
||||
element["columns"][DATE_COLUMN]["type"] = "date";
|
||||
}
|
||||
else {
|
||||
element["columns"][DATE_COLUMN]["value"] = getString("unsubscribed_voice_effect");
|
||||
}
|
||||
element["columns"][DATE_COLUMN]["font"] = "SANSSERIF";
|
||||
element["columns"][DATE_COLUMN]["font-style"] = "NORMAL";
|
||||
|
||||
/*LLScrollListItem* sl_item =*/ mVoiceEffectList->addElement(element, ADD_BOTTOM);
|
||||
/* Singu Note: Ours works
|
||||
// *HACK: Copied from llfloatergesture.cpp : ["font"]["style"] does not affect font style :(
|
||||
if(sl_item)
|
||||
{
|
||||
LLFontGL::StyleFlags style = is_template_only ? LLFontGL::NORMAL : LLFontGL::BOLD;
|
||||
LLScrollListText* slt = dynamic_cast<LLScrollListText*>(sl_item->getColumn(0));
|
||||
llassert(slt);
|
||||
if (slt)
|
||||
{
|
||||
slt->setFontStyle(style);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
// Re-select items that were selected before, and restore the scroll position
|
||||
for(uuid_vec_t::iterator it = selected_items.begin(); it != selected_items.end(); it++)
|
||||
{
|
||||
mVoiceEffectList->selectByID(*it);
|
||||
}
|
||||
mVoiceEffectList->setScrollPos(scroll_pos);
|
||||
mVoiceEffectList->setEnabled(true);
|
||||
}
|
||||
|
||||
void LLFloaterVoiceEffect::updateControls()
|
||||
{
|
||||
bool recording = false;
|
||||
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface)
|
||||
{
|
||||
recording = effect_interface->isPreviewRecording();
|
||||
}
|
||||
|
||||
getChild<LLButton>("record_btn")->setVisible(!recording);
|
||||
getChild<LLButton>("record_stop_btn")->setVisible(recording);
|
||||
}
|
||||
|
||||
// virtual
|
||||
void LLFloaterVoiceEffect::onVoiceEffectChanged(bool effect_list_updated)
|
||||
{
|
||||
if (effect_list_updated)
|
||||
{
|
||||
refreshEffectList();
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
void LLFloaterVoiceEffect::onClickRecord()
|
||||
{
|
||||
LL_DEBUGS("Voice") << "Record clicked" << LL_ENDL;
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface)
|
||||
{
|
||||
effect_interface->recordPreviewBuffer();
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
void LLFloaterVoiceEffect::onClickPlay()
|
||||
{
|
||||
LL_DEBUGS("Voice") << "Play clicked" << LL_ENDL;
|
||||
if (!mVoiceEffectList)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const LLUUID& effect_id = mVoiceEffectList->getCurrentID();
|
||||
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface)
|
||||
{
|
||||
effect_interface->playPreviewBuffer(effect_id);
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
void LLFloaterVoiceEffect::onClickStop()
|
||||
{
|
||||
LL_DEBUGS("Voice") << "Stop clicked" << LL_ENDL;
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface)
|
||||
{
|
||||
effect_interface->stopPreviewBuffer();
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
void LLFloaterVoiceEffect::onClickActivate()
|
||||
{
|
||||
LL_DEBUGS("Voice") << "Activate clicked" << LL_ENDL;
|
||||
LLVoiceEffectInterface* effect_interface = LLVoiceClient::instance().getVoiceEffectInterface();
|
||||
if (effect_interface && mVoiceEffectList)
|
||||
{
|
||||
//effect_interface->setVoiceEffect(mVoiceEffectList->getCurrentID()); // Singu Note: This would return early, since we're disconnected from voice, just set the string and refresh list
|
||||
gSavedPerAccountSettings.setString("VoiceEffectDefault", mVoiceEffectList->getCurrentID().asString());
|
||||
refreshEffectList();
|
||||
}
|
||||
}
|
||||
|
||||
74
indra/newview/llfloatervoiceeffect.h
Normal file
74
indra/newview/llfloatervoiceeffect.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/**
|
||||
* @file llfloatervoiceeffect.h
|
||||
* @author Aimee
|
||||
* @brief Selection and preview of voice effects.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2010&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_LLFLOATERVOICEEFFECT_H
|
||||
#define LL_LLFLOATERVOICEEFFECT_H
|
||||
|
||||
#include "llfloater.h"
|
||||
#include "llvoiceclient.h"
|
||||
|
||||
class LLButton;
|
||||
class LLScrollListCtrl;
|
||||
|
||||
class LLFloaterVoiceEffect
|
||||
: public LLFloater
|
||||
, public LLVoiceEffectObserver
|
||||
, public LLFloaterSingleton<LLFloaterVoiceEffect>
|
||||
{
|
||||
public:
|
||||
LOG_CLASS(LLFloaterVoiceEffect);
|
||||
|
||||
LLFloaterVoiceEffect(const LLSD& key);
|
||||
virtual ~LLFloaterVoiceEffect();
|
||||
|
||||
virtual BOOL postBuild();
|
||||
virtual void onOpen();
|
||||
virtual void onClose(bool app_quitting);
|
||||
|
||||
private:
|
||||
enum ColumnIndex
|
||||
{
|
||||
NAME_COLUMN = 0,
|
||||
DATE_COLUMN = 1,
|
||||
};
|
||||
|
||||
void refreshEffectList();
|
||||
void updateControls();
|
||||
|
||||
/// Called by voice effect provider when voice effect list is changed.
|
||||
virtual void onVoiceEffectChanged(bool effect_list_updated);
|
||||
|
||||
void onClickRecord();
|
||||
void onClickPlay();
|
||||
void onClickStop();
|
||||
void onClickActivate();
|
||||
|
||||
LLUUID mSelectedID;
|
||||
LLScrollListCtrl* mVoiceEffectList;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -109,6 +109,7 @@
|
||||
#include "llfloaterteleporthistory.h"
|
||||
#include "llfloatertest.h"
|
||||
#include "llfloatertools.h"
|
||||
#include "llfloatervoiceeffect.h"
|
||||
#include "llfloaterwater.h"
|
||||
#include "llfloaterwebcontent.h"
|
||||
#include "llfloaterwindlight.h"
|
||||
@@ -6383,6 +6384,7 @@ struct MenuFloaterDict : public LLSingleton<MenuFloaterDict>
|
||||
registerFloater<LLFloaterScriptLimits> ("script info");
|
||||
registerFloater<LLFloaterStats> ("stat bar");
|
||||
registerFloater<LLFloaterTeleportHistory> ("teleport history");
|
||||
registerFloater<LLFloaterVoiceEffect> ("voice effect");
|
||||
registerFloater<LLFloaterPathfindingCharacters> ("pathfinding_characters");
|
||||
registerFloater<LLFloaterPathfindingLinksets> ("pathfinding_linksets");
|
||||
|
||||
|
||||
180
indra/newview/skins/default/xui/en-us/floater_voice_effect.xml
Normal file
180
indra/newview/skins/default/xui/en-us/floater_voice_effect.xml
Normal file
@@ -0,0 +1,180 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<floater
|
||||
legacy_header_height="27"
|
||||
can_resize="true"
|
||||
can_close="true"
|
||||
can_minimize="true"
|
||||
height="500"
|
||||
name="voice_effects"
|
||||
help_topic="voice_effects"
|
||||
title="Voice Morphing"
|
||||
background_visible="true"
|
||||
layout="topleft"
|
||||
rect_control="FloaterVoiceEffectRect"
|
||||
min_height="360"
|
||||
min_width="300"
|
||||
width="300">
|
||||
<string name="no_voice_effect">
|
||||
(No Voice Morph)
|
||||
</string>
|
||||
<string name="active_voice_effect">
|
||||
(Active)
|
||||
</string>
|
||||
<string name="unsubscribed_voice_effect">
|
||||
(Unsubscribed)
|
||||
</string>
|
||||
<string name="new_voice_effect">
|
||||
(New!)
|
||||
</string>
|
||||
|
||||
<!-- effect names begin -->
|
||||
<string name="effect_Arena">Arena</string>
|
||||
<string name="effect_Beast">Beast</string>
|
||||
<string name="effect_Buff">Buff</string>
|
||||
<string name="effect_Buzz">Buzz</string>
|
||||
<string name="effect_Camille">Camille</string>
|
||||
<string name="effect_Creepy">Creepy</string>
|
||||
<string name="effect_CreepyBot">CreepyBot</string>
|
||||
<string name="effect_Cyber">Cyber</string>
|
||||
<string name="effect_DeepBot">DeepBot</string>
|
||||
<string name="effect_Demon">Demon</string>
|
||||
<string name="effect_Female Elf">Female Elf</string>
|
||||
<string name="effect_Flirty">Flirty</string>
|
||||
<string name="effect_Foxy">Foxy</string>
|
||||
<string name="effect_Halloween 2010 Bonus">Halloween_2010_Bonus</string>
|
||||
<string name="effect_Helium">Helium</string>
|
||||
<string name="effect_Husky">Husky</string>
|
||||
<string name="effect_Husky Whisper">Husky Whisper</string>
|
||||
<string name="effect_Intercom">Intercom</string>
|
||||
<string name="effect_Julia">Julia</string>
|
||||
<string name="effect_Lo Lilt">Lo Lilt</string>
|
||||
<string name="effect_Macho">Macho</string>
|
||||
<string name="effect_Micro">Micro</string>
|
||||
<string name="effect_Mini">Mini</string>
|
||||
<string name="effect_Model">Model</string>
|
||||
<string name="effect_Nano">Nano</string>
|
||||
<string name="effect_Nightmare">Nightmare</string>
|
||||
<string name="effect_PopBot">PopBot</string>
|
||||
<string name="effect_Rachel">Rachel</string>
|
||||
<string name="effect_Radio">Radio</string>
|
||||
<string name="effect_Robot">Robot</string>
|
||||
<string name="effect_Roxanne">Roxanne</string>
|
||||
<string name="effect_Rumble">Rumble</string>
|
||||
<string name="effect_Sabrina">Sabrina</string>
|
||||
<string name="effect_Samantha">Samantha</string>
|
||||
<string name="effect_Sexy">Sexy</string>
|
||||
<string name="effect_Shorty">Shorty</string>
|
||||
<string name="effect_Smaller">Smaller</string>
|
||||
<string name="effect_Sneaky">Sneaky</string>
|
||||
<string name="effect_Stallion">Stallion</string>
|
||||
<string name="effect_Sultry">Sultry</string>
|
||||
<string name="effect_Thunder">Thunder</string>
|
||||
<string name="effect_Vixen">Vixen</string>
|
||||
<string name="effect_WhinyBot">WhinyBot</string>
|
||||
<!-- effect names end -->
|
||||
|
||||
<text
|
||||
height="16"
|
||||
word_wrap="true"
|
||||
use_ellipses="true"
|
||||
type="string"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
font="SansSerifBold"
|
||||
color="White"
|
||||
left="10"
|
||||
name="preview_text"
|
||||
right="-10"
|
||||
bottom="-35">To Preview
|
||||
</text>
|
||||
<text
|
||||
height="23"
|
||||
word_wrap="true"
|
||||
use_ellipses="true"
|
||||
type="string"
|
||||
follows="left|top|right"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="status_text"
|
||||
right="-5"
|
||||
top_pad="0">
|
||||
Record a sample, then click on a voice to hear how it will sound.
|
||||
</text>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Record"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
name="record_btn"
|
||||
tool_tip="Record a sample of your voice."
|
||||
top_pad="5"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="VoiceEffect.Record" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Stop"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
name="record_stop_btn"
|
||||
bottom_delta="0"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="VoiceEffect.Stop" />
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
height="23"
|
||||
label="Activate"
|
||||
layout="topleft"
|
||||
left_delta="100"
|
||||
name="activate_btn"
|
||||
bottom_delta="0"
|
||||
width="100">
|
||||
<button.commit_callback
|
||||
function="VoiceEffect.Activate" />
|
||||
</button>
|
||||
<text_editor
|
||||
enabled="false"
|
||||
bg_readonly_color="0 0 0 0"
|
||||
hide_border="true"
|
||||
hide_scrollbar="true"
|
||||
font="SansSerifSmall"
|
||||
height="23"
|
||||
halign="right"
|
||||
left_delta="104"
|
||||
use_ellipses="true"
|
||||
type="string"
|
||||
follows="top|right"
|
||||
layout="topleft"
|
||||
bottom_delta="0"
|
||||
name="voice_morphing_link"
|
||||
right="-10">
|
||||
Subscribe Now
|
||||
</text_editor>
|
||||
<scroll_list
|
||||
bottom="10"
|
||||
draw_heading="true"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
multi_select="false"
|
||||
name="voice_effect_list"
|
||||
right="-10"
|
||||
tool_tip="Record a sample of your voice, then click an effect to preview."
|
||||
top="-95">
|
||||
<column
|
||||
label="Voice Name"
|
||||
name="name"
|
||||
width="160" />
|
||||
<column
|
||||
dynamic_width="true"
|
||||
label="Expires"
|
||||
name="expires"
|
||||
width="140" />
|
||||
</scroll_list>
|
||||
|
||||
</floater>
|
||||
@@ -45,6 +45,10 @@
|
||||
mouse_opaque="true" name="perm prefs" >
|
||||
<on_click function="ShowFloater" userdata="perm prefs" />
|
||||
</menu_item_call>
|
||||
<menu_item_check mouse_opaque="true" label="Show Voice Morpher" name="voice effect">
|
||||
<on_click function="ShowFloater" userdata="voice effect"/>
|
||||
<on_check function="FloaterVisible" userdata="voice effect"/>
|
||||
</menu_item_check>
|
||||
<menu_item_separator bottom="-94" enabled="true" height="8" label="-----------" left="0"
|
||||
mouse_opaque="true" name="separator" width="243" />
|
||||
<menu_item_call label="Minimize All Windows" mouse_opaque="true" name="Minimize All Windows">
|
||||
|
||||
138
indra/newview/skins/default/xui/es/floater_voice_effect.xml
Normal file
138
indra/newview/skins/default/xui/es/floater_voice_effect.xml
Normal file
@@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater label="Lugares" name="voice_effects" title="TRANSFORMACIÓN DE VOZ">
|
||||
<string name="no_voice_effect">
|
||||
(Sin transformación de voz)
|
||||
</string>
|
||||
<string name="active_voice_effect">
|
||||
(Activo)
|
||||
</string>
|
||||
<string name="unsubscribed_voice_effect">
|
||||
(Suscripción cancelada)
|
||||
</string>
|
||||
<string name="new_voice_effect">
|
||||
(¡Nuevo!)
|
||||
</string>
|
||||
<string name="effect_Arena">
|
||||
Campo
|
||||
</string>
|
||||
<string name="effect_Beast">
|
||||
Bestia
|
||||
</string>
|
||||
<string name="effect_Buff">
|
||||
Musculoso
|
||||
</string>
|
||||
<string name="effect_Buzz">
|
||||
Murmullo
|
||||
</string>
|
||||
<string name="effect_Camille">
|
||||
Camila
|
||||
</string>
|
||||
<string name="effect_Creepy">
|
||||
Aterrador
|
||||
</string>
|
||||
<string name="effect_CreepyBot">
|
||||
Robot aterrador
|
||||
</string>
|
||||
<string name="effect_Cyber">
|
||||
Cyber
|
||||
</string>
|
||||
<string name="effect_DeepBot">
|
||||
Robot profundo
|
||||
</string>
|
||||
<string name="effect_Demon">
|
||||
Diablo
|
||||
</string>
|
||||
<string name="effect_Flirty">
|
||||
Coqueta
|
||||
</string>
|
||||
<string name="effect_Foxy">
|
||||
Astuto
|
||||
</string>
|
||||
<string name="effect_Halloween_2010_Bonus">
|
||||
Halloween_2010_Bonus
|
||||
</string>
|
||||
<string name="effect_Helium">
|
||||
Helio
|
||||
</string>
|
||||
<string name="effect_Husky">
|
||||
Corpulento
|
||||
</string>
|
||||
<string name="effect_Intercom">
|
||||
Intercom
|
||||
</string>
|
||||
<string name="effect_Macho">
|
||||
Macho
|
||||
</string>
|
||||
<string name="effect_Micro">
|
||||
Micro
|
||||
</string>
|
||||
<string name="effect_Mini">
|
||||
Mini
|
||||
</string>
|
||||
<string name="effect_Nano">
|
||||
Nano
|
||||
</string>
|
||||
<string name="effect_Nightmare">
|
||||
Pesadilla
|
||||
</string>
|
||||
<string name="effect_PopBot">
|
||||
Robot pop
|
||||
</string>
|
||||
<string name="effect_Rachel">
|
||||
Raquel
|
||||
</string>
|
||||
<string name="effect_Radio">
|
||||
Radio
|
||||
</string>
|
||||
<string name="effect_Robot">
|
||||
Robot
|
||||
</string>
|
||||
<string name="effect_Roxanne">
|
||||
Roxana
|
||||
</string>
|
||||
<string name="effect_Sabrina">
|
||||
Sabrina
|
||||
</string>
|
||||
<string name="effect_Samantha">
|
||||
Samanta
|
||||
</string>
|
||||
<string name="effect_Sexy">
|
||||
Sexy
|
||||
</string>
|
||||
<string name="effect_Shorty">
|
||||
Bajito
|
||||
</string>
|
||||
<string name="effect_Sneaky">
|
||||
Furtivo
|
||||
</string>
|
||||
<string name="effect_Stallion">
|
||||
Mujeriego
|
||||
</string>
|
||||
<string name="effect_Sultry">
|
||||
Sensual
|
||||
</string>
|
||||
<string name="effect_Thunder">
|
||||
Trueno
|
||||
</string>
|
||||
<string name="effect_Vixen">
|
||||
Tigresa
|
||||
</string>
|
||||
<string name="effect_WhinyBot">
|
||||
Robot llorica
|
||||
</string>
|
||||
<text name="preview_text">
|
||||
Para probarla
|
||||
</text>
|
||||
<text name="status_text">
|
||||
Graba una muestra y pulsa en una voz para escuchar cómo suena.
|
||||
</text>
|
||||
<button label="Grabar" name="record_btn" tool_tip="Graba una muestra de tu voz."/>
|
||||
<button label="Parar" name="record_stop_btn"/>
|
||||
<text name="voice_morphing_link">
|
||||
Suscríbete ahora
|
||||
</text>
|
||||
<scroll_list name="voice_effect_list" tool_tip="Graba una muestra de tu voz y pulsa en un efecto para ver cómo suena.">
|
||||
<scroll_list.columns label="Nombre de la voz" name="name"/>
|
||||
<scroll_list.columns label="Caduca" name="expires"/>
|
||||
</scroll_list>
|
||||
</floater>
|
||||
159
indra/newview/skins/default/xui/fr/floater_voice_effect.xml
Normal file
159
indra/newview/skins/default/xui/fr/floater_voice_effect.xml
Normal file
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater label="Endroits" name="voice_effects" title="EFFET DE VOIX">
|
||||
<string name="no_voice_effect">
|
||||
(Aucun effet de voix)
|
||||
</string>
|
||||
<string name="active_voice_effect">
|
||||
(Actif)
|
||||
</string>
|
||||
<string name="unsubscribed_voice_effect">
|
||||
(Pas d'abonnement)
|
||||
</string>
|
||||
<string name="new_voice_effect">
|
||||
(Nouveau !)
|
||||
</string>
|
||||
<string name="effect_Arena">
|
||||
Stade
|
||||
</string>
|
||||
<string name="effect_Beast">
|
||||
Brute
|
||||
</string>
|
||||
<string name="effect_Buff">
|
||||
Nasal
|
||||
</string>
|
||||
<string name="effect_Buzz">
|
||||
Friture
|
||||
</string>
|
||||
<string name="effect_Camille">
|
||||
Camille
|
||||
</string>
|
||||
<string name="effect_Creepy">
|
||||
Effrayant
|
||||
</string>
|
||||
<string name="effect_CreepyBot">
|
||||
BotEffrayant
|
||||
</string>
|
||||
<string name="effect_Cyber">
|
||||
Cyber
|
||||
</string>
|
||||
<string name="effect_DeepBot">
|
||||
BotGrave
|
||||
</string>
|
||||
<string name="effect_Demon">
|
||||
Démon
|
||||
</string>
|
||||
<string name="effect_Female Elf">
|
||||
Femme elfe
|
||||
</string>
|
||||
<string name="effect_Flirty">
|
||||
Flirt
|
||||
</string>
|
||||
<string name="effect_Foxy">
|
||||
Séduction
|
||||
</string>
|
||||
<string name="effect_Halloween 2010 Bonus">
|
||||
Halloween_2010_Bonus
|
||||
</string>
|
||||
<string name="effect_Helium">
|
||||
Hélium
|
||||
</string>
|
||||
<string name="effect_Husky">
|
||||
Rauque
|
||||
</string>
|
||||
<string name="effect_Husky Whisper">
|
||||
Murmure rauque
|
||||
</string>
|
||||
<string name="effect_Intercom">
|
||||
Interphone
|
||||
</string>
|
||||
<string name="effect_Julia">
|
||||
Julia
|
||||
</string>
|
||||
<string name="effect_Lo Lilt">
|
||||
Mélodieux
|
||||
</string>
|
||||
<string name="effect_Macho">
|
||||
Macho
|
||||
</string>
|
||||
<string name="effect_Micro">
|
||||
Micro
|
||||
</string>
|
||||
<string name="effect_Mini">
|
||||
Mini
|
||||
</string>
|
||||
<string name="effect_Model">
|
||||
Modèle
|
||||
</string>
|
||||
<string name="effect_Nano">
|
||||
Nano
|
||||
</string>
|
||||
<string name="effect_Nightmare">
|
||||
Cauchemar
|
||||
</string>
|
||||
<string name="effect_PopBot">
|
||||
BotPop
|
||||
</string>
|
||||
<string name="effect_Rachel">
|
||||
Rachel
|
||||
</string>
|
||||
<string name="effect_Radio">
|
||||
Radio
|
||||
</string>
|
||||
<string name="effect_Robot">
|
||||
Robot
|
||||
</string>
|
||||
<string name="effect_Roxanne">
|
||||
Roxanne
|
||||
</string>
|
||||
<string name="effect_Rumble">
|
||||
Grondement
|
||||
</string>
|
||||
<string name="effect_Sabrina">
|
||||
Sabrina
|
||||
</string>
|
||||
<string name="effect_Samantha">
|
||||
Samantha
|
||||
</string>
|
||||
<string name="effect_Sexy">
|
||||
Sexy
|
||||
</string>
|
||||
<string name="effect_Shorty">
|
||||
Petite voix
|
||||
</string>
|
||||
<string name="effect_Smaller">
|
||||
Plus faible
|
||||
</string>
|
||||
<string name="effect_Sneaky">
|
||||
Sournois
|
||||
</string>
|
||||
<string name="effect_Stallion">
|
||||
Étalon
|
||||
</string>
|
||||
<string name="effect_Sultry">
|
||||
Sensuel
|
||||
</string>
|
||||
<string name="effect_Thunder">
|
||||
Tonnerre
|
||||
</string>
|
||||
<string name="effect_Vixen">
|
||||
Mégère
|
||||
</string>
|
||||
<string name="effect_WhinyBot">
|
||||
BotPleurnichard
|
||||
</string>
|
||||
<text name="preview_text">
|
||||
Aperçu
|
||||
</text>
|
||||
<text name="status_text">
|
||||
Enregistrez un extrait et cliquez sur un effet pour obtenir un aperçu.
|
||||
</text>
|
||||
<button label="Enregistrer" name="record_btn" tool_tip="Enregistrez un extrait de votre voix."/>
|
||||
<button label="Arrêter" name="record_stop_btn"/>
|
||||
<text name="voice_morphing_link">
|
||||
S'abonner
|
||||
</text>
|
||||
<scroll_list name="voice_effect_list" tool_tip="Enregistrez un extrait de votre voix, puis cliquez sur un effet pour obtenir un aperçu.">
|
||||
<scroll_list.columns label="Nom de l'effet" name="name"/>
|
||||
<scroll_list.columns label="Date d'expiration" name="expires"/>
|
||||
</scroll_list>
|
||||
</floater>
|
||||
159
indra/newview/skins/default/xui/pt/floater_voice_effect.xml
Normal file
159
indra/newview/skins/default/xui/pt/floater_voice_effect.xml
Normal file
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater label="Lugares" name="voice_effects" title="EFEITOS DE VOZ">
|
||||
<string name="no_voice_effect">
|
||||
(Não distorcer voz)
|
||||
</string>
|
||||
<string name="active_voice_effect">
|
||||
(Ativo)
|
||||
</string>
|
||||
<string name="unsubscribed_voice_effect">
|
||||
(Cancelou)
|
||||
</string>
|
||||
<string name="new_voice_effect">
|
||||
(Novo!)
|
||||
</string>
|
||||
<string name="effect_Arena">
|
||||
Arena
|
||||
</string>
|
||||
<string name="effect_Beast">
|
||||
Fera
|
||||
</string>
|
||||
<string name="effect_Buff">
|
||||
Entusiasmado
|
||||
</string>
|
||||
<string name="effect_Buzz">
|
||||
Zumbido
|
||||
</string>
|
||||
<string name="effect_Camille">
|
||||
Camille
|
||||
</string>
|
||||
<string name="effect_Creepy">
|
||||
Assustador
|
||||
</string>
|
||||
<string name="effect_CreepyBot">
|
||||
RobôAssustador
|
||||
</string>
|
||||
<string name="effect_Cyber">
|
||||
Cyber
|
||||
</string>
|
||||
<string name="effect_DeepBot">
|
||||
RobôVozGrossa
|
||||
</string>
|
||||
<string name="effect_Demon">
|
||||
Demônio
|
||||
</string>
|
||||
<string name="effect_Female Elf">
|
||||
Elfa
|
||||
</string>
|
||||
<string name="effect_Flirty">
|
||||
Paquerador
|
||||
</string>
|
||||
<string name="effect_Foxy">
|
||||
Sensual
|
||||
</string>
|
||||
<string name="effect_Halloween 2010 Bonus">
|
||||
Bônus_Halloween_2010
|
||||
</string>
|
||||
<string name="effect_Helium">
|
||||
Hélio
|
||||
</string>
|
||||
<string name="effect_Husky">
|
||||
Rouco
|
||||
</string>
|
||||
<string name="effect_Husky Whisper">
|
||||
Sussurro rouco
|
||||
</string>
|
||||
<string name="effect_Intercom">
|
||||
Interfone
|
||||
</string>
|
||||
<string name="effect_Julia">
|
||||
Julia
|
||||
</string>
|
||||
<string name="effect_Lo Lilt">
|
||||
Cantarolado baixo
|
||||
</string>
|
||||
<string name="effect_Macho">
|
||||
Macho
|
||||
</string>
|
||||
<string name="effect_Micro">
|
||||
Micro
|
||||
</string>
|
||||
<string name="effect_Mini">
|
||||
Mini
|
||||
</string>
|
||||
<string name="effect_Model">
|
||||
Modelo
|
||||
</string>
|
||||
<string name="effect_Nano">
|
||||
Nano
|
||||
</string>
|
||||
<string name="effect_Nightmare">
|
||||
Pesadelo
|
||||
</string>
|
||||
<string name="effect_PopBot">
|
||||
RobôPop
|
||||
</string>
|
||||
<string name="effect_Rachel">
|
||||
Rachel
|
||||
</string>
|
||||
<string name="effect_Radio">
|
||||
Rádio
|
||||
</string>
|
||||
<string name="effect_Robot">
|
||||
Robô
|
||||
</string>
|
||||
<string name="effect_Roxanne">
|
||||
Roxanne
|
||||
</string>
|
||||
<string name="effect_Rumble">
|
||||
Ronco
|
||||
</string>
|
||||
<string name="effect_Sabrina">
|
||||
Sabrina
|
||||
</string>
|
||||
<string name="effect_Samantha">
|
||||
Samantha
|
||||
</string>
|
||||
<string name="effect_Sexy">
|
||||
Sexy
|
||||
</string>
|
||||
<string name="effect_Shorty">
|
||||
Baixinho
|
||||
</string>
|
||||
<string name="effect_Smaller">
|
||||
Menor
|
||||
</string>
|
||||
<string name="effect_Sneaky">
|
||||
Sorrateiro
|
||||
</string>
|
||||
<string name="effect_Stallion">
|
||||
Garanhão
|
||||
</string>
|
||||
<string name="effect_Sultry">
|
||||
Ardente
|
||||
</string>
|
||||
<string name="effect_Thunder">
|
||||
Trovão
|
||||
</string>
|
||||
<string name="effect_Vixen">
|
||||
Maliciosa
|
||||
</string>
|
||||
<string name="effect_WhinyBot">
|
||||
RobôReclamão
|
||||
</string>
|
||||
<text name="preview_text">
|
||||
Visualizar
|
||||
</text>
|
||||
<text name="status_text">
|
||||
Grave uma amostra da sua voz, depois clique em um efeito para ouvir o resultado.
|
||||
</text>
|
||||
<button label="Gravar" name="record_btn" tool_tip="Grave uma amostra da sua voz."/>
|
||||
<button label="Parar" name="record_stop_btn"/>
|
||||
<text name="voice_morphing_link">
|
||||
Assine agora
|
||||
</text>
|
||||
<scroll_list name="voice_effect_list" tool_tip="Grave sua voz por alguns instantes, depois clique num efeito para ouvir a distorção.">
|
||||
<scroll_list.columns label="Nome da voz" name="name"/>
|
||||
<scroll_list.columns label="Vence em" name="expires"/>
|
||||
</scroll_list>
|
||||
</floater>
|
||||
Reference in New Issue
Block a user