Move the android sources to android/... to avoid polluting the APK when it is being built through eclipse
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry kind="output" path="bin/classes"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>eSpeakActivity</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.googlecode.eyesfree.espeak"
|
||||
android:versionCode="7"
|
||||
android:versionName="1.46.02_r7" >
|
||||
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
android:required="false" />
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="8"
|
||||
android:targetSdkVersion="14" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/icon"
|
||||
android:label="@string/app_name" >
|
||||
<service
|
||||
android:name=".TtsService"
|
||||
android:label="@string/app_name" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.TTS_SERVICE" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.speech.tts"
|
||||
android:resource="@xml/tts_engine" />
|
||||
</service>
|
||||
|
||||
<activity
|
||||
android:name=".DownloadVoiceData"
|
||||
android:theme="@android:style/Theme.Dialog" >
|
||||
<intent-filter>
|
||||
<action android:name="android.speech.tts.engine.INSTALL_TTS_DATA" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".CheckVoiceData"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
|
||||
<intent-filter>
|
||||
<action android:name="android.speech.tts.engine.CHECK_TTS_DATA" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".GetSampleText"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
|
||||
<intent-filter>
|
||||
<action android:name="android.speech.tts.engine.GET_SAMPLE_TEXT" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".TtsSettingsActivity"
|
||||
android:label="@string/tts_settings_label" >
|
||||
<intent-filter>
|
||||
<action android:name="android.speech.tts.engine.CONFIGURE_ENGINE" />
|
||||
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".eSpeakActivity"
|
||||
android:label="@string/app_name" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<!-- Legacy code for pre-ICS compatibility. -->
|
||||
<activity
|
||||
android:name=".eSpeak"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.START_TTS_ENGINE" />
|
||||
|
||||
<category android:name="android.intent.category.tts_engine.ESPEAK" />
|
||||
<category android:name="android.intent.category.tts_lang.afr" />
|
||||
<category android:name="android.intent.category.tts_lang.bos" />
|
||||
<category android:name="android.intent.category.tts_lang.zho" />
|
||||
<category android:name="android.intent.category.tts_lang.cmn" />
|
||||
<category android:name="android.intent.category.tts_lang.yue" />
|
||||
<category android:name="android.intent.category.tts_lang.hrv" />
|
||||
<category android:name="android.intent.category.tts_lang.ces" />
|
||||
<category android:name="android.intent.category.tts_lang.nld" />
|
||||
<category android:name="android.intent.category.tts_lang.eng" />
|
||||
<category android:name="android.intent.category.tts_lang.eng.USA" />
|
||||
<category android:name="android.intent.category.tts_lang.eng.GBR" />
|
||||
<category android:name="android.intent.category.tts_lang.epo" />
|
||||
<category android:name="android.intent.category.tts_lang.fin" />
|
||||
<category android:name="android.intent.category.tts_lang.fra" />
|
||||
<category android:name="android.intent.category.tts_lang.deu" />
|
||||
<category android:name="android.intent.category.tts_lang.ell" />
|
||||
<category android:name="android.intent.category.tts_lang.hin" />
|
||||
<category android:name="android.intent.category.tts_lang.hun" />
|
||||
<category android:name="android.intent.category.tts_lang.isl" />
|
||||
<category android:name="android.intent.category.tts_lang.ind" />
|
||||
<category android:name="android.intent.category.tts_lang.ita" />
|
||||
<category android:name="android.intent.category.tts_lang.kur" />
|
||||
<category android:name="android.intent.category.tts_lang.lat" />
|
||||
<category android:name="android.intent.category.tts_lang.mkd" />
|
||||
<category android:name="android.intent.category.tts_lang.nor" />
|
||||
<category android:name="android.intent.category.tts_lang.pol" />
|
||||
<category android:name="android.intent.category.tts_lang.por" />
|
||||
<category android:name="android.intent.category.tts_lang.ron" />
|
||||
<category android:name="android.intent.category.tts_lang.rus" />
|
||||
<category android:name="android.intent.category.tts_lang.srp" />
|
||||
<category android:name="android.intent.category.tts_lang.slk" />
|
||||
<category android:name="android.intent.category.tts_lang.spa" />
|
||||
<category android:name="android.intent.category.tts_lang.spa.MEX" />
|
||||
<category android:name="android.intent.category.tts_lang.swa" />
|
||||
<category android:name="android.intent.category.tts_lang.swe" />
|
||||
<category android:name="android.intent.category.tts_lang.tam" />
|
||||
<category android:name="android.intent.category.tts_lang.tur" />
|
||||
<category android:name="android.intent.category.tts_lang.vie" />
|
||||
<category android:name="android.intent.category.tts_lang.cym" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<provider
|
||||
android:name="com.googlecode.eyesfree.espeak.providers.SettingsProvider"
|
||||
android:authorities="com.googlecode.eyesfree.espeak.providers.SettingsProvider" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,49 @@
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
# eSpeak (minus command line apps and espeakedit)
|
||||
|
||||
BLACKLIST_SRC_FILES := \
|
||||
%/compiledata.cpp \
|
||||
%/espeak.cpp \
|
||||
%/espeakedit.cpp \
|
||||
%/extras.cpp \
|
||||
%/formantdlg.cpp \
|
||||
%/menus.cpp \
|
||||
%/options.cpp \
|
||||
%/prosodydisplay.cpp \
|
||||
%/speak.cpp \
|
||||
%/spect.cpp \
|
||||
%/spectdisplay.cpp \
|
||||
%/spectseq.cpp \
|
||||
%/transldlg.cpp \
|
||||
%/voicedlg.cpp \
|
||||
%/vowelchart.cpp
|
||||
|
||||
ESPEAK_SRC_PATH := ../../src
|
||||
|
||||
ESPEAK_SRC_FILES := \
|
||||
$(subst $(LOCAL_PATH)/$(ESPEAK_SRC_PATH),$(ESPEAK_SRC_PATH),$(wildcard $(LOCAL_PATH)/$(ESPEAK_SRC_PATH)/*.c*))
|
||||
|
||||
LOCAL_SRC_FILES += \
|
||||
$(filter-out $(BLACKLIST_SRC_FILES),$(ESPEAK_SRC_FILES))
|
||||
|
||||
# JNI
|
||||
|
||||
LOCAL_SRC_FILES += \
|
||||
$(subst $(LOCAL_PATH)/jni,jni,$(wildcard $(LOCAL_PATH)/jni/*.c*))
|
||||
|
||||
LOCAL_C_INCLUDES += \
|
||||
$(LOCAL_PATH)/include \
|
||||
$(LOCAL_PATH)/$(ESPEAK_SRC_PATH)
|
||||
|
||||
LOCAL_LDLIBS := \
|
||||
-llog
|
||||
|
||||
# Common
|
||||
|
||||
LOCAL_MODULE := libttsespeak
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_PRELINK_MODULE := false
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
@@ -0,0 +1,9 @@
|
||||
APP_OPTIM := release
|
||||
APP_PLATFORM := android-8
|
||||
|
||||
# For use with ndk-rXm (MIPS NDK)
|
||||
#APP_ABI := mips
|
||||
|
||||
# For use with ndk-rX-crystax (Crystax NDK)
|
||||
APP_TOOLCHAIN_VERSION := 4.6.3
|
||||
APP_ABI := armeabi armeabi-v7a x86
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2009 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef LOG_H_
|
||||
#define LOG_H_
|
||||
|
||||
#include <android/log.h>
|
||||
|
||||
#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__)
|
||||
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
|
||||
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
|
||||
|
||||
#endif /* LOG_H_ */
|
||||
@@ -0,0 +1,245 @@
|
||||
/*
|
||||
* Copyright (C) 2009 Google Inc.
|
||||
* Copyright (C) 2012 Reece H. Dunn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains the TtsEngine interface used by Android to implement
|
||||
* Text-to-Speech services.
|
||||
*
|
||||
* Android Version: 2.2 (Froyo)
|
||||
* API Version: 8
|
||||
*/
|
||||
|
||||
#ifndef TTS_ENGINE_H_
|
||||
#define TTS_ENGINE_H_
|
||||
|
||||
namespace android {
|
||||
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_CONFIG "engineConfig"
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_PITCH "pitch"
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_RATE "rate"
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_VOLUME "volume"
|
||||
|
||||
|
||||
enum tts_synth_status {
|
||||
TTS_SYNTH_DONE = 0,
|
||||
TTS_SYNTH_PENDING = 1
|
||||
};
|
||||
|
||||
enum tts_callback_status {
|
||||
TTS_CALLBACK_HALT = 0,
|
||||
TTS_CALLBACK_CONTINUE = 1
|
||||
};
|
||||
|
||||
// NOTE: This is duplicated in compat/jni/tts.h. Please
|
||||
// make changes there as well.
|
||||
enum tts_audio_format {
|
||||
TTS_AUDIO_FORMAT_INVALID = -1,
|
||||
TTS_AUDIO_FORMAT_DEFAULT = 0,
|
||||
TTS_AUDIO_FORMAT_PCM_16_BIT = 1,
|
||||
TTS_AUDIO_FORMAT_PCM_8_BIT = 2,
|
||||
};
|
||||
|
||||
// The callback is used by the implementation of this interface to notify its
|
||||
// client, the Android TTS service, that the last requested synthesis has been
|
||||
// completed. // TODO reword
|
||||
// The callback for synthesis completed takes:
|
||||
// @param [inout] void *& - The userdata pointer set in the original
|
||||
// synth call
|
||||
// @param [in] uint32_t - Track sampling rate in Hz
|
||||
// @param [in] tts_audio_format - The audio format
|
||||
// @param [in] int - The number of channels
|
||||
// @param [inout] int8_t *& - A buffer of audio data only valid during the
|
||||
// execution of the callback
|
||||
// @param [inout] size_t & - The size of the buffer
|
||||
// @param [in] tts_synth_status - indicate whether the synthesis is done, or
|
||||
// if more data is to be synthesized.
|
||||
// @return TTS_CALLBACK_HALT to indicate the synthesis must stop,
|
||||
// TTS_CALLBACK_CONTINUE to indicate the synthesis must continue if
|
||||
// there is more data to produce.
|
||||
typedef tts_callback_status (synthDoneCB_t)(void *&, uint32_t,
|
||||
tts_audio_format, int, int8_t *&, size_t&, tts_synth_status);
|
||||
|
||||
class TtsEngine;
|
||||
extern "C" TtsEngine* getTtsEngine();
|
||||
|
||||
enum tts_result {
|
||||
TTS_SUCCESS = 0,
|
||||
TTS_FAILURE = -1,
|
||||
TTS_FEATURE_UNSUPPORTED = -2,
|
||||
TTS_VALUE_INVALID = -3,
|
||||
TTS_PROPERTY_UNSUPPORTED = -4,
|
||||
TTS_PROPERTY_SIZE_TOO_SMALL = -5,
|
||||
TTS_MISSING_RESOURCES = -6
|
||||
};
|
||||
|
||||
enum tts_support_result {
|
||||
TTS_LANG_COUNTRY_VAR_AVAILABLE = 2,
|
||||
TTS_LANG_COUNTRY_AVAILABLE = 1,
|
||||
TTS_LANG_AVAILABLE = 0,
|
||||
TTS_LANG_MISSING_DATA = -1,
|
||||
TTS_LANG_NOT_SUPPORTED = -2
|
||||
};
|
||||
|
||||
|
||||
class TtsEngine
|
||||
{
|
||||
public:
|
||||
virtual ~TtsEngine() {}
|
||||
|
||||
// Initialize the TTS engine and returns whether initialization succeeded.
|
||||
// @param synthDoneCBPtr synthesis callback function pointer
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result init(synthDoneCB_t synthDoneCBPtr, const char *engineConfig);
|
||||
|
||||
// Shut down the TTS engine and releases all associated resources.
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result shutdown();
|
||||
|
||||
// Interrupt synthesis and flushes any synthesized data that hasn't been
|
||||
// output yet. This will block until callbacks underway are completed.
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result stop();
|
||||
|
||||
// Returns the level of support for the language, country and variant.
|
||||
// @return TTS_LANG_COUNTRY_VAR_AVAILABLE if the language, country and variant are supported,
|
||||
// and the corresponding resources are correctly installed
|
||||
// TTS_LANG_COUNTRY_AVAILABLE if the language and country are supported and the
|
||||
// corresponding resources are correctly installed, but there is no match for
|
||||
// the specified variant
|
||||
// TTS_LANG_AVAILABLE if the language is supported and the
|
||||
// corresponding resources are correctly installed, but there is no match for
|
||||
// the specified country and variant
|
||||
// TTS_LANG_MISSING_DATA if the required resources to provide any level of support
|
||||
// for the language are not correctly installed
|
||||
// TTS_LANG_NOT_SUPPORTED if the language is not supported by the TTS engine.
|
||||
virtual tts_support_result isLanguageAvailable(const char *lang, const char *country,
|
||||
const char *variant);
|
||||
|
||||
// Load the resources associated with the specified language. The loaded
|
||||
// language will only be used once a call to setLanguage() with the same
|
||||
// language value is issued. Language and country values are coded according to the ISO three
|
||||
// letter codes for languages and countries, as can be retrieved from a java.util.Locale
|
||||
// instance. The variant value is encoded as the variant string retrieved from a
|
||||
// java.util.Locale instance built with that variant data.
|
||||
// @param lang pointer to the ISO three letter code for the language
|
||||
// @param country pointer to the ISO three letter code for the country
|
||||
// @param variant pointer to the variant code
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result loadLanguage(const char *lang, const char *country, const char *variant);
|
||||
|
||||
// Load the resources associated with the specified language, country and Locale variant.
|
||||
// The loaded language will only be used once a call to setLanguageFromLocale() with the same
|
||||
// language value is issued. Language and country values are coded according to the ISO three
|
||||
// letter codes for languages and countries, as can be retrieved from a java.util.Locale
|
||||
// instance. The variant value is encoded as the variant string retrieved from a
|
||||
// java.util.Locale instance built with that variant data.
|
||||
// @param lang pointer to the ISO three letter code for the language
|
||||
// @param country pointer to the ISO three letter code for the country
|
||||
// @param variant pointer to the variant code
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result setLanguage(const char *lang, const char *country, const char *variant);
|
||||
|
||||
// Retrieve the currently set language, country and variant, or empty strings if none of
|
||||
// parameters have been set. Language and country are represented by their 3-letter ISO code
|
||||
// @param[out] pointer to the retrieved 3-letter code language value
|
||||
// @param[out] pointer to the retrieved 3-letter code country value
|
||||
// @param[out] pointer to the retrieved variant value
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result getLanguage(char *language, char *country, char *variant);
|
||||
|
||||
// Notifies the engine what audio parameters should be used for the synthesis.
|
||||
// This is meant to be used as a hint, the engine implementation will set the output values
|
||||
// to those of the synthesis format, based on a given hint.
|
||||
// @param[inout] encoding in: the desired audio sample format
|
||||
// out: the format used by the TTS engine
|
||||
// @param[inout] rate in: the desired audio sample rate
|
||||
// out: the sample rate used by the TTS engine
|
||||
// @param[inout] channels in: the desired number of audio channels
|
||||
// out: the number of channels used by the TTS engine
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result setAudioFormat(tts_audio_format& encoding, uint32_t& rate,
|
||||
int& channels);
|
||||
|
||||
// Set a property for the the TTS engine
|
||||
// "size" is the maximum size of "value" for properties "property"
|
||||
// @param property pointer to the property name
|
||||
// @param value pointer to the property value
|
||||
// @param size maximum size required to store this type of property
|
||||
// @return TTS_PROPERTY_UNSUPPORTED, or TTS_SUCCESS, or TTS_FAILURE,
|
||||
// or TTS_VALUE_INVALID
|
||||
virtual tts_result setProperty(const char *property, const char *value,
|
||||
const size_t size);
|
||||
|
||||
// Retrieve a property from the TTS engine
|
||||
// @param property pointer to the property name
|
||||
// @param[out] value pointer to the retrieved language value
|
||||
// @param[inout] iosize in: stores the size available to store the
|
||||
// property value.
|
||||
// out: stores the size required to hold the language
|
||||
// value if getLanguage() returned
|
||||
// TTS_PROPERTY_SIZE_TOO_SMALL, unchanged otherwise
|
||||
// @return TTS_PROPERTY_UNSUPPORTED, or TTS_SUCCESS,
|
||||
// or TTS_PROPERTY_SIZE_TOO_SMALL
|
||||
virtual tts_result getProperty(const char *property, char *value,
|
||||
size_t *iosize);
|
||||
|
||||
// Synthesize the text.
|
||||
// As the synthesis is performed, the engine invokes the callback to notify
|
||||
// the TTS framework that it has filled the given buffer, and indicates how
|
||||
// many bytes it wrote. The callback is called repeatedly until the engine
|
||||
// has generated all the audio data corresponding to the text.
|
||||
// Note about the format of the input: the text parameter may use the
|
||||
// following elements
|
||||
// and their respective attributes as defined in the SSML 1.0 specification:
|
||||
// * lang
|
||||
// * say-as:
|
||||
// o interpret-as
|
||||
// * phoneme
|
||||
// * voice:
|
||||
// o gender,
|
||||
// o age,
|
||||
// o variant,
|
||||
// o name
|
||||
// * emphasis
|
||||
// * break:
|
||||
// o strength,
|
||||
// o time
|
||||
// * prosody:
|
||||
// o pitch,
|
||||
// o contour,
|
||||
// o range,
|
||||
// o rate,
|
||||
// o duration,
|
||||
// o volume
|
||||
// * mark
|
||||
// Differences between this text format and SSML are:
|
||||
// * full SSML documents are not supported
|
||||
// * namespaces are not supported
|
||||
// Text is coded in UTF-8.
|
||||
// @param text the UTF-8 text to synthesize
|
||||
// @param userdata pointer to be returned when the call is invoked
|
||||
// @param buffer the location where the synthesized data must be written
|
||||
// @param bufferSize the number of bytes that can be written in buffer
|
||||
// @return TTS_SUCCESS or TTS_FAILURE
|
||||
virtual tts_result synthesizeText(const char *text, int8_t *buffer,
|
||||
size_t bufferSize, void *userdata);
|
||||
|
||||
};
|
||||
|
||||
} // namespace android
|
||||
|
||||
#endif /* TTS_ENGINE_H_ */
|
||||
@@ -0,0 +1,609 @@
|
||||
/*
|
||||
* Copyright (C) 2008 Google Inc.
|
||||
* Copyright (C) 2012 Reece H. Dunn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains the TtsEngine implementation for the eSpeak
|
||||
* Text-to-Speech engine.
|
||||
*
|
||||
* Android Version: 2.2 (Froyo)
|
||||
* API Version: 8
|
||||
*/
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define LOG_TAG "eSpeak Engine"
|
||||
#define DEBUG true
|
||||
|
||||
#include <speak_lib.h>
|
||||
#include <TtsEngine.h>
|
||||
#include <Log.h>
|
||||
|
||||
/*
|
||||
* This is the Manager layer. It sits on top of the native eSpeak engine
|
||||
* and provides the interface to the defined Google TTS engine API.
|
||||
* The Google engine API is the boundary to allow a TTS engine to be swapped.
|
||||
* The Manager layer also provide the SSML tag interpretation.
|
||||
* The supported SSML tags are mapped to corresponding tags natively supported by eSpeak.
|
||||
* Native eSpeak functions always begin with espeak_XXX.
|
||||
*
|
||||
* Only a subset of SSML 1.0 tags are supported.
|
||||
* Some SSML tags involve significant complexity.
|
||||
* If the language is changed through an SSML tag, there is a latency for the load.
|
||||
*/
|
||||
|
||||
using namespace android;
|
||||
|
||||
const char *ESPEAK_DIRECTORY = "espeak-data";
|
||||
|
||||
const char *eSpeakBaseResources[] = {"intonations", "phondata", "phonindex", "phontab",
|
||||
"en_dict", "voices/en/en-us" };
|
||||
|
||||
const int NUM_BASE_RESOURCES = 6;
|
||||
|
||||
// Format is {espeak voice, iso3 code, name}
|
||||
const char *eSpeakSupportedVoices[][3] = {
|
||||
{"en-us", "eng", "English"},
|
||||
{"en-us", "eng-USA", "English (US)"},
|
||||
{"en", "eng-GBR", "English (UK)"},
|
||||
{"en-sc", "eng-GBR-sc", "English (Scottish)"},
|
||||
{"en-n", "eng-GBR-n", "English (Northern UK)"},
|
||||
{"en-rp", "eng-GBR-rp", "English (Received Pronunciation)"},
|
||||
{"en-wm", "eng-GBR-wm", "English (West Midlands)"},
|
||||
{"af", "afr", "Afrikaans"},
|
||||
{"bs", "bos", "Bosnian"},
|
||||
{"ca", "cat", "Catalan"},
|
||||
{"cs", "ces", "Czech"},
|
||||
{"da", "dan", "Danish"},
|
||||
{"de", "deu", "German"},
|
||||
{"el", "ell", "Greek"},
|
||||
{"eo", "epo", "Esperanto"},
|
||||
{"es", "spa", "Spanish"},
|
||||
{"es-la", "spa-MEX", "Spanish (Latin America)"},
|
||||
{"fi", "fin", "Finnish"},
|
||||
{"fr", "fra", "French"},
|
||||
{"hr", "hrv", "Croatian"},
|
||||
{"hu", "hun", "Hungarian"},
|
||||
{"it", "ita", "Italian"},
|
||||
{"kn", "kan", "Kannada"},
|
||||
{"ku", "kur", "Kurdish"},
|
||||
{"lv", "lav", "Latvian"},
|
||||
{"nl", "nld", "Dutch"},
|
||||
{"pl", "pol", "Polish"},
|
||||
{"pt", "por", "Portuguese (Brazil)"},
|
||||
{"pt", "por-BRA", "Portuguese (Brazil)"},
|
||||
{"pt-pt", "por-PRT", "Portuguese"},
|
||||
{"ro", "ron", "Romanian"},
|
||||
{"sk", "slk", "Slovak"},
|
||||
{"sr", "srp", "Serbian"},
|
||||
{"sv", "swe", "Swedish"},
|
||||
{"sw", "swa", "Swahili"},
|
||||
{"ta", "tam", "Tamil"},
|
||||
{"tr", "tur", "Turkish"},
|
||||
{"zh", "zho", "Chinese (Mandarin)"},
|
||||
{"cy", "cym", "Welsh"},
|
||||
{"hi", "hin", "Hindi"},
|
||||
{"hy", "hye", "Armenian"},
|
||||
{"id", "ind", "Indonesian"},
|
||||
{"is", "isl", "Icelandic"},
|
||||
{"ka", "kat", "Georgian"},
|
||||
{"la", "lat", "Latin"},
|
||||
{"mk", "mkd", "Macedonian"},
|
||||
{"no", "nor", "Norwegian"},
|
||||
{"ru", "rus", "Russian"},
|
||||
{"sq", "sqi", "Albanian"},
|
||||
{"vi", "vie", "Vietnamese"},
|
||||
{"zh-yue", "zho-HKG", "Chinese (Cantonese)"},
|
||||
{"grc", "grc", "Ancient Greek"},
|
||||
{"jbo", "jbo", "Lojban"},
|
||||
{"nci", "nci", "Nahuatl (Classical)"},
|
||||
{"pap", "pap", "Papiamento" }
|
||||
};
|
||||
|
||||
const int NUM_SUPPORTED_VOICES = 55;
|
||||
|
||||
// Callback to the TTS API
|
||||
synthDoneCB_t *ttsSynthDoneCBPointer;
|
||||
|
||||
char *currentLanguage = (char *) "en-us";
|
||||
char *currentRate = (char *) "150";
|
||||
char *eSpeakDataPath = NULL;
|
||||
|
||||
char currentLang[10];
|
||||
char currentCountry[10];
|
||||
char currentVariant[10];
|
||||
|
||||
bool hasInitialized = false;
|
||||
|
||||
/* Functions internal to the eSpeak engine wrapper */
|
||||
static void setSpeechRate(int speechRate) {
|
||||
espeak_ERROR err = espeak_SetParameter(espeakRATE, speechRate, 0);
|
||||
}
|
||||
|
||||
/* Functions exposed to the TTS API */
|
||||
|
||||
/* Callback from espeak. Should call back to the TTS API */
|
||||
static int eSpeakCallback(short *wav, int numsamples, espeak_EVENT *events) {
|
||||
LOGI("Callback with %d samples", numsamples);
|
||||
|
||||
int8_t * castedWav = (int8_t *) wav;
|
||||
size_t bufferSize = 0;
|
||||
if (numsamples < 1) {
|
||||
int8_t silenceData[] = { 0, 0 };
|
||||
size_t silenceBufferSize = sizeof(silenceData)/sizeof(silenceData[0]);
|
||||
int8_t *silence = silenceData; // Passing in an empty buffer can cause a crash.
|
||||
ttsSynthDoneCBPointer(events->user_data, 22050, TTS_AUDIO_FORMAT_PCM_16_BIT, 1, silence,
|
||||
silenceBufferSize, TTS_SYNTH_DONE);
|
||||
return 1;
|
||||
}
|
||||
bufferSize = numsamples * sizeof(short);
|
||||
ttsSynthDoneCBPointer(events->user_data, 22050, TTS_AUDIO_FORMAT_PCM_16_BIT, 1, castedWav,
|
||||
bufferSize, TTS_SYNTH_PENDING);
|
||||
return 0; // continue synthesis (1 is to abort)
|
||||
}
|
||||
|
||||
static bool fileExists(char *fileName) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
FILE *file = fopen(fileName, "r");
|
||||
|
||||
if (file == NULL) {
|
||||
return false;
|
||||
} else {
|
||||
fclose(file);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
static bool hasBaseResources() {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
char filename[255];
|
||||
|
||||
for (int i = 0; i < NUM_BASE_RESOURCES; i++) {
|
||||
sprintf(filename, "%s/%s/%s", eSpeakDataPath, ESPEAK_DIRECTORY, eSpeakBaseResources[i]);
|
||||
|
||||
if (!fileExists(filename)) {
|
||||
LOGE("Missing resource: %s", filename);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Google Engine API function implementations */
|
||||
|
||||
tts_result attemptInit() {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
if (hasInitialized) {
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
if (!hasBaseResources()) {
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
|
||||
// TODO Make sure that the speech data is loaded in
|
||||
// the directory /sdcard/espeak-data before calling this.
|
||||
int sampleRate = espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, 4096, eSpeakDataPath, 0);
|
||||
|
||||
if (sampleRate <= 0) {
|
||||
LOGE("eSpeak initialization failed!");
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
|
||||
espeak_SetSynthCallback(eSpeakCallback);
|
||||
|
||||
espeak_VOICE voice;
|
||||
memset(&voice, 0, sizeof(espeak_VOICE)); // Zero out the voice first
|
||||
const char *langNativeString = "en-us"; //Default to US English
|
||||
voice.languages = langNativeString;
|
||||
voice.variant = 0;
|
||||
espeak_SetVoiceByProperties(&voice);
|
||||
|
||||
hasInitialized = true;
|
||||
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
/** init
|
||||
* Allocates eSpeak memory block and initializes the eSpeak system.
|
||||
* synthDoneCBPtr - Pointer to callback function which will receive generated samples
|
||||
* config - the engine configuration parameters, not used here
|
||||
* return tts_result
|
||||
*/
|
||||
tts_result TtsEngine::init(synthDoneCB_t synthDoneCBPtr, const char *engineConfig) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
ttsSynthDoneCBPointer = synthDoneCBPtr;
|
||||
hasInitialized = false;
|
||||
|
||||
if ((engineConfig != NULL) && (strlen(engineConfig) > 0)) {
|
||||
eSpeakDataPath = (char *) malloc(strlen(engineConfig));
|
||||
strcpy(eSpeakDataPath, engineConfig);
|
||||
} else {
|
||||
eSpeakDataPath = NULL;
|
||||
LOGE("Data path not specified!");
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
|
||||
return attemptInit();
|
||||
}
|
||||
|
||||
/** shutdown
|
||||
* Unloads all eSpeak resources; terminates eSpeak system and frees eSpeak memory block.
|
||||
* return tts_result
|
||||
*/
|
||||
tts_result TtsEngine::shutdown(void) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
if (eSpeakDataPath != NULL) {
|
||||
free(eSpeakDataPath);
|
||||
}
|
||||
|
||||
espeak_Terminate();
|
||||
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
tts_result TtsEngine::loadLanguage(const char *lang, const char *country, const char *variant) {
|
||||
if (DEBUG) LOGV("loadLanguage(\"%s\", \"%s\", \"%s\")", lang, country, variant);
|
||||
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
|
||||
tts_support_result isLanguageSupported(const char *lang, const char *country, const char *variant,
|
||||
int *pindex) {
|
||||
if (DEBUG) LOGV("isLanguageSupported(\"%s\", \"%s\", \"%s\")", lang, country, variant);
|
||||
|
||||
if ((lang == NULL) || (strlen(lang) == 0)) {
|
||||
LOGE("TtsEngine::isLanguageAvailable called with no language");
|
||||
return TTS_LANG_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if (pindex != NULL) {
|
||||
*pindex = -1;
|
||||
}
|
||||
|
||||
int langIndex = -1;
|
||||
int countryIndex = -1;
|
||||
int variantIndex = -1;
|
||||
|
||||
if (strlen(lang) == 3) {
|
||||
for (int i = 0; i < NUM_SUPPORTED_VOICES; i++) {
|
||||
if (strncmp(lang, eSpeakSupportedVoices[i][1], 3) == 0) {
|
||||
LOGI("Found ISO3 language at index %d", i);
|
||||
langIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (strlen(lang) == 2) {
|
||||
for (int i = 0; i < NUM_SUPPORTED_VOICES; i++) {
|
||||
if (strncmp(lang, eSpeakSupportedVoices[i][0], 2) == 0) {
|
||||
LOGI("Found ISO2 language at index %d", i);
|
||||
langIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (langIndex < 0) {
|
||||
LOGV("TtsEngine::isLanguageAvailable called with unsupported language");
|
||||
return TTS_LANG_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
if ((country == NULL) || (strlen(country) == 0)) {
|
||||
// TODO: Check whether resources are available for this language.
|
||||
|
||||
if (pindex != NULL) {
|
||||
*pindex = langIndex;
|
||||
}
|
||||
|
||||
LOGI("No country specified, language is available");
|
||||
return TTS_LANG_AVAILABLE;
|
||||
}
|
||||
|
||||
char lang_country[10];
|
||||
sprintf(lang_country, "%s-%s", lang, country);
|
||||
|
||||
// Find country
|
||||
if (strlen(country) == 3) {
|
||||
for (int i = langIndex; i < NUM_SUPPORTED_VOICES; i++) {
|
||||
if ((strcmp(lang_country, eSpeakSupportedVoices[i][1]) == 0)) {
|
||||
LOGI("Found ISO3 country at index %d", i);
|
||||
countryIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (strlen(country) == 2) {
|
||||
for (int i = langIndex; i < NUM_SUPPORTED_VOICES; i++) {
|
||||
if ((strcmp(lang_country, eSpeakSupportedVoices[i][0]) == 0)) {
|
||||
LOGI("Found ISO2 country at index %d", i);
|
||||
countryIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (countryIndex < 0) {
|
||||
if (pindex != NULL) {
|
||||
*pindex = langIndex;
|
||||
}
|
||||
|
||||
LOGI("No country found, language is available");
|
||||
return TTS_LANG_AVAILABLE;
|
||||
}
|
||||
|
||||
if ((variant == NULL) || (strlen(variant) == 0)) {
|
||||
if (pindex != NULL) {
|
||||
*pindex = countryIndex;
|
||||
}
|
||||
|
||||
LOGI("No variant specified, language and country are available");
|
||||
return TTS_LANG_COUNTRY_AVAILABLE;
|
||||
}
|
||||
|
||||
char lang_country_variant[15];
|
||||
sprintf(lang_country_variant, "%s-%s-%s", lang, country, variant);
|
||||
|
||||
// Find variant
|
||||
for (int i = countryIndex; i < NUM_SUPPORTED_VOICES; i++) {
|
||||
if ((strcmp(lang_country_variant, eSpeakSupportedVoices[i][1]) == 0)) {
|
||||
LOGI("Found variant at index %d", i);
|
||||
variantIndex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (variantIndex < 0) {
|
||||
if (pindex != NULL) {
|
||||
*pindex = countryIndex;
|
||||
}
|
||||
|
||||
LOGI("No variant found, language and country are available");
|
||||
return TTS_LANG_COUNTRY_AVAILABLE;
|
||||
}
|
||||
|
||||
if (pindex != NULL) {
|
||||
*pindex = variantIndex;
|
||||
}
|
||||
|
||||
LOGI("Language, country, and variant are available");
|
||||
return TTS_LANG_COUNTRY_VAR_AVAILABLE;
|
||||
}
|
||||
|
||||
tts_result TtsEngine::setLanguage(const char *lang, const char *country, const char *variant) {
|
||||
if (DEBUG) LOGV("setLanguage(\"%s\", \"%s\", \"%s\")", lang, country, variant);
|
||||
|
||||
// Make sure the engine is initialized!
|
||||
attemptInit();
|
||||
|
||||
int index = -1;
|
||||
|
||||
isLanguageSupported(lang, country, variant, &index);
|
||||
|
||||
if (index < 0) {
|
||||
LOGE("setLanguage called with unsupported language");
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
|
||||
strcpy(currentLang, lang);
|
||||
strcpy(currentCountry, country);
|
||||
strcpy(currentVariant, variant);
|
||||
|
||||
char espeakLangStr[7];
|
||||
strcpy(espeakLangStr, eSpeakSupportedVoices[index][0]);
|
||||
|
||||
espeak_VOICE voice;
|
||||
memset(&voice, 0, sizeof(espeak_VOICE)); // Zero out the voice first
|
||||
voice.variant = 0;
|
||||
voice.languages = espeakLangStr;
|
||||
espeak_ERROR err = espeak_SetVoiceByProperties(&voice);
|
||||
currentLanguage = new char[strlen(lang)];
|
||||
strcpy(currentLanguage, lang);
|
||||
|
||||
if (err != EE_OK) {
|
||||
LOGE("Error code %d when setting voice properties!", err);
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
tts_support_result TtsEngine::isLanguageAvailable(const char *lang, const char *country,
|
||||
const char *variant) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
return isLanguageSupported(lang, country, variant, NULL);
|
||||
}
|
||||
|
||||
tts_result TtsEngine::getLanguage(char *language, char *country, char *variant) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
strcpy(language, currentLang);
|
||||
strcpy(country, currentCountry);
|
||||
strcpy(variant, currentVariant);
|
||||
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
/** setAudioFormat
|
||||
* sets the audio format to use for synthesis, returns what is actually used.
|
||||
* @encoding - reference to encoding format
|
||||
* @rate - reference to sample rate
|
||||
* @channels - reference to number of channels
|
||||
* return tts_result
|
||||
* */
|
||||
tts_result TtsEngine::setAudioFormat(tts_audio_format& encoding, uint32_t& rate, int& channels) {
|
||||
LOGE("setAudioFormat(%d, %d, %d) is unsupported", encoding, rate, channels);
|
||||
|
||||
// TODO: Fix this!
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
// Sets the property with the specified value
|
||||
tts_result TtsEngine::setProperty(const char *property, const char *value, const size_t size) {
|
||||
if (DEBUG) LOGV("setProperty(\"%s\", \"%s\", %d)", property, value, size);
|
||||
|
||||
/* Set a specific property for the engine.
|
||||
Supported properties include: language (locale), rate, pitch, volume. */
|
||||
/* Sanity check */
|
||||
if (property == NULL) {
|
||||
LOGE("setProperty called with property NULL");
|
||||
return TTS_PROPERTY_UNSUPPORTED;
|
||||
}
|
||||
|
||||
if (value == NULL) {
|
||||
LOGE("setProperty called with value NULL");
|
||||
return TTS_VALUE_INVALID;
|
||||
}
|
||||
|
||||
espeak_ERROR result;
|
||||
|
||||
if (strncmp(property, "language", 8) == 0) {
|
||||
// TODO: Set this property
|
||||
result = EE_OK;
|
||||
} else if (strncmp(property, "rate", 4) == 0) {
|
||||
int rate = atoi(value) * espeak_GetParameter(espeakRATE, 0) / 100;
|
||||
if (DEBUG) LOGV("setProperty rate : rate=%s, wpm=%d", value, rate);
|
||||
result = espeak_SetParameter(espeakRATE, rate, 0);
|
||||
} else if (strncmp(property, "pitch", 5) == 0) {
|
||||
int pitch = atoi(value);
|
||||
result = espeak_SetParameter(espeakPITCH, pitch, 0);
|
||||
} else if (strncmp(property, "volume", 6) == 0) {
|
||||
int volume = atoi(value);
|
||||
result = espeak_SetParameter(espeakVOLUME, volume, 0);
|
||||
} else {
|
||||
return TTS_PROPERTY_UNSUPPORTED;
|
||||
}
|
||||
|
||||
if (result == EE_OK) {
|
||||
return TTS_SUCCESS;
|
||||
} else {
|
||||
return TTS_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
// Sets the property with the specified value
|
||||
tts_result TtsEngine::getProperty(const char *property, char *value, size_t *iosize) {
|
||||
if (DEBUG) LOGV("getProperty(\"%s\", ...)", property);
|
||||
|
||||
/* Get the property for the engine.
|
||||
This property was previously set by setProperty or by default. */
|
||||
/* sanity check */
|
||||
if (property == NULL) {
|
||||
LOGE("getProperty called with property NULL");
|
||||
return TTS_PROPERTY_UNSUPPORTED;
|
||||
}
|
||||
|
||||
if (value == NULL) {
|
||||
LOGE("getProperty called with value NULL");
|
||||
return TTS_VALUE_INVALID;
|
||||
}
|
||||
|
||||
if (strncmp(property, "language", 8) == 0) {
|
||||
if (currentLanguage == NULL) {
|
||||
strcpy(value, "");
|
||||
} else {
|
||||
if (*iosize < strlen(currentLanguage)+1) {
|
||||
*iosize = strlen(currentLanguage) + 1;
|
||||
return TTS_PROPERTY_SIZE_TOO_SMALL;
|
||||
}
|
||||
strcpy(value, currentLanguage);
|
||||
}
|
||||
return TTS_SUCCESS;
|
||||
} else if (strncmp(property, "rate", 4) == 0) {
|
||||
int rate = espeak_GetParameter(espeakRATE, 1) * 100 / espeak_GetParameter(espeakRATE, 0);
|
||||
char tmprate[4];
|
||||
sprintf(tmprate, "%d", rate);
|
||||
if (*iosize < strlen(tmprate)+1) {
|
||||
*iosize = strlen(tmprate) + 1;
|
||||
return TTS_PROPERTY_SIZE_TOO_SMALL;
|
||||
}
|
||||
strcpy(value, tmprate);
|
||||
return TTS_SUCCESS;
|
||||
} else if (strncmp(property, "pitch", 5) == 0) {
|
||||
char tmppitch[4];
|
||||
sprintf(tmppitch, "%d", espeak_GetParameter(espeakPITCH, 1));
|
||||
if (*iosize < strlen(tmppitch)+1) {
|
||||
*iosize = strlen(tmppitch) + 1;
|
||||
return TTS_PROPERTY_SIZE_TOO_SMALL;
|
||||
}
|
||||
strcpy(value, tmppitch);
|
||||
return TTS_SUCCESS;
|
||||
} else if (strncmp(property, "volume", 6) == 0) {
|
||||
char tmpvolume[4];
|
||||
sprintf(tmpvolume, "%d", espeak_GetParameter(espeakVOLUME, 1));
|
||||
if (*iosize < strlen(tmpvolume)+1) {
|
||||
*iosize = strlen(tmpvolume) + 1;
|
||||
return TTS_PROPERTY_SIZE_TOO_SMALL;
|
||||
}
|
||||
strcpy(value, tmpvolume);
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
LOGE("Unsupported property");
|
||||
return TTS_PROPERTY_UNSUPPORTED;
|
||||
}
|
||||
|
||||
/** synthesizeText
|
||||
* Synthesizes a text string.
|
||||
* The text string could be annotated with SSML tags.
|
||||
* @text - text to synthesize
|
||||
* @buffer - buffer which will receive generated samples
|
||||
* @bufferSize - size of buffer
|
||||
* @userdata - pointer to user data which will be passed back to callback function
|
||||
* return tts_result
|
||||
*/
|
||||
tts_result TtsEngine::synthesizeText(const char *text, int8_t *buffer, size_t bufferSize,
|
||||
void *userdata) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
|
||||
espeak_SetSynthCallback(eSpeakCallback);
|
||||
|
||||
unsigned int unique_identifier;
|
||||
|
||||
espeak_Synth(text, strlen(text), 0, // position
|
||||
POS_CHARACTER, 0, // end position (0 means no end position)
|
||||
espeakCHARS_UTF8 | espeakSSML, // use or ignore xml tags
|
||||
&unique_identifier, userdata);
|
||||
espeak_Synchronize();
|
||||
|
||||
LOGI("Synthesis done");
|
||||
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
/** stop
|
||||
* Aborts the running synthesis.
|
||||
* return tts_result
|
||||
*/
|
||||
tts_result TtsEngine::stop() {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
espeak_Cancel();
|
||||
return TTS_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
TtsEngine* getTtsEngine() {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
return new TtsEngine();
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,344 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
* Copyright (C) 2012 Reece H. Dunn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains the JNI bindings to eSpeak used by SpeechSynthesis.java.
|
||||
*
|
||||
* Android Version: 4.0 (Ice Cream Sandwich)
|
||||
* API Version: 14
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <jni.h>
|
||||
|
||||
#include <speak_lib.h>
|
||||
#include <TtsEngine.h>
|
||||
#include <Log.h>
|
||||
|
||||
#define LOG_TAG "eSpeakService"
|
||||
#define DEBUG true
|
||||
|
||||
enum audio_channel_count {
|
||||
CHANNEL_COUNT_MONO = 1,
|
||||
CHANNEL_COUNT_STEREO = 2
|
||||
};
|
||||
|
||||
enum audio_encoding {
|
||||
ENCODING_INVALID = 0x00,
|
||||
ENCODING_DEFAULT = 0x01,
|
||||
ENCODING_PCM_16BIT = 0x02,
|
||||
ENCODING_PCM_8BIT = 0x03
|
||||
};
|
||||
|
||||
enum synthesis_result {
|
||||
SYNTH_CONTINUE = 0,
|
||||
SYNTH_ABORT = 1
|
||||
};
|
||||
|
||||
const int DEFAULT_SAMPLE_RATE = 22050;
|
||||
const int DEFAULT_CHANNEL_COUNT = CHANNEL_COUNT_MONO;
|
||||
const int DEFAULT_AUDIO_FORMAT = ENCODING_PCM_16BIT;
|
||||
const int DEFAULT_BUFFER_SIZE = 1000;
|
||||
|
||||
struct native_data_t {
|
||||
JNIEnv *env;
|
||||
jobject object;
|
||||
int sampleRate;
|
||||
int channelCount;
|
||||
int audioFormat;
|
||||
int bufferSizeInMillis;
|
||||
|
||||
native_data_t() {
|
||||
env = NULL;
|
||||
object = NULL;
|
||||
sampleRate = DEFAULT_SAMPLE_RATE;
|
||||
channelCount = DEFAULT_CHANNEL_COUNT;
|
||||
audioFormat = DEFAULT_AUDIO_FORMAT;
|
||||
bufferSizeInMillis = DEFAULT_BUFFER_SIZE;
|
||||
}
|
||||
};
|
||||
|
||||
jmethodID METHOD_nativeSynthCallback;
|
||||
jfieldID FIELD_mNativeData;
|
||||
|
||||
static inline native_data_t *getNativeData(JNIEnv *env, jobject object) {
|
||||
return (native_data_t *) (env->GetIntField(object, FIELD_mNativeData));
|
||||
}
|
||||
|
||||
/* Callback from espeak. Should call back to the TTS API */
|
||||
static int SynthCallback(short *audioData, int numSamples,
|
||||
espeak_EVENT *events) {
|
||||
native_data_t *nat = (native_data_t *) events->user_data;
|
||||
JNIEnv *env = nat->env;
|
||||
jobject object = nat->object;
|
||||
|
||||
if (numSamples < 1) {
|
||||
env->CallVoidMethod(object, METHOD_nativeSynthCallback, NULL);
|
||||
return SYNTH_ABORT;
|
||||
} else {
|
||||
jbyteArray arrayAudioData = env->NewByteArray(numSamples * 2);
|
||||
env->SetByteArrayRegion(arrayAudioData, 0, (numSamples * 2), (jbyte *) audioData);
|
||||
env->CallVoidMethod(object, METHOD_nativeSynthCallback, arrayAudioData);
|
||||
return SYNTH_CONTINUE;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
JNIEXPORT jint
|
||||
JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||
JNIEnv *env;
|
||||
|
||||
if (vm->GetEnv((void **) &env, JNI_VERSION_1_6) != JNI_OK) {
|
||||
LOGE("Failed to get the environment using GetEnv()");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return JNI_VERSION_1_6;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeClassInit(
|
||||
JNIEnv* env, jclass clazz) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
METHOD_nativeSynthCallback = env->GetMethodID(clazz, "nativeSynthCallback", "([B)V");
|
||||
FIELD_mNativeData = env->GetFieldID(clazz, "mNativeData", "I");
|
||||
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeCreate(
|
||||
JNIEnv *env, jobject object, jstring path) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
native_data_t *nat = new native_data_t;
|
||||
|
||||
if (nat == NULL) {
|
||||
LOGE("%s: out of memory!", __FUNCTION__);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
env->SetIntField(object, FIELD_mNativeData, (jint) nat);
|
||||
|
||||
const char *c_path = path ? env->GetStringUTFChars(path, NULL) : NULL;
|
||||
|
||||
nat->object = env->NewWeakGlobalRef(object);
|
||||
if (DEBUG) LOGV("Initializing with path %s", c_path);
|
||||
nat->sampleRate = espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, nat->bufferSizeInMillis, c_path, 0);
|
||||
|
||||
if (c_path) env->ReleaseStringUTFChars(path, c_path);
|
||||
|
||||
return (nat->sampleRate > 0) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeDestroy(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
native_data_t *nat = getNativeData(env, object);
|
||||
|
||||
env->DeleteWeakGlobalRef(nat->object);
|
||||
|
||||
free(nat);
|
||||
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
JNIEXPORT jint
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeGetSampleRate(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
const native_data_t *nat = getNativeData(env, object);
|
||||
return (jint) nat->sampleRate;
|
||||
}
|
||||
|
||||
JNIEXPORT jint
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeGetChannelCount(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
const native_data_t *nat = getNativeData(env, object);
|
||||
return (jint) nat->channelCount;
|
||||
}
|
||||
|
||||
JNIEXPORT jint
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeGetAudioFormat(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
const native_data_t *nat = getNativeData(env, object);
|
||||
return (jint) nat->audioFormat;
|
||||
}
|
||||
|
||||
JNIEXPORT jint
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeGetBufferSizeInMillis(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
const native_data_t *nat = getNativeData(env, object);
|
||||
return (jint) nat->bufferSizeInMillis;
|
||||
}
|
||||
|
||||
JNIEXPORT jobjectArray
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeGetAvailableVoices(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
|
||||
const espeak_VOICE **voices = espeak_ListVoices(NULL);
|
||||
|
||||
int count;
|
||||
|
||||
// First, count the number of voices returned.
|
||||
for (count = 0; voices[count] != NULL; count++);
|
||||
|
||||
// Next, create a Java String array.
|
||||
jobjectArray voicesArray = (jobjectArray) env->NewObjectArray(
|
||||
count * 4, env->FindClass("java/lang/String"), NULL);
|
||||
|
||||
const espeak_VOICE *v;
|
||||
char gender_buf[12];
|
||||
char age_buf[12];
|
||||
|
||||
// Finally, populate the array.
|
||||
for (int i = 0, voicesIndex = 0; (v = voices[i]) != NULL; i++) {
|
||||
const char *lang_name = v->languages + 1;
|
||||
const char *identifier = v->identifier;
|
||||
sprintf(gender_buf, "%d", v->gender);
|
||||
sprintf(age_buf, "%d", v->age);
|
||||
|
||||
env->SetObjectArrayElement(
|
||||
voicesArray, voicesIndex++, env->NewStringUTF(lang_name));
|
||||
env->SetObjectArrayElement(
|
||||
voicesArray, voicesIndex++, env->NewStringUTF(identifier));
|
||||
env->SetObjectArrayElement(
|
||||
voicesArray, voicesIndex++, env->NewStringUTF(gender_buf));
|
||||
env->SetObjectArrayElement(
|
||||
voicesArray, voicesIndex++, env->NewStringUTF(age_buf));
|
||||
}
|
||||
|
||||
return voicesArray;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeSetVoiceByProperties(
|
||||
JNIEnv *env, jobject object, jstring name, jstring languages, jint gender, jint age,
|
||||
jint variant) {
|
||||
const char *c_name = name ? env->GetStringUTFChars(name, NULL) : NULL;
|
||||
const char *c_languages = languages ? env->GetStringUTFChars(languages, NULL) : NULL;
|
||||
|
||||
if (DEBUG) LOGV("%s(name=%s, languages=%s)", __FUNCTION__, c_name, c_languages);
|
||||
|
||||
espeak_VOICE voice_select;
|
||||
memset(&voice_select, 0, sizeof(espeak_VOICE));
|
||||
|
||||
voice_select.name = c_name;
|
||||
voice_select.languages = c_languages;
|
||||
voice_select.age = (int) age;
|
||||
voice_select.gender = (int) gender;
|
||||
voice_select.variant = (int) variant;
|
||||
|
||||
const espeak_ERROR result = espeak_SetVoiceByProperties(&voice_select);
|
||||
|
||||
if (c_name) env->ReleaseStringUTFChars(name, c_name);
|
||||
if (c_languages) env->ReleaseStringUTFChars(languages, c_languages);
|
||||
|
||||
switch (result) {
|
||||
case EE_OK: return JNI_TRUE;
|
||||
case EE_INTERNAL_ERROR: LOGE("espeak_SetVoiceByProperties: internal error."); break;
|
||||
case EE_BUFFER_FULL: LOGE("espeak_SetVoiceByProperties: buffer full."); break;
|
||||
case EE_NOT_FOUND: LOGE("espeak_SetVoiceByProperties: not found."); break;
|
||||
}
|
||||
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeSetRate(
|
||||
JNIEnv *env, jobject object, jint rate) {
|
||||
const int wpm = ((float)rate / 100) * espeak_GetParameter(espeakRATE, 0);
|
||||
if (DEBUG) LOGV("%s(rate=%d, wpm=%d)", __FUNCTION__, rate, wpm);
|
||||
|
||||
const espeak_ERROR result = espeak_SetParameter(espeakRATE, wpm, 0);
|
||||
|
||||
switch (result) {
|
||||
case EE_OK: return JNI_TRUE;
|
||||
case EE_INTERNAL_ERROR: LOGE("espeak_SetParameter: internal error."); break;
|
||||
case EE_BUFFER_FULL: LOGE("espeak_SetParameter: buffer full."); break;
|
||||
case EE_NOT_FOUND: LOGE("espeak_SetParameter: not found."); break;
|
||||
}
|
||||
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeSetPitch(
|
||||
JNIEnv *env, jobject object, jint pitch) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
const espeak_ERROR result = espeak_SetParameter(espeakPITCH, (int) pitch, 0);
|
||||
|
||||
switch (result) {
|
||||
case EE_OK: return JNI_TRUE;
|
||||
case EE_INTERNAL_ERROR: LOGE("espeak_SetParameter: internal error."); break;
|
||||
case EE_BUFFER_FULL: LOGE("espeak_SetParameter: buffer full."); break;
|
||||
case EE_NOT_FOUND: LOGE("espeak_SetParameter: not found."); break;
|
||||
}
|
||||
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeSynthesize(
|
||||
JNIEnv *env, jobject object, jstring text) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
native_data_t *nat = getNativeData(env, object);
|
||||
const char *c_text = text ? env->GetStringUTFChars(text, NULL) : NULL;
|
||||
unsigned int unique_identifier;
|
||||
|
||||
nat->env = env;
|
||||
|
||||
espeak_SetSynthCallback(SynthCallback);
|
||||
const espeak_ERROR result = espeak_Synth(c_text, strlen(c_text), 0, // position
|
||||
POS_CHARACTER, 0, // end position (0 means no end position)
|
||||
espeakCHARS_UTF8 | espeakSSML, // use or ignore xml tags
|
||||
&unique_identifier, nat);
|
||||
espeak_Synchronize();
|
||||
|
||||
if (c_text) env->ReleaseStringUTFChars(text, c_text);
|
||||
|
||||
switch (result) {
|
||||
case EE_OK: return JNI_TRUE;
|
||||
case EE_INTERNAL_ERROR: LOGE("espeak_Synth: internal error."); break;
|
||||
case EE_BUFFER_FULL: LOGE("espeak_Synth: buffer full."); break;
|
||||
case EE_NOT_FOUND: LOGE("espeak_Synth: not found."); break;
|
||||
}
|
||||
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_googlecode_eyesfree_espeak_SpeechSynthesis_nativeStop(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
espeak_Cancel();
|
||||
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
@@ -0,0 +1,11 @@
|
||||
# This file is automatically generated by Android Tools.
|
||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
||||
#
|
||||
# This file must be checked in Version Control Systems.
|
||||
#
|
||||
# To customize properties used by the Ant build system use,
|
||||
# "ant.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
|
||||
# Project target.
|
||||
target=android-14
|
||||
|
After Width: | Height: | Size: 773 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:gravity="center_horizontal"
|
||||
android:orientation="vertical"
|
||||
android:padding="16dp" >
|
||||
|
||||
<ProgressBar
|
||||
style="?android:attr/progressBarStyleLarge"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/installing_voice_data"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/installing_voice_data" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="8dp" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/loading"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone" >
|
||||
|
||||
<ProgressBar
|
||||
style="?android:attr/progressBarStyleLarge"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/loading" />
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/success"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:visibility="visible" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/properties"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/currentLocaleLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="4dp" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/currentLocaleLabel"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.6"
|
||||
android:text="@string/current_tts_locale"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/currentLocale"
|
||||
style="@android:style/TextAppearance.Large"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.4" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/availableVoicesLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="4dp" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/availableVoicesLabel"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.6"
|
||||
android:text="@string/available_voices"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/availableVoices"
|
||||
style="@android:style/TextAppearance.Large"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_weight="0.4" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/settings"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_marginLeft="-4dp"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/updateVoicesLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/updateVoices"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/update_voices" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView3"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/engineSettingsLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/engineSettings"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.5"
|
||||
android:text="@string/engine_settings" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.5"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/ttsSettingsLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/ttsSettings"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.5"
|
||||
android:text="@string/tts_settings" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="0.5"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/failure"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone" >
|
||||
|
||||
<TextView
|
||||
style="@android:style/TextAppearance.Large"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/loading_failed" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS-instellings"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Verstek toonhoogte"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Stemgeslag"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Spraaktempo-vermenigvuldiger"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installeer tans stemdata..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak is nie as jou verstek teks-na-spraak-enjin opgestel nie. Wil jy dit nou so stel?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak kon nie stemdata installeer nie. Kontroleer asseblief jou SD-kaart."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Jammer, eSpeak kon nie begin nie. Wil jy \'n foutverslag stuur?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Kon nie eSpeak laai nie"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak kon nie laai nie. Wil jy \'n verslag na die ontwikkelaar stuur?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Geen instellings beskikbaar nie"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Verstek stem:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Stemme geïnstalleer:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Algemene TTS-instellings"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS-instellings"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Laai tans, wag asseblief..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Jammer, eSpeak kon nie laai nie."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Hierdie is \'n voorbeeld van gesproke teks in <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Baie laag"</item>
|
||||
<item msgid="9160252712018935449">"Laag"</item>
|
||||
<item msgid="6600217296998445656">"Normaal"</item>
|
||||
<item msgid="224968018667112211">"Hoog"</item>
|
||||
<item msgid="3676463174560550053">"Baie hoog"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Verstek"</item>
|
||||
<item msgid="6629288844142484435">"Manlik"</item>
|
||||
<item msgid="5166591510034679431">"Vroulik"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS ቅንብሮች"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"ነባሪ የድምጽ መውጣት/መውረድ"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"የድምጽ ጾታ"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"የንግግር መጠን ማባዣ"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"የድምጽ ውሂብ በመጫን ላይ…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak እንደነባሪ የጽሑፍ-ወደ-ንግግር ፕሮግራም ሆኖ አልተቀመጠም። አሁን ማስቀመጥ ትፈልጋለህ?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak የድምጽ ውሂብ መጫን አልተሳካለትም። እባክህ የማከማቻ መሳሪያ ካርድህን ፈትሽ።"</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"ይቅርታ፣ eSpeak መጀመር አልቻለም። የስህተት ሪፖርት መላክ ትፈልጋለህ?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"eSpeak በመጫን ላይ ሳለ ስህተት"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak እተየጫነ ሳለ ስህተት አጋጥሞታል። ወደ ገንቢው ሪፖርት መላክ ትፈልጋለህ?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"ምንም ቅንብሮች የሉም"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"ነባሪ ድምጽ፦"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"የተጫኑ ድምጾች፦"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"አጠቃላይ የ TTS ቅንብሮች"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS ቅንብሮች"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"በመጫን ላይ፣ እባክህ ጠብቅ…"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"ይቅርታ eSpeak መጫን አልቻለም።"</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"ይሄ በ<xliff:g id="ID_1">%s</xliff:g> ላይ የተነገረ ጽሑፍ ናሙና ነው።"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"በጣም የወረደ"</item>
|
||||
<item msgid="9160252712018935449">"የወረደ"</item>
|
||||
<item msgid="6600217296998445656">"መደበኛ"</item>
|
||||
<item msgid="224968018667112211">"የወጣ"</item>
|
||||
<item msgid="3676463174560550053">"በጣም የወጣ"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"ነባሪ"</item>
|
||||
<item msgid="6629288844142484435">"ወንድ"</item>
|
||||
<item msgid="5166591510034679431">"ሴት"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"إعدادات eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"المستوى الافتراضي"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"جنس الصوت"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"مضاعف معدل الكلام"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"جارٍ تثبيت البيانات الصوتية…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"لم يتم تعيين eSpeak كمحرك افتراضي لتحويل النص إلى كلام. هل تريد تعيينه الآن؟"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"أخفق eSpeak في تثبيت البيانات الصوتية. الرجاء التحقق من بطاقة SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"عذرًا، أخفق بدء eSpeak. هل تريد إرسال تقرير بالخطأ؟"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"حدث خطأ أثناء تحميل eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"واجه eSpeak خطأ أثناء التحميل. هل تريد إرسال تقرير إلى مطور البرنامج؟"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"لا تتوفر أي إعدادات"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"الصوت الافتراضي:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"الأصوات المثبتة:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"إعدادات TTS العامة"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"إعدادات eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"جارٍ التحميل، يُرجى الانتظار..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"عذرًا، أخفق تحميل eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"هذه عينة من النص الذي تم نطقه في <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"منخفض جدًا"</item>
|
||||
<item msgid="9160252712018935449">"منخفض"</item>
|
||||
<item msgid="6600217296998445656">"عادي"</item>
|
||||
<item msgid="224968018667112211">"عالٍ"</item>
|
||||
<item msgid="3676463174560550053">"عالٍ جدًا"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"الافتراضي"</item>
|
||||
<item msgid="6629288844142484435">"ذكر"</item>
|
||||
<item msgid="5166591510034679431">"أنثى"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Настройки за eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Височина по подразбиране"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Пол на гласа"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Множител на скоростта на говора"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Гласовите данни се инсталират..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Не сте задали eSpeak като машината си по подразбиране за синтезиран говор. Искате ли да го направите сега?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Инсталирането на гласови данни от eSpeak не бе успешно. Моля, проверете SD картата си."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"За съжаление стартирането на eSpeak не бе успешно. Искате ли да изпратите сигнал за грешка?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"При зареждането на eSpeak възникна грешка"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"При зареждането на eSpeak възникна грешка. Искате ли да изпратите сигнал до програмиста?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Няма налични настройки"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Глас по подразбиране:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Инсталирани гласове:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Общи настройки за TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Настройки за eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Зарежда се. Моля, изчакайте..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"За съжаление зареждането на eSpeak не бе успешно."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Това е откъс от изговорен текст на <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Много ниско"</item>
|
||||
<item msgid="9160252712018935449">"Ниско"</item>
|
||||
<item msgid="6600217296998445656">"Нормално"</item>
|
||||
<item msgid="224968018667112211">"Високо"</item>
|
||||
<item msgid="3676463174560550053">"Много високо"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"По подразбиране"</item>
|
||||
<item msgid="6629288844142484435">"Мъжки"</item>
|
||||
<item msgid="5166591510034679431">"Женски"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"х 1"</item>
|
||||
<item msgid="7553786328764566293">"x 2"</item>
|
||||
<item msgid="7682118582350353919">"x 3"</item>
|
||||
<item msgid="5021322359195099970">"х 4"</item>
|
||||
<item msgid="6621008032814909392">"x 5"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Configuració d\'eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"To predeterminat"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Gènere de veu"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicador de velocitat de la veu"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"S\'estan instal·lant les dades de veu..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak no s\'ha definit com a motor de text a veu predeterminat. Vols definir-lo ara?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak no ha pogut instal·lar dades de veu. Comprova la targeta SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"No s\'ha pogut iniciar eSpeak. Vols enviar un informe d\'error?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"S\'ha produït un error en carregar eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak ha detectat un error durant la càrrega. Vols enviar un informe al desenvolupador?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"No hi ha configuracions disponibles"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Veu predeterminada:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Veus instal·lades:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Configuració general de TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Configuració d\'eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"S\'està carregant; espera..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"No s\'ha pogut carregar eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Aquesta és una mostra de text dit en veu alta en <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Molt baix"</item>
|
||||
<item msgid="9160252712018935449">"Baix"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Alt"</item>
|
||||
<item msgid="3676463174560550053">"Molt alt"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Predeterminat"</item>
|
||||
<item msgid="6629288844142484435">"Home"</item>
|
||||
<item msgid="5166591510034679431">"Dona"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Nastavení modulu eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Výchozí výška hlasu"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Pohlaví"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplikátor rychlosti řeči"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Instalace hlasových dat..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Aplikace eSpeak není nastavena jako váš výchozí modul pro převod textu na řeč. Chcete ji nastavit nyní?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Aplikaci eSpeak se nepodařilo nainstalovat hlasová data. Zkontrolujte prosím kartu SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Je nám líto, aplikaci eSpeak se nepodařilo spustit. Chcete odeslat zprávu o chybě?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Při načítání aplikace eSpeak došlo k chybě"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Při načítání aplikace eSpeak došlo k chybě. Chcete odeslat zprávu pro vývojáře?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Žádné nastavení není k dispozici"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Výchozí hlas:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Počet nainstalovaných hlasů:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Obecná nastavení modulu TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Nastavení modulu eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Načítání, čekejte prosím..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Je nám líto, aplikaci eSpeak se nepodařilo načíst."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Toto je ukázkový text namluvený v jazyce <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Velmi hluboký"</item>
|
||||
<item msgid="9160252712018935449">"Hluboký"</item>
|
||||
<item msgid="6600217296998445656">"Normální"</item>
|
||||
<item msgid="224968018667112211">"Vysoký"</item>
|
||||
<item msgid="3676463174560550053">"Velmi vysoký"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Výchozí"</item>
|
||||
<item msgid="6629288844142484435">"Mužský"</item>
|
||||
<item msgid="5166591510034679431">"Ženský"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak-indstillinger for TTT"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Standard tonehøjde"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Stemmens køn:"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Talehastighedsmultiplikator"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installerer stemmedata..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak er ikke angivet som din standard tekst-til-tale-maskine. Vil du gøre det nu?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak kunne ikke installere stemmedataene. Kontrollér dit SD-kort."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Vi beklager, men eSpeak kunne ikke startes. Vil du sende en fejlrapport?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Fejl ved indlæsning af eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak er stødt på en fejl under indlæsning. Vil du sende en rapport til udvikleren?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Der er ingen tilgængelige indstillinger"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Standardstemme:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Installerede stemmer:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Generelle indstillinger for TTT"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak-indstillinger for TTT"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Indlæser. Vent et øjeblik..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Vi beklager, men eSpeak kunne ikke indlæses."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Dette er et eksempel på talt tekst på <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Meget lav"</item>
|
||||
<item msgid="9160252712018935449">"Lav"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Høj"</item>
|
||||
<item msgid="3676463174560550053">"Meget høj"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Standard"</item>
|
||||
<item msgid="6629288844142484435">"Mand"</item>
|
||||
<item msgid="5166591510034679431">"Kvinde"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS-Einstellungen"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Standard-Tonlage"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Geschlecht der Stimme"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplikationsfaktor für Sprechgeschwindigkeit"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Sprachdaten werden installiert..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak ist nicht als Ihre Standard-Text-in-Sprache-Funktion festgelegt. Möchten Sie dies jetzt einstellen?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak konnte die Sprachdaten nicht installieren. Bitte überprüfen Sie Ihre SD-Karte."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"eSpeak konnte leider nicht gestartet werden. Möchten Sie einen Fehlerbericht senden?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Fehler beim Laden von eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Fehler beim Laden von eSpeak. Möchten Sie eine Nachricht an den Entwickler senden?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Keine Einstellungen verfügbar"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Standardstimme:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Installierte Stimmen:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Allgemeine Text-in-Sprache-Einstellungen"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS-Einstellungen"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Ladevorgang läuft. Bitte warten..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"eSpeak konnte leider nicht geladen werden."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Dies ist ein Beispieltext auf <xliff:g id="ID_1">%s</xliff:g>."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Sehr tief"</item>
|
||||
<item msgid="9160252712018935449">"Tief"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Hoch"</item>
|
||||
<item msgid="3676463174560550053">"Sehr hoch"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Standard"</item>
|
||||
<item msgid="6629288844142484435">"Männlich"</item>
|
||||
<item msgid="5166591510034679431">"Weiblich"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1-fach"</item>
|
||||
<item msgid="7553786328764566293">"2-fach"</item>
|
||||
<item msgid="7682118582350353919">"3-fach"</item>
|
||||
<item msgid="5021322359195099970">"4-fach"</item>
|
||||
<item msgid="6621008032814909392">"5-fach"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Ρυθμίσεις eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Προεπιλεγμένος τόνος"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Φύλο φωνής"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Πολλαπλασιαστής ρυθμού ομιλίας"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Εγκατάσταση δεδομένων φωνής..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Το eSpeak δεν έχει οριστεί ως η προεπιλεγμένη μηχανή μετατροπής κειμένου σε λόγο. Θέλετε να το ορίσετε τώρα;"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Το eSpeak απέτυχε να εγκαταστήσει τα δεδομένα φωνής. Ελέγξτε την κάρτα SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Λυπούμαστε, η εκκίνηση του eSpeak απέτυχε. Θέλετε να στείλετε αναφορά σφάλματος;"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Σφάλμα κατά τη φόρτωση του eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Το eSpeak αντιμετώπισε ένα σφάλμα κατά τη φόρτωση. Θέλετε να στείλετε αναφορά στον προγραμματιστή;"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Δεν υπάρχουν διαθέσιμες ρυθμίσεις"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Προεπιλεγμένη φωνή:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Φωνές που έχουν εγκατασταθεί:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Γενικές ρυθμίσεις TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Ρυθμίσεις eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Γίνεται φόρτωση. Περιμένετε..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Λυπούμαστε, η φόρτωση του eSpeak απέτυχε."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Πολύ χαμηλός"</item>
|
||||
<item msgid="9160252712018935449">"Χαμηλός"</item>
|
||||
<item msgid="6600217296998445656">"Κανονικός"</item>
|
||||
<item msgid="224968018667112211">"Υψηλός"</item>
|
||||
<item msgid="3676463174560550053">"Πολύ υψηλός"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Προεπιλογή"</item>
|
||||
<item msgid="6629288844142484435">"Άντρας"</item>
|
||||
<item msgid="5166591510034679431">"Γυναίκα"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS Settings"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Default pitch"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Voice gender"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Speech rate multiplier"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installing voice data…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak is not set as your default text-to-speech engine. Would you like to set it now?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak failed to install voice data. Please check your SD card."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Sorry, eSpeak failed to start. Would you like to send an error report?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Error loading eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak encountered an error while loading. Would you like to send a report to the developer?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"No settings available"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Default voice:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Voices installed:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"General TTS settings"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS settings"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Loading, please wait…"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Sorry, eSpeak failed to load."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"This is a sample of text spoken in <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Very low"</item>
|
||||
<item msgid="9160252712018935449">"Low"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"High"</item>
|
||||
<item msgid="3676463174560550053">"Very high"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Default"</item>
|
||||
<item msgid="6629288844142484435">"Male"</item>
|
||||
<item msgid="5166591510034679431">"Female"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Configuración de texto a voz de eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Tono predeterminado"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Género de la voz"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicador de la velocidad de la voz"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Instalando los datos de voz..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak no se definió como tu motor de texto a voz predeterminado. ¿Deseas definirlo ahora?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak no pudo instalar los datos de voz. Verifica tu tarjeta SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Se produjo un error al iniciar eSpeak. ¿Deseas enviar un informe de error?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Se produjo un error al cargar eSpeak."</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Se produjo un error al cargar eSpeak. ¿Deseas enviar un informe al programador?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"No hay parámetros de configuración disponibles"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voz predeterminada:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Voces instaladas:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Configuración general de texto a voz"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Configuración de texto a voz de eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Cargando recursos, aguarda..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Se produjo un error al cargar eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Este es un ejemplo de texto hablado en <xliff:g id="ID_1">%s</xliff:g>."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Muy grave"</item>
|
||||
<item msgid="9160252712018935449">"Grave"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Agudo"</item>
|
||||
<item msgid="3676463174560550053">"Muy agudo"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Predeterminado"</item>
|
||||
<item msgid="6629288844142484435">"Masculino"</item>
|
||||
<item msgid="5166591510034679431">"Femenino"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Ajustes de síntesis de voz de eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Tono predeterminado"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Sexo de la voz"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicador de velocidad de voz"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Instalando archivos de datos de voz..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak no se ha establecido como tu motor de síntesis de voz predeterminado. ¿Quieres establecerlo ahora?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak no ha podido instalar los archivos de datos de voz. Comprueba la tarjeta SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Error al iniciar eSpeak. ¿Quieres enviar un informe de error?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Error al cargar eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak ha detectado un error al cargarse. ¿Quieres enviar un informe al desarrollador?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"No hay opciones disponibles."</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voz predeterminada:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Voces instaladas:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Ajustes generales de síntesis de voz"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Ajustes de síntesis de voz de eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Cargando, espera..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Error al cargar eSpeak"</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Esto es un ejemplo de texto hablado en <xliff:g id="ID_1">%s</xliff:g>."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Muy bajo"</item>
|
||||
<item msgid="9160252712018935449">"Bajo"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Alto"</item>
|
||||
<item msgid="3676463174560550053">"Muy alto"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Predeterminado"</item>
|
||||
<item msgid="6629288844142484435">"Hombre"</item>
|
||||
<item msgid="5166591510034679431">"Mujer"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"تنظیمات eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"زیر و بمی پیشفرض"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"جنسیت صدا"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"تقویتکننده سرعت گفتگو"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"در حال نصب دادههای صوتی..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak اکنون بعنوان موتور پیشفرض نوشتار به گفتار شما تنظیم شده است. میخواهید اکنون آن را تنظیم کنید؟"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak نتوانست دادههای صوتی را نصب کند. لطفاً کارت SD خود را بررسی کنید."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"متأسفیم، eSpeak شروع به کار نکرد. میخواهید یک گزارش خطا ارسال کنید؟"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"خطا در بارگیری eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak در حین بارگیری با خطایی مواجه شده است. میخواهید یک گزارش برای برنامهنویس ارسال کنید؟"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"هیچ تنظیمی موجود نیست"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"صدای پیشفرض:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"صداهای نصب شده:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"تنظیمات کلی TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"تنظیمات eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"در حال بارگیری، لطفاً صبر کنید..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"متأسفیم، eSpeak بارگیری نشد."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"این یک نمونه از نوشتار گفته شده در <xliff:g id="ID_1">%s</xliff:g> است"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"بسیار کم"</item>
|
||||
<item msgid="9160252712018935449">"پایین"</item>
|
||||
<item msgid="6600217296998445656">"معمولی"</item>
|
||||
<item msgid="224968018667112211">"زیاد"</item>
|
||||
<item msgid="3676463174560550053">"بسیار زیاد"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"پیشفرض"</item>
|
||||
<item msgid="6629288844142484435">"مذکر"</item>
|
||||
<item msgid="5166591510034679431">"مؤنث"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1X"</item>
|
||||
<item msgid="7553786328764566293">"2X"</item>
|
||||
<item msgid="7682118582350353919">"3X"</item>
|
||||
<item msgid="5021322359195099970">"4X"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS -asetukset"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Oletusäänenkorkeus"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Äänen sukupuoli"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Puheen nopeuskerroin"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Asennetaan äänitietoja..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeakia ei ole asetettu tekstistä puheeksi -oletusmoottoriksi. Asetetaanko se oletusmoottoriksi?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Äänitietojen asentaminen eSpeakiin epäonnistui. Tarkista SD-kortti."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"eSpeakin käynnistäminen epäonnistui. Haluatko lähettää virheilmoituksen?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Virhe ladattaessa eSpeakia"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeakissa esiintyi latausvirhe. Haluatko lähettää ilmoituksen kehittäjälle?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Ei asetuksia saatavilla"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Oletusääni:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Asennettuja ääniä:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Yleiset TTS-asetukset"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS -asetukset"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Ladataan. Odota..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"eSpeakin lataaminen epäonnistui."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Tämä on näyte kielellä <xliff:g id="ID_1">%s</xliff:g> puhutusta tekstistä"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Hyvin matala"</item>
|
||||
<item msgid="9160252712018935449">"Matala"</item>
|
||||
<item msgid="6600217296998445656">"Normaali"</item>
|
||||
<item msgid="224968018667112211">"Korkea"</item>
|
||||
<item msgid="3676463174560550053">"Hyvin korkea"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Oletus"</item>
|
||||
<item msgid="6629288844142484435">"Mies"</item>
|
||||
<item msgid="5166591510034679431">"Nainen"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Paramètres de synthèse vocale eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Tonalité par défaut"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Sexe de la voix"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicateur de la cadence"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installation des données vocales en cours…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak n\'est pas votre moteur de synthèse vocale par défaut. Voulez-vous le définir en tant que tel maintenant ?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Échec de l\'installation des données vocales par eSpeak. Veuillez vérifier votre carte SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Désolé, impossible de lancer eSpeak. Voulez-vous envoyer un rapport d\'erreur ?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Erreur lors du chargement d\'eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Une erreur s\'est produite lors du chargement d\'eSpeak. Voulez-vous envoyer un rapport au développeur ?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Aucun paramètre disponible"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voix par défaut :"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Voix installées :"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Paramètres généraux de synthèse vocale"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Paramètres de synthèse vocale eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Chargement en cours, veuillez patienter…"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Échec du chargement d\'eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Voici un exemple de texte énoncé en <xliff:g id="ID_1">%s</xliff:g>."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Très grave"</item>
|
||||
<item msgid="9160252712018935449">"Grave"</item>
|
||||
<item msgid="6600217296998445656">"Normale"</item>
|
||||
<item msgid="224968018667112211">"Aiguë"</item>
|
||||
<item msgid="3676463174560550053">"Très aiguë"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Par défaut"</item>
|
||||
<item msgid="6629288844142484435">"Homme"</item>
|
||||
<item msgid="5166591510034679431">"Femme"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"x 1"</item>
|
||||
<item msgid="7553786328764566293">"x 2"</item>
|
||||
<item msgid="7682118582350353919">"x 3"</item>
|
||||
<item msgid="5021322359195099970">"x 4"</item>
|
||||
<item msgid="6621008032814909392">"x 5"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS सेटिंग"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"डिफ़ॉल्ट पिच"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"ध्वनि का लिंग"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"वाक् दर गुणक"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"ध्वनि डेटा इंस्टॉल किया जा रहा है…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak आपके डिफ़ॉल्ट पाठ-से-वाक् इंजन के रूप में सेट नहीं है. क्या आप इसे अभी सेट करना चाहते हैं?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak ध्वनि डेटा इंस्टॉल करने में विफल हुआ. कृपया अपना SD कार्ड जांचें."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"क्षमा करें, eSpeak प्रारंभ होने में विफल हुआ. क्या आप त्रुटि रिपोर्ट भेजना चाहते हैं?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"eSpeak लोड करने में त्रुटि"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak को लोड करते समय कोई त्रुटि आई. क्या आप डेवलपर को रिपोर्ट भेजना चाहते हैं?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"कोई सेटिंग उपलब्ध नहीं"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"डिफ़ॉल्ट ध्वनि:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"इंस्टॉल की गई ध्वनियां:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"सामान्य TTS सेटिंग"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS सेटिंग"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"लोड हो रहा है, कृपया प्रतीक्षा करें…"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"क्षमा करें, eSpeak प्रारंभ होने में विफल हुआ."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"यह <xliff:g id="ID_1">%s</xliff:g> में बोले गए पाठ का नमूना है"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"अत्यधिक कम"</item>
|
||||
<item msgid="9160252712018935449">"कम"</item>
|
||||
<item msgid="6600217296998445656">"सामान्य"</item>
|
||||
<item msgid="224968018667112211">"उच्च"</item>
|
||||
<item msgid="3676463174560550053">"अत्यधिक उच्च"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"डिफ़ॉल्ट"</item>
|
||||
<item msgid="6629288844142484435">"पुरुष"</item>
|
||||
<item msgid="5166591510034679431">"महिला"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"TTS postavke programa eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Zadana postavka visine tona"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Spol glasa"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplikator brzine govora"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Instaliranje glasovnih podataka..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Program eSpeak nije postavljen kao vaš zadani alat za pretvaranje teksta u govor. Želite li ga sada postaviti?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Program eSpeak nije uspio instalirati glasovne podatke. Provjerite svoju SD karticu."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Žao nam je, ali pokretanje programa eSpeak nije uspjelo. Želite li poslati izvješće o pogrešci?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Pogreška pri učitavanju programa eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Tijekom učitavanja programa eSpeak došlo je do pogreške. Želite li razvojnom programeru poslati izvješće?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Nema dostupnih postavki"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Zadani glas:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Broj instaliranih glasova:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Opće postavke TTS-a"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"TTS postavke programa eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Učitavanje. Pričekajte..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Žao nam je, ali učitavanje programa eSpeak nije uspjelo."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Ovo je primjer teksta izgovorenog na <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Vrlo niski"</item>
|
||||
<item msgid="9160252712018935449">"Niska"</item>
|
||||
<item msgid="6600217296998445656">"Uobičajena"</item>
|
||||
<item msgid="224968018667112211">"Visoka"</item>
|
||||
<item msgid="3676463174560550053">"Vrlo visoko"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Zadano"</item>
|
||||
<item msgid="6629288844142484435">"Muško"</item>
|
||||
<item msgid="5166591510034679431">"Ženski"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak -- A szövegfelismerő beállításai"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Alapértelmezett hangszín"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Szövegfelolvasó neme"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Beszédsebesség gyorsítása"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Hangadatok telepítése..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Nem az eSpeak az alapértelmezett szövegfelolvasó motor. Szeretné most beállítani?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Az eSpeak nem tudta telepíteni a hangadatokat. Ellenőrizze az SD-kártyát."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Sajnos az eSpeak nem indul. Szeretne hibajelentést küldeni?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Hiba az eSpeak betöltése során"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Az eSpeak hibát észlelt a betöltés során. Szeretne jelentést küldeni a fejlesztőnek?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Nincs elérhető beállítás"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Alapértelmezett hang:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Telepített hangok:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Általános szövegfelolvasási beállítások"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak -- A szövegfelismerő beállításai"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Betöltés folyamatban -- kérjük, várjon..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Sajnos az eSpeak nem töltődött be."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Ez egy <xliff:g id="ID_1">%s</xliff:g> nyelven felolvasott szöveg mintája."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Nagyon alacsony"</item>
|
||||
<item msgid="9160252712018935449">"Alacsony"</item>
|
||||
<item msgid="6600217296998445656">"Normál"</item>
|
||||
<item msgid="224968018667112211">"Magas"</item>
|
||||
<item msgid="3676463174560550053">"Nagyon magas"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Alapértelmezett"</item>
|
||||
<item msgid="6629288844142484435">"Férfi"</item>
|
||||
<item msgid="5166591510034679431">"Nő"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Setelan eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Tinggi nada default"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Gender suara"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Pengganda laju wicara"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Memasang data suara..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak tidak disetel sebagai mesin text-to-speech default Anda. Apakah Anda ingin menyetelnya sekarang?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak gagal memasang data suara. Periksa kartu SD Anda."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Maaf, eSpeak gagal dimulai. Apakah Anda ingin mengirim laporan kesalahan?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Kesalahan saat memuat eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak mengalami kesalahan saat memuat. Apakah Anda ingin melaporkan ke pengembang?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Tidak ada setelan yang tersedia"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Suara default:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Suara yang dipasang:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Setelan TTS umum"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Setelan eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Memuat, harap tunggu..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Maaf, eSpeak gagal dimuat."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Ini adalah contoh teks yang diucapkan di <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Sangat rendah"</item>
|
||||
<item msgid="9160252712018935449">"Rendah"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Tinggi"</item>
|
||||
<item msgid="3676463174560550053">"Sangat tinggi"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Default"</item>
|
||||
<item msgid="6629288844142484435">"Pria"</item>
|
||||
<item msgid="5166591510034679431">"Wanita"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Impostazioni di sintesi vocale eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Tono predefinito"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Sesso voce"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Moltiplicatore di velocità voce"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installazione dati vocali..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak non è impostato come motore di sintesi vocale predefinito. Impostarlo adesso?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Installazione dei dati vocali in eSpeak non riuscita. Controlla la tua scheda SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Spiacenti, avvio di eSpeak non riuscito. Inviare una segnalazione di errore?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Errore durante il caricamento di eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak ha rilevato un errore durante il caricamento. Inviare una segnalazione allo sviluppatore?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Nessuna impostazione disponibile"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voce predefinita:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Voci installate:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Impostazioni generali di sintesi vocale"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Impostazioni di sintesi vocale eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Caricamento, attendi..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Spiacenti, caricamento di eSpeak non riuscito."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Questo è un esempio di testo parlato in <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Molto basso"</item>
|
||||
<item msgid="9160252712018935449">"Basso"</item>
|
||||
<item msgid="6600217296998445656">"Normale"</item>
|
||||
<item msgid="224968018667112211">"Alto"</item>
|
||||
<item msgid="3676463174560550053">"Molto alto"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Predefinito"</item>
|
||||
<item msgid="6629288844142484435">"Uomo"</item>
|
||||
<item msgid="5166591510034679431">"Donna"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"הגדרות eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"ברירת מחדל לגובה צליל"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"מין הקול"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"מכפיל קצב דיבור"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"מתקין נתוני קול..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak אינו מוגדר כמנוע ברירת המחדל שלך לתכונת טקסט לדיבור. האם אתה רוצה להגדיר אותו כעת?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"התקנת נתוני הקול של eSpeak נכשלה. בדוק את כרטיס ה-SD שלך."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"מצטערים. הפעלת eSpeak נכשלה. האם אתה רוצה לשלוח דוח שגיאה?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"שגיאה בטעינת eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"אירעה שגיאה ב-eSpeak בעת הטעינה. האם אתה רוצה לשלוח דוח למפתח?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"אין הגדרות זמינות"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"ברירת מחדל לקול:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"קולות שהותקנו:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"הגדרות TTS כלליות"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"הגדרות eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"טוען. המתן..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"מצטערים. טעינת eSpeak נכשלה."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"זוהי דוגמה לקריאת טקסט ב-<xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"נמוך מאוד"</item>
|
||||
<item msgid="9160252712018935449">"נמוך"</item>
|
||||
<item msgid="6600217296998445656">"רגיל"</item>
|
||||
<item msgid="224968018667112211">"גבוה"</item>
|
||||
<item msgid="3676463174560550053">"גבוה מאוד"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"ברירת מחדל"</item>
|
||||
<item msgid="6629288844142484435">"זכר"</item>
|
||||
<item msgid="5166591510034679431">"נקבה"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeakテキスト読み上げ設定"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"デフォルトの声の高さ"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"声の性別"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"音声速度"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"音声データをインストールしています..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeakはデフォルトのテキスト読み上げエンジンに設定されていません。今すぐ設定しますか?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeakで音声データをインストールできませんでした。SDカードを確認してください。"</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"eSpeakを起動できませんでした。エラーレポートを送信しますか?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"eSpeakの読み込み中にエラーが発生しました"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeakの読み込み中にエラーが発生しました。デベロッパーにレポートを送信しますか?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"利用できる設定はありません"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"デフォルトの音声:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"インストールされている音声:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"テキスト読み上げの全般設定"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeakテキスト読み上げ設定"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"読み込んでいます。お待ちください..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"eSpeakを読み込めませんでした。"</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"<xliff:g id="ID_1">%s</xliff:g>で話すテキストサンプルです。"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"非常に低い"</item>
|
||||
<item msgid="9160252712018935449">"低い"</item>
|
||||
<item msgid="6600217296998445656">"標準"</item>
|
||||
<item msgid="224968018667112211">"高い"</item>
|
||||
<item msgid="3676463174560550053">"非常に高い"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"デフォルト"</item>
|
||||
<item msgid="6629288844142484435">"男性"</item>
|
||||
<item msgid="5166591510034679431">"女性"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"標準"</item>
|
||||
<item msgid="7553786328764566293">"2倍"</item>
|
||||
<item msgid="7682118582350353919">"3倍"</item>
|
||||
<item msgid="5021322359195099970">"4倍"</item>
|
||||
<item msgid="6621008032814909392">"5倍"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS 설정"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"기본 피치"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"음성 성별"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"음성 배속 비율"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"음성 데이터 설치 중..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak가 기본 TTS 엔진으로 설정되지 않았습니다. 지금 설정하시겠습니까?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak에서 음성 데이터를 설치하지 못했습니다. SD 카드를 확인하세요."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"죄송합니다, eSpeak를 시작할 수 없습니다. 오류를 신고하시겠습니까?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"eSpeak 로딩 오류"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"로드하는 중에 eSpeak에 오류가 발생했습니다. 개발자에게 신고하시겠습니까?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"이용 가능한 설정 없음"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"기본 음성:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"음성 설치됨:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"일반 TTS 설정"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS 설정"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"로드 중... 잠시 기다려 주세요."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"죄송합니다, eSpeak를 로드하지 못했습니다."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"<xliff:g id="ID_1">%s</xliff:g>로 읽은 텍스트 샘플입니다."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"매우 낮음"</item>
|
||||
<item msgid="9160252712018935449">"낮음"</item>
|
||||
<item msgid="6600217296998445656">"보통"</item>
|
||||
<item msgid="224968018667112211">"높음"</item>
|
||||
<item msgid="3676463174560550053">"매우 높음"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"기본값"</item>
|
||||
<item msgid="6629288844142484435">"남성"</item>
|
||||
<item msgid="5166591510034679431">"여성"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"„eSpeak“ TĮK nustatymai"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Numatytasis garso aukštis"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Balso lytis"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Kalbos rodiklio koeficientas"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Diegiami balso duomenys..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"„eSpeak“ nenustatytas kaip numatytasis teksto į kalbą variklis. Ar norite dabar nustatyti?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"„eSpeak“ nepavyko įdiegti balso duomenų. Patikrinkite SD kortelę."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Apgailestaujame, bet nepavyko paleisti „eSpeak“. Ar norite siųsti klaidos pranešimą?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Įkeliant „eSpeak“ įvyko klaida"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Įkeliant „eSpeak“ įvyko klaida. Ar norėtumėte siųsti pranešimą kūrėjui?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Nėra pasiekiamų nustatymų"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Numatytasis balsas:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Įdiegta balsų:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Bendrieji TĮK nustatymai"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"„eSpeak“ TĮK nustatymai"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Įkeliama, palaukite..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Apgailestaujame, bet nepavyko įkelti „eSpeak“."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Tai teksto, sakomo <xliff:g id="ID_1">%s</xliff:g>, pavyzdys"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Labai žemas"</item>
|
||||
<item msgid="9160252712018935449">"Žemas"</item>
|
||||
<item msgid="6600217296998445656">"Įprastas"</item>
|
||||
<item msgid="224968018667112211">"Aukštas"</item>
|
||||
<item msgid="3676463174560550053">"Labai aukštas"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Numatytasis"</item>
|
||||
<item msgid="6629288844142484435">"Vyras"</item>
|
||||
<item msgid="5166591510034679431">"Moteris"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1 x"</item>
|
||||
<item msgid="7553786328764566293">"2 x"</item>
|
||||
<item msgid="7682118582350353919">"3 x"</item>
|
||||
<item msgid="5021322359195099970">"4 x"</item>
|
||||
<item msgid="6621008032814909392">"5 x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak teksta pārveidošanas runā iestatījumi"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Balss noklusējuma augstums"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Balss īpašnieka dzimums"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Runas ātruma reizinātājs"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Notiek balss datu instalēšana..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Programma eSpeak nav iestatīta kā noklusējuma programma teksta pārveidošanai runā. Vai vēlaties to iestatīt tūlīt?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Programmā eSpeak neizdevās instalēt balss datus. Lūdzu, pārbaudiet SD karti."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Diemžēl programmu eSpeak neizdevās palaist. Vai vēlaties nosūtīt kļūdas ziņojumu?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Ielādējot programmu eSpeak, radās kļūda."</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Ielādējot programmu eSpeak, radās kļūda. Vai vēlaties par to ziņot izstrādātājam?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Iestatījumi nav pieejami."</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Noklusējuma balss:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Instalētie balss dati:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Vispārīgie teksta pārveidošanas runā iestatījumi"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak teksta pārveidošanas runā iestatījumi"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Notiek ielāde. Lūdzu, uzgaidiet..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Diemžēl programmu eSpeak neizdevās ielādēt."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Šis ir izrunāta teksta paraugs šādā valodā: <xliff:g id="ID_1">%s</xliff:g>."</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Ļoti zema"</item>
|
||||
<item msgid="9160252712018935449">"Zema"</item>
|
||||
<item msgid="6600217296998445656">"Vidēja"</item>
|
||||
<item msgid="224968018667112211">"Augsta"</item>
|
||||
<item msgid="3676463174560550053">"Ļoti augsta"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Noklusējums"</item>
|
||||
<item msgid="6629288844142484435">"Vīrietis"</item>
|
||||
<item msgid="5166591510034679431">"Sieviete"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Tetapan TTS eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Nada lalai"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Jantina suara"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Pengganda kadar ucapan"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Memasang data suara..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak tidak ditetapkan sebagai enjin teks-ke-pertuturan lalai anda. Adakah anda mahu menetapkannya sekarang?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak gagal memasang data suara. Sila periksa kad SD anda."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Maaf, eSpeak gagal untuk bermula. Adakah anda ingin menghantar laporan ralat?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Ralat memuatkan eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak mengalami ralat semasa dimuatkan. Adakah anda ingin menghantar laporan kepada pemaju?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Tiada tetapan tersedia"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Suara lalai:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Suara dipasang:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Tetapan TTS umum"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Tetapan TTS eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Memuatkan, sila tunggu..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Maaf, eSpeak gagal dimuatkan."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Ini adalah sampel teks yang dilafazkan dalam <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Sangat rendah"</item>
|
||||
<item msgid="9160252712018935449">"Rendah"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Tinggi"</item>
|
||||
<item msgid="3676463174560550053">"Sangat tinggi"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Lalai"</item>
|
||||
<item msgid="6629288844142484435">"Lelaki"</item>
|
||||
<item msgid="5166591510034679431">"Perempuan"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Innstillinger for eSpeak tekst-til-tale"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Standard tonehøyde"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Kjønn for stemmen"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplikator for talehastighet"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installerer taledata …"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak er ikke angitt som standardmotor for tekst-til-tale. Vil du gjøre det nå?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak mislyktes i å installere taledata. Kontroller SD-kortet ditt."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"eSpeak startet ikke. Vil du sende en feilrapport?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Feil under innlasting av eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Det oppsto en feil under innlastingen av eSpeak. Ønsker du å sende en rapport til utvikleren?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Ingen innstillinger er tilgjengelige"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Standardstemme:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Installerte stemmer:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Generelle tekst-til-tale-innstillinger"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Innstillinger for eSpeak tekst-til-tale"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Laster inn – vent litt …"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Beklager, eSpeak ble ikke lastet inn."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Dette er et teksteksempel lest opp på <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Veldig lav"</item>
|
||||
<item msgid="9160252712018935449">"Lav"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Høy"</item>
|
||||
<item msgid="3676463174560550053">"Veldig høy"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Standard"</item>
|
||||
<item msgid="6629288844142484435">"Mann"</item>
|
||||
<item msgid="5166591510034679431">"Kvinne"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak-instellingen voor tekst-naar-spraak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Standaard toonhoogte"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Geslacht van stem"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplier voor spreeksnelheid"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Spraakgegevens installeren..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak is niet ingesteld als uw standaardengine voor tekst-naar-spraak. Wilt u dit nu instellen?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak heeft geen stemgegevens geïnstalleerd. Controleer uw SD-kaart."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"eSpeak kan niet worden gestart. Wilt u een foutrapport verzenden?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Fout bij het laden van eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Er is een fout opgetreden tijdens het laden van eSpeak. Wilt u een foutrapport naar de ontwikkelaar verzenden?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Geen instellingen beschikbaar"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Standaardstem:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Geïnstalleerde stemmen:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Algemene instellingen voor tekst-naar-spraak"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak-instellingen voor tekst-naar-spraak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Laden, even geduld..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"eSpeak kan niet worden geladen."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Dit is een voorbeeld van tekst die is uitgesproken in het <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Zeer laag"</item>
|
||||
<item msgid="9160252712018935449">"Laag"</item>
|
||||
<item msgid="6600217296998445656">"Normaal"</item>
|
||||
<item msgid="224968018667112211">"Hoog"</item>
|
||||
<item msgid="3676463174560550053">"Zeer hoog"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Standaard"</item>
|
||||
<item msgid="6629288844142484435">"Man"</item>
|
||||
<item msgid="5166591510034679431">"Vrouw"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Ustawienia zamiany tekstu na mowę eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Domyślny ton"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Rodzaj głosu"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Mnożnik szybkości mowy"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Instalowanie danych głosowych..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak nie jest ustawiony jako domyślny mechanizm odczytywania tekstu. Czy chcesz ustawić go teraz?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Zainstalowanie danych głosowych przez eSpeak nie powiodło się. Sprawdź kartę SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Przepraszamy, uruchomienie eSpeak nie powiodło się. Czy chcesz wysłać raport o błędach?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Błąd podczas ładowania eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Podczas ładowania eSpeak wystąpił błąd. Czy chcesz wysłać raport do programisty?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Brak dostępnych ustawień"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Domyślny głos:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Zainstalowane głosy:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Ogólne ustawienia odczytywania tekstu"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Ustawienia eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Wczytywanie. Czekaj..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Przepraszamy, załadowanie eSpeak nie powiodło się."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"To jest przykład tekstu mówionego przy ustawieniu <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Bardzo niski"</item>
|
||||
<item msgid="9160252712018935449">"Niski"</item>
|
||||
<item msgid="6600217296998445656">"Normalny"</item>
|
||||
<item msgid="224968018667112211">"Wysoki"</item>
|
||||
<item msgid="3676463174560550053">"Bardzo wysoki"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Domyślny"</item>
|
||||
<item msgid="6629288844142484435">"Mężczyzna"</item>
|
||||
<item msgid="5166591510034679431">"Kobieta"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Definições do eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Tom predefinido"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Género da voz"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicador da taxa de voz"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"A instalar dados de voz..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"O eSpeak não está definido como o motor de síntese de voz predefinido. Pretende configurá-lo agora?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Ocorreu uma falha ao instalar os dados de voz do eSpeak. Verifique o cartão SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Ocorreu uma falha ao iniciar o eSpeak. Pretende enviar um relatório de erro?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Erro ao carregar o eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"O eSpeak encontrou um erro ao carregar. Pretende enviar um relatório para o programador?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Sem definições disponíveis"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voz predefinida:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Vozes instaladas:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Definições gerais do TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Definições do eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"A carregar; aguarde..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Ocorreu uma falha ao carregar o eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Este é um exemplo de texto falado em <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Muito baixo"</item>
|
||||
<item msgid="9160252712018935449">"Baixo"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Alto"</item>
|
||||
<item msgid="3676463174560550053">"Muito alto"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Predefinição"</item>
|
||||
<item msgid="6629288844142484435">"Masculina"</item>
|
||||
<item msgid="5166591510034679431">"Feminina"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Configurações de TTS do eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Frequência padrão do som"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Gênero para a voz"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicador da taxa de fala"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Instalando dados de voz..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"O eSpeak não está definido como seu mecanismo padrão de conversão de texto em voz. Deseja de configurá-lo agora?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Falha ao instalar os dados de voz do eSpeak. Verifique seu cartão SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Falha ao iniciar o eSpeak. Deseja enviar um relatório de erro?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Erro ao carregar o eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Ocorreu um erro ao carregar o eSpeak. Deseja enviar um relatório ao desenvolvedor?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Nenhuma configuração disponível"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voz padrão:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Vozes instaladas:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Configurações gerais de TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Configurações de TTS do eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Carregando. Aguarde…"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Falha ao carregar o eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Este é um exemplo de texto falado em <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Muito baixa"</item>
|
||||
<item msgid="9160252712018935449">"Baixa"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Alta"</item>
|
||||
<item msgid="3676463174560550053">"Muito alta"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Padrão"</item>
|
||||
<item msgid="6629288844142484435">"Masculino"</item>
|
||||
<item msgid="5166591510034679431">"Feminino"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Setări TTS eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Înălţime prestabilită"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Genul vocii"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplicator al ritmului vorbirii"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Se instalează datele vocale..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak nu este setat ca motor prestabilit de transformare a textului în vorbire. Doriţi să îl setaţi acum?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak nu a putut instala datele vocale. Verificaţi cardul SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Ne pare rău, dar pornirea eSpeak a eşuat. Doriţi să trimiteţi un raport despre eroare?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Eroare la încărcarea eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak a întâmpinat o eroare la încărcare. Doriţi să o raportaţi dezvoltatorului?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Nu există setări disponibile"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Voce prestabilită:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Voci instalate:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Setări TTS generale"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Setări TTS eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Se încarcă, aşteptaţi..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Ne pare rău, dar eSpeak nu s-a putut încărca."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Aceasta este o mostră de text vorbit în <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Foarte scăzută"</item>
|
||||
<item msgid="9160252712018935449">"Redusă"</item>
|
||||
<item msgid="6600217296998445656">"Normală"</item>
|
||||
<item msgid="224968018667112211">"Ridicată"</item>
|
||||
<item msgid="3676463174560550053">"Foarte ridicată"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Prestabilit"</item>
|
||||
<item msgid="6629288844142484435">"Masculin"</item>
|
||||
<item msgid="5166591510034679431">"Feminin"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Настройки eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Тон по умолчанию"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Параметры голоса"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Скорость речи"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Загрузка голосовых данных..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Установить eSpeak в качестве синтезатора речи по умолчанию?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Не удалось загрузить голосовые данные. Проверьте SD-карту."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Не удалось запустить eSpeak. Отправить отчет об ошибке?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Ошибка при загрузке eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"При загрузке eSpeak произошла ошибка. Сообщить об этом разработчику?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Настройки недоступны"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Язык по умолчанию:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Голосовых модулей:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Общие настройки"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Настройки eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Загрузка..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Не удалось загрузить eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Так синтезатор речи озвучивает <xliff:g id="ID_1">%s</xliff:g> текст"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Очень низкий"</item>
|
||||
<item msgid="9160252712018935449">"Низкий"</item>
|
||||
<item msgid="6600217296998445656">"Средний"</item>
|
||||
<item msgid="224968018667112211">"Высокий"</item>
|
||||
<item msgid="3676463174560550053">"Очень высокий"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"По умолчанию"</item>
|
||||
<item msgid="6629288844142484435">"Мужской"</item>
|
||||
<item msgid="5166591510034679431">"Женский"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Nastavenia modulu eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Predvolená výška hlasu"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Pohlavie"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Násobok rýchlosti reči"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Prebieha inštalácia hlasových dát..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Aplikácia eSpeak nie je nastavená ako predvolený nástroj na prevod textu na reč. Chcete ju nastaviť teraz?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Aplikácii eSpeak sa nepodarilo nainštalovať hlasové dáta. Skontrolujte kartu SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Je nám ľúto, aplikáciu eSpeak sa nepodarilo spustiť. Chcete odoslať chybovú správu?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Pri načítavaní aplikácie eSpeak sa vyskytla chyba"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Pri načítavaní aplikácie eSpeak sa vyskytla chyba. Chcete odoslať správu vývojárovi?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"K dispozícii nie sú žiadne nastavenia"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Predvolený hlas:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Počet nainštalovaných hlasov:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Všeobecné nastavenia modulu TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Nastavenia modulu eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Prebieha načítavanie, čakajte prosím..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Je nám ľúto, aplikáciu eSpeak sa nepodarilo načítať."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Toto je ukážkový text nahovorený v jazyku <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Veľmi hlboký"</item>
|
||||
<item msgid="9160252712018935449">"Hlboký"</item>
|
||||
<item msgid="6600217296998445656">"Normálny"</item>
|
||||
<item msgid="224968018667112211">"Vysoký"</item>
|
||||
<item msgid="3676463174560550053">"Veľmi vysoký"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Predvolené"</item>
|
||||
<item msgid="6629288844142484435">"Mužský"</item>
|
||||
<item msgid="5166591510034679431">"Ženský"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Nastavitve pretvorbe besedila v govor v mehanizmu eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Privzeta višina tona"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Spol glasu:"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Množitelj hitrosti govora"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Namestitev glasovnih podatkov ..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Mehanizem eSpeak ni nastavljen kot privzeti za pretvorbo besedila v govor. Ali ga želite zdaj nastaviti za privzetega?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Mehanizmu eSpeak ni uspelo namestiti glasovnih podatkov. Preverite kartico SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Mehanizma eSpeak ni bilo mogoče zagnati. Ali želite poslati poročilo o napaki?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Napaka pri nalaganju mehanizma eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"V mehanizmu eSpeak je prišlo do napake med nalaganjem. Ali želite poslati poročilo razvijalcu?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Ni razpoložljivih nastavitev"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Privzeti glas:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Št. nameščenih glasov:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Splošne nastavitve pretvorbe besedila v govor"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Nastavitve pretvorbe besedila v govor v mehanizmu eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Nalaganje, počakajte trenutek ..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Mehanizma eSpeak ni bilo mogoče naložiti."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"To je vzorec besedila, izgovorjen v <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Zelo nizek"</item>
|
||||
<item msgid="9160252712018935449">"Nizek"</item>
|
||||
<item msgid="6600217296998445656">"Običajen"</item>
|
||||
<item msgid="224968018667112211">"Visok"</item>
|
||||
<item msgid="3676463174560550053">"Zelo visok"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Privzeto"</item>
|
||||
<item msgid="6629288844142484435">"Moški"</item>
|
||||
<item msgid="5166591510034679431">"Ženski"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1 x"</item>
|
||||
<item msgid="7553786328764566293">"2 x"</item>
|
||||
<item msgid="7682118582350353919">"3 x"</item>
|
||||
<item msgid="5021322359195099970">"4 x"</item>
|
||||
<item msgid="6621008032814909392">"5 x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS подешавања"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Подразумевани ниво"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Пол гласа"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Множилац брзине говора"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Инсталирање гласовних података..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak није подешен као подразумевани механизам за пребацивање текста у говор. Да ли желите да га подесите сада?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak није успео да инсталира податке о гласу. Проверите SD картицу."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Жао нам је, eSpeak није покренут. Да ли желите да пошаљете извештај о грешци?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Грешка при учитавању eSpeak-а"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Дошло је до грешке при учитавању eSpeak-а. Да ли желите да пошаљете извештај програмеру?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Нема доступних подешавања"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Подразумевани глас:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Инсталирани су гласови:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Општа подешавања TTS-а"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS подешавања"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Учитавање, сачекајте..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Жао нам је, eSpeak није учитан."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Ово је пример текста који је изговорен на језику <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Веома низак"</item>
|
||||
<item msgid="9160252712018935449">"Низак"</item>
|
||||
<item msgid="6600217296998445656">"Нормалнан"</item>
|
||||
<item msgid="224968018667112211">"Висок"</item>
|
||||
<item msgid="3676463174560550053">"Веома висок"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Подразумевано"</item>
|
||||
<item msgid="6629288844142484435">"Мушки"</item>
|
||||
<item msgid="5166591510034679431">"Женски"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"TTS-inställningar för eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Standardinställning för tonhöjd"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Kön på den som talar:"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplikator för talhastighet"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Installerar röstdata ..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Du har inte angett eSpeak som din standardmotor för text-till-tal. Vill du göra det nu?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Det gick inte att installera röstsdata i eSpeak. Kontrollera SD-kortet."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Det gick tyvärr inte att starta eSpeak. Vill du skicka en felrapport?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Fel vid inläsning av eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Ett fel uppstod när eSpeak lästes in. Vill du skicka en rapport till utvecklaren?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Det finns inga inställningar"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Standardröst:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Installerade röster:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Allmänna TTS-inställningar"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"TTS-inställningar för eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Läser in, vänta …"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Det gick tyvärr inte att läsa in eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Detta är ett textexempel som läses på <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Mycket låg"</item>
|
||||
<item msgid="9160252712018935449">"Låg"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Hög"</item>
|
||||
<item msgid="3676463174560550053">"Mycket hög"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Standard"</item>
|
||||
<item msgid="6629288844142484435">"Man"</item>
|
||||
<item msgid="5166591510034679431">"Kvinna"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"x 1"</item>
|
||||
<item msgid="7553786328764566293">"x 2"</item>
|
||||
<item msgid="7682118582350353919">"x 3"</item>
|
||||
<item msgid="5021322359195099970">"x 4"</item>
|
||||
<item msgid="6621008032814909392">"x 5"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Mipangilio ya eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Sauti chaguo-msingi"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Jinsia ya sauti"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Kizidisha kiwango cha usemi"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Inasakinisha data ya sauti..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak haijawekwa kama injini yako msingi ya maandishi-hadi-usemi. Je, ungependa kuiweka sasa?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak imeshindwa kusakinisha data ya sauti. Tafadhali kagua kadi yako ya SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Samahani, eSpeak imeshindwa kuanza. Je, ungependa kutuma ripoti ya hitilafu?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Hitilafu ya kupakia eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak ilikumbana na hitilafu wakati wa kupakia. Je, ungependa kutuma ripoti kwa msanidi programu?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Hakuna mipangilio inayopatikana"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Sauti chaguo-msingi:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Sauti zimesakinishwa:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Mipangilio ya kawaida ya TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Mipangilio ya eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Inapakia, tafadhali subiri..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Samahani, eSpeak imeshindwa kupakia."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Hii ni sampuli ya maandishi yaliyonenwa katika <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Chini sana"</item>
|
||||
<item msgid="9160252712018935449">"Chini"</item>
|
||||
<item msgid="6600217296998445656">"Kawaida"</item>
|
||||
<item msgid="224968018667112211">"Juu"</item>
|
||||
<item msgid="3676463174560550053">"Juu sana"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Chaguo msingi"</item>
|
||||
<item msgid="6629288844142484435">"Mwanamume"</item>
|
||||
<item msgid="5166591510034679431">"Mwanamke"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"การตั้งค่า TTS ของ eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"ระดับเสียงเริ่มต้น"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"เพศของเสียง:"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"ตัวคูณความเร็วการพูด"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"กำลังติดตั้งข้อมูลเสียง..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak ไม่ได้ถูกกำหนดให้เป็นเครื่องมืออ่านออกเสียงข้อความเริ่มต้นของคุณ คุณต้องการกำหนดเดี๋ยวนี้หรือไม่"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak ไม่สามารถติดตั้งข้อมูลเสียง โปรดตรวจสอบการ์ด SD ของคุณ"</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"ขออภัย eSpeak ไม่สามารถเริ่มต้นทำงาน คุณต้องการส่งรายงานข้อผิดพลาดหรือไม่"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"เกิดข้อผิดพลาดขณะที่โหลด eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak พบข้อผิดพลาดขณะที่กำลังโหลด คุณต้องการส่งรายงานไปยังนักพัฒนาซอฟต์แวร์หรือไม่"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"ไม่มีการตั้งค่า"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"เสียงเริ่มต้น:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"เสียงที่ติดตั้ง:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"การตั้งค่า TTS ทั่วไป"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"การตั้งค่า TTS ของ eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"กำลังโหลด โปรดรอสักครู่..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"ขออภัย eSpeak ไม่สามารถโหลด"</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"นี่เป็นตัวอย่างของข้อความที่พูดใน <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"ต่ำมาก"</item>
|
||||
<item msgid="9160252712018935449">"ต่ำ"</item>
|
||||
<item msgid="6600217296998445656">"ปกติ"</item>
|
||||
<item msgid="224968018667112211">"สูง"</item>
|
||||
<item msgid="3676463174560550053">"สูงมาก"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"ค่าเริ่มต้น"</item>
|
||||
<item msgid="6629288844142484435">"ชาย"</item>
|
||||
<item msgid="5166591510034679431">"หญิง"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Mga Setting sa TTS ng eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Default na pitch"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Kasarian ng boses"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Multiplier ng rate ng pananalita"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Ini-install ang data ng boses…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"Hindi nakatakda ang eSpeak bilang iyong default na text-to-speech engine. Gusto mo ba itong itakda ngayon?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"Nabigong mag-install ng data ng boses ang eSpeak. Pakisuri ang iyong SD card."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Paumanhin, nabigong magsimula ang eSpeak. Gusto mo bang magpadala ng ulat ng error?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Error sa pag-load ng eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Nakatagpo ng isang error ang eSpeak habang naglo-load. Gusto mo bang magpadala ng ulat sa developer?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Walang available na mga setting"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Default na boses:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Mga boses na na-install:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Pangkalahatang mga setting ng TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Mga setting ng TTS ng eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Naglo-load, mangyaring maghintay..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Paumanhin, nabigong mag-load ang eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Isa itong sample ng tekstong binibigkas sa <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Napakababa"</item>
|
||||
<item msgid="9160252712018935449">"Mababa"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"Mataas"</item>
|
||||
<item msgid="3676463174560550053">"Napakataas"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Default"</item>
|
||||
<item msgid="6629288844142484435">"Lalaki"</item>
|
||||
<item msgid="5166591510034679431">"Babae"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak TTS Ayarları"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Varsayılan ses kalınlığı"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Sesin cinsiyeti"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Konuşma hızı çarpanı"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Ses verileri yükleniyor..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak varsayılan metin konuşma motorunuz olarak ayarlanmadı. Şimdi ayarlamak ister misiniz?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak ses verisini yükleyemedi. Lütfen SD kartınızı kontrol edin."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Maalesef, eSpeak başlatılamadı. Hata raporu göndermek ister misiniz?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"eSpeak yüklenirken hata oluştu"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak yüklenirken bir hatayla karşılaştı. Geliştiriciye rapor göndermek ister misiniz?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Kullanılabilir ayar yok"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Varsayılan ses:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Yüklenen ses sayısı:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Genel TTS ayarları"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak TTS ayarları"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Yükleniyor, lütfen bekleyin..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Maalesef eSpeak yüklenemedi."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Bu, <xliff:g id="ID_1">%s</xliff:g> dilinde seslendirilen örnek bir metindir"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Çok kalın ses"</item>
|
||||
<item msgid="9160252712018935449">"Kalın ses"</item>
|
||||
<item msgid="6600217296998445656">"Normal"</item>
|
||||
<item msgid="224968018667112211">"İnce ses"</item>
|
||||
<item msgid="3676463174560550053">"Çok ince ses"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Varsayılan"</item>
|
||||
<item msgid="6629288844142484435">"Erkek"</item>
|
||||
<item msgid="5166591510034679431">"Kadın"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Налаштування TTS eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Висота звуку за умовчанням"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Стать за голосом"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Коефіцієнт темпу мовлення"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Встановлення голосових даних..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak не встановлено як систему синтезу мовлення за умовчанням. Установити зараз?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak не вдалося встановити голосові дані. Перевірте карту SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Не вдалося запустити eSpeak. Надіслати звіт про помилку?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Помилка завантаження eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"Під час завантаження eSpeak сталася помилка. Надіслати звіт розробникові?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Немає доступних налаштувань"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Мова за умовчанням:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Установлено голосів:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Загальні налаштування TTS"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Налаштування TTS eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Триває завантаження. Зачекайте..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Не вдалося завантажити eSpeak."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Це зразок тексту такою мовою: <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Дуже низька"</item>
|
||||
<item msgid="9160252712018935449">"Низька"</item>
|
||||
<item msgid="6600217296998445656">"Звичайна"</item>
|
||||
<item msgid="224968018667112211">"Висока"</item>
|
||||
<item msgid="3676463174560550053">"Дуже висока"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"За умовчанням"</item>
|
||||
<item msgid="6629288844142484435">"Чоловіча"</item>
|
||||
<item msgid="5166591510034679431">"Жіноча"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Cài đặt chuyển văn bản thành giọng nói eSpeak"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Độ cao thấp mặc định"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Giới tính của giọng nói"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Bội số tốc độ đọc"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Đang cài đặt dữ liệu thoại…"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak chưa được thiết lập làm công cụ chuyển văn bản thành giọng nói mặc định của bạn. Bạn có muốn thiết lập bây giờ không?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak không thể cài đặt dữ liệu thoại. Vui lòng kiểm tra thẻ SD của bạn."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Rất tiếc, không thể khởi động eSpeak. Bạn có muốn gửi báo cáo lỗi không?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Lỗi khi tải eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"eSpeak đã gặp lỗi khi tải. Bạn có muốn gửi báo cáo tới nhà phát triển không?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Không có sẵn cài đặt nào"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Giọng nói mặc định:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Số lượng thoại đã được cài đặt:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Cài đặt chung chuyển văn bản thành giọng nói"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Cài đặt chuyển văn bản thành giọng nói eSpeak"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Đang tải, vui lòng chờ…"</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Rất tiếc, eSpeak không thể tải."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Đây là mẫu văn bản được đọc bằng <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Rất thấp"</item>
|
||||
<item msgid="9160252712018935449">"Thấp"</item>
|
||||
<item msgid="6600217296998445656">"Thường"</item>
|
||||
<item msgid="224968018667112211">"Cao"</item>
|
||||
<item msgid="3676463174560550053">"Rất cao"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Mặc định"</item>
|
||||
<item msgid="6629288844142484435">"Nam"</item>
|
||||
<item msgid="5166591510034679431">"Nữ"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak 文字转语音 (TTS) 设置"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"默认声调"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"语音性别"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"语速倍数"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"正在安装语音数据..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"未将 eSpeak 设置为文字转语音的默认引擎。要立即设置吗?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak 无法安装语音数据。请检查您的 SD 卡。"</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"很抱歉,eSpeak 启动失败。要发送错误报告吗?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"加载 eSpeak 时出错"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"加载 eSpeak 时出错。要向开发人员发送报告吗?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"无可用设置"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"默认语音:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"已安装的语音库数量:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"文字转语音 (TTS) 常规设置"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak 文字转语音 (TTS) 设置"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"正在加载,请稍候..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"很抱歉,eSpeak 加载失败。"</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"正在朗读的是<xliff:g id="ID_1">%s</xliff:g>的语音示例"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"很低"</item>
|
||||
<item msgid="9160252712018935449">"低"</item>
|
||||
<item msgid="6600217296998445656">"正常"</item>
|
||||
<item msgid="224968018667112211">"高"</item>
|
||||
<item msgid="3676463174560550053">"很高"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"默认"</item>
|
||||
<item msgid="6629288844142484435">"男"</item>
|
||||
<item msgid="5166591510034679431">"女"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1 倍"</item>
|
||||
<item msgid="7553786328764566293">"2 倍"</item>
|
||||
<item msgid="7682118582350353919">"3 倍"</item>
|
||||
<item msgid="5021322359195099970">"4 倍"</item>
|
||||
<item msgid="6621008032814909392">"5 倍"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"eSpeak 文字轉語音設定"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"預設音調"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"語音性別"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"語音速率調節係數"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"正在安裝語音資料..."</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"eSpeak 尚未設為您的預設文字轉語音引擎。您要立即設定嗎?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"eSpeak 無法安裝語音資料。請檢查您的 SD 卡。"</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"很抱歉,無法啟動 eSpeak。您要回報錯誤嗎?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"載入 eSpeak 時發生錯誤"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"載入 eSpeak 時發生錯誤。您要向開發人員回報嗎?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"沒有可用的設定"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"預設語音:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"已安裝的語音:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"文字轉語音一般設定"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"eSpeak 文字轉語音設定"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"載入中,請稍候..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"很抱歉,無法載入 eSpeak。"</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"這是「<xliff:g id="ID_1">%s</xliff:g>」的語音測試範例"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"非常低"</item>
|
||||
<item msgid="9160252712018935449">"低"</item>
|
||||
<item msgid="6600217296998445656">"正常"</item>
|
||||
<item msgid="224968018667112211">"高"</item>
|
||||
<item msgid="3676463174560550053">"非常高"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"預設"</item>
|
||||
<item msgid="6629288844142484435">"男性"</item>
|
||||
<item msgid="5166591510034679431">"女性"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="tts_settings_label" msgid="2696301846672491410">"Izilungiselelo ze-eSpeak TTS"</string>
|
||||
<string name="setting_default_pitch" msgid="2063082697363767286">"Izinga lezwi olithola likhona"</string>
|
||||
<string name="setting_default_gender" msgid="8721577045178419807">"Ubulili bezwi"</string>
|
||||
<string name="setting_default_rate" msgid="3255750767876184606">"Okuphindaphinda ukushesha kwenkulumo"</string>
|
||||
<string name="installing_voice_data" msgid="1199950160686799120">"Ifaka idatha yezwi"</string>
|
||||
<string name="set_default_message" msgid="651325122612558377">"I-eSpeak ayisethwanga njengenjini yombhalo-uya-enkulumweni oyithola ikhona. Ingabe ungathanda ukuyisetha njengamanje?"</string>
|
||||
<string name="voice_data_failed_message" msgid="8631894446950552673">"I-eSpeak yehlulekile ukulayisha idatha yezwi. Uyacelwa ukuthi ubheke ikhadi lakho le-SD."</string>
|
||||
<string name="error_message" msgid="7565522727556545634">"Uxolo, i-eSpeak yehlulekile ukuqala. Ingabe ungathanda ukuthumela umbiko wephutha?"</string>
|
||||
<string name="loading_failed_title" msgid="511566315504616423">"Iphutha lokulayisha i-eSpeak"</string>
|
||||
<string name="loading_failed_message" msgid="5873070263506367474">"I-eSpeak ihlangabezane nenkinga ngesikhathi ilayisha. Ungathanda ukuthumelela umsunguli umbiko?"</string>
|
||||
<string name="no_settings" msgid="1351437843962431135">"Azikho izilungiselelo ezikhona"</string>
|
||||
<string name="current_tts_locale" msgid="3069242116489679835">"Izwi olithola likhona:"</string>
|
||||
<string name="available_voices" msgid="1405969819028957410">"Amazwi afakiwe:"</string>
|
||||
<string name="tts_settings" msgid="8094374695950898637">"Izilungiselelo ze-TTS ezejwayelekile"</string>
|
||||
<string name="engine_settings" msgid="15960710549009350">"Izilungiselelo ze-eSpeak TTS"</string>
|
||||
<string name="loading" msgid="1624831854302260352">"Iyalayisha, ucelwa ukuthi ulinde..."</string>
|
||||
<string name="loading_failed" msgid="8965859207758593651">"Uxolo, i-eSpeak yehlulekile ukulayisha."</string>
|
||||
<string name="sample_text" msgid="7870499751575948178">"Lena yisampula yombhalo okhulunywa kwi <xliff:g id="ID_1">%s</xliff:g>"</string>
|
||||
<string-array name="default_pitch_entries">
|
||||
<item msgid="5761992954594669467">"Phansi kakhulu"</item>
|
||||
<item msgid="9160252712018935449">"Phansi"</item>
|
||||
<item msgid="6600217296998445656">"Okulingene"</item>
|
||||
<item msgid="224968018667112211">"Phezulu"</item>
|
||||
<item msgid="3676463174560550053">"Phezulu kakhulu"</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_entries">
|
||||
<item msgid="6067066045311564033">"Okuthola kukhona"</item>
|
||||
<item msgid="6629288844142484435">"Owesilisa"</item>
|
||||
<item msgid="5166591510034679431">"Owesifazane"</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_entries">
|
||||
<item msgid="2422192643694183245">"1x"</item>
|
||||
<item msgid="7553786328764566293">"2x"</item>
|
||||
<item msgid="7682118582350353919">"3x"</item>
|
||||
<item msgid="5021322359195099970">"4x"</item>
|
||||
<item msgid="6621008032814909392">"5x"</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string-array name="default_pitch_values">
|
||||
<item>50</item>
|
||||
<item>75</item>
|
||||
<item>100</item>
|
||||
<item>150</item>
|
||||
<item>200</item>
|
||||
</string-array>
|
||||
<string-array name="default_rate_values">
|
||||
<item>100</item>
|
||||
<item>200</item>
|
||||
<item>300</item>
|
||||
<item>400</item>
|
||||
<item>500</item>
|
||||
</string-array>
|
||||
<string-array name="default_gender_values">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
</string-array>
|
||||
|
||||
<string name="afr">haai</string>
|
||||
<string name="bos">Zdravo</string>
|
||||
<string name="zho">你好</string>
|
||||
<string name="hrv">bok</string>
|
||||
<string name="ces">ahoj</string>
|
||||
<string name="nld">hallo</string>
|
||||
<string name="eng">hello</string>
|
||||
<string name="epo">saluton</string>
|
||||
<string name="fin">hei</string>
|
||||
<string name="fra">bonjour</string>
|
||||
<string name="deu">hallo</string>
|
||||
<string name="ell">γεια σου</string>
|
||||
<string name="hin">नमस्ते</string>
|
||||
<string name="hun">jo napot</string>
|
||||
<string name="isl">góðan dag</string>
|
||||
<string name="ind">halo</string>
|
||||
<string name="ita">ciao</string>
|
||||
<string name="kur">roj bahsh</string>
|
||||
<string name="lat">salve</string>
|
||||
<string name="mkd">Zdravo</string>
|
||||
<string name="nor">hallo</string>
|
||||
<string name="pol">witaj</string>
|
||||
<string name="por">Olá</string>
|
||||
<string name="ron">salut</string>
|
||||
<string name="rus">привет</string>
|
||||
<string name="srp">здраво</string>
|
||||
<string name="slk">ahoj</string>
|
||||
<string name="spa">hola</string>
|
||||
<string name="swa">Jambo</string>
|
||||
<string name="swe">hej</string>
|
||||
<string name="tam">vanakkam</string>
|
||||
<string name="tur">merhaba</string>
|
||||
<string name="vie">xin chao</string>
|
||||
<string name="cym">shwmae</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,132 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
<!--
|
||||
Source: App icon label.
|
||||
Description: The name of the application.
|
||||
-->
|
||||
<string name="app_name" translatable="false">eSpeak TTS</string>
|
||||
<!--
|
||||
Source: Activity title.
|
||||
Description: Title for the Settings activity.
|
||||
-->
|
||||
<string name="tts_settings_label">eSpeak TTS Settings</string>
|
||||
<!--
|
||||
Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.
|
||||
-->
|
||||
<string name="setting_default_pitch">Default pitch</string>
|
||||
<!--
|
||||
Source: Preference title.
|
||||
Description: Title for the preference that controls default voice gender.
|
||||
-->
|
||||
<string name="setting_default_gender">Voice gender</string>
|
||||
<!--
|
||||
Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate multiplier.
|
||||
-->
|
||||
<string name="setting_default_rate">Speech rate multiplier</string>
|
||||
<!--
|
||||
Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.
|
||||
-->
|
||||
<string name="installing_voice_data">Installing voice data…</string>
|
||||
<!--
|
||||
Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.
|
||||
-->
|
||||
<string name="set_default_message">eSpeak is not set as your default text-to-speech engine. Would you like to set it now?</string>
|
||||
<!--
|
||||
Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.
|
||||
-->
|
||||
<string name="voice_data_failed_message">eSpeak failed to install voice data. Please check your SD card.</string>
|
||||
<!--
|
||||
Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.
|
||||
-->
|
||||
<string name="error_message">Sorry, eSpeak failed to start. Would you like to send an error report?</string>
|
||||
<!--
|
||||
Source: Dialog title.
|
||||
Description: Alert dialog telling the user that an error occurred while loading eSpeak.
|
||||
-->
|
||||
<string name="loading_failed_title">Error loading eSpeak</string>
|
||||
<!--
|
||||
Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an error occurred while loading eSpeak.
|
||||
-->
|
||||
<string name="loading_failed_message">eSpeak encountered an error while loading. Would you like to send a report to the developer?</string>
|
||||
<!--
|
||||
Source: Displayed in the Settings activity.
|
||||
Description: Text shown when there are no settings available for the user to change.
|
||||
-->
|
||||
<string name="no_settings">No settings available</string>
|
||||
<!--
|
||||
Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.
|
||||
-->
|
||||
<string name="current_tts_locale">Default voice:</string>
|
||||
<!--
|
||||
Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.
|
||||
-->
|
||||
<string name="available_voices">Voices installed:</string>
|
||||
<!--
|
||||
Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.
|
||||
-->
|
||||
<string name="tts_settings">General TTS settings</string>
|
||||
<!--
|
||||
Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.
|
||||
-->
|
||||
<string name="engine_settings">eSpeak TTS settings</string>
|
||||
<!--
|
||||
Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.
|
||||
-->
|
||||
<string name="loading">Loading, please wait…</string>
|
||||
<!--
|
||||
Source: Label text.
|
||||
Description: Label informing the user that eSpeak failed to load.
|
||||
-->
|
||||
<string name="loading_failed">Sorry, eSpeak failed to load.</string>
|
||||
<!--
|
||||
Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.
|
||||
-->
|
||||
<string name="sample_text">This is a sample of text spoken in <xliff:g>%s</xliff:g></string>
|
||||
<!--
|
||||
Source: Pitch preference labels.
|
||||
Description: Labels for possible pitch values.
|
||||
-->
|
||||
<string-array name="default_pitch_entries">
|
||||
<item>Very low</item>
|
||||
<item>Low</item>
|
||||
<item>Normal</item>
|
||||
<item>High</item>
|
||||
<item>Very high</item>
|
||||
</string-array>
|
||||
<!--
|
||||
Source: Gender preference labels.
|
||||
Description: Labels for possible gender values.
|
||||
-->
|
||||
<string-array name="default_gender_entries">
|
||||
<item>Default</item>
|
||||
<item>Male</item>
|
||||
<item>Female</item>
|
||||
</string-array>
|
||||
<!--
|
||||
Source: Rate preference labels.
|
||||
Description: Labels for possible rate multiplier values.
|
||||
-->
|
||||
<string-array name="default_rate_entries">
|
||||
<item>1x</item>
|
||||
<item>2x</item>
|
||||
<item>3x</item>
|
||||
<item>4x</item>
|
||||
<item>5x</item>
|
||||
</string-array>
|
||||
<string name="update_voices">Update voices</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
|
||||
<ListPreference
|
||||
android:defaultValue="100"
|
||||
android:entries="@array/default_pitch_entries"
|
||||
android:entryValues="@array/default_pitch_values"
|
||||
android:key="default_pitch"
|
||||
android:summary="%s"
|
||||
android:title="@string/setting_default_pitch" />
|
||||
<ListPreference
|
||||
android:defaultValue="100"
|
||||
android:entries="@array/default_rate_entries"
|
||||
android:entryValues="@array/default_rate_values"
|
||||
android:key="default_rate"
|
||||
android:summary="%s"
|
||||
android:title="@string/setting_default_rate" />
|
||||
<ListPreference
|
||||
android:defaultValue="0"
|
||||
android:entries="@array/default_gender_entries"
|
||||
android:entryValues="@array/default_gender_values"
|
||||
android:key="default_gender"
|
||||
android:summary="%s"
|
||||
android:title="@string/setting_default_gender" />
|
||||
|
||||
</PreferenceScreen>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<tts-engine
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:settingsActivity="com.googlecode.eyesfree.espeak.TtsSettingsActivity" />
|
||||
@@ -0,0 +1,172 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.speech.tts.TextToSpeech.Engine;
|
||||
import android.util.Log;
|
||||
|
||||
import com.googlecode.eyesfree.espeak.SpeechSynthesis.SynthReadyCallback;
|
||||
import com.googlecode.eyesfree.espeak.SpeechSynthesis.Voice;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
public class CheckVoiceData extends Activity {
|
||||
private static final String TAG = "eSpeakTTS";
|
||||
|
||||
private static final int REQUEST_DOWNLOAD = 1;
|
||||
|
||||
/** Resources required for eSpeak to run correctly. */
|
||||
private static final String[] BASE_RESOURCES = {
|
||||
"intonations", "phondata", "phonindex", "phontab", "en_dict", "voices/en/en-us"
|
||||
};
|
||||
|
||||
public static File getDataPath(Context context) {
|
||||
return new File(context.getDir("voices", MODE_WORLD_READABLE), "espeak-data");
|
||||
}
|
||||
|
||||
public static boolean hasBaseResources(Context context) {
|
||||
final File dataPath = getDataPath(context);
|
||||
|
||||
for (String resource : BASE_RESOURCES) {
|
||||
final File resourceFile = new File(dataPath, resource);
|
||||
|
||||
if (!resourceFile.exists()) {
|
||||
Log.e(TAG, "Missing base resource: " + resourceFile.getPath());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
checkForVoices(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
switch (requestCode) {
|
||||
case REQUEST_DOWNLOAD:
|
||||
checkForVoices(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkForVoices(boolean attemptedInstall) {
|
||||
final File dataPath = getDataPath(this);
|
||||
|
||||
ArrayList<String> availableLanguages = new ArrayList<String>();
|
||||
ArrayList<String> unavailableLanguages = new ArrayList<String>();
|
||||
|
||||
if (!hasBaseResources(this)) {
|
||||
if (!attemptedInstall) {
|
||||
downloadVoiceData();
|
||||
return;
|
||||
}
|
||||
// No base resource, can't load available voices.
|
||||
unavailableLanguages.add(Locale.ENGLISH.toString());
|
||||
returnResults(Engine.CHECK_VOICE_DATA_MISSING_DATA, dataPath, availableLanguages,
|
||||
unavailableLanguages);
|
||||
return;
|
||||
}
|
||||
|
||||
final SpeechSynthesis engine = new SpeechSynthesis(this, mSynthReadyCallback);
|
||||
final List<Voice> voices = engine.getAvailableVoices();
|
||||
|
||||
for (Voice voice : voices) {
|
||||
availableLanguages.add(voice.toString());
|
||||
}
|
||||
|
||||
final ArrayList<String> checkFor = getIntent().getStringArrayListExtra(
|
||||
TextToSpeech.Engine.EXTRA_CHECK_VOICE_DATA_FOR);
|
||||
|
||||
if (checkFor != null && !checkFor.isEmpty()) {
|
||||
final Set<String> checkForSet = new HashSet<String>(checkFor);
|
||||
|
||||
availableLanguages = filter(availableLanguages, checkForSet);
|
||||
unavailableLanguages = filter(unavailableLanguages, checkForSet);
|
||||
}
|
||||
|
||||
returnResults(Engine.CHECK_VOICE_DATA_PASS, dataPath, availableLanguages,
|
||||
unavailableLanguages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches the voice data installer.
|
||||
*/
|
||||
private void downloadVoiceData() {
|
||||
final Intent checkIntent = new Intent(this, DownloadVoiceData.class);
|
||||
|
||||
startActivityForResult(checkIntent, REQUEST_DOWNLOAD);
|
||||
}
|
||||
|
||||
private void returnResults(int result, File dataPath, ArrayList<String> availableLanguages,
|
||||
ArrayList<String> unavailableLanguages) {
|
||||
final Intent returnData = new Intent();
|
||||
returnData.putStringArrayListExtra(Engine.EXTRA_AVAILABLE_VOICES, availableLanguages);
|
||||
returnData.putStringArrayListExtra(Engine.EXTRA_UNAVAILABLE_VOICES, unavailableLanguages);
|
||||
|
||||
// Don't bother returning Engine.EXTRA_VOICE_DATA_FILES,
|
||||
// Engine.EXTRA_VOICE_DATA_FILES_INFO, or
|
||||
// Engine.EXTRA_VOICE_DATA_ROOT_DIRECTORY
|
||||
// because they're don't seem necessary.
|
||||
|
||||
setResult(result, returnData);
|
||||
finish();
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters a given array list, maintaining only elements that are in the
|
||||
* constraint. Returns a new list containing only the filtered elements.
|
||||
*/
|
||||
private ArrayList<String> filter(ArrayList<String> in, Set<String> constraint) {
|
||||
final ArrayList<String> out = new ArrayList<String>(constraint.size());
|
||||
|
||||
for (String s : in) {
|
||||
if (constraint.contains(s)) {
|
||||
out.add(s);
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
private final SynthReadyCallback mSynthReadyCallback = new SynthReadyCallback() {
|
||||
@Override
|
||||
public void onSynthDataReady(byte[] audioData) {
|
||||
// Do nothing.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSynthDataComplete() {
|
||||
// Do nothing.
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.view.accessibility.AccessibilityEvent;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.LinkedList;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipInputStream;
|
||||
|
||||
public class DownloadVoiceData extends Activity {
|
||||
public static final String BROADCAST_LANGUAGES_UPDATED = "com.googlecode.eyesfree.espeak.LANGUAGES_UPDATED";
|
||||
|
||||
private static final File LEGACY_DATA = new File(
|
||||
Environment.getExternalStorageDirectory(), "espeak-data");
|
||||
|
||||
private AsyncExtract mAsyncExtract;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.download_voice_data);
|
||||
|
||||
final File dataPath = CheckVoiceData.getDataPath(this).getParentFile();
|
||||
|
||||
mAsyncExtract = new AsyncExtract(this, R.raw.espeakdata, dataPath) {
|
||||
@Override
|
||||
protected void onPostExecute(Integer result) {
|
||||
onLanguagesInstalled(result);
|
||||
}
|
||||
};
|
||||
|
||||
mAsyncExtract.execute();
|
||||
|
||||
// Send a fake accessibility event so the user knows what's going on.
|
||||
findViewById(R.id.installing_voice_data)
|
||||
.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
mAsyncExtract.cancel(true);
|
||||
}
|
||||
|
||||
private void onLanguagesInstalled(int resultCode) {
|
||||
switch (resultCode) {
|
||||
case RESULT_OK:
|
||||
final Intent intent = new Intent(BROADCAST_LANGUAGES_UPDATED);
|
||||
sendBroadcast(intent);
|
||||
new AsyncCleanup().execute(LEGACY_DATA);
|
||||
break;
|
||||
case RESULT_CANCELED:
|
||||
// Do nothing?
|
||||
break;
|
||||
}
|
||||
|
||||
setResult(resultCode);
|
||||
finish();
|
||||
}
|
||||
|
||||
private static void clearContents(File directory) {
|
||||
if (!directory.exists() || !directory.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final File[] children = directory.listFiles();
|
||||
|
||||
for (File child : children) {
|
||||
if (child.isDirectory()) {
|
||||
clearContents(child);
|
||||
}
|
||||
|
||||
child.delete();
|
||||
}
|
||||
}
|
||||
|
||||
private static class AsyncCleanup extends AsyncTask<File, Void, Void> {
|
||||
@Override
|
||||
protected Void doInBackground(File... params) {
|
||||
for (File directory : params) {
|
||||
clearContents(directory);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static class AsyncExtract extends AsyncTask<Void, Void, Integer> {
|
||||
private final LinkedList<File> mExtractedFiles = new LinkedList<File>();
|
||||
|
||||
private final Context mContext;
|
||||
private final int mRawResId;
|
||||
private final File mOutput;
|
||||
|
||||
public AsyncExtract(Context context, int rawResId, File output) {
|
||||
mContext = context;
|
||||
mRawResId = rawResId;
|
||||
mOutput = output;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Integer doInBackground(Void... params) {
|
||||
clearContents(CheckVoiceData.getDataPath(mContext));
|
||||
|
||||
final InputStream stream = mContext.getResources().openRawResource(mRawResId);
|
||||
final ZipInputStream zipStream = new ZipInputStream(new BufferedInputStream(stream));
|
||||
|
||||
boolean successful = false;
|
||||
|
||||
try {
|
||||
extractEntries(zipStream);
|
||||
successful = true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
zipStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
if (isCancelled() || !successful) {
|
||||
removeExtractedFiles();
|
||||
return RESULT_CANCELED;
|
||||
}
|
||||
|
||||
return RESULT_OK;
|
||||
}
|
||||
|
||||
private void extractEntries(ZipInputStream zipStream) throws IOException {
|
||||
final byte[] buffer = new byte[10240];
|
||||
|
||||
int bytesRead;
|
||||
ZipEntry entry;
|
||||
|
||||
while (!isCancelled() && ((entry = zipStream.getNextEntry()) != null)) {
|
||||
final File outputFile = new File(mOutput, entry.getName());
|
||||
|
||||
mExtractedFiles.add(outputFile);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
outputFile.mkdirs();
|
||||
doChmod(outputFile);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ensure the target path exists.
|
||||
outputFile.getParentFile().mkdirs();
|
||||
|
||||
final FileOutputStream outputStream = new FileOutputStream(outputFile);
|
||||
|
||||
while (!isCancelled() && ((bytesRead = zipStream.read(buffer)) != -1)) {
|
||||
outputStream.write(buffer, 0, bytesRead);
|
||||
}
|
||||
|
||||
outputStream.close();
|
||||
zipStream.closeEntry();
|
||||
|
||||
// Make sure the output file is readable.
|
||||
doChmod(outputFile);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeExtractedFiles() {
|
||||
for (File extractedFile : mExtractedFiles) {
|
||||
if (!extractedFile.isDirectory()) {
|
||||
extractedFile.delete();
|
||||
}
|
||||
}
|
||||
|
||||
mExtractedFiles.clear();
|
||||
}
|
||||
|
||||
private static void doChmod(File file) {
|
||||
try {
|
||||
Runtime.getRuntime().exec("/system/bin/chmod 755 " + file.getAbsolutePath());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,157 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.Resources.NotFoundException;
|
||||
import android.os.Bundle;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
/*
|
||||
* Returns the sample text string for the language requested
|
||||
*/
|
||||
public class GetSampleText extends Activity {
|
||||
private static final String TAG = GetSampleText.class.getSimpleName();
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
final Locale locale = getLocaleFromIntent(getIntent());
|
||||
final Resources res = getResourcesForLocale(this, locale);
|
||||
|
||||
String text = null;
|
||||
|
||||
try {
|
||||
text = res.getString(R.string.sample_text, locale.getDisplayName(locale));
|
||||
} catch (NotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
final String language = (locale == null) ? "eng" : locale.getISO3Language();
|
||||
|
||||
if (text != null) {
|
||||
// Do nothing.
|
||||
} else if (language.equals("afr")) {
|
||||
text = getString(R.string.afr);
|
||||
} else if (language.equals("bos")) {
|
||||
text = getString(R.string.bos);
|
||||
} else if (language.equals("zho")) {
|
||||
text = getString(R.string.zho);
|
||||
} else if (language.equals("hrv")) {
|
||||
text = getString(R.string.hrv);
|
||||
} else if (language.equals("ces")) {
|
||||
text = getString(R.string.ces);
|
||||
} else if (language.equals("nld")) {
|
||||
text = getString(R.string.nld);
|
||||
} else if (language.equals("eng")) {
|
||||
text = getString(R.string.eng);
|
||||
} else if (language.equals("epo")) {
|
||||
text = getString(R.string.epo);
|
||||
} else if (language.equals("fin")) {
|
||||
text = getString(R.string.fin);
|
||||
} else if (language.equals("fra")) {
|
||||
text = getString(R.string.fra);
|
||||
} else if (language.equals("deu")) {
|
||||
text = getString(R.string.deu);
|
||||
} else if (language.equals("ell")) {
|
||||
text = getString(R.string.ell);
|
||||
} else if (language.equals("hin")) {
|
||||
text = getString(R.string.hin);
|
||||
} else if (language.equals("hun")) {
|
||||
text = getString(R.string.hun);
|
||||
} else if (language.equals("isl")) {
|
||||
text = getString(R.string.isl);
|
||||
} else if (language.equals("ind")) {
|
||||
text = getString(R.string.ind);
|
||||
} else if (language.equals("ita")) {
|
||||
text = getString(R.string.ita);
|
||||
} else if (language.equals("kur")) {
|
||||
text = getString(R.string.kur);
|
||||
} else if (language.equals("lat")) {
|
||||
text = getString(R.string.lat);
|
||||
} else if (language.equals("mkd")) {
|
||||
text = getString(R.string.mkd);
|
||||
} else if (language.equals("nor")) {
|
||||
text = getString(R.string.nor);
|
||||
} else if (language.equals("pol")) {
|
||||
text = getString(R.string.pol);
|
||||
} else if (language.equals("por")) {
|
||||
text = getString(R.string.por);
|
||||
} else if (language.equals("ron")) {
|
||||
text = getString(R.string.ron);
|
||||
} else if (language.equals("rus")) {
|
||||
text = getString(R.string.rus);
|
||||
} else if (language.equals("srp")) {
|
||||
text = getString(R.string.srp);
|
||||
} else if (language.equals("slk")) {
|
||||
text = getString(R.string.slk);
|
||||
} else if (language.equals("spa")) {
|
||||
text = getString(R.string.spa);
|
||||
} else if (language.equals("swa")) {
|
||||
text = getString(R.string.swa);
|
||||
} else if (language.equals("swe")) {
|
||||
text = getString(R.string.swe);
|
||||
} else if (language.equals("tam")) {
|
||||
text = getString(R.string.tam);
|
||||
} else if (language.equals("tur")) {
|
||||
text = getString(R.string.tur);
|
||||
} else if (language.equals("vie")) {
|
||||
text = getString(R.string.vie);
|
||||
} else if (language.equals("cym")) {
|
||||
text = getString(R.string.cym);
|
||||
} else {
|
||||
Log.e(TAG, "Missing sample text for " + language);
|
||||
text = getString(R.string.eng);
|
||||
}
|
||||
|
||||
final int result = TextToSpeech.LANG_AVAILABLE;
|
||||
final Intent returnData = new Intent();
|
||||
returnData.putExtra("sampleText", text);
|
||||
setResult(result, returnData);
|
||||
finish();
|
||||
}
|
||||
|
||||
private static Locale getLocaleFromIntent(Intent intent) {
|
||||
if (intent != null) {
|
||||
final String language = intent.getStringExtra("language");
|
||||
|
||||
if (language != null) {
|
||||
return new Locale(language);
|
||||
}
|
||||
}
|
||||
|
||||
return Locale.getDefault();
|
||||
}
|
||||
|
||||
private static Resources getResourcesForLocale(Activity activity, Locale locale) {
|
||||
final Configuration config = activity.getResources().getConfiguration();
|
||||
config.locale = locale;
|
||||
|
||||
final DisplayMetrics metrics = new DisplayMetrics();
|
||||
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
|
||||
return new Resources(activity.getAssets(), metrics, config);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,241 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file implements the Java API to eSpeak using the JNI bindings.
|
||||
*
|
||||
* Android Version: 4.0 (Ice Cream Sandwich)
|
||||
* API Version: 14
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.content.Context;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class SpeechSynthesis {
|
||||
private static final String TAG = SpeechSynthesis.class.getSimpleName();
|
||||
|
||||
public static final int GENDER_MALE = 1;
|
||||
public static final int GENDER_FEMALE = 2;
|
||||
|
||||
static {
|
||||
System.loadLibrary("ttsespeak");
|
||||
|
||||
nativeClassInit();
|
||||
}
|
||||
|
||||
private final Context mContext;
|
||||
private final SynthReadyCallback mCallback;
|
||||
private final String mDatapath;
|
||||
|
||||
private boolean mInitialized = false;
|
||||
|
||||
public SpeechSynthesis(Context context, SynthReadyCallback callback) {
|
||||
// First, ensure the data directory exists, otherwise init will crash.
|
||||
final File dataPath = CheckVoiceData.getDataPath(context);
|
||||
|
||||
if (!dataPath.exists()) {
|
||||
Log.e(TAG, "Missing voice data");
|
||||
dataPath.mkdirs();
|
||||
}
|
||||
|
||||
mContext = context;
|
||||
mCallback = callback;
|
||||
mDatapath = dataPath.getParentFile().getPath();
|
||||
|
||||
attemptInit();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() {
|
||||
nativeDestroy();
|
||||
}
|
||||
|
||||
public int getSampleRate() {
|
||||
return nativeGetSampleRate();
|
||||
}
|
||||
|
||||
public int getChannelCount() {
|
||||
return nativeGetChannelCount();
|
||||
}
|
||||
|
||||
public int getAudioFormat() {
|
||||
return nativeGetAudioFormat();
|
||||
}
|
||||
|
||||
public int getBufferSizeInBytes() {
|
||||
final int bufferSizeInMillis = nativeGetBufferSizeInMillis();
|
||||
final int sampleRate = nativeGetSampleRate();
|
||||
return (bufferSizeInMillis * sampleRate) / 1000;
|
||||
}
|
||||
|
||||
public List<Voice> getAvailableVoices() {
|
||||
final List<Voice> voices = new LinkedList<Voice>();
|
||||
final String[] results = nativeGetAvailableVoices();
|
||||
|
||||
for (int i = 0; i < results.length; i += 4) {
|
||||
final String name = results[i];
|
||||
final String identifier = results[i + 1];
|
||||
final int gender = Integer.parseInt(results[i + 2]);
|
||||
final int age = Integer.parseInt(results[i + 3]);
|
||||
final Voice voice = new Voice(name, identifier, gender, age);
|
||||
|
||||
voices.add(voice);
|
||||
}
|
||||
|
||||
return voices;
|
||||
}
|
||||
|
||||
public void setVoiceByProperties(
|
||||
String name, String languages, int gender, int age, int variant) {
|
||||
nativeSetVoiceByProperties(name, languages, gender, age, variant);
|
||||
}
|
||||
|
||||
public void setRate(int rate) {
|
||||
nativeSetRate(rate);
|
||||
}
|
||||
|
||||
public void setPitch(int pitch) {
|
||||
nativeSetPitch(pitch);
|
||||
}
|
||||
|
||||
public void synthesize(String text) {
|
||||
nativeSynthesize(text);
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
nativeStop();
|
||||
}
|
||||
|
||||
private void nativeSynthCallback(byte[] audioData) {
|
||||
if (mCallback == null)
|
||||
return;
|
||||
|
||||
if (audioData == null) {
|
||||
mCallback.onSynthDataComplete();
|
||||
} else {
|
||||
mCallback.onSynthDataReady(audioData);
|
||||
}
|
||||
}
|
||||
|
||||
private void attemptInit() {
|
||||
if (mInitialized) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CheckVoiceData.hasBaseResources(mContext)) {
|
||||
Log.e(TAG, "Missing base resources");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!nativeCreate(mDatapath)) {
|
||||
Log.e(TAG, "Failed to initialize speech synthesis library");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.i(TAG, "Initialized synthesis library with sample rate = " + getSampleRate());
|
||||
|
||||
mInitialized = true;
|
||||
}
|
||||
|
||||
private int mNativeData;
|
||||
|
||||
private static native final boolean nativeClassInit();
|
||||
|
||||
private native final boolean nativeCreate(String path);
|
||||
|
||||
private native final boolean nativeDestroy();
|
||||
|
||||
private native final int nativeGetSampleRate();
|
||||
|
||||
private native final int nativeGetChannelCount();
|
||||
|
||||
private native final int nativeGetAudioFormat();
|
||||
|
||||
private native final int nativeGetBufferSizeInMillis();
|
||||
|
||||
private native final String[] nativeGetAvailableVoices();
|
||||
|
||||
private native final boolean nativeSetVoiceByProperties(
|
||||
String name, String languages, int gender, int age, int variant);
|
||||
|
||||
private native final boolean nativeSetRate(int rate);
|
||||
|
||||
private native final boolean nativeSetPitch(int pitch);
|
||||
|
||||
private native final boolean nativeSynthesize(String text);
|
||||
|
||||
private native final boolean nativeStop();
|
||||
|
||||
public interface SynthReadyCallback {
|
||||
void onSynthDataReady(byte[] audioData);
|
||||
|
||||
void onSynthDataComplete();
|
||||
}
|
||||
|
||||
public class Voice {
|
||||
public final String name;
|
||||
public final String identifier;
|
||||
public final int gender;
|
||||
public final int age;
|
||||
public final Locale locale;
|
||||
|
||||
public Voice(String name, String identifier, int gender, int age) {
|
||||
this.name = name;
|
||||
this.identifier = identifier;
|
||||
this.gender = gender;
|
||||
this.age = age;
|
||||
|
||||
locale = new Locale(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts a partial match against a query locale.
|
||||
*
|
||||
* @param query The locale to match.
|
||||
* @return A text-to-speech availability code. One of:
|
||||
* <ul>
|
||||
* <li>{@link TextToSpeech#LANG_NOT_SUPPORTED}
|
||||
* <li>{@link TextToSpeech#LANG_AVAILABLE}
|
||||
* <li>{@link TextToSpeech#LANG_COUNTRY_AVAILABLE}
|
||||
* <li>{@link TextToSpeech#LANG_COUNTRY_VAR_AVAILABLE}
|
||||
* </ul>
|
||||
*/
|
||||
public int match(Locale query) {
|
||||
if (!locale.getISO3Language().equals(query.getISO3Language())) {
|
||||
return TextToSpeech.LANG_NOT_SUPPORTED;
|
||||
} else if (!locale.getISO3Country().equals(query.getISO3Country())) {
|
||||
return TextToSpeech.LANG_AVAILABLE;
|
||||
} else if (!locale.getVariant().equals(query.getVariant())) {
|
||||
return TextToSpeech.LANG_COUNTRY_AVAILABLE;
|
||||
} else {
|
||||
return TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
* Copyright (C) 2012 Reece H. Dunn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file implements the Android Text-to-Speech engine for eSpeak.
|
||||
*
|
||||
* Android Version: 4.0 (Ice Cream Sandwich)
|
||||
* API Version: 14
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.SharedPreferences;
|
||||
import android.media.AudioTrack;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.speech.tts.SynthesisCallback;
|
||||
import android.speech.tts.SynthesisRequest;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.speech.tts.TextToSpeechService;
|
||||
import android.util.Log;
|
||||
|
||||
import com.googlecode.eyesfree.espeak.SpeechSynthesis.SynthReadyCallback;
|
||||
import com.googlecode.eyesfree.espeak.SpeechSynthesis.Voice;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Implements the eSpeak engine as a {@link TextToSpeechService}.
|
||||
*
|
||||
* @author alanv@google.com (Alan Viverette)
|
||||
*/
|
||||
@SuppressLint("NewApi")
|
||||
public class TtsService extends TextToSpeechService {
|
||||
private static final String TAG = TtsService.class.getSimpleName();
|
||||
private static final boolean DEBUG = false;
|
||||
|
||||
private static final String DEFAULT_LANGUAGE = "en";
|
||||
private static final String DEFAULT_COUNTRY = "uk";
|
||||
private static final String DEFAULT_VARIANT = "";
|
||||
|
||||
private SpeechSynthesis mEngine;
|
||||
private SynthesisCallback mCallback;
|
||||
|
||||
private List<Voice> mAvailableVoices;
|
||||
private Voice mMatchingVoice = null;
|
||||
|
||||
private String mLanguage = DEFAULT_LANGUAGE;
|
||||
private String mCountry = DEFAULT_COUNTRY;
|
||||
private String mVariant = DEFAULT_VARIANT;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
if (!CheckVoiceData.hasBaseResources(this)) {
|
||||
final IntentFilter filter =
|
||||
new IntentFilter(DownloadVoiceData.BROADCAST_LANGUAGES_UPDATED);
|
||||
registerReceiver(mBroadcastReceiver, filter);
|
||||
|
||||
final Intent intent = new Intent(this, DownloadVoiceData.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
startActivity(intent);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
initializeTtsEngine();
|
||||
|
||||
// This calls onIsLanguageAvailable() and must run AFTER initialization!
|
||||
super.onCreate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up the native eSpeak engine.
|
||||
*/
|
||||
private void initializeTtsEngine() {
|
||||
if (mEngine != null) {
|
||||
mEngine.stop();
|
||||
mEngine = null;
|
||||
}
|
||||
|
||||
mEngine = new SpeechSynthesis(this, mSynthCallback);
|
||||
mAvailableVoices = mEngine.getAvailableVoices();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] onGetLanguage() {
|
||||
// This is used to specify the language requested from GetSampleText.
|
||||
return new String[] {
|
||||
mLanguage, mCountry, mVariant
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int onIsLanguageAvailable(String language, String country, String variant) {
|
||||
if (mAvailableVoices == null) {
|
||||
Log.e(TAG, "Attempted to check language availability before loading voices!");
|
||||
return TextToSpeech.LANG_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
final Locale query = new Locale(language, country, variant);
|
||||
|
||||
Voice languageVoice = null;
|
||||
Voice countryVoice = null;
|
||||
|
||||
synchronized (mAvailableVoices) {
|
||||
for (Voice voice : mAvailableVoices) {
|
||||
switch (voice.match(query)) {
|
||||
case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE:
|
||||
mMatchingVoice = voice;
|
||||
return TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE;
|
||||
case TextToSpeech.LANG_COUNTRY_AVAILABLE:
|
||||
countryVoice = voice;
|
||||
case TextToSpeech.LANG_AVAILABLE:
|
||||
languageVoice = voice;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (languageVoice == null) {
|
||||
mMatchingVoice = null;
|
||||
return TextToSpeech.LANG_NOT_SUPPORTED;
|
||||
} else if (countryVoice == null) {
|
||||
mMatchingVoice = languageVoice;
|
||||
return TextToSpeech.LANG_AVAILABLE;
|
||||
} else {
|
||||
mMatchingVoice = countryVoice;
|
||||
return TextToSpeech.LANG_COUNTRY_AVAILABLE;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected int onLoadLanguage(String language, String country, String variant) {
|
||||
final int result = onIsLanguageAvailable(language, country, variant);
|
||||
|
||||
// Return immediately if the language is not available.
|
||||
if (result == TextToSpeech.LANG_NOT_SUPPORTED) {
|
||||
Log.e(TAG, "Failed to load language {language='" + language + "', country='" + country
|
||||
+ "', variant='" + variant + "'");
|
||||
return result;
|
||||
}
|
||||
|
||||
synchronized (this) {
|
||||
mLanguage = language;
|
||||
mCountry = ((country == null) ? "" : country);
|
||||
mVariant = ((variant == null) ? "" : variant);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
Log.i(TAG, "Received stop request.");
|
||||
|
||||
mEngine.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected synchronized void onSynthesizeText(
|
||||
SynthesisRequest request, SynthesisCallback callback) {
|
||||
final int result = onLoadLanguage(request.getLanguage(), request.getCountry(), request.getVariant());
|
||||
|
||||
// Return immediately if the language is not available.
|
||||
if (result == TextToSpeech.LANG_NOT_SUPPORTED) {
|
||||
return;
|
||||
}
|
||||
|
||||
final String text = request.getText();
|
||||
final int gender = getDefaultGender();
|
||||
final int rate = scaleRate(request.getSpeechRate());
|
||||
final int pitch = scalePitch(request.getPitch());
|
||||
final Bundle params = request.getParams();
|
||||
|
||||
if (DEBUG) {
|
||||
Log.i(TAG, "Received synthesis request: {language=\"" + mMatchingVoice.name + "\"}");
|
||||
|
||||
for (String key : params.keySet()) {
|
||||
Log.v(TAG,
|
||||
"Synthesis request contained param {" + key + ", " + params.get(key) + "}");
|
||||
}
|
||||
}
|
||||
|
||||
mCallback = callback;
|
||||
mCallback.start(mEngine.getSampleRate(), mEngine.getAudioFormat(),
|
||||
mEngine.getChannelCount());
|
||||
|
||||
mEngine.setVoiceByProperties(null, mMatchingVoice.name, gender, 0, 0);
|
||||
mEngine.setRate(rate);
|
||||
mEngine.setPitch(pitch);
|
||||
mEngine.synthesize(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the pitch by the user-specified value.
|
||||
*
|
||||
* @param pitch A pitch value.
|
||||
* @return A scaled pitch value.
|
||||
*/
|
||||
private int scalePitch(int pitch) {
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
final String defaultPitchString = prefs.getString("default_pitch", "100");
|
||||
final int defaultPitch = Integer.parseInt(defaultPitchString);
|
||||
|
||||
return (pitch * defaultPitch / 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns user-specified gender.
|
||||
*
|
||||
* @return A gender value.
|
||||
*/
|
||||
private int getDefaultGender() {
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
final String defaultGenderString = prefs.getString("default_gender", "0");
|
||||
final int defaultGender = Integer.parseInt(defaultGenderString);
|
||||
|
||||
return defaultGender;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scales the rate by the user-specified value.
|
||||
*
|
||||
* @param rate A rate value.
|
||||
* @return A scaled rate value.
|
||||
*/
|
||||
private int scaleRate(int rate) {
|
||||
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
final String defaultRateString = prefs.getString("default_rate", "100");
|
||||
final int defaultRate = Integer.parseInt(defaultRateString);
|
||||
|
||||
return (rate * defaultRate / 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pipes synthesizer output from native eSpeak to an {@link AudioTrack}.
|
||||
*/
|
||||
private final SpeechSynthesis.SynthReadyCallback mSynthCallback = new SynthReadyCallback() {
|
||||
@Override
|
||||
public void onSynthDataReady(byte[] audioData) {
|
||||
if ((audioData == null) || (audioData.length == 0)) {
|
||||
onSynthDataComplete();
|
||||
return;
|
||||
}
|
||||
|
||||
final int maxBytesToCopy = mCallback.getMaxBufferSize();
|
||||
|
||||
int offset = 0;
|
||||
|
||||
while (offset < audioData.length) {
|
||||
final int bytesToWrite = Math.min(maxBytesToCopy, (audioData.length - offset));
|
||||
mCallback.audioAvailable(audioData, offset, bytesToWrite);
|
||||
offset += bytesToWrite;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSynthDataComplete() {
|
||||
mCallback.done();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Listens for language update broadcasts and initializes the eSpeak engine.
|
||||
*/
|
||||
private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
initializeTtsEngine();
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceGroup;
|
||||
|
||||
public class TtsSettingsActivity extends PreferenceActivity {
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
|
||||
fixListSummaries(getPreferenceScreen());
|
||||
}
|
||||
|
||||
/**
|
||||
* Since the "%s" summary is currently broken, this sets the preference
|
||||
* change listener for all {@link ListPreference} views to fill in the
|
||||
* summary with the current entry value.
|
||||
*/
|
||||
private void fixListSummaries(PreferenceGroup group) {
|
||||
if (group == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final int count = group.getPreferenceCount();
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
final Preference preference = group.getPreference(i);
|
||||
|
||||
if (preference instanceof PreferenceGroup) {
|
||||
fixListSummaries((PreferenceGroup) preference);
|
||||
} else if (preference instanceof ListPreference) {
|
||||
preference.setOnPreferenceChangeListener(mPreferenceChangeListener);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens for preference changes and updates the summary to reflect the
|
||||
* current setting. This shouldn't be necessary, since preferences are
|
||||
* supposed to automatically do this when the summary is set to "%s".
|
||||
*/
|
||||
private final OnPreferenceChangeListener mPreferenceChangeListener =
|
||||
new OnPreferenceChangeListener() {
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
if (preference instanceof ListPreference && newValue instanceof String) {
|
||||
final ListPreference listPreference = (ListPreference) preference;
|
||||
final int index = listPreference.findIndexOfValue((String) newValue);
|
||||
final CharSequence[] entries = listPreference.getEntries();
|
||||
|
||||
if (index >= 0 && index < entries.length) {
|
||||
preference.setSummary(entries[index].toString().replaceAll("%", "%%"));
|
||||
} else {
|
||||
preference.setSummary("");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.os.Bundle;
|
||||
|
||||
/*
|
||||
* The Java portion of this TTS plugin engine app does nothing.
|
||||
* This activity is only here so that the native code can be
|
||||
* wrapped up inside an apk file.
|
||||
*
|
||||
* The file path structure convention is that the native library
|
||||
* implementing TTS must be a file placed here:
|
||||
* /data/data/<PACKAGE_NAME>/lib/libtts<ACTIVITY_NAME_LOWERCASED>.so
|
||||
* Example:
|
||||
* /data/data/com.googlecode.eyesfree.espeak/lib/libttsespeak.so
|
||||
*/
|
||||
|
||||
public class eSpeak extends Activity {
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// The Java portion of this does nothing.
|
||||
// This activity is only here so that everything
|
||||
// can be wrapped up inside an apk file.
|
||||
finish();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,319 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Android Open Source Project
|
||||
* Copyright (C) 2012 Reece H. Dunn
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class eSpeakActivity extends Activity {
|
||||
private static final String ACTION_TTS_SETTINGS = "com.android.settings.TTS_SETTINGS";
|
||||
|
||||
/** Handler code for TTS initialization hand-off. */
|
||||
private static final int TTS_INITIALIZED = 1;
|
||||
|
||||
private static final int REQUEST_CHECK = 1;
|
||||
private static final int REQUEST_DOWNLOAD = 2;
|
||||
private static final int REQUEST_DEFAULT = 3;
|
||||
|
||||
private static final int DIALOG_SET_DEFAULT = 1;
|
||||
private static final int DIALOG_DOWNLOAD_FAILED = 2;
|
||||
private static final int DIALOG_ERROR = 3;
|
||||
|
||||
private enum State {
|
||||
LOADING,
|
||||
FAILURE,
|
||||
SUCCESS
|
||||
}
|
||||
|
||||
private boolean mDownloadedVoiceData;
|
||||
private ArrayList<String> mVoices;
|
||||
private TextToSpeech mTts;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
setContentView(R.layout.main);
|
||||
|
||||
setState(State.LOADING);
|
||||
manageSettingVisibility();
|
||||
checkVoiceData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
if (mTts != null) {
|
||||
mTts.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the UI state.
|
||||
*
|
||||
* @param state The current state.
|
||||
*/
|
||||
private void setState(State state) {
|
||||
findViewById(R.id.loading).setVisibility((state == State.LOADING) ? View.VISIBLE
|
||||
: View.GONE);
|
||||
findViewById(R.id.success).setVisibility((state == State.SUCCESS) ? View.VISIBLE
|
||||
: View.GONE);
|
||||
findViewById(R.id.failure).setVisibility((state == State.FAILURE) ? View.VISIBLE
|
||||
: View.GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Launcher the voice data verifier.
|
||||
*/
|
||||
private void checkVoiceData() {
|
||||
final Intent checkIntent = new Intent(this, CheckVoiceData.class);
|
||||
|
||||
startActivityForResult(checkIntent, REQUEST_CHECK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Launches the voice data installer.
|
||||
*/
|
||||
private void downloadVoiceData() {
|
||||
final Intent checkIntent = new Intent(this, DownloadVoiceData.class);
|
||||
|
||||
startActivityForResult(checkIntent, REQUEST_DOWNLOAD);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the TTS engine.
|
||||
*/
|
||||
private void initializeEngine() {
|
||||
mTts = new TextToSpeech(this, mInitListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides preferences according to SDK level.
|
||||
*/
|
||||
private void manageSettingVisibility() {
|
||||
if (Build.VERSION.SDK_INT < 14) {
|
||||
// Hide the eSpeak setting button on pre-ICS.
|
||||
findViewById(R.id.engineSettingsLayout).setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the result of voice data verification. If verification fails
|
||||
* following a successful installation, displays an error dialog. Otherwise,
|
||||
* either launches the installer or attempts to initialize the TTS engine.
|
||||
*
|
||||
* @param resultCode The result of voice data verification.
|
||||
* @param data The intent containing available voices.
|
||||
*/
|
||||
private void onDataChecked(int resultCode, Intent data) {
|
||||
if (resultCode != TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
|
||||
if (mDownloadedVoiceData) {
|
||||
setState(State.FAILURE);
|
||||
showDialog(DIALOG_ERROR);
|
||||
} else {
|
||||
downloadVoiceData();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
mVoices = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
|
||||
|
||||
initializeEngine();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the result of voice data installation. Either shows a failure
|
||||
* dialog or launches the voice data verifier.
|
||||
*
|
||||
* @param resultCode
|
||||
*/
|
||||
private void onDataDownloaded(int resultCode) {
|
||||
if (resultCode != RESULT_OK) {
|
||||
setState(State.FAILURE);
|
||||
showDialog(DIALOG_DOWNLOAD_FAILED);
|
||||
return;
|
||||
}
|
||||
|
||||
mDownloadedVoiceData = true;
|
||||
|
||||
checkVoiceData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the result of TTS engine initialization. Either displays an error
|
||||
* dialog or populates the activity's UI.
|
||||
*
|
||||
* @param status The TTS engine initialization status.
|
||||
*/
|
||||
private void onInitialized(int status) {
|
||||
if (!getPackageName().equals(mTts.getDefaultEngine())) {
|
||||
showDialog(DIALOG_SET_DEFAULT);
|
||||
return;
|
||||
}
|
||||
|
||||
if (status == TextToSpeech.ERROR || mVoices == null) {
|
||||
setState(State.FAILURE);
|
||||
showDialog(DIALOG_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
final TextView currentLocale = (TextView) findViewById(R.id.currentLocale);
|
||||
currentLocale.setText(mTts.getLanguage().getDisplayName());
|
||||
|
||||
final TextView availableVoices = (TextView) findViewById(R.id.availableVoices);
|
||||
availableVoices.setText(Integer.toString(mVoices.size()));
|
||||
|
||||
findViewById(R.id.updateVoices).setOnClickListener(mOnClickListener);
|
||||
findViewById(R.id.ttsSettings).setOnClickListener(mOnClickListener);
|
||||
findViewById(R.id.engineSettings).setOnClickListener(mOnClickListener);
|
||||
|
||||
setState(State.SUCCESS);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
switch (requestCode) {
|
||||
case REQUEST_CHECK:
|
||||
onDataChecked(resultCode, data);
|
||||
break;
|
||||
case REQUEST_DOWNLOAD:
|
||||
onDataDownloaded(resultCode);
|
||||
break;
|
||||
case REQUEST_DEFAULT:
|
||||
initializeEngine();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dialog onCreateDialog(int id) {
|
||||
switch (id) {
|
||||
case DIALOG_SET_DEFAULT:
|
||||
return new AlertDialog.Builder(this).setTitle(R.string.app_name)
|
||||
.setMessage(R.string.set_default_message)
|
||||
.setNegativeButton(android.R.string.no, mFinishClickListener)
|
||||
.setPositiveButton(android.R.string.ok, mDialogClickListener).create();
|
||||
case DIALOG_DOWNLOAD_FAILED:
|
||||
return new AlertDialog.Builder(this).setTitle(R.string.app_name)
|
||||
.setMessage(R.string.voice_data_failed_message)
|
||||
.setNegativeButton(android.R.string.ok, mFinishClickListener)
|
||||
.setOnCancelListener(mFinishCancelListener).create();
|
||||
case DIALOG_ERROR:
|
||||
return new AlertDialog.Builder(this).setTitle(R.string.app_name)
|
||||
.setMessage(R.string.error_message)
|
||||
.setNegativeButton(android.R.string.no, mFinishClickListener)
|
||||
.setNegativeButton(android.R.string.ok, mReportClickListener)
|
||||
.setOnCancelListener(mFinishCancelListener).create();
|
||||
}
|
||||
|
||||
return super.onCreateDialog(id);
|
||||
}
|
||||
|
||||
private final DialogInterface.OnClickListener mDialogClickListener = new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
switch (which) {
|
||||
case DialogInterface.BUTTON_POSITIVE:
|
||||
startActivityForResult(
|
||||
new Intent(ACTION_TTS_SETTINGS), REQUEST_DEFAULT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
private final DialogInterface.OnClickListener mReportClickListener = new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
// TODO: Send a crash report.
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
private final DialogInterface.OnClickListener mFinishClickListener = new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
private final DialogInterface.OnCancelListener mFinishCancelListener = new DialogInterface.OnCancelListener() {
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
private final TextToSpeech.OnInitListener mInitListener = new TextToSpeech.OnInitListener() {
|
||||
@Override
|
||||
public void onInit(int status) {
|
||||
mHandler.obtainMessage(TTS_INITIALIZED, status, 0).sendToTarget();
|
||||
}
|
||||
};
|
||||
|
||||
private static class EspeakHandler extends Handler {
|
||||
private WeakReference<eSpeakActivity> mActivity;
|
||||
|
||||
public EspeakHandler(eSpeakActivity activity)
|
||||
{
|
||||
mActivity = new WeakReference<eSpeakActivity>(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(Message msg) {
|
||||
switch (msg.what) {
|
||||
case TTS_INITIALIZED:
|
||||
mActivity.get().onInitialized(msg.arg1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private final Handler mHandler = new EspeakHandler(this);
|
||||
|
||||
private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
case R.id.updateVoices:
|
||||
downloadVoiceData();
|
||||
break;
|
||||
case R.id.engineSettings:
|
||||
startActivityForResult(
|
||||
new Intent(eSpeakActivity.this, TtsSettingsActivity.class),
|
||||
REQUEST_DEFAULT);
|
||||
break;
|
||||
case R.id.ttsSettings:
|
||||
startActivityForResult(new Intent(ACTION_TTS_SETTINGS), REQUEST_DEFAULT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Google Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.googlecode.eyesfree.espeak.providers;
|
||||
|
||||
import com.googlecode.eyesfree.espeak.CheckVoiceData;
|
||||
|
||||
import android.content.ContentProvider;
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
import android.database.MatrixCursor;
|
||||
import android.net.Uri;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Provides the "engineConfig" parameter for the legacy (pre-ICS) TTS API.
|
||||
*
|
||||
* @author alanv@google.com (Alan Viverette)
|
||||
*/
|
||||
public class SettingsProvider extends ContentProvider {
|
||||
private class SettingsCursor extends MatrixCursor {
|
||||
private String settings;
|
||||
|
||||
public SettingsCursor(String[] columnNames) {
|
||||
super(columnNames);
|
||||
}
|
||||
|
||||
public void putSettings(String settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getString(int column) {
|
||||
return settings;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType(Uri uri) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Uri insert(Uri uri, ContentValues values) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
|
||||
String sortOrder) {
|
||||
final File dataPath = CheckVoiceData.getDataPath(getContext());
|
||||
final String[] dummyColumns = {
|
||||
"", ""
|
||||
};
|
||||
final SettingsCursor cursor = new SettingsCursor(dummyColumns);
|
||||
cursor.putSettings(dataPath.getParent());
|
||||
return cursor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||