[Voice Update] LLFloaterVoiceEffect (Lives in File->Show Voice Morpher for now)

This commit is contained in:
Lirusaito
2013-06-13 05:23:35 -04:00
parent 08ab202a06
commit 01ec6905ab
10 changed files with 1052 additions and 0 deletions

View File

@@ -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

View File

@@ -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>

View 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();
}
}

View 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

View File

@@ -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");

View 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>

View File

@@ -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">

View 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>

View 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&apos;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&apos;effet" name="name"/>
<scroll_list.columns label="Date d&apos;expiration" name="expires"/>
</scroll_list>
</floater>

View 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>