Merge branch 'android'
@@ -3,7 +3,8 @@
|
||||
*~
|
||||
.*.swp
|
||||
|
||||
#Eclipse project files
|
||||
# Eclipse project files:
|
||||
|
||||
.cproject
|
||||
.project
|
||||
|
||||
@@ -12,6 +13,27 @@
|
||||
*.o
|
||||
*.lo
|
||||
|
||||
# android build output:
|
||||
|
||||
bin/
|
||||
obj/
|
||||
gen/
|
||||
android/icons/*.png
|
||||
|
||||
libttsespeak.so
|
||||
|
||||
android/res/raw/espeakdata.zip
|
||||
android/res/raw/espeakdata_version
|
||||
|
||||
local.properties
|
||||
|
||||
# android gradle output:
|
||||
|
||||
.gradle/
|
||||
.idea/
|
||||
build/
|
||||
espeak.iml
|
||||
|
||||
# autotools
|
||||
|
||||
AUTHORS
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
@@ -0,0 +1,15 @@
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[espeak-for-android.stringsxml]
|
||||
file_filter = android/res/values-<lang>/strings.xml
|
||||
source_file = android/res/values/strings.xml
|
||||
source_lang = en
|
||||
trans.en_GB = android/res/values-en-rGB/strings.xml
|
||||
trans.es_419 = android/res/values-es-rUS/strings.xml
|
||||
trans.he = android/res/values-iw/strings.xml
|
||||
trans.id = android/res/values-in/strings.xml
|
||||
trans.pt_BR = android/res/values-pt-rBR/strings.xml
|
||||
trans.zh_CN = android/res/values-zh-rCN/strings.xml
|
||||
trans.zh_TW = android/res/values-zh-rTW/strings.xml
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
||||
@@ -55,6 +55,7 @@ install-exec-hook:
|
||||
|
||||
clean-local:
|
||||
cd src && rm -f *.o *~ && cd ..
|
||||
cd android && $(GRADLE) clean
|
||||
|
||||
distclean-local:
|
||||
rm -rf espeak-ng-data/phondata-manifest
|
||||
@@ -105,6 +106,8 @@ docs: docs/index.html \
|
||||
src/speak-ng.1.html \
|
||||
README.html
|
||||
|
||||
check: apk-check
|
||||
|
||||
##### build targets:
|
||||
|
||||
espeak_includedir = $(includedir)/espeak
|
||||
@@ -305,6 +308,34 @@ phsource/phonemes.stamp: \
|
||||
ESPEAK_DATA_PATH=$(PWD) src/espeak-ng --compile-phonemes && \
|
||||
touch $@
|
||||
|
||||
##### android targets:
|
||||
|
||||
jni:
|
||||
cd android && ndk-build
|
||||
|
||||
apk-release:
|
||||
cd android && $(GRADLE) assembleRelease
|
||||
|
||||
apk-debug:
|
||||
cd android && $(GRADLE) assembleDebug
|
||||
|
||||
apk-check:
|
||||
cd android && $(GRADLE) connectedCheck
|
||||
|
||||
android/res/raw/espeakdata.zip: espeak-data/phontab dictionaries
|
||||
mkdir -pv android/res/raw
|
||||
rm -f $@
|
||||
find espeak-data/{intonations,phondata,phonindex,phontab} | zip -@ $@
|
||||
find espeak-data/*_dict | zip -@ $@
|
||||
find espeak-data/voices -type f | grep -vF "/mb/" | zip -@ $@
|
||||
|
||||
android/res/raw/espeakdata_version: android/res/raw/espeakdata.zip
|
||||
sha1sum $< | awk '{ print $$1 }' > $@
|
||||
|
||||
espeakdata: \
|
||||
android/res/raw/espeakdata.zip \
|
||||
android/res/raw/espeakdata_version
|
||||
|
||||
##### dictionaries:
|
||||
|
||||
dictionaries: \
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<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,4 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.reecedunn.espeak"
|
||||
android:versionCode="19"
|
||||
android:versionName="1.48.11" >
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
android:required="false" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/icon"
|
||||
android:theme="@style/AppTheme"
|
||||
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>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,51 @@
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.2.3'
|
||||
}
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
androidTestCompile 'org.hamcrest:hamcrest-all:1.3'
|
||||
}
|
||||
|
||||
android {
|
||||
buildToolsVersion '19.1'
|
||||
compileSdkVersion 23
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 23
|
||||
versionCode 20
|
||||
versionName "1.48.15"
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
java.srcDirs = ['src']
|
||||
res.srcDirs = ['res']
|
||||
}
|
||||
androidTest.setRoot('eSpeakTests')
|
||||
androidTest {
|
||||
java.srcDirs = ['eSpeakTests/src']
|
||||
}
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
|
||||
pkgTask -> pkgTask.jniFolders = new HashSet<File>()
|
||||
pkgTask.jniFolders.add(new File(projectDir, 'libs'))
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/eSpeakActivity"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="gen"/>
|
||||
<classpathentry kind="output" path="bin/classes"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>eSpeakTests</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
<project>eSpeakActivity</project>
|
||||
</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,4 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||
org.eclipse.jdt.core.compiler.source=1.6
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.reecedunn.espeak.test"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0" >
|
||||
|
||||
<instrumentation
|
||||
android:name="android.test.InstrumentationTestRunner"
|
||||
android:targetPackage="com.reecedunn.espeak" />
|
||||
|
||||
<application
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name" >
|
||||
<uses-library android:name="android.test.runner" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,20 @@
|
||||
# To enable ProGuard in your project, edit project.properties
|
||||
# to define the proguard.config property as described in that file.
|
||||
#
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in ${sdk.dir}/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the ProGuard
|
||||
# include property in project.properties.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
@@ -0,0 +1,14 @@
|
||||
# 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 edit
|
||||
# "ant.properties", and override values to adapt the script to your
|
||||
# project structure.
|
||||
#
|
||||
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
||||
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
||||
|
||||
# Project target.
|
||||
target=android-17
|
||||
|
After Width: | Height: | Size: 9.2 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">ESpeakTestsTest</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright (C) 2014 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.reecedunn.espeak.test;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.test.ActivityUnitTestCase;
|
||||
|
||||
import com.reecedunn.espeak.CheckVoiceData;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class CheckVoiceDataTest extends ActivityUnitTestCase<CheckVoiceData>
|
||||
{
|
||||
Field mResultCode;
|
||||
Field mResultData;
|
||||
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
mResultCode = Activity.class.getDeclaredField("mResultCode");
|
||||
mResultCode.setAccessible(true);
|
||||
|
||||
mResultData = Activity.class.getDeclaredField("mResultData");
|
||||
mResultData.setAccessible(true);
|
||||
}
|
||||
|
||||
public int getResultCode() throws IllegalAccessException
|
||||
{
|
||||
return (Integer)mResultCode.get(getActivity());
|
||||
}
|
||||
|
||||
public Intent getResultData() throws IllegalAccessException
|
||||
{
|
||||
return (Intent)mResultData.get(getActivity());
|
||||
}
|
||||
|
||||
public CheckVoiceDataTest()
|
||||
{
|
||||
super(CheckVoiceData.class);
|
||||
}
|
||||
|
||||
public Set<String> getExpectedVoices()
|
||||
{
|
||||
Set<String> expected = new HashSet<String>();
|
||||
for (VoiceData.Voice voice : VoiceData.voices)
|
||||
{
|
||||
expected.add(voice.locale);
|
||||
}
|
||||
return expected;
|
||||
}
|
||||
|
||||
public void testUnavailableVoices() throws IllegalAccessException
|
||||
{
|
||||
Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
|
||||
startActivity(intent, null, null);
|
||||
|
||||
assertThat(getActivity(), is(notNullValue()));
|
||||
assertThat(isFinishCalled(), is(true));
|
||||
assertThat(getResultCode(), is(TextToSpeech.Engine.CHECK_VOICE_DATA_PASS));
|
||||
assertThat(getResultData(), is(notNullValue()));
|
||||
|
||||
Intent data = getResultData();
|
||||
|
||||
ArrayList<String> unavailable = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_UNAVAILABLE_VOICES);
|
||||
assertThat(unavailable, is(notNullValue()));
|
||||
assertThat(unavailable.toString(), is("[]"));
|
||||
}
|
||||
|
||||
public void testAvailableVoicesAdded() throws IllegalAccessException
|
||||
{
|
||||
Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
|
||||
startActivity(intent, null, null);
|
||||
|
||||
assertThat(getActivity(), is(notNullValue()));
|
||||
assertThat(isFinishCalled(), is(true));
|
||||
assertThat(getResultCode(), is(TextToSpeech.Engine.CHECK_VOICE_DATA_PASS));
|
||||
assertThat(getResultData(), is(notNullValue()));
|
||||
|
||||
Intent data = getResultData();
|
||||
|
||||
ArrayList<String> available = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
|
||||
assertThat(available, is(notNullValue()));
|
||||
|
||||
Set<String> expected = getExpectedVoices();
|
||||
|
||||
Set<String> added = new HashSet<String>();
|
||||
for (String voice : available)
|
||||
{
|
||||
if (!expected.contains(voice))
|
||||
{
|
||||
added.add(voice);
|
||||
}
|
||||
}
|
||||
|
||||
assertThat(added.toString(), is("[]"));
|
||||
}
|
||||
|
||||
public void testAvailableVoicesRemoved() throws IllegalAccessException
|
||||
{
|
||||
Intent intent = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
|
||||
startActivity(intent, null, null);
|
||||
|
||||
assertThat(getActivity(), is(notNullValue()));
|
||||
assertThat(isFinishCalled(), is(true));
|
||||
assertThat(getResultCode(), is(TextToSpeech.Engine.CHECK_VOICE_DATA_PASS));
|
||||
assertThat(getResultData(), is(notNullValue()));
|
||||
|
||||
Intent data = getResultData();
|
||||
|
||||
ArrayList<String> available = data.getStringArrayListExtra(TextToSpeech.Engine.EXTRA_AVAILABLE_VOICES);
|
||||
assertThat(available, is(notNullValue()));
|
||||
|
||||
Set<String> expected = getExpectedVoices();
|
||||
|
||||
Set<String> removed = new HashSet<String>();
|
||||
for (String voice : expected)
|
||||
{
|
||||
if (!available.contains(voice))
|
||||
{
|
||||
removed.add(voice);
|
||||
}
|
||||
}
|
||||
|
||||
assertThat(removed.toString(), is("[]"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,346 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 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.reecedunn.espeak.test;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.reecedunn.espeak.SpeechSynthesis;
|
||||
import com.reecedunn.espeak.Voice;
|
||||
|
||||
import android.media.AudioFormat;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.util.Log;
|
||||
|
||||
import static com.reecedunn.espeak.test.TtsMatcher.isTtsLangCode;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.hamcrest.core.AnyOf.anyOf;
|
||||
|
||||
public class SpeechSynthesisTest extends TextToSpeechTestCase
|
||||
{
|
||||
public static final Locale af = new Locale("af"); // Afrikaans
|
||||
public static final Locale afr = new Locale("afr"); // Afrikaans
|
||||
|
||||
public static final Locale de = new Locale("de"); // German
|
||||
public static final Locale de_DE = new Locale("de", "DE"); // German (Germany)
|
||||
public static final Locale de_1996 = new Locale("de", "", "1996"); // German (1996 Orthography)
|
||||
public static final Locale de_CH_1901 = new Locale("de", "CH", "1901"); // German (Traditional Orthography,Switzerland)
|
||||
|
||||
public static final Locale deu = new Locale("deu"); // German
|
||||
public static final Locale deu_DEU = new Locale("deu", "DEU"); // German (Germany)
|
||||
public static final Locale deu_1996 = new Locale("deu", "", "1996"); // German (1996 Orthography)
|
||||
public static final Locale deu_CHE_1901 = new Locale("deu", "CHE", "1901"); // German (Traditional Orthography,Switzerland)
|
||||
|
||||
public static final Locale fr = new Locale("fr"); // French
|
||||
public static final Locale fr_FR = new Locale("fr", "FR"); // French (France)
|
||||
public static final Locale fr_BE = new Locale("fr", "BE"); // French (Belgium)
|
||||
public static final Locale fr_1694acad = new Locale("fr", "", "1694acad"); // French (Early Modern French)
|
||||
public static final Locale fr_FR_1694acad = new Locale("fr", "FR", "1694acad"); // French (Early Modern French,France)
|
||||
public static final Locale fr_BE_1694acad = new Locale("fr", "BE", "1694acad"); // French (Early Modern French,Belgium)
|
||||
|
||||
public static final Locale fra = new Locale("fra"); // French
|
||||
public static final Locale fra_FRA = new Locale("fra", "FRA"); // French (France)
|
||||
public static final Locale fra_BEL = new Locale("fra", "BEL"); // French (Belgium)
|
||||
public static final Locale fra_1694acad = new Locale("fra", "", "1694acad"); // French (Early Modern French)
|
||||
public static final Locale fra_FRA_1694acad = new Locale("fra", "FRA", "1694acad"); // French (Early Modern French,France)
|
||||
public static final Locale fra_BEL_1694acad = new Locale("fra", "BEL", "1694acad"); // French (Early Modern French,Belgium)
|
||||
|
||||
public static final Locale hy = new Locale("hy"); // Armenian
|
||||
public static final Locale hy_AM = new Locale("hy", "AM"); // Armenian (Armenia)
|
||||
public static final Locale hy_arevela = new Locale("hy", "", "arevela"); // Armenian (Eastern)
|
||||
public static final Locale hy_arevmda = new Locale("hy", "", "arevmda"); // Armenian (Western)
|
||||
public static final Locale hy_AM_arevela = new Locale("hy", "AM", "arevela"); // Armenian (Eastern,Armenia)
|
||||
public static final Locale hy_AM_arevmda = new Locale("hy", "AM", "arevmda"); // Armenian (Western,Armenia)
|
||||
|
||||
public static final Locale hye = new Locale("hye"); // Armenian
|
||||
public static final Locale hye_ARM = new Locale("hye", "ARM"); // Armenian (Armenia)
|
||||
public static final Locale hye_arevela = new Locale("hye", "", "arevela"); // Armenian (Eastern)
|
||||
public static final Locale hye_arevmda = new Locale("hye", "", "arevmda"); // Armenian (Western)
|
||||
public static final Locale hye_ARM_arevela = new Locale("hye", "ARM", "arevela"); // Armenian (Eastern,Armenia)
|
||||
public static final Locale hye_ARM_arevmda = new Locale("hye", "ARM", "arevmda"); // Armenian (Western,Armenia)
|
||||
|
||||
public static final Locale en = new Locale("en"); // English
|
||||
public static final Locale en_GB = new Locale("en", "GB"); // English (Great Britain)
|
||||
public static final Locale en_US = new Locale("en", "US"); // English (USA)
|
||||
public static final Locale en_scotland = new Locale("en", "", "scotland"); // English (Scottish)
|
||||
public static final Locale en_GB_scotland = new Locale("en", "GB", "scotland"); // English (Scottish,Great Britain)
|
||||
public static final Locale en_GB_north = new Locale("en", "GB", "north"); // English (North,Great Britain)
|
||||
|
||||
public static final Locale eng = new Locale("en"); // English
|
||||
public static final Locale eng_GBR = new Locale("en", "GBR"); // English (Great Britain)
|
||||
public static final Locale eng_USA = new Locale("en", "USA"); // English (USA)
|
||||
public static final Locale eng_scotland = new Locale("en", "", "scotland"); // English (Scottish)
|
||||
public static final Locale eng_GBR_scotland = new Locale("en", "GBR", "scotland"); // English (Scottish,Great Britain)
|
||||
public static final Locale eng_GBR_north = new Locale("en", "GBR", "north"); // English (North,Great Britain)
|
||||
|
||||
private SpeechSynthesis.SynthReadyCallback mCallback = new SpeechSynthesis.SynthReadyCallback()
|
||||
{
|
||||
@Override
|
||||
public void onSynthDataReady(byte[] audioData)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSynthDataComplete()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
private Map<String, Voice> mVoices = null;
|
||||
private Set<String> mAdded = new HashSet<String>();
|
||||
private Set<String> mRemoved = new HashSet<String>();
|
||||
|
||||
public Map<String, Voice> getVoices()
|
||||
{
|
||||
if (mVoices == null)
|
||||
{
|
||||
final SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
mVoices = new HashMap<String, Voice>();
|
||||
for (Voice voice : synth.getAvailableVoices()) {
|
||||
assertThat(mVoices.get(voice.name), is(nullValue()));
|
||||
mVoices.put(voice.name, voice);
|
||||
}
|
||||
assertThat(mVoices, is(notNullValue()));
|
||||
|
||||
Set<String> voices = new HashSet<String>();
|
||||
for (Voice data : mVoices.values())
|
||||
{
|
||||
voices.add(data.name);
|
||||
}
|
||||
|
||||
Set<String> expected = new HashSet<String>();
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
expected.add(data.name);
|
||||
}
|
||||
|
||||
for (String voice : voices)
|
||||
{
|
||||
if (!expected.contains(voice))
|
||||
{
|
||||
mAdded.add(voice);
|
||||
}
|
||||
}
|
||||
|
||||
for (String voice : expected)
|
||||
{
|
||||
if (!voices.contains(voice))
|
||||
{
|
||||
mRemoved.add(voice);
|
||||
}
|
||||
}
|
||||
}
|
||||
return mVoices;
|
||||
}
|
||||
|
||||
public Voice getVoice(String name)
|
||||
{
|
||||
return getVoices().get(name);
|
||||
}
|
||||
|
||||
public void testConstruction()
|
||||
{
|
||||
final SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
assertThat(synth.getSampleRate(), is(22050));
|
||||
assertThat(synth.getChannelCount(), is(1));
|
||||
assertThat(synth.getAudioFormat(), is(AudioFormat.ENCODING_PCM_16BIT));
|
||||
}
|
||||
|
||||
public void testJavaToIanaLanguageCode()
|
||||
{
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
assertThat(SpeechSynthesis.getIanaLanguageCode(data.javaLanguage), is(data.ianaLanguage));
|
||||
}
|
||||
}
|
||||
|
||||
public void testJavaToIanaCountryCode()
|
||||
{
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
assertThat(SpeechSynthesis.getIanaCountryCode(data.javaCountry), is(data.ianaCountry));
|
||||
}
|
||||
}
|
||||
|
||||
public void testAddedVoices()
|
||||
{
|
||||
getVoices(); // Ensure that the voice data has been populated.
|
||||
assertThat(mAdded.toString(), is("[]"));
|
||||
}
|
||||
|
||||
public void testRemovedVoices()
|
||||
{
|
||||
getVoices(); // Ensure that the voice data has been populated.
|
||||
assertThat(mRemoved.toString(), is("[]"));
|
||||
}
|
||||
|
||||
public void testVoiceData()
|
||||
{
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
if (mRemoved.contains(data.name))
|
||||
{
|
||||
Log.i("SpeechSynthesisTest", "Skipping the missing voice '" + data.name + "'");
|
||||
continue;
|
||||
}
|
||||
|
||||
String context = "[voice]";
|
||||
try
|
||||
{
|
||||
final Voice voice = getVoice(data.name);
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
context = "[name]";
|
||||
assertThat(voice.name, is(data.name));
|
||||
context = "[identifier]";
|
||||
assertThat(voice.identifier, is(data.identifier));
|
||||
context = "[age]";
|
||||
assertThat(voice.age, is(0));
|
||||
context = "[gender]";
|
||||
assertThat(voice.gender, is(data.gender));
|
||||
context = "[locale:language]";
|
||||
assertThat(voice.locale.getLanguage(), is(data.ianaLanguage));
|
||||
context = "[locale:iso3language]";
|
||||
assertThat(voice.locale.getISO3Language(), is(data.javaLanguage));
|
||||
context = "[locale:country]";
|
||||
assertThat(voice.locale.getCountry(), is(data.ianaCountry));
|
||||
context = "[locale:iso3country]";
|
||||
assertThat(voice.locale.getISO3Country(), is(data.javaCountry));
|
||||
context = "[locale:variant]";
|
||||
assertThat(voice.locale.getVariant(), is(data.variant));
|
||||
context = "[toString]";
|
||||
assertThat(voice.toString(), is(data.locale));
|
||||
}
|
||||
catch (AssertionError e)
|
||||
{
|
||||
throw new VoiceData.Exception(data, context, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void testMatchVoiceWithLanguage()
|
||||
{
|
||||
final Voice voice = getVoice("de"); // language="de" country="" variant=""
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
assertThat(voice.match(fr), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(fr_BE), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(fr_1694acad), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(fr_FR_1694acad), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
|
||||
assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(voice.match(de_1996), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
assertThat(voice.match(de_DE), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(de_CH_1901), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
|
||||
assertThat(voice.match(deu), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(voice.match(deu_1996), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
assertThat(voice.match(deu_DEU), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(deu_CHE_1901), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
}
|
||||
|
||||
public void testMatchVoiceWithLanguageAndCountry()
|
||||
{
|
||||
final Voice voice = getVoice("fr-fr"); // language="fr" country="fr" variant=""
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(de_1996), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(de_DE), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(de_CH_1901), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
|
||||
assertThat(voice.match(fr), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fr_FR), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(voice.match(fr_BE), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fr_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fr_FR_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
assertThat(voice.match(fr_BE_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
|
||||
assertThat(voice.match(fra), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fra_FRA), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(voice.match(fra_BEL), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fra_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fra_FRA_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
assertThat(voice.match(fra_BEL_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
}
|
||||
|
||||
public void testMatchVoiceWithLanguageCountryAndVariant()
|
||||
{
|
||||
final Voice voice = getVoice("en-sc"); // language="en" country="GB" variant="scotland"
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(de_1996), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(de_DE), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
assertThat(voice.match(de_CH_1901), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
|
||||
assertThat(voice.match(en), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(en_GB), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
assertThat(voice.match(en_US), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(en_scotland), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); // NOTE: Android does not support LANG_VAR_AVAILABLE.
|
||||
assertThat(voice.match(en_GB_scotland), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(voice.match(en_GB_north), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
|
||||
assertThat(voice.match(eng), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(eng_GBR), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
assertThat(voice.match(eng_USA), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(eng_scotland), isTtsLangCode(TextToSpeech.LANG_AVAILABLE)); // NOTE: Android does not support LANG_VAR_AVAILABLE.
|
||||
assertThat(voice.match(eng_GBR_scotland), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(voice.match(eng_GBR_north), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
}
|
||||
|
||||
public void testGetSampleText()
|
||||
{
|
||||
final String[] currentLocales = getContext().getResources().getAssets().getLocales();
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
if (mRemoved.contains(data.name))
|
||||
{
|
||||
Log.i("SpeechSynthesisTest", "Skipping the missing voice '" + data.name + "'");
|
||||
continue;
|
||||
}
|
||||
|
||||
String context = null;
|
||||
try
|
||||
{
|
||||
final Locale ianaLocale = new Locale(data.ianaLanguage, data.ianaCountry, data.variant);
|
||||
context = "[iana:sample-text]";
|
||||
assertThat(SpeechSynthesis.getSampleText(getContext(), ianaLocale), isIn(data.sampleText));
|
||||
context = "[iana:resource-locale]";
|
||||
assertThat(getContext().getResources().getAssets().getLocales(), is(currentLocales));
|
||||
|
||||
if (!data.javaLanguage.equals(""))
|
||||
{
|
||||
final Locale javaLocale = new Locale(data.javaLanguage, data.javaCountry, data.variant);
|
||||
context = "[java:sample-text]";
|
||||
assertThat(SpeechSynthesis.getSampleText(getContext(), javaLocale), isIn(data.sampleText));
|
||||
context = "[java:resource-locale]";
|
||||
assertThat(getContext().getResources().getAssets().getLocales(), is(currentLocales));
|
||||
}
|
||||
}
|
||||
catch (AssertionError e)
|
||||
{
|
||||
throw new VoiceData.Exception(data, context, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,257 @@
|
||||
/*
|
||||
* Copyright (C) 2015 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.reecedunn.espeak.test;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import com.reecedunn.espeak.TtsService;
|
||||
import com.reecedunn.espeak.Voice;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.reecedunn.espeak.test.TtsMatcher.isTtsLangCode;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class TextToSpeechServiceTest extends AndroidTestCase
|
||||
{
|
||||
public class TtsServiceTest extends TtsService
|
||||
{
|
||||
public TtsServiceTest(Context context)
|
||||
{
|
||||
attachBaseContext(context);
|
||||
}
|
||||
|
||||
public String[] onGetLanguage() {
|
||||
return super.onGetLanguage();
|
||||
}
|
||||
|
||||
public int onIsLanguageAvailable(String language, String country, String variant) {
|
||||
return super.onIsLanguageAvailable(language, country, variant);
|
||||
}
|
||||
|
||||
public int onLoadLanguage(String language, String country, String variant) {
|
||||
return super.onLoadLanguage(language, country, variant);
|
||||
}
|
||||
|
||||
public Set<String> onGetFeaturesForLanguage(String language, String country, String variant) {
|
||||
return super.onGetFeaturesForLanguage(language, country, variant);
|
||||
}
|
||||
|
||||
public Voice getActiveVoice() {
|
||||
return mMatchingVoice;
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
private android.speech.tts.Voice getVoice(String name) {
|
||||
for (android.speech.tts.Voice voice : onGetVoices()) {
|
||||
if (voice.getName().equals(name)) {
|
||||
return voice;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private TtsServiceTest mService = null;
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
mService = new TtsServiceTest(getContext());
|
||||
mService.onCreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tearDown()
|
||||
{
|
||||
if (mService != null)
|
||||
{
|
||||
mService.onDestroy();
|
||||
mService = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void checkLanguage(String[] locale, String language, String country, String variant) {
|
||||
assertThat(locale.length, is(3));
|
||||
assertThat(locale[0], is(language));
|
||||
assertThat(locale[1], is(country));
|
||||
assertThat(locale[2], is(variant));
|
||||
}
|
||||
|
||||
public void testOnLoadLanguage() {
|
||||
assertThat(mService.onLoadLanguage("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "USA", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en-us"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "GBR", "scotland");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en-sc"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "USA", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en-us"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
}
|
||||
|
||||
public void testOnIsLanguageAvailable() {
|
||||
assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
}
|
||||
|
||||
public void testOnGetDefaultVoiceNameFor() {
|
||||
assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "", ""), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", ""), is("en-us"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "GBR", "scotland"), is("en-sc"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", "rp"), is("en-us"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "", "scotland"), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", "rp"), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", ""), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("ine", "", ""), is(nullValue()));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
}
|
||||
|
||||
public void testLanguages() {
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
assertThat(mService.onIsLanguageAvailable(data.javaLanguage, data.javaCountry, data.variant), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
assertThat(mService.onLoadLanguage(data.javaLanguage, data.javaCountry, data.variant), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), data.javaLanguage, data.javaCountry, data.variant);
|
||||
} else {
|
||||
assertThat(mService.onGetDefaultVoiceNameFor(data.javaLanguage, data.javaCountry, data.variant), is(data.name));
|
||||
assertThat(mService.onLoadVoice(data.name), is(TextToSpeech.SUCCESS));
|
||||
|
||||
android.speech.tts.Voice voice = mService.getVoice(data.name);
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
Locale locale = voice.getLocale();
|
||||
assertThat(locale, is(notNullValue()));
|
||||
assertThat(locale.getISO3Language(), is(data.javaLanguage));
|
||||
assertThat(locale.getISO3Country(), is(data.javaCountry));
|
||||
assertThat(locale.getVariant(), is(data.variant));
|
||||
|
||||
Set<String> features = mService.onGetFeaturesForLanguage(data.javaLanguage, data.javaCountry, data.variant);
|
||||
assertThat(features, is(notNullValue()));
|
||||
assertThat(features.size(), is(0));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,242 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 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.reecedunn.espeak.test;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.os.Build;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
|
||||
import static com.reecedunn.espeak.test.TtsMatcher.isTtsLangCode;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class TextToSpeechTest extends TextToSpeechTestCase
|
||||
{
|
||||
private Set<Object> mVoices = null;
|
||||
private Set<String> mAdded = new HashSet<String>();
|
||||
private Set<String> mRemoved = new HashSet<String>();
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
public Set<Object> getVoices()
|
||||
{
|
||||
if (mVoices == null)
|
||||
{
|
||||
Set<android.speech.tts.Voice> voiceData = getEngine().getVoices();
|
||||
assertThat(voiceData, is(notNullValue()));
|
||||
|
||||
mVoices = new HashSet<Object>();
|
||||
for (android.speech.tts.Voice voice : voiceData)
|
||||
{
|
||||
mVoices.add(voice);
|
||||
}
|
||||
|
||||
Set<String> voices = new HashSet<String>();
|
||||
for (Object data : mVoices)
|
||||
{
|
||||
voices.add(((android.speech.tts.Voice)data).getName());
|
||||
}
|
||||
|
||||
Set<String> expected = new HashSet<String>();
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
expected.add(data.name);
|
||||
}
|
||||
|
||||
for (String voice : voices)
|
||||
{
|
||||
if (!expected.contains(voice))
|
||||
{
|
||||
mAdded.add(voice);
|
||||
}
|
||||
}
|
||||
|
||||
for (String voice : expected)
|
||||
{
|
||||
if (!voices.contains(voice))
|
||||
{
|
||||
mRemoved.add(voice);
|
||||
}
|
||||
}
|
||||
}
|
||||
return mVoices;
|
||||
}
|
||||
|
||||
public VoiceData.Voice getVoiceData(String name)
|
||||
{
|
||||
for (VoiceData.Voice voice : VoiceData.voices)
|
||||
{
|
||||
if (voice.name.equals(name))
|
||||
{
|
||||
return voice;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void testAddedVoices()
|
||||
{
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
||||
return;
|
||||
|
||||
getVoices(); // Ensure that the voice data has been populated.
|
||||
assertThat(mAdded.toString(), is("[]"));
|
||||
}
|
||||
|
||||
public void testRemovedVoices()
|
||||
{
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
||||
return;
|
||||
|
||||
getVoices(); // Ensure that the voice data has been populated.
|
||||
assertThat(mRemoved.toString(), is("[]"));
|
||||
}
|
||||
|
||||
@SuppressLint("NewApi")
|
||||
public void testVoices()
|
||||
{
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
|
||||
return;
|
||||
|
||||
getVoices(); // Ensure that the voice data has been populated.
|
||||
for (Object item : mVoices)
|
||||
{
|
||||
android.speech.tts.Voice voice = (android.speech.tts.Voice)item;
|
||||
VoiceData.Voice data = getVoiceData(voice.getName());
|
||||
|
||||
assertThat(data, is(notNullValue()));
|
||||
assertThat(voice.getName(), is(data.name));
|
||||
assertThat(voice.getLocale().getLanguage(), is(data.ianaLanguage));
|
||||
assertThat(voice.getLocale().getCountry(), is(data.ianaCountry));
|
||||
assertThat(voice.getLocale().getVariant(), is(data.variant));
|
||||
assertThat(voice.getFeatures(), is(notNullValue()));
|
||||
assertThat(voice.getFeatures().size(), is(0));
|
||||
assertThat(voice.getLatency(), is(android.speech.tts.Voice.LATENCY_VERY_LOW));
|
||||
assertThat(voice.getQuality(), is(android.speech.tts.Voice.QUALITY_NORMAL));
|
||||
|
||||
getEngine().setVoice(voice);
|
||||
assertThat(getLanguage(getEngine()).getLanguage(), is(data.javaLanguage));
|
||||
assertThat(getLanguage(getEngine()).getCountry(), is(data.javaCountry));
|
||||
assertThat(getLanguage(getEngine()).getVariant(), is(data.variant));
|
||||
|
||||
android.speech.tts.Voice voice2 = getEngine().getVoice();
|
||||
assertThat(voice2, is(notNullValue()));
|
||||
assertThat(voice2.getName(), is(data.name));
|
||||
assertThat(voice2.getLocale().getLanguage(), is(data.ianaLanguage));
|
||||
assertThat(voice2.getLocale().getCountry(), is(data.ianaCountry));
|
||||
assertThat(voice2.getLocale().getVariant(), is(data.variant));
|
||||
assertThat(voice2.getFeatures(), is(notNullValue()));
|
||||
assertThat(voice2.getFeatures().size(), is(0));
|
||||
assertThat(voice2.getLatency(), is(android.speech.tts.Voice.LATENCY_VERY_LOW));
|
||||
assertThat(voice2.getQuality(), is(android.speech.tts.Voice.QUALITY_NORMAL));
|
||||
}
|
||||
}
|
||||
|
||||
public void testUnsupportedLanguage()
|
||||
{
|
||||
assertThat(getEngine(), is(notNullValue()));
|
||||
|
||||
Locale initialLocale = getLanguage(getEngine());
|
||||
assertThat(getEngine().isLanguageAvailable(new Locale("cel")), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
Locale language = getLanguage(getEngine());
|
||||
|
||||
assertThat(getLanguage(getEngine()).getLanguage(), is(initialLocale.getLanguage()));
|
||||
assertThat(getLanguage(getEngine()).getCountry(), is(initialLocale.getCountry()));
|
||||
assertThat(getLanguage(getEngine()).getVariant(), is(initialLocale.getVariant()));
|
||||
}
|
||||
|
||||
public void checkLanguage(VoiceData.Voice data, Locale locale, int status, String language, String country, String variant)
|
||||
{
|
||||
String langTag = locale.toString().replace('_', '-');
|
||||
String context = "";
|
||||
try
|
||||
{
|
||||
context = "isLanguageAvailable";
|
||||
assertThat(getEngine().isLanguageAvailable(locale), isTtsLangCode(status));
|
||||
context = "setLanguage";
|
||||
assertThat(getEngine().setLanguage(locale), isTtsLangCode(status));
|
||||
context = "getLanguage";
|
||||
assertThat(getLanguage(getEngine()).getLanguage(), is(language));
|
||||
assertThat(getLanguage(getEngine()).getCountry(), is(country));
|
||||
assertThat(getLanguage(getEngine()).getVariant(), is(variant));
|
||||
}
|
||||
catch (AssertionError e)
|
||||
{
|
||||
throw new VoiceData.Exception(data, context + "|" + langTag, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void testLanguages()
|
||||
{
|
||||
assertThat(getEngine(), is(notNullValue()));
|
||||
|
||||
for (VoiceData.Voice data : VoiceData.voices)
|
||||
{
|
||||
final Locale iana1 = new Locale(data.ianaLanguage, data.ianaCountry, data.variant);
|
||||
final Locale iana2 = new Locale(data.ianaLanguage, data.ianaCountry, "test");
|
||||
final Locale iana3 = new Locale(data.ianaLanguage, "VU", data.variant);
|
||||
|
||||
final Locale java1 = new Locale(data.javaLanguage, data.javaCountry, data.variant);
|
||||
final Locale java2 = new Locale(data.javaLanguage, data.javaCountry, "test");
|
||||
final Locale java3 = new Locale(data.javaLanguage, "VUT", data.variant);
|
||||
|
||||
checkLanguage(data, iana1, TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE, data.javaLanguage, data.javaCountry, data.variant);
|
||||
checkLanguage(data, java1, TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE, data.javaLanguage, data.javaCountry, data.variant);
|
||||
|
||||
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
|
||||
// Android Lollipop sets variant to "" when TextToSpeech.LANG_COUNTRY_AVAILABLE is returned.
|
||||
checkLanguage(data, iana2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "");
|
||||
checkLanguage(data, java2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "");
|
||||
} else {
|
||||
if (data.ianaLanguage.equals("vi") && data.ianaCountry.equals("VN")) {
|
||||
checkLanguage(data, iana2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "hue");
|
||||
checkLanguage(data, java2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "hue");
|
||||
} else if (data.ianaLanguage.equals("hy") && data.ianaCountry.equals("AM")) {
|
||||
checkLanguage(data, iana2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "arevmda");
|
||||
checkLanguage(data, java2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "arevmda");
|
||||
} else {
|
||||
checkLanguage(data, iana2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "");
|
||||
checkLanguage(data, java2, TextToSpeech.LANG_COUNTRY_AVAILABLE, data.javaLanguage, data.javaCountry, "");
|
||||
}
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP) {
|
||||
// Android Lollipop sets country and variant to "" when TextToSpeech.LANG_AVAILABLE is returned.
|
||||
checkLanguage(data, iana3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "", "");
|
||||
checkLanguage(data, java3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "", "");
|
||||
} else {
|
||||
switch (data.ianaLanguage) {
|
||||
case "fr":
|
||||
checkLanguage(data, iana3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "FRA", "");
|
||||
checkLanguage(data, java3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "FRA", "");
|
||||
break;
|
||||
case "pt":
|
||||
checkLanguage(data, iana3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "PRT", "");
|
||||
checkLanguage(data, java3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "PRT", "");
|
||||
break;
|
||||
default:
|
||||
checkLanguage(data, iana3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "", "");
|
||||
checkLanguage(data, java3, TextToSpeech.LANG_AVAILABLE, data.javaLanguage, "", "");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 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.reecedunn.espeak.test;
|
||||
|
||||
import android.os.Build;
|
||||
import android.speech.tts.TextToSpeech;
|
||||
import android.speech.tts.TextToSpeech.OnInitListener;
|
||||
import android.test.AndroidTestCase;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import static com.reecedunn.espeak.test.TtsMatcher.isTtsLangCode;
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class TextToSpeechTestCase extends AndroidTestCase
|
||||
{
|
||||
private TextToSpeech mEngine = null;
|
||||
private boolean mInitialised = false;
|
||||
private int mStatus = TextToSpeech.ERROR;
|
||||
|
||||
private OnInitListener mInitCallback = new OnInitListener()
|
||||
{
|
||||
@Override
|
||||
public void onInit(int status)
|
||||
{
|
||||
mStatus = status;
|
||||
mInitialised = true;
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception
|
||||
{
|
||||
try
|
||||
{
|
||||
// Wait until the text-to-speech engine is initialised (max: 20 seconds):
|
||||
|
||||
mEngine = new TextToSpeech(getContext(), mInitCallback);
|
||||
for (int count = 0; !mInitialised && count < (4 * 20); ++count)
|
||||
{
|
||||
Thread.sleep(250);
|
||||
}
|
||||
|
||||
assertThat(mInitialised, is(true));
|
||||
assertThat(mStatus, is(TextToSpeech.SUCCESS));
|
||||
assertThat(mEngine.getDefaultEngine(), is("com.reecedunn.espeak"));
|
||||
|
||||
// Ensure that the voice data is installed (max: 20 seconds):
|
||||
|
||||
Locale en = new Locale("en");
|
||||
int available = mEngine.isLanguageAvailable(en);
|
||||
for (int count = 0; available != TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE && count < (4 * 20); ++count)
|
||||
{
|
||||
Thread.sleep(250);
|
||||
available = mEngine.isLanguageAvailable(en);
|
||||
Log.d("TextToSpeechTestCase", "setUp: available = " + available);
|
||||
}
|
||||
|
||||
assertThat(available, isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
tearDown();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tearDown()
|
||||
{
|
||||
if (mEngine != null)
|
||||
{
|
||||
mEngine.shutdown();
|
||||
mEngine = null;
|
||||
}
|
||||
}
|
||||
|
||||
public TextToSpeech getEngine()
|
||||
{
|
||||
return mEngine;
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public static Locale getLanguage(TextToSpeech engine) {
|
||||
if (engine != null) {
|
||||
return engine.getLanguage();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2014 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.reecedunn.espeak.test;
|
||||
|
||||
import org.hamcrest.Description;
|
||||
import org.hamcrest.Matcher;
|
||||
import org.hamcrest.TypeSafeMatcher;
|
||||
|
||||
import android.speech.tts.TextToSpeech;
|
||||
|
||||
public class TtsMatcher
|
||||
{
|
||||
private static String ttsLangCode(final Integer value) {
|
||||
if (value == null) return "null";
|
||||
switch (value.intValue()) {
|
||||
case TextToSpeech.LANG_AVAILABLE: return "TextToSpeech.LANG_AVAILABLE";
|
||||
case TextToSpeech.LANG_COUNTRY_AVAILABLE: return "TextToSpeech.LANG_COUNTRY_AVAILABLE";
|
||||
case TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE: return "TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE";
|
||||
case TextToSpeech.LANG_MISSING_DATA: return "TextToSpeech.LANG_MISSING_DATA";
|
||||
case TextToSpeech.LANG_NOT_SUPPORTED: return "TextToSpeech.LANG_NOT_SUPPORTED";
|
||||
}
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
public static Matcher<Integer> isTtsLangCode(final Integer value) {
|
||||
return new TypeSafeMatcher<Integer>() {
|
||||
@Override
|
||||
protected boolean matchesSafely(Integer item) {
|
||||
return item.equals(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void describeTo(Description description) {
|
||||
description.appendText("expected constant: ");
|
||||
description.appendValue(ttsLangCode(value));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void describeMismatchSafely(final Integer item, final Description description) {
|
||||
description.appendText("was ");
|
||||
description.appendValue(ttsLangCode(item));
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 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.reecedunn.espeak.test;
|
||||
|
||||
import com.reecedunn.espeak.SpeechSynthesis;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class VoiceData
|
||||
{
|
||||
public static class Voice
|
||||
{
|
||||
public final String name;
|
||||
public final String identifier;
|
||||
public final String ianaLanguage;
|
||||
public final String javaLanguage;
|
||||
public final String ianaCountry;
|
||||
public final String javaCountry;
|
||||
public final String variant;
|
||||
public final int gender;
|
||||
public final String displayName;
|
||||
public final String locale;
|
||||
public final List<String> sampleText = new ArrayList<>();
|
||||
|
||||
public Voice(String name,
|
||||
String identifier,
|
||||
String ianaLanguage,
|
||||
String javaLanguage,
|
||||
String ianaCountry,
|
||||
String javaCountry,
|
||||
String variant,
|
||||
int gender,
|
||||
String displayName,
|
||||
String locale,
|
||||
String... sampleText)
|
||||
{
|
||||
this.name = name;
|
||||
this.identifier = identifier;
|
||||
this.ianaLanguage = ianaLanguage;
|
||||
this.javaLanguage = javaLanguage;
|
||||
this.ianaCountry = ianaCountry;
|
||||
this.javaCountry = javaCountry;
|
||||
this.variant = variant;
|
||||
this.gender = gender;
|
||||
this.displayName = displayName;
|
||||
this.locale = locale;
|
||||
for (String text : sampleText)
|
||||
this.sampleText.add(text);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Exception extends AssertionError
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Exception(Voice voice, String context, AssertionError error)
|
||||
{
|
||||
super("Voice \"" + voice.name + "\" " + context + " -- " + error);
|
||||
}
|
||||
}
|
||||
|
||||
public static final Voice[] voices = new Voice[] {
|
||||
new Voice("af", "other/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"),
|
||||
new Voice("am", "test/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"),
|
||||
new Voice("an", "europe/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"),
|
||||
new Voice("as", "test/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"),
|
||||
new Voice("az", "test/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"),
|
||||
new Voice("bg", "europe/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"),
|
||||
new Voice("bn", "asia/bn", "bn", "ben", "", "", "", SpeechSynthesis.GENDER_MALE, "Bengali", "ben", "This is a sample of text spoken in বাংলা", "This is a sample of text spoken in Bengali"),
|
||||
new Voice("bs", "europe/bs", "bs", "bos", "", "", "", SpeechSynthesis.GENDER_MALE, "Bosnian", "bos", "This is a sample of text spoken in Bosnian", "This is a sample of text spoken in bosanski"),
|
||||
new Voice("ca", "europe/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"),
|
||||
new Voice("cs", "europe/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"),
|
||||
new Voice("cy", "europe/cy", "cy", "cym", "", "", "", SpeechSynthesis.GENDER_MALE, "Welsh", "cym", "This is a sample of text spoken in Welsh", "This is a sample of text spoken in Cymraeg"),
|
||||
new Voice("da", "europe/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"),
|
||||
new Voice("de", "de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"),
|
||||
new Voice("el", "europe/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"),
|
||||
new Voice("en", "default", "en", "eng", "", "", "", SpeechSynthesis.GENDER_MALE, "English", "eng", "This is a sample of text spoken in English"),
|
||||
new Voice("en-sc", "other/en-sc", "en", "eng", "GB", "GBR", "scotland", SpeechSynthesis.GENDER_MALE, "English (Scotland)", "eng-GBR-scotland", "This is a sample of text spoken in English (United Kingdom,Scottish Standard English)"),
|
||||
new Voice("en-gb", "en", "en", "eng", "GB", "GBR", "", SpeechSynthesis.GENDER_MALE, "English (UK)", "eng-GBR", "This is a sample of text spoken in English (United Kingdom)"),
|
||||
new Voice("en-uk-north", "other/en-n", "en", "eng", "GB", "GBR", "north", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-north", "This is a sample of text spoken in English (United Kingdom,NORTH)"),
|
||||
new Voice("en-uk-rp", "other/en-rp", "en", "eng", "GB", "GBR", "rp", SpeechSynthesis.GENDER_MALE, "English (Received Pronunciation)", "eng-GBR-rp", "This is a sample of text spoken in English (United Kingdom,RP)", "This is a sample of text spoken in English (United Kingdom,rp)"),
|
||||
new Voice("en-uk-wmids", "other/en-wm", "en", "eng", "GB", "GBR", "wmids", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-wmids", "This is a sample of text spoken in English (United Kingdom,WMIDS)"),
|
||||
new Voice("en-us", "en-us", "en", "eng", "US", "USA", "", SpeechSynthesis.GENDER_MALE, "English (US)", "eng-USA", "This is a sample of text spoken in English (United States)"),
|
||||
new Voice("en-wi", "other/en-wi", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"),
|
||||
new Voice("eo", "other/eo", "eo", "epo", "", "", "", SpeechSynthesis.GENDER_MALE, "Esperanto", "epo", "This is a sample of text spoken in Esperanto", "This is a sample of text spoken in esperanto"),
|
||||
new Voice("es", "europe/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."),
|
||||
new Voice("es-la", "es-la", "es", "spa", "MX", "MEX", "", SpeechSynthesis.GENDER_MALE, "Spanish (Latin America)", "spa-MEX", "Esto es un ejemplo de texto hablado en español (México)."),
|
||||
new Voice("et", "europe/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"),
|
||||
new Voice("eu", "europe/eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"),
|
||||
new Voice("fa", "asia/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"),
|
||||
new Voice("fi", "europe/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"),
|
||||
new Voice("fr-be", "europe/fr-be", "fr", "fra", "BE", "BEL", "", SpeechSynthesis.GENDER_MALE, "French (Belgium)", "fra-BEL", "Voici un exemple de texte énoncé en français (Belgique)."),
|
||||
new Voice("fr-fr", "fr", "fr", "fra", "FR", "FRA", "", SpeechSynthesis.GENDER_MALE, "French (France)", "fra-FRA", "Voici un exemple de texte énoncé en français (France)."),
|
||||
new Voice("ga", "europe/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"),
|
||||
new Voice("gd", "test/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Scottish Gaelic", "gla", "This is a sample of text spoken in Scottish Gaelic", "This is a sample of text spoken in Gàidhlig"),
|
||||
new Voice("grc", "other/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"),
|
||||
new Voice("gu", "asia/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"),
|
||||
new Voice("hi", "asia/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"),
|
||||
new Voice("hr", "europe/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"),
|
||||
new Voice("hu", "europe/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."),
|
||||
new Voice("hy", "asia/hy", "hy", "hye", "", "", "", SpeechSynthesis.GENDER_MALE, "Armenian", "hye", "This is a sample of text spoken in Armenian", "This is a sample of text spoken in հայերեն"),
|
||||
new Voice("hy-west", "asia/hy-west", "hy", "hye", "AM", "ARM", "arevmda", SpeechSynthesis.GENDER_MALE, "Armenian (Western)", "hye-ARM-arevmda", "This is a sample of text spoken in Armenian (Armenia,Western Armenian)", "This is a sample of text spoken in հայերեն (Հայաստան,AREVMDA)", "This is a sample of text spoken in հայերեն (Հայաստան,արեւմտահայերէն)"),
|
||||
new Voice("ia", "other/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"),
|
||||
new Voice("id", "asia/id", "in", "ind", "", "", "", SpeechSynthesis.GENDER_MALE, "Indonesia", "ind", "Ini adalah sebuah contoh teks yang diucapkan di Bahasa Indonesia"), // NOTE: 'id' is the correct ISO 639-1 code, but Android/Java uses 'in'.
|
||||
new Voice("is", "europe/is", "is", "isl", "", "", "", SpeechSynthesis.GENDER_MALE, "Icelandic", "isl", "This is a sample of text spoken in íslenska", "This is a sample of text spoken in Icelandic"),
|
||||
new Voice("it", "europe/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"),
|
||||
new Voice("jbo", "other/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Lojban", "jbo", "This is a sample of text spoken in Lojban"),
|
||||
new Voice("ka", "asia/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"),
|
||||
new Voice("kl", "test/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"),
|
||||
new Voice("kn", "asia/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"),
|
||||
new Voice("ko", "asia/ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."),
|
||||
new Voice("ku", "asia/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"),
|
||||
new Voice("la", "other/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"),
|
||||
new Voice("lt", "europe/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"),
|
||||
new Voice("lv", "europe/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."),
|
||||
new Voice("mk", "europe/mk", "mk", "mkd", "", "", "", SpeechSynthesis.GENDER_MALE, "Macedonian", "mkd", "This is a sample of text spoken in Macedonian", "This is a sample of text spoken in македонски"),
|
||||
new Voice("ml", "asia/ml", "ml", "mal", "", "", "", SpeechSynthesis.GENDER_MALE, "Malayalam", "mal", "This is a sample of text spoken in Malayalam", "This is a sample of text spoken in മലയാളം"),
|
||||
new Voice("mr", "test/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"),
|
||||
new Voice("ms", "asia/ms", "ms", "msa", "", "", "", SpeechSynthesis.GENDER_MALE, "Malay", "msa", "Ini adalah sampel teks yang dilafazkan dalam Bahasa Melayu", "Ini adalah sampel teks yang dilafazkan dalam Malay"),
|
||||
new Voice("ne", "asia/ne", "ne", "nep", "", "", "", SpeechSynthesis.GENDER_MALE, "Nepali", "nep", "This is a sample of text spoken in Nepali", "This is a sample of text spoken in नेपाली"),
|
||||
new Voice("nl", "europe/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"),
|
||||
new Voice("no", "europe/no", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"),
|
||||
new Voice("om", "test/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"),
|
||||
new Voice("or", "test/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"),
|
||||
new Voice("pa", "asia/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"),
|
||||
new Voice("pap", "test/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"),
|
||||
new Voice("pl", "europe/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"),
|
||||
new Voice("pt-br", "pt", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"),
|
||||
new Voice("pt-pt", "europe/pt-pt", "pt", "por", "PT", "PRT", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Portugal)", "por-PRT", "Este é um exemplo de texto falado em português (Portugal)"),
|
||||
new Voice("ro", "europe/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"),
|
||||
new Voice("ru", "europe/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"),
|
||||
new Voice("si", "test/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"),
|
||||
new Voice("sk", "europe/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"),
|
||||
new Voice("sl", "test/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"),
|
||||
new Voice("sq", "europe/sq", "sq", "sqi", "", "", "", SpeechSynthesis.GENDER_MALE, "Albanian", "sqi", "This is a sample of text spoken in Albanian", "This is a sample of text spoken in Shqip", "This is a sample of text spoken in shqip"),
|
||||
new Voice("sr", "europe/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"),
|
||||
new Voice("sv", "europe/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"),
|
||||
new Voice("sw", "other/sw", "sw", "swa", "", "", "", SpeechSynthesis.GENDER_MALE, "Swahili", "swa", "Hii ni sampuli ya maandishi yaliyonenwa katika Kiswahili", "Hii ni sampuli ya maandishi yaliyonenwa katika Swahili"),
|
||||
new Voice("ta", "asia/ta", "ta", "tam", "", "", "", SpeechSynthesis.GENDER_MALE, "Tamil", "tam", "This is a sample of text spoken in தமிழ்", "This is a sample of text spoken in Tamil"),
|
||||
new Voice("te", "asia/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"),
|
||||
new Voice("tr", "asia/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"),
|
||||
new Voice("ur", "test/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_UNSPECIFIED, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"),
|
||||
new Voice("vi", "asia/vi", "vi", "vie", "", "", "", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie", "Đây là mẫu văn bản được đọc bằng Tiếng Việt"),
|
||||
new Voice("vi-hue", "asia/vi-hue", "vi", "vie", "VN", "VNM", "hue", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-hue", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,HUE)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,hue)"),
|
||||
new Voice("vi-sgn", "asia/vi-sgn", "vi", "vie", "VN", "VNM", "saigon", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-saigon", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SAIGON)"),
|
||||
new Voice("zh", "asia/zh", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"),
|
||||
new Voice("zh-yue", "asia/zh-yue", "zh", "zho", "HK", "HKG", "", SpeechSynthesis.GENDER_MALE, "Chinese (Cantonese)", "zho-HKG", "This is a sample of text spoken in 中文 (中華人民共和國香港特別行政區)", "This is a sample of text spoken in 中文 (香港)"),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,691 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.reecedunn.espeak.test;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
|
||||
import com.reecedunn.espeak.SpeechSynthesis;
|
||||
import com.reecedunn.espeak.VoiceSettings;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class VoiceSettingsTest extends TextToSpeechTestCase
|
||||
{
|
||||
private SpeechSynthesis.SynthReadyCallback mCallback = new SpeechSynthesis.SynthReadyCallback()
|
||||
{
|
||||
@Override
|
||||
public void onSynthDataReady(byte[] audioData)
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSynthDataComplete()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
// No Settings (New Install)
|
||||
|
||||
public void testNoPreferences()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
// Old Settings
|
||||
|
||||
public void testDefaultGenderMale()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_gender", Integer.toString(SpeechSynthesis.GENDER_MALE));
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testDefaultGenderFemale()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_gender", Integer.toString(SpeechSynthesis.GENDER_FEMALE));
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("female"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("female"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void defaultRateTest(int prefValue, int settingValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_rate", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(settingValue));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(settingValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testDefaultRate()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
defaultRateTest(300, 450, synth); // clamped to maximum value
|
||||
defaultRateTest(200, 350, synth);
|
||||
defaultRateTest(100, 175, synth); // default value
|
||||
defaultRateTest( 50, 87, synth);
|
||||
defaultRateTest( 25, 80, synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
public void defaultPitchTest(int prefValue, int settingValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_pitch", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(settingValue));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(settingValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testDefaultPitch()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
defaultPitchTest(250, 100, synth); // clamped to maximum value
|
||||
defaultPitchTest(200, 100, synth);
|
||||
defaultPitchTest(100, 50, synth); // default value
|
||||
defaultPitchTest( 50, 25, synth);
|
||||
defaultPitchTest( 0, 0, synth);
|
||||
defaultPitchTest( -5, 0, synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
// New Settings
|
||||
|
||||
public void testEspeakVariant()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_variant", "klatt2-old");
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("klatt2-old"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("klatt2-old"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void espeakRateTest(int prefValue, int settingValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_rate", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(settingValue));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(settingValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakRate()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
espeakRateTest(500, 450, synth); // clamped to maximum value
|
||||
espeakRateTest(400, 400, synth);
|
||||
espeakRateTest(200, 200, synth);
|
||||
espeakRateTest(175, 175, synth); // default value
|
||||
espeakRateTest(150, 150, synth);
|
||||
espeakRateTest( 70, 80, synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
public void espeakPitchTest(int prefValue, int settingValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_pitch", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(settingValue));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(settingValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakPitch()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
espeakPitchTest(110, 100, synth); // clamped to maximum value
|
||||
espeakPitchTest(100, 100, synth);
|
||||
espeakPitchTest( 50, 50, synth); // default value
|
||||
espeakPitchTest( 10, 10, synth);
|
||||
espeakPitchTest( -5, 0, synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
public void espeakPitchRangeTest(int prefValue, int settingValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_pitch_range", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(settingValue));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(settingValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakPitchRange()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
espeakPitchRangeTest(110, 100, synth); // clamped to maximum value
|
||||
espeakPitchRangeTest(100, 100, synth);
|
||||
espeakPitchRangeTest( 50, 50, synth); // default value
|
||||
espeakPitchRangeTest( 10, 10, synth);
|
||||
espeakPitchRangeTest( -5, 0, synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
public void espeakVolumeTest(int prefValue, int settingValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_volume", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(settingValue));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(settingValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakVolume()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
espeakVolumeTest(210, 200, synth); // clamped to maximum value
|
||||
espeakVolumeTest(150, 150, synth);
|
||||
espeakVolumeTest(100, 100, synth); // default value
|
||||
espeakVolumeTest( 50, 50, synth);
|
||||
espeakVolumeTest( -5, 0, synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
public void espeakPunctuationLevelTest(int prefValue, int settingValue, String jsonValue, SpeechSynthesis synth)
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_punctuation_level", Integer.toString(prefValue));
|
||||
editor.commit();
|
||||
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(settingValue));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(jsonValue));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakPunctuationLevel()
|
||||
{
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
espeakPunctuationLevelTest( 3, SpeechSynthesis.PUNCT_SOME, "some", synth); // clamped to maximum value
|
||||
espeakPunctuationLevelTest( 2, SpeechSynthesis.PUNCT_SOME, "some", synth);
|
||||
espeakPunctuationLevelTest( 1, SpeechSynthesis.PUNCT_ALL, "all", synth);
|
||||
espeakPunctuationLevelTest( 0, SpeechSynthesis.PUNCT_NONE, "none", synth);
|
||||
espeakPunctuationLevelTest(-1, SpeechSynthesis.PUNCT_NONE, "none", synth); // clamped to minimum value
|
||||
}
|
||||
|
||||
public void testEspeakPunctuationCharacters()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("espeak_punctuation_characters", ".?!");
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(".?!"));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(".?!"));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
// Mixed (Old and New) Settings
|
||||
|
||||
public void testEspeakVariantWithDefaultGenderFemale()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_gender", Integer.toString(SpeechSynthesis.GENDER_FEMALE));
|
||||
editor.putString("espeak_variant", "klatt4");
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("klatt4"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("klatt4"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakRateWithDefaultRate()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_rate", Integer.toString(50));
|
||||
editor.putString("espeak_rate", Integer.toString(200));
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(200));
|
||||
assertThat(settings.getPitch(), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(200));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(synth.Pitch.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
|
||||
public void testEspeakPitchWithDefaultPitch()
|
||||
{
|
||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.clear();
|
||||
editor.putString("default_pitch", Integer.toString(50));
|
||||
editor.putString("espeak_pitch", Integer.toString(75));
|
||||
editor.commit();
|
||||
|
||||
SpeechSynthesis synth = new SpeechSynthesis(getContext(), mCallback);
|
||||
VoiceSettings settings = new VoiceSettings(prefs, synth);
|
||||
assertThat(settings.getVoiceVariant().toString(), is("male"));
|
||||
assertThat(settings.getRate(), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(settings.getPitch(), is(75));
|
||||
assertThat(settings.getPitchRange(), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(settings.getVolume(), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(settings.getPunctuationLevel(), is(SpeechSynthesis.PUNCT_NONE));
|
||||
assertThat(settings.getPunctuationCharacters(), is(nullValue()));
|
||||
|
||||
try {
|
||||
JSONObject json = settings.toJSON();
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VARIANT), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_VARIANT), is("male"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_RATE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_RATE), is(synth.Rate.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH), is(75));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_PITCH_RANGE), is(synth.PitchRange.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_VOLUME), is(instanceOf(Integer.class)));
|
||||
assertThat((Integer)json.opt(VoiceSettings.PRESET_VOLUME), is(synth.Volume.getDefaultValue()));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is(instanceOf(String.class)));
|
||||
assertThat((String)json.opt(VoiceSettings.PRESET_PUNCTUATION_LEVEL), is("none"));
|
||||
assertThat(json.opt(VoiceSettings.PRESET_PUNCTUATION_CHARACTERS), is(nullValue()));
|
||||
} catch (JSONException e) {
|
||||
assertThat(e.toString(), is(nullValue())); // This will be false; used to report exception.
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Copyright (C) 2013 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.reecedunn.espeak.test;
|
||||
|
||||
import android.test.AndroidTestCase;
|
||||
|
||||
import com.reecedunn.espeak.SpeechSynthesis;
|
||||
import com.reecedunn.espeak.VoiceVariant;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
public class VoiceVariantTest extends AndroidTestCase
|
||||
{
|
||||
public void testMaleVoiceVariant()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("male");
|
||||
assertThat(variant.variant, is(nullValue()));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_MALE));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_ANY));
|
||||
assertThat(variant.toString(), is("male"));
|
||||
}
|
||||
|
||||
public void testFemaleVoiceVariant()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("female");
|
||||
assertThat(variant.variant, is(nullValue()));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_FEMALE));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_ANY));
|
||||
assertThat(variant.toString(), is("female"));
|
||||
}
|
||||
|
||||
public void testNamedVoiceVariant()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("klatt1");
|
||||
assertThat(variant.variant, is("klatt1"));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_UNSPECIFIED));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_ANY));
|
||||
assertThat(variant.toString(), is("klatt1"));
|
||||
}
|
||||
|
||||
public void testMaleVoiceVariantYoung()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("male-young");
|
||||
assertThat(variant.variant, is(nullValue()));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_MALE));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_YOUNG));
|
||||
assertThat(variant.toString(), is("male-young"));
|
||||
}
|
||||
|
||||
public void testFemaleVoiceVariantYoung()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("female-young");
|
||||
assertThat(variant.variant, is(nullValue()));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_FEMALE));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_YOUNG));
|
||||
assertThat(variant.toString(), is("female-young"));
|
||||
}
|
||||
|
||||
public void testNamedVoiceVariantYoung()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("klatt2-young");
|
||||
assertThat(variant.variant, is("klatt2"));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_UNSPECIFIED));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_YOUNG));
|
||||
assertThat(variant.toString(), is("klatt2-young"));
|
||||
}
|
||||
|
||||
public void testMaleVoiceVariantOld()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("male-old");
|
||||
assertThat(variant.variant, is(nullValue()));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_MALE));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_OLD));
|
||||
assertThat(variant.toString(), is("male-old"));
|
||||
}
|
||||
|
||||
public void testFemaleVoiceVariantOld()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("female-old");
|
||||
assertThat(variant.variant, is(nullValue()));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_FEMALE));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_OLD));
|
||||
assertThat(variant.toString(), is("female-old"));
|
||||
}
|
||||
|
||||
public void testNamedVoiceVariantOld()
|
||||
{
|
||||
VoiceVariant variant = VoiceVariant.parseVoiceVariant("klatt3-old");
|
||||
assertThat(variant.variant, is("klatt3"));
|
||||
assertThat(variant.gender, is(SpeechSynthesis.GENDER_UNSPECIFIED));
|
||||
assertThat(variant.age, is(SpeechSynthesis.AGE_OLD));
|
||||
assertThat(variant.toString(), is("klatt3-old"));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Copyright (C) Reece H. Dunn [License: CC-BY-SA 3.0] -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="500" version="1.1">
|
||||
|
||||
<rect x="0" y="0" width="1024" height="500" fill="#ffffff"></rect>
|
||||
|
||||
<g transform="translate(0,20)">
|
||||
<g transform="translate(5,-880)"> <!-- width: 200 height: 175 -->
|
||||
<path fill="#d40000" d="
|
||||
m 78,1050
|
||||
c -6, -3 -16,-12 -32,-33
|
||||
C 23, 987 14,980 3,977 1,977 0,977 0,976
|
||||
c 0, 0 5, -5 11,-11 6, -6 18,-19 27,-29 18,-21 35,-40 36,-40 0,0 2,3 4,6 5,9 10,15 15,15 7,0 16,-10 24,-26
|
||||
l 3,-7 4,6
|
||||
c 13,19 33,43 52,62
|
||||
l 15,15 -5, 1
|
||||
c -7, 2 -13,5 -21,12 -6,5 -13,12 -38,40 -17,20 -32,31 -40,31 -2,0 -5,-1 -7,-2
|
||||
z
|
||||
m 24,-49
|
||||
c 7,-3 17,-13 25,-25 6,-9 12,-20 12,-21 0,0 -1,-1 -2,-1 -1,0 -7,-2 -13,-5 -12,-6 -20,-8 -26,-8
|
||||
C 94,942 83,948 69,957 64,961 58,965 57,965
|
||||
c -2,0 -3,1 -3,1 0,1 7,12 10,17 13,18 25,24 38,17
|
||||
z
|
||||
" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g transform="translate(170,0)" font-family="Droid Sans" font-size="64px" font-weight="bold" fill="#000000">
|
||||
<text x="15" y= "64">eSpeak</text>
|
||||
<text x="80" y="134">for</text>
|
||||
<text x= "5" y="192">Android</text>
|
||||
</g>
|
||||
|
||||
<image id="Afrikaans" x= "5" y="225" width="75" height="50" xlink:href="Flag_of_South_Africa.png"/>
|
||||
<image id="Akan" x= "5" y="280" width="75" height="50" xlink:href="Flag_of_Ghana.png"/>
|
||||
<image id="Albanian" x= "5" y="335" width="75" height="50" xlink:href="Flag_of_Albania.png"/>
|
||||
<image id="Amharic" x= "5" y="390" width="75" height="50" xlink:href="Flag_of_Ethiopia.png"/>
|
||||
<image id="Armenian" x= "5" y="445" width="75" height="50" xlink:href="Flag_of_Armenia.png"/>
|
||||
<image id="Azerbaijani" x= "85" y="225" width="75" height="50" xlink:href="Flag_of_Azerbaijan.png"/>
|
||||
<image id="Bosnian" x= "85" y="280" width="75" height="50" xlink:href="Flag_of_Bosnia_and_Herzegovina.png"/>
|
||||
<image id="Bulgarian" x= "85" y="335" width="75" height="50" xlink:href="Flag_of_Bulgaria.png"/>
|
||||
<image id="Catalan" x= "85" y="390" width="75" height="50" xlink:href="Flag_of_Andorra.png"/>
|
||||
<image id="Chinese" x= "85" y="445" width="75" height="50" xlink:href="Flag_of_the_People's_Republic_of_China.png"/>
|
||||
<image id="Croatian" x="165" y="225" width="75" height="50" xlink:href="Flag_of_Croatia.png"/>
|
||||
<image id="Czech" x="165" y="280" width="75" height="50" xlink:href="Flag_of_the_Czech_Republic.png"/>
|
||||
<image id="Danish" x="165" y="335" width="75" height="50" xlink:href="Flag_of_Denmark.png"/>
|
||||
<image id="Divehi" x="165" y="390" width="75" height="50" xlink:href="Flag_of_Maldives.png"/>
|
||||
<image id="Dutch" x="165" y="445" width="75" height="50" xlink:href="Flag_of_the_Netherlands.png"/>
|
||||
<image id="English_GB" x="245" y="225" width="75" height="50" xlink:href="Flag_of_the_United_Kingdom.png"/>
|
||||
<image id="English_US" x="245" y="280" width="75" height="50" xlink:href="Flag_of_the_United_States.png"/>
|
||||
<image id="Esperanto" x="245" y="335" width="75" height="50" xlink:href="Flag_of_Esperanto.png"/>
|
||||
<image id="Estonian" x="245" y="390" width="75" height="50" xlink:href="Flag_of_Estonia.png"/>
|
||||
<image id="Finnish" x="245" y="445" width="75" height="50" xlink:href="Flag_of_Finland.png"/>
|
||||
<image id="French" x="325" y="225" width="75" height="50" xlink:href="Flag_of_France.png"/>
|
||||
<image id="Georgian" x="325" y="280" width="75" height="50" xlink:href="Flag_of_Georgia.png"/>
|
||||
<image id="German" x="325" y="335" width="75" height="50" xlink:href="Flag_of_Germany.png"/>
|
||||
<image id="Greek" x="325" y="390" width="75" height="50" xlink:href="Flag_of_Greece.png"/>
|
||||
<image id="Haitian" x="325" y="445" width="75" height="50" xlink:href="Flag_of_Haiti.png"/>
|
||||
<image id="Indian_Misc" x="405" y="225" width="75" height="50" xlink:href="Flag_of_India.png"/>
|
||||
<image id="Hungarian" x="405" y="280" width="75" height="50" xlink:href="Flag_of_Hungary.png"/>
|
||||
<image id="Icelandic" x="405" y="335" width="75" height="50" xlink:href="Flag_of_Iceland.png"/>
|
||||
<image id="Indonesian" x="405" y="390" width="75" height="50" xlink:href="Flag_of_Indonesia.png"/>
|
||||
<image id="Irish" x="405" y="445" width="75" height="50" xlink:href="Flag_of_Ireland.png"/>
|
||||
<image id="Italian" x="485" y="225" width="75" height="50" xlink:href="Flag_of_Italy.png"/>
|
||||
<image id="Kalaallisut" x="485" y="280" width="75" height="50" xlink:href="Flag_of_Greenland.png"/>
|
||||
<image id="Kazakh" x="485" y="335" width="75" height="50" xlink:href="Flag_of_Kazakhstan.png"/>
|
||||
<image id="Kinyarwanda" x="485" y="390" width="75" height="50" xlink:href="Flag_of_Rwanda.png"/>
|
||||
<image id="Korean" x="485" y="445" width="75" height="50" xlink:href="Flag_of_South_Korea.png"/>
|
||||
<image id="Latvian" x="565" y="225" width="75" height="50" xlink:href="Flag_of_Latvia.png"/>
|
||||
<image id="Lithuania" x="565" y="280" width="75" height="50" xlink:href="Flag_of_Lithuania.png"/>
|
||||
<image id="Lojban" x="565" y="335" width="75" height="50" xlink:href="Flag_of_Lojban.png"/>
|
||||
<image id="Macedonian" x="565" y="390" width="75" height="50" xlink:href="Flag_of_Macedonia.png"/>
|
||||
<image id="Maltese" x="565" y="445" width="75" height="50" xlink:href="Flag_of_Malta.png"/>
|
||||
<image id="Norwegian" x="645" y="225" width="75" height="50" xlink:href="Flag_of_Norway.png"/>
|
||||
<image id="Papiamento" x="645" y="280" width="75" height="50" xlink:href="Flag_of_Aruba.png"/>
|
||||
<image id="Polish" x="645" y="335" width="75" height="50" xlink:href="Flag_of_Poland.png"/>
|
||||
<image id="Portuguese" x="645" y="390" width="75" height="50" xlink:href="Flag_of_Portugal.png"/>
|
||||
<image id="Romanian" x="645" y="445" width="75" height="50" xlink:href="Flag_of_Romania.png"/>
|
||||
<image id="Russian" x="725" y="225" width="75" height="50" xlink:href="Flag_of_Russia.png"/>
|
||||
<image id="Serbian" x="725" y="280" width="75" height="50" xlink:href="Flag_of_Serbia.png"/>
|
||||
<image id="Sinhala" x="725" y="335" width="75" height="50" xlink:href="Flag_of_Sri_Lanka.png"/>
|
||||
<image id="Slovak" x="725" y="390" width="75" height="50" xlink:href="Flag_of_Slovakia.png"/>
|
||||
<image id="Slovenian" x="725" y="445" width="75" height="50" xlink:href="Flag_of_Slovenia.png"/>
|
||||
<image id="Spanish" x="805" y="225" width="75" height="50" xlink:href="Flag_of_Spain.png"/>
|
||||
<image id="Swahili" x="805" y="280" width="75" height="50" xlink:href="Flag_of_Tanzania.png"/>
|
||||
<image id="Swedish" x="805" y="335" width="75" height="50" xlink:href="Flag_of_Sweden.png"/>
|
||||
<image id="Tatar" x="805" y="390" width="75" height="50" xlink:href="Flag_of_Tatarstan.png"/>
|
||||
<image id="Tswana" x="805" y="445" width="75" height="50" xlink:href="Flag_of_Botswana.png"/>
|
||||
<image id="Turkish" x="885" y="225" width="75" height="50" xlink:href="Flag_of_Turkey.png"/>
|
||||
<image id="Urdu" x="885" y="280" width="75" height="50" xlink:href="Flag_of_Pakistan.png"/>
|
||||
<image id="Vietnamese" x="885" y="335" width="75" height="50" xlink:href="Flag_of_Vietnam.png"/>
|
||||
<image id="Welsh" x="885" y="390" width="75" height="50" xlink:href="Flag_of_Wales_2.png"/>
|
||||
<image id="Wolof" x="885" y="445" width="75" height="50" xlink:href="Flag_of_Senegal.png"/>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.1 KiB |
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" version="1.1">
|
||||
|
||||
<g transform="translate(28,0)">
|
||||
<g transform="translate(5,-880)"> <!-- width: 200 height: 175 -->
|
||||
<path fill="#d40000" d="
|
||||
m 78,1050
|
||||
c -6, -3 -16,-12 -32,-33
|
||||
C 23, 987 14,980 3,977 1,977 0,977 0,976
|
||||
c 0, 0 5, -5 11,-11 6, -6 18,-19 27,-29 18,-21 35,-40 36,-40 0,0 2,3 4,6 5,9 10,15 15,15 7,0 16,-10 24,-26
|
||||
l 3,-7 4,6
|
||||
c 13,19 33,43 52,62
|
||||
l 15,15 -5, 1
|
||||
c -7, 2 -13,5 -21,12 -6,5 -13,12 -38,40 -17,20 -32,31 -40,31 -2,0 -5,-1 -7,-2
|
||||
z
|
||||
m 24,-49
|
||||
c 7,-3 17,-13 25,-25 6,-9 12,-20 12,-21 0,0 -1,-1 -2,-1 -1,0 -7,-2 -13,-5 -12,-6 -20,-8 -26,-8
|
||||
C 94,942 83,948 69,957 64,961 58,965 57,965
|
||||
c -2,0 -3,1 -3,1 0,1 7,12 10,17 13,18 25,24 38,17
|
||||
z
|
||||
" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<text x="15" y="230" font-size="64px" font-family="Droid Sans" font-weight="bold" fill="#ffffff">eSpeak</text>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1012 B |
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Copyright (C) Reece H. Dunn [License: CC-BY-SA 3.0] -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="180" height="120" version="1.1">
|
||||
|
||||
<rect x="0" y="0" width="180" height="120" fill="#ffffff"></rect>
|
||||
|
||||
<g transform="scale(0.4,0.4)">
|
||||
<g transform="translate(0,20)">
|
||||
<g transform="translate(5,-880)"> <!-- width: 200 height: 175 -->
|
||||
<path fill="#d40000" d="
|
||||
m 78,1050
|
||||
c -6, -3 -16,-12 -32,-33
|
||||
C 23, 987 14,980 3,977 1,977 0,977 0,976
|
||||
c 0, 0 5, -5 11,-11 6, -6 18,-19 27,-29 18,-21 35,-40 36,-40 0,0 2,3 4,6 5,9 10,15 15,15 7,0 16,-10 24,-26
|
||||
l 3,-7 4,6
|
||||
c 13,19 33,43 52,62
|
||||
l 15,15 -5, 1
|
||||
c -7, 2 -13,5 -21,12 -6,5 -13,12 -38,40 -17,20 -32,31 -40,31 -2,0 -5,-1 -7,-2
|
||||
z
|
||||
m 24,-49
|
||||
c 7,-3 17,-13 25,-25 6,-9 12,-20 12,-21 0,0 -1,-1 -2,-1 -1,0 -7,-2 -13,-5 -12,-6 -20,-8 -26,-8
|
||||
C 94,942 83,948 69,957 64,961 58,965 57,965
|
||||
c -2,0 -3,1 -3,1 0,1 7,12 10,17 13,18 25,24 38,17
|
||||
z
|
||||
" />
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<g transform="translate(170,0)" font-family="Droid Sans" font-size="64px" font-weight="bold" fill="#000000">
|
||||
<text x="15" y= "64">eSpeak</text>
|
||||
<text x="80" y="134">for</text>
|
||||
<text x= "5" y="192">Android</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,64 @@
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_CFLAGS = -std=c++11
|
||||
|
||||
# ucd-tools wide-character compatibility support:
|
||||
|
||||
UCDTOOLS_SRC_PATH := ../../ucd-tools/src
|
||||
UCDTOOLS_SRC_FILES := \
|
||||
$(subst $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH),$(UCDTOOLS_SRC_PATH),$(wildcard $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/*.c*))
|
||||
|
||||
LOCAL_SRC_FILES += $(UCDTOOLS_SRC_FILES)
|
||||
|
||||
# eSpeak (minus command line apps and espeakedit)
|
||||
|
||||
ESPEAK_SOURCES := \
|
||||
src/compiledict.cpp \
|
||||
src/debug.cpp \
|
||||
src/dictionary.cpp \
|
||||
src/intonation.cpp \
|
||||
src/klatt.cpp \
|
||||
src/numbers.cpp \
|
||||
src/readclause.cpp \
|
||||
src/phonemelist.cpp \
|
||||
src/setlengths.cpp \
|
||||
src/sonic.cpp \
|
||||
src/speak_lib.cpp \
|
||||
src/synthdata.cpp \
|
||||
src/synthesize.cpp \
|
||||
src/synth_mbrola.cpp \
|
||||
src/translate.cpp \
|
||||
src/tr_languages.cpp \
|
||||
src/voices.cpp \
|
||||
src/wavegen.cpp \
|
||||
src/wave.cpp
|
||||
|
||||
ESPEAK_SRC_PATH := ../../src
|
||||
ESPEAK_SRC_FILES := \
|
||||
$(subst src/,$(ESPEAK_SRC_PATH)/,$(ESPEAK_SOURCES))
|
||||
|
||||
LOCAL_CFLAGS += -DINCLUDE_KLATT -DINCLUDE_SONIC
|
||||
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*))
|
||||
|
||||
# Common
|
||||
|
||||
LOCAL_C_INCLUDES += \
|
||||
$(LOCAL_PATH)/include \
|
||||
$(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/include \
|
||||
$(LOCAL_PATH)/$(ESPEAK_SRC_PATH)
|
||||
|
||||
LOCAL_LDLIBS := \
|
||||
-llog
|
||||
|
||||
LOCAL_MODULE := libttsespeak
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_PRELINK_MODULE := false
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
@@ -0,0 +1,4 @@
|
||||
APP_OPTIM := release
|
||||
APP_PLATFORM := android-8
|
||||
APP_TOOLCHAIN_VERSION := 4.6.3
|
||||
APP_ABI := mips 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,354 @@
|
||||
/*
|
||||
* Copyright (C) 2012-2015 Reece H. Dunn
|
||||
* 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 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 <Log.h>
|
||||
|
||||
#define BUFFER_SIZE_IN_MILLISECONDS 1000
|
||||
|
||||
/** @name Java to Wide String Helpers
|
||||
* @brief These are helpers for converting a jstring to wchar_t*.
|
||||
*
|
||||
* This assumes that wchar_t is a 32-bit (UTF-32) value.
|
||||
*/
|
||||
//@{
|
||||
|
||||
const char *utf8_read(const char *in, wchar_t &c)
|
||||
{
|
||||
if (uint8_t(*in) < 0x80)
|
||||
c = *in++;
|
||||
else switch (uint8_t(*in) & 0xF0)
|
||||
{
|
||||
default:
|
||||
c = uint8_t(*in++) & 0x1F;
|
||||
c = (c << 6) + (uint8_t(*in++) & 0x3F);
|
||||
break;
|
||||
case 0xE0:
|
||||
c = uint8_t(*in++) & 0x0F;
|
||||
c = (c << 6) + (uint8_t(*in++) & 0x3F);
|
||||
c = (c << 6) + (uint8_t(*in++) & 0x3F);
|
||||
break;
|
||||
case 0xF0:
|
||||
c = uint8_t(*in++) & 0x07;
|
||||
c = (c << 6) + (uint8_t(*in++) & 0x3F);
|
||||
c = (c << 6) + (uint8_t(*in++) & 0x3F);
|
||||
c = (c << 6) + (uint8_t(*in++) & 0x3F);
|
||||
break;
|
||||
}
|
||||
return in;
|
||||
}
|
||||
|
||||
class unicode_string
|
||||
{
|
||||
static_assert(sizeof(wchar_t) == 4, "wchar_t is not UTF-32");
|
||||
public:
|
||||
unicode_string(JNIEnv *env, jstring str);
|
||||
~unicode_string();
|
||||
|
||||
const wchar_t *c_str() const { return mString; }
|
||||
private:
|
||||
wchar_t *mString;
|
||||
};
|
||||
|
||||
unicode_string::unicode_string(JNIEnv *env, jstring str)
|
||||
: mString(NULL)
|
||||
{
|
||||
if (str == NULL) return;
|
||||
|
||||
const char *utf8 = env->GetStringUTFChars(str, NULL);
|
||||
mString = (wchar_t *)malloc((strlen(utf8) + 1) * sizeof(wchar_t));
|
||||
|
||||
const char *utf8_current = utf8;
|
||||
wchar_t *utf32_current = mString;
|
||||
while (*utf8_current)
|
||||
{
|
||||
utf8_current = utf8_read(utf8_current, *utf32_current);
|
||||
++utf32_current;
|
||||
}
|
||||
*utf32_current = 0;
|
||||
|
||||
env->ReleaseStringUTFChars(str, utf8);
|
||||
}
|
||||
|
||||
unicode_string::~unicode_string()
|
||||
{
|
||||
if (mString) free(mString);
|
||||
}
|
||||
|
||||
//@}
|
||||
|
||||
#define LOG_TAG "eSpeakService"
|
||||
#define DEBUG true
|
||||
|
||||
enum synthesis_result {
|
||||
SYNTH_CONTINUE = 0,
|
||||
SYNTH_ABORT = 1
|
||||
};
|
||||
|
||||
static JavaVM *jvm = NULL;
|
||||
jmethodID METHOD_nativeSynthCallback;
|
||||
|
||||
static JNIEnv *getJniEnv() {
|
||||
JNIEnv *env = NULL;
|
||||
jvm->AttachCurrentThread(&env, NULL);
|
||||
return env;
|
||||
}
|
||||
|
||||
/* Callback from espeak. Should call back to the TTS API */
|
||||
static int SynthCallback(short *audioData, int numSamples,
|
||||
espeak_EVENT *events) {
|
||||
JNIEnv *env = getJniEnv();
|
||||
jobject object = (jobject)events->user_data;
|
||||
|
||||
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) {
|
||||
jvm = vm;
|
||||
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_reecedunn_espeak_SpeechSynthesis_nativeClassInit(
|
||||
JNIEnv* env, jclass clazz) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
METHOD_nativeSynthCallback = env->GetMethodID(clazz, "nativeSynthCallback", "([B)V");
|
||||
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
JNIEXPORT jint
|
||||
JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeCreate(
|
||||
JNIEnv *env, jobject object, jstring path) {
|
||||
if (DEBUG) LOGV("%s [env=%p, object=%p]", __FUNCTION__, env, object);
|
||||
|
||||
const char *c_path = path ? env->GetStringUTFChars(path, NULL) : NULL;
|
||||
|
||||
if (DEBUG) LOGV("Initializing with path %s", c_path);
|
||||
int sampleRate = espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, BUFFER_SIZE_IN_MILLISECONDS, c_path, 0);
|
||||
|
||||
if (c_path) env->ReleaseStringUTFChars(path, c_path);
|
||||
|
||||
return sampleRate;
|
||||
}
|
||||
|
||||
JNIEXPORT jobject
|
||||
JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeGetVersion(
|
||||
JNIEnv *env, jclass clazz) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
return env->NewStringUTF(espeak_Info(NULL));
|
||||
}
|
||||
|
||||
JNIEXPORT jobjectArray
|
||||
JNICALL Java_com_reecedunn_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_reecedunn_espeak_SpeechSynthesis_nativeSetVoiceByName(
|
||||
JNIEnv *env, jobject object, jstring name) {
|
||||
const char *c_name = name ? env->GetStringUTFChars(name, NULL) : NULL;
|
||||
|
||||
if (DEBUG) LOGV("%s(name=%s)", __FUNCTION__, c_name);
|
||||
|
||||
const espeak_ERROR result = espeak_SetVoiceByName(c_name);
|
||||
|
||||
if (c_name) env->ReleaseStringUTFChars(name, c_name);
|
||||
|
||||
switch (result) {
|
||||
case EE_OK: return JNI_TRUE;
|
||||
case EE_INTERNAL_ERROR: LOGE("espeak_SetVoiceByName: internal error."); break;
|
||||
case EE_BUFFER_FULL: LOGE("espeak_SetVoiceByName: buffer full."); break;
|
||||
case EE_NOT_FOUND: LOGE("espeak_SetVoiceByName: not found."); break;
|
||||
}
|
||||
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeSetVoiceByProperties(
|
||||
JNIEnv *env, jobject object, jstring language, jint gender, jint age) {
|
||||
const char *c_language = language ? env->GetStringUTFChars(language, NULL) : NULL;
|
||||
|
||||
if (DEBUG) LOGV("%s(language=%s, gender=%d, age=%d)", __FUNCTION__, c_language, gender, age);
|
||||
|
||||
espeak_VOICE voice_select;
|
||||
memset(&voice_select, 0, sizeof(espeak_VOICE));
|
||||
voice_select.languages = c_language;
|
||||
voice_select.gender = (int) gender;
|
||||
voice_select.age = (int) age;
|
||||
|
||||
const espeak_ERROR result = espeak_SetVoiceByProperties(&voice_select);
|
||||
|
||||
if (c_language) env->ReleaseStringUTFChars(language, c_language);
|
||||
|
||||
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_reecedunn_espeak_SpeechSynthesis_nativeSetParameter(
|
||||
JNIEnv *env, jobject object, jint parameter, jint value) {
|
||||
if (DEBUG) LOGV("%s(parameter=%d, value=%d)", __FUNCTION__, parameter, value);
|
||||
const espeak_ERROR result = espeak_SetParameter((espeak_PARAMETER)parameter, (int)value, 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 jint
|
||||
JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeGetParameter(
|
||||
JNIEnv *env, jobject object, jint parameter, jint current) {
|
||||
if (DEBUG) LOGV("%s(parameter=%d, pitch=%d)", __FUNCTION__, parameter, current);
|
||||
return espeak_GetParameter((espeak_PARAMETER)parameter, (int)current);
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeSetPunctuationCharacters(
|
||||
JNIEnv *env, jobject object, jstring characters) {
|
||||
if (DEBUG) LOGV("%s)", __FUNCTION__);
|
||||
|
||||
unicode_string list(env, characters);
|
||||
const espeak_ERROR result = espeak_SetPunctuationList(list.c_str());
|
||||
switch (result) {
|
||||
case EE_OK: return JNI_TRUE;
|
||||
case EE_INTERNAL_ERROR: LOGE("espeak_SetPunctuationList: internal error."); break;
|
||||
case EE_BUFFER_FULL: LOGE("espeak_SetPunctuationList: buffer full."); break;
|
||||
case EE_NOT_FOUND: LOGE("espeak_SetPunctuationList: not found."); break;
|
||||
}
|
||||
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean
|
||||
JNICALL Java_com_reecedunn_espeak_SpeechSynthesis_nativeSynthesize(
|
||||
JNIEnv *env, jobject object, jstring text, jboolean isSsml) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
const char *c_text = text ? env->GetStringUTFChars(text, NULL) : NULL;
|
||||
unsigned int unique_identifier;
|
||||
|
||||
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)
|
||||
isSsml ? espeakCHARS_UTF8 | espeakSSML // UTF-8 encoded SSML
|
||||
: espeakCHARS_UTF8, // UTF-8 encoded text
|
||||
&unique_identifier, object);
|
||||
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_reecedunn_espeak_SpeechSynthesis_nativeStop(
|
||||
JNIEnv *env, jobject object) {
|
||||
if (DEBUG) LOGV("%s", __FUNCTION__);
|
||||
espeak_Cancel();
|
||||
|
||||
return JNI_TRUE;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
rsvg -w 24 -h 24 icons/launcher.svg res/drawable-ldpi/icon.png
|
||||
rsvg -w 32 -h 32 icons/launcher.svg res/drawable-mdpi/icon.png
|
||||
rsvg -w 48 -h 48 icons/launcher.svg res/drawable-hdpi/icon.png
|
||||
rsvg -w 64 -h 64 icons/launcher.svg res/drawable-xhdpi/icon.png
|
||||
|
||||
ls icons/Flag_*.svg | while read flag ; do
|
||||
rsvg -w 75 -h 50 $flag `echo $flag | sed -e 's,.svg,.png,g'`
|
||||
done
|
||||
|
||||
rsvg -w 1024 -h 500 icons/feature-graphic.svg icons/feature-graphic.png
|
||||
rsvg -w 180 -h 120 icons/promo-graphic.svg icons/promo-graphic.png
|
||||
@@ -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-18
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2013 Reece H. Dunn
|
||||
# License: GPLv3+
|
||||
#
|
||||
# Helper utility for removing a string/string-list item in all string resources.
|
||||
#
|
||||
# Usage: ./remove_string.sh <string_id>
|
||||
|
||||
ls res/values*/strings.xml | while read STRINGS ; do
|
||||
xmlstarlet ed -P -d "/resources/*[@name='${1}']" ${STRINGS} > /tmp/strings.xml
|
||||
mv /tmp/strings.xml ${STRINGS}
|
||||
done
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 714 B |
|
After Width: | Height: | Size: 994 B |
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1,24 @@
|
||||
<?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:style/Widget.ProgressBar.Horizontal"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:id="@+id/progress"
|
||||
android:indeterminate="false"
|
||||
android:longClickable="false" />
|
||||
|
||||
<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,14 @@
|
||||
<?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" >
|
||||
|
||||
<Spinner
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/dictionaries"
|
||||
android:gravity="bottom"
|
||||
android:layout_gravity="center_vertical" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/LinearLayout1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:padding="6dp" >
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/title"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ellipsize="marquee"
|
||||
android:fadingEdge="horizontal"
|
||||
android:singleLine="true"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<TextView
|
||||
android:id="@android:id/summary"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxLines="4"
|
||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||
android:textColor="?android:attr/textColorSecondary" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?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>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/success"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible" >
|
||||
|
||||
<ListView
|
||||
android:id="@+id/properties"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1" >
|
||||
|
||||
</ListView>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/synthesis_demo"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/editText1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:ems="10"
|
||||
android:inputType="textMultiLine" >
|
||||
|
||||
</EditText>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/speak"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/speak" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/ssml"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/ssml" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?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" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/valueText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:gravity="center_horizontal"
|
||||
android:textIsSelectable="false"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/seekBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
|
||||
<Button
|
||||
android:id="@+id/resetToDefault"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom"
|
||||
android:text="@string/resetToDefault" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?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" >
|
||||
|
||||
<RadioGroup
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:focusable="false"
|
||||
android:id="@+id/options">
|
||||
|
||||
<RadioButton
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/punctuation_all"
|
||||
android:id="@+id/all"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:clickable="true"
|
||||
android:checked="false" />
|
||||
|
||||
<RadioButton
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/punctuation_custom"
|
||||
android:id="@+id/custom"
|
||||
android:focusable="false"
|
||||
android:focusableInTouchMode="false"
|
||||
android:clickable="true" />
|
||||
|
||||
<RadioButton
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:text="@string/punctuation_none"
|
||||
android:id="@+id/none" />
|
||||
</RadioGroup>
|
||||
|
||||
<EditText
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="48dp"
|
||||
android:id="@+id/punctuation_characters"
|
||||
android:hint="@string/punctuation_characters" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,52 @@
|
||||
<?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" >
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp"
|
||||
android:layout_gravity="center">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/category"
|
||||
android:layout_weight="0.5"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_gravity="center_vertical" />
|
||||
|
||||
<Spinner
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/category"
|
||||
android:layout_weight="0.5"
|
||||
android:gravity="bottom"
|
||||
android:layout_gravity="center_vertical" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="48dp">
|
||||
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:text="@string/variant"
|
||||
android:layout_weight="0.5"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_gravity="center_vertical" />
|
||||
|
||||
<Spinner
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/variant"
|
||||
android:layout_weight="0.5"
|
||||
android:gravity="bottom"
|
||||
android:layout_gravity="center_vertical" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||
<item android:id="@+id/espeakSettings" android:title="@string/engine_settings"></item>
|
||||
<item android:id="@+id/ttsSettings" android:title="@string/tts_settings"></item>
|
||||
|
||||
|
||||
</menu>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS-instellings</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Verstek toonhoogte</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Spraaktempo-vermenigvuldiger</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Installeer tans stemdata...</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 nie as jou verstek teks-na-spraak-enjin opgestel nie.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak kon nie stemdata installeer nie. Kontroleer asseblief jou SD-kaart.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Jammer, eSpeak kon nie begin nie.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Verstek stem</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Stemme geïnstalleer</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Algemene TTS-instellings</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS-instellings</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Laai tans, wag asseblief...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Hierdie is \'n voorbeeld van gesproke teks in %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS ቅንብሮች</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">ነባሪ የድምጽ መውጣት/መውረድ</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">የንግግር መጠን ማባዣ</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 እንደነባሪ የጽሑፍ-ወደ-ንግግር ፕሮግራም ሆኖ አልተቀመጠም። አሁን ማስቀመጥ ትፈልጋለህ?</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak የድምጽ ውሂብ መጫን አልተሳካለትም። እባክህ የማከማቻ መሳሪያ ካርድህን ፈትሽ።</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">ይቅርታ፣ eSpeak መጀመር አልቻለም። የስህተት ሪፖርት መላክ ትፈልጋለህ?</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">ነባሪ ድምጽ</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">የተጫኑ ድምጾች</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">አጠቃላይ የ TTS ቅንብሮች</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS ቅንብሮች</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">በመጫን ላይ፣ እባክህ ጠብቅ…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">ይሄ በ%s ላይ የተነገረ ጽሑፍ ናሙና ነው።</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">إعدادات eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">المستوى الافتراضي</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">مضاعف معدل الكلام</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 كمحرك افتراضي لتحويل النص إلى كلام. هل تريد تعيينه الآن؟</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">أخفق eSpeak في تثبيت البيانات الصوتية. الرجاء التحقق من بطاقة SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">عذرًا، أخفق بدء eSpeak. هل تريد إرسال تقرير بالخطأ؟</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">الصوت الافتراضي</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">الأصوات المثبتة</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">إعدادات TTS العامة</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">إعدادات eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">جارٍ التحميل، يُرجى الانتظار...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">هذه عينة من النص الذي تم نطقه في %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Настройки на eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Височина на гласа</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Скорост на речта</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 не е зададен като ваша речева машина по подразбиране.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak не успя да инсталира гласовите данни. Моля, проверете машата SD карта.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Съжаляваме, но eSpeak не можа да бъде стартиран.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Глас по подразбиране</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Инсталирани гласове</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Основни речеви настройки</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Настройки на eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Зареждане. Моля, изчакайте…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Това е откъс от изговорен текст на %s</string>
|
||||
<string name="status">Състояние</string>
|
||||
<string name="tts_version">Версия на eSpeak</string>
|
||||
<string name="speak">Прочети</string>
|
||||
<string name="ssml">Зареди SSML шаблон</string>
|
||||
<string name="synthesis_demo">Въведете текст за прочитане:</string>
|
||||
<string name="espeak_volume">Сила на звука</string>
|
||||
<string name="formatter_wpm">%s думи в секунда</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Нулирай стойностите</string>
|
||||
<string name="espeak_pitch_range">Вариация на височината</string>
|
||||
<string name="espeak_variant">Вариант на гласа</string>
|
||||
<string name="espeak_speak_punctuation">Изговаряна пунктуация</string>
|
||||
<string name="punctuation_all">Всичко</string>
|
||||
<string name="punctuation_custom">По избор</string>
|
||||
<string name="punctuation_custom_fmt">По избор: %s</string>
|
||||
<string name="punctuation_none">Нищо</string>
|
||||
<string name="punctuation_characters">Пунктуационни знаци</string>
|
||||
<string name="category">Категория</string>
|
||||
<string name="variant">Вариант</string>
|
||||
<string name="variant_male">Мъжки</string>
|
||||
<string name="variant_female">Женски</string>
|
||||
<string name="variant_default">По подразбиране</string>
|
||||
<string name="variant_n">Вариант %d</string>
|
||||
<string name="variant_young">Младежки</string>
|
||||
<string name="variant_old">Старчески</string>
|
||||
<string name="variant_croak">Грачещ</string>
|
||||
<string name="variant_whisper">Шептящ</string>
|
||||
<string name="import_voice_title">Внасяне на речник на eSpeak</string>
|
||||
<string name="import_voice_description">Внасяне на файл с гласов речник за eSpeak от SD картата.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Configuració de l\'eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">To predeterminat</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplicador de velocitat de la veu</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">S\'estan instal·lant les dades de veu...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">No teniu definit l\'eSpeak com a motor de text a veu predeterminat.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">L\'eSpeak no ha pogut instal·lar dades de veu. Comproveu la targeta SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">No s\'ha pogut iniciar l\'eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Veu predeterminada</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Veus instal·lades</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Configuració general de TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Configuració de l\'eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">S\'està carregant; espereu...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Aquesta és una mostra de text llegit en veu alta en %s</string>
|
||||
<string name="status">Estat</string>
|
||||
<string name="tts_version">Versió de l\'eSpeak</string>
|
||||
<string name="speak">Parla</string>
|
||||
<string name="ssml">Carrega la plantilla SSML</string>
|
||||
<string name="synthesis_demo">Introduïu el text a reproduir:</string>
|
||||
<string name="espeak_volume">Volum</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Estableix com a predeterminat</string>
|
||||
<string name="espeak_pitch_range">Escolliu una variació</string>
|
||||
<string name="espeak_variant">Variant de veu</string>
|
||||
<string name="espeak_speak_punctuation">Lletreja la puntuació</string>
|
||||
<string name="punctuation_all">Totes</string>
|
||||
<string name="punctuation_custom">Personalitzada</string>
|
||||
<string name="punctuation_custom_fmt">Personalitzada: %s</string>
|
||||
<string name="punctuation_none">Cap</string>
|
||||
<string name="punctuation_characters">Signes de puntuació</string>
|
||||
<string name="category">Categoria</string>
|
||||
<string name="variant">Variant</string>
|
||||
<string name="variant_male">Masculina</string>
|
||||
<string name="variant_female">Femenina</string>
|
||||
<string name="variant_default">Predeterminada</string>
|
||||
<string name="variant_n">Variant %d</string>
|
||||
<string name="variant_young">Jove</string>
|
||||
<string name="variant_old">Vell</string>
|
||||
<string name="variant_whisper">Xiuxiuejant</string>
|
||||
<string name="import_voice_title">Importa el diccionari eSpeak</string>
|
||||
<string name="import_voice_description">Importa un fitxer de diccioanri de veu de l\'eSpeak de la targeta SD.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Nastavení modulu eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Výchozí výška hlasu</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplikátor rychlosti řeči</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Instalace hlasových dat...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Aplikace eSpeak není nastavena jako váš výchozí modul pro převod textu na řeč.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Aplikaci eSpeak se nepodařilo nainstalovat hlasová data. Zkontrolujte prosím kartu SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Je nám líto, aplikaci eSpeak se nepodařilo spustit.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Výchozí hlas</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Počet nainstalovaných hlasů</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Obecná nastavení modulu TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Nastavení modulu eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Načítání, čekejte prosím...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Toto je ukázkový text namluvený v jazyce %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak-indstillinger for TTT</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Standard tonehøjde</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Talehastighedsmultiplikator</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Installerer stemmedata...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak er ikke angivet som din standard tekst-til-tale-maskine.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak kunne ikke installere stemmedataene. Kontrollér dit SD-kort.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Vi beklager, men eSpeak kunne ikke startes.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Standardstemme</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Installerede stemmer</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Generelle indstillinger for TTT</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak-indstillinger for TTT</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Indlæser. Vent et øjeblik...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Dette er et eksempel på talt tekst på %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS Einstellungen</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Stimmhöhe</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Geschwindigkeit</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Dateien für Sprachen werden installiert…</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak ist nicht als Standardsprachausgabe eingestellt.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak konnte keine Sprachdateien installieren. Bitte SD-Karte überprüfen.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Leider konnte eSpeak nicht gestartet werden.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Standardsprache</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Installierte Stimmen</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Allgemeine TTS-Einstellungen</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS-Einstellungen</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Es wird geladen… Bitte warten…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Dies ist ein Beispieltext auf %s</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="tts_version">eSpeak Version</string>
|
||||
<string name="speak">Sprechen</string>
|
||||
<string name="ssml">SSML-Vorlage laden</string>
|
||||
<string name="synthesis_demo">Text, der gesprochen werden soll, eingeben:</string>
|
||||
<string name="espeak_volume">Lautstärke</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Auf Standardwerte zurücksetzen</string>
|
||||
<string name="espeak_pitch_range">Betonung</string>
|
||||
<string name="espeak_variant">Variante</string>
|
||||
<string name="espeak_speak_punctuation">Satzzeichen sprechen</string>
|
||||
<string name="punctuation_all">Alle</string>
|
||||
<string name="punctuation_custom">Benutzerdefiniert</string>
|
||||
<string name="punctuation_custom_fmt">Benutzerdefiniert: %s</string>
|
||||
<string name="punctuation_none">Keine</string>
|
||||
<string name="punctuation_characters">Satzzeichen</string>
|
||||
<string name="category">Kategorie</string>
|
||||
<string name="variant">Variante</string>
|
||||
<string name="variant_male">Männlich</string>
|
||||
<string name="variant_female">Weiblich</string>
|
||||
<string name="variant_default">Standard</string>
|
||||
<string name="variant_n">Variante %d</string>
|
||||
<string name="variant_young">Jung</string>
|
||||
<string name="variant_old">Alt</string>
|
||||
<string name="variant_croak">Krächzen</string>
|
||||
<string name="variant_whisper">Flüstern</string>
|
||||
<string name="import_voice_title">eSpeak-Wörterbuch importieren</string>
|
||||
<string name="import_voice_description">Ein eSpeak-Sprachwörterbuch von der SD-Karte importieren.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Ρυθμίσεις eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Προεπιλεγμένος τόνος</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Πολλαπλασιαστής ρυθμού ομιλίας</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 δεν έχει οριστεί ως η προεπιλεγμένη μηχανή μετατροπής κειμένου σε λόγο.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Το eSpeak απέτυχε να εγκαταστήσει τα δεδομένα φωνής. Ελέγξτε την κάρτα SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Λυπούμαστε, η εκκίνηση του eSpeak απέτυχε.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Προεπιλεγμένη φωνή</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Φωνές που έχουν εγκατασταθεί</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Γενικές ρυθμίσεις TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Ρυθμίσεις eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Γίνεται φόρτωση. Περιμένετε...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--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">Pitch</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Speech rate</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.</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.</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: 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 %s</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="tts_version">eSpeak version</string>
|
||||
<string name="speak">Speak</string>
|
||||
<string name="ssml">Load SSML Template</string>
|
||||
<string name="synthesis_demo">Enter text to speak:</string>
|
||||
<string name="espeak_volume">Volume</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Set to default</string>
|
||||
<string name="espeak_pitch_range">Pitch variation</string>
|
||||
<string name="espeak_variant">Voice variant</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Config del sintetizador eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Tono</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Velocidad de Voz</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Instalando Datos de Voz …</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak no se ha establecido como el sintetizador por defecto.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak no instaló los datos de voz. Compruebe la tarjeta SD por favor.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Lo sentimos. eSpeak no se inició.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voz por Defecto</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Voces instaladas</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Config general del sintetizador</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Config del sintetizador eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Cargando. Espere por favor …</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Este es un ejemplo de texto hablado en %s.</string>
|
||||
<string name="status">Estado</string>
|
||||
<string name="tts_version">Versión de eSpeak</string>
|
||||
<string name="speak">Hablar</string>
|
||||
<string name="ssml">Cargar Plantilla de SSML</string>
|
||||
<string name="synthesis_demo">Ingresar texto a verbalizar:</string>
|
||||
<string name="espeak_volume">Volumen</string>
|
||||
<string name="formatter_wpm">%s PPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Volver a config original</string>
|
||||
<string name="espeak_pitch_range">Variación de Tono</string>
|
||||
<string name="espeak_variant">Variante de Voz</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Config del sintetizador eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Tono</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Velocidad de Voz</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Instalando Datos de Voz …</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak no se ha establecido como el sintetizador por defecto.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak no instaló los datos de voz. Compruebe la tarjeta SD por favor.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Lo sentimos. eSpeak no se inició.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voz por Defecto</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Voces instaladas</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Config general del sintetizador</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Config del sintetizador eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Cargando. Espere por favor …</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Esto es un ejemplo de texto hablado en %s.</string>
|
||||
<string name="status">Estado</string>
|
||||
<string name="tts_version">Versión de eSpeak</string>
|
||||
<string name="speak">Hablar</string>
|
||||
<string name="ssml">Cargar Plantilla de SSML</string>
|
||||
<string name="synthesis_demo">Introducir texto a verbalizar:</string>
|
||||
<string name="espeak_volume">Volumen</string>
|
||||
<string name="formatter_wpm">%s PPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Volver a config original</string>
|
||||
<string name="espeak_pitch_range">Variación de Tono</string>
|
||||
<string name="espeak_variant">Variante de Voz</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">تنظیمات eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">زیر و بمی پیشفرض</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">تقویتکننده سرعت گفتگو</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 اکنون بعنوان موتور پیشفرض نوشتار به گفتار شما تنظیم شده است. میخواهید اکنون آن را تنظیم کنید؟</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak نتوانست دادههای صوتی را نصب کند. لطفاً کارت SD خود را بررسی کنید.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">متأسفیم، eSpeak شروع به کار نکرد. میخواهید یک گزارش خطا ارسال کنید؟</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">صدای پیشفرض</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">صداهای نصب شده</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">تنظیمات کلی TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">تنظیمات eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">در حال بارگیری، لطفاً صبر کنید...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">این یک نمونه از نوشتار گفته شده در %s است</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS -asetukset</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Äänenkorkeus</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Puhenopeus</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Asennetaan äänitietoja...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeakia ei ole asetettu tekstistä puheeksi -oletusmoottoriksi.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeakin äänitietojen asentaminen epäonnistui. Tarkista SD-kortti.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">eSpeakin käynnistäminen epäonnistui.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Oletusääni</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Asennettuja ääniä</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Yleiset tekstistä puheeksi -asetukset</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS -asetukset</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Ladataan, odota...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Tämä on näyte puhutusta tekstistä kielellä %s</string>
|
||||
<string name="status">Tila</string>
|
||||
<string name="tts_version">eSpeak-versio</string>
|
||||
<string name="speak">Puhu</string>
|
||||
<string name="ssml">Lataa SSML-malli</string>
|
||||
<string name="synthesis_demo">Kirjoita puhuttava teksti:</string>
|
||||
<string name="espeak_volume">Voimakkuus</string>
|
||||
<string name="formatter_wpm">%s sanaa minuutissa</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Palauta oletus</string>
|
||||
<string name="espeak_pitch_range">Äänenkorkeuden vaihtelu</string>
|
||||
<string name="espeak_variant">Äänen muunnelma</string>
|
||||
<string name="espeak_speak_punctuation">Puhu välimerkit</string>
|
||||
<string name="punctuation_all">Kaikki</string>
|
||||
<string name="punctuation_custom">Oma</string>
|
||||
<string name="punctuation_custom_fmt">Oma: %s</string>
|
||||
<string name="punctuation_none">Ei mitään</string>
|
||||
<string name="punctuation_characters">Välimerkit</string>
|
||||
<string name="category">Kategoria</string>
|
||||
<string name="variant">Muunnelma</string>
|
||||
<string name="variant_male">Mies</string>
|
||||
<string name="variant_female">Nainen</string>
|
||||
<string name="variant_default">Oletus</string>
|
||||
<string name="variant_n">Muunnelma %d</string>
|
||||
<string name="variant_young">Nuori</string>
|
||||
<string name="variant_old">Vanha</string>
|
||||
<string name="variant_croak">Raakkuva</string>
|
||||
<string name="variant_whisper">Kuiskaava</string>
|
||||
<string name="import_voice_title">Tuo eSpeak-sanasto</string>
|
||||
<string name="import_voice_description">Tuo eSpeak-äänisanastotiedosto SD-kortilta.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Paramètres de synthèse vocale eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Tonalité par défaut</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplicateur de la cadence</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Installation des données vocales en cours…</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak n\'est pas votre moteur de synthèse vocale par défaut.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Échec de l\'installation des données vocales par eSpeak. Veuillez vérifier votre carte SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Désolé, impossible de lancer eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voix par défaut</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Voix installées</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Paramètres généraux de synthèse vocale</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Paramètres de synthèse vocale eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Chargement en cours, veuillez patienter…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Voici un exemple de texte énoncé en %s.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS सेटिंग</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">डिफ़ॉल्ट पिच</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">वाक् दर गुणक</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 आपके डिफ़ॉल्ट पाठ-से-वाक् इंजन के रूप में सेट नहीं है. क्या आप इसे अभी सेट करना चाहते हैं?</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak ध्वनि डेटा इंस्टॉल करने में विफल हुआ. कृपया अपना SD कार्ड जांचें.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">क्षमा करें, eSpeak प्रारंभ होने में विफल हुआ. क्या आप त्रुटि रिपोर्ट भेजना चाहते हैं?</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">डिफ़ॉल्ट ध्वनि</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">इंस्टॉल की गई ध्वनियां</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">सामान्य TTS सेटिंग</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS सेटिंग</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">लोड हो रहा है, कृपया प्रतीक्षा करें…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">यह %s में बोले गए पाठ का नमूना है</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">TTS postavke programa eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Zadana postavka visine tona</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplikator brzine govora</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Instaliranje glasovnih podataka...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Program eSpeak nije postavljen kao vaš zadani alat za pretvaranje teksta u govor.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Program eSpeak nije uspio instalirati glasovne podatke. Provjerite svoju SD karticu.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Žao nam je, ali pokretanje programa eSpeak nije uspjelo.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Zadani glas</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Broj instaliranih glasova</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Opće postavke TTS-a</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">TTS postavke programa eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Učitavanje. Pričekajte...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Ovo je primjer teksta izgovorenog na %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak -- A szövegfelismerő beállításai</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Alapértelmezett hangszín</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Beszédsebesség gyorsítása</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Hangadatok telepítése...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Nem az eSpeak az alapértelmezett szövegfelolvasó motor.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Az eSpeak nem tudta telepíteni a hangadatokat. Ellenőrizze az SD-kártyát.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Sajnos az eSpeak nem indul.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Alapértelmezett hang</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Telepített hangok</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Általános szövegfelolvasási beállítások</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak -- A szövegfelismerő beállításai</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Betöltés folyamatban -- kérjük, várjon...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Ez egy %s nyelven felolvasott szöveg mintája.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Setelan eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Nada</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Pengucapan</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Memasang data suara...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak tidak disetel sebagai mesin default text-to-speech anda.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak gagal memasang data suara. Silahkan periksa kartu SD anda.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Maaf, eSpeak gagal untuk berjalan.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Suara default</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Suara yang dipasang</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Setelan umum TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Setelan eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Memuat, harap tunggu...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Ini adalah sebuah contoh teks yang diucapkan di %s</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="tts_version">eSpeak versi</string>
|
||||
<string name="speak">Ucapan</string>
|
||||
<string name="ssml">Memuat SSML Template</string>
|
||||
<string name="synthesis_demo">Masukan teks untuk di ucapkan:</string>
|
||||
<string name="espeak_volume">Volume</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Setel sebagai mesin utama</string>
|
||||
<string name="espeak_pitch_range">Variasi Nada</string>
|
||||
<string name="espeak_variant">Variasi Pengucapan</string>
|
||||
<string name="espeak_speak_punctuation">Pengucapan tanda baca</string>
|
||||
<string name="punctuation_all">Semua</string>
|
||||
<string name="punctuation_custom">Sesuaikan</string>
|
||||
<string name="punctuation_custom_fmt">Sesuaikan: %s</string>
|
||||
<string name="punctuation_none">Tidak ada</string>
|
||||
<string name="punctuation_characters">Karakter tanda baca</string>
|
||||
<string name="category">Kategori</string>
|
||||
<string name="variant">Variasi</string>
|
||||
<string name="variant_male">Pria</string>
|
||||
<string name="variant_female">Wanita</string>
|
||||
<string name="variant_default">Default</string>
|
||||
<string name="variant_n">Variasi %d</string>
|
||||
<string name="variant_young">Muda</string>
|
||||
<string name="variant_old">Tua</string>
|
||||
<string name="variant_croak">Serak</string>
|
||||
<string name="variant_whisper">Bisikan</string>
|
||||
<string name="import_voice_title">Memuat kamus eSpeak</string>
|
||||
<string name="import_voice_description">Memuat kamus ucapan eSpeak dari kartu SD.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Impostazioni di sintesi vocale eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Tono</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Velocità sintesi vocale</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Installazione dati sintesi vocale...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak non è impostato come motore di sintesi vocale predefinito.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Installazione dei dati di sintesi vocale eSpeak non riuscita. Controlla la tua scheda SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Spiacente, avvio di eSpeak non riuscito.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voce predefinita</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Voci installate</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Impostazioni generali di sintesi vocale</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Impostazioni di sintesi vocale eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Caricamento, attendere...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Questo è un esempio di testo parlato in %s</string>
|
||||
<string name="status">stato</string>
|
||||
<string name="tts_version">Versione Espeak</string>
|
||||
<string name="speak">Parla</string>
|
||||
<string name="ssml">Carica modello SSML</string>
|
||||
<string name="synthesis_demo">Inserisci il testo da pronunciare</string>
|
||||
<string name="espeak_volume">Volume</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Imposta a predefinito</string>
|
||||
<string name="espeak_pitch_range">Variazione tono</string>
|
||||
<string name="espeak_variant">Variante voce</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">הגדרות eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">ברירת מחדל לגובה צליל</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">מכפיל קצב דיבור</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 אינו מוגדר כמנוע ברירת המחדל שלך לתכונת טקסט לדיבור. האם אתה רוצה להגדיר אותו כעת?</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">התקנת נתוני הקול של eSpeak נכשלה. בדוק את כרטיס ה-SD שלך.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">מצטערים. הפעלת eSpeak נכשלה. האם אתה רוצה לשלוח דוח שגיאה?</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">ברירת מחדל לקול</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">קולות שהותקנו</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">הגדרות TTS כלליות</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">הגדרות eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">טוען. המתן...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">זוהי דוגמה לקריאת טקסט ב-%s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeakテキスト読み上げ設定</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">デフォルトの声の高さ</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">音声速度</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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はデフォルトのテキスト読み上げエンジンに設定されていません。</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeakで音声データをインストールできませんでした。SDカードを確認してください。</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">eSpeakを起動できませんでした。</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">デフォルトの音声</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">インストールされている音声</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">テキスト読み上げの全般設定</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeakテキスト読み上げ設定</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">読み込んでいます。お待ちください...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">%sで話すテキストサンプルです。</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS 설정</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">기본 피치</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">음성 배속 비율</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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가 기본 TTS 엔진으로 설정되지 않았습니다.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak에서 음성 데이터를 설치하지 못했습니다. SD 카드를 확인하세요.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">죄송합니다, eSpeak를 시작할 수 없습니다.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">기본 음성</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">음성 설치됨</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">일반 TTS 설정</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS 설정</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">로드 중... 잠시 기다려 주세요.</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">%s로 읽은 텍스트 샘플입니다.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">„eSpeak“ TĮK nustatymai</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Numatytasis garso aukštis</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Kalbos rodiklio koeficientas</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Diegiami balso duomenys...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">„eSpeak“ nenustatytas kaip numatytasis teksto į kalbą variklis.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">„eSpeak“ nepavyko įdiegti balso duomenų. Patikrinkite SD kortelę.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Apgailestaujame, bet nepavyko paleisti „eSpeak“.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Numatytasis balsas</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Įdiegta balsų</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Bendrieji TĮK nustatymai</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">„eSpeak“ TĮK nustatymai</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Įkeliama, palaukite...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Tai teksto, sakomo %s, pavyzdys</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak teksta pārveidošanas runā iestatījumi</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Balss noklusējuma augstums</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Runas ātruma reizinātājs</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Notiek balss datu instalēšana...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Programma eSpeak nav iestatīta kā noklusējuma programma teksta pārveidošanai runā.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Programmā eSpeak neizdevās instalēt balss datus. Lūdzu, pārbaudiet SD karti.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Diemžēl programmu eSpeak neizdevās palaist.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Noklusējuma balss</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Instalētie balss dati</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Vispārīgie teksta pārveidošanas runā iestatījumi</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak teksta pārveidošanas runā iestatījumi</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Notiek ielāde. Lūdzu, uzgaidiet...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Šis ir izrunāta teksta paraugs šādā valodā: %s.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Tetapan TTS eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Nada lalai</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Pengganda kadar ucapan</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Memasang data suara...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak tidak ditetapkan sebagai enjin teks-ke-pertuturan lalai anda.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak gagal memasang data suara. Sila periksa kad SD anda.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Maaf, eSpeak gagal untuk bermula.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Suara lalai</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Suara dipasang</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Tetapan TTS umum</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Tetapan TTS eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Memuatkan, sila tunggu...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Ini adalah sampel teks yang dilafazkan dalam %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Innstillinger for eSpeak tekst-til-tale</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Standard tonehøyde</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplikator for talehastighet</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Installerer taledata …</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak er ikke angitt som standardmotor for tekst-til-tale.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak mislyktes i å installere taledata. Kontroller SD-kortet ditt.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">eSpeak startet ikke.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Standardstemme</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Installerte stemmer</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Generelle tekst-til-tale-innstillinger</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Innstillinger for eSpeak tekst-til-tale</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Laster inn – vent litt …</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Dette er et teksteksempel lest opp på %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak-instellingen voor tekst-naar-spraak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Standaard toonhoogte</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplier voor spreeksnelheid</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Spraakgegevens installeren...</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 niet ingesteld als uw standaardengine voor tekst-naar-spraak.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak heeft geen stemgegevens geïnstalleerd. Controleer uw SD-kaart.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">eSpeak kan niet worden gestart.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Standaardstem</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Geïnstalleerde stemmen</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Algemene instellingen voor tekst-naar-spraak</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak-instellingen voor tekst-naar-spraak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Laden, even geduld...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Dit is een voorbeeld van tekst die is uitgesproken in het %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Ustawienia zamiany tekstu na mowę eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Domyślny ton</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Mnożnik szybkości mowy</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Instalowanie danych głosowych...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak nie jest ustawiony jako domyślny mechanizm odczytywania tekstu.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Zainstalowanie danych głosowych przez eSpeak nie powiodło się. Sprawdź kartę SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Przepraszamy, uruchomienie eSpeak nie powiodło się.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Domyślny głos</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Zainstalowane głosy</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Ogólne ustawienia odczytywania tekstu</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Ustawienia eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Wczytywanie. Czekaj...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">To jest przykład tekstu mówionego przy ustawieniu %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Ajustes de TTS do eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Tom</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Velocidade</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Instalando dados de voz…</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">O eSpeak não está configurado como o mecanismo padrão de texto para fala.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">O eSpeak fracassou ao instalar os dados de voz. Por favor verifique o cartão SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Desculpe, o eSpeak fracassou em iniciar.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voz padrão</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Vozes instaladas</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Ajustes gerais de TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Ajustes de TTS do eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Carregando, por favor aguarde…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Esta é uma amostra de texto falado em %s</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="tts_version">Versão de eSpeak</string>
|
||||
<string name="speak">Speak</string>
|
||||
<string name="ssml">Carregar modelo SSML</string>
|
||||
<string name="synthesis_demo">Insira texto a falar:</string>
|
||||
<string name="espeak_volume">Volume</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Restaurar padrão</string>
|
||||
<string name="espeak_pitch_range">Variação de tom</string>
|
||||
<string name="espeak_variant">Variante de voz</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Definições do eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Tom predefinido</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplicador da taxa de voz</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">A instalar dados de voz...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">O eSpeak não está definido como o motor de síntese de voz predefinido.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Ocorreu uma falha ao instalar os dados de voz do eSpeak. Verifique o cartão SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Ocorreu uma falha ao iniciar o eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voz predefinida</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Vozes instaladas</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Definições gerais do TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Definições do eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">A carregar; aguarde...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Este é um exemplo de texto falado em %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Setări TTS eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Înălţime prestabilită</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplicator al ritmului vorbirii</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Se instalează datele vocale...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak nu este setat ca motor prestabilit de transformare a textului în vorbire.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak nu a putut instala datele vocale. Verificaţi cardul SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Ne pare rău, dar pornirea eSpeak a eşuat.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Voce prestabilită</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Voci instalate</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Setări TTS generale</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Setări TTS eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Se încarcă, aşteptaţi...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Aceasta este o mostră de text vorbit în %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Настройки TTS eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Тон голоса</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Скорость речи</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 не является основным синтезатором речи.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Не удалось загрузить голосовые данные. Проверьте SD-карту.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Не удалось запустить eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Язык по умолчанию</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Разновидностей голоса</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Общие настройки</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Настройки eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Загрузка, пожалуйста ожидайте...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Так синтезатор речи озвучивает %s текст</string>
|
||||
<string name="status">Статус</string>
|
||||
<string name="tts_version">Версия eSpeak</string>
|
||||
<string name="speak">Озвучить</string>
|
||||
<string name="ssml">Загрузить SSML-шаблон </string>
|
||||
<string name="synthesis_demo">Введите текст для чтения:</string>
|
||||
<string name="espeak_volume">Громкость</string>
|
||||
<string name="formatter_wpm">%s СВМ</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Сброс</string>
|
||||
<string name="espeak_pitch_range">Подстройка тона</string>
|
||||
<string name="espeak_variant">Вариант голоса</string>
|
||||
<string name="espeak_speak_punctuation">Читать пунктуацию</string>
|
||||
<string name="punctuation_all">Всю</string>
|
||||
<string name="punctuation_custom">Пользовательскую</string>
|
||||
<string name="punctuation_custom_fmt">Пользовательскую: %s</string>
|
||||
<string name="punctuation_none">Никакую</string>
|
||||
<string name="punctuation_characters">Символы пунктуации</string>
|
||||
<string name="category">Категория</string>
|
||||
<string name="variant">Вариант</string>
|
||||
<string name="variant_male">Мужской</string>
|
||||
<string name="variant_female">Женский</string>
|
||||
<string name="variant_default">По умолчанию</string>
|
||||
<string name="variant_n">Вариант %d</string>
|
||||
<string name="variant_young">Юный</string>
|
||||
<string name="variant_old">Пожилой</string>
|
||||
<string name="variant_croak">Хриплый</string>
|
||||
<string name="variant_whisper">Шёпот</string>
|
||||
<string name="import_voice_title">Импорт словаря eSpeak </string>
|
||||
<string name="import_voice_description">Импорт файла словаря eSpeak с sd-карты </string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Nastavenia eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Výška</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Tempo reči</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Prebieha inštalácia hlasových údajov...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Aplikácia eSpeak nie je nastavená ako predvolený nástroj prevodu textu na reč.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Aplikácii eSpeak sa nepodarilo nainštalovať hlasové údaje. Skontrolujte kartu SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Je nám ľúto, aplikáciu eSpeak sa nepodarilo spustiť.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Predvolený hlas</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Počet nainštalovaných hlasov</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Všeobecné nastavenia prevodu textu na reč</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Nastavenia eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Prebieha načítavanie, čakajte prosím...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Toto je ukážkový text nahovorený v jazyku %s</string>
|
||||
<string name="status">Stav</string>
|
||||
<string name="tts_version">Verzia eSpeak</string>
|
||||
<string name="speak">Hovoriť</string>
|
||||
<string name="ssml">Načítať šablónu SSML</string>
|
||||
<string name="synthesis_demo">Text na prečítanie:</string>
|
||||
<string name="espeak_volume">Hlasitosť</string>
|
||||
<string name="formatter_wpm">%s WPM</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Nastaviť predvolené</string>
|
||||
<string name="espeak_pitch_range">Intonácia</string>
|
||||
<string name="espeak_variant">Variant hlasu</string>
|
||||
<string name="espeak_speak_punctuation">Čítať interpunkčné znaky</string>
|
||||
<string name="punctuation_all">Všetky</string>
|
||||
<string name="punctuation_custom">Vlastné</string>
|
||||
<string name="punctuation_custom_fmt">Vlastné: %s</string>
|
||||
<string name="punctuation_none">Žiadne</string>
|
||||
<string name="punctuation_characters">Interpunkčné znaky</string>
|
||||
<string name="category">Kategória</string>
|
||||
<string name="variant">Variant</string>
|
||||
<string name="variant_male">Muž</string>
|
||||
<string name="variant_female">Žena</string>
|
||||
<string name="variant_default">Predvolený</string>
|
||||
<string name="variant_n">Variant %d</string>
|
||||
<string name="variant_young">Mladistvý</string>
|
||||
<string name="variant_old">Starší</string>
|
||||
<string name="variant_croak">Hundranie</string>
|
||||
<string name="variant_whisper">Šepot</string>
|
||||
<string name="import_voice_title">Import slovníka eSpeak</string>
|
||||
<string name="import_voice_description">Import súbor slovníka eSpeak z pamäťovej karty.</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Nastavitve eSpeak pretvorbe besedila v govor</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Privzeta višina tona</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Množitelj hitrosti govora</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Namestitev podatkov glasu …</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Mehanizem eSpeak ni nastavljen kot privzeti za pretvorbo besedila v govor.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak ni uspel namestiti podatkov glasu. Preverite SD kartico.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Mehanizma eSpeak ni bilo mogoče zagnati.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Privzeti glas</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Št. nameščenih glasov</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Splošne nastavitve pretvorbe besedila v govor</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Nastavitve eSpeak pretvorbe besedila v govor</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Nalaganje, počakajte trenutek …</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">To je vzorec besedila, izgovorjen v %s</string>
|
||||
<string name="status">Status</string>
|
||||
<string name="tts_version">Različica eSpeak</string>
|
||||
<string name="speak">Izgovori</string>
|
||||
<string name="ssml">Naloži SSML predlogo</string>
|
||||
<string name="synthesis_demo">Vnesite tekst za izgovorjavo</string>
|
||||
<string name="espeak_volume">Glasnost</string>
|
||||
<string name="formatter_wpm">%s BNM (WPM)</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Nastavi na privzeto</string>
|
||||
<string name="espeak_pitch_range">Varianta višine glasu</string>
|
||||
<string name="espeak_variant">Varianta glasu</string>
|
||||
<string name="espeak_speak_punctuation">Izgovori ločila</string>
|
||||
<string name="punctuation_all">Vse</string>
|
||||
<string name="punctuation_custom">Po meri</string>
|
||||
<string name="punctuation_custom_fmt">Po meri: %s</string>
|
||||
<string name="punctuation_none">Noben</string>
|
||||
<string name="punctuation_characters">Ločila</string>
|
||||
<string name="category">Kategorija</string>
|
||||
<string name="variant">Varianta</string>
|
||||
<string name="variant_male">Moški</string>
|
||||
<string name="variant_female">Ženski</string>
|
||||
<string name="variant_default">Privzeto</string>
|
||||
<string name="variant_n">Varianta %d</string>
|
||||
<string name="variant_young">Mladenič</string>
|
||||
<string name="variant_old">Starejši</string>
|
||||
<string name="variant_croak">Hreščeče</string>
|
||||
<string name="variant_whisper">Šepetaje</string>
|
||||
<string name="import_voice_title">Uvozi eSpeak slovar</string>
|
||||
<string name="import_voice_description">Uvozi eSpeak slovar glasov iz datoteke na SD kartici </string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS подешавања</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Подразумевани ниво</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Множилац брзине говора</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 није подешен као подразумевани механизам за пребацивање текста у говор.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak није успео да инсталира податке о гласу. Проверите SD картицу.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Жао нам је, eSpeak није покренут.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Подразумевани глас</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Инсталирани су гласови</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Општа подешавања TTS-а</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS подешавања</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Учитавање, сачекајте...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Ово је пример текста који је изговорен на језику %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">TTS-inställningar för eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Standardinställning för tonhöjd</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplikator för talhastighet</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Installerar röstdata ...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Du har inte angett eSpeak som din standardmotor för text-till-tal.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Det gick inte att installera röstsdata i eSpeak. Kontrollera SD-kortet.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Det gick tyvärr inte att starta eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Standardröst</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Installerade röster</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Allmänna TTS-inställningar</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">TTS-inställningar för eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Läser in, vänta …</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Detta är ett textexempel som läses på %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Mipangilio ya eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Sauti chaguo-msingi</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Kizidisha kiwango cha usemi</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Inasakinisha data ya sauti...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak haijawekwa kama injini yako msingi ya maandishi-hadi-usemi.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak imeshindwa kusakinisha data ya sauti. Tafadhali kagua kadi yako ya SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Samahani, eSpeak imeshindwa kuanza.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Sauti chaguo-msingi</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Sauti zimesakinishwa</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Mipangilio ya kawaida ya TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Mipangilio ya eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Inapakia, tafadhali subiri...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Hii ni sampuli ya maandishi yaliyonenwa katika %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">การตั้งค่า TTS ของ eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">ระดับเสียงเริ่มต้น</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">ตัวคูณความเร็วการพูด</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 ไม่ได้ถูกกำหนดให้เป็นเครื่องมืออ่านออกเสียงข้อความเริ่มต้นของคุณ คุณต้องการกำหนดเดี๋ยวนี้หรือไม่</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak ไม่สามารถติดตั้งข้อมูลเสียง โปรดตรวจสอบการ์ด SD ของคุณ</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">ขออภัย eSpeak ไม่สามารถเริ่มต้นทำงาน คุณต้องการส่งรายงานข้อผิดพลาดหรือไม่</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">เสียงเริ่มต้น</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">เสียงที่ติดตั้ง</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">การตั้งค่า TTS ทั่วไป</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">การตั้งค่า TTS ของ eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">กำลังโหลด โปรดรอสักครู่...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">นี่เป็นตัวอย่างของข้อความที่พูดใน %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Mga Setting sa TTS ng eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Default na pitch</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Multiplier ng rate ng pananalita</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Ini-install ang data ng boses…</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">Hindi nakatakda ang eSpeak bilang iyong default na text-to-speech engine.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">Nabigong mag-install ng data ng boses ang eSpeak. Pakisuri ang iyong SD card.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Paumanhin, nabigong magsimula ang eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Default na boses</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Mga boses na na-install</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Pangkalahatang mga setting ng TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Mga setting ng TTS ng eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Naglo-load, mangyaring maghintay...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Isa itong sample ng tekstong binibigkas sa %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,71 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak TTS Ayarları</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Varsayılan ses kalınlığı</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Konuşma hızı çarpanı</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Ses verileri yükleniyor...</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">eSpeak varsayılan metin konuşma motorunuz olarak ayarlanmadı.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak ses verisini yükleyemedi. Lütfen SD kartınızı kontrol edin.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Maalesef, eSpeak başlatılamadı.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Varsayılan ses</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Yüklenen ses sayısı</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Genel TTS ayarları</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak TTS ayarları</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Yükleniyor, lütfen bekleyin...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Bu, %s dilinde seslendirilen örnek bir metindir</string>
|
||||
<string name="status">Durum</string>
|
||||
<string name="tts_version">eSpeak sürümü</string>
|
||||
<string name="speak">Konuş</string>
|
||||
<string name="ssml">SSML Şablonu yükle</string>
|
||||
<string name="synthesis_demo">Konuşulacak metni girin:</string>
|
||||
<string name="espeak_volume">Ses</string>
|
||||
<string name="formatter_wpm">%s Kelime/dk</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Varsayılana ayarla</string>
|
||||
<string name="espeak_pitch_range">Perde çeşitliliği</string>
|
||||
<string name="espeak_variant">Ses biçimi</string>
|
||||
<string name="espeak_speak_punctuation">Konuşma duraksaması</string>
|
||||
<string name="punctuation_all">Hepsi</string>
|
||||
<string name="punctuation_custom">Özel</string>
|
||||
<string name="punctuation_custom_fmt">Özel: %s</string>
|
||||
<string name="punctuation_none">Hiçbiri</string>
|
||||
<string name="punctuation_characters">Noktalama işaretleri</string>
|
||||
<string name="category">Kategori</string>
|
||||
<string name="variant">Biçim</string>
|
||||
<string name="variant_male">Erkek</string>
|
||||
<string name="variant_female">Kadın</string>
|
||||
<string name="variant_default">Varsayılan</string>
|
||||
<string name="variant_n">Biçim %d</string>
|
||||
<string name="variant_young">Genç</string>
|
||||
<string name="variant_old">Yaşlı</string>
|
||||
<string name="variant_croak">Boğuk</string>
|
||||
<string name="variant_whisper">Fısıltı</string>
|
||||
<string name="import_voice_title">eSpeak sözlüğü içe aktar</string>
|
||||
<string name="import_voice_description">SD karttan bir eSpeak ses sözlüğü dosyası içe aktar</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Налаштування TTS eSpeak</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Висота звуку за умовчанням</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Коефіцієнт темпу мовлення</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 не встановлено як систему синтезу мовлення за умовчанням.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak не вдалося встановити голосові дані. Перевірте карту SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Не вдалося запустити eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Мова за умовчанням</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Установлено голосів</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Загальні налаштування TTS</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Налаштування TTS eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Триває завантаження. Зачекайте...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Це зразок тексту такою мовою: %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
|
||||
</style>
|
||||
</resources>
|
||||
@@ -0,0 +1,53 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Thiết lập chương trình</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Độ cao thấp mặc định</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Bội số tốc độ đọc</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Đang cài đặt dữ liệu giọng nói…</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">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.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak không thể cài đặt dữ liệu thoại. Vui lòng kiểm tra thẻ nhớ của bạn.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Rất tiếc, không thể khởi động eSpeak.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Giọng nói mặc định</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Số lượng thoại đã được cài đặt</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Thiết lập chung</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Thiết lập eSpeak</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Đang tải, vui lòng đợi…</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Đây là mẫu văn bản được đọc bằng %s</string>
|
||||
<string name="status">Trạng thái</string>
|
||||
<string name="tts_version">phiên bản eSpeak</string>
|
||||
<string name="speak">Nói</string>
|
||||
<string name="ssml">Tải mẫu SSML</string>
|
||||
<string name="synthesis_demo">Điền vào văn bản để nói:</string>
|
||||
<string name="espeak_volume">Âm lượng</string>
|
||||
<string name="formatter_wpm">%s từ mỗi phút</string>
|
||||
<string name="formatter_percentage">%s%%</string>
|
||||
<string name="resetToDefault">Thiết lập về mặc định</string>
|
||||
<string name="espeak_pitch_range">Độ biến động cao thấp</string>
|
||||
<string name="espeak_variant">Độ biến động giọng cao thấp</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak 文字转语音 (TTS) 设置</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">默认声调</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">语速倍数</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 设置为文字转语音的默认引擎。</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak 无法安装语音数据。请检查您的 SD 卡。</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">很抱歉,eSpeak 启动失败。</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">默认语音</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">已安装的语音库数量</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">文字转语音 (TTS) 常规设置</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak 文字转语音 (TTS) 设置</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">正在加载,请稍候...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">正在朗读的是%s的语音示例</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">eSpeak 文字轉語音設定</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">預設音調</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">語音速率調節係數</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="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 尚未設為您的預設文字轉語音引擎。</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">eSpeak 無法安裝語音資料。請檢查您的 SD 卡。</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">很抱歉,無法啟動 eSpeak。</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">預設語音</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">已安裝的語音</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">文字轉語音一般設定</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">eSpeak 文字轉語音設定</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">載入中,請稍候...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">這是「%s」的語音測試範例</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<resources>
|
||||
<!--Source: Activity title.
|
||||
Description: Title for the Settings activity.-->
|
||||
<string name="tts_settings_label">Izilungiselelo ze-eSpeak TTS</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default voice pitch.-->
|
||||
<string name="setting_default_pitch">Izinga lezwi olithola likhona</string>
|
||||
<!--Source: Preference title.
|
||||
Description: Title for the preference that controls default speech rate.-->
|
||||
<string name="setting_default_rate">Okuphindaphinda ukushesha kwenkulumo</string>
|
||||
<!--Source: Dialog text.
|
||||
Description: Status message shown when installing voice data.-->
|
||||
<string name="installing_voice_data">Ifaka idatha yezwi</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog prompting the user to set eSpeak as their default TTS engine.-->
|
||||
<string name="set_default_message">I-eSpeak ayisethwanga njengenjini yombhalo-uya-enkulumweni oyithola ikhona.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that voice data installation failed.-->
|
||||
<string name="voice_data_failed_message">I-eSpeak yehlulekile ukulayisha idatha yezwi. Uyacelwa ukuthi ubheke ikhadi lakho le-SD.</string>
|
||||
<!--Source: Dialog message.
|
||||
Description: Alert dialog telling the user that an unknown error has occurred.-->
|
||||
<string name="error_message">Uxolo, i-eSpeak yehlulekile ukuqala.</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of the current text-to-speech language.-->
|
||||
<string name="current_tts_locale">Izwi olithola likhona</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user of how many voices are installed.-->
|
||||
<string name="available_voices">Amazwi afakiwe</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching general text-to-speech settings.-->
|
||||
<string name="tts_settings">Izilungiselelo ze-TTS ezejwayelekile</string>
|
||||
<!--Source: Button label.
|
||||
Description: Button for launching eSpeak-specific settings.-->
|
||||
<string name="engine_settings">Izilungiselelo ze-eSpeak TTS</string>
|
||||
<!--Source: Label text.
|
||||
Description: Label informing the user that eSpeak is loading resources.-->
|
||||
<string name="loading">Iyalayisha, ucelwa ukuthi ulinde...</string>
|
||||
<!--Source: Spoken aloud.
|
||||
Description: Sample text spoken aloud when the user is trying out a language.-->
|
||||
<string name="sample_text">Lena yisampula yombhalo okhulunywa kwi %s</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!--
|
||||
Source: App icon label.
|
||||
Description: The name of the application.
|
||||
-->
|
||||
<string name="app_name" translatable="false">eSpeak</string>
|
||||
|
||||
<!-- Voice Variants that are people's names. -->
|
||||
<string name="variant_klatt">Klatt</string>
|
||||
<string name="variant_nvda">NVDA</string>
|
||||
<string name="variant_andy">Andy</string>
|
||||
<string name="variant_annie">Annie</string>
|
||||
<string name="variant_anxious_andy">Anxious Andy</string>
|
||||
<string name="variant_aunty">Aunty</string>
|
||||
<string name="variant_boris">Boris</string>
|
||||
<string name="variant_denis">Denis</string>
|
||||
<string name="variant_gene">Gene</string>
|
||||
<string name="variant_gene2">Gene 2</string>
|
||||
<string name="variant_iven">Iven</string>
|
||||
<string name="variant_iven2">Iven 2</string>
|
||||
<string name="variant_iven3">Iven 3</string>
|
||||
<string name="variant_jacky">Jacky</string>
|
||||
<string name="variant_john">John</string>
|
||||
<string name="variant_kaukovalta">Kaukovalta</string>
|
||||
<string name="variant_lee">Lee</string>
|
||||
<string name="variant_linda">Linda</string>
|
||||
<string name="variant_mario">Mario</string>
|
||||
<string name="variant_max">Max</string>
|
||||
<string name="variant_michael">Michael</string>
|
||||
<string name="variant_michel">Michel</string>
|
||||
<string name="variant_mr_serious">Mr Serious</string>
|
||||
<string name="variant_norbert">Norbert</string>
|
||||
<string name="variant_quincy">Quincy</string>
|
||||
<string name="variant_rob">Rob</string>
|
||||
<string name="variant_robert">Robert</string>
|
||||
<string name="variant_storm">Storm</string>
|
||||
<string name="variant_travis">Travis</string>
|
||||
<string name="variant_tweaky">Tweaky</string>
|
||||
<string name="variant_zac">Zac</string>
|
||||
|
||||
</resources>
|
||||