mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-11-14 09:37:47 +00:00
Merge branch 'master' into latvian
This commit is contained in:
+4
-1
@@ -66,11 +66,13 @@ depcomp
|
||||
install-sh
|
||||
libtool
|
||||
ltmain.sh
|
||||
m4/
|
||||
missing
|
||||
stamp-h1
|
||||
.dirstamp
|
||||
|
||||
m4/*
|
||||
!m4/ax_check_compile_flag.m4
|
||||
|
||||
# libraries
|
||||
|
||||
docs/speak_lib.h
|
||||
@@ -96,6 +98,7 @@ src/speak-ng
|
||||
|
||||
tests/*.test
|
||||
!tests/languages.test
|
||||
!tests/phoneme-output.test
|
||||
|
||||
espeak-ng.pc
|
||||
|
||||
|
||||
+22
-2
@@ -7,7 +7,21 @@
|
||||
|
||||
The espeak-ng project is a fork of the espeak project.
|
||||
|
||||
### 1.49.2 - (In Development)
|
||||
### 1.49.3 - (In Development)
|
||||
|
||||
bug fixes:
|
||||
|
||||
* Fix several issues with the emoji support.
|
||||
|
||||
updated languages:
|
||||
|
||||
* af (Afrikaans) -- Christo de Klerk
|
||||
* fi (Finnish) -- Juho Hiltunen
|
||||
* it (Italian) -- chrislm
|
||||
* lv (Latvian) -- Valdis Vitolins
|
||||
* ur (Urdu) -- Ejaz Shah
|
||||
|
||||
### 1.49.2 - 2017-09-24
|
||||
|
||||
* Provide more validation when reading phoneme tables and voice/language files.
|
||||
* Removed support for phoneme equivalence tables. These were disabled in the
|
||||
@@ -25,6 +39,7 @@ bug fixes:
|
||||
* Fix running `make clean ; make`.
|
||||
* Fix reading stdin buffers larger than 1000.
|
||||
* Fixed various language and parent BCP 47 codes (`jp` is now `ja`).
|
||||
* Fixed several crashes and bugs in `espeak_SetVoiceByName/Properties`.
|
||||
|
||||
new languages:
|
||||
|
||||
@@ -32,7 +47,7 @@ new languages:
|
||||
* fr-CH (French (Switzerland)) -- Claude Beazley
|
||||
* kok (Konkani) -- Vardhan
|
||||
* mi (Māori) -- Graham Oliver
|
||||
* sd (Sindhi, Arabic script) -- Vardhan
|
||||
* sd (Sindhi, Arabic script) -- Vardhan, Ejaz Shah
|
||||
|
||||
updated languages:
|
||||
|
||||
@@ -90,10 +105,14 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files):
|
||||
* lt (Lithuanian)
|
||||
* lv (Latvian)
|
||||
* mk (Macedonian)
|
||||
* ml (Malayalam)
|
||||
* mr (Marathi)
|
||||
* ms (Malay)
|
||||
* my (Myanmar/Burmese)
|
||||
* ne (Nepali)
|
||||
* nl (Dutch)
|
||||
* or (Oriya)
|
||||
* pa (Punjabi)
|
||||
* pl (Polish)
|
||||
* pt (Portuguese) -- Brazil
|
||||
* ro (Romanian)
|
||||
@@ -105,6 +124,7 @@ Unicode Emoji support (from the Unicode Emoji 5.0, and CLDR 31.0.1 data files):
|
||||
* sr (Serbian)
|
||||
* sv (Swedish)
|
||||
* sw (Swahili)
|
||||
* ta (Tamil)
|
||||
* te (Telugu)
|
||||
* tr (Turkish)
|
||||
* ur (Urdu)
|
||||
|
||||
+8
-15
@@ -131,8 +131,7 @@ espeak_ng_includedir = $(includedir)/espeak-ng
|
||||
espeak_ng_include_HEADERS = \
|
||||
src/include/espeak-ng/encoding.h \
|
||||
src/include/espeak-ng/espeak_ng.h \
|
||||
src/include/espeak-ng/speak_lib.h \
|
||||
src/include/espeak-ng/tokenizer.h
|
||||
src/include/espeak-ng/speak_lib.h
|
||||
|
||||
lib_LTLIBRARIES += src/libespeak-ng.la
|
||||
|
||||
@@ -171,7 +170,6 @@ src_libespeak_ng_la_SOURCES = \
|
||||
src/libespeak-ng/synthdata.c \
|
||||
src/libespeak-ng/synthesize.c \
|
||||
src/libespeak-ng/synth_mbrola.c \
|
||||
src/libespeak-ng/tokenizer.c \
|
||||
src/libespeak-ng/translate.c \
|
||||
src/libespeak-ng/tr_languages.c \
|
||||
src/libespeak-ng/voices.c \
|
||||
@@ -233,12 +231,6 @@ noinst_bin_PROGRAMS += tests/encoding.test
|
||||
tests_encoding_test_LDADD = src/libespeak-ng.la
|
||||
tests_encoding_test_SOURCES = tests/encoding.c
|
||||
|
||||
noinst_bin_PROGRAMS += tests/tokenizer.test
|
||||
|
||||
tests_tokenizer_test_CFLAGS = -Isrc/libespeak-ng ${AM_CFLAGS}
|
||||
tests_tokenizer_test_LDADD = src/libespeak-ng.la
|
||||
tests_tokenizer_test_SOURCES = tests/tokenizer.c
|
||||
|
||||
noinst_bin_PROGRAMS += tests/readclause.test
|
||||
|
||||
tests_readclause_test_CFLAGS = -Isrc/libespeak-ng ${AM_CFLAGS}
|
||||
@@ -256,9 +248,9 @@ tests_api_test_SOURCES = tests/api.c
|
||||
@ESPEAK_DATA_PATH=$(PWD) $< && echo " PASSED $<"
|
||||
|
||||
check: tests/encoding.check \
|
||||
tests/tokenizer.check \
|
||||
tests/readclause.check \
|
||||
tests/api.check \
|
||||
tests/phoneme-output.check \
|
||||
tests/languages.check
|
||||
|
||||
##### phoneme data:
|
||||
@@ -398,6 +390,7 @@ android/res/raw/espeakdata.zip: espeak-ng-data/phontab dictionaries
|
||||
rm -f $@
|
||||
find espeak-ng-data/{intonations,phondata,phonindex,phontab} | zip -@ $@
|
||||
find espeak-ng-data/*_dict | zip -@ $@
|
||||
find espeak-ng-data/lang -type f | zip -@ $@
|
||||
find espeak-ng-data/voices -type f | grep -vF "/mb/" | zip -@ $@
|
||||
|
||||
android/res/raw/espeakdata_version: android/res/raw/espeakdata.zip
|
||||
@@ -672,7 +665,7 @@ mk: espeak-ng-data/mk_dict
|
||||
espeak-ng-data/mk_dict: dictsource/mk_list dictsource/mk_rules dictsource/mk_extra dictsource/mk_emoji
|
||||
|
||||
ml: espeak-ng-data/ml_dict
|
||||
espeak-ng-data/ml_dict: dictsource/ml_list dictsource/ml_rules dictsource/ml_extra
|
||||
espeak-ng-data/ml_dict: dictsource/ml_list dictsource/ml_rules dictsource/ml_extra dictsource/ml_emoji
|
||||
|
||||
mr: espeak-ng-data/mr_dict
|
||||
espeak-ng-data/mr_dict: dictsource/mr_list dictsource/mr_rules dictsource/mr_extra dictsource/mr_emoji
|
||||
@@ -684,13 +677,13 @@ mt: espeak-ng-data/mt_dict
|
||||
espeak-ng-data/mt_dict: dictsource/mt_list dictsource/mt_rules dictsource/mt_extra
|
||||
|
||||
my: espeak-ng-data/my_dict
|
||||
espeak-ng-data/my_dict: dictsource/my_list dictsource/my_rules dictsource/my_extra
|
||||
espeak-ng-data/my_dict: dictsource/my_list dictsource/my_rules dictsource/my_extra dictsource/my_emoji
|
||||
|
||||
nci: espeak-ng-data/nci_dict
|
||||
espeak-ng-data/nci_dict: dictsource/nci_list dictsource/nci_rules dictsource/nci_extra
|
||||
|
||||
ne: espeak-ng-data/ne_dict
|
||||
espeak-ng-data/ne_dict: dictsource/ne_list dictsource/ne_rules dictsource/ne_extra
|
||||
espeak-ng-data/ne_dict: dictsource/ne_list dictsource/ne_rules dictsource/ne_extra dictsource/ne_emoji
|
||||
|
||||
nl: espeak-ng-data/nl_dict
|
||||
espeak-ng-data/nl_dict: dictsource/nl_list dictsource/nl_rules dictsource/nl_extra dictsource/nl_emoji
|
||||
@@ -705,7 +698,7 @@ or: espeak-ng-data/or_dict
|
||||
espeak-ng-data/or_dict: dictsource/or_list dictsource/or_rules dictsource/or_extra dictsource/or_emoji
|
||||
|
||||
pa: espeak-ng-data/pa_dict
|
||||
espeak-ng-data/pa_dict: dictsource/pa_list dictsource/pa_rules dictsource/pa_extra
|
||||
espeak-ng-data/pa_dict: dictsource/pa_list dictsource/pa_rules dictsource/pa_extra dictsource/pa_emoji
|
||||
|
||||
pap: espeak-ng-data/pap_dict
|
||||
espeak-ng-data/pap_dict: dictsource/pap_list dictsource/pap_rules dictsource/pap_extra
|
||||
@@ -761,7 +754,7 @@ sw: espeak-ng-data/sw_dict
|
||||
espeak-ng-data/sw_dict: dictsource/sw_list dictsource/sw_rules dictsource/sw_extra dictsource/sw_emoji
|
||||
|
||||
ta: espeak-ng-data/ta_dict
|
||||
espeak-ng-data/ta_dict: dictsource/ta_list dictsource/ta_rules dictsource/ta_extra
|
||||
espeak-ng-data/ta_dict: dictsource/ta_list dictsource/ta_rules dictsource/ta_extra dictsource/ta_emoji
|
||||
|
||||
te: espeak-ng-data/te_dict
|
||||
espeak-ng-data/te_dict: dictsource/te_list dictsource/te_rules dictsource/te_extra dictsource/te_emoji
|
||||
|
||||
@@ -49,11 +49,11 @@ The following platforms are supported:
|
||||
|
||||
### Binaries
|
||||
|
||||
The Windows version of eSpeak NG 1.49.1 is available as:
|
||||
The Windows version of eSpeak NG 1.49.2 is available as:
|
||||
|
||||
* [espeak-ng-x64.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.1/espeak-ng-x64.msi) --
|
||||
* [espeak-ng-x64.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.2/espeak-ng-x64.msi) --
|
||||
64-bit Windows installer
|
||||
* [espeak-ng-x86.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.1/espeak-ng-x86.msi) --
|
||||
* [espeak-ng-x86.msi](https://github.com/espeak-ng/espeak-ng/releases/download/1.49.2/espeak-ng-x86.msi) --
|
||||
32-bit Windows installer
|
||||
|
||||
You also need to install the [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48145).
|
||||
@@ -69,7 +69,7 @@ To build eSpeak NG on Windows, you will need:
|
||||
1. a copy of Visual Studio 2013 or later, such as the Community Edition;
|
||||
2. the Windows 8.1 SDK;
|
||||
3. the [WiX installer](http://wixtoolset.org) plugin;
|
||||
4. the [pcaudiolib](http://github.com/rhdunn/pcaudiolib) project checked out to
|
||||
4. the [pcaudiolib](https://github.com/espeak-ng/pcaudiolib) project checked out to
|
||||
`src` (as `src/pcaudiolib`).
|
||||
|
||||
You can then open and build the `src/windows/espeak-ng.sln` solution in Visual
|
||||
@@ -104,9 +104,9 @@ In order to build eSpeak NG, you need:
|
||||
|
||||
Optionally, you need:
|
||||
|
||||
1. the [pcaudiolib](https://github.com/rhdunn/pcaudiolib) development library
|
||||
1. the [pcaudiolib](https://github.com/espeak-ng/pcaudiolib) development library
|
||||
to enable audio output;
|
||||
3. the [sonic](https://github.com/waywardgeek/sonic) development library to
|
||||
3. the [sonic](https://github.com/espeak-ng/sonic) development library to
|
||||
enable sonic audio speed up support;
|
||||
4. the `ronn` man-page markdown processor to build the man pages.
|
||||
|
||||
@@ -391,8 +391,8 @@ The `ieee80.c` implementation is taken directly from
|
||||
[ToFromIEEE.c.txt](http://www.realitypixels.com/turk/opensource/ToFromIEEE.c.txt)
|
||||
which has been made available for use in Open Source applications per the
|
||||
[license statement](COPYING.IEEE) on http://www.realitypixels.com/turk/opensource/.
|
||||
The only modification made to the code is to comment out the `TEST_FP` define
|
||||
to make it useable in the eSpeak NG library.
|
||||
The only modifications made to the code is to comment out the `TEST_FP` define
|
||||
to make it useable in the eSpeak NG library, and to fix compiler warnings.
|
||||
|
||||
The `getopt.c` compatibility implementation for getopt support on Windows is
|
||||
taken from the NetBSD `getopt_long` implementation, which is licensed under a
|
||||
|
||||
@@ -3,7 +3,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:1.2.3'
|
||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,12 +18,12 @@ dependencies {
|
||||
}
|
||||
|
||||
android {
|
||||
buildToolsVersion '19.1'
|
||||
compileSdkVersion 23
|
||||
buildToolsVersion '25.0.3'
|
||||
compileSdkVersion 26
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 23
|
||||
targetSdkVersion 26
|
||||
versionCode 20
|
||||
versionName "1.48.15"
|
||||
}
|
||||
@@ -33,6 +33,7 @@ android {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
java.srcDirs = ['src']
|
||||
res.srcDirs = ['res']
|
||||
jniLibs.srcDir 'libs'
|
||||
}
|
||||
androidTest.setRoot('eSpeakTests')
|
||||
androidTest {
|
||||
@@ -44,8 +45,3 @@ android {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
|
||||
pkgTask -> pkgTask.jniFolders = new HashSet<File>()
|
||||
pkgTask.jniFolders.add(new File(projectDir, 'libs'))
|
||||
}
|
||||
|
||||
@@ -260,7 +260,7 @@ public class SpeechSynthesisTest extends TextToSpeechTestCase
|
||||
|
||||
public void testMatchVoiceWithLanguageAndCountry()
|
||||
{
|
||||
final Voice voice = getVoice("fr-fr"); // language="fr" country="fr" variant=""
|
||||
final Voice voice = getVoice("fr-be"); // language="fr" country="BE" variant=""
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
@@ -269,23 +269,23 @@ public class SpeechSynthesisTest extends TextToSpeechTestCase
|
||||
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_FR), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fr_BE), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_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(fr_FR_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fr_BE_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_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_FRA), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fra_BEL), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_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));
|
||||
assertThat(voice.match(fra_FRA_1694acad), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
assertThat(voice.match(fra_BEL_1694acad), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
}
|
||||
|
||||
public void testMatchVoiceWithLanguageCountryAndVariant()
|
||||
{
|
||||
final Voice voice = getVoice("en-sc"); // language="en" country="GB" variant="scotland"
|
||||
final Voice voice = getVoice("en-gb-scotland"); // language="en" country="GB" variant="scotland"
|
||||
assertThat(voice, is(notNullValue()));
|
||||
|
||||
assertThat(voice.match(de), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
|
||||
@@ -99,10 +99,10 @@ public class TextToSpeechServiceTest extends AndroidTestCase
|
||||
}
|
||||
|
||||
public void testOnLoadLanguage() {
|
||||
assertThat(mService.onLoadLanguage("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
assertThat(mService.onLoadLanguage("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "GBR", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
assertThat(mService.getActiveVoice().name, is("en-gb"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "USA", "");
|
||||
@@ -112,120 +112,120 @@ public class TextToSpeechServiceTest extends AndroidTestCase
|
||||
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.getActiveVoice().name, is("en-gb-scotland"));
|
||||
|
||||
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.onLoadLanguage("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "GBR", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
assertThat(mService.getActiveVoice().name, is("en-gb"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "GBR", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
assertThat(mService.getActiveVoice().name, is("en-gb"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "GBR", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
assertThat(mService.getActiveVoice().name, is("en-gb"));
|
||||
|
||||
assertThat(mService.onLoadLanguage("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "", "");
|
||||
checkLanguage(mService.onGetLanguage(), "eng", "GBR", "");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("en"));
|
||||
assertThat(mService.getActiveVoice().name, is("en-gb"));
|
||||
}
|
||||
|
||||
public void testOnIsLanguageAvailable() {
|
||||
assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(mService.onLoadLanguage("vie", "VNM", "central"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "USA", ""), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "GBR", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "USA", "rp"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "", "scotland"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "FRA", "rp"), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("eng", "FRA", ""), isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onIsLanguageAvailable("ine", "", ""), isTtsLangCode(TextToSpeech.LANG_NOT_SUPPORTED));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
}
|
||||
|
||||
public void testOnGetDefaultVoiceNameFor() {
|
||||
assertThat(mService.onLoadLanguage("vie", "VNM", "saigon"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(mService.onLoadLanguage("vie", "VNM", "central"), isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "", ""), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "", ""), is("en-gb"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", ""), is("en-us"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "GBR", "scotland"), is("en-sc"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "GBR", "scotland"), is("en-gb-scotland"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "USA", "rp"), is("en-us"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "", "scotland"), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "", "scotland"), is("en-gb"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", "rp"), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", "rp"), is("en-gb"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", ""), is("en"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("eng", "FRA", ""), is("en-gb"));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
|
||||
assertThat(mService.onGetDefaultVoiceNameFor("ine", "", ""), is(nullValue()));
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "saigon");
|
||||
checkLanguage(mService.onGetLanguage(), "vie", "VNM", "central");
|
||||
assertThat(mService.getActiveVoice(), is(notNullValue()));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-sgn"));
|
||||
assertThat(mService.getActiveVoice().name, is("vi-vn-x-central"));
|
||||
}
|
||||
|
||||
public void testLanguages() {
|
||||
|
||||
@@ -72,7 +72,7 @@ public class TextToSpeechTestCase extends AndroidTestCase
|
||||
Log.d("TextToSpeechTestCase", "setUp: available = " + available);
|
||||
}
|
||||
|
||||
assertThat(available, isTtsLangCode(TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE));
|
||||
assertThat(available, isTtsLangCode(TextToSpeech.LANG_AVAILABLE));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
||||
@@ -75,90 +75,101 @@ public class VoiceData
|
||||
}
|
||||
|
||||
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 中文 (香港)"),
|
||||
new Voice("af", "gmw/af", "af", "afr", "", "", "", SpeechSynthesis.GENDER_MALE, "Afrikaans", "afr", "Hierdie is 'n voorbeeld van gesproke teks in Afrikaans"),
|
||||
new Voice("am", "sem/am", "am", "amh", "", "", "", SpeechSynthesis.GENDER_MALE, "Amharic", "amh", "ይሄ በአማርኛ ላይ የተነገረ ጽሑፍ ናሙና ነው።", "ይሄ በAmharic ላይ የተነገረ ጽሑፍ ናሙና ነው።"),
|
||||
new Voice("an", "roa/an", "an", "arg", "", "", "", SpeechSynthesis.GENDER_MALE, "Aragonese", "arg", "This is a sample of text spoken in Aragonese"),
|
||||
new Voice("ar", "sem/ar", "ar", "ara", "", "", "", SpeechSynthesis.GENDER_MALE, "Arabic", "ara", "هذه عينة من النص الذي تم نطقه في العربية"),
|
||||
new Voice("as", "inc/as", "as", "asm", "", "", "", SpeechSynthesis.GENDER_MALE, "Assamese", "asm", "This is a sample of text spoken in Assamese", "This is a sample of text spoken in অসমীয়া"),
|
||||
new Voice("az", "trk/az", "az", "aze", "", "", "", SpeechSynthesis.GENDER_MALE, "Azerbaijani", "aze", "This is a sample of text spoken in Azerbaijani", "This is a sample of text spoken in azərbaycan"),
|
||||
new Voice("bg", "zls/bg", "bg", "bul", "", "", "", SpeechSynthesis.GENDER_MALE, "Bulgarian", "bul", "Това е откъс от изговорен текст на български"),
|
||||
new Voice("bn", "inc/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", "zls/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", "roa/ca", "ca", "cat", "", "", "", SpeechSynthesis.GENDER_MALE, "Catalan", "cat", "Aquesta és una mostra de text llegit en veu alta en català"),
|
||||
new Voice("cs", "zlw/cs", "cs", "ces", "", "", "", SpeechSynthesis.GENDER_MALE, "Czech", "ces", "Toto je ukázkový text namluvený v jazyce čeština"),
|
||||
new Voice("cy", "cel/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", "gmq/da", "da", "dan", "", "", "", SpeechSynthesis.GENDER_MALE, "Danish", "dan", "Dette er et eksempel på talt tekst på dansk"),
|
||||
new Voice("de", "gmw/de", "de", "deu", "", "", "", SpeechSynthesis.GENDER_MALE, "German", "deu", "Dies ist ein Beispieltext auf Deutsch"),
|
||||
new Voice("el", "grk/el", "el", "ell", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Modern)", "ell", "Αυτό είναι ένα δείγμα κειμένου που εκφέρεται στα Ελληνικά"),
|
||||
new Voice("en-gb-scotland", "gmw/en-GB-scotland", "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", "gmw/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-gb-x-gbclan", "gmw/en-GB-x-gbclan", "en", "eng", "GB", "GBR", "gbclan", SpeechSynthesis.GENDER_MALE, "English (Lancashire)", "eng-GBR-gbclan", "This is a sample of text spoken in English (United Kingdom,GBCLAN)"),
|
||||
new Voice("en-gb-x-rp", "gmw/en-GB-x-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-gb-x-gbcwmd", "gmw/en-GB-x-gbcwmd", "en", "eng", "GB", "GBR", "gbcwmd", SpeechSynthesis.GENDER_MALE, "English (West Midlands)", "eng-GBR-gbcwmd", "This is a sample of text spoken in English (United Kingdom,GBCWMD)"),
|
||||
new Voice("en-us", "gmw/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-029", "gmw/en-029", "en", "eng", "JM", "JAM", "", SpeechSynthesis.GENDER_MALE, "English (Caribbean)", "eng-JAM", "This is a sample of text spoken in English (Jamaica)"),
|
||||
new Voice("eo", "art/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", "roa/es", "es", "spa", "", "", "", SpeechSynthesis.GENDER_MALE, "Spanish", "spa", "Esto es un ejemplo de texto hablado en español."),
|
||||
new Voice("es-419", "roa/es-419", "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", "urj/et", "et", "est", "", "", "", SpeechSynthesis.GENDER_MALE, "Estonian", "est", "This is a sample of text spoken in eesti", "This is a sample of text spoken in Estonian"),
|
||||
new Voice("eu", "eu", "eu", "eus", "", "", "", SpeechSynthesis.GENDER_MALE, "Basque", "eus", "This is a sample of text spoken in Basque", "This is a sample of text spoken in euskara"),
|
||||
new Voice("fa", "ira/fa", "fa", "fas", "", "", "", SpeechSynthesis.GENDER_MALE, "Farsi (Persian)", "fas", "این یک نمونه از نوشتار گفته شده در فارسی است"),
|
||||
new Voice("fi", "urj/fi", "fi", "fin", "", "", "", SpeechSynthesis.GENDER_MALE, "Finnish", "fin", "Tämä on näyte puhutusta tekstistä kielellä suomi"),
|
||||
new Voice("fr-be", "roa/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-ch", "roa/fr-CH", "fr", "fra", "CH", "CHE", "", SpeechSynthesis.GENDER_MALE, "French (Switzerland)", "fra-CHE", "Voici un exemple de texte énoncé en français (Suisse)."),
|
||||
new Voice("fr-fr", "roa/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", "cel/ga", "ga", "gle", "", "", "", SpeechSynthesis.GENDER_MALE, "Irish", "gle", "This is a sample of text spoken in Irish", "This is a sample of text spoken in Gaeilge"),
|
||||
new Voice("gd", "cel/gd", "gd", "gla", "", "", "", SpeechSynthesis.GENDER_MALE, "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("gn", "sai/gn", "gn", "grn", "", "", "", SpeechSynthesis.GENDER_MALE, "Guarani", "grn", "This is a sample of text spoken in Guarani"),
|
||||
new Voice("grc", "grk/grc", "grc", "grc", "", "", "", SpeechSynthesis.GENDER_MALE, "Greek (Ancient)", "grc", "This is a sample of text spoken in Ancient Greek"),
|
||||
new Voice("gu", "inc/gu", "gu", "guj", "", "", "", SpeechSynthesis.GENDER_MALE, "Gujarati", "guj", "This is a sample of text spoken in Gujarati", "This is a sample of text spoken in ગુજરાતી"),
|
||||
new Voice("hi", "inc/hi", "hi", "hin", "", "", "", SpeechSynthesis.GENDER_MALE, "Hindi", "hin", "यह हिन्दी में बोले गए पाठ का नमूना है"),
|
||||
new Voice("hr", "zls/hr", "hr", "hrv", "", "", "", SpeechSynthesis.GENDER_MALE, "Croatian", "hrv", "Ovo je primjer teksta izgovorenog na hrvatski"),
|
||||
new Voice("hu", "urj/hu", "hu", "hun", "", "", "", SpeechSynthesis.GENDER_MALE, "Hungarian", "hun", "Ez egy magyar nyelven felolvasott szöveg mintája."),
|
||||
new Voice("hy", "ine/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-arevmda", "ine/hy-arevmda", "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", "art/ia", "ia", "ina", "", "", "", SpeechSynthesis.GENDER_MALE, "Interlingua", "ina", "This is a sample of text spoken in Interlingua"),
|
||||
new Voice("id", "poz/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", "gmq/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", "roa/it", "it", "ita", "", "", "", SpeechSynthesis.GENDER_MALE, "Italian", "ita", "Questo è un esempio di testo parlato in italiano"),
|
||||
new Voice("ja", "jpx/ja", "ja", "jpn", "", "", "", SpeechSynthesis.GENDER_MALE, "Japanese", "jpn", "日本語で話すテキストサンプルです。"),
|
||||
new Voice("jbo", "art/jbo", "jbo", "jbo", "", "", "", SpeechSynthesis.GENDER_MALE, "Lojban", "jbo", "This is a sample of text spoken in Lojban"),
|
||||
new Voice("ka", "ccs/ka", "ka", "kat", "", "", "", SpeechSynthesis.GENDER_MALE, "Georgian", "kat", "This is a sample of text spoken in Georgian", "This is a sample of text spoken in ქართული"),
|
||||
new Voice("kl", "esx/kl", "kl", "kal", "", "", "", SpeechSynthesis.GENDER_MALE, "Greenlandic", "kal", "This is a sample of text spoken in Kalaallisut", "This is a sample of text spoken in kalaallisut"),
|
||||
new Voice("kn", "dra/kn", "kn", "kan", "", "", "", SpeechSynthesis.GENDER_MALE, "Kannada", "kan", "This is a sample of text spoken in Kannada", "This is a sample of text spoken in ಕನ್ನಡ"),
|
||||
new Voice("ko", "ko", "ko", "kor", "", "", "", SpeechSynthesis.GENDER_MALE, "Korean", "kor", "한국어로 읽은 텍스트 샘플입니다."),
|
||||
new Voice("kok", "inc/kok", "kok", "kok", "", "", "", SpeechSynthesis.GENDER_MALE, "Konkani", "kok", "This is a sample of text spoken in कोंकणी"),
|
||||
new Voice("ku", "ira/ku", "ku", "kur", "", "", "", SpeechSynthesis.GENDER_MALE, "Kurdish", "kur", "This is a sample of text spoken in Kurdish"),
|
||||
new Voice("ky", "trk/ky", "ky", "kir", "", "", "", SpeechSynthesis.GENDER_MALE, "Kyrgyz", "kir", "This is a sample of text spoken in кыргызча"),
|
||||
new Voice("la", "itc/la", "la", "lat", "", "", "", SpeechSynthesis.GENDER_MALE, "Latin", "lat", "This is a sample of text spoken in Latin"),
|
||||
new Voice("lt", "bat/lt", "lt", "lit", "", "", "", SpeechSynthesis.GENDER_MALE, "Lithuanian", "lit", "Tai teksto, sakomo lietuvių, pavyzdys"),
|
||||
new Voice("lv", "bat/lv", "lv", "lav", "", "", "", SpeechSynthesis.GENDER_MALE, "Latvian", "lav", "Šis ir izrunāta teksta paraugs šādā valodā: latviešu."),
|
||||
new Voice("mi", "poz/mi", "mi", "mri", "", "", "", SpeechSynthesis.GENDER_MALE, "Māori", "mri", "This is a sample of text spoken in Maori"),
|
||||
new Voice("mk", "zls/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", "dra/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", "inc/mr", "mr", "mar", "", "", "", SpeechSynthesis.GENDER_MALE, "Marathi", "mar", "This is a sample of text spoken in Marathi", "This is a sample of text spoken in मराठी"),
|
||||
new Voice("ms", "poz/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("mt", "sem/mt", "mt", "mlt", "", "", "", SpeechSynthesis.GENDER_MALE, "Maltese", "mlt", "This is a sample of text spoken in Malti"),
|
||||
new Voice("my", "sit/my", "my", "mya", "", "", "", SpeechSynthesis.GENDER_MALE, "Myanmar", "mya", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in ဗမာ"),
|
||||
new Voice("ne", "inc/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", "gmw/nl", "nl", "nld", "", "", "", SpeechSynthesis.GENDER_MALE, "Dutch", "nld", "Dit is een voorbeeld van tekst die is uitgesproken in het Nederlands"),
|
||||
new Voice("nb", "gmq/nb", "nb", "nob", "", "", "", SpeechSynthesis.GENDER_MALE, "Norwegian (Bokmål)", "nob", "Dette er et teksteksempel lest opp på norsk bokmål"),
|
||||
new Voice("om", "cus/om", "om", "orm", "", "", "", SpeechSynthesis.GENDER_MALE, "Oromoo", "orm", "This is a sample of text spoken in Oromo", "This is a sample of text spoken in Oromoo"),
|
||||
new Voice("or", "inc/or", "or", "ori", "", "", "", SpeechSynthesis.GENDER_MALE, "Oriya", "ori", "This is a sample of text spoken in Oriya", "This is a sample of text spoken in ଓଡ଼ିଆ"),
|
||||
new Voice("pa", "inc/pa", "pa", "pan", "", "", "", SpeechSynthesis.GENDER_MALE, "Panjabi", "pan", "This is a sample of text spoken in Punjabi", "This is a sample of text spoken in ਪੰਜਾਬੀ"),
|
||||
new Voice("pap", "roa/pap", "pap", "pap", "", "", "", SpeechSynthesis.GENDER_MALE, "Papiamento", "pap", "This is a sample of text spoken in Papiamento"),
|
||||
new Voice("pl", "zlw/pl", "pl", "pol", "", "", "", SpeechSynthesis.GENDER_MALE, "Polish", "pol", "To jest przykład tekstu mówionego przy ustawieniu polski"),
|
||||
new Voice("pt", "roa/pt", "pt", "por", "", "", "", SpeechSynthesis.GENDER_MALE, "Portuguese", "por", "Este é um exemplo de texto falado em português"),
|
||||
new Voice("pt-br", "roa/pt-BR", "pt", "por", "BR", "BRA", "", SpeechSynthesis.GENDER_MALE, "Portuguese (Brazil)", "por-BRA", "Esta é uma amostra de texto falado em português (Brasil)"),
|
||||
new Voice("ro", "roa/ro", "ro", "ron", "", "", "", SpeechSynthesis.GENDER_MALE, "Romanian", "ron", "Aceasta este o mostră de text vorbit în română"),
|
||||
new Voice("ru", "zle/ru", "ru", "rus", "", "", "", SpeechSynthesis.GENDER_MALE, "Russian", "rus", "Так синтезатор речи озвучивает русский текст"),
|
||||
new Voice("sd", "inc/sd", "sd", "snd", "", "", "", SpeechSynthesis.GENDER_MALE, "Sindhi", "snd", "This is a sample of text spoken in Sindhi"),
|
||||
new Voice("si", "inc/si", "si", "sin", "", "", "", SpeechSynthesis.GENDER_MALE, "Sinhalese", "sin", "This is a sample of text spoken in Sinhala", "This is a sample of text spoken in සිංහල"),
|
||||
new Voice("sk", "zlw/sk", "sk", "slk", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovak", "slk", "Toto je ukážkový text nahovorený v jazyku slovenčina"),
|
||||
new Voice("sl", "zls/sl", "sl", "slv", "", "", "", SpeechSynthesis.GENDER_MALE, "Slovenian", "slv", "To je vzorec besedila, izgovorjen v slovenščina"),
|
||||
new Voice("sq", "ine/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", "zls/sr", "sr", "srp", "", "", "", SpeechSynthesis.GENDER_MALE, "Serbian", "srp", "Ово је пример текста који је изговорен на језику Српски", "Ово је пример текста који је изговорен на језику српски"),
|
||||
new Voice("sv", "gmq/sv", "sv", "swe", "", "", "", SpeechSynthesis.GENDER_MALE, "Swedish", "swe", "Detta är ett textexempel som läses på svenska"),
|
||||
new Voice("sw", "bnt/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", "dra/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", "dra/te", "te", "tel", "", "", "", SpeechSynthesis.GENDER_MALE, "Telugu", "tel", "This is a sample of text spoken in Telugu", "This is a sample of text spoken in తెలుగు"),
|
||||
new Voice("tn", "bnt/tn", "tn", "tsn", "", "", "", SpeechSynthesis.GENDER_MALE, "Setswana", "tsn", "This is a sample of text spoken in Tswana"),
|
||||
new Voice("tr", "trk/tr", "tr", "tur", "", "", "", SpeechSynthesis.GENDER_MALE, "Turkish", "tur", "Bu, Türkçe dilinde seslendirilen örnek bir metindir"),
|
||||
new Voice("tt", "trk/tt", "tt", "tat", "", "", "", SpeechSynthesis.GENDER_MALE, "Tatar", "tat", "This is a sample of text spoken in Tatar"),
|
||||
new Voice("ur", "inc/ur", "ur", "urd", "", "", "", SpeechSynthesis.GENDER_MALE, "Urdu", "urd", "This is a sample of text spoken in Urdu", "This is a sample of text spoken in اردو"),
|
||||
new Voice("vi", "aav/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-vn-x-central", "aav/vi-VN-x-central", "vi", "vie", "VN", "VNM", "central", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-central", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,CENTRAL)", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,central)"),
|
||||
new Voice("vi-vn-x-south", "aav/vi-VN-x-south", "vi", "vie", "VN", "VNM", "south", SpeechSynthesis.GENDER_MALE, "Vietnamese", "vie-VNM-south", "Đây là mẫu văn bản được đọc bằng Tiếng Việt (Việt Nam,SOUTH)"),
|
||||
new Voice("cmn", "sit/cmn", "zh", "zho", "", "", "", SpeechSynthesis.GENDER_MALE, "Chinese (Mandarin)", "zho", "This is a sample of text spoken in 中文"),
|
||||
new Voice("yue", "sit/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 中文 (香港)"),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ LOCAL_CFLAGS = -std=c11
|
||||
|
||||
# ucd-tools wide-character compatibility support:
|
||||
|
||||
UCDTOOLS_SRC_PATH := ../../ucd-tools/src
|
||||
UCDTOOLS_SRC_PATH := ../../src/ucd-tools/src
|
||||
UCDTOOLS_SRC_FILES := \
|
||||
$(subst $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH),$(UCDTOOLS_SRC_PATH),$(wildcard $(LOCAL_PATH)/$(UCDTOOLS_SRC_PATH)/*.c*))
|
||||
|
||||
@@ -33,7 +33,6 @@ ESPEAK_SOURCES := \
|
||||
src/libespeak-ng/synthdata.c \
|
||||
src/libespeak-ng/synthesize.c \
|
||||
src/libespeak-ng/synth_mbrola.c \
|
||||
src/libespeak-ng/tokenizer.c \
|
||||
src/libespeak-ng/translate.c \
|
||||
src/libespeak-ng/tr_languages.c \
|
||||
src/libespeak-ng/voices.c \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_OPTIM := release
|
||||
APP_PLATFORM := android-8
|
||||
APP_PLATFORM := android-14
|
||||
APP_TOOLCHAIN_VERSION := 4.6.3
|
||||
APP_ABI := mips armeabi armeabi-v7a x86
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
// This is created by autoconf on POSIX-compatibe build environments.
|
||||
#define PACKAGE_VERSION "1.49.2-dev"
|
||||
#define PACKAGE_VERSION "1.49.3-dev"
|
||||
|
||||
@@ -114,6 +114,8 @@ public class SpeechSynthesis {
|
||||
return new Locale(parts[0], parts[1]);
|
||||
case 3: // language-country-variant
|
||||
return new Locale(parts[0], parts[1], parts[2]);
|
||||
case 4: // language-country-x-privateuse
|
||||
return new Locale(parts[0], parts[1], parts[3]);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
@@ -355,6 +357,7 @@ public class SpeechSynthesis {
|
||||
static {
|
||||
mJavaToIanaLanguageCode.put("afr", "af");
|
||||
mJavaToIanaLanguageCode.put("amh", "am");
|
||||
mJavaToIanaLanguageCode.put("ara", "ar");
|
||||
mJavaToIanaLanguageCode.put("arg", "an");
|
||||
mJavaToIanaLanguageCode.put("asm", "as");
|
||||
mJavaToIanaLanguageCode.put("aze", "az");
|
||||
@@ -377,6 +380,7 @@ public class SpeechSynthesis {
|
||||
mJavaToIanaLanguageCode.put("fra", "fr");
|
||||
mJavaToIanaLanguageCode.put("gle", "ga");
|
||||
mJavaToIanaLanguageCode.put("gla", "gd");
|
||||
mJavaToIanaLanguageCode.put("grn", "gn");
|
||||
mJavaToIanaLanguageCode.put("guj", "gu");
|
||||
mJavaToIanaLanguageCode.put("hin", "hi");
|
||||
mJavaToIanaLanguageCode.put("hrv", "hr");
|
||||
@@ -386,9 +390,11 @@ public class SpeechSynthesis {
|
||||
mJavaToIanaLanguageCode.put("ind", "in"); // NOTE: The deprecated 'in' code is used by Java/Android.
|
||||
mJavaToIanaLanguageCode.put("isl", "is");
|
||||
mJavaToIanaLanguageCode.put("ita", "it");
|
||||
mJavaToIanaLanguageCode.put("jpn", "ja");
|
||||
mJavaToIanaLanguageCode.put("kat", "ka");
|
||||
mJavaToIanaLanguageCode.put("kal", "kl");
|
||||
mJavaToIanaLanguageCode.put("kan", "kn");
|
||||
mJavaToIanaLanguageCode.put("kir", "ky");
|
||||
mJavaToIanaLanguageCode.put("kor", "ko");
|
||||
mJavaToIanaLanguageCode.put("kur", "ku");
|
||||
mJavaToIanaLanguageCode.put("lat", "la");
|
||||
@@ -397,7 +403,10 @@ public class SpeechSynthesis {
|
||||
mJavaToIanaLanguageCode.put("mkd", "mk");
|
||||
mJavaToIanaLanguageCode.put("mal", "ml");
|
||||
mJavaToIanaLanguageCode.put("mar", "mr");
|
||||
mJavaToIanaLanguageCode.put("mlt", "mt");
|
||||
mJavaToIanaLanguageCode.put("mri", "mi");
|
||||
mJavaToIanaLanguageCode.put("msa", "ms");
|
||||
mJavaToIanaLanguageCode.put("mya", "my");
|
||||
mJavaToIanaLanguageCode.put("nep", "ne");
|
||||
mJavaToIanaLanguageCode.put("nld", "nl");
|
||||
mJavaToIanaLanguageCode.put("nob", "nb");
|
||||
@@ -412,12 +421,15 @@ public class SpeechSynthesis {
|
||||
mJavaToIanaLanguageCode.put("sin", "si");
|
||||
mJavaToIanaLanguageCode.put("slk", "sk");
|
||||
mJavaToIanaLanguageCode.put("slv", "sl");
|
||||
mJavaToIanaLanguageCode.put("snd", "sd");
|
||||
mJavaToIanaLanguageCode.put("sqi", "sq");
|
||||
mJavaToIanaLanguageCode.put("srp", "sr");
|
||||
mJavaToIanaLanguageCode.put("swe", "sv");
|
||||
mJavaToIanaLanguageCode.put("swa", "sw");
|
||||
mJavaToIanaLanguageCode.put("tam", "ta");
|
||||
mJavaToIanaLanguageCode.put("tel", "te");
|
||||
mJavaToIanaLanguageCode.put("tat", "tt");
|
||||
mJavaToIanaLanguageCode.put("tsn", "tn");
|
||||
mJavaToIanaLanguageCode.put("tur", "tr");
|
||||
mJavaToIanaLanguageCode.put("urd", "ur");
|
||||
mJavaToIanaLanguageCode.put("vie", "vi");
|
||||
@@ -426,6 +438,7 @@ public class SpeechSynthesis {
|
||||
mJavaToIanaCountryCode.put("ARM", "AM");
|
||||
mJavaToIanaCountryCode.put("BEL", "BE");
|
||||
mJavaToIanaCountryCode.put("BRA", "BR");
|
||||
mJavaToIanaCountryCode.put("CHE", "CH");
|
||||
mJavaToIanaCountryCode.put("FRA", "FR");
|
||||
mJavaToIanaCountryCode.put("GBR", "GB");
|
||||
mJavaToIanaCountryCode.put("HKG", "HK");
|
||||
@@ -435,18 +448,11 @@ public class SpeechSynthesis {
|
||||
mJavaToIanaCountryCode.put("USA", "US");
|
||||
mJavaToIanaCountryCode.put("VNM", "VN");
|
||||
|
||||
// Map eSpeak locales to their correct BCP47 locales supported by Android:
|
||||
mLocaleFixes.put("en-sc", new Locale("en", "GB", "scotland"));
|
||||
mLocaleFixes.put("en-uk-north", new Locale("en", "GB", "north"));
|
||||
mLocaleFixes.put("en-uk-rp", new Locale("en", "GB", "rp"));
|
||||
mLocaleFixes.put("en-uk-wmids", new Locale("en", "GB", "wmids"));
|
||||
mLocaleFixes.put("en-wi", new Locale("en", "JM"));
|
||||
mLocaleFixes.put("es-la", new Locale("es", "MX"));
|
||||
mLocaleFixes.put("fa-pin", null); // Script tags not supported.
|
||||
mLocaleFixes.put("hy-west", new Locale("hy", "AM", "arevmda")); // hy-arevmda crashes on Android 5.0
|
||||
mLocaleFixes.put("no", new Locale("nb")); // 'no' is valid, but the system uses the more specific 'nb' and 'nn'
|
||||
mLocaleFixes.put("vi-hue", new Locale("vi", "VN", "hue"));
|
||||
mLocaleFixes.put("vi-sgn", new Locale("vi", "VN", "saigon"));
|
||||
mLocaleFixes.put("zh-yue", new Locale("zh", "HK"));
|
||||
// Fix up BCP47 locales not handled correctly by Android:
|
||||
mLocaleFixes.put("cmn", new Locale("zh"));
|
||||
mLocaleFixes.put("en-029", new Locale("en", "JM"));
|
||||
mLocaleFixes.put("es-419", new Locale("es", "MX"));
|
||||
mLocaleFixes.put("hy-arevmda", new Locale("hy", "AM", "arevmda")); // hy-arevmda crashes on Android 5.0
|
||||
mLocaleFixes.put("yue", new Locale("zh", "HK"));
|
||||
}
|
||||
}
|
||||
|
||||
+31
-1
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ([2.63])
|
||||
AC_INIT([eSpeak NG], [1.49.2-dev], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng])
|
||||
AC_INIT([eSpeak NG], [1.49.3-dev], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng])
|
||||
AM_INIT_AUTOMAKE()
|
||||
LT_INIT
|
||||
|
||||
@@ -83,6 +83,23 @@ else
|
||||
AC_MSG_ERROR([C99 is not supported by $CC.])
|
||||
fi
|
||||
|
||||
dnl ================================================================
|
||||
dnl FreeBSD check.
|
||||
dnl ================================================================
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
#if ! defined(__FreeBSD__)
|
||||
#error macro not defined
|
||||
#endif
|
||||
]])], [FREEBSD_FOUND="yes"], [FREEBSD_FOUND="no"])
|
||||
|
||||
AC_MSG_CHECKING([if targeting FreeBSD])
|
||||
if test "$FREEBSD_FOUND" = "yes" ; then
|
||||
AC_MSG_RESULT([-D__BSD_VISIBLE])
|
||||
CFLAGS="$CFLAGS -D__BSD_VISIBLE"
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
fi
|
||||
|
||||
dnl ================================================================
|
||||
dnl library checks.
|
||||
dnl ================================================================
|
||||
@@ -252,6 +269,19 @@ AM_CONDITIONAL(HAVE_RU_EXTENDED_DICTIONARY, [test x"$have_extdict_ru" = xyes])
|
||||
AM_CONDITIONAL(HAVE_ZH_EXTENDED_DICTIONARY, [test x"$have_extdict_zh" = xyes])
|
||||
AM_CONDITIONAL(HAVE_ZHY_EXTENDED_DICTIONARY, [test x"$have_extdict_zhy" = xyes])
|
||||
|
||||
dnl ================================================================
|
||||
dnl Compiler warnings.
|
||||
dnl
|
||||
dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
||||
dnl ================================================================
|
||||
|
||||
AX_CHECK_COMPILE_FLAG([-Wimplicit], [CFLAGS="-Wimplicit $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wuninitialized], [CFLAGS="-Wuninitialized $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"])
|
||||
|
||||
dnl ================================================================
|
||||
dnl Generate output.
|
||||
dnl ================================================================
|
||||
|
||||
+42
-2
@@ -218,7 +218,9 @@ afganistan afg'anistan
|
||||
alaska al'aska
|
||||
albanië alb'A:ne@:@-
|
||||
algerië alx2'e@re@:@-
|
||||
alhambra al'ambra
|
||||
amanzimtoti $4
|
||||
amstel amst@l
|
||||
antwerpen antv&rp@n
|
||||
avignon _^_FR
|
||||
babilon babilOn
|
||||
@@ -333,6 +335,7 @@ oberammergau o@b@r'am@rgaU
|
||||
oklahoma @Ukl@h'@Uma
|
||||
outeniekwa @Ut@n'ikwa
|
||||
oxford _^_EN
|
||||
paardeneiland pA:rd@n_'eIlant
|
||||
palermo pal'&rmu
|
||||
pelindaba p&l@nd'A:ba
|
||||
perú p@ru
|
||||
@@ -342,6 +345,7 @@ portugal pOrtyx2al
|
||||
potchefstroom pOtSIfstr'o@m
|
||||
rhône _^_FR
|
||||
richardsbaai ritS@dsb'AI
|
||||
riversdal r@v@rsdal
|
||||
riviersonderend r@fi:rsOn@r_'Ent
|
||||
robertson _^_EN
|
||||
salvador salvadO:r
|
||||
@@ -380,7 +384,7 @@ uruguay urugwaI
|
||||
wakloof vA:klo@f
|
||||
zimbabwe zI:mb'ab_wE
|
||||
zulu zulu // Kwazulu-Natal
|
||||
|
||||
zürich _^_DE
|
||||
|
||||
// People names
|
||||
abdullah abd'ula
|
||||
@@ -585,6 +589,7 @@ james _^_EN
|
||||
jane _^_EN
|
||||
janine dZ@ni:n
|
||||
Jean ZA~n $capital
|
||||
jeff _^_EN
|
||||
jesebel je@s@b&l
|
||||
jessica _^_EN
|
||||
jimmy _^_EN
|
||||
@@ -603,6 +608,7 @@ julia _^_EN
|
||||
jung juN
|
||||
khayyam kaj'am
|
||||
kelvin _^_EN
|
||||
kennedy _^_EN
|
||||
kim _^_EN $capital
|
||||
kleopatra kliu:p'A:tra
|
||||
krige krix2@
|
||||
@@ -769,9 +775,11 @@ stockenström stOk@nstro@m
|
||||
stuart _^_EN
|
||||
suzanne suz'A:n
|
||||
suzette suz'Et
|
||||
sylvia _^_EN
|
||||
tania tanja
|
||||
telemann te@l@man
|
||||
terblanche t@rblA:nS
|
||||
thelma _^_EN
|
||||
theo tiu
|
||||
theron tr'On
|
||||
thessalonicense tEsalo@nis'E:ns@
|
||||
@@ -816,6 +824,7 @@ vivaldi viv'aldi
|
||||
viviers v@v@je@
|
||||
wilhelm v@lh&l@-m
|
||||
williston _^_EN
|
||||
woltemade vOlt@mA:d@
|
||||
khumalo kum'A:lu
|
||||
zuma zu:ma
|
||||
|
||||
@@ -825,6 +834,7 @@ alibama $3
|
||||
antares $2
|
||||
beatles _^_EN
|
||||
boeing _^_EN
|
||||
cadillac _^_EN
|
||||
checkers tSEk@rs
|
||||
chevrolet _^_FR
|
||||
chrysler kraIsl@r
|
||||
@@ -1044,7 +1054,8 @@ fides _^_LA
|
||||
forma _^_LA
|
||||
grata _^_LA
|
||||
habitatio _^_LA
|
||||
inclusio _^_LA
|
||||
inclusio _^_LA
|
||||
(in camera) @n||kam@ra
|
||||
(in debiti) _^_LA
|
||||
(in absentia) _^_LA
|
||||
(in extremis) _^_LA
|
||||
@@ -1075,7 +1086,9 @@ vivos _^_LA
|
||||
// main word list
|
||||
|
||||
aangaande $2
|
||||
aanmerklik $2
|
||||
aanstaande $2
|
||||
aanswel A:nsw&l
|
||||
(a cappella) a||kap'&la
|
||||
adagio ad'A:dZi;%@U
|
||||
afgaanse afg'A:ns@
|
||||
@@ -1091,6 +1104,7 @@ algaande $2
|
||||
alge alx2@
|
||||
algehele alx2@h,e@l@
|
||||
allegro al'Egru
|
||||
allengs alENs
|
||||
allergene $3
|
||||
almiskie $3
|
||||
alom al_'Om
|
||||
@@ -1116,11 +1130,13 @@ aversie av'&rsi
|
||||
|
||||
babelaas bab@lA:s
|
||||
barrikade $3
|
||||
beaming b@_A:m@N
|
||||
bedewete be@d@ve@t@
|
||||
beide beId@
|
||||
bekaf b&kaf
|
||||
belangriker b@laNr@k,Ir
|
||||
bene be@n@
|
||||
beringde b@rINd@
|
||||
beswil bEsv@l
|
||||
besnedene b@sne@d@n@
|
||||
bestes bEst@s
|
||||
@@ -1130,6 +1146,7 @@ bewe be@v@
|
||||
bewebeen be@v@be@n
|
||||
bewend be@v@nt
|
||||
bewering b@ve@rIN
|
||||
bilharzia b@lharsia
|
||||
biopsie bi'Opsi
|
||||
bomaat bo@mA:t
|
||||
bordegoed bO:rd@x2ut
|
||||
@@ -1155,6 +1172,7 @@ cedille s@dIl@
|
||||
charisma kar'Isma
|
||||
cinsaut s@nso@
|
||||
cliché kliS'eI:
|
||||
clientèle _^_FR
|
||||
clivia klIvija
|
||||
cognac kOn^ak
|
||||
confetti $2
|
||||
@@ -1173,6 +1191,7 @@ dawidster dA:v@tst&r
|
||||
déjà _^_FR
|
||||
dekade dEk'A:d@
|
||||
dekreling dEkre@l@N
|
||||
demensie d@me~nsi
|
||||
deurentyd dy@r@nteIt
|
||||
deurgaans $1
|
||||
deurkruis $2
|
||||
@@ -1183,6 +1202,7 @@ diffuus d@fy:s
|
||||
dikwels dIkv@ls
|
||||
diplomasie d@plo@mas'i
|
||||
disleksie $2
|
||||
dissiplinering d@s@plin'e@r@N
|
||||
divan div'an
|
||||
doktore $2
|
||||
doyen dO:j'En
|
||||
@@ -1219,12 +1239,14 @@ ewentwil e@v@ntv@l
|
||||
exodus Eks'o@dWs
|
||||
|
||||
factotum $2
|
||||
faktotum $2
|
||||
fakture $2
|
||||
fetakaas fEtakA:s
|
||||
figuur f@x2yr
|
||||
filippense f@l@pEns@
|
||||
finalis $3
|
||||
finaliste $3
|
||||
fluktuasie $3
|
||||
fort fOrt
|
||||
forte fOrt@
|
||||
|
||||
@@ -1269,6 +1291,7 @@ hekke h&k@
|
||||
helaas he@l'A:s
|
||||
here he@r@
|
||||
herero hEr'E:ru
|
||||
herontmoeting h&r_Ontmut@N
|
||||
herrysenis h&r'eIs@n@s
|
||||
hierso hi:rsO
|
||||
hippie _^_EN
|
||||
@@ -1294,8 +1317,10 @@ inkatha iNk'A:ta
|
||||
inkluis $2
|
||||
innestel InnEst@l
|
||||
insomnia @nsOmnija
|
||||
inteling Inte@l@N
|
||||
intens @nt'Ens
|
||||
intensiteit $4
|
||||
inwegery Inve@x2@reI
|
||||
ironieë irun'i:@
|
||||
|
||||
jantwak jantw'ak
|
||||
@@ -1306,12 +1331,14 @@ kafee kaf'e@
|
||||
kaliefa kal'ifa
|
||||
kameraderie kam@rA:d@r'i
|
||||
kapittel kap'It@l
|
||||
karolie kar_o@li
|
||||
kateter kat'e@t@r
|
||||
katswink katsv@nk
|
||||
kaviaar kavi'A:r
|
||||
kennisvaardig $1
|
||||
kimono $2
|
||||
klaasvakie $2
|
||||
kliënteel $3
|
||||
klimeid klImeIt
|
||||
knapsekêrel knaps@k&:r@l
|
||||
kolossense kOl@s'e~ns@
|
||||
@@ -1325,11 +1352,13 @@ kopiereg kup'ir&x2
|
||||
korswel kOrsv@l
|
||||
kotiljons kOt@lj'o~ns
|
||||
kritiek krIt'ik
|
||||
kruisteling krYyste@l@N
|
||||
kulture $2
|
||||
kunsmatige kWnsm'A:t@x2@
|
||||
kwansuis $2
|
||||
kweekwal kwe@kval
|
||||
|
||||
landswye lantsveI@
|
||||
lasagne las'anj@
|
||||
legaat l@x2A:t
|
||||
legate l@x2A:t@
|
||||
@@ -1337,6 +1366,7 @@ libido l@bidu
|
||||
liefdespel lifd@sp&l
|
||||
lipstiek lIpstik
|
||||
lisensiaat l@se~nsi;'A:t
|
||||
logieserwys lo@x2is@rveIs
|
||||
lokaas lOk_A:s
|
||||
londense lOnd@ns@
|
||||
lord _^_EN
|
||||
@@ -1448,6 +1478,7 @@ oorsee $2
|
||||
oorsese $2
|
||||
oorval $2 $verb
|
||||
opend Op_Ent
|
||||
opwindends Opv'Ind@nts
|
||||
oraal o@r'A:l
|
||||
orale o@r'A:l@
|
||||
oranjepers o@r'anj@p&:rs
|
||||
@@ -1472,6 +1503,7 @@ pinotage pinut'A:Z
|
||||
pirouette p@ru:'Et
|
||||
plaasjaap plA:sjA:p
|
||||
plasenta plas'Enta
|
||||
platwaai platvAI
|
||||
poinsettia pOIns'Etia
|
||||
pond po~nt
|
||||
poniepers po@nip&rs
|
||||
@@ -1504,6 +1536,7 @@ salute sal'yt@
|
||||
samelewing sA:m@l,e@v@N
|
||||
sanhedrin sanh'e@dr@n
|
||||
sangemeenskap sanx2@me@nskap
|
||||
sedeles se@d@lEs
|
||||
sedertdien $3
|
||||
sektore $2
|
||||
sinagoge s@n@x2o@x2@
|
||||
@@ -1532,6 +1565,7 @@ sonore sun'o@r@
|
||||
sonure sOn_yr@
|
||||
sover so@f&r
|
||||
staccato $2
|
||||
steekhoudendheid $2
|
||||
sterwens st&rv@ns
|
||||
stilswye $1
|
||||
strydros streIt_rOs
|
||||
@@ -1554,7 +1588,10 @@ tesourus t@s@UrWs
|
||||
tevrede t@fre@d@
|
||||
thula tu:la
|
||||
toegee tux2e@
|
||||
toegeklik tux2@klIk
|
||||
toemessel tumEs@l
|
||||
toereken ture@k@n
|
||||
toleransie tOl@r'ansi
|
||||
tornado $2
|
||||
totale tut'A:l@
|
||||
totsiens $2
|
||||
@@ -1566,6 +1603,7 @@ tsoenami tsun'A:mi
|
||||
uitdaging YydA:x2@N
|
||||
uiteraard Yyt@r_'A:rt
|
||||
uitermate $3
|
||||
uitgeslotene Yytx2@slo@t@n@
|
||||
uniforme $3
|
||||
|
||||
vaarwel fA:rv'&l
|
||||
@@ -1622,6 +1660,7 @@ voëlent fo@@l_Ent
|
||||
vraprys frA:preIs
|
||||
vrek fr&k
|
||||
vroeërig fru:@r@x2
|
||||
vrygelatene freIx2@lA:t@n@
|
||||
vu _^_FR
|
||||
|
||||
waarskynlik $2
|
||||
@@ -1638,6 +1677,7 @@ welaf v&l_af
|
||||
weleer v&l_'e@r
|
||||
wentaktiek $1
|
||||
willens vIl@ns
|
||||
wydoog veIt_o@x2
|
||||
wysgere veIsx2e@r@
|
||||
|
||||
êrenster &:r@nst@r
|
||||
+49
-8
@@ -73,6 +73,7 @@
|
||||
@@@smokkel) ary %ar%eI // default stress: diamant-/drank-/dwelm-/goud-/kokaïensmokkelary, etc.
|
||||
amarula %am%arul%a // fix stress and a sounds: amarula and compounds
|
||||
a (ment %a // shorten a sound: perkament/testament and compounds
|
||||
_) arendag (CAC %A:r@ntax2 // fix e sound: arendagtig/-e/-heid
|
||||
arends A:r@nts_ // fix e sound: arendsoog/-kloue/-nes
|
||||
argen (tA %arx2@n // move default stress: Argentinië/Argentyns/-e
|
||||
a (riA 'A: // akwarium/barium/estuarium/herbarium/seminaria
|
||||
@@ -310,7 +311,7 @@
|
||||
attaché _%at%aSe@ // correct pronunciation: (handels-/inligtings-)attaché
|
||||
attrib (u %atr@b // move default stress: attribuut/bute/attributêr
|
||||
K) au @U // trauma/-ties/Aucamp/Paul/-a/-us
|
||||
auer aU@r //Sauer etc. fixed au and e sounds in compounds.
|
||||
auer aU@r //Sauer etc. fix au and e sounds in compounds.
|
||||
augustus %Ox2WstWs
|
||||
avokado %af%ukA:du // stress and o sounds
|
||||
avokade %af%ukA:d@ // variant form of avokado
|
||||
@@ -431,7 +432,8 @@
|
||||
bo (grond bo@ // fix 1st o sound: bogronds/-e
|
||||
_) bo (kle bo@ // fix o sound: bokleed/boklere
|
||||
bokma (kier b%Okm%a // fix stress and a sound: bokmakierie/-s/-tjie
|
||||
bom (AA bOm_ // fix a sound, pause: bomaanval/-aanslag/-aard/-eenheid and compounds
|
||||
bom (AA bOm_ // fix a sound, pause: bomaanval/-aard/-eenheid and compounds
|
||||
bomaans (la bOm_A:ns // fix o sound: bomaanslag/-aanslae
|
||||
bomaans bo@mA:ns // but fix O sound: bomaans/-e
|
||||
bonde (C bOnd@ // verbondenheid/bondeldraer/gebondene/saambondelend
|
||||
boos (aardig b%o@s_ // move default stress: boosaardig/-e/-heid
|
||||
@@ -526,6 +528,7 @@
|
||||
bakate (l b%ak@t& // fix stress and vowel sounds: bakatel/-le/-letjie
|
||||
baken bA:k@n // fix e sound: afbakening and compounds
|
||||
bakte (ri b%akte@ // fix stress and e sound: bakterie/-ë
|
||||
balalaika b%al%alaIk%a // fix a sounds and stress: balalaika/-s/-musiek
|
||||
_) bam (boes b%am // move default stress: bamboes/-e/bamboesfluit...
|
||||
ba (nalA b%a // fix stress and 1st a sound: banale/banaliteit
|
||||
band (Alier b,and // fix stress and d sound: band(e/o)lier/-e
|
||||
@@ -547,6 +550,7 @@
|
||||
ba (sieli b%a // fix stress and 1st a sound: basielie/-kruit, etc.
|
||||
basotho b%asut%u // fix stress and vowel sounds: Basotho/-0ponie and similar
|
||||
basi (s bA:s@ // basis and compounds
|
||||
basilie b%asil%i // fix a sound and stress: basilie/-kruid, etc.
|
||||
bastille b%asti:l // Bastille and compounds like Bastilledag
|
||||
batal (jon b%at%al // shorten 1st a sound, moved stress: bataljon and compounds
|
||||
ba (tik b%a // fix stress and a sound: batik/-doek/-kuns/-werk
|
||||
@@ -646,6 +650,8 @@
|
||||
bere (_ be@r@ //tediebere pandabere etc.
|
||||
_) ber (C b&r // fix e sound: Bert/Berta/Bertie/Bertus/berke/-boom
|
||||
beste (_ bEst@ // fix e sound: beste/allerbeste/naasbeste/-s
|
||||
beton (C@ b@tOn // split ng sounds: betongebou/-gietsel/-gruis
|
||||
beton (inC@ b@t'On // fix O sound: betoninrigting/-ingenieur
|
||||
be (weging b@ // draaibeweging/swaaibeweging
|
||||
bewende be@v@nd@ // first e pronounced long
|
||||
bewe (rig be@v@ // fix e sound and stress: bewerig/-e/-heid
|
||||
@@ -749,6 +755,7 @@
|
||||
dia (C d%i%a // diabeet/diafragma/diagnose/dialek/dialoog/diamant
|
||||
diaken d%iA:k@n // diaken and compounds
|
||||
diako (nie d%i%ak%u // fix stress and o sound: diakonie/-ë
|
||||
diende dind@ // fix last e sound in many compounds of bediende: bediendekamer
|
||||
diens (willi d%ins // move default stress: dienswillig/-e/-heid
|
||||
dieper (@ dip@r // fix e sound: diepere/dieperliggend/-e
|
||||
digi (ta d%ix2%i // move default stress: digitaal/digitale
|
||||
@@ -983,6 +990,7 @@
|
||||
@C) e (reekK @ // fix e sound: duine-/rotsereeks
|
||||
aai) e (C @ // fix e sound: baaierd/waaierstert/paaiement/compounds starting with baaiers-
|
||||
lat) eres @r@s //lateres
|
||||
@C) erm (K &r@-m // a catch-all for words ending in -erm(s)
|
||||
fp) ers (_ &rs // fix e sound: dof-/gif-/olyf-/tydskrifpers, etc.
|
||||
bloup) ers &:rs // fix e sound: bloupers
|
||||
iew) ers (ter @rs // fix e sound: (l)iewerster
|
||||
@@ -1074,6 +1082,7 @@
|
||||
p) e (talje @ // fix stress and 1st e sound: petalje and compounds
|
||||
l) e (moen @ //fix lemoen and compounds
|
||||
Cy) e (C+ @ // fix connecting e sound in compounds like byekorf/skilderyemuseum, etc.
|
||||
effe (kleur Ef@ // fix stress and 2nd e sound: effekleur(ig/-e)
|
||||
eier eI@r // eiergeel/eierwit/leierfiguur/leiergroep
|
||||
@C) ei (land _,eI // insert short pause: skiereiland and many -eiland compounds
|
||||
@) ei (sen _'eI // (on)veeleisend/spoedeisend
|
||||
@@ -1451,6 +1460,7 @@
|
||||
een (Cjie e@:iN // eendjie/Leentjie/steentjies
|
||||
een (vorm %e@n // move default stress: eenvormig/-e/-heid
|
||||
_) een (voud@ %e@n // stress on 2nd slb: eenvoudig, but on 1st: eenvoud
|
||||
eend (agtig %e@nt_ // fix d sound, insert pause: eendagtig/-e/-heid
|
||||
eerbied (A e@rb'id // eerbiedig/ing
|
||||
eerbiedw %e@rb%itv // eerbiedwaardig/eerbiedwekkend
|
||||
_) eerw %e@rv // stress: eerwaarde
|
||||
@@ -1589,6 +1599,7 @@
|
||||
flu (we fl%y // move default stress: fluweel/fluwele and compounds
|
||||
_) fok (o fOk_ // fix o sound, insert short break: fokop/fokof
|
||||
folio fo@li_u // fix o sounds: folio and compounds
|
||||
fondsw fOntsv // fix v sound: fondswerwing & compounds/-waardes
|
||||
fondue f%Ondy // fix stress and ue sound: fondue and compounds
|
||||
fone (tiek f%o@n@ // fix e sound: fonetiek and compounds
|
||||
fone (tie f%une@ // fix stress and o sound: foneties/-e
|
||||
@@ -1602,6 +1613,7 @@
|
||||
formi (da f%Orm%i // move default stress: formidabel/-e
|
||||
formu (lier f%Orm%y // move default stress: formulier/-e/-boek
|
||||
_) for (se_ f'Or // stress back to 1st slb; se rule: _) for (C
|
||||
forse (nd fOrs@ // fix e sound: forsend/-e
|
||||
fos (fa f%Os // move default stress: fosfaat/fosfate
|
||||
fo (ssiel f%O // move default stress: fossiel/-e and compounds
|
||||
foto fo@tu
|
||||
@@ -1694,6 +1706,7 @@
|
||||
_) gra (na x2r@ // granaat(boom)/granate
|
||||
grandi (o x2r%and%i // move default stress: grandioos/-ose
|
||||
_) gra (vA x2r%a // fix stress and a sound: gravin/-ne/gravure
|
||||
grenadella gr@n@d&la // fix stress and vowels: grenadella and compounds like -heining
|
||||
griekwa x2rikwa // fix w sound and a sound in compounds: Griekwa/-land, etc.
|
||||
ouCa) gr (ootjie x2r' // move default stress: ouma/oupagrootjie/-s
|
||||
_) graad (e x2r%A:t_ // fix stress and d sound: graadeen(tjies)/-elfs
|
||||
@@ -1726,6 +1739,7 @@
|
||||
gegesel x2@x2e@s@l // fix middle e sound
|
||||
K) gele (_ x2e@l@ // fix stress and e sound: (eier)gele
|
||||
_) geler x2e@l@r // stress and 1st e sound: geler/gelerig
|
||||
_) gell x2&l
|
||||
gemel (d x2@m&l // fix e sound: bo-/bowe-/laas-/meergemeld/-e
|
||||
gems x2Ems // fix e sound: (baster)gemsbok/-bul/-ooi, etc.
|
||||
gene (_ x2e@n@ // gene/diegene
|
||||
@@ -1741,7 +1755,7 @@
|
||||
_) ge (ossP2 x2@ // but ge- prefix: geossilleer/geossifiseer, etc.
|
||||
ni) ge (ri x2'e@ //nigeriese etc.
|
||||
gese (_ x2'e@s@ //Portugese, and others
|
||||
|
||||
gesp (etjie x2Esp // fix e sounds: gespetjie/-s
|
||||
gespe (_ x2Esp@ // gespe and compounds
|
||||
gespes (_ x2Esp@s // gespes and compounds
|
||||
gewens (g x2e@v@ns // (on)vergewensgesind/-e/-heid
|
||||
@@ -1847,6 +1861,7 @@
|
||||
hart (stogte_ h%art // move default stress: hartstogtelik
|
||||
hart (stogte_N hart // restore default stress: hartstogte
|
||||
ha (we hA: // fix stress and a sound: hawearbeider/lewendehaweafdeling
|
||||
_) hef (a hEf_ // fix e sound, insert break: hefapparaat/-arm(s)
|
||||
hia (sint h%ij%a // fix stress: hiasint/-e and compounds
|
||||
_) hi (bis h%i // move default stress: hibiskus/-se and compounds
|
||||
hierna (maal h%i:rnA: // fix stress and a sound: hiernamaals/-e
|
||||
@@ -1984,6 +1999,7 @@
|
||||
_) idi (o %id%i // idioom/idiome/idioot
|
||||
_) id (A %id // idille/idillies/ideëryk
|
||||
&l) iker (C @k@r // fix i sound: menslikerwys/redelikerwyse, etc.
|
||||
&l) iker (_ @k@r // fix i sound: afstootliker/(ge)redeliker/onberispeliker
|
||||
illumi (nA %il%um%i // fix stress and vowel sounds: illuminasie/illumineer/illuminati
|
||||
illu (si %ily // illusie/-s/illusief
|
||||
illu (strA %il%W // fix i sound: illustreer/illustrering/illustrasie
|
||||
@@ -2114,6 +2130,7 @@
|
||||
_) in (a@P2 In // inakkuraat/inaktief/inaktiwiteit
|
||||
_) inbe (lC Inb%& // fix e sound in compounds like inbelprogram
|
||||
indone (si @nd%uni: // fix stress and vowel sounds: Indonesië/Indonesiese
|
||||
s) in (gestel @n // split n g: compounds with ingesteldheid/winsingestelde
|
||||
_) in (oe In_ // fix i sound, pause: inoefen/-oes and derivatives
|
||||
invest (eer @nv%Est // fix stress, v and e sounds: investeer/-der
|
||||
investe (r@ @nv%Este@ // fix e sound: (kapitaal)investering/investerende
|
||||
@@ -2269,7 +2286,7 @@
|
||||
klaarblyklik klA:rbl'eIkl@k // klaarblyklik/e
|
||||
kla (kous klA: // fix stress and long a sound: klakous/-e
|
||||
klande (sti kl%and@ // move default stress: klandestien/-e
|
||||
_) kla (sA@@ kla // klasaantekeninge/klasonderwyser and other compounds
|
||||
_) klas (A@ klas_ // klasaantekeninge/klasonderwyser/-opdrag(te)/-ure and other compounds
|
||||
kla (ssiek kl%a // move default stress: klassiek/-e
|
||||
klavesimbel klA:v@s@mb@l // fix v and e sounds: klavesimbel and compounds
|
||||
kla (vier kl%a // klavier and many compounds
|
||||
@@ -2324,10 +2341,11 @@
|
||||
krieketw krik@tv //krieket followed by w in compounds always v
|
||||
|
||||
krokodi (l kr%Ok@dI // (wyfie)krokodil/-le
|
||||
kro (niek kr%u // fix stress and o sound: kroniek and many compounds
|
||||
kruger kr'Y@@r
|
||||
ku (ba@ k%y // move default stress: kubaan/kubane
|
||||
ku (biek k%y // move default stress: kubiek/-e/-getal
|
||||
_) kuber kyb@r // fixed e sound: kuberruim(te)
|
||||
_) kuber kyb@r // fix e sound: kuberruim(te)
|
||||
kulin k%Wl%in // Move default stress and fix u sound: kulinër/-e
|
||||
@) kundi (g k'Wnd@ // wiskundige/onoordeelkundigheid and many similar
|
||||
kurwe kWrv@ // fix e sound: kurwes/skurwebas/skurwebek/skurwepadda
|
||||
@@ -2359,11 +2377,13 @@
|
||||
|
||||
kabine (t k%ab%inE // kabinet/drankkabinet/-te/kabinetsvergadering
|
||||
_) ka (d@ k%a // stress and 1st a: kadawer-/kadet-/kado/kadot(jie)/kadriel,etc.
|
||||
kadet (A k%adEt_ // fix e sound, insert pause: kadetorkes/-offisier/-oefening, etc.
|
||||
ka (der kA: // restore stress on long a: kader/-s and compounds
|
||||
kad (mium kad // fix stress and d sound: kadmium and compounds
|
||||
kafe (te k%af@ // fix stress and vowel sounds: kafeteria and compounds
|
||||
kafe (ï k%af%i // fix stress and vowel sounds: kafeïene and compounds
|
||||
ka (jak k%a // fix stress and 1st a sound: kajak/-ke/-vaarder
|
||||
kakao k%akA:w // fix stress and vowel sounds: kakao and many compounds
|
||||
kake (C kA:k@ // kakebeen/skakelaar/skakelbord/skakelfunksie
|
||||
kalahari kalah'A:ri // stress: Kalahari/-sand/-woestyn
|
||||
_) ka (lAnC k%a // kalender and compounds/kalant/kalander and compounds
|
||||
@@ -2544,6 +2564,7 @@
|
||||
kontrasep k%Ontr%asEp // fix stress and e sound: kontrasepsie and derivatives
|
||||
kontrover (s k%Ontr%uv&r // o and v sounds: kontroversie/kontroversieel
|
||||
kop (o kOp? // fix o sound: koponderstebo/kopomdraai/kopoperasie/gryskoponderwyser/poenskopolifant
|
||||
kop (agtig k%Op_ // fix o sound, insert break: hamer-/spinnekop-/penkopagtig(e(s))
|
||||
kopu (lA k%Op%y // fix o sound: kopulasie/kopuleer and derivatives
|
||||
_) kor (dA k%Or // kordaat/kordon
|
||||
ko (rint k%u // fix stress and o sound: korint/-e and compounds
|
||||
@@ -2656,6 +2677,7 @@
|
||||
loboto (mie l%ub%Ot%u // fix stress and o sounds: lobotomie
|
||||
lo (ja l%u // fix stress and o sound: lojale/lojaliteit
|
||||
lo (kalA l%u // fix stress and o sound: lokale/ontvangslokale, etc.
|
||||
loke (t l%ukE // fix stress and vowel sounds: many compounds with loket
|
||||
lom (bardA l%Om // move default stress: Lombardies/-e/Lombarde
|
||||
_) lore (C@ lo@r@ // fix e sound: verloregaan/verloregoederekantoor/Verlorerivier
|
||||
_) losge (@P5 l'Osx2@
|
||||
@@ -2738,6 +2760,7 @@
|
||||
mando (lien m%and%u // fix stress and o sound: mandolien and compounds
|
||||
mane (l m%an& // fix stress and e sound: (kerk)manel(le)punte, etc.
|
||||
mane (wale m%an@ // fix stress and shorten a sound: manewale/-s and compounds
|
||||
maneuvers m%anY@f@rs // fix last e sound: (krygs)maneuvers, etc.
|
||||
_) mango maNg%u // fix g and o sounds: mangoboord/-sap/-'s
|
||||
man (haft m%an // move default stress: manhaftig/-e/-heid
|
||||
mani (akK mA:n%i // fix stress and 1st a sound: maniak/-ke and compounds
|
||||
@@ -2805,6 +2828,7 @@
|
||||
medisyne m@d@seIn@ //medisyne and compounds
|
||||
meganies m@x2'A:nis
|
||||
_) meege (@P5 m'e@x2@
|
||||
_) meegewe (nd me@x2e@v@ // fix e sounds and stress: meegewend(e)
|
||||
me (juf m@ // move default stress and shorten e sound
|
||||
me (laats m@ // fix stress and e sound: melaats/-e/-heid
|
||||
melancholie (_N m%El%aNk%o@li // fix stress and 1st e sound: melancholie
|
||||
@@ -2946,6 +2970,7 @@
|
||||
morf (otomie m%Orf // move default stress: morfotomie
|
||||
_) morr (i mOr // restore default stress: morrig/morrie/-doring
|
||||
_) mors (@ mOrs // restore default stress: morsaf/morsdood/morsig
|
||||
mos (agtig mOs_ // fix o sound, insert break: (kos)mosagtig(e)
|
||||
mosam (biek m%o@s%am // move default stress: Mosambiek/-er/-se
|
||||
mosa (ïek m%o@s%a // move default stress: mosaïek and compounds
|
||||
mo (skee m%O // move default stress: moskee/-s and compounds
|
||||
@@ -3035,7 +3060,8 @@
|
||||
ne (anderCa n%i // move default stress: Neander(d/t)al/-ler
|
||||
neger (in n%e@x2@r // move default stress: negerin/-ne
|
||||
ne (gosie n@ // fix stress and e sound: negosie/-ware, etc.
|
||||
nek (om n&k_ // fix e sound, insert pause: nekom(ge)draai
|
||||
nek (_ n&k // catch-all for words ending in -nek: koedoe-/swaannek
|
||||
_) nek (A n&k_ // fix e sound, insert pause: nekom(ge)draai/-operasie
|
||||
nekta (rien n%Ekt%a // fix stress and a sound: nektarien/-perske, etc.
|
||||
neo (li n%i%u // fix stress and vowel sounds: neolities/-e/neolitikum
|
||||
ner (veu n%&r // move default stress: nerveus/-e
|
||||
@@ -3080,6 +3106,7 @@
|
||||
nood (lotti n%o@t // move default stress: noodlottig/-e
|
||||
nood (saak n%o@t // move default stress: noodsaaklik/-e/-heid, vs. noodsaak
|
||||
nood (saak_N no@t // restore default stress: (ge)noodsaak
|
||||
nooien (tjie noIN // remove the e sound: nooientjie(s) and compounds
|
||||
noord (oos n%o@rt_ // move default stress: noordoos/-te/-telik/-e
|
||||
nor (ma@ n%Or // normaal/normaalweg/normale/abnormaal/-ale
|
||||
nostal (gie_N n%Ost%al // stress on last slb.: nostalgie
|
||||
@@ -3196,6 +3223,7 @@
|
||||
ofoon uf'o@n // mikrofoon/sakso(saxo)foon
|
||||
ofone uf'o@n@ // mikrofone/sakso(saxo)fone
|
||||
ograaf ux2r'A:f // biograaf/demograaf/fotograaf
|
||||
ografeer ux2raf'e@r // fix o sound: (ge)fotografeer
|
||||
ografie ux2raf'i // biografie/demografie/fotografie
|
||||
ografies ux2r'A:fis // biografies/demografies/fotografies
|
||||
ograwe ux2r'A:v@ // biograwe/demograwe/fotograwe
|
||||
@@ -3417,6 +3445,7 @@
|
||||
ooi oI
|
||||
ooy oI
|
||||
oodjie oIci
|
||||
CC) ool (A o@l_ // insert break: skooluur/-ure, steenkooluitvoer, but not: Karoolug
|
||||
ootjie oIci
|
||||
oontjie oINki
|
||||
oondjie oINki
|
||||
@@ -3483,6 +3512,7 @@
|
||||
oot (moedig %o@t // move default stress: ootmoedig/-e/-heid
|
||||
|
||||
.group op
|
||||
_) opaal %o@pA:l // fix o sound, remove break: opaal and compounds
|
||||
opaat up'A:t // homeopaat/psigopaat and similar
|
||||
opatie upat'i // homeopatie/neuropatie and similar
|
||||
opaties up'A:tis // psigopaties/osteopaties and similar
|
||||
@@ -3578,6 +3608,7 @@
|
||||
pol (vy p%Ol // move default stress: polvy/-e and compounds
|
||||
pomelo p%ume@l%u // fix stress and o sounds: pomelo(sap/-drankie...)
|
||||
_) pon (dok p%On // move default stress: pondok/-ke/-kie
|
||||
pop (agtig p%Op_ // fix o sound, insert break: popagtig(e) and compounds
|
||||
popu ,pOpy
|
||||
_) por (C %pOr //portret portaal etc.
|
||||
por (ie p%o@r // move default stress: porie/-ë
|
||||
@@ -4101,6 +4132,7 @@
|
||||
sirene s@re@n@ // move default stress and fix vowel sounds: sirene/-s/-lied/-sang
|
||||
si (troen s@ // move default stress: sitroen and compounds
|
||||
sitronella s@tr%un&l%a // fix stress and vowel sounds: sitronella and compounds
|
||||
s (juffrou s // fix s sound: kuns-/kos-/geselskapsjuffrou, etc.
|
||||
skade skA:d@ // elik suffix rule breaks a sound of (on)skadelik
|
||||
skadu skA:dy // skaduagtig/skadutjie
|
||||
skaker (ing sk%ake@r // skakering/-s/kleurskakering
|
||||
@@ -4118,6 +4150,7 @@
|
||||
sker (muts sk%&r // move default stress: (ge)skermutsel/skermutseling/-e
|
||||
skerpi (oen sk%&rp%i // move default stress: skerpioen/-e and compounds
|
||||
skilder (y sk@ld@r // move stress to y: skildery and compounds like skilderymuseum
|
||||
skim (agtig sk@m_ // fix i sound, insert break: skimagtig(e)
|
||||
skisofr (e sk%is%ufr // fix stress and o sound: skisofreen/skisofrene
|
||||
skle (rose skl@ // fix stress and e sound: sklerose and compounds
|
||||
_) skok (AP4 sk''Ok_ // fix o sound and stress: skokaankondiging/-effek/-insluiting/-onthulling...
|
||||
@@ -4252,6 +4285,7 @@
|
||||
_) su (meri s%u // fix stress and u sound: sumeries/-e
|
||||
su (mmier s%W // move default stress: sumier/-e
|
||||
super (A s''yp@r_ // fix stress, break in compounds like superintelligent
|
||||
superi (A s%up%e@r%i // fix stress and vowel sounds: superieur/superioriteit
|
||||
superintendent s,upr@nt%EndEnt // fix stress and vowel sounds: superintendent and compounds
|
||||
surro (ga s%Wr%u // fix stress and o sound: surrogaat/surrogate and compounds
|
||||
su (saC s%u // fix stress and u sound: susan/-na/susara
|
||||
@@ -4271,6 +4305,7 @@
|
||||
swepe swe@p@ // fix w sound: rubberswepe
|
||||
sw (erm sw // fix e sound: naderswerm
|
||||
switser swIts@r // fix e sound: Switserland/Switserse
|
||||
sypel (end seIp@l // fix e sound: sypelend/-e
|
||||
|
||||
.group se
|
||||
se (_ s@ //the word se and some ending in se
|
||||
@@ -4411,6 +4446,7 @@
|
||||
|
||||
stede (_ ste@d@ //voorstede, hoofstede etc.
|
||||
stele (_ ste@l@ //kastele lepelstele etc.
|
||||
stema (_ ste@ma // fix e sound: doods-/gespreks/-herhalingstema and many similar
|
||||
stene (_ ste@n@ //skoorstene, bakstene etc.
|
||||
sten (sil stEn // fix e sound in compounds like wolbaalstensil
|
||||
chri) stene (_ st@n@ //fix christene and compounds
|
||||
@@ -4561,7 +4597,7 @@
|
||||
toe (riste@ t%u // move default stress: toeristebedryf/-sentrum and similar
|
||||
toer (n t%ur // move default stress: compounds of toernooi
|
||||
toere (_ tu:r@ // restore default stress
|
||||
toi (let t%OI // move default stress: toilet and compounds
|
||||
toilet t%OIlEt // move default stress: toilet and compounds: toiletartikel/-emmer/-opsigter
|
||||
tokke (lo t%Ok@ // move default stress: tokkelos/-sie/tokkelok and compounds
|
||||
tok (tokk t%Ok // move default stress: toktokkie/-s/-spelery, etc.
|
||||
tombola t%Ombo@l%a // move default stress: tombola and compounds
|
||||
@@ -4574,6 +4610,7 @@
|
||||
@) toris (_ t'o@r@s // fix stress: pectoris/klitoris
|
||||
_) tor (nyn t%Or // move default stress: tornyn/-e and compounds
|
||||
_) tos (ka t%Os // move default stress: Toskaanse/Toskane
|
||||
tser (tjie ts@r // fix e sound: (skoen)poetsertjie/weerkaatsertjie
|
||||
ttel t@l // many compounds of bottel/skottelgoed
|
||||
tuberkulose t%yb@rk%ylo@s@ // fix stress; e sound in compounds: tuberkulose/-behandeling
|
||||
tug (A tWx2_ // fix u sound: (on)tugondersoek/-oortreding/-ordonnansie
|
||||
@@ -4875,6 +4912,7 @@
|
||||
_) vanklik faNkl@k // (on)ontvanklik/-e/-er/-heid
|
||||
vanself (spr f%ans%&lf // move default stress: vanselfsprekend/-e/-heid
|
||||
vari (A v%ar%i // fix v sound and stress: variasie/-s/varieer
|
||||
va (sal v%a // fix stress and v and a sounds: vasal/-le
|
||||
vaseline v%as@lin // fix stress, v and vowel sounds: vaseline/-bottel, etc.
|
||||
vasste (l fast& // fix e sound: vasstel(ling/-lende)
|
||||
_) vat (A@ fat_ // fix a sound: vatafstand/-orgaan
|
||||
@@ -4943,9 +4981,11 @@
|
||||
|
||||
ve (l f& // maagvel, stress on 1st slb
|
||||
@) vel (A fe@l // aanbeveling/aanbevelingsbrief
|
||||
vel (djie f&l // fix -djie sound: veldjie(s) and compounds
|
||||
veld (C f< // fix d sound: veldreuk/-radio/-rantsoen, etc.
|
||||
veld (eks f<_ // fix d sound, pause: veldekskursie/-ekspedisie/-s
|
||||
veld (o f<_ // fix d sound, pause: veldorgideë/-opsigter/-oppervlakte/-opname, etc.
|
||||
veld (t f&l // eliminate double t sound: veldtog and many compounds, Langeveldt, Springveldt
|
||||
vele f'e@l@
|
||||
ven (detta v%En // fix stress and v sound: vendatta and compounds
|
||||
ven (dusie f@n // fix stress and e sound: vendusie and compounds
|
||||
@@ -5048,7 +5088,7 @@
|
||||
vol (kome f%Ol
|
||||
vo (llA_ fO // volle/vollê/Volla - exception to: vo (lC f%O
|
||||
volle (dig f%Ole@ // fix stress and e sound: (on)volledig/-e/-heid...
|
||||
voll (engte fOlE
|
||||
volle (ngte fOlE
|
||||
vo (ller fO // exception to: vo (lC f%O
|
||||
volles (_ fOl@s // fix stress and e sound: volles/passievolles, etc.
|
||||
vol (hou_ fOl // exception to: vo (lC f%O
|
||||
@@ -5204,6 +5244,7 @@
|
||||
waardeer vard'e@r // waardeer/waardeerder
|
||||
waarder (@ vard'e@r // waarderend/e/waardering
|
||||
&) waardig v'A:rd@x2 // stress on -waardig: merkwaardig/besienswaardigheid, etc.
|
||||
waar (din v%A:r // fix stress: waardin/-ne
|
||||
waar (neemba v%A:r // move default stress: waarneembaar/-bare
|
||||
C) waarts vA:rts // fix w sound: dakwaarts/huiswaarts/kerkwaarts/noordwaarts/weswaarts
|
||||
wêrel (djie v&:r@l // fix -djie in wêreldjie and compounds
|
||||
|
||||
+6
-5
@@ -251,11 +251,12 @@ $ duulaar
|
||||
كغم kiluu||gHraam
|
||||
طن t[un
|
||||
كم kiiluu||mitar
|
||||
سا saaAa
|
||||
م mitar
|
||||
س su?aal
|
||||
ج dZawaab
|
||||
ص s[afHah
|
||||
سا saaAa
|
||||
// Units below conflict with single letter name
|
||||
// م mitar
|
||||
// س su?aal
|
||||
// ج dZawaab
|
||||
// ص s[afHah
|
||||
// العملات
|
||||
د.ج diinaar||dZazaa?irij
|
||||
$ duulaar
|
||||
|
||||
+12
-11
@@ -1047,6 +1047,7 @@ autocracy O:t'0kr@si
|
||||
automobile O:t@m@bi@l
|
||||
automaton O:t'0m@t@n
|
||||
autopsy O:t20psi
|
||||
?3 aurora $2
|
||||
avalanche av@laanS
|
||||
avast $alt3
|
||||
avatar ava#tA@
|
||||
@@ -1668,7 +1669,7 @@ derogative $2
|
||||
descant dEskant
|
||||
descry dI#skreI
|
||||
desert dI#z3:t
|
||||
desert dEz3t $only
|
||||
desert dEz3t $onlys
|
||||
desert dI#z3:t $verb
|
||||
desi deIsi
|
||||
desolate dEs@l@t $only
|
||||
@@ -2228,7 +2229,7 @@ idevice $alt6
|
||||
idly aIdlI
|
||||
idiocy IdI@si
|
||||
ifrog $alt6
|
||||
ignoramus Igno@r'eIm@s
|
||||
ignoramus IgnO@r'eIm@s
|
||||
illiterate $alt2
|
||||
illumine $alt2
|
||||
imagery ImIdZri
|
||||
@@ -2716,6 +2717,7 @@ nonsense n0ns@ns
|
||||
nonetheless nVnD@l'Es
|
||||
nosedive noUzdaIv
|
||||
nosir noUs3:
|
||||
?5 nosir noUsIR
|
||||
not noUt // for noted, notable, etc
|
||||
nots n0ts
|
||||
(nôtre dame) noUtr@'dA:m
|
||||
@@ -3420,7 +3422,7 @@ sincerest sIns'i@r@st
|
||||
sinus saIn@s
|
||||
siphon $alt2
|
||||
sir s,3: $only
|
||||
?5 sir s,VR $only
|
||||
?5 sir s,IR $only
|
||||
siren saIr@n
|
||||
site saIt // for sited
|
||||
ski ski:
|
||||
@@ -3455,12 +3457,13 @@ sommelier s0m'Eli@
|
||||
son sVn
|
||||
sonar soUnA@
|
||||
sonny sVnI
|
||||
sooth su:T $only
|
||||
sopapilla soUp@p'i:@
|
||||
sope soUpeI
|
||||
sorbet sO@beI
|
||||
souffle su:fl'eI
|
||||
soundbite saUndbaIt
|
||||
souvenir su:v@n'i@3
|
||||
sopapilla soUp@p'i:@
|
||||
sorbet sO@beI
|
||||
soyabean sOI@bi:n
|
||||
specific sp@sIfIk
|
||||
specimen spEsI2m@n
|
||||
@@ -3568,7 +3571,6 @@ tallyho talI'hoU
|
||||
tamale ta#mA:li
|
||||
tampon tamp0n
|
||||
tangerine tandZ@r'i:n
|
||||
taoiseach ti:S@x
|
||||
tapestry tapI#stri
|
||||
tarantula t@rantS@l@
|
||||
tardis $alt1
|
||||
@@ -3913,6 +3915,7 @@ yer j3 $u+
|
||||
ye ji: $u+
|
||||
yea jeI
|
||||
yessir jEss3:
|
||||
?5 yessir jEssIR
|
||||
yoghurt j0g3t
|
||||
?3 yoghurt joUg3t
|
||||
?3 yogurt joUg3t
|
||||
@@ -4042,6 +4045,7 @@ Assam A:s'A:m
|
||||
Assamese A:sA:m'i:z
|
||||
Audubon O:d@b0n
|
||||
Augusta $2
|
||||
Austen O2stI2n
|
||||
Baghdad $2
|
||||
Bahawalpur $alt3
|
||||
Bahia ba'i:@
|
||||
@@ -4546,8 +4550,6 @@ Annise a#ni:s
|
||||
?!3 Anthony ant@ni
|
||||
Anton ant0n
|
||||
Anya anj@
|
||||
Aoife i:f@
|
||||
Aoiffe i:f@
|
||||
Aphrodite afr@d'aIti
|
||||
Archibald A@tSIbO:ld
|
||||
Archie A@tSi
|
||||
@@ -4898,7 +4900,6 @@ Sabine sa#b'i:n
|
||||
Salman sa#lmA:n
|
||||
Samantha sa#manT@
|
||||
(Santa claus) s'ant@||kl'O:z
|
||||
Saoirse si@S@
|
||||
Sarah se@r@
|
||||
Sarisa $alt3
|
||||
Seamus SeIm@s
|
||||
@@ -4912,8 +4913,8 @@ Sheila Si:l@
|
||||
Simon saIm@n
|
||||
Sinead SI2neId
|
||||
Sinéad SI2neId
|
||||
Siobhan S@vO:n
|
||||
Siobhán S@vO:n
|
||||
Siobhan SI2vO:n
|
||||
Siobhán SI2vO:n
|
||||
Sonia s0nj@
|
||||
Sophia soUf'i@
|
||||
Sophie soUfi
|
||||
|
||||
+38
-10
@@ -150,12 +150,16 @@
|
||||
sw) a (m_ a
|
||||
sw) a (nk a
|
||||
ao eI0
|
||||
mh) ao eI // Irish, e.g. 'mhaol' /weIl/
|
||||
m) ao aU
|
||||
p) ao aU
|
||||
t) ao aU
|
||||
ao (_ =aU
|
||||
aois (_ i:S
|
||||
aoise (_ i:S@
|
||||
ao (ism aU
|
||||
ao (ist aU
|
||||
aoi (C i: // Irish, e.g. 'Aoife' /i:f@/
|
||||
aoir (C e@ // Irish, e.g. 'Saoirse' /se@S@/
|
||||
?3 aoir (C 3: // Irish, e.g. 'Saoirse' /s3:S@/
|
||||
g) ao (l eI@
|
||||
aor eI'o@
|
||||
m) ao (ri aU
|
||||
@@ -180,7 +184,8 @@
|
||||
_n) a (tional a
|
||||
@) a (tious 'eI
|
||||
ell) a (trix @
|
||||
a (triC 'eI
|
||||
a (trix 'eI
|
||||
a (trice 'eI
|
||||
n) a (tur eI
|
||||
n) a (tura a
|
||||
&) a (ture_ @
|
||||
@@ -512,7 +517,7 @@
|
||||
_m) ag (ell a#dZ
|
||||
Cp) age (_ eIdZ
|
||||
pp) age (_ I2dZ
|
||||
_ant) ag 'ag
|
||||
_ant) ag (on 'ag
|
||||
enr) ag (e_ 'eIdZ
|
||||
outr) ag (e_ eIdZ
|
||||
der) ag (e_ eIdZ
|
||||
@@ -847,6 +852,7 @@
|
||||
_) anony (m a#n0n@
|
||||
_c) an (ood a#n
|
||||
&) an (_ @n
|
||||
&) an (ize @n
|
||||
&) an (_$w_alt1+ an
|
||||
?8 &) an (_ a#n
|
||||
@u) an (_S1 n
|
||||
@@ -1202,6 +1208,7 @@ calend) ar 3
|
||||
_) as (in as
|
||||
as (k aas
|
||||
_) as (k aas
|
||||
s) as (k as
|
||||
_) as (n az
|
||||
_) as (oc eIs
|
||||
C) as (p aas
|
||||
@@ -1227,6 +1234,7 @@ calend) ar 3
|
||||
ass (u @S
|
||||
ass (ump a#s
|
||||
assur @SU@
|
||||
_) ass (wh as
|
||||
C) as (t aas
|
||||
C) ast (ell aas
|
||||
_bl) as (to as //not aa
|
||||
@@ -1391,7 +1399,7 @@ _it_separ) ate (_ @t
|
||||
au (m_ aU
|
||||
_) au (nt aa
|
||||
aur (_ O@
|
||||
_) au (ror a#
|
||||
?!3 _) au (rora a#
|
||||
s) au (rus_ 'O:
|
||||
@) au (ri 'O:
|
||||
C) aus (_ aUs
|
||||
@@ -1463,7 +1471,7 @@ _it_separ) ate (_ @t
|
||||
may) be (_ bi:
|
||||
_) be (CA bI#
|
||||
_) bete (lg bi:t@
|
||||
_) be (C% bE
|
||||
_) be (C%+ bE
|
||||
_) be (atiC b%i:
|
||||
_) be (b bi:
|
||||
_) be (cl bI#
|
||||
@@ -1477,7 +1485,7 @@ _it_separ) ate (_ @t
|
||||
_) be (kn bI#
|
||||
_) belarus bEl@r'u:s
|
||||
_) be (lC bE
|
||||
_) be (llig bI#
|
||||
_) be (llig+ bI#
|
||||
_) be (re bE
|
||||
_) be (sC bI#
|
||||
_) be (stia bE
|
||||
@@ -2150,6 +2158,8 @@ _it_separ) ate (_ @t
|
||||
e (Cical 'E
|
||||
e (CiuB i:
|
||||
&) e (_
|
||||
aoiC) e (_ @ // Irish, e.g. 'Aoife' /i:fe/
|
||||
aoiCC) e (_ @ // Irish, e.g. 'Saoirse' /se@S@/
|
||||
acB) e (_ %I
|
||||
XC) e (_N i:
|
||||
vert) e (b I
|
||||
@@ -2377,7 +2387,9 @@ _it_separ) ate (_ @t
|
||||
@x) ed (_S2vi d#
|
||||
y) ed (_S2v d#
|
||||
debut) ed (_S2 d#
|
||||
edly (_S4m I#dl%i
|
||||
edly (_S3m I#dl%i
|
||||
nt) edly (_S4m I#dl%i
|
||||
tur) edly (_S3v d#l%i
|
||||
c) ed (e_ 'i:d
|
||||
p) ed (e_ i:d
|
||||
p) edal Ed@L
|
||||
@@ -2567,6 +2579,8 @@ _it_separ) ate (_ @t
|
||||
en (core 0n
|
||||
&) ency (_ @ns%i
|
||||
ency (cli %EnsI
|
||||
_) en (dg@ %En
|
||||
_) en (dp@ %En
|
||||
k) en (d_ En
|
||||
s) en (d_ En
|
||||
t) en (d_ En
|
||||
@@ -2771,7 +2785,7 @@ _it_separ) ate (_ @t
|
||||
exp) eri (en i@rI2
|
||||
XC) er 3:
|
||||
th) er (@ 3:
|
||||
h) er (@ %3
|
||||
h) er (nan %3
|
||||
X) er (A E#r
|
||||
_h) eretical I#rEtIk@L
|
||||
_qu) er 3:
|
||||
@@ -2890,6 +2904,7 @@ _it_separ) ate (_ @t
|
||||
&z) es (_S2 %I#z
|
||||
&C) es (_S1i z
|
||||
xus) es (_S2 %I#z
|
||||
tamus) es (_S2 %I#z // hippopotamuses
|
||||
es (carp I2s
|
||||
es (cape %Es
|
||||
es (capi %Es
|
||||
@@ -3099,7 +3114,7 @@ _it_separ) ate (_ @t
|
||||
&) ford (_S4 f3d
|
||||
&f) ford (_S4 3d
|
||||
for (see f%O@
|
||||
for (ward f'o@ // straightforward
|
||||
for (ward f'O@
|
||||
ft (en f
|
||||
&) ful (_S3i f@L
|
||||
|
||||
@@ -4288,6 +4303,8 @@ multip) ly laI
|
||||
_) metall (ic m@tal
|
||||
metabo m@t'ab0
|
||||
_) meta (llu m%Eta
|
||||
mh (ao w // Irish, e.g. 'mhaol' /weIl/
|
||||
aoi) mh (e v // Irish, e.g. 'Caoimhe' /ki:v@/
|
||||
&) mobile m@bi:l
|
||||
_) mocha moUk@
|
||||
mono (ga m@n'0
|
||||
@@ -4299,6 +4316,7 @@ multip) ly laI
|
||||
&) mouth (_ m@T
|
||||
&) mouth (_$w_alt1 maUT
|
||||
_) multi mVlti
|
||||
_) multi (pl m,VltI
|
||||
_) multi (@@P5 m,VltI
|
||||
|
||||
.group mi
|
||||
@@ -5622,6 +5640,7 @@ multip) ly laI
|
||||
|
||||
.group re
|
||||
_) re (C@ rI#
|
||||
_) re (collec rE
|
||||
_) reflex ri:flE2ks
|
||||
_) reflexive rI#fl'EksIv
|
||||
&Ct) red (_ @d
|
||||
@@ -5847,6 +5866,10 @@ multip) ly laI
|
||||
Co) s (Er z
|
||||
Co) s (En z
|
||||
e) s (d z
|
||||
aoi) s (e S // Irish, e.g. 'Laoise'
|
||||
aoi) seach S@x // Irish, e.g. 'Taoiseach'
|
||||
aoi) sigh Si // Irish, e.g. 'Taoisigh'
|
||||
aoir) s (e S // Irish, e.g. 'Saoirse'
|
||||
_) se (clu sI#
|
||||
secur sI#kjU@
|
||||
_) se (duc sI#
|
||||
@@ -5861,6 +5884,7 @@ multip) ly laI
|
||||
@) s (head_ s
|
||||
@) s (hill_ s
|
||||
@) s (hous s
|
||||
@) s (hors s
|
||||
_) she' %Si:
|
||||
A) sh (A_ =S
|
||||
&) ship (_S4 SIp
|
||||
@@ -5878,6 +5902,7 @@ multip) ly laI
|
||||
&) s (ic_ z
|
||||
n) s (ic_ s
|
||||
ss (ic s
|
||||
mu) s (e z
|
||||
mu) s (ic z
|
||||
ea) s (ie z
|
||||
ea) s (il z
|
||||
@@ -6082,6 +6107,8 @@ multip) ly laI
|
||||
th (ill th
|
||||
gh) th (A th
|
||||
ee) thing DI2N
|
||||
soo) th D
|
||||
soo) th (say T
|
||||
the (_ D
|
||||
&) th (L03_ =T
|
||||
ou) thed (_ Dd
|
||||
@@ -6411,6 +6438,7 @@ contin) u ju:
|
||||
j) ui (c u:
|
||||
uir (_ jU@
|
||||
n) ui (s ju:
|
||||
?3 n) ui (s u:
|
||||
r) uis (A u:z
|
||||
r) ui (t u:
|
||||
gr) ui (t u:I2
|
||||
|
||||
+4
-4
@@ -1,5 +1,5 @@
|
||||
// * Farsi Language fa (or Parsi or Persian) fa_list Version 3.133
|
||||
// * This file writen by Shadyar Khodayari and Ehsan Esmaili who has managed collecting exceptional words. 05-10-2017
|
||||
// * Farsi Language fa (or Parsi or Persian) fa_list Version 3.134
|
||||
// * This file writen by Shadyar Khodayari and Ehsan Esmaili who has managed collecting exceptional words. 06-24-2017
|
||||
//*********
|
||||
// * This program is free software; you can redistribute it and/or modify *
|
||||
// * it under the terms of the GNU General Public License as published by *
|
||||
@@ -554,6 +554,7 @@ _) paRAntezbaste:
|
||||
آموخت Amuxt
|
||||
آموزد Amuzad
|
||||
آموزش AmuzeS
|
||||
آمپر AmpeR
|
||||
آمپرمتر AmpeRmetR
|
||||
آمپلیفایر AmpelifAjeR
|
||||
آمپیریسم AmpiRism
|
||||
@@ -5055,7 +5056,6 @@ _) paRAntezbaste:
|
||||
درایه deRAje
|
||||
درایو deRAjv
|
||||
درایور deRAjveR
|
||||
درباره daR'bAReje:
|
||||
دربازکن daRbAzkon
|
||||
دربدر daRbedaR
|
||||
دربندکشیده daRbandkeSide
|
||||
@@ -6809,6 +6809,7 @@ _) paRAntezbaste:
|
||||
شدیدا Sadidan
|
||||
شدیداللحن Sadidollahn
|
||||
شدیم Sodim
|
||||
شراادی SA:_d:jA:_R
|
||||
شرافت SeRAfat
|
||||
شراپنل SeRApnel
|
||||
شراکت SeRAkat
|
||||
@@ -6816,7 +6817,6 @@ _) paRAntezbaste:
|
||||
شربت SaRbat
|
||||
شرت 'SoRt
|
||||
شرتکات SoRtkAt
|
||||
شراادی SA:_d:jA:_R
|
||||
شرشر SeRSeR
|
||||
شرطه SoRte:
|
||||
شرعا SaR?an
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
// * Farsi Language fa (or Parsi or Persian) fa_rules Version 3.133
|
||||
// * This file writen by Shadyar Khodayari 05-10-2017
|
||||
// * Farsi Language fa (or Parsi or Persian) fa_rules Version 3.134
|
||||
// * This file writen by Shadyar Khodayari 06-24-2017
|
||||
//*********
|
||||
// * This program is free software; you can redistribute it and/or modify *
|
||||
// * it under the terms of the GNU General Public License as published by *
|
||||
@@ -4843,7 +4843,7 @@ L09L04) السّادات (_Sm8 ossAdAt
|
||||
L09L09L09L09) م (L03L09L09L09_ ma
|
||||
|
||||
// Prefixes م
|
||||
_) م (L03L09L03_$noprefixP1@ ma
|
||||
_) م (L03L04L03_$noprefixP1@ ma
|
||||
_) می (L03L09+$noprefixP2@ mi
|
||||
_) می (آL09L09$noprefixP2@ mi
|
||||
_) می (وL09L09$noprefixP2@ mi
|
||||
|
||||
+27
-9
@@ -29,7 +29,7 @@ n &n
|
||||
o o:
|
||||
ö Y:
|
||||
p pe:
|
||||
q ku:
|
||||
q qu:
|
||||
r &r
|
||||
s &s
|
||||
t te:
|
||||
@@ -370,22 +370,40 @@ yogurt jogurt:i
|
||||
|
||||
// Abbreviations
|
||||
|
||||
(à la) 'ala $dot // jonka mukaan
|
||||
abc $abbrev
|
||||
adhd $abbrev
|
||||
os $abbrev $dot
|
||||
ad $abbrev $dot // anno Domini, Herran vuonna
|
||||
atk $abbrev
|
||||
ay $abbrev // ammaatiyhdistys
|
||||
ca $abbrev $dot // circa
|
||||
dna $abbrev // elinkeinoelämän keskusliitto
|
||||
eg esimerkiksi $dot // exempli gratia, esimerkiksi
|
||||
em $abbrev $dot
|
||||
ek $abbrev // elinkeinoelämän keskusliitto
|
||||
ekr $abbrev $dot // ennen Kristuksen syntymää
|
||||
etc et_setera $dot // et cetera, ym., jne.
|
||||
ym ynn&_mu:ta $dot // ynnä muuta (etc)
|
||||
eg esimerkiksi $dot // exempli gratia, esimerkiksi
|
||||
eu $abbrev
|
||||
hiv $abbrev
|
||||
ict $abbrev
|
||||
isbn $abbrev
|
||||
it $abbrev
|
||||
jne $abbrev $dot // ja niin edelleen
|
||||
(à la) 'ala $dot // jonka mukaan
|
||||
ky $abbrev $dot // kommandiittiyhtiö
|
||||
oy $abbrev // osakeyhtiö
|
||||
nro numero $dot
|
||||
nvda $abbrev
|
||||
os $abbrev $dot
|
||||
oy $abbrev // osakeyhtiö
|
||||
ry $abbrev $dot // rekisteröity yhdistys
|
||||
usb $abbrev
|
||||
utf $abbrev
|
||||
ym ynn&_mu:ta $dot // ynnä muuta (etc)
|
||||
|
||||
|
||||
|
||||
|
||||
// foreign words
|
||||
blindsquare _^_EN
|
||||
bluetooth _^_EN
|
||||
daisy _^_EN
|
||||
facebook _^_EN
|
||||
talkback _^_EN
|
||||
voiceover _^_EN
|
||||
youtube _^_EN
|
||||
|
||||
+9
-6
@@ -165,13 +165,16 @@
|
||||
|
||||
|
||||
.group q
|
||||
q k
|
||||
qq k:
|
||||
q q
|
||||
qq q:
|
||||
|
||||
|
||||
.group r
|
||||
r r
|
||||
|
||||
CA) rg (_ Rj // follow swedish pronunciation
|
||||
_CA) rg (C Rj // follow swedish pronunciation
|
||||
ruoan ru:an // Pronounce ruoan as ruuan. Include all inflections and compound words.
|
||||
// eg. ruoanlaitto, ruoankin, arkiruoan
|
||||
|
||||
.group s
|
||||
s s
|
||||
@@ -197,9 +200,9 @@
|
||||
.group u
|
||||
u u
|
||||
uu u:
|
||||
ui wi
|
||||
_) ui ui
|
||||
_j) ui ui // [ui] sounds better than [wi] when stressed. Especially <jui> at the beginning of the word sounds bad if pronounced [jwi]
|
||||
ui ui
|
||||
// _) ui ui
|
||||
// _j) ui ui // [ui] sounds better than [wi] when stressed. Especially <jui> at the beginning of the word sounds bad if pronounced [jwi]
|
||||
uii u|i:
|
||||
uo uo
|
||||
uoo u|o:
|
||||
|
||||
+16
-8
@@ -1,6 +1,6 @@
|
||||
|
||||
// This file is UTF-8 encoded
|
||||
// Updated 2017 april 28 by Christian Leo M, <llajta2012@gmail.com>
|
||||
// Updated 2017 october 3 by Christian Leo M, <llajta2012@gmail.com>
|
||||
|
||||
// $alt change [e] or [o] in the stressed syllable to [E] or [O]
|
||||
// $alt2 change [E] or [O] in the stressed syllable to [e] or [o]
|
||||
@@ -102,6 +102,10 @@ _< min'oRe||d'I
|
||||
_> madZ:'oRe||d'I
|
||||
_〈 ap'E@-*ta||,angol'aRe
|
||||
_〉 kj'uza||,angol'aRe
|
||||
_〈 ap'E@-*ta||angol'ata
|
||||
_〉 kj'uza||angol'ata
|
||||
_【 ap'E@-*ta||lentikol'aRe
|
||||
_】 kj'uza||lentikol'aRe
|
||||
* aste@-*'isko $max3
|
||||
$ d'Ol:aRI
|
||||
% pe@-*tS'ENto $max3
|
||||
@@ -111,7 +115,6 @@ $ d'Ol:aRI
|
||||
\ kont@-*ob'a:R*a $max3
|
||||
_| b'aR*a||ve@-*tik'ale
|
||||
& 'a/nd
|
||||
© k'O:pi||raIt
|
||||
# kantSellet:o
|
||||
@ ki'otS:ola
|
||||
~ tilde
|
||||
@@ -137,7 +140,6 @@ _‡ k@-*'otSe||lat'ina||d'Op:ia
|
||||
_′ p@-*'imi
|
||||
_″ d'Op:io||'apitSe
|
||||
_‴ t@-*'iplo||'apitSe
|
||||
_‼ esklamatsi'One
|
||||
§ setsi'One
|
||||
¶ pa*'ag@-*afo
|
||||
_‐ legat'u:Ra
|
||||
@@ -150,6 +152,8 @@ _‑ t@-*at:,ino||duni'one
|
||||
ʔ glotalst'Op
|
||||
ɡ dZ'i||vel'aRe||ok:luz'iva // U+0261
|
||||
ɣ g'am:a||min'uskola // U+0263 voiced velar fricative
|
||||
ß 'esse||ak'uta
|
||||
ɑ 'alfa
|
||||
|
||||
_‣ punt'ato
|
||||
◦ punt'ato
|
||||
@@ -159,8 +163,6 @@ _‣ punt'ato
|
||||
↓ f@-*'etS:a||_dZ'u
|
||||
♭ bem'Ol:e
|
||||
♯ dI'ezis
|
||||
♥ 'asso||di||kw'ORI
|
||||
❓ p'unto||inteR*ogat'ivo
|
||||
_‧ sepaRat'oRe/
|
||||
|
||||
∞ infin'Ito
|
||||
@@ -787,6 +789,7 @@ black bl'E:k
|
||||
blackout bl'Ek'aUt
|
||||
blind bl'aInd $onlys
|
||||
blues bl'u:z
|
||||
bluff bl'ef: $only
|
||||
boiler $1
|
||||
bonjour b,O:_Z'u:r
|
||||
brioche b@-*I'oS
|
||||
@@ -1020,7 +1023,7 @@ logging l'Oging
|
||||
lord $alt $only
|
||||
love l'O:v $onlys
|
||||
lover $1
|
||||
manche m'a:nS $only
|
||||
manche m'a:nS $onlys
|
||||
my _^_EN
|
||||
myspace m'aI||sp'Eis
|
||||
machine maS'in $onlys
|
||||
@@ -2381,6 +2384,7 @@ ivano $2
|
||||
jace _^_en $only
|
||||
jack dZ'E:k
|
||||
jackson _^_EN
|
||||
jefferson $1
|
||||
jacopo j'a:kopo
|
||||
james _^_EN
|
||||
jane _^_EN
|
||||
@@ -2477,6 +2481,7 @@ paul p'O:l $only
|
||||
peggy p'Eg:I
|
||||
pericle $1
|
||||
peter $1 $onlys
|
||||
peterson p'Ete@-*s,on
|
||||
pettarin $3 $only
|
||||
peugeot p,EZ'o
|
||||
piquet pik'E $only
|
||||
@@ -3206,6 +3211,7 @@ distino $1
|
||||
distintesi $2
|
||||
disturbano $2
|
||||
disturbino $2
|
||||
dissuadere dissuad'eRe
|
||||
divaghino $2
|
||||
divaricano $2
|
||||
diventino $2
|
||||
@@ -4330,6 +4336,7 @@ situino $1
|
||||
sloggiano $1
|
||||
smagnetizzino $3
|
||||
smascher $1
|
||||
smascherano $1
|
||||
smercino $1
|
||||
sniffano $1
|
||||
snodano $1
|
||||
@@ -4673,6 +4680,8 @@ zuccherano $1
|
||||
(quando capita) kw'ando||k'apita
|
||||
(se capita) se||k'a:pita
|
||||
(me capita) me||k'apita
|
||||
(cosa capita) k'oza||k'a:pita
|
||||
(come capita) k'ome||k'a:pita
|
||||
(capitano tutte) k'apitano||t'ut:e
|
||||
(che capitano) ke||k'apitano
|
||||
(quando capitano) kw'ando||k'a:pitano
|
||||
@@ -4775,6 +4784,7 @@ espellerl $2
|
||||
esprimiti $2
|
||||
evolverci $2
|
||||
evolversi $2
|
||||
facendomici fatS'endom,itSi
|
||||
fammel $1
|
||||
fattel f'at:el
|
||||
fattoci $1
|
||||
@@ -4825,7 +4835,6 @@ orientaci $3
|
||||
pensaci $1
|
||||
perdonatel $3
|
||||
permettigli $2
|
||||
pervenutaci $3
|
||||
pizzical $1
|
||||
pizzicami $1
|
||||
portala $1
|
||||
@@ -4841,7 +4850,6 @@ pulisciti $2
|
||||
redigerl $2
|
||||
raddrizzarl @-*ad:@-*its2:'a@-*l
|
||||
rafforzal $2
|
||||
regalaci $2
|
||||
regalati $2 $atstart
|
||||
regalavi $3
|
||||
reinseritasi $4
|
||||
|
||||
@@ -81,6 +81,7 @@ afonie afon'i;e
|
||||
agadez $3
|
||||
agapit $2
|
||||
agave $1
|
||||
agendine $3
|
||||
agenzia $3
|
||||
agenzie adZents'ie
|
||||
agerol $2
|
||||
@@ -137,6 +138,7 @@ allodol $2
|
||||
alloggi $alt
|
||||
allora al:'oRa
|
||||
alluce 'al:utSe
|
||||
alluci $1
|
||||
almen $alt2
|
||||
alope $1
|
||||
alopecia alopetS'i:a
|
||||
|
||||
+18
-4
@@ -1,7 +1,7 @@
|
||||
|
||||
// Italian translation rules
|
||||
// This file is UTF-8 encoded
|
||||
// Last update: 2017 march 31 by Christian Leo Mameli <llajta2012@gmail.com>
|
||||
// Last update: 2017 october 3 by Christian Leo Mameli <llajta2012@gmail.com>
|
||||
// letter groups
|
||||
// A any vowel
|
||||
// C any consonant
|
||||
@@ -28,7 +28,7 @@
|
||||
au a|%U
|
||||
@C) a (_S1q a/ // lookup it_list without suffix
|
||||
@i) a (_S1q a // lookup it_list without suffix
|
||||
C) a (cY_ 'a
|
||||
// C) a (cY_ 'a
|
||||
@) a (co_ =a
|
||||
@) a (ca_ =a
|
||||
@) a (che_ =a/
|
||||
@@ -37,14 +37,15 @@
|
||||
@) a (bile_ 'a
|
||||
@) a (ggine_ 'a
|
||||
_) ae (r aE
|
||||
avano (_ 'avano
|
||||
avano (_ 'avano // verbs
|
||||
a (tterA_ 'a
|
||||
_) all' (P4t all
|
||||
_) anch' (P5t ank
|
||||
@) amo (L04_ 'amo // Pron.s verbs
|
||||
Ci) amo (L04_ 'amo
|
||||
@) ander (L04_ 'andE@-*
|
||||
ate (L04_+ 'ate
|
||||
ate (L04_+ 'ate
|
||||
abb) assa (L07_ 'assa
|
||||
_L04Z) auguri (_ 'awguRI
|
||||
astano (_ 'astano // verbs
|
||||
|
||||
@@ -59,6 +60,7 @@
|
||||
bbano (_ =b:ano // verbs
|
||||
bacia (L07_ b'atSa
|
||||
_) bagna (L07_ b'an^a
|
||||
a) bbraccia (L07_ b:@-*'atS:a
|
||||
|
||||
.group c
|
||||
c k
|
||||
@@ -90,6 +92,7 @@
|
||||
in) cer (L04_ =tSe@-*
|
||||
cuocer (L04_ kU'OtSe@-*
|
||||
compra (L07_ k'omp@-*a
|
||||
_L04Z) capite (_ kap'ite/
|
||||
_L04Z) capit (A_ k'a:p,it
|
||||
_L04Z) capit (ano_ k'a:p,it
|
||||
correr (L04_ k'o:R*eR
|
||||
@@ -208,6 +211,8 @@
|
||||
fob (A_ =fob
|
||||
farma (ci_ f'a@-*ma
|
||||
ferma (L07_ f'e@-*ma/
|
||||
_) fatt (AL04_ f'at:
|
||||
_ri) fatt (AL04_ f'at:
|
||||
|
||||
.group g
|
||||
g g
|
||||
@@ -504,6 +509,7 @@
|
||||
qui (A kwj
|
||||
_) quell' (P6t kwEll
|
||||
_) quest' (P6t kwest
|
||||
_) quant' (P6t kwant
|
||||
|
||||
.group r
|
||||
r @-*
|
||||
@@ -522,6 +528,7 @@
|
||||
_) ripeter (L04_ @-*ip'E:te@-*
|
||||
_) romper (L04_ @-*'ompe@-*
|
||||
ca) re (zzaL07_ R'e
|
||||
_) regala (tAL04_ @-*egal'a
|
||||
C) rai (_ @-*'a:I
|
||||
A) rai (_ R'a:I
|
||||
rrai (_ R*'a:I
|
||||
@@ -563,6 +570,8 @@
|
||||
_) segna (L05_ s'en^a
|
||||
in) segna (L07_ s'En^a
|
||||
_)segnala (L07_ sen^'ala
|
||||
specifica (L07_ spetS'ifika
|
||||
stringi (L04_ st@-*'indZi/
|
||||
A) scano (_ =skano // verbs
|
||||
sciano (_ =Sano
|
||||
A) schiano (_ =skiano
|
||||
@@ -596,6 +605,7 @@
|
||||
au) tentica (L07_ t'ENtIka/
|
||||
a) ttiva (L07_ t:'iva
|
||||
taglia (L07_ t'al^a
|
||||
tira (L07_ t'iRa
|
||||
L02) tre (_ t@-*'e
|
||||
_) tutt' (P5t tut:
|
||||
|
||||
@@ -619,6 +629,7 @@
|
||||
ustano (_ 'u:stano
|
||||
C) uo (tano_ U'O
|
||||
uomini (_ w2'Omini
|
||||
fanc) u (lA_ 'u:
|
||||
|
||||
.group v
|
||||
v v
|
||||
@@ -636,6 +647,8 @@
|
||||
_) vota (L07_ v'Ota
|
||||
s) veglia (L07_ v'el^a
|
||||
volta (L07_ v'Olta
|
||||
venut (AL04_ ven'ut
|
||||
_) v' (P2t v
|
||||
|
||||
.group w
|
||||
w w2
|
||||
@@ -696,6 +709,7 @@
|
||||
man) zie (_ ts'i;e
|
||||
me) zz dz:
|
||||
amma) zziamo (L04_ _tsi'a:mo
|
||||
sbara) zz (arL04_ ts:
|
||||
|
||||
.group
|
||||
|
||||
|
||||
+4
-2
@@ -926,7 +926,8 @@ $textmode
|
||||
😖 შეცბუნებული სახე // [1F616]
|
||||
😗 კოცნის გამომხატველი სახე // [1F617]
|
||||
😘 სახე, რომელიც კოცნას აგზავნის // [1F618]
|
||||
😙 კოცნის გამომხატველი სახე მომღიმარე თვალებით // [1F619]
|
||||
😗 kissing face // [1F617]
|
||||
//😙 კოცნის გამომხატველი სახე მომღიმარე თვალებით // [1F619] TODO: This breaks speaking "7".
|
||||
😚 კოცნის გამომხატველი სახე დახუჭული თვალებით // [1F61A]
|
||||
😛 სახე გამოყოფილი ენით // [1F61B]
|
||||
😜 სახე გამოყოფილი ენითა და ჩაკრული თვალით // [1F61C]
|
||||
@@ -938,7 +939,8 @@ $textmode
|
||||
😢 მტირალა სახე // [1F622]
|
||||
😣 შეუპოვარი სახე // [1F623]
|
||||
😤 სახე ცხვირიდან გამომავალი ორთქლით // [1F624]
|
||||
😥 იმედგაცრუებული, მაგრამ შვების გამომხატველი სახე // [1F625]
|
||||
😥 disappointed but relieved face // [1F625]
|
||||
//😥 იმედგაცრუებული, მაგრამ შვების გამომხატველი სახე // [1F625] TODO: This breaks speaking "3".
|
||||
😦 შეჭმუხნილი სახე ღია პირით // [1F626]
|
||||
😧 ტანჯული სახე // [1F627]
|
||||
😨 შეშინებული სახე // [1F628]
|
||||
|
||||
@@ -423,6 +423,7 @@ tikpat $2
|
||||
tikvien $u2+
|
||||
turpat $u2+
|
||||
turpretī $u2
|
||||
uzreiz $2
|
||||
vienalga $2
|
||||
vismaz $2
|
||||
|
||||
|
||||
+31
-11
@@ -38,6 +38,7 @@
|
||||
.L17 ai ais am ā ām ās ie iem o os // suffixes of certain adjectives finishing with ..ējais
|
||||
.L18 am āk i u ot ēt os // suffixes of adverbs (apstākļa vārdi)
|
||||
|
||||
.L10 ~ at ie iz jā jā jāat jāie jāiz jāno jāsa ne no no pa pār pie pie sa vis // optional verb prefixes
|
||||
.L20 ~ ne // optional negation prefix
|
||||
|
||||
// +---------------------------+
|
||||
@@ -62,7 +63,6 @@
|
||||
// +---------------------------+
|
||||
// | Pronunciation of o |
|
||||
// +---------------------------+
|
||||
.L30 ō ȯ // uo pre/post fixes. If facultative writing is used, o is spelled as uo
|
||||
|
||||
// Default rules for o with succeeding consonants
|
||||
.L40 č ģ ķ ļ ņ ŗ š ž // uo indicators — o is spelled as uo in words with Latvian soft consonants
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
// wide e ------------------------------------------------------------------------ //
|
||||
// widening consonants follow
|
||||
e (L25 E
|
||||
e (L25< E
|
||||
e (L25L25 E
|
||||
// widening vowels follow
|
||||
e (L25L24+ E
|
||||
@@ -253,6 +253,7 @@
|
||||
_L20) e (sat_+ _!e // esat
|
||||
_L20) e (si_ _!e // esi
|
||||
_L20) e (smu_ _!e // esmu
|
||||
_L20) e (sot_ _!e // esot
|
||||
_m) e (dūzL04_ e
|
||||
_m) e (kL04_ e // Meka
|
||||
m) e (lL88 E
|
||||
@@ -261,6 +262,7 @@
|
||||
_n) ere (tL04_ ERE // Nereta
|
||||
n) e (rv E
|
||||
p) e (rs e
|
||||
pr) e (cL52z e
|
||||
pr) e (L71L05_ e // prece
|
||||
_pr) e (t e
|
||||
pr) etē (@ ete:
|
||||
@@ -287,6 +289,7 @@
|
||||
t) ermo eRmo
|
||||
t) e (st e
|
||||
_t) e (v_ e // tev
|
||||
_t) e (vi_ e // tevi
|
||||
_v) e (lgL04_ e // Velga
|
||||
_v) e (ltL04_ e // Velta
|
||||
_v) e (ntL04_ E // Venta
|
||||
@@ -337,7 +340,7 @@
|
||||
|
||||
// wide ē --------------------------------------------------------------------------- //
|
||||
// widening consonants follow
|
||||
ē (L25 E:
|
||||
ē (L25< E:
|
||||
ē (L25L25 E:
|
||||
// widening vowels follow
|
||||
ē (L25L24+ E:
|
||||
@@ -372,6 +375,7 @@
|
||||
gr) ē (kL01_ E:
|
||||
izp) ē (t e:
|
||||
_kāp) ē (c_ e: // kāpēc
|
||||
_l) ē (L83+ e: // lēst
|
||||
m) ēne (L83 e:ne
|
||||
m) ē (rķ e:
|
||||
_m) ē (s_ e: // mēs
|
||||
@@ -425,7 +429,6 @@
|
||||
ī i:
|
||||
|
||||
.group j
|
||||
// A) j (@ :j
|
||||
j j
|
||||
_) jebk j%ebk // stress on 2nd syllable
|
||||
|
||||
@@ -483,11 +486,6 @@
|
||||
o (L41+ o // o indicators after
|
||||
o (JL41+ o
|
||||
|
||||
L30J) o uo // uo indicators before (facultative writing)
|
||||
L30) o (+ uo
|
||||
o (JL30 uo // uo indicators after (facultative writing)
|
||||
o (L30+ uo
|
||||
|
||||
o uo // words with Latvian roots are more common
|
||||
o (_++ uo // common ending for Latvian words
|
||||
o (L40 uo // usually uo before soft (Latvian) consonants
|
||||
@@ -541,6 +539,7 @@ L46L45L45) o (<< uo
|
||||
arist) o o
|
||||
ater) o o:
|
||||
_aut) o (< o
|
||||
bals) o uo
|
||||
bandr) o o:
|
||||
_bar) o (L12_ uo
|
||||
bar) o (L65 uo // barot
|
||||
@@ -575,12 +574,12 @@ L46L45L45) o (<< uo
|
||||
dinam) o o:
|
||||
disp) o o
|
||||
eg) o o>
|
||||
eir) o o
|
||||
_ek) o o
|
||||
eks) o o
|
||||
ekspl) o o
|
||||
ekvin) o o
|
||||
elektr) o o:
|
||||
ez) o o>
|
||||
energ) o o:
|
||||
enL87) o o
|
||||
ent) o (@ o
|
||||
@@ -588,6 +587,7 @@ L46L45L45) o (<< uo
|
||||
epr) o o
|
||||
ept) o (@ o
|
||||
eur) o o
|
||||
ez) o o>
|
||||
gen) o o
|
||||
get) o o
|
||||
glik) o o
|
||||
@@ -692,6 +692,7 @@ L46L45L45) o (<< uo
|
||||
pomp) o o:
|
||||
por) o o
|
||||
pr) o (L90 o
|
||||
_pr) o o
|
||||
prop) o o
|
||||
pseid) o o
|
||||
raps) o o:
|
||||
@@ -720,6 +721,7 @@ L46L45L45) o (<< uo
|
||||
sol) o o:
|
||||
son) o o
|
||||
spid) o o
|
||||
sp) o (L77++ uo
|
||||
sport) o uo
|
||||
sten) o (L65 uo
|
||||
_sten) o o
|
||||
@@ -763,6 +765,8 @@ L46L45L45) o (<< uo
|
||||
gl) ob ob
|
||||
g) ob (e ob
|
||||
k) ob ob
|
||||
l) ob (ē ob
|
||||
l) oboto (m oboto
|
||||
m) ob ob
|
||||
_) ob (amL01_ ob // Obama
|
||||
ob (je ob
|
||||
@@ -806,6 +810,7 @@ L46L45L45) o (<< uo
|
||||
m) od (u od
|
||||
m) od (uš uod
|
||||
n) od (L05_ o:d // ..node
|
||||
n) od uod
|
||||
_) od (ek od
|
||||
od (erL51 uod
|
||||
_) od (esL04_ od // Odesa
|
||||
@@ -878,6 +883,7 @@ L46L45L45) o (<< uo
|
||||
_d) ok (L01_ ok // doks
|
||||
d) ok (u ok
|
||||
fil) okok okok
|
||||
gl) ok (sīn ok
|
||||
g) ok ok
|
||||
_k) okako (lL04_ okako: // kokakola
|
||||
k) ok (L01 uo`k // koks with short uo, because of ambiguity
|
||||
@@ -1063,6 +1069,7 @@ L46L45L45) o (<< uo
|
||||
pr) om om
|
||||
_pr) om (_ uom // prom
|
||||
pt) om (L01_ o:m // ..ptoms
|
||||
pt) om o>m
|
||||
rd) om (L01_ o:m
|
||||
r) om (b om
|
||||
_r) om (L04_ uom // Roma
|
||||
@@ -1217,6 +1224,7 @@ L46L45L45) o (<< uo
|
||||
m) op op
|
||||
net) op (_ uop
|
||||
n) op (er+++ uop
|
||||
n) opo (st uopuo
|
||||
op (c op
|
||||
op (en op
|
||||
_) op (erL04_++++ o:p // opera
|
||||
@@ -1320,6 +1328,7 @@ L46L45L45) o (<< uo
|
||||
or (ien oR
|
||||
_) origo (_ oRigo: // Origo
|
||||
or (iģ oR
|
||||
or (kā oR
|
||||
or (ķest oR
|
||||
or (L01_+ o:R // ..ors
|
||||
_) or (L02_+ uoR // ore
|
||||
@@ -1387,6 +1396,7 @@ L46L45L45) o (<< uo
|
||||
p) os (tC@ os
|
||||
p) os (te os
|
||||
p) os (ter os
|
||||
p) os (tind os
|
||||
p) os (tī uos
|
||||
p) os (tL01 uos
|
||||
p) os (tL55m os
|
||||
@@ -1402,17 +1412,22 @@ L46L45L45) o (<< uo
|
||||
š) os (ej os
|
||||
_t) os (te os
|
||||
_t) os (tL01_ os // tosts
|
||||
v) osto (k osto
|
||||
_z) os (L06_ uos // zoss
|
||||
|
||||
.group ot
|
||||
|
||||
an) ot ot
|
||||
ast) ot uot
|
||||
av) ot uot
|
||||
_bal) ot (ē ot
|
||||
bankr) ot ot
|
||||
b) ot (ān ot
|
||||
d) ot (āc ot
|
||||
d) ot (ē ot
|
||||
er) ot (iL67 o:t
|
||||
er) ot (is o:t
|
||||
_er) ot (L01_ ot // Erots
|
||||
_ez) ot ot
|
||||
f) oto (_ oto:
|
||||
g) ot (ik o:t
|
||||
@@ -1423,6 +1438,7 @@ L46L45L45) o (<< uo
|
||||
k) ot (an ot
|
||||
k) ot (L51 ot
|
||||
k) ot (l ot
|
||||
_L10pr) ot (L13_ uot // (ne|sa..)prot(i|u)
|
||||
lin) ot (ip ot
|
||||
_l) ot (iņL04 ot // Lotiņa
|
||||
l) ot (L05_ ot // ..lote
|
||||
@@ -1433,22 +1449,25 @@ L46L45L45) o (<< uo
|
||||
nepr) ot uot
|
||||
_n) ot (L04_ ot // nota
|
||||
n) ot (L50r ot
|
||||
ot (āj uot
|
||||
ot (k ot
|
||||
m) otō oto:
|
||||
_) oto (C< oto
|
||||
pil) ot ot
|
||||
_p) ot (ašL04 ot // potaša
|
||||
p) ot (eL68 ot
|
||||
pr) ot (am uot
|
||||
pr) ot (e ot
|
||||
pr) ot (o ot
|
||||
pr) oto (š uotuo // protoš..
|
||||
pr) otot (ip otot
|
||||
pr) oto (t uotuo // ..protot
|
||||
pr) ot (u_ uot
|
||||
publisk) ot uot
|
||||
r) ot (āc ot
|
||||
r) ot (b ot
|
||||
r) ot (er ot
|
||||
r) ot (ē ot
|
||||
r) ot (kaL77 o`t
|
||||
sab) ot ot
|
||||
sk) ot (L01_ ot
|
||||
sl) ot (L04_ uot // slota
|
||||
@@ -1566,6 +1585,7 @@ L46L45L45) o (<< uo
|
||||
v v
|
||||
// unstressed if starts as vis.. prefix
|
||||
// except for words where vis.. is part of root
|
||||
vecvec vetsvets
|
||||
_) vi (sād v'i // visād
|
||||
_) vi (sēd v'i // visēd
|
||||
_) vi (skijL01_ v'i // viskijs
|
||||
|
||||
+1678
File diff suppressed because it is too large
Load Diff
+1678
File diff suppressed because it is too large
Load Diff
+1678
File diff suppressed because it is too large
Load Diff
+1678
File diff suppressed because it is too large
Load Diff
+194
-170
@@ -1,170 +1,194 @@
|
||||
sindhi
|
||||
// This file is UTF8 encoded
|
||||
// Letter Names, Numbers and exceptional pronounciation of Urdu
|
||||
|
||||
|
||||
// The Letter names
|
||||
ا alIf
|
||||
ب be:
|
||||
پ pe:
|
||||
ت te:
|
||||
ٹ te:
|
||||
ث se:
|
||||
ج Ji:m
|
||||
چ ce:
|
||||
ح bar.i:||
|
||||
خ xe:
|
||||
د da:l
|
||||
ڈ da:l
|
||||
ذ za:l
|
||||
ر Re:
|
||||
ڑ r.e:
|
||||
ز ze:
|
||||
ژ Ze:
|
||||
س si:n
|
||||
ش Si:n
|
||||
ص sUa:d
|
||||
ض zUa:d
|
||||
ط tOe:
|
||||
ظ zOe:
|
||||
ع aIn
|
||||
غ QaIn
|
||||
ف fe:
|
||||
ق qa:f
|
||||
ک ka:f
|
||||
گ ga:f
|
||||
ل la:m
|
||||
م mi:m
|
||||
ن nu:n
|
||||
_و va:O
|
||||
ہ he:
|
||||
ں ghUnna
|
||||
ﮨ cho:ti:||he:
|
||||
ھ dO||caSmi:||he:
|
||||
ء hamzah
|
||||
ی c#o:ti:||je:
|
||||
ے bar.i:||je:
|
||||
ئ h'amza
|
||||
ۂ he:h'amza
|
||||
_ؤ va:Oh'amza
|
||||
|
||||
َ z@b@R
|
||||
ِ ze:R
|
||||
ُ pe:S
|
||||
ٰ ,alIfmaqs'u:r,a
|
||||
ّ t,aSd'i:d
|
||||
ً d'o:zab'ar
|
||||
|
||||
|
||||
// The numbers
|
||||
_0 bu're
|
||||
_1 hi'ku
|
||||
_2 ba:
|
||||
_3 te
|
||||
_4 ca:r
|
||||
_5 pan'ja:
|
||||
_6 ch'aha:
|
||||
_7 sa'ta:
|
||||
_8 ath'a:
|
||||
_9 na'va:
|
||||
_10 da'ha:
|
||||
_11 jara:ha
|
||||
_12 bara:ha
|
||||
_13 tera:ha
|
||||
_14 cOda:ha
|
||||
_15 pa'dra:ha
|
||||
_16 sora:ha
|
||||
_17 satira:ha
|
||||
_18 ari'rahan
|
||||
_19 una'via
|
||||
_20 viha:
|
||||
_21 ek'kie
|
||||
_22 bavi'a
|
||||
_23 tevi'a
|
||||
_24 cO'via
|
||||
_25 panc'via
|
||||
_26 cha'via
|
||||
_27 sat'avia
|
||||
_28 at:avia
|
||||
_29 una:tie
|
||||
_30 ti'ha
|
||||
_31 ek'atiha
|
||||
_32 battiha
|
||||
_33 tettiha
|
||||
_34 cO'tiha
|
||||
_35 panc:tiha
|
||||
_36 chat'tiha
|
||||
_37 sat'tatiha
|
||||
_38 att:atiha
|
||||
_39 unuta:vie
|
||||
_40 ca'li:
|
||||
_41 ek'eta:rie
|
||||
_42 ba:ite'rie
|
||||
_43 te'ta:rie
|
||||
_44 cOt'erie
|
||||
_45 panci'terie
|
||||
_46 cai'terieh
|
||||
_47 sati'terie
|
||||
_48 ati'terie
|
||||
_49 urur'ja
|
||||
_50 pan'ja
|
||||
_51 ekvan'ja
|
||||
_52 bavan'ja
|
||||
_53 tevan'ja
|
||||
_54 cOvanja
|
||||
_55 pa:van'ja
|
||||
_56 ca'vaja:
|
||||
_57 sat:ur'ja
|
||||
_58 at:ur'ja
|
||||
_59 una:hat:i
|
||||
_60 sa:thi
|
||||
_61 eka:thi
|
||||
_62 ba:hathi
|
||||
_63 teha:thi
|
||||
_64 cO'hathi
|
||||
_65 panja'hathi
|
||||
_66 ca:hathi
|
||||
_67 sat'tathi
|
||||
_68 at'thati
|
||||
_69 un'ha't:har
|
||||
_70 sata:ri
|
||||
_71 ek'hat:ar
|
||||
_72 ba'hat'ar
|
||||
_73 te'hat'ar
|
||||
_74 cOhat'ar
|
||||
_75 pan'jat'ar
|
||||
_76 cha'hat'ar
|
||||
_77 sat'ta'tar
|
||||
_78 at:hat'ar
|
||||
_79 un'a:si
|
||||
_80 a:si
|
||||
_81 ek'ea'si
|
||||
_82 bea'si
|
||||
_83 tea'si
|
||||
_84 cO'rasi
|
||||
_85 panc'a:si
|
||||
_86 chhajasi
|
||||
_87 sat'tea:si
|
||||
_88 at:ha:si
|
||||
_89 ur'ra:nave
|
||||
_90 nave
|
||||
_91 ek'ka'navi
|
||||
_92 bea'navi
|
||||
_93 tea'navi
|
||||
_94 cOra:navi
|
||||
_95 panca:navi
|
||||
_96 cha:navi
|
||||
_97 sat'ta:navi
|
||||
_98 at:tha:navi
|
||||
_99 nava:navi
|
||||
_100 sO
|
||||
|
||||
_0M1 haz'a:r
|
||||
_0M2 l'a:kh
|
||||
_0M3 kaR'o:R
|
||||
_0M4 'aRab
|
||||
_0M5 'k#aRab
|
||||
|
||||
_dpt _da:he_
|
||||
|
||||
|
||||
// This file is UTF8 encoded
|
||||
// Letter Names, Numbers and exceptional pronounciation of Sindhi
|
||||
|
||||
// The Letter names
|
||||
ا alIf
|
||||
ب be:
|
||||
ٻ bE
|
||||
ڀ b#e:
|
||||
پ pe:
|
||||
ت te:
|
||||
ٿ t#e:
|
||||
ٽ t.e:
|
||||
ٺ t.#e:
|
||||
ث se:
|
||||
ج Ji:m
|
||||
ڄ Je:
|
||||
جھ J#e:
|
||||
ڃ n^e:
|
||||
چ ce:
|
||||
ڇ c#e:
|
||||
ح vad.i:||he:
|
||||
خ xe:
|
||||
د da:l
|
||||
ڌ d#a:l
|
||||
ڊ d.a:l
|
||||
ڏ d.e:
|
||||
ڍ d.#a:l
|
||||
ذ za:l
|
||||
ر Re:
|
||||
ڙ r.e:
|
||||
ز ze:
|
||||
ژ Ze:
|
||||
س si:n
|
||||
ش Si:n
|
||||
ص sUa:d
|
||||
ض zUa:d
|
||||
ط tOe:
|
||||
ظ zOe:
|
||||
ع aIn
|
||||
غ QaIn
|
||||
ف fe:
|
||||
ڦ p#e:
|
||||
ڪ ka:f
|
||||
ق qa:f
|
||||
ک k#e:
|
||||
گ ga:f
|
||||
گھ g#e:
|
||||
ڳ ge:
|
||||
ڱ N-e:
|
||||
ل la:m
|
||||
م mi:m
|
||||
ن nu:n
|
||||
ڻ n.u:n.
|
||||
و va:O
|
||||
ه he:
|
||||
ہ Urdu:||he:
|
||||
ھ dO||caSmi:||he:
|
||||
ء hamzah
|
||||
ي je:
|
||||
ئ h'amza||je:
|
||||
ۂ he:h'amza
|
||||
ؤ va:Oh'amza
|
||||
|
||||
َ z@b@R
|
||||
ِ ze:R
|
||||
ُ pe:S
|
||||
ٰ ,alIfmaqs'u:r,a
|
||||
ّ t,aSd'i:d
|
||||
ً d'o:zab'ar
|
||||
ٗ Ubto:pe:S
|
||||
|
||||
|
||||
// The numbers
|
||||
_0 bUr.i:
|
||||
_1 hIkU
|
||||
_2 ba:
|
||||
_3 t.e
|
||||
_4 ca:R
|
||||
_5 panJa
|
||||
_6 c#aha
|
||||
_7 sat:a
|
||||
_8 at.#a
|
||||
_9 nava
|
||||
_10 d.aha
|
||||
_11 jaraha
|
||||
_12 baraha
|
||||
_13 te:raha
|
||||
_14 cOd.aha
|
||||
_15 pandraha
|
||||
_16 soraha
|
||||
_17 satraha
|
||||
_18 arr.aha
|
||||
_19 Un.vi:ha
|
||||
_20 vi:ha
|
||||
_21 Ikvi:ha
|
||||
_22 ba:vi:ha
|
||||
_23 t.e:vi:ha
|
||||
_24 co:vi:ha
|
||||
_25 panJvi:ha
|
||||
_26 c#avi:ha
|
||||
_27 sata:vi:ha
|
||||
_28 at.#a:vi:ha
|
||||
_29 Un.at.i:ha
|
||||
_30 t.i:ha
|
||||
_31 Ikat.i:ha
|
||||
_32 bat.i:ha
|
||||
_33 t.e:t.i:ha
|
||||
_34 co:t.i:ha
|
||||
_35 panJati:ha
|
||||
_36 c#at.i:ha
|
||||
_37 satati:ha
|
||||
_38 at.#ati:ha
|
||||
_39 Un.ta:li:ha
|
||||
_40 ca:li:ha
|
||||
_41 Ikta:li:ha
|
||||
_42 ba:Ita:li:ha
|
||||
_43 t.e:ta:li:ha
|
||||
_44 co:Ita:li:ha
|
||||
_45 panJe:ta:li:ha
|
||||
_46 c#a:Ita:li:ha
|
||||
_47 sate:ta:li:ha
|
||||
_48 at.#e:ta:li:ha
|
||||
_49 Un.vanJa:h
|
||||
_50 panJa:h
|
||||
_51 IkvanJa:h
|
||||
_52 ba:vanJa:h
|
||||
_53 t.e:vanJa:h
|
||||
_54 co:vanJa:h
|
||||
_55 panJvanJa:h
|
||||
_56 c#a:vanJa:h
|
||||
_57 satvanJa:h
|
||||
_58 at.#vanJa:h
|
||||
_59 Un.ahat.#I
|
||||
_60 sat.#I
|
||||
_61 Ikahat.#I
|
||||
_62 bahat.#I
|
||||
_63 t.e:hat.#I
|
||||
_64 co:hat.#I
|
||||
_65 panJahat.#I
|
||||
_66 c#a:hat.#I
|
||||
_67 satahat.#I
|
||||
_68 at.#ahat.#I
|
||||
_69 Un.hat:aR
|
||||
_70 sat:aR
|
||||
_71 Ikahat:aR
|
||||
_72 ba:hataR
|
||||
_73 t.e:hataR
|
||||
_74 co:hataR
|
||||
_75 panJataR
|
||||
_76 c#a:hataR
|
||||
_77 satat:aR
|
||||
_78 at.#ahataR
|
||||
_79 Un.Ia:si:
|
||||
_80 assi:
|
||||
_81 IkIa:si:
|
||||
_82 bIa:si:
|
||||
_83 t.e:a:si
|
||||
_84 cOo:ra:si:
|
||||
_85 panJa:si:
|
||||
_86 c#aha:si:
|
||||
_87 satIa:si:
|
||||
_88 at.#Ia:si:
|
||||
_89 Un.Ia:nave:
|
||||
_90 navve:
|
||||
_91 IkIanave:
|
||||
_92 bIa:nave:
|
||||
_93 t.Ia:navE:
|
||||
_94 co:Ra:nave:
|
||||
_95 panJa:nave:
|
||||
_96 c#aha:nave:
|
||||
_97 satIa:nave:
|
||||
_98 at.#Ia:nave:
|
||||
_99 nava:nave:
|
||||
|
||||
_0C s'aU
|
||||
_0M1 haz'a:r
|
||||
_0M2 l'a:kh
|
||||
_0M3 kaR'o:R
|
||||
_0M4 'aRab
|
||||
_0M5 'k#aRab
|
||||
|
||||
_dpt _d.aha:i:_
|
||||
|
||||
// word exceptions
|
||||
|
||||
آھي a:he: $u
|
||||
آهن a:hIn $u
|
||||
هن hIna
|
||||
۾ me~ $u
|
||||
۽ ae~ $brk
|
||||
آهي a:he: $u
|
||||
هڪ HIk
|
||||
ٿي t#i: $u
|
||||
ئي i:
|
||||
+559
-668
File diff suppressed because it is too large
Load Diff
+1678
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -30,7 +30,7 @@ t tE
|
||||
u u
|
||||
ü y
|
||||
v vE
|
||||
w tS'ift||vE
|
||||
w d'ab@LjU
|
||||
x iks
|
||||
y jE
|
||||
z zE
|
||||
|
||||
+280
-7
@@ -1,4 +1,4 @@
|
||||
// This ur_list file is prepared by Him Prasad Gautam (Kathmandu, Nepal)
|
||||
// This ur_list file is prepared by Him Prasad Gautam (Kathmandu, Nepal) and Ejaz Shah (Pakistan)
|
||||
// This file is UTF8 encoded
|
||||
// Letter Names, Numbers and exceptional pronounciation of Urdu
|
||||
|
||||
@@ -55,6 +55,8 @@ _ؤ va:Oh'amza
|
||||
ّ t,aSd'i:d
|
||||
ً d'o:zab'aR
|
||||
ْ sUk'u:n
|
||||
ٗ Ult.a:||pe:S
|
||||
ٓ mada
|
||||
|
||||
|
||||
// The numbers
|
||||
@@ -190,8 +192,11 @@ _dpt _ISaRI'Ia_
|
||||
جن J'In $u
|
||||
جنھیں J,InH'e:n $u
|
||||
انہوں ,UnH'o:n $u
|
||||
انھوں UnHo:n $u
|
||||
انہیں ,UnH'e:n $u
|
||||
انھیں ,UnH'e:n $u
|
||||
انھی UnHi $u
|
||||
انہی UnHi: $u
|
||||
|
||||
// unstressed prepositions
|
||||
کا $u
|
||||
@@ -199,7 +204,7 @@ _dpt _ISaRI'Ia_
|
||||
کے $u
|
||||
سے $u
|
||||
|
||||
اور OR $u $brk
|
||||
اور aUR $u $brk
|
||||
کہ k'e:H $u
|
||||
نے $u
|
||||
|
||||
@@ -329,7 +334,7 @@ _dpt _ISaRI'Ia_
|
||||
حفاظت H,Ifa:z.'at
|
||||
ہمت HIm'at
|
||||
سمیت sam'e:t
|
||||
اگرچہ ,agaRc'e:H
|
||||
اگرچہ ,agaRc'e:H $pause
|
||||
بلکہ b,alk'e:H
|
||||
حصہ H'Is.,a
|
||||
حصے H'Is.e:
|
||||
@@ -677,14 +682,13 @@ _dpt _ISaRI'Ia_
|
||||
کلک klIk
|
||||
فکسنگ f,Iks'Ing
|
||||
مانند ma:n'Ind $1
|
||||
اتار Ut'a:R
|
||||
آرکائیو ,a:Rk'a:jv
|
||||
لنک lInk
|
||||
فہرست fEHRIst
|
||||
کیلئے ke:li:;e:
|
||||
اگر agaR $u
|
||||
اگر agaR $pause
|
||||
ضرورت zaRu:Rat
|
||||
مگر magaR $u
|
||||
مگر magaR $pause
|
||||
دیگر digaR
|
||||
اہم EHEm
|
||||
فیصد fis.ad
|
||||
@@ -718,4 +722,273 @@ _dpt _ISaRI'Ia_
|
||||
نصرت nUs.Rat
|
||||
خاتون xa:tu:n
|
||||
برتری baRtaRi
|
||||
برتر baRtaR
|
||||
برتر baRtaR
|
||||
سن sUn
|
||||
انھتر UnHataR
|
||||
انیس Uni:s
|
||||
ورلڈ vaRld.
|
||||
فرق faRq
|
||||
اوپر u:paR $1
|
||||
اوپری u:pRi:
|
||||
دودھ du:d#
|
||||
اورئینٹل o:Ri;e:nt.al
|
||||
انکار Inka:R
|
||||
انکاری Inka:Ri
|
||||
انیک ane:k
|
||||
اونگ u:ng
|
||||
اوک u:k
|
||||
اویس ave:s
|
||||
اویسی ave:si
|
||||
اٹوٹ at.u:t.
|
||||
اٹھ Ut.#
|
||||
اٹھان Ut.#a:n
|
||||
اک Ik
|
||||
اکا Ika:
|
||||
دکا dUka:
|
||||
اکائی Ik'a:i
|
||||
اکبر akbaR $1
|
||||
وکی vIki
|
||||
اکرم akRam $1
|
||||
اکزیکٹیو Ikze:kIt.Iv
|
||||
اکتا Ukta:
|
||||
اکتایا Ukta:ja:
|
||||
اکتاہٹ Ukta:Hat.
|
||||
اکلو Iklo:
|
||||
اکمل akmal $1
|
||||
مملکت mamlIkat
|
||||
قربت qURbat $1
|
||||
مٹا mIt.a:
|
||||
ٹیوب t.ju:b
|
||||
سیہون sEHvan
|
||||
عرس URs
|
||||
اکھاڑ Uk#a:r.
|
||||
اکے Ike:
|
||||
آمیزش a:me:zIS
|
||||
واحد va:HId
|
||||
آنت a:nt
|
||||
آنچل a:ncal
|
||||
حجاب HIJa:b
|
||||
حلقہ Halqa
|
||||
لحاظ lIHa:z.
|
||||
کیچڑ kicar.
|
||||
گردش gaRdIS
|
||||
مروت mURavvat
|
||||
مزاج mIza:J
|
||||
غربت QURbat $1
|
||||
آویزش a:ve:zIS
|
||||
پہر pEHER
|
||||
آہ a:H
|
||||
جگر JIgaR
|
||||
دلدوز dIldo:z $1
|
||||
رحمت REHmat
|
||||
ابجد abJad
|
||||
(رسم الخط) RasmUlxat
|
||||
ابجدی abJadi
|
||||
حروف HURu:f
|
||||
ابر abR
|
||||
ابراہیم IbRa:Hi:m
|
||||
ابراہیمی IbRa:Hi:mi
|
||||
ابرق abRaq
|
||||
ابرنا UbaRna:
|
||||
ابرو abRu:
|
||||
کنول kV~val $2
|
||||
ابل Ubal
|
||||
ابلا Ubla:
|
||||
ابلی Ubli:
|
||||
ابلیس Ibli:s
|
||||
الغرض alQaRaz
|
||||
الوقت Ulvaqt
|
||||
دہر dEHER
|
||||
ظلم z.Ulm
|
||||
ابو abu:
|
||||
طالب ta:lIb
|
||||
اپج UpaJ
|
||||
اپچار Upca:R
|
||||
اپدیش Upde:S
|
||||
اپواس Upva:s
|
||||
اپکار Upka:R
|
||||
سرسری saRsaRi $1
|
||||
متخالف mUtaxa:lIf
|
||||
اتصالی ,ItIs.a:li
|
||||
اتمام ItIma:m
|
||||
حجت HUJat
|
||||
اتھل Ut#al
|
||||
پتھل pUt#al
|
||||
اجازت IJa:zat $2
|
||||
اجرا IJRa:
|
||||
اجرت IJRa:
|
||||
اجگر aJgaR
|
||||
اجلا UJla:
|
||||
اجلی UJli:
|
||||
اجلے UJle:
|
||||
اجماع IJma:
|
||||
اجمل aJmal
|
||||
اجنبی aJnabi
|
||||
اجنٹ IJant.
|
||||
اجنڈا IJand.a:
|
||||
اچک Ucak
|
||||
اچکا Ucka:
|
||||
اجنب aJnab
|
||||
اچھوت ac#u:t
|
||||
اچھوتا ac#u:ta:
|
||||
اچھوتی ac#u:ti
|
||||
اچھوتے ac#u:te:
|
||||
پرسی pURsi:
|
||||
بالغیب bIlQEb $2
|
||||
نگار nIga:R
|
||||
کاغذ ka:QaD
|
||||
اختری axtaRi:
|
||||
اخذ axaD
|
||||
جرات JURat
|
||||
اخوت Uxu:vat
|
||||
فہم fEHEm
|
||||
جرمنی JaRmani
|
||||
خدمت xIdmat
|
||||
شریعت SaRi;at
|
||||
ادت Idat
|
||||
ادراک IdRa:k
|
||||
تردد taRaddUd
|
||||
خدمات xIdma:t
|
||||
ادریس IdRi:s
|
||||
ادب adab
|
||||
ادغام IdQa:m
|
||||
ادلال Idla:l
|
||||
موا mu:a:
|
||||
ادھر Id#aR
|
||||
(ادھر ادھر) Id#aR||Ud#aR
|
||||
ادھم Ud#am
|
||||
اذالہ IDa:la
|
||||
ارتھ aRt#
|
||||
معلیٰ mUalla:
|
||||
ارسال IRsa:l
|
||||
ملیں mIle:n
|
||||
ارشاد IRSa:d
|
||||
ارض aRz
|
||||
سلطنت saltanat
|
||||
استاد Usta:d
|
||||
استادی Usta:di
|
||||
استر staR
|
||||
بخدا baxUda:
|
||||
بندش bandIS
|
||||
خرد xURd
|
||||
خردار xURda:R
|
||||
خردہ xURda
|
||||
خرشید xURSi:d
|
||||
تبرک tabaRUk
|
||||
خرم xURRam
|
||||
خزاں xIza:n
|
||||
پروردہ paRvaRda
|
||||
خشک xUSk
|
||||
خصوص xUs.u:s.
|
||||
زمرد zamaRUd
|
||||
جبلت JIbIll'at $2
|
||||
بالآخر bIla:xIR
|
||||
شعاع SUa:
|
||||
حصار HIs.a:R
|
||||
شدگی SUdgi:
|
||||
بالاتفاق bIlItIfa:q
|
||||
بالاجماع bIlIJma:
|
||||
بالاجمال bIlIJma:l
|
||||
بالاشتراک bIlIStIRa:k
|
||||
بالاعلان bIle:la:n
|
||||
بالجبر bIlJabR
|
||||
بالعوض bIlIvaz
|
||||
بالغرض bIlQaRaz
|
||||
مرکزی maRkazi
|
||||
بالفرض bIlfaRz
|
||||
حکمت HIkmat
|
||||
بالفعل bIlfe:l
|
||||
بالمثل bIlmIsl
|
||||
بالمختصر bIlmUxtas.aR
|
||||
بالمشافہ bIlmUSa:fa
|
||||
بالمعنی bIlma:ni
|
||||
بالمقابل bIlmUqa:bIl
|
||||
بالواسطہ bIlva:sta
|
||||
نیند ni:nd
|
||||
باوجودیکہ ba:vUJu:de:ke:
|
||||
کتا kUt:a: $2
|
||||
دکھاؤ dIk#a:o:
|
||||
کتے kUt:e: $2
|
||||
کتوں kUt:o:n
|
||||
بپھر bIp#aR
|
||||
شکن SIkan
|
||||
بتکرار batakRa:R
|
||||
بچھ bIc#
|
||||
منجمد mUnJamId
|
||||
بحر bEHER
|
||||
بخدمت baxIdmat
|
||||
منکشف mUnkaSIf
|
||||
بخش baxS
|
||||
بخشش baxSIS
|
||||
جدت JIdat
|
||||
بخوشی baxUSi:
|
||||
بخیر baxE:R
|
||||
بچپن bacpan
|
||||
بچپنا bacpana:
|
||||
قطب qUtUb
|
||||
ذہن zEHEn
|
||||
سلوک sUlu:k
|
||||
انڈین Ind.i;an
|
||||
متنبہ mUtanabe:
|
||||
قیمتی qi:mti:
|
||||
بدک bIdak
|
||||
بذریعہ baDaRi:;a:
|
||||
برا bURa:
|
||||
نسبتی nIsbati
|
||||
برتن baRtan
|
||||
برج bURJ
|
||||
برد bURd
|
||||
بردہ bURda
|
||||
رغبت RaQbat
|
||||
برضا baRaza:
|
||||
علاج Ila:J
|
||||
الفت Ulfat
|
||||
برگزیدہ baRgUzi:da
|
||||
برہمن bRaHman
|
||||
الذمہ UzzIma
|
||||
صحبت s.OHbat
|
||||
برے bURe:
|
||||
بز bUz
|
||||
بزم bazm
|
||||
بستر bIstaR
|
||||
مرگ maRg
|
||||
بسکٹ bIskIt.
|
||||
(بسم اللہ) bIsmIl:a:H
|
||||
بسم bIsm
|
||||
بسنت basant
|
||||
بضد bazId
|
||||
بعید bai:d
|
||||
بغض bUQz
|
||||
بقید baqE:d
|
||||
(بلا واسطہ) bIla:||va:sta
|
||||
بلال bIla:l
|
||||
بلبل bUlbUl
|
||||
بلبلے bUlbUle:
|
||||
بلک bIlak
|
||||
بلیک ble:k
|
||||
مارکٹ ma:RkIt.
|
||||
(بن بلائے) bIn||bUla:e:
|
||||
(بن مول) bIn||mo:l
|
||||
بنت bInt
|
||||
سنور sV~vaR
|
||||
بو bu: $only
|
||||
بورڈنگ bo:Rd.Ing
|
||||
بولنگ bo:lIng
|
||||
امرت amRIt
|
||||
(ان بجھا) anbUJ#a:
|
||||
(ان بن) anban
|
||||
(ان پڑھ) anpar.h
|
||||
(ان گنت) an||gInat
|
||||
قدرت qUdRat
|
||||
انسلٹ Insalt.
|
||||
انسیت Unsi;at
|
||||
اللہ al:a:H
|
||||
انصاف Ins.a:f
|
||||
انصافی Ins.a:fi
|
||||
تپش tapIS
|
||||
انثیت Unsi;at
|
||||
انجم anJUm
|
||||
انجمن anJUman
|
||||
الجھن UlJ#an
|
||||
الحمد alHamd
|
||||
التفات IltIfa:t
|
||||
|
||||
+110
-28
@@ -1,5 +1,5 @@
|
||||
|
||||
// This ur_rules file is written by Him Prasad Gautam (Kathmandu, Nepal).
|
||||
// This ur_rules file is written by Him Prasad Gautam (Kathmandu, Nepal) and Ejaz Shah (Pakistan).
|
||||
// This file is UTF8 encoded
|
||||
// phoneme rules for Urdu
|
||||
// Letter group - l01: Vowels
|
||||
@@ -17,16 +17,18 @@
|
||||
٩ 9
|
||||
ي ی
|
||||
یٰ ا
|
||||
ٰی ا
|
||||
آ آ
|
||||
|
||||
|
||||
// vowel signs, alif acts as consonants at start of word if these follow
|
||||
.L01 َ ِ ُ و ی ع ا ے
|
||||
|
||||
// Consonants
|
||||
.L02 ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک گ ل م ن ہ ئ
|
||||
.L02 ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ غ ف ق ک کھ گ گھ ل م ن ہ ئ
|
||||
|
||||
// Letter group - L03: Most of the letters
|
||||
.L03 ا ب پ ت ٹ ث ج چ ح خ د ڈ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن و ہ ئ ی ے
|
||||
.L03 ا ب بھ پ پھ ت تھ ٹ ٹھ ث ج جھ چ چھ ح خ د دھ ڈ ڈھ ذ ر ڑ ز ژ س ش ص ض ط ظ ع غ ف ق ک کھ گ گھ ل م ن و ہ ئ ی ے ٰ
|
||||
|
||||
// VOWELS
|
||||
|
||||
@@ -34,7 +36,7 @@
|
||||
َ a
|
||||
َی E
|
||||
َے E
|
||||
َو O
|
||||
َو aU
|
||||
َع a:
|
||||
|
||||
.group ِ
|
||||
@@ -48,6 +50,9 @@
|
||||
ُو u:
|
||||
ُع O
|
||||
|
||||
.group ٗ
|
||||
ٗ u:
|
||||
|
||||
.group ھ
|
||||
ھ HV
|
||||
ھ (_ H:
|
||||
@@ -80,7 +85,7 @@ _) ای e:
|
||||
افتتاح ,ItIt'a:H
|
||||
اسلام ,Isl'a:m
|
||||
_) انسان Ins'a:n
|
||||
_) انت (L02 'Int,a
|
||||
_) انت (L02L01 'Int,a
|
||||
_) امید Um'i:d
|
||||
اً(_S2 'an
|
||||
_) امکان ,Imk'a:n
|
||||
@@ -123,12 +128,65 @@ _) ای e:
|
||||
_) است (L02 ,IstI
|
||||
_) ارت (L02 ,IRtI
|
||||
_) ادار Ida:R
|
||||
_)انک(L02L01 InkI
|
||||
_)انہتر UnHataR
|
||||
_)او(ا av
|
||||
_)انہ(L02L01 InHI
|
||||
_)اٹھتال at.#ta:l
|
||||
_)اٹھتر at.#at:aR
|
||||
_)اٹھتیس at.#ti:s
|
||||
_)اٹھلا It.#la:
|
||||
_)اٹھ(و Ut.#
|
||||
_)اکت(L02L01 IktI
|
||||
_)اکسا Uksa:
|
||||
_)اکٹھ(L01 Ikat.t.#
|
||||
_)اکہر IkEHR
|
||||
_)اکیل ake:l
|
||||
_)ائ aI
|
||||
_)ابال Uba:l
|
||||
_)ابوال(P5 abUl
|
||||
L02)او(L02 a:vV
|
||||
_)ابھار Ub#a:R
|
||||
_)اتار Uta:R
|
||||
_)اترو(L01 UtaRv
|
||||
_)ابکائ Ubka:
|
||||
_)اجت(L02L01 IJtI
|
||||
_)اجا(ر IJa:
|
||||
_)اجال UJa:l
|
||||
_)اجاڑ UJa:r.
|
||||
_)اچھال Uc#a:l
|
||||
_)اداس Uda:s
|
||||
_)ادھار Ud#a:R
|
||||
_)ادھڑ(L01 Ud#r.
|
||||
_)ادھڑ Ud#ar.
|
||||
_)ادھیڑ Ud#e:r.
|
||||
_)ارا(د IRa:
|
||||
_)اونچ u:nc
|
||||
اں a~
|
||||
_)انج(L02L01 InJI
|
||||
_)امت(L02L01 ImtI
|
||||
_)انح(L02L01 InHI
|
||||
_)انخ(L02L01 InxI
|
||||
_)انس(پ Ins
|
||||
_)انس(L02L01 InsI
|
||||
_)انس(ٹ Ins
|
||||
_)انسٹھ Unsat.#
|
||||
_)انشا InSa:
|
||||
_)انش(L02L01 InSI
|
||||
_)انص(L02L01 Ins.I
|
||||
_)انض(L02L01 InzI
|
||||
_)انق(L02L01 InqI
|
||||
_)الت(L02L01 IltI
|
||||
_)انف(L02L01 InfI
|
||||
_)ال(L03L03L03P2 al
|
||||
|
||||
.group آ
|
||||
آ a:
|
||||
آتش 'a:tIS
|
||||
آہست a:H'Ist
|
||||
آئ (L02 'a:I
|
||||
آمیز a:me:z
|
||||
آویز a:ve:z
|
||||
|
||||
|
||||
.group ع
|
||||
@@ -141,6 +199,8 @@ _) ای e:
|
||||
_) عمر 'UmR
|
||||
L02) عی (_ 'ai:
|
||||
علیحد 'alEHd
|
||||
عُ 'U
|
||||
عِ I
|
||||
|
||||
.group و
|
||||
و o:
|
||||
@@ -152,8 +212,11 @@ _) ای e:
|
||||
وّ vv
|
||||
L02L02L02) و (L02 u:
|
||||
L02) ونکہ (_ u:nk'e:H
|
||||
L02L01) و (L02 vV
|
||||
L01) و (L01 v
|
||||
_L02)و(L01 av
|
||||
L01)و(L01 v
|
||||
وؤ u:o:
|
||||
L03L03L03L03)وں(S2 o:n
|
||||
_L02L01)و(L02_ vV
|
||||
|
||||
.group ی
|
||||
ی e:
|
||||
@@ -162,12 +225,17 @@ _) ای e:
|
||||
_) ی jV
|
||||
یع(_ i:
|
||||
@) ی i:
|
||||
@) یں (_ e:n
|
||||
@) یں (_ e~
|
||||
یّ jj
|
||||
@) یت (_S2 i:;'at
|
||||
_) یو jO
|
||||
ی (و e:
|
||||
L02)یوں i;o:n
|
||||
L03)یکشن e:kSan
|
||||
L03L03L03L03)یں(S2 e~
|
||||
یں e~
|
||||
L03)یک(ٹ e:k
|
||||
L03L01)یا(_S2 ja:
|
||||
|
||||
.group ے // yeh barree
|
||||
ے e:
|
||||
@@ -180,7 +248,7 @@ _) ای e:
|
||||
ئ
|
||||
|
||||
.group ؤ
|
||||
ؤ aU // ??
|
||||
ؤ o:
|
||||
|
||||
.group أ
|
||||
أ // ??
|
||||
@@ -220,6 +288,12 @@ _) ای e:
|
||||
بوڑھ b'u:r.h
|
||||
_) بے (P2 b'e:
|
||||
بحران b,OHR'a:n
|
||||
_)بپھر(L01 bIp#R
|
||||
_)بچھ bIc#
|
||||
_)بخار bUxa:R
|
||||
_)برائی bURa:i
|
||||
_)بوا(ئ boa:
|
||||
_)بزدل bUzdIl
|
||||
|
||||
|
||||
.group پ
|
||||
@@ -237,6 +311,7 @@ _) ای e:
|
||||
پیچھ p'i:c#
|
||||
پھونک p#'u:nk
|
||||
_) پور (L01 p'u:R
|
||||
_)پچھل(L01 pIc#l
|
||||
|
||||
.group ت
|
||||
ت tV
|
||||
@@ -254,10 +329,11 @@ _) ای e:
|
||||
تجرب taJ'aRb
|
||||
_) تیار t,ai:;'a:R
|
||||
_) تیسر t'i:sR
|
||||
L03L03) تا (_S2 ta:
|
||||
L03L03)تا(_S2 ta:
|
||||
L03L03) تی (_S2 ti:
|
||||
L03L03) تے (_S2 te:
|
||||
_) توا t'ava:
|
||||
تہ(_ ta
|
||||
|
||||
.group ٹ
|
||||
ٹ t.V
|
||||
@@ -295,6 +371,7 @@ _) ای e:
|
||||
_) جمل J'Uml
|
||||
_) جہ (L02 J'EH
|
||||
_) جدا J'Uda:
|
||||
_)جذب JaDb
|
||||
|
||||
.group چ
|
||||
چ cV
|
||||
@@ -320,6 +397,7 @@ _) ای e:
|
||||
|
||||
حّ HHV
|
||||
حّ (L01 HH
|
||||
_)حیا Haja:
|
||||
|
||||
.group خ
|
||||
خ xV
|
||||
@@ -331,6 +409,8 @@ _) ای e:
|
||||
_) خود x'Ud
|
||||
_) خواہش xv'a:HIS
|
||||
_) خیا x'aja:
|
||||
_)خوا xva:
|
||||
_)خدا xUda:
|
||||
|
||||
|
||||
.group د
|
||||
@@ -353,6 +433,7 @@ _) ای e:
|
||||
_) دوسر d'u:sR
|
||||
_) دین de:n
|
||||
_) دیت de:t
|
||||
دہ(_ da
|
||||
|
||||
.group ڈ
|
||||
ڈ d.V
|
||||
@@ -366,11 +447,9 @@ _) ای e:
|
||||
ڈرائیور d.R'a:jvaR
|
||||
|
||||
.group ذ
|
||||
ذ DV
|
||||
ذ (L01 D
|
||||
ذّ DDV
|
||||
ذّ (L01 DD
|
||||
_) ذہ (L02 D'EH
|
||||
ذ zV
|
||||
ذ (L01 z
|
||||
_) ذہ (L02 z'EH
|
||||
|
||||
.group ر
|
||||
ر RV
|
||||
@@ -446,6 +525,7 @@ _) ای e:
|
||||
_) شخص S'axs.
|
||||
_) شہ (L02 S'EH
|
||||
شرمند S,aRm'Ind
|
||||
_)شمار SUma:R
|
||||
|
||||
.group ص
|
||||
ص s.V
|
||||
@@ -529,12 +609,13 @@ _) ای e:
|
||||
_) گہ (L02 g'EH
|
||||
گزارش gUz'a:RIS
|
||||
_) گیت g'i:t
|
||||
_)گزار gUza:R
|
||||
|
||||
.group ل
|
||||
ل lV
|
||||
ل (L01 l
|
||||
لّ llV
|
||||
لّ (L01 ll
|
||||
لّ l:V
|
||||
لّ (L01 l:
|
||||
لکھ l'Ik#
|
||||
_) لہ (L02 l'EH
|
||||
_) لیت le:t
|
||||
@@ -596,12 +677,12 @@ _) ای e:
|
||||
_) نمٹ nIm'at.
|
||||
_) نمٹ (L01 nImt.
|
||||
@) ن (پ n
|
||||
@) نچل n'Icl
|
||||
_) نچل n'Icl
|
||||
نشان nIS'a:n
|
||||
@) ن (ڈ n
|
||||
_) نظر naz.'aR
|
||||
_) نظام nIz.'a:m
|
||||
_) نہ (L02 n'H
|
||||
_) نہ (L02 nEHE
|
||||
L01) نٹ n't.
|
||||
نھ nH
|
||||
_) نکت n'Ukt
|
||||
@@ -626,8 +707,8 @@ _) ای e:
|
||||
ہ H
|
||||
_) ہ (L01 H
|
||||
_) ہ (ند HI
|
||||
ہّ HHV
|
||||
ہّ (L01 HH
|
||||
ہّ H:V
|
||||
ہّ (L01 H:
|
||||
|
||||
ہ (_ a
|
||||
_) ہلن H'Iln
|
||||
@@ -636,24 +717,25 @@ _) ای e:
|
||||
_) ہم (L02L02L02P2 H'am
|
||||
|
||||
.group ّ
|
||||
ّ
|
||||
ّ :
|
||||
|
||||
.group ً
|
||||
ً
|
||||
ً an
|
||||
|
||||
|
||||
// Common symbols
|
||||
|
||||
.group
|
||||
$ do:l@R
|
||||
, sVkat.Vh // Sakata سکتہ
|
||||
! f'iJa:ja //Fijaya فجائیہ
|
||||
; w'ak't'a //Waqfa وقفہ
|
||||
, sakta // Sakta سکتہ
|
||||
! f'iJa:ja //Fijaya فجائیہ
|
||||
; vakfa //Waqfa وقفہ
|
||||
: r'a:b'tah//Rabtar رابطہ
|
||||
? saw'a:l'i:ja:n'is'a:nV // Sawaliya Nishan سوالیہ نشان
|
||||
% f'i:sVd //Fisad فیصد
|
||||
% f'i:sVd //Fisad فیصد
|
||||
۔ xatma //Khatma ختمہ
|
||||
؟ sava:li:;a:||nISa:n //Sawalya Nishan سوالیہ نشان
|
||||
|
||||
|
||||
|
||||
.group 0xe0a4 // devanagari
|
||||
0xe0a4 _^_NE // switch to Nepali voice
|
||||
|
||||
+3
-3
@@ -55,9 +55,9 @@ The utility 'phonemes' are:
|
||||
| `=` | put the primary stress on the preceding syllable |
|
||||
| `_:` | short pause |
|
||||
| `_` | a shorter pause |
|
||||
| `||` | indicates a word boundary within a phoneme string |
|
||||
| `|` | can be used to separate two adjacent characters, to prevent them from being considered as a multi-character phoneme mnemonic |
|
||||
|
||||
| <code>|</code> | indicates a word boundary within a phoneme string |
|
||||
| <code>||</code> | can be used to separate two adjacent characters, to prevent them from being considered as a multi-character phoneme mnemonic |
|
||||
|
||||
It is not necessary to specify the stress of every syllable. Stress
|
||||
markers are only needed in order to change the effect of the language's
|
||||
default stress rule.
|
||||
|
||||
+2
-1
@@ -8,7 +8,7 @@ and dialects,
|
||||
[private-use extensions](https://raw.githubusercontent.com/espeak-ng/bcp47-data/master/bcp47-extensions)
|
||||
have been used.
|
||||
|
||||
The supported languages are:
|
||||
The 100 supported languages and accents are:
|
||||
|
||||
| Family Code | Identifier | Language Family | Language | Accent/Dialect |
|
||||
|-------------|-------------------|-----------------------|-----------------------------|------------------------|
|
||||
@@ -75,6 +75,7 @@ The supported languages are:
|
||||
| `art` | `lfn` | Constructed | Lingua Franca Nova | |
|
||||
| `bat` | `lt` | Baltic | Lithuanian | |
|
||||
| `art` | `jbo` | Constructed | Lojban | |
|
||||
| `poz` | `mi` | Malayo-Polynesian | Māori | |
|
||||
| `zls` | `mk` | South Slavic | Macedonian | |
|
||||
| `poz` | `ms` | Malayo-Polynesian | Malay | |
|
||||
| `dra` | `ml` | Dravidian | Malayalam | |
|
||||
|
||||
@@ -52,6 +52,12 @@
|
||||
display: block;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
#ipaarea {
|
||||
width: 100%;
|
||||
height: 8rem;
|
||||
display: block;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
p.gh {
|
||||
color: #333;
|
||||
text-align: right;
|
||||
@@ -100,6 +106,7 @@
|
||||
<h1>espeakng.js 1.49.1 Demo</h1>
|
||||
<form>
|
||||
<textarea id="texttospeak">Call me Ishmael. Some years ago --- never mind how long precisely --- having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation.</textarea>
|
||||
<textarea readonly="true" placeholder="IPA" id="ipaarea"></textarea>
|
||||
<div class="speecharg">
|
||||
<label for="pitch">Pitch</label><input id="pitch" type="range" value="50" min="0" max="100" /><button type="button" aria-label="Reset pitch" title="Reset pitch" onclick="resetPitch();">↶</button>
|
||||
</div>
|
||||
@@ -110,7 +117,7 @@
|
||||
<label for="voice">Voice</label><select id="voice"></select><button type="button" aria-label="Reset voice" title="Reset voice" onclick="resetVoice();">↶</button>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<button type="button" onmousedown="speak();">Speak</button>
|
||||
<button type="button" onmousedown="speakAndIpa();">Speak</button>
|
||||
<button type="button" onmousedown="stop();">Stop</button>
|
||||
</div>
|
||||
<p class="gh"><a href="https://github.com/eeejay/espeak/tree/emscripten">Original Code for eSpeak: Eitan Isaacson</a></p>
|
||||
|
||||
@@ -50,6 +50,35 @@ public:
|
||||
espeak_SetSynthCallback(NULL);
|
||||
}
|
||||
|
||||
int synth_ipa_(const char* aText, const char* virtualFileName) {
|
||||
|
||||
/* phoneme_mode
|
||||
bit 1: 0=eSpeak's ascii phoneme names, 1= International Phonetic Alphabet (as UTF-8 characters).
|
||||
bit 7: use (bits 8-23) as a tie within multi-letter phonemes names
|
||||
bits 8-23: separator character, between phoneme names
|
||||
*/
|
||||
|
||||
espeak_SetSynthCallback(NULL);
|
||||
|
||||
int phoneme_options = (1 << 1); // Use IPA
|
||||
int use_custom_phoneme_separator = (0 << 7);
|
||||
int phonemes_separator = ' '; // Use a default value
|
||||
|
||||
int phoneme_conf = phoneme_options | (phonemes_separator << 8);
|
||||
|
||||
FILE* f_phonemes_out = fopen(virtualFileName,"wb");
|
||||
if(!f_phonemes_out)
|
||||
return -1;
|
||||
|
||||
//espeak_ng_InitializeOutput(ENOUTPUT_MODE_SYNCHRONOUS, 0, NULL);
|
||||
espeak_SetPhonemeTrace(phoneme_conf, f_phonemes_out);
|
||||
espeak_Synth(aText, 0, 0, POS_CHARACTER, 0, 0, NULL, NULL);
|
||||
espeak_SetPhonemeTrace(0, NULL);
|
||||
fclose(f_phonemes_out);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
long set_voice(
|
||||
const char* aName,
|
||||
const char* aLang=NULL,
|
||||
|
||||
@@ -52,6 +52,7 @@ interface espeak_EVENT {
|
||||
interface eSpeakNGWorker {
|
||||
void eSpeakNGWorker();
|
||||
void synth_(DOMString aText, VoidPtr aCallback);
|
||||
long synth_ipa_(DOMString aText, DOMString virtualFileName);
|
||||
long getSizeOfEventStruct_();
|
||||
long set_voice(DOMString aName, DOMString aLang, optional octet gender=0, optional octet age=0, optional octet aVariant=0);
|
||||
[Const] attribute espeak_VOICE[] voices;
|
||||
|
||||
+27
-3
@@ -179,10 +179,12 @@ function speak() {
|
||||
pusher.connect(ctx.destination);
|
||||
console.log(' Creating pusher... done');
|
||||
|
||||
var user_text = document.getElementById('texttospeak').value;
|
||||
|
||||
// actual synthesis
|
||||
console.log(' Calling synthesize...');
|
||||
tts.synthesize(
|
||||
document.getElementById('texttospeak').value,
|
||||
user_text,
|
||||
function cb(samples, events) {
|
||||
//console.log(' Inside synt cb');
|
||||
if (!samples) {
|
||||
@@ -203,11 +205,32 @@ function speak() {
|
||||
//console.log(' Leaving synt cb');
|
||||
} // end of function cb
|
||||
); // end of tts.synthesize()
|
||||
console.log(' Calling synthesize... done');
|
||||
|
||||
console.log(' Calling synthesize... done');
|
||||
console.log('Leaving speak()');
|
||||
|
||||
} // end of speak()
|
||||
|
||||
function ipa() {
|
||||
|
||||
console.log("Synthesizing ipa ... ");
|
||||
var ts = new Date();
|
||||
var user_text = document.getElementById('texttospeak').value;
|
||||
|
||||
//user_text = user_text.repeat(50);
|
||||
|
||||
tts.set_voice(document.getElementById('voice').value);
|
||||
tts.synthesize_ipa(user_text, function(result) {
|
||||
var te = new Date();
|
||||
document.getElementById('ipaarea').value = result.ipa;
|
||||
console.log("Ipa synthesis done in " + (te-ts) + " ms.")
|
||||
});
|
||||
}
|
||||
|
||||
function speakAndIpa() {
|
||||
speak();
|
||||
ipa();
|
||||
}
|
||||
|
||||
function resetPitch() {
|
||||
document.getElementById('pitch').value = 50;
|
||||
}
|
||||
@@ -254,5 +277,6 @@ function initializeDemo() {
|
||||
console.log('Leaving cb1');
|
||||
} // end of function cb1
|
||||
);
|
||||
|
||||
console.log('Creating eSpeakNG instance... done');
|
||||
}
|
||||
|
||||
@@ -63,7 +63,8 @@ for (var method of [
|
||||
'set_rate',
|
||||
'set_pitch',
|
||||
'set_voice',
|
||||
'synthesize'
|
||||
'synthesize',
|
||||
'synthesize_ipa'
|
||||
]) {
|
||||
eSpeakNG.prototype[method] = _createAsyncMethod(method);
|
||||
}
|
||||
|
||||
@@ -93,6 +93,28 @@ eSpeakNGWorker.prototype.synthesize = function (aText, aCallback) {
|
||||
Runtime.removeFunction(fp);
|
||||
};
|
||||
|
||||
eSpeakNGWorker.prototype.synthesize_ipa = function (aText, aCallback) {
|
||||
|
||||
// Use a unique temp file for the worker. Avoid collisions, just in case.
|
||||
var ipaVirtualFileName = "espeak-ng-ipa-tmp-" + Math.random().toString().substring(2);
|
||||
|
||||
var res = "";
|
||||
var code = this.synth_ipa_(aText, ipaVirtualFileName);
|
||||
|
||||
if(code == 0)
|
||||
res = FS.readFile(ipaVirtualFileName, { encoding: 'utf8' })
|
||||
|
||||
// Clean up the tmp file
|
||||
FS.unlink(ipaVirtualFileName);
|
||||
|
||||
var ret = {
|
||||
code: code,
|
||||
ipa: res
|
||||
}
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
// Make this a worker
|
||||
|
||||
if (typeof WorkerGlobalScope !== 'undefined') {
|
||||
@@ -104,6 +126,7 @@ if (typeof WorkerGlobalScope !== 'undefined') {
|
||||
});
|
||||
|
||||
onmessage = function(e) {
|
||||
|
||||
if (!worker) {
|
||||
throw 'eSpeakNGWorker worker not initialized';
|
||||
}
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
name Sindhi
|
||||
language sd
|
||||
maintainer Ejaz Shah <eashah67@gmail.com>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
name Māori
|
||||
language mi
|
||||
status testing
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
# ===========================================================================
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Check whether the given FLAG works with the current language's compiler
|
||||
# or gives an error. (Warnings, however, are ignored)
|
||||
#
|
||||
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
|
||||
# success/failure.
|
||||
#
|
||||
# If EXTRA-FLAGS is defined, it is added to the current language's default
|
||||
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
|
||||
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
|
||||
# force the compiler to issue an error when a bad flag is given.
|
||||
#
|
||||
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
|
||||
#
|
||||
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
|
||||
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
|
||||
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 5
|
||||
|
||||
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
|
||||
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
|
||||
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
|
||||
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
|
||||
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
|
||||
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
|
||||
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
|
||||
[AS_VAR_SET(CACHEVAR,[yes])],
|
||||
[AS_VAR_SET(CACHEVAR,[no])])
|
||||
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
|
||||
AS_VAR_IF(CACHEVAR,yes,
|
||||
[m4_default([$2], :)],
|
||||
[m4_default([$3], :)])
|
||||
AS_VAR_POPDEF([CACHEVAR])dnl
|
||||
])dnl AX_CHECK_COMPILE_FLAGS
|
||||
|
||||
+19
-10
@@ -198,6 +198,25 @@ phoneme n- // more voiced variant of n
|
||||
FMT(n/n-syl)
|
||||
endphoneme
|
||||
|
||||
phoneme h // more quiet version of standard h
|
||||
vls glt apr
|
||||
lengthmod 3
|
||||
ipa h
|
||||
|
||||
IF nextPh(#a) THEN
|
||||
WAV(h/ha, 20)
|
||||
ELIF nextPh(#e) THEN
|
||||
WAV(h/he, 20)
|
||||
ELIF nextPh(#i) THEN
|
||||
WAV(h/hi, 20)
|
||||
ELIF nextPh(#o) THEN
|
||||
WAV(h/ho, 20)
|
||||
ELIF nextPh(#u) THEN
|
||||
WAV(h/hu, 20)
|
||||
ENDIF
|
||||
WAV(h/h_, 20) // no vowel following
|
||||
endphoneme
|
||||
|
||||
phoneme R // Latvian hard r
|
||||
liquid trl
|
||||
lengthmod 6
|
||||
@@ -336,15 +355,6 @@ phoneme } // Tiny, 5ms non-linked pause (used between phonemes in word)
|
||||
length 5
|
||||
endphoneme
|
||||
|
||||
// TODO should use this with correct lengthening
|
||||
//phoneme l
|
||||
// liquid
|
||||
// unstressed
|
||||
// dnt
|
||||
// length 150
|
||||
// FMT(vwl_hi/l-voc)
|
||||
//endphoneme
|
||||
|
||||
phoneme s
|
||||
vls alv frc sib
|
||||
voicingswitch z
|
||||
@@ -422,4 +432,3 @@ phoneme l
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -126,7 +126,7 @@ FILE *f_wavfile = NULL;
|
||||
char filetype[5];
|
||||
char wavefile[200];
|
||||
|
||||
void DisplayVoices(FILE *f_out, char *language)
|
||||
static void DisplayVoices(FILE *f_out, char *language)
|
||||
{
|
||||
int ix;
|
||||
const char *p;
|
||||
@@ -197,7 +197,7 @@ static void Write4Bytes(FILE *f, int value)
|
||||
}
|
||||
}
|
||||
|
||||
int OpenWavFile(char *path, int rate)
|
||||
static int OpenWavFile(char *path, int rate)
|
||||
{
|
||||
static unsigned char wave_hdr[44] = {
|
||||
'R', 'I', 'F', 'F', 0x24, 0xf0, 0xff, 0x7f, 'W', 'A', 'V', 'E', 'f', 'm', 't', ' ',
|
||||
@@ -598,7 +598,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (voicename[0] == 0)
|
||||
strcpy(voicename, "en");
|
||||
strcpy(voicename, ESPEAKNG_DEFAULT_VOICE);
|
||||
|
||||
result = espeak_ng_SetVoiceByName(voicename);
|
||||
if (result != ENS_OK) {
|
||||
|
||||
@@ -32,7 +32,4 @@
|
||||
|
||||
#include <ucd/ucd.h>
|
||||
|
||||
#define towlower ucd_tolower
|
||||
#define towupper ucd_toupper
|
||||
|
||||
#endif
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
#ifndef ESPEAK_NG_ENCODING_H
|
||||
#define ESPEAK_NG_ENCODING_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
|
||||
@@ -36,6 +36,8 @@ extern "C"
|
||||
#define ESPEAK_NG_API
|
||||
#endif
|
||||
|
||||
#define ESPEAKNG_DEFAULT_VOICE "en"
|
||||
|
||||
typedef enum {
|
||||
ENS_GROUP_MASK = 0x70000000,
|
||||
ENS_GROUP_ERRNO = 0x00000000, /* Values 0-255 map to errno error codes. */
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
#define ESPEAK_API
|
||||
#endif
|
||||
|
||||
#define ESPEAK_API_REVISION 10
|
||||
#define ESPEAK_API_REVISION 12
|
||||
/*
|
||||
Revision 2
|
||||
Added parameter "options" to eSpeakInitialize()
|
||||
@@ -68,6 +68,12 @@ Revision 9 30.May.2013
|
||||
Revision 10 29.Aug.2014
|
||||
Changed phonememode parameter to espeak_TextToPhonemes() and espeak_SetPhonemeTrace
|
||||
|
||||
Revision 11 (espeak-ng)
|
||||
Made ESPEAK_API import/export symbols correctly on Windows.
|
||||
|
||||
Revision 12 (espeak-ng)
|
||||
Exposed espeak_SetPhonemeCallback. This is available in eSpeak, but was not exposed in this header.
|
||||
|
||||
*/
|
||||
/********************/
|
||||
/* Initialization */
|
||||
@@ -260,6 +266,11 @@ int UriCallback(int type, const char *uri, const char *base);
|
||||
occurs. The calling program can then play the sound at that point.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
ESPEAK_API void espeak_SetPhonemeCallback(int (*PhonemeCallback)(const char *));
|
||||
|
||||
|
||||
/********************/
|
||||
/* Synthesis */
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2017 Reece H. Dunn
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef ESPEAK_NG_TOKENIZER_H
|
||||
#define ESPEAK_NG_TOKENIZER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
typedef struct espeak_ng_TOKENIZER_ espeak_ng_TOKENIZER;
|
||||
|
||||
ESPEAK_NG_API espeak_ng_TOKENIZER *
|
||||
create_tokenizer(void);
|
||||
|
||||
ESPEAK_NG_API void
|
||||
destroy_tokenizer(espeak_ng_TOKENIZER *tokenizer);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ESPEAKNG_TOKENIZER_OPTION_TEXT = 0,
|
||||
} espeak_ng_TOKENIZER_OPTIONS;
|
||||
|
||||
ESPEAK_NG_API int
|
||||
tokenizer_reset(espeak_ng_TOKENIZER *tokenizer,
|
||||
espeak_ng_TEXT_DECODER *decoder,
|
||||
espeak_ng_TOKENIZER_OPTIONS options);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ESPEAKNG_TOKEN_END_OF_BUFFER,
|
||||
ESPEAKNG_TOKEN_UNKNOWN,
|
||||
ESPEAKNG_TOKEN_NEWLINE,
|
||||
ESPEAKNG_TOKEN_PARAGRAPH,
|
||||
ESPEAKNG_TOKEN_WHITESPACE,
|
||||
ESPEAKNG_TOKEN_WORD_UPPERCASE,
|
||||
ESPEAKNG_TOKEN_WORD_LOWERCASE,
|
||||
ESPEAKNG_TOKEN_WORD_MIXEDCASE,
|
||||
ESPEAKNG_TOKEN_WORD_CAPITALIZED,
|
||||
ESPEAKNG_TOKEN_FULL_STOP,
|
||||
ESPEAKNG_TOKEN_QUESTION_MARK,
|
||||
ESPEAKNG_TOKEN_EXCLAMATION_MARK,
|
||||
ESPEAKNG_TOKEN_COMMA,
|
||||
ESPEAKNG_TOKEN_COLON,
|
||||
ESPEAKNG_TOKEN_SEMICOLON,
|
||||
ESPEAKNG_TOKEN_ELLIPSIS,
|
||||
ESPEAKNG_TOKEN_PUNCTUATION,
|
||||
ESPEAKNG_TOKEN_SYMBOL,
|
||||
} espeak_ng_TOKEN_TYPE;
|
||||
|
||||
ESPEAK_NG_API espeak_ng_TOKEN_TYPE
|
||||
tokenizer_read_next_token(espeak_ng_TOKENIZER *tokenizer);
|
||||
|
||||
ESPEAK_NG_API const char *
|
||||
tokenizer_get_token_text(espeak_ng_TOKENIZER *tokenizer);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -33,13 +33,15 @@
|
||||
|
||||
#include <espeak-ng/espeak_ng.h>
|
||||
#include <espeak-ng/speak_lib.h>
|
||||
#include <espeak-ng/encoding.h>
|
||||
|
||||
#include "error.h"
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "spect.h"
|
||||
#include "translate.h"
|
||||
|
||||
typedef struct {
|
||||
unsigned int value;
|
||||
@@ -50,9 +52,6 @@ NAMETAB *manifest = NULL;
|
||||
int n_manifest;
|
||||
char phsrc[sizeof(path_home)+40]; // Source: path to the 'phonemes' source file.
|
||||
|
||||
extern ESPEAK_NG_API int utf8_in(int *c, const char *buf);
|
||||
extern int utf8_out(unsigned int c, char *buf);
|
||||
|
||||
typedef struct {
|
||||
const char *mnem;
|
||||
int type;
|
||||
@@ -722,7 +721,7 @@ static void unget_char(unsigned int c)
|
||||
linenum--;
|
||||
}
|
||||
|
||||
int CheckNextChar()
|
||||
static int CheckNextChar()
|
||||
{
|
||||
int c;
|
||||
while (((c = get_char()) == ' ') || (c == '\t'))
|
||||
@@ -893,7 +892,7 @@ static int Range(int value, int divide, int min, int max)
|
||||
return value - min;
|
||||
}
|
||||
|
||||
int CompileVowelTransition(int which)
|
||||
static int CompileVowelTransition(int which)
|
||||
{
|
||||
// Compile a vowel transition
|
||||
int key;
|
||||
@@ -999,7 +998,7 @@ int CompileVowelTransition(int which)
|
||||
return 0;
|
||||
}
|
||||
|
||||
espeak_ng_STATUS LoadSpect(const char *path, int control, int *addr)
|
||||
static espeak_ng_STATUS LoadSpect(const char *path, int control, int *addr)
|
||||
{
|
||||
SpectSeq *spectseq;
|
||||
int peak;
|
||||
@@ -1401,15 +1400,17 @@ static int LoadEnvelope2(FILE *f, const char *fname)
|
||||
n_points++;
|
||||
}
|
||||
}
|
||||
env_x[n_points] = env_x[n_points-1];
|
||||
env_y[n_points] = env_y[n_points-1];
|
||||
if (n_points > 0) {
|
||||
env_x[n_points] = env_x[n_points-1];
|
||||
env_y[n_points] = env_y[n_points-1];
|
||||
}
|
||||
|
||||
ix = -1;
|
||||
ix2 = 0;
|
||||
for (x = 0; x < ENV_LEN; x++) {
|
||||
if (x > env_x[ix+4])
|
||||
if (n_points > 0) for (x = 0; x < ENV_LEN; x++) {
|
||||
if (n_points > 3 && x > env_x[ix+4])
|
||||
ix++;
|
||||
if (x >= env_x[ix2+1])
|
||||
if (n_points > 2 && x >= env_x[ix2+1])
|
||||
ix2++;
|
||||
|
||||
if (env_lin[ix2] > 0) {
|
||||
@@ -1612,7 +1613,7 @@ static void CompileSound(int keyword, int isvowel)
|
||||
=8 data = stress bitmap
|
||||
=9 special tests
|
||||
*/
|
||||
int CompileIf(int elif)
|
||||
static int CompileIf(int elif)
|
||||
{
|
||||
int key;
|
||||
int finish = 0;
|
||||
@@ -1721,7 +1722,7 @@ int CompileIf(int elif)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void FillThen(int add)
|
||||
static void FillThen(int add)
|
||||
{
|
||||
USHORT *p;
|
||||
int offset;
|
||||
@@ -1749,7 +1750,7 @@ void FillThen(int add)
|
||||
then_count = 0;
|
||||
}
|
||||
|
||||
int CompileElse(void)
|
||||
static int CompileElse(void)
|
||||
{
|
||||
USHORT *ref;
|
||||
USHORT *p;
|
||||
@@ -1776,7 +1777,7 @@ int CompileElse(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CompileElif(void)
|
||||
static int CompileElif(void)
|
||||
{
|
||||
if (if_level < 1) {
|
||||
error("ELIF not expected");
|
||||
@@ -1788,7 +1789,7 @@ int CompileElif(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int CompileEndif(void)
|
||||
static int CompileEndif(void)
|
||||
{
|
||||
USHORT *p;
|
||||
int chain;
|
||||
@@ -1951,7 +1952,7 @@ static void DecThenCount()
|
||||
then_count--;
|
||||
}
|
||||
|
||||
int CompilePhoneme(int compile_phoneme)
|
||||
static int CompilePhoneme(int compile_phoneme)
|
||||
{
|
||||
int endphoneme = 0;
|
||||
int keyword;
|
||||
@@ -2231,11 +2232,11 @@ int CompilePhoneme(int compile_phoneme)
|
||||
CompileToneSpec();
|
||||
break;
|
||||
case kCONTINUE:
|
||||
*prog_out++ = OPCODE_CONTINUE;
|
||||
*prog_out++ = INSTN_CONTINUE;
|
||||
DecThenCount();
|
||||
break;
|
||||
case kRETURN:
|
||||
*prog_out++ = OPCODE_RETURN;
|
||||
*prog_out++ = INSTN_RETURN;
|
||||
DecThenCount();
|
||||
break;
|
||||
case kINCLUDE:
|
||||
@@ -2248,7 +2249,7 @@ int CompilePhoneme(int compile_phoneme)
|
||||
if (if_level > 0)
|
||||
error("Missing ENDIF");
|
||||
if ((prog_out > prog_buf) && (if_stack[0].returned == 0))
|
||||
*prog_out++ = OPCODE_RETURN;
|
||||
*prog_out++ = INSTN_RETURN;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -2357,8 +2358,6 @@ static void WritePhonemeTables()
|
||||
static void EndPhonemeTable()
|
||||
{
|
||||
int ix;
|
||||
int *pw;
|
||||
int length;
|
||||
|
||||
if (n_phoneme_tabs == 0)
|
||||
return;
|
||||
@@ -2697,7 +2696,7 @@ MNEM_TAB envelope_names[] = {
|
||||
{ NULL, -1 }
|
||||
};
|
||||
|
||||
int LookupEnvelopeName(const char *name)
|
||||
static int LookupEnvelopeName(const char *name)
|
||||
{
|
||||
return LookupMnem(envelope_names, name);
|
||||
}
|
||||
@@ -2717,7 +2716,7 @@ espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log, espeak_ng_ERROR_CONTEXT
|
||||
int done_onset = 0;
|
||||
int done_last = 0;
|
||||
int n_preset_tunes = 0;
|
||||
int found;
|
||||
int found = 0;
|
||||
int tune_number = 0;
|
||||
FILE *f_out;
|
||||
TUNE *tune_data;
|
||||
@@ -2825,6 +2824,7 @@ espeak_ng_STATUS espeak_ng_CompileIntonation(FILE *log, espeak_ng_ERROR_CONTEXT
|
||||
error("Bad tune name: '%s;", new_tune.name);
|
||||
break;
|
||||
case kENDTUNE:
|
||||
if (!found) continue;
|
||||
if (done_onset == 0) {
|
||||
new_tune.unstr_start[0] = new_tune.unstr_start[1];
|
||||
new_tune.unstr_end[0] = new_tune.unstr_end[1];
|
||||
|
||||
@@ -35,11 +35,11 @@
|
||||
#include "error.h"
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
extern void Write4Bytes(FILE *f, int value);
|
||||
int HashDictionary(const char *string);
|
||||
|
||||
static FILE *f_log = NULL;
|
||||
extern char *dir_dictionary;
|
||||
@@ -52,8 +52,15 @@ static int text_mode = 0;
|
||||
static int debug_flag = 0;
|
||||
static int error_need_dictionary = 0;
|
||||
|
||||
static int hash_counts[N_HASH_DICT];
|
||||
// A hash chain is a linked-list of hash chain entry objects:
|
||||
// struct hash_chain_entry {
|
||||
// hash_chain_entry *next_entry;
|
||||
// // dict_line output from compile_line:
|
||||
// uint8_t length;
|
||||
// char contents[length];
|
||||
// };
|
||||
static char *hash_chains[N_HASH_DICT];
|
||||
|
||||
static char letterGroupsDefined[N_LETTER_GROUPS];
|
||||
|
||||
MNEM_TAB mnem_rules[] = {
|
||||
@@ -164,16 +171,6 @@ typedef struct {
|
||||
int group3_ix;
|
||||
} RGROUP;
|
||||
|
||||
int isspace2(unsigned int c)
|
||||
{
|
||||
// can't use isspace() because on Windows, isspace(0xe1) gives TRUE !
|
||||
int c2;
|
||||
|
||||
if (((c2 = (c & 0xff)) == 0) || (c > ' '))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len)
|
||||
{
|
||||
int stress;
|
||||
@@ -411,8 +408,8 @@ static int compile_line(char *linebuf, char *dict_line, int n_dict_line, int *ha
|
||||
|
||||
step = LINE_PARSER_WORD;
|
||||
|
||||
c = 0;
|
||||
while (c != '\n') {
|
||||
c = *p;
|
||||
while (c != '\n' && c != '\0') {
|
||||
c = *p;
|
||||
|
||||
if ((c == '?') && (step == 0)) {
|
||||
@@ -649,7 +646,7 @@ static int compile_line(char *linebuf, char *dict_line, int n_dict_line, int *ha
|
||||
length += ix;
|
||||
}
|
||||
}
|
||||
dict_line[0] = length;
|
||||
*((uint8_t *)dict_line) = (uint8_t)length;
|
||||
|
||||
return length;
|
||||
}
|
||||
@@ -669,7 +666,6 @@ static void compile_dictlist_start(void)
|
||||
p = p2;
|
||||
}
|
||||
hash_chains[ix] = NULL;
|
||||
hash_counts[ix] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -682,10 +678,9 @@ static void compile_dictlist_end(FILE *f_out)
|
||||
|
||||
for (hash = 0; hash < N_HASH_DICT; hash++) {
|
||||
p = hash_chains[hash];
|
||||
hash_counts[hash] = (int)ftell(f_out);
|
||||
|
||||
while (p != NULL) {
|
||||
length = *(p+sizeof(char *));
|
||||
length = *(uint8_t *)(p+sizeof(char *));
|
||||
fwrite(p+sizeof(char *), length, 1, f_out);
|
||||
memcpy(&p, p, sizeof(char *));
|
||||
}
|
||||
@@ -702,7 +697,7 @@ static int compile_dictlist_file(const char *path, const char *filename)
|
||||
FILE *f_in;
|
||||
char buf[200];
|
||||
char fname[sizeof(path_home)+45];
|
||||
char dict_line[200];
|
||||
char dict_line[256]; // length is uint8_t, so an entry can't take up more than 256 bytes
|
||||
|
||||
text_mode = 0;
|
||||
|
||||
@@ -725,8 +720,6 @@ static int compile_dictlist_file(const char *path, const char *filename)
|
||||
length = compile_line(buf, dict_line, sizeof(dict_line), &hash);
|
||||
if (length == 0) continue; // blank line
|
||||
|
||||
hash_counts[hash]++;
|
||||
|
||||
p = (char *)malloc(length+sizeof(char *));
|
||||
if (p == NULL) {
|
||||
if (f_log != NULL) {
|
||||
@@ -738,6 +731,7 @@ static int compile_dictlist_file(const char *path, const char *filename)
|
||||
|
||||
memcpy(p, &hash_chains[hash], sizeof(char *));
|
||||
hash_chains[hash] = p;
|
||||
// NOTE: dict_line[0] is the entry length (0-255)
|
||||
memcpy(p+sizeof(char *), dict_line, length);
|
||||
count++;
|
||||
}
|
||||
@@ -758,7 +752,7 @@ static int group3_ix;
|
||||
|
||||
#define N_RULES 3000 // max rules for each group
|
||||
|
||||
int isHexDigit(int c)
|
||||
static int isHexDigit(int c)
|
||||
{
|
||||
if ((c >= '0') && (c <= '9'))
|
||||
return c - '0';
|
||||
@@ -1165,7 +1159,7 @@ static char *compile_rule(char *input)
|
||||
return prule;
|
||||
}
|
||||
|
||||
int __cdecl string_sorter(char **a, char **b)
|
||||
static int __cdecl string_sorter(char **a, char **b)
|
||||
{
|
||||
char *pa, *pb;
|
||||
int ix;
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "error.h"
|
||||
#include "phoneme.h"
|
||||
#include "speech.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
|
||||
static const char *basename(const char *filename)
|
||||
|
||||
@@ -33,15 +33,13 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
int dictionary_skipwords;
|
||||
char dictionary_name[40];
|
||||
|
||||
extern void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len);
|
||||
extern char *DecodeRule(const char *group_chars, int group_length, char *rule, int control);
|
||||
|
||||
// accented characters which indicate (in some languages) the start of a separate syllable
|
||||
static const unsigned short diereses_list[7] = { 0xe4, 0xeb, 0xef, 0xf6, 0xfc, 0xff, 0 };
|
||||
|
||||
@@ -198,7 +196,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error)
|
||||
int *pw;
|
||||
int length;
|
||||
FILE *f;
|
||||
unsigned int size;
|
||||
int size;
|
||||
char fname[sizeof(path_home)+20];
|
||||
|
||||
strncpy(dictionary_name, name, 40); // currently loaded dictionary name
|
||||
@@ -254,7 +252,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error)
|
||||
|
||||
for (hash = 0; hash < N_HASH_DICT; hash++) {
|
||||
tr->dict_hashtab[hash] = p;
|
||||
while ((length = *p) != 0)
|
||||
while ((length = *(uint8_t *)p) != 0)
|
||||
p += length;
|
||||
p++; // skip over the zero which terminates the list for this hash value
|
||||
}
|
||||
@@ -1571,7 +1569,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
|
||||
int letter_w; // current letter, wide character
|
||||
int last_letter_w; // last letter, wide character
|
||||
int letter_xbytes; // number of extra bytes of multibyte character (num bytes - 1)
|
||||
unsigned char last_letter;
|
||||
|
||||
char *pre_ptr;
|
||||
char *post_ptr; // pointer to first character after group
|
||||
@@ -1627,7 +1624,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
|
||||
unpron_ignore = word_flags & FLAG_UNPRON_TEST;
|
||||
match_type = 0;
|
||||
consumed = 0;
|
||||
letter = 0;
|
||||
letter_w = 0;
|
||||
distance_right = -6; // used to reduce points for matches further away the current letter
|
||||
distance_left = -2;
|
||||
@@ -1732,7 +1728,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
|
||||
distance_right += 6;
|
||||
if (distance_right > 18)
|
||||
distance_right = 19;
|
||||
last_letter = letter;
|
||||
last_letter_w = letter_w;
|
||||
letter_xbytes = utf8_in(&letter_w, post_ptr)-1;
|
||||
letter = *post_ptr++;
|
||||
@@ -1939,7 +1934,6 @@ static void MatchRule(Translator *tr, char *word[], char *word_start, int group_
|
||||
if (distance_left > 18)
|
||||
distance_left = 19;
|
||||
|
||||
last_letter = *pre_ptr;
|
||||
utf8_in(&last_letter_w, pre_ptr);
|
||||
pre_ptr--;
|
||||
letter_xbytes = utf8_in2(&letter_w, pre_ptr, 1)-1;
|
||||
@@ -2719,7 +2713,7 @@ static const char *LookupDict2(Translator *tr, const char *word, const char *wor
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((dictionary_flags2 & FLAG_ATSTART) && !(wtab->flags & FLAG_FIRST_WORD)) {
|
||||
if ((dictionary_flags2 & FLAG_ATSTART) && !(wflags & FLAG_FIRST_WORD)) {
|
||||
// only use this pronunciation if it's the first word of a clause
|
||||
continue;
|
||||
}
|
||||
@@ -2894,7 +2888,7 @@ int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *f
|
||||
found = word2 + len;
|
||||
}
|
||||
|
||||
if (found == 0) {
|
||||
if (found == 0 && length >= 2) {
|
||||
ph_out[0] = 0;
|
||||
|
||||
// try modifications to find a recognised word
|
||||
@@ -3003,7 +2997,7 @@ int RemoveEnding(Translator *tr, char *word, int end_type, char *word_copy)
|
||||
int end_flags;
|
||||
const char *p;
|
||||
int len;
|
||||
char ending[50];
|
||||
char ending[50] = {0};
|
||||
|
||||
// these lists are language specific, but are only relevent if the 'e' suffix flag is used
|
||||
static const char *add_e_exceptions[] = {
|
||||
|
||||
@@ -26,43 +26,10 @@
|
||||
#include <espeak-ng/encoding.h>
|
||||
|
||||
#include "speech.h"
|
||||
|
||||
#define LEADING_2_BITS 0xC0 // 0b11000000
|
||||
#define UTF8_TAIL_BITS 0x80 // 0b10000000
|
||||
|
||||
int utf8_out(unsigned int c, char *buf)
|
||||
{
|
||||
// write a unicode character into a buffer as utf8
|
||||
// returns the number of bytes written
|
||||
|
||||
int n_bytes;
|
||||
int j;
|
||||
int shift;
|
||||
static char unsigned code[4] = { 0, 0xc0, 0xe0, 0xf0 };
|
||||
|
||||
if (c < 0x80) {
|
||||
buf[0] = c;
|
||||
return 1;
|
||||
}
|
||||
if (c >= 0x110000) {
|
||||
buf[0] = ' '; // out of range character code
|
||||
return 1;
|
||||
}
|
||||
if (c < 0x0800)
|
||||
n_bytes = 1;
|
||||
else if (c < 0x10000)
|
||||
n_bytes = 2;
|
||||
else
|
||||
n_bytes = 3;
|
||||
|
||||
shift = 6*n_bytes;
|
||||
buf[0] = code[n_bytes] | (c >> shift);
|
||||
for (j = 0; j < n_bytes; j++) {
|
||||
shift -= 6;
|
||||
buf[j+1] = 0x80 + ((c >> shift) & 0x3f);
|
||||
}
|
||||
return n_bytes+1;
|
||||
}
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
// http://www.iana.org/assignments/character-sets/character-sets.xhtml
|
||||
MNEM_TAB mnem_encoding[] = {
|
||||
@@ -654,6 +621,7 @@ string_decoder_getc_auto(espeak_ng_TEXT_DECODER *decoder)
|
||||
static uint32_t
|
||||
null_decoder_getc(espeak_ng_TEXT_DECODER *decoder)
|
||||
{
|
||||
(void)decoder; // unused parameter
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "error.h"
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
|
||||
espeak_ng_STATUS
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
#include "event.h"
|
||||
|
||||
+10
-10
@@ -66,8 +66,8 @@ static node *head = NULL;
|
||||
static node *tail = NULL;
|
||||
static int node_counter = 0;
|
||||
static espeak_ng_STATUS push(void *data);
|
||||
static void *pop();
|
||||
static void init();
|
||||
static void *pop(void);
|
||||
static void init(void);
|
||||
static void *polling_thread(void *);
|
||||
|
||||
void event_set_callback(t_espeak_callback *SynthCallback)
|
||||
@@ -257,7 +257,7 @@ static void *polling_thread(void *p)
|
||||
while (1) {
|
||||
int a_stop_is_required = 0;
|
||||
|
||||
int a_status = pthread_mutex_lock(&my_mutex);
|
||||
(void)pthread_mutex_lock(&my_mutex);
|
||||
my_event_is_running = 0;
|
||||
|
||||
while (my_start_is_required == 0) {
|
||||
@@ -284,16 +284,16 @@ static void *polling_thread(void *p)
|
||||
event->user_data = NULL;
|
||||
}
|
||||
|
||||
a_status = pthread_mutex_lock(&my_mutex);
|
||||
(void)pthread_mutex_lock(&my_mutex);
|
||||
event_delete((espeak_EVENT *)pop());
|
||||
a_stop_is_required = my_stop_is_required;
|
||||
if (a_stop_is_required > 0)
|
||||
my_stop_is_required = 0;
|
||||
|
||||
a_status = pthread_mutex_unlock(&my_mutex);
|
||||
(void)pthread_mutex_unlock(&my_mutex);
|
||||
}
|
||||
|
||||
a_status = pthread_mutex_lock(&my_mutex);
|
||||
(void)pthread_mutex_lock(&my_mutex);
|
||||
|
||||
my_event_is_running = 0;
|
||||
|
||||
@@ -303,7 +303,7 @@ static void *polling_thread(void *p)
|
||||
my_stop_is_required = 0;
|
||||
}
|
||||
|
||||
a_status = pthread_mutex_unlock(&my_mutex);
|
||||
(void)pthread_mutex_unlock(&my_mutex);
|
||||
|
||||
if (a_stop_is_required > 0) {
|
||||
// no mutex required since the stop command is synchronous
|
||||
@@ -311,10 +311,10 @@ static void *polling_thread(void *p)
|
||||
init();
|
||||
|
||||
// acknowledge the stop request
|
||||
espeak_ng_STATUS a_status = pthread_mutex_lock(&my_mutex);
|
||||
(void)pthread_mutex_lock(&my_mutex);
|
||||
my_stop_is_acknowledged = 1;
|
||||
a_status = pthread_cond_signal(&my_cond_stop_is_acknowledged);
|
||||
a_status = pthread_mutex_unlock(&my_mutex);
|
||||
(void)pthread_cond_signal(&my_cond_stop_is_acknowledged);
|
||||
(void)pthread_mutex_unlock(&my_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -52,14 +52,14 @@ void event_init(void);
|
||||
void event_set_callback(t_espeak_callback *cb);
|
||||
|
||||
// Clear any pending event.
|
||||
espeak_ng_STATUS event_clear_all();
|
||||
espeak_ng_STATUS event_clear_all(void);
|
||||
|
||||
// Declare a future event
|
||||
espeak_ng_STATUS event_declare(espeak_EVENT *event);
|
||||
|
||||
// Terminate the event component.
|
||||
// Last function to be called.
|
||||
void event_terminate();
|
||||
void event_terminate(void);
|
||||
|
||||
// general functions
|
||||
void clock_gettime2(struct timespec *ts);
|
||||
|
||||
@@ -58,7 +58,7 @@ static int my_stop_is_acknowledged = 0;
|
||||
static void *say_thread(void *);
|
||||
|
||||
static espeak_ng_STATUS push(t_espeak_command *the_command);
|
||||
static t_espeak_command *pop();
|
||||
static t_espeak_command *pop(void);
|
||||
static void init(int process_parameters);
|
||||
static int node_counter = 0;
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ extern "C"
|
||||
|
||||
// Initialize the fifo component.
|
||||
// First function to be called.
|
||||
void fifo_init();
|
||||
void fifo_init(void);
|
||||
|
||||
// Add an espeak command.
|
||||
//
|
||||
@@ -44,15 +44,15 @@ espeak_ng_STATUS fifo_add_command(t_espeak_command *c);
|
||||
espeak_ng_STATUS fifo_add_commands(t_espeak_command *c1, t_espeak_command *c2);
|
||||
|
||||
// The current running command must be stopped and the awaiting commands are cleared.
|
||||
espeak_ng_STATUS fifo_stop();
|
||||
espeak_ng_STATUS fifo_stop(void);
|
||||
|
||||
// Is there a running command?
|
||||
// Returns 1 if yes; 0 otherwise.
|
||||
int fifo_is_busy();
|
||||
int fifo_is_busy(void);
|
||||
|
||||
// Terminate the fifo component.
|
||||
// Last function to be called.
|
||||
void fifo_terminate();
|
||||
void fifo_terminate(void);
|
||||
|
||||
// Indicates if the running command is still enabled.
|
||||
//
|
||||
@@ -61,7 +61,7 @@ void fifo_terminate();
|
||||
// stopping speech as soon as a cancel command is applied.
|
||||
//
|
||||
// Returns 1 if yes, or 0 otherwise.
|
||||
int fifo_is_command_enabled();
|
||||
int fifo_is_command_enabled(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -49,15 +49,10 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include "ieee80.h"
|
||||
|
||||
typedef float Single;
|
||||
|
||||
#ifndef applec
|
||||
typedef double defdouble;
|
||||
#else applec
|
||||
typedef long double defdouble;
|
||||
#endif applec
|
||||
|
||||
#ifndef THINK_C
|
||||
typedef double Double;
|
||||
#else THINK_C
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/* Copyright (C) 1989-1991 Apple Computer, Inc.
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Warranty Information
|
||||
* Even though Apple has reviewed this software, Apple makes no warranty
|
||||
* or representation, either express or implied, with respect to this
|
||||
* software, its quality, accuracy, merchantability, or fitness for a
|
||||
* particular purpose. As a result, this software is provided "as is,"
|
||||
* and you, its user, are assuming the entire risk as to its quality
|
||||
* and accuracy.
|
||||
*
|
||||
* This code may be used and freely distributed as long as it includes
|
||||
* this copyright notice and the above warranty information.
|
||||
*
|
||||
* Machine-independent I/O routines for IEEE floating-point numbers.
|
||||
*
|
||||
* NaN's and infinities are converted to HUGE_VAL or HUGE, which
|
||||
* happens to be infinity on IEEE machines. Unfortunately, it is
|
||||
* impossible to preserve NaN's in a machine-independent way.
|
||||
* Infinities are, however, preserved on IEEE machines.
|
||||
*
|
||||
* These routines have been tested on the following machines:
|
||||
* Apple Macintosh, MPW 3.1 C compiler
|
||||
* Apple Macintosh, THINK C compiler
|
||||
* Silicon Graphics IRIS, MIPS compiler
|
||||
* Cray X/MP and Y/MP
|
||||
* Digital Equipment VAX
|
||||
* Sequent Balance (Multiprocesor 386)
|
||||
* NeXT
|
||||
*
|
||||
*
|
||||
* Implemented by Malcolm Slaney and Ken Turkowski.
|
||||
*
|
||||
* Malcolm Slaney contributions during 1988-1990 include big- and little-
|
||||
* endian file I/O, conversion to and from Motorola's extended 80-bit
|
||||
* floating-point format, and conversions to and from IEEE single-
|
||||
* precision floating-point format.
|
||||
*
|
||||
* In 1991, Ken Turkowski implemented the conversions to and from
|
||||
* IEEE double-precision format, added more precision to the extended
|
||||
* conversions, and accommodated conversions involving +/- infinity,
|
||||
* NaN's, and denormalized numbers.
|
||||
*/
|
||||
#ifndef IEEE_H
|
||||
#define IEEE_H
|
||||
|
||||
#ifndef applec
|
||||
typedef double defdouble;
|
||||
#else applec
|
||||
typedef long double defdouble;
|
||||
#endif applec
|
||||
|
||||
defdouble ConvertFromIeeeSingle( char *bytes);
|
||||
defdouble ConvertFromIeeeDouble( char *bytes);
|
||||
defdouble ConvertFromIeeeExtended(char *bytes);
|
||||
|
||||
void ConvertToIeeeSingle( defdouble num, char *bytes);
|
||||
void ConvertToIeeeDouble( defdouble num, char *bytes);
|
||||
void ConvertToIeeeExtended(defdouble num, char *bytes);
|
||||
|
||||
#endif
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
/* Note this module is mostly old code that needs to be rewritten to
|
||||
@@ -949,8 +949,8 @@ void CalcPitches(Translator *tr, int clause_type)
|
||||
n_primary = 0;
|
||||
for (ix = 0; ix < (n_phoneme_list-1); ix++) {
|
||||
p = &phoneme_list[ix];
|
||||
syllable_tab[ix].flags = 0;
|
||||
if (p->synthflags & SFLAG_SYLLABLE) {
|
||||
syllable_tab[n_st].flags = 0;
|
||||
syllable_tab[n_st].env = PITCHfall;
|
||||
syllable_tab[n_st].nextph_type = phoneme_list[ix+1].type;
|
||||
syllable_tab[n_st++].stress = p->stresslevel;
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
#include <espeak-ng/speak_lib.h>
|
||||
|
||||
#include "speech.h"
|
||||
#include "klatt.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "klatt.h"
|
||||
|
||||
extern unsigned char *out_ptr;
|
||||
extern unsigned char *out_start;
|
||||
@@ -846,7 +846,7 @@ static int klattp[N_KLATTP];
|
||||
static double klattp1[N_KLATTP];
|
||||
static double klattp_inc[N_KLATTP];
|
||||
|
||||
int Wavegen_Klatt(int resume)
|
||||
static int Wavegen_Klatt(int resume)
|
||||
{
|
||||
int pk;
|
||||
int x;
|
||||
@@ -935,7 +935,7 @@ int Wavegen_Klatt(int resume)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SetSynth_Klatt(int length, frame_t *fr1, frame_t *fr2, voice_t *v, int control)
|
||||
static void SetSynth_Klatt(int length, frame_t *fr1, frame_t *fr2, voice_t *v, int control)
|
||||
{
|
||||
int ix;
|
||||
DOUBLEX next;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Copyright (C) 2008 by Jonathan Duddington
|
||||
* email: jonsd@users.sourceforge.net
|
||||
* Copyright (C) 2015 Reece H. Dunn
|
||||
* Copyright (C) 2015-2017 Reece H. Dunn
|
||||
*
|
||||
* Based on a re-implementation by:
|
||||
* (c) 1993,94 Jon Iles and Nick Ing-Simmons
|
||||
@@ -171,6 +171,10 @@ typedef struct {
|
||||
DOUBLEX bp_inc;
|
||||
} klatt_peaks_t;
|
||||
|
||||
void KlattInit(void);
|
||||
void KlattReset(int control);
|
||||
int Wavegen_Klatt2(int length, int resume, frame_t *fr1, frame_t *fr2);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
+24
-13
@@ -20,11 +20,24 @@
|
||||
#include "config.h"
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include "mbrowrap.h"
|
||||
|
||||
int (WINAPI *init_MBR)(char *voice_path);
|
||||
void (WINAPI *close_MBR)(void);
|
||||
void (WINAPI *reset_MBR)(void);
|
||||
int (WINAPI *read_MBR)(short *buffer, int nb_samples);
|
||||
int (WINAPI *write_MBR)(char *data);
|
||||
int (WINAPI *flush_MBR)(void);
|
||||
int (WINAPI *getFreq_MBR)(void);
|
||||
void (WINAPI *setVolumeRatio_MBR)(float value);
|
||||
char * (WINAPI *lastErrorStr_MBR)(char *buffer, int bufsize);
|
||||
void (WINAPI *setNoError_MBR)(int no_error);
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
|
||||
HINSTANCE hinstDllMBR = NULL;
|
||||
|
||||
BOOL load_MBR()
|
||||
@@ -69,8 +82,6 @@ void unload_MBR()
|
||||
#include <unistd.h>
|
||||
|
||||
#include <espeak-ng/espeak_ng.h>
|
||||
|
||||
#include "mbrowrap.h"
|
||||
#include "speech.h"
|
||||
|
||||
/*
|
||||
@@ -508,7 +519,7 @@ static ssize_t receive_from_mbrola(void *buffer, size_t bufsize)
|
||||
* API functions.
|
||||
*/
|
||||
|
||||
int init_mbrola(char *voice_path)
|
||||
static int init_mbrola(char *voice_path)
|
||||
{
|
||||
int error, result;
|
||||
unsigned char wavhdr[45];
|
||||
@@ -551,7 +562,7 @@ int init_mbrola(char *voice_path)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void close_mbrola(void)
|
||||
static void close_mbrola(void)
|
||||
{
|
||||
stop_mbrola();
|
||||
free_pending_data();
|
||||
@@ -560,7 +571,7 @@ void close_mbrola(void)
|
||||
mbr_volume = 1.0;
|
||||
}
|
||||
|
||||
void reset_mbrola(void)
|
||||
static void reset_mbrola(void)
|
||||
{
|
||||
int result, success = 1;
|
||||
char dummybuf[4096];
|
||||
@@ -584,7 +595,7 @@ void reset_mbrola(void)
|
||||
mbr_state = MBR_IDLE;
|
||||
}
|
||||
|
||||
int read_mbrola(short *buffer, int nb_samples)
|
||||
static int read_mbrola(short *buffer, int nb_samples)
|
||||
{
|
||||
int result = receive_from_mbrola(buffer, nb_samples * 2);
|
||||
if (result > 0)
|
||||
@@ -592,23 +603,23 @@ int read_mbrola(short *buffer, int nb_samples)
|
||||
return result;
|
||||
}
|
||||
|
||||
int write_mbrola(char *data)
|
||||
static int write_mbrola(char *data)
|
||||
{
|
||||
mbr_state = MBR_NEWDATA;
|
||||
return send_to_mbrola(data);
|
||||
}
|
||||
|
||||
int flush_mbrola(void)
|
||||
static int flush_mbrola(void)
|
||||
{
|
||||
return send_to_mbrola("\n#\n") == 3;
|
||||
}
|
||||
|
||||
int getFreq_mbrola(void)
|
||||
static int getFreq_mbrola(void)
|
||||
{
|
||||
return mbr_samplerate;
|
||||
}
|
||||
|
||||
void setVolumeRatio_mbrola(float value)
|
||||
static void setVolumeRatio_mbrola(float value)
|
||||
{
|
||||
if (value == mbr_volume)
|
||||
return;
|
||||
@@ -623,7 +634,7 @@ void setVolumeRatio_mbrola(float value)
|
||||
init_MBR(mbr_voice_path);
|
||||
}
|
||||
|
||||
char *lastErrorStr_mbrola(char *buffer, int bufsize)
|
||||
static char *lastErrorStr_mbrola(char *buffer, int bufsize)
|
||||
{
|
||||
if (mbr_pid)
|
||||
mbrola_has_errors();
|
||||
@@ -631,7 +642,7 @@ char *lastErrorStr_mbrola(char *buffer, int bufsize)
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void setNoError_mbrola(int no_error)
|
||||
static void setNoError_mbrola(int no_error)
|
||||
{
|
||||
(void)no_error; // unused
|
||||
}
|
||||
|
||||
+10
-10
@@ -37,20 +37,20 @@ typedef int BOOL;
|
||||
* error reason. If this is successful, then close_MBR() must be called
|
||||
* before init_MBR() can be called again.
|
||||
*/
|
||||
int (WINAPI *init_MBR)(char *voice_path);
|
||||
extern int (WINAPI *init_MBR)(char *voice_path);
|
||||
|
||||
/*
|
||||
* Stop mbrola and release any resources. It is necessary to call
|
||||
* this after a successful call to init_MBR() before init_MBR() can be
|
||||
* called again.
|
||||
*/
|
||||
void (WINAPI *close_MBR)(void);
|
||||
extern void (WINAPI *close_MBR)(void);
|
||||
|
||||
/*
|
||||
* Stop any ongoing processing and flush all buffers. After this call
|
||||
* any synthesis request will start afresh.
|
||||
*/
|
||||
void (WINAPI *reset_MBR)(void);
|
||||
extern void (WINAPI *reset_MBR)(void);
|
||||
|
||||
/*
|
||||
* Return at most 'nb_samples' audio samples into 'buffer'. The returned
|
||||
@@ -58,14 +58,14 @@ void (WINAPI *reset_MBR)(void);
|
||||
* If not successful, lastErrorStr_MBR() will provide the error reason.
|
||||
* Samples are always 16-bit little endian.
|
||||
*/
|
||||
int (WINAPI *read_MBR)(short *buffer, int nb_samples);
|
||||
extern int (WINAPI *read_MBR)(short *buffer, int nb_samples);
|
||||
|
||||
/*
|
||||
* Write a NULL terminated string of phoneme in the input buffer.
|
||||
* Return the number of chars actually written, or -1 on error.
|
||||
* If not successful, lastErrorStr_MBR() will provide the error reason.
|
||||
*/
|
||||
int (WINAPI *write_MBR)(char *data);
|
||||
extern int (WINAPI *write_MBR)(char *data);
|
||||
|
||||
/*
|
||||
* Send a flush command to the mbrola input stream.
|
||||
@@ -73,17 +73,17 @@ int (WINAPI *write_MBR)(char *data);
|
||||
* or 0 on failure. If not successful, lastErrorStr_MBR() will provide
|
||||
* the error reason.
|
||||
*/
|
||||
int (WINAPI *flush_MBR)(void);
|
||||
extern int (WINAPI *flush_MBR)(void);
|
||||
|
||||
/*
|
||||
* Return the audio sample frequency of the used voice database.
|
||||
*/
|
||||
int (WINAPI *getFreq_MBR)(void);
|
||||
extern int (WINAPI *getFreq_MBR)(void);
|
||||
|
||||
/*
|
||||
* Overall volume.
|
||||
*/
|
||||
void (WINAPI *setVolumeRatio_MBR)(float value);
|
||||
extern void (WINAPI *setVolumeRatio_MBR)(float value);
|
||||
|
||||
/*
|
||||
* Copy into 'buffer' at most 'bufsize' bytes from the latest error
|
||||
@@ -91,12 +91,12 @@ void (WINAPI *setVolumeRatio_MBR)(float value);
|
||||
* no error message is pending then an empty string is returned.
|
||||
* Consecutive calls to lastErrorStr_MBR() will return the same message.
|
||||
*/
|
||||
char * (WINAPI *lastErrorStr_MBR)(char *buffer, int bufsize);
|
||||
extern char * (WINAPI *lastErrorStr_MBR)(char *buffer, int bufsize);
|
||||
|
||||
/*
|
||||
* Tolerance to missing diphones.
|
||||
*/
|
||||
void (WINAPI *setNoError_MBR)(int no_error);
|
||||
extern void (WINAPI *setNoError_MBR)(int no_error);
|
||||
|
||||
BOOL load_MBR(void);
|
||||
void unload_MBR(void);
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
#define M_LIGATURE 0x8000
|
||||
@@ -548,7 +548,7 @@ static const int number_ranges[] = {
|
||||
0
|
||||
};
|
||||
|
||||
int NonAsciiNumber(int letter)
|
||||
static int NonAsciiNumber(int letter)
|
||||
{
|
||||
// Change non-ascii digit into ascii digit '0' to '9', (or -1 if not)
|
||||
const int *p;
|
||||
@@ -1711,7 +1711,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CheckThousandsGroup(char *word, int group_len)
|
||||
static bool CheckThousandsGroup(char *word, int group_len)
|
||||
{
|
||||
// Is this a group of 3 digits which looks like a thousands group?
|
||||
int ix;
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
|
||||
@@ -34,12 +34,13 @@
|
||||
#include <espeak-ng/espeak_ng.h>
|
||||
#include <espeak-ng/speak_lib.h>
|
||||
#include <espeak-ng/encoding.h>
|
||||
#include <ucd/ucd.h>
|
||||
|
||||
#include "error.h"
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
#define N_XML_BUF 500
|
||||
@@ -89,6 +90,55 @@ PARAM_STACK param_stack[N_PARAM_STACK];
|
||||
static int speech_parameters[N_SPEECH_PARAM]; // current values, from param_stack
|
||||
int saved_parameters[N_SPEECH_PARAM]; // Parameters saved on synthesis start
|
||||
|
||||
#define ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK 0xFFF0000000000000ull
|
||||
|
||||
int clause_type_from_codepoint(uint32_t c)
|
||||
{
|
||||
ucd_category cat = ucd_lookup_category(c);
|
||||
ucd_property props = ucd_properties(c, cat);
|
||||
|
||||
switch (props & ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK)
|
||||
{
|
||||
case ESPEAKNG_PROPERTY_FULL_STOP:
|
||||
return CLAUSE_PERIOD;
|
||||
case ESPEAKNG_PROPERTY_FULL_STOP | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK:
|
||||
return CLAUSE_QUESTION;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD:
|
||||
return CLAUSE_QUESTION | CLAUSE_PUNCTUATION_IN_WORD;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK:
|
||||
return CLAUSE_EXCLAMATION;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_EXCLAMATION | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD:
|
||||
return CLAUSE_EXCLAMATION | CLAUSE_PUNCTUATION_IN_WORD;
|
||||
case ESPEAKNG_PROPERTY_COMMA:
|
||||
return CLAUSE_COMMA;
|
||||
case ESPEAKNG_PROPERTY_COMMA | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_COMMA | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_COLON:
|
||||
return CLAUSE_COLON;
|
||||
case ESPEAKNG_PROPERTY_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_COLON | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_SEMI_COLON:
|
||||
case ESPEAKNG_PROPERTY_EXTENDED_DASH:
|
||||
return CLAUSE_SEMICOLON;
|
||||
case ESPEAKNG_PROPERTY_SEMI_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION:
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION:
|
||||
return CLAUSE_SEMICOLON | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_ELLIPSIS:
|
||||
return CLAUSE_SEMICOLON | CLAUSE_SPEAK_PUNCTUATION_NAME | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_PARAGRAPH_SEPARATOR:
|
||||
return CLAUSE_PARAGRAPH;
|
||||
}
|
||||
|
||||
return CLAUSE_NONE;
|
||||
}
|
||||
|
||||
const int param_defaults[N_SPEECH_PARAM] = {
|
||||
0, // silence (internal use)
|
||||
175, // rate wpm
|
||||
@@ -113,7 +163,7 @@ int towlower2(unsigned int c)
|
||||
if (c == 'I' && translator->langopts.dotless_i)
|
||||
return 0x131; // I -> ı
|
||||
|
||||
return towlower(c);
|
||||
return ucd_tolower(c);
|
||||
}
|
||||
|
||||
static int IsRomanU(unsigned int c)
|
||||
@@ -134,7 +184,6 @@ int Eof(void)
|
||||
static int GetC(void)
|
||||
{
|
||||
int c1;
|
||||
static int ungot2 = 0;
|
||||
|
||||
if ((c1 = ungot_char) != 0) {
|
||||
ungot_char = 0;
|
||||
@@ -792,7 +841,7 @@ static int attrnumber(const wchar_t *pw, int default_value, int type)
|
||||
|
||||
while (IsDigit09(*pw))
|
||||
value = value*10 + *pw++ - '0';
|
||||
if ((type == 1) && (towlower(*pw) == 's')) {
|
||||
if ((type == 1) && (ucd_tolower(*pw) == 's')) {
|
||||
// time: seconds rather than ms
|
||||
value *= 1000;
|
||||
}
|
||||
@@ -869,7 +918,7 @@ static int attr_prosody_value(int param_type, const wchar_t *pw, int *value_out)
|
||||
return sign; // -1, 0, or 1
|
||||
}
|
||||
|
||||
int AddNameData(const char *name, int wide)
|
||||
static int AddNameData(const char *name, int wide)
|
||||
{
|
||||
// Add the name to the namedata and return its position
|
||||
// (Used by the Windows SAPI wrapper)
|
||||
|
||||
@@ -30,12 +30,10 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
extern int GetAmplitude(void);
|
||||
extern void DoSonicSpeed(int value);
|
||||
extern int saved_parameters[];
|
||||
|
||||
// convert from words-per-minute to internal speed factor
|
||||
|
||||
@@ -32,12 +32,10 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "spect.h"
|
||||
|
||||
extern double ConvertFromIeeeExtended(unsigned char *bytes);
|
||||
extern int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control);
|
||||
#include "ieee80.h"
|
||||
|
||||
extern unsigned char pk_shape1[];
|
||||
extern int pk_select;
|
||||
@@ -57,7 +55,7 @@ static double read_double(FILE *stream)
|
||||
{
|
||||
unsigned char bytes[10];
|
||||
fread(bytes, sizeof(char), 10, stream);
|
||||
return ConvertFromIeeeExtended(bytes);
|
||||
return ConvertFromIeeeExtended((char *)bytes);
|
||||
}
|
||||
|
||||
float polint(float xa[], float ya[], int n, float x)
|
||||
|
||||
@@ -22,6 +22,8 @@ extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
float polint(float xa[], float ya[], int n, float x);
|
||||
|
||||
#define FRAME_WIDTH 1000 // max width for 8000kHz frame
|
||||
#define MAX_DISPLAY_FREQ 9500
|
||||
#define FRAME_HEIGHT 240
|
||||
@@ -124,7 +126,7 @@ typedef struct {
|
||||
int file_format;
|
||||
} SpectSeq;
|
||||
|
||||
SpectSeq *SpectSeqCreate();
|
||||
SpectSeq *SpectSeqCreate(void);
|
||||
void SpectSeqDestroy(SpectSeq *spect);
|
||||
espeak_ng_STATUS LoadSpectSeq(SpectSeq *spect, const char *filename);
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
#include "espeak_command.h"
|
||||
#include "fifo.h"
|
||||
@@ -400,7 +400,7 @@ static espeak_ng_STATUS Synthesize(unsigned int unique_identifier, const void *t
|
||||
|
||||
espeak_ng_STATUS status;
|
||||
if (translator == NULL) {
|
||||
status = espeak_SetVoiceByName("en");
|
||||
status = espeak_ng_SetVoiceByName("en");
|
||||
if (status != ENS_OK)
|
||||
return status;
|
||||
}
|
||||
@@ -876,9 +876,6 @@ ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Synchronize(void)
|
||||
return berr;
|
||||
}
|
||||
|
||||
extern void FreePhData(void);
|
||||
extern void FreeVoiceList(void);
|
||||
|
||||
ESPEAK_NG_API espeak_ng_STATUS espeak_ng_Terminate(void)
|
||||
{
|
||||
#ifdef USE_ASYNC
|
||||
|
||||
@@ -33,14 +33,13 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
#include "voice.h"
|
||||
|
||||
#ifdef INCLUDE_MBROLA
|
||||
|
||||
extern int Read4Bytes(FILE *f);
|
||||
extern void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range);
|
||||
extern unsigned char *outbuf;
|
||||
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
@@ -573,16 +572,25 @@ void MbrolaReset(void)
|
||||
|
||||
espeak_ng_STATUS LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int *srate)
|
||||
{
|
||||
(void)mbrola_voice; // unused parameter
|
||||
(void)phtrans; // unused parameter
|
||||
(void)srate; // unused parameter
|
||||
return ENS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
int MbrolaGenerate(PHONEME_LIST *phoneme_list, int *n_ph, int resume)
|
||||
{
|
||||
(void)phoneme_list; // unused parameter
|
||||
(void)n_ph; // unused parameter
|
||||
(void)resume; // unused parameter
|
||||
return 0;
|
||||
}
|
||||
|
||||
int MbrolaFill(int length, int resume, int amplitude)
|
||||
{
|
||||
(void)length; // unused parameter
|
||||
(void)resume; // unused parameter
|
||||
(void)amplitude; // unused parameter
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
#include "error.h"
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
const char *version_string = PACKAGE_VERSION;
|
||||
@@ -66,14 +66,12 @@ int vowel_transition[4];
|
||||
int vowel_transition0;
|
||||
int vowel_transition1;
|
||||
|
||||
int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which);
|
||||
|
||||
static espeak_ng_STATUS ReadPhFile(void **ptr, const char *fname, int *size, espeak_ng_ERROR_CONTEXT *context)
|
||||
{
|
||||
if (!ptr) return EINVAL;
|
||||
|
||||
FILE *f_in;
|
||||
unsigned int length;
|
||||
int length;
|
||||
char buf[sizeof(path_home)+40];
|
||||
|
||||
sprintf(buf, "%s%c%s", path_home, PATHSEP, fname);
|
||||
@@ -112,7 +110,6 @@ espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context)
|
||||
int length = 0;
|
||||
int rate;
|
||||
unsigned char *p;
|
||||
int *pw;
|
||||
|
||||
espeak_ng_STATUS status;
|
||||
if ((status = ReadPhFile((void **)&phoneme_tab_data, "phontab", NULL, context)) != ENS_OK)
|
||||
@@ -508,7 +505,6 @@ static bool InterpretCondition(Translator *tr, int control, PHONEME_LIST *plist,
|
||||
unsigned int data;
|
||||
int instn;
|
||||
int instn2;
|
||||
int count;
|
||||
int check_endtype = 0;
|
||||
PHONEME_TAB *ph;
|
||||
PHONEME_LIST *plist_this;
|
||||
@@ -760,7 +756,7 @@ int NumInstnWords(USHORT *prog)
|
||||
// This instruction is followed by addWav(), 2 more words
|
||||
return 4;
|
||||
}
|
||||
if (instn2 == OPCODE_CONTINUE)
|
||||
if (instn2 == INSTN_CONTINUE)
|
||||
return 3;
|
||||
return 2;
|
||||
}
|
||||
@@ -817,10 +813,10 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_
|
||||
// instructions with no operand
|
||||
switch (data)
|
||||
{
|
||||
case OPCODE_RETURN:
|
||||
case INSTN_RETURN:
|
||||
end_flag = 1;
|
||||
break;
|
||||
case OPCODE_CONTINUE:
|
||||
case INSTN_CONTINUE:
|
||||
break;
|
||||
default:
|
||||
InvalidInstn(ph, instn);
|
||||
@@ -958,7 +954,7 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_
|
||||
param_sc = phdata->sound_param[instn2] = (instn >> 4) & 0xff;
|
||||
prog++;
|
||||
|
||||
if (prog[1] != OPCODE_CONTINUE) {
|
||||
if (prog[1] != INSTN_CONTINUE) {
|
||||
if (instn2 < 2) {
|
||||
// FMT() and WAV() imply Return
|
||||
end_flag = 1;
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
extern FILE *f_log;
|
||||
|
||||
@@ -74,7 +74,6 @@ extern "C"
|
||||
extern int embedded_value[N_EMBEDDED_VALUES];
|
||||
extern int embedded_default[N_EMBEDDED_VALUES];
|
||||
|
||||
#define N_PEAKS 9
|
||||
#define N_PEAKS2 9 // plus Notch and Fill (not yet implemented)
|
||||
#define N_MARKERS 8
|
||||
|
||||
@@ -268,8 +267,8 @@ typedef struct {
|
||||
|
||||
// instructions
|
||||
|
||||
#define OPCODE_RETURN 0x0001
|
||||
#define OPCODE_CONTINUE 0x0002
|
||||
#define INSTN_RETURN 0x0001
|
||||
#define INSTN_CONTINUE 0x0002
|
||||
|
||||
// Group 0 instrcutions with 8 bit operand. These values go into bits 8-15 of the instruction
|
||||
#define i_CHANGE_PHONEME 0x01
|
||||
@@ -453,14 +452,16 @@ extern int wcmdq_head;
|
||||
extern int wcmdq_tail;
|
||||
|
||||
// from Wavegen file
|
||||
int WcmdqFree();
|
||||
void WcmdqStop();
|
||||
int WcmdqUsed();
|
||||
void WcmdqInc();
|
||||
int WcmdqFree(void);
|
||||
void WcmdqStop(void);
|
||||
int WcmdqUsed(void);
|
||||
void WcmdqInc(void);
|
||||
void WavegenInit(int rate, int wavemult_fact);
|
||||
float polint(float xa[], float ya[], int n, float x);
|
||||
int WavegenFill();
|
||||
int WavegenFill(void);
|
||||
void MarkerEvent(int type, unsigned int char_position, int value, int value2, unsigned char *out_ptr);
|
||||
int GetAmplitude(void);
|
||||
void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pitch_range);
|
||||
int PeaksToHarmspect(wavegen_peaks_t *peaks, int pitch, int *htab, int control);
|
||||
|
||||
extern unsigned char *wavefile_data;
|
||||
extern int samplerate;
|
||||
@@ -485,6 +486,7 @@ extern char mbrola_name[20];
|
||||
// from synthdata file
|
||||
unsigned int LookupSound(PHONEME_TAB *ph1, PHONEME_TAB *ph2, int which, int *match_level, int control);
|
||||
frameref_t *LookupSpect(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, int *n_frames, PHONEME_LIST *plist);
|
||||
void FreePhData(void);
|
||||
|
||||
unsigned char *LookupEnvelope(int ix);
|
||||
espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context);
|
||||
@@ -497,11 +499,16 @@ void SetSpeed(int control);
|
||||
void SetEmbedded(int control, int value);
|
||||
void SelectPhonemeTable(int number);
|
||||
int SelectPhonemeTableName(const char *name);
|
||||
int FormantTransition2(frameref_t *seq, int *n_frames, unsigned int data1, unsigned int data2, PHONEME_TAB *other_ph, int which);
|
||||
|
||||
void Write4Bytes(FILE *f, int value);
|
||||
int Read4Bytes(FILE *f);
|
||||
int Reverse4Bytes(int word);
|
||||
|
||||
#if HAVE_SONIC_H
|
||||
void DoSonicSpeed(int value);
|
||||
#endif
|
||||
|
||||
#define ENV_LEN 128 // length of pitch envelopes
|
||||
#define PITCHfall 0 // standard pitch envelopes
|
||||
#define PITCHrise 2
|
||||
@@ -545,10 +552,6 @@ int NumInstnWords(USHORT *prog);
|
||||
|
||||
void InitBreath(void);
|
||||
|
||||
void KlattInit();
|
||||
void KlattReset(int control);
|
||||
int Wavegen_Klatt2(int length, int resume, frame_t *fr1, frame_t *fr2);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,410 +0,0 @@
|
||||
/* Tokenizer APIs.
|
||||
*
|
||||
* Copyright (C) 2017 Reece H. Dunn
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, see: <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <espeak-ng/espeak_ng.h>
|
||||
#include <espeak-ng/encoding.h>
|
||||
#include <espeak-ng/tokenizer.h>
|
||||
#include <ucd/ucd.h>
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
#define ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK 0xFFF0000000000000ull
|
||||
|
||||
int clause_type_from_codepoint(uint32_t c)
|
||||
{
|
||||
ucd_category cat = ucd_lookup_category(c);
|
||||
ucd_property props = ucd_properties(c, cat);
|
||||
|
||||
switch (props & ESPEAKNG_CLAUSE_TYPE_PROPERTY_MASK)
|
||||
{
|
||||
case ESPEAKNG_PROPERTY_FULL_STOP:
|
||||
return CLAUSE_PERIOD;
|
||||
case ESPEAKNG_PROPERTY_FULL_STOP | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_PERIOD | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK:
|
||||
return CLAUSE_QUESTION;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_QUESTION | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD:
|
||||
return CLAUSE_QUESTION | CLAUSE_PUNCTUATION_IN_WORD;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK:
|
||||
return CLAUSE_EXCLAMATION;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_EXCLAMATION | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_PUNCTUATION_IN_WORD:
|
||||
return CLAUSE_EXCLAMATION | CLAUSE_PUNCTUATION_IN_WORD;
|
||||
case ESPEAKNG_PROPERTY_COMMA:
|
||||
return CLAUSE_COMMA;
|
||||
case ESPEAKNG_PROPERTY_COMMA | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_COMMA | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_COLON:
|
||||
return CLAUSE_COLON;
|
||||
case ESPEAKNG_PROPERTY_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
return CLAUSE_COLON | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_SEMI_COLON:
|
||||
case ESPEAKNG_PROPERTY_EXTENDED_DASH:
|
||||
return CLAUSE_SEMICOLON;
|
||||
case ESPEAKNG_PROPERTY_SEMI_COLON | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER:
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION:
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK | ESPEAKNG_PROPERTY_OPTIONAL_SPACE_AFTER | ESPEAKNG_PROPERTY_INVERTED_TERMINAL_PUNCTUATION:
|
||||
return CLAUSE_SEMICOLON | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_ELLIPSIS:
|
||||
return CLAUSE_SEMICOLON | CLAUSE_SPEAK_PUNCTUATION_NAME | CLAUSE_OPTIONAL_SPACE_AFTER;
|
||||
case ESPEAKNG_PROPERTY_PARAGRAPH_SEPARATOR:
|
||||
return CLAUSE_PARAGRAPH;
|
||||
}
|
||||
|
||||
return CLAUSE_NONE;
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
ESPEAKNG_CTYPE_OTHER,
|
||||
ESPEAKNG_CTYPE_CARRIAGE_RETURN,
|
||||
ESPEAKNG_CTYPE_NEWLINE,
|
||||
ESPEAKNG_CTYPE_END_OF_STRING,
|
||||
ESPEAKNG_CTYPE_PARAGRAPH,
|
||||
ESPEAKNG_CTYPE_WHITESPACE,
|
||||
ESPEAKNG_CTYPE_LOWERCASE,
|
||||
ESPEAKNG_CTYPE_UPPERCASE,
|
||||
ESPEAKNG_CTYPE_FULL_STOP,
|
||||
ESPEAKNG_CTYPE_QUESTION_MARK,
|
||||
ESPEAKNG_CTYPE_EXCLAMATION_MARK,
|
||||
ESPEAKNG_CTYPE_COMMA,
|
||||
ESPEAKNG_CTYPE_COLON,
|
||||
ESPEAKNG_CTYPE_SEMICOLON,
|
||||
ESPEAKNG_CTYPE_ELLIPSIS,
|
||||
ESPEAKNG_CTYPE_PUNCTUATION,
|
||||
ESPEAKNG_CTYPE_SYMBOL,
|
||||
} espeakng_CTYPE;
|
||||
|
||||
#define ESPEAKNG_CTYPE_PROPERTY_MASK 0xFE0000000000C001ull
|
||||
|
||||
// Reference: http://www.unicode.org/reports/tr14/tr14-32.html -- Unicode Line Breaking Algorithm
|
||||
static espeakng_CTYPE codepoint_type(uint32_t c)
|
||||
{
|
||||
// 1. Detect and classify specific codepoints.
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case 0x0000: return ESPEAKNG_CTYPE_END_OF_STRING; // NULL
|
||||
case 0x000A: return ESPEAKNG_CTYPE_NEWLINE; // LINE FEED (LF)
|
||||
case 0x000C: return ESPEAKNG_CTYPE_NEWLINE; // FORM FEED (FF)
|
||||
case 0x000D: return ESPEAKNG_CTYPE_CARRIAGE_RETURN; // CARRIAGE RETURN (CR)
|
||||
case 0x0085: return ESPEAKNG_CTYPE_NEWLINE; // NEW LINE (NEL)
|
||||
}
|
||||
|
||||
// 2. Override property types for codepoints by their Unicode General Category.
|
||||
|
||||
ucd_category cat = ucd_lookup_category(c);
|
||||
switch (cat)
|
||||
{
|
||||
case UCD_CATEGORY_Zl: return ESPEAKNG_CTYPE_NEWLINE;
|
||||
case UCD_CATEGORY_Zp: return ESPEAKNG_CTYPE_PARAGRAPH;
|
||||
}
|
||||
|
||||
// 3. Classify codepoints by their Unicode properties.
|
||||
|
||||
ucd_property props = ucd_properties(c, cat);
|
||||
switch (props & ESPEAKNG_CTYPE_PROPERTY_MASK)
|
||||
{
|
||||
case UCD_PROPERTY_WHITE_SPACE:
|
||||
return ESPEAKNG_CTYPE_WHITESPACE;
|
||||
case UCD_PROPERTY_OTHER_LOWERCASE:
|
||||
return ESPEAKNG_CTYPE_LOWERCASE;
|
||||
case UCD_PROPERTY_OTHER_UPPERCASE:
|
||||
return ESPEAKNG_CTYPE_UPPERCASE;
|
||||
case ESPEAKNG_PROPERTY_FULL_STOP:
|
||||
return ESPEAKNG_CTYPE_FULL_STOP;
|
||||
case ESPEAKNG_PROPERTY_QUESTION_MARK:
|
||||
return ESPEAKNG_CTYPE_QUESTION_MARK;
|
||||
case ESPEAKNG_PROPERTY_EXCLAMATION_MARK:
|
||||
return ESPEAKNG_CTYPE_EXCLAMATION_MARK;
|
||||
case ESPEAKNG_PROPERTY_COMMA:
|
||||
return ESPEAKNG_CTYPE_COMMA;
|
||||
case ESPEAKNG_PROPERTY_COLON:
|
||||
return ESPEAKNG_CTYPE_COLON;
|
||||
case ESPEAKNG_PROPERTY_SEMI_COLON:
|
||||
return ESPEAKNG_CTYPE_SEMICOLON;
|
||||
case ESPEAKNG_PROPERTY_ELLIPSIS:
|
||||
return ESPEAKNG_CTYPE_ELLIPSIS;
|
||||
}
|
||||
|
||||
// 4. Classify codepoints by their Unicode General Category.
|
||||
|
||||
switch (cat)
|
||||
{
|
||||
case UCD_CATEGORY_Lu: return ESPEAKNG_CTYPE_UPPERCASE;
|
||||
case UCD_CATEGORY_Ll: return ESPEAKNG_CTYPE_LOWERCASE;
|
||||
case UCD_CATEGORY_Pc: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Pd: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Pe: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Pf: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Pi: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Po: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Ps: return ESPEAKNG_CTYPE_PUNCTUATION;
|
||||
case UCD_CATEGORY_Sc: return ESPEAKNG_CTYPE_SYMBOL;
|
||||
case UCD_CATEGORY_Sk: return ESPEAKNG_CTYPE_SYMBOL;
|
||||
case UCD_CATEGORY_Sm: return ESPEAKNG_CTYPE_SYMBOL;
|
||||
case UCD_CATEGORY_So: return ESPEAKNG_CTYPE_SYMBOL;
|
||||
}
|
||||
|
||||
// 5. Classify the remaining codepoints.
|
||||
|
||||
return ESPEAKNG_CTYPE_OTHER;
|
||||
}
|
||||
|
||||
#define ESPEAKNG_CODEPOINT_INVALID 0xFFFFFFFF
|
||||
|
||||
struct espeak_ng_TOKENIZER_
|
||||
{
|
||||
espeak_ng_TEXT_DECODER *decoder;
|
||||
char token[256];
|
||||
uint32_t keepc;
|
||||
|
||||
espeak_ng_TOKEN_TYPE (*read)(espeak_ng_TOKENIZER *tokenizer);
|
||||
};
|
||||
|
||||
static espeak_ng_TOKEN_TYPE
|
||||
tokenizer_state_end_of_buffer(espeak_ng_TOKENIZER *tokenizer)
|
||||
{
|
||||
*tokenizer->token = '\0';
|
||||
return ESPEAKNG_TOKEN_END_OF_BUFFER;
|
||||
}
|
||||
|
||||
static espeak_ng_TOKEN_TYPE
|
||||
tokenizer_read_word_token(espeak_ng_TOKENIZER *tokenizer, char *current, espeak_ng_TOKEN_TYPE type)
|
||||
{
|
||||
char *end = tokenizer->token + sizeof(tokenizer->token) - 5; // allow for UTF-8 trailing bytes
|
||||
int initial_state = 1;
|
||||
|
||||
while (current < end && !text_decoder_eof(tokenizer->decoder)) {
|
||||
uint32_t c = text_decoder_getc(tokenizer->decoder);
|
||||
switch (codepoint_type(c))
|
||||
{
|
||||
case ESPEAKNG_CTYPE_LOWERCASE:
|
||||
current += utf8_out(c, current);
|
||||
switch (type)
|
||||
{
|
||||
case ESPEAKNG_TOKEN_WORD_LOWERCASE:
|
||||
case ESPEAKNG_TOKEN_WORD_MIXEDCASE:
|
||||
case ESPEAKNG_TOKEN_WORD_CAPITALIZED:
|
||||
break;
|
||||
case ESPEAKNG_TOKEN_WORD_UPPERCASE:
|
||||
type = initial_state
|
||||
? ESPEAKNG_TOKEN_WORD_CAPITALIZED
|
||||
: ESPEAKNG_TOKEN_WORD_MIXEDCASE;
|
||||
break;
|
||||
}
|
||||
initial_state = 0;
|
||||
break;
|
||||
case ESPEAKNG_CTYPE_UPPERCASE:
|
||||
current += utf8_out(c, current);
|
||||
switch (type)
|
||||
{
|
||||
case ESPEAKNG_TOKEN_WORD_UPPERCASE:
|
||||
case ESPEAKNG_TOKEN_WORD_MIXEDCASE:
|
||||
break;
|
||||
case ESPEAKNG_TOKEN_WORD_LOWERCASE:
|
||||
case ESPEAKNG_TOKEN_WORD_CAPITALIZED:
|
||||
type = ESPEAKNG_TOKEN_WORD_MIXEDCASE;
|
||||
break;
|
||||
}
|
||||
initial_state = 0;
|
||||
break;
|
||||
default:
|
||||
tokenizer->keepc = c;
|
||||
*current = '\0';
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
*current = '\0';
|
||||
return type;
|
||||
}
|
||||
|
||||
static espeak_ng_TOKEN_TYPE
|
||||
tokenizer_state_default(espeak_ng_TOKENIZER *tokenizer)
|
||||
{
|
||||
if (text_decoder_eof(tokenizer->decoder)) {
|
||||
tokenizer->read = tokenizer_state_end_of_buffer;
|
||||
return tokenizer_state_end_of_buffer(tokenizer);
|
||||
}
|
||||
|
||||
char *current = tokenizer->token;
|
||||
char *end = tokenizer->token + sizeof(tokenizer->token) - 5; // allow for UTF-8 trailing bytes
|
||||
|
||||
uint32_t c;
|
||||
if (tokenizer->keepc != ESPEAKNG_CODEPOINT_INVALID) {
|
||||
c = tokenizer->keepc;
|
||||
tokenizer->keepc = ESPEAKNG_CODEPOINT_INVALID;
|
||||
} else {
|
||||
c = text_decoder_getc(tokenizer->decoder);
|
||||
}
|
||||
|
||||
switch (codepoint_type(c))
|
||||
{
|
||||
case ESPEAKNG_CTYPE_END_OF_STRING: // '\0'
|
||||
tokenizer->read = tokenizer_state_end_of_buffer;
|
||||
return tokenizer_state_end_of_buffer(tokenizer);
|
||||
case ESPEAKNG_CTYPE_CARRIAGE_RETURN: // '\r'
|
||||
if (text_decoder_peekc(tokenizer->decoder) == '\n') {
|
||||
current += utf8_out(c, current);
|
||||
c = text_decoder_getc(tokenizer->decoder);
|
||||
}
|
||||
// fallthrough
|
||||
case ESPEAKNG_CTYPE_NEWLINE:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_NEWLINE;
|
||||
case ESPEAKNG_CTYPE_PARAGRAPH:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_PARAGRAPH;
|
||||
case ESPEAKNG_CTYPE_WHITESPACE:
|
||||
current += utf8_out(c, current);
|
||||
while (!text_decoder_eof(tokenizer->decoder) &&
|
||||
current < end &&
|
||||
codepoint_type(c = text_decoder_getc(tokenizer->decoder)) == ESPEAKNG_CTYPE_WHITESPACE)
|
||||
{
|
||||
current += utf8_out(c, current);
|
||||
}
|
||||
tokenizer->keepc = c;
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_WHITESPACE;
|
||||
case ESPEAKNG_CTYPE_LOWERCASE:
|
||||
current += utf8_out(c, current);
|
||||
return tokenizer_read_word_token(tokenizer, current, ESPEAKNG_TOKEN_WORD_LOWERCASE);
|
||||
case ESPEAKNG_CTYPE_UPPERCASE:
|
||||
current += utf8_out(c, current);
|
||||
return tokenizer_read_word_token(tokenizer, current, ESPEAKNG_TOKEN_WORD_UPPERCASE);
|
||||
case ESPEAKNG_CTYPE_FULL_STOP:
|
||||
current += utf8_out(c, current);
|
||||
if (c == '.' && text_decoder_peekc(tokenizer->decoder) == '.') {
|
||||
c = text_decoder_getc(tokenizer->decoder);
|
||||
if (text_decoder_peekc(tokenizer->decoder) == '.') {
|
||||
c = text_decoder_getc(tokenizer->decoder);
|
||||
current += utf8_out('.', current);
|
||||
current += utf8_out('.', current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_ELLIPSIS;
|
||||
} else {
|
||||
tokenizer->keepc = c;
|
||||
}
|
||||
}
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_FULL_STOP;
|
||||
case ESPEAKNG_CTYPE_QUESTION_MARK:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_QUESTION_MARK;
|
||||
case ESPEAKNG_CTYPE_EXCLAMATION_MARK:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_EXCLAMATION_MARK;
|
||||
case ESPEAKNG_CTYPE_COMMA:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_COMMA;
|
||||
case ESPEAKNG_CTYPE_COLON:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_COLON;
|
||||
case ESPEAKNG_CTYPE_SEMICOLON:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_SEMICOLON;
|
||||
case ESPEAKNG_CTYPE_ELLIPSIS:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_ELLIPSIS;
|
||||
case ESPEAKNG_CTYPE_PUNCTUATION:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_PUNCTUATION;
|
||||
case ESPEAKNG_CTYPE_SYMBOL:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_SYMBOL;
|
||||
default:
|
||||
current += utf8_out(c, current);
|
||||
*current = '\0';
|
||||
return ESPEAKNG_TOKEN_UNKNOWN;
|
||||
}
|
||||
|
||||
return ESPEAKNG_TOKEN_END_OF_BUFFER;
|
||||
}
|
||||
|
||||
#pragma GCC visibility push(default)
|
||||
|
||||
espeak_ng_TOKENIZER *
|
||||
create_tokenizer(void)
|
||||
{
|
||||
espeak_ng_TOKENIZER *tokenizer = malloc(sizeof(espeak_ng_TOKENIZER));
|
||||
if (!tokenizer) return NULL;
|
||||
|
||||
tokenizer->decoder = NULL;
|
||||
tokenizer->keepc = ESPEAKNG_CODEPOINT_INVALID;
|
||||
tokenizer->read = tokenizer_state_end_of_buffer;
|
||||
|
||||
*tokenizer->token = '\0';
|
||||
return tokenizer;
|
||||
}
|
||||
|
||||
void
|
||||
destroy_tokenizer(espeak_ng_TOKENIZER *tokenizer)
|
||||
{
|
||||
if (tokenizer) free(tokenizer);
|
||||
}
|
||||
|
||||
int
|
||||
tokenizer_reset(espeak_ng_TOKENIZER *tokenizer,
|
||||
espeak_ng_TEXT_DECODER *decoder,
|
||||
espeak_ng_TOKENIZER_OPTIONS options)
|
||||
{
|
||||
if (!tokenizer) return 0;
|
||||
|
||||
tokenizer->decoder = decoder;
|
||||
tokenizer->keepc = ESPEAKNG_CODEPOINT_INVALID;
|
||||
tokenizer->read = decoder ? tokenizer_state_default : tokenizer_state_end_of_buffer;
|
||||
return 1;
|
||||
}
|
||||
|
||||
espeak_ng_TOKEN_TYPE
|
||||
tokenizer_read_next_token(espeak_ng_TOKENIZER *tokenizer)
|
||||
{
|
||||
return tokenizer->read(tokenizer);
|
||||
}
|
||||
|
||||
const char *
|
||||
tokenizer_get_token_text(espeak_ng_TOKENIZER *tokenizer)
|
||||
{
|
||||
return tokenizer->token;
|
||||
}
|
||||
|
||||
#pragma GCC visibility pop
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
@@ -158,19 +159,44 @@ static void SetLetterBitsRange(Translator *tr, int group, int first, int last)
|
||||
|
||||
// ignore these characters
|
||||
static const unsigned short chars_ignore_default[] = {
|
||||
0xad, 1, // soft hyphen
|
||||
0x200c, 1, // zero width non-joiner
|
||||
0x200d, 1, // zero width joiner
|
||||
0, 0
|
||||
// U+00AD SOFT HYPHEN
|
||||
// Used to mark hyphenation points in words for where to split a
|
||||
// word at the end of a line to provide readable justified text.
|
||||
0xad, 1,
|
||||
// U+200C ZERO WIDTH NON-JOINER
|
||||
// Used to prevent combined ligatures being displayed in their
|
||||
// combined form.
|
||||
0x200c, 1,
|
||||
// U+200D ZERO WIDTH JOINER
|
||||
// Used to indicate an alternative connected form made up of the
|
||||
// characters surrounding the ZWJ in Devanagari, Kannada, Malayalam
|
||||
// and Emoji.
|
||||
// 0x200d, 1, // Not ignored.
|
||||
// End of the ignored character list.
|
||||
0, 0
|
||||
};
|
||||
|
||||
// alternatively, ignore characters but allow zero-width-non-joiner (lang-fa)
|
||||
static const unsigned short chars_ignore_zwnj_hyphen[] = {
|
||||
0xad, 1, // soft hyphen
|
||||
0x640, 1, // igniore Arabic Tatweel (lang=FA)
|
||||
0x200c, '-', // zero width non-joiner, replace with hyphen
|
||||
0x200d, 1, // zero width joiner
|
||||
0, 0
|
||||
// U+00AD SOFT HYPHEN
|
||||
// Used to mark hyphenation points in words for where to split a
|
||||
// word at the end of a line to provide readable justified text.
|
||||
0xad, 1,
|
||||
// U+0640 TATWEEL (KASHIDA)
|
||||
// Used in Arabic scripts to stretch characters for justifying
|
||||
// the text.
|
||||
0x640, 1,
|
||||
// U+200C ZERO WIDTH NON-JOINER
|
||||
// Used to prevent combined ligatures being displayed in their
|
||||
// combined form.
|
||||
0x200c, '-',
|
||||
// U+200D ZERO WIDTH JOINER
|
||||
// Used to indicate an alternative connected form made up of the
|
||||
// characters surrounding the ZWJ in Devanagari, Kannada, Malayalam
|
||||
// and Emoji.
|
||||
// 0x200d, 1, // Not ignored.
|
||||
// End of the ignored character list.
|
||||
0, 0
|
||||
};
|
||||
|
||||
const unsigned char utf8_ordinal[] = { 0xc2, 0xba, 0 }; // masculine ordinal character, UTF-8
|
||||
@@ -387,7 +413,7 @@ static void SetCyrillicLetters(Translator *tr)
|
||||
SetLetterBits(tr, LETTERGP_VOWEL2, (char *)ru_vowels);
|
||||
}
|
||||
|
||||
void SetIndicLetters(Translator *tr)
|
||||
static void SetIndicLetters(Translator *tr)
|
||||
{
|
||||
// Set letter types for Indic scripts, Devanagari, Tamill, etc
|
||||
static const char dev_consonants2[] = { 0x02, 0x03, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x7b, 0x7c, 0x7e, 0x7f, 0 };
|
||||
@@ -412,7 +438,7 @@ void SetIndicLetters(Translator *tr)
|
||||
tr->langopts.suffix_add_e = tr->letter_bits_offset + 0x4d; // virama
|
||||
}
|
||||
|
||||
void SetupTranslator(Translator *tr, const short *lengths, const unsigned char *amps)
|
||||
static void SetupTranslator(Translator *tr, const short *lengths, const unsigned char *amps)
|
||||
{
|
||||
if (lengths != NULL)
|
||||
memcpy(tr->stress_lengths, lengths, sizeof(tr->stress_lengths));
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
Translator *translator = NULL; // the main translator
|
||||
@@ -254,7 +254,7 @@ int IsDigit(unsigned int c)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int IsSpace(unsigned int c)
|
||||
static int IsSpace(unsigned int c)
|
||||
{
|
||||
if (c == 0)
|
||||
return 0;
|
||||
@@ -265,6 +265,16 @@ int IsSpace(unsigned int c)
|
||||
return iswspace(c);
|
||||
}
|
||||
|
||||
int isspace2(unsigned int c)
|
||||
{
|
||||
// can't use isspace() because on Windows, isspace(0xe1) gives TRUE !
|
||||
int c2;
|
||||
|
||||
if (((c2 = (c & 0xff)) == 0) || (c > ' '))
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void DeleteTranslator(Translator *tr)
|
||||
{
|
||||
if (tr->data_dictlist != NULL)
|
||||
@@ -388,6 +398,40 @@ int utf8_in(int *c, const char *buf)
|
||||
}
|
||||
#pragma GCC visibility pop
|
||||
|
||||
int utf8_out(unsigned int c, char *buf)
|
||||
{
|
||||
// write a unicode character into a buffer as utf8
|
||||
// returns the number of bytes written
|
||||
|
||||
int n_bytes;
|
||||
int j;
|
||||
int shift;
|
||||
static char unsigned code[4] = { 0, 0xc0, 0xe0, 0xf0 };
|
||||
|
||||
if (c < 0x80) {
|
||||
buf[0] = c;
|
||||
return 1;
|
||||
}
|
||||
if (c >= 0x110000) {
|
||||
buf[0] = ' '; // out of range character code
|
||||
return 1;
|
||||
}
|
||||
if (c < 0x0800)
|
||||
n_bytes = 1;
|
||||
else if (c < 0x10000)
|
||||
n_bytes = 2;
|
||||
else
|
||||
n_bytes = 3;
|
||||
|
||||
shift = 6*n_bytes;
|
||||
buf[0] = code[n_bytes] | (c >> shift);
|
||||
for (j = 0; j < n_bytes; j++) {
|
||||
shift -= 6;
|
||||
buf[j+1] = 0x80 + ((c >> shift) & 0x3f);
|
||||
}
|
||||
return n_bytes+1;
|
||||
}
|
||||
|
||||
char *strchr_w(const char *s, int c)
|
||||
{
|
||||
// return NULL for any non-ascii character
|
||||
@@ -396,17 +440,6 @@ char *strchr_w(const char *s, int c)
|
||||
return strchr((char *)s, c); // (char *) is needed for Borland compiler
|
||||
}
|
||||
|
||||
int IsAllUpper(const char *word)
|
||||
{
|
||||
int c;
|
||||
while ((*word != 0) && !isspace2(*word)) {
|
||||
word += utf8_in(&c, word);
|
||||
if (!iswupper(c))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static char *SpeakIndividualLetters(Translator *tr, char *word, char *phonemes, int spell_word)
|
||||
{
|
||||
int posn = 0;
|
||||
@@ -525,7 +558,6 @@ static int TranslateWord3(Translator *tr, char *word_start, WORD_TAB *wtab, char
|
||||
int more_suffixes;
|
||||
int confirm_prefix;
|
||||
int spell_word;
|
||||
int stress_bits;
|
||||
int emphasize_allcaps = 0;
|
||||
int wflags;
|
||||
int wmark;
|
||||
@@ -1139,7 +1171,7 @@ int TranslateWord(Translator *tr, char *word_start, WORD_TAB *wtab, char *word_o
|
||||
char word[N_WORD_BYTES+1];
|
||||
word[0] = 0;
|
||||
word[1] = ' ';
|
||||
memcpy(word+2, word_out, strlen(word_out));
|
||||
strcpy(word+2, word_out);
|
||||
word_out = word+2;
|
||||
|
||||
while (*word_out && available > 1) {
|
||||
@@ -1195,7 +1227,7 @@ static int CountSyllables(unsigned char *phonemes)
|
||||
return count;
|
||||
}
|
||||
|
||||
void Word_EmbeddedCmd()
|
||||
static void Word_EmbeddedCmd()
|
||||
{
|
||||
// Process embedded commands for emphasis, sayas, and break
|
||||
int embedded_cmd;
|
||||
@@ -1791,13 +1823,13 @@ static int SubstituteChar(Translator *tr, unsigned int c, unsigned int next_in,
|
||||
// don't convert the case of the second character unless the next letter is also upper case
|
||||
c2 = new_c >> 16;
|
||||
if (upper_case && iswupper(next_in))
|
||||
c2 = towupper(c2);
|
||||
c2 = ucd_toupper(c2);
|
||||
*insert = c2;
|
||||
new_c &= 0xffff;
|
||||
}
|
||||
|
||||
if (upper_case)
|
||||
new_c = towupper(new_c);
|
||||
new_c = ucd_toupper(new_c);
|
||||
|
||||
*wordflags |= FLAG_CHAR_REPLACED;
|
||||
return new_c;
|
||||
@@ -1874,7 +1906,7 @@ static int TranslateChar(Translator *tr, char *ptr, int prev_in, unsigned int c,
|
||||
|
||||
static const char *UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng", "ts", "tA", "nA", NULL };
|
||||
|
||||
int UpperCaseInWord(Translator *tr, char *word, int c)
|
||||
static int UpperCaseInWord(Translator *tr, char *word, int c)
|
||||
{
|
||||
int ix;
|
||||
int len;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Copyright (C) 2005 to 2014 by Jonathan Duddington
|
||||
* email: jonsd@users.sourceforge.net
|
||||
* Copyright (C) 2015 Reece H. Dunn
|
||||
* Copyright (C) 2015-2017 Reece H. Dunn
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -706,10 +706,15 @@ extern void SetLengthMods(Translator *tr, int value);
|
||||
|
||||
void LoadConfig(void);
|
||||
int TransposeAlphabet(Translator *tr, char *text);
|
||||
|
||||
#define LEADING_2_BITS 0xC0 // 0b11000000
|
||||
#define UTF8_TAIL_BITS 0x80 // 0b10000000
|
||||
|
||||
ESPEAK_NG_API int utf8_in(int *c, const char *buf);
|
||||
int utf8_in2(int *c, const char *buf, int backwards);
|
||||
int utf8_out(unsigned int c, char *buf);
|
||||
int utf8_nbytes(const char *buf);
|
||||
|
||||
int lookupwchar(const unsigned short *list, int c);
|
||||
int lookupwchar2(const unsigned short *list, int c);
|
||||
int Eof(void);
|
||||
@@ -747,6 +752,10 @@ void LookupAccentedLetter(Translator *tr, unsigned int letter, char *ph_buf);
|
||||
|
||||
int LoadDictionary(Translator *tr, const char *name, int no_error);
|
||||
int LookupDictList(Translator *tr, char **wordptr, char *ph_out, unsigned int *flags, int end_flags, WORD_TAB *wtab);
|
||||
int HashDictionary(const char *string);
|
||||
|
||||
void print_dictionary_flags(unsigned int *flags, char *buf, int buf_len);
|
||||
char *DecodeRule(const char *group_chars, int group_length, char *rule, int control);
|
||||
|
||||
void MakePhonemeList(Translator *tr, int post_pause, int new_sentence);
|
||||
int ChangePhonemes_ru(Translator *tr, PHONEME_LIST2 *phlist, int n_ph, int index, PHONEME_TAB *ph, CHANGEPH *ch);
|
||||
|
||||
@@ -22,6 +22,8 @@ extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
#define N_PEAKS 9
|
||||
|
||||
typedef struct {
|
||||
char v_name[40];
|
||||
char language_name[20];
|
||||
@@ -86,6 +88,7 @@ espeak_ng_STATUS DoVoiceChange(voice_t *v);
|
||||
void WavegenSetVoice(voice_t *v);
|
||||
void ReadTonePoints(char *string, int *tone_pts);
|
||||
void VoiceReset(int control);
|
||||
void FreeVoiceList(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
+71
-61
@@ -40,8 +40,8 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
#include "translate.h"
|
||||
|
||||
MNEM_TAB genders[] = {
|
||||
@@ -474,18 +474,6 @@ static int Read8Numbers(char *data_in, int *data)
|
||||
&data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6], &data[7]);
|
||||
}
|
||||
|
||||
static unsigned int StringToWord2(const char *string)
|
||||
{
|
||||
// Convert a language name string to a word such as L('e','n')
|
||||
int ix;
|
||||
int c;
|
||||
unsigned int value = 0;
|
||||
|
||||
for (ix = 0; (ix < 4) && ((c = string[ix]) != 0); ix++)
|
||||
value = (value << 8) | (c & 0xff);
|
||||
return value;
|
||||
}
|
||||
|
||||
voice_t *LoadVoice(const char *vname, int control)
|
||||
{
|
||||
// control, bit 0 1= no_default
|
||||
@@ -544,7 +532,7 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
return NULL;
|
||||
} else {
|
||||
if (voicename[0] == 0)
|
||||
strcpy(voicename, "en");
|
||||
strcpy(voicename, ESPEAKNG_DEFAULT_VOICE);
|
||||
|
||||
sprintf(path_voices, "%s%cvoices%c", path_home, PATHSEP, PATHSEP);
|
||||
sprintf(buf, "%s%s", path_voices, voicename); // look in the main voices directory
|
||||
@@ -705,47 +693,57 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
break;
|
||||
case V_INTONATION: // intonation
|
||||
sscanf(p, "%d %d", &option_tone_flags, &option_tone2);
|
||||
if ((option_tone_flags & 0xff) != 0)
|
||||
langopts->intonation_group = option_tone_flags & 0xff;
|
||||
if ((option_tone_flags & 0xff) != 0) {
|
||||
if (langopts)
|
||||
langopts->intonation_group = option_tone_flags & 0xff;
|
||||
else
|
||||
fprintf(stderr, "Cannot set intonation: language not set, or is invalid.\n");
|
||||
}
|
||||
break;
|
||||
case V_TUNES:
|
||||
n = sscanf(p, "%s %s %s %s %s %s", names[0], names[1], names[2], names[3], names[4], names[5]);
|
||||
langopts->intonation_group = 0;
|
||||
for (ix = 0; ix < n; ix++) {
|
||||
if (strcmp(names[ix], "NULL") == 0)
|
||||
continue;
|
||||
if (langopts) {
|
||||
langopts->intonation_group = 0;
|
||||
for (ix = 0; ix < n; ix++) {
|
||||
if (strcmp(names[ix], "NULL") == 0)
|
||||
continue;
|
||||
|
||||
if ((value = LookupTune(names[ix])) < 0)
|
||||
fprintf(stderr, "Unknown tune '%s'\n", names[ix]);
|
||||
else
|
||||
langopts->tunes[ix] = value;
|
||||
}
|
||||
if ((value = LookupTune(names[ix])) < 0)
|
||||
fprintf(stderr, "Unknown tune '%s'\n", names[ix]);
|
||||
else
|
||||
langopts->tunes[ix] = value;
|
||||
}
|
||||
} else
|
||||
fprintf(stderr, "Cannot set tunes: language not set, or is invalid.\n");
|
||||
break;
|
||||
case V_DICTRULES: // conditional dictionary rules and list entries
|
||||
case V_NUMBERS:
|
||||
case V_STRESSOPT:
|
||||
// expect a list of numbers
|
||||
while (*p != 0) {
|
||||
while (isspace(*p)) p++;
|
||||
if ((n = atoi(p)) > 0) {
|
||||
p++;
|
||||
if (n < 32) {
|
||||
if (key == V_DICTRULES)
|
||||
conditional_rules |= (1 << n);
|
||||
else if (key == V_NUMBERS)
|
||||
langopts->numbers |= (1 << n);
|
||||
else if (key == V_STRESSOPT)
|
||||
langopts->stress_flags |= (1 << n);
|
||||
} else {
|
||||
if ((key == V_NUMBERS) && (n < 64))
|
||||
langopts->numbers2 |= (1 << (n-32));
|
||||
else
|
||||
fprintf(stderr, "Bad option number %d\n", n);
|
||||
if (langopts) {
|
||||
// expect a list of numbers
|
||||
while (*p != 0) {
|
||||
while (isspace(*p)) p++;
|
||||
if ((n = atoi(p)) > 0) {
|
||||
p++;
|
||||
if (n < 32) {
|
||||
if (key == V_DICTRULES)
|
||||
conditional_rules |= (1 << n);
|
||||
else if (key == V_NUMBERS)
|
||||
langopts->numbers |= (1 << n);
|
||||
else if (key == V_STRESSOPT)
|
||||
langopts->stress_flags |= (1 << n);
|
||||
} else {
|
||||
if ((key == V_NUMBERS) && (n < 64))
|
||||
langopts->numbers2 |= (1 << (n-32));
|
||||
else
|
||||
fprintf(stderr, "Bad option number %d\n", n);
|
||||
}
|
||||
}
|
||||
while (isalnum(*p)) p++;
|
||||
}
|
||||
while (isalnum(*p)) p++;
|
||||
}
|
||||
ProcessLanguageOptions(langopts);
|
||||
ProcessLanguageOptions(langopts);
|
||||
} else
|
||||
fprintf(stderr, "Cannot set stressopt: language not set, or is invalid.\n");
|
||||
break;
|
||||
case V_REPLACE:
|
||||
if (phonemes_set == 0) {
|
||||
@@ -756,22 +754,31 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
PhonemeReplacement(p);
|
||||
break;
|
||||
case V_WORDGAP: // words
|
||||
sscanf(p, "%d %d", &langopts->word_gap, &langopts->vowel_pause);
|
||||
if (langopts)
|
||||
sscanf(p, "%d %d", &langopts->word_gap, &langopts->vowel_pause);
|
||||
else
|
||||
fprintf(stderr, "Cannot set wordgap: language not set, or is invalid.\n");
|
||||
break;
|
||||
case V_STRESSRULE:
|
||||
sscanf(p, "%d %d %d %d", &langopts->stress_rule,
|
||||
&langopts->stress_flags,
|
||||
&langopts->unstressed_wd1,
|
||||
&langopts->unstressed_wd2);
|
||||
if (langopts)
|
||||
sscanf(p, "%d %d %d %d", &langopts->stress_rule,
|
||||
&langopts->stress_flags,
|
||||
&langopts->unstressed_wd1,
|
||||
&langopts->unstressed_wd2);
|
||||
else
|
||||
fprintf(stderr, "Cannot set stressrule: language not set, or is invalid.\n");
|
||||
break;
|
||||
case V_OPTION:
|
||||
value2 = 0;
|
||||
if (((sscanf(p, "%s %d %d", option_name, &value, &value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0)) ||
|
||||
((sscanf(p, "%d %d %d", &ix, &value, &value2) >= 2) && (ix < N_LOPTS))) {
|
||||
langopts->param[ix] = value;
|
||||
langopts->param2[ix] = value2;
|
||||
if (langopts) {
|
||||
value2 = 0;
|
||||
if (((sscanf(p, "%s %d %d", option_name, &value, &value2) >= 2) && ((ix = LookupMnem(options_tab, option_name)) >= 0)) ||
|
||||
((sscanf(p, "%d %d %d", &ix, &value, &value2) >= 2) && (ix < N_LOPTS))) {
|
||||
langopts->param[ix] = value;
|
||||
langopts->param2[ix] = value2;
|
||||
} else
|
||||
fprintf(stderr, "Bad voice option: %s %s\n", buf, p);
|
||||
} else
|
||||
fprintf(stderr, "Bad voice option: %s %s\n", buf, p);
|
||||
fprintf(stderr, "Cannot set option: language not set, or is invalid.\n");
|
||||
break;
|
||||
case V_ECHO:
|
||||
// echo. suggest: 135mS 11%
|
||||
@@ -852,9 +859,12 @@ voice_t *LoadVoice(const char *vname, int control)
|
||||
case V_STATUS:
|
||||
break;
|
||||
default:
|
||||
if ((key & 0xff00) == 0x100)
|
||||
sscanf(p, "%d", &langopts->param[key &0xff]);
|
||||
else
|
||||
if ((key & 0xff00) == 0x100) {
|
||||
if (langopts)
|
||||
sscanf(p, "%d", &langopts->param[key &0xff]);
|
||||
else
|
||||
fprintf(stderr, "Cannot set voice attribute: language not set, or is invalid.\n");
|
||||
} else
|
||||
fprintf(stderr, "Bad voice attribute: %s\n", buf);
|
||||
break;
|
||||
}
|
||||
@@ -1272,7 +1282,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)
|
||||
|
||||
if (voice_select2.name == NULL) {
|
||||
if ((voice_select2.name = voice_select2.identifier) == NULL)
|
||||
voice_select2.name = "default";
|
||||
voice_select2.name = ESPEAKNG_DEFAULT_VOICE;
|
||||
}
|
||||
|
||||
strncpy0(buf, voice_select2.name, sizeof(buf));
|
||||
@@ -1299,7 +1309,7 @@ char const *SelectVoice(espeak_VOICE *voice_select, int *found)
|
||||
if (nv == 0) {
|
||||
// no matching voice, choose the default
|
||||
*found = 0;
|
||||
if ((voices[0] = SelectVoiceByName(voices_list, "default")) != NULL)
|
||||
if ((voices[0] = SelectVoiceByName(voices_list, ESPEAKNG_DEFAULT_VOICE)) != NULL)
|
||||
nv = 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +33,12 @@
|
||||
|
||||
#include "speech.h"
|
||||
#include "phoneme.h"
|
||||
#include "synthesize.h"
|
||||
#include "voice.h"
|
||||
#include "synthesize.h"
|
||||
|
||||
#ifdef INCLUDE_KLATT
|
||||
#include "klatt.h"
|
||||
#endif
|
||||
|
||||
#if HAVE_SONIC_H
|
||||
#include "sonic.h"
|
||||
@@ -665,7 +669,7 @@ static int ApplyBreath(void)
|
||||
return value;
|
||||
}
|
||||
|
||||
int Wavegen()
|
||||
static int Wavegen()
|
||||
{
|
||||
if (wvoice == NULL)
|
||||
return 0;
|
||||
@@ -1117,7 +1121,7 @@ void SetPitch2(voice_t *voice, int pitch1, int pitch2, int *pitch_base, int *pit
|
||||
*pitch_range = base + (pitch2 * range)/2 - *pitch_base;
|
||||
}
|
||||
|
||||
void SetPitch(int length, unsigned char *env, int pitch1, int pitch2)
|
||||
static void SetPitch(int length, unsigned char *env, int pitch1, int pitch2)
|
||||
{
|
||||
if (wvoice == NULL)
|
||||
return;
|
||||
@@ -1140,7 +1144,7 @@ void SetPitch(int length, unsigned char *env, int pitch1, int pitch2)
|
||||
flutter_amp = wvoice->flutter;
|
||||
}
|
||||
|
||||
void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v)
|
||||
static void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v)
|
||||
{
|
||||
if (wvoice == NULL || v == NULL)
|
||||
return;
|
||||
@@ -1246,7 +1250,7 @@ void Write4Bytes(FILE *f, int value)
|
||||
}
|
||||
}
|
||||
|
||||
int WavegenFill2()
|
||||
static int WavegenFill2()
|
||||
{
|
||||
// Pick up next wavegen commands from the queue
|
||||
// return: 0 output buffer has been filled
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
.*.swp
|
||||
*~
|
||||
|
||||
# intermediate files:
|
||||
|
||||
@@ -52,12 +53,15 @@ depcomp
|
||||
install-sh
|
||||
libtool
|
||||
ltmain.sh
|
||||
m4/
|
||||
missing
|
||||
Makefile
|
||||
Makefile.in
|
||||
stamp-h1
|
||||
|
||||
m4/*
|
||||
!m4/ax_check_compile_flag.m4
|
||||
|
||||
# emscripten:
|
||||
|
||||
a.out.js
|
||||
a.out.js.mem
|
||||
|
||||
@@ -7,11 +7,14 @@ These are eSpeak NG specific modifications to the `ucd-tools` project:
|
||||
* `data/espeak-ng` data files for eSpeak NG extended data.
|
||||
* espeak-ng PropList property lookup as part of the `ucd_property` API.
|
||||
|
||||
## 9.0.0.1 - (In Progress)
|
||||
## 10.0.0 - 2017-06-25
|
||||
|
||||
* Add `iswblank` and `iswxdigit` compatibility.
|
||||
* Improve ctype compatibility.
|
||||
* PropList property lookup.
|
||||
* PropList and emoji-data property lookup.
|
||||
* Support building with a C89 compiler.
|
||||
* Update to Unicode Character Data 10.0.0.
|
||||
* Unicode Emoji 5.0.
|
||||
|
||||
## 9.0.0 - 2016-12-28
|
||||
|
||||
|
||||
@@ -55,34 +55,34 @@ EXTRA_DIST += ChangeLog
|
||||
|
||||
############################# Unicode Data ####################################
|
||||
|
||||
EMOJI_VERSION=4.0
|
||||
EMOJI_VERSION=5.0
|
||||
UCD_VERSION=@UCD_VERSION@
|
||||
UCD_ROOTDIR=data/ucd
|
||||
UCD_SRCDIR=http://www.unicode.org/Public
|
||||
|
||||
data/emoji/emoji-data.txt:
|
||||
mkdir -pv data/emoji
|
||||
curl ${UCD_SRCDIR}/emoji/${EMOJI_VERSION}/emoji-data.txt > $@
|
||||
curl ${UCD_SRCDIR}/emoji/${EMOJI_VERSION}/emoji-data.txt -o $@
|
||||
|
||||
data/ucd/PropList.txt:
|
||||
mkdir -pv data/ucd
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropList.txt > $@
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropList.txt -o $@
|
||||
|
||||
data/ucd/DerivedCoreProperties.txt:
|
||||
mkdir -pv data/ucd
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/DerivedCoreProperties.txt > $@
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/DerivedCoreProperties.txt -o $@
|
||||
|
||||
data/ucd/PropertyValueAliases.txt:
|
||||
mkdir -pv data/ucd
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropertyValueAliases.txt > $@
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/PropertyValueAliases.txt -o $@
|
||||
|
||||
data/ucd/Scripts.txt:
|
||||
mkdir -pv data/ucd
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/Scripts.txt > $@
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/Scripts.txt -o $@
|
||||
|
||||
data/ucd/UnicodeData.txt:
|
||||
mkdir -pv data/ucd
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/UnicodeData.txt > $@
|
||||
curl ${UCD_SRCDIR}/${UCD_VERSION}/ucd/UnicodeData.txt -o $@
|
||||
|
||||
############################# documentation ###################################
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ([2.65])
|
||||
AC_INIT([Unicode Character Database Tools], [9.0.0], [https://github.com/rhdunn/ucd-tools/issues], [ucd-tools], [https://github.com/rhdunn/ucd-tools])
|
||||
AC_INIT([Unicode Character Database Tools], [10.0.0], [https://github.com/rhdunn/ucd-tools/issues], [ucd-tools], [https://github.com/rhdunn/ucd-tools])
|
||||
AM_INIT_AUTOMAKE()
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES])
|
||||
@@ -24,6 +24,7 @@ dnl library checks.
|
||||
dnl ================================================================
|
||||
|
||||
AC_CHECK_HEADERS([stddef.h]) dnl C89
|
||||
AC_CHECK_FUNCS([iswblank]) dnl C99
|
||||
|
||||
AC_TYPE_UINT8_T
|
||||
AC_TYPE_UINT32_T
|
||||
@@ -33,13 +34,22 @@ dnl UCD data configuration.
|
||||
dnl ================================================================
|
||||
|
||||
AC_ARG_WITH([unicode-version],
|
||||
[AS_HELP_STRING([--with-unicode-version], [Unicode version to support @<:@default=9.0.0@:>@])],
|
||||
[AS_HELP_STRING([--with-unicode-version], [Unicode version to support @<:@default=10.0.0@:>@])],
|
||||
[AS_IF([test x"$withval" != x],
|
||||
[UCD_VERSION="$withval"])],
|
||||
[UCD_VERSION="9.0.0"])
|
||||
[UCD_VERSION="10.0.0"])
|
||||
|
||||
AC_SUBST(UCD_VERSION)
|
||||
|
||||
dnl ================================================================
|
||||
dnl Compiler warnings.
|
||||
dnl
|
||||
dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
||||
dnl ================================================================
|
||||
|
||||
AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"])
|
||||
AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"])
|
||||
|
||||
dnl ================================================================
|
||||
dnl Generate output.
|
||||
dnl ================================================================
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
# ===========================================================================
|
||||
# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Check whether the given FLAG works with the current language's compiler
|
||||
# or gives an error. (Warnings, however, are ignored)
|
||||
#
|
||||
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
|
||||
# success/failure.
|
||||
#
|
||||
# If EXTRA-FLAGS is defined, it is added to the current language's default
|
||||
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
|
||||
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
|
||||
# force the compiler to issue an error when a bad flag is given.
|
||||
#
|
||||
# INPUT gives an alternative input source to AC_COMPILE_IFELSE.
|
||||
#
|
||||
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
|
||||
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
|
||||
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 5
|
||||
|
||||
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
|
||||
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
|
||||
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
|
||||
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
|
||||
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
|
||||
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
|
||||
AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
|
||||
[AS_VAR_SET(CACHEVAR,[yes])],
|
||||
[AS_VAR_SET(CACHEVAR,[no])])
|
||||
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
|
||||
AS_VAR_IF(CACHEVAR,yes,
|
||||
[m4_default([$2], :)],
|
||||
[m4_default([$3], :)])
|
||||
AS_VAR_POPDEF([CACHEVAR])dnl
|
||||
])dnl AX_CHECK_COMPILE_FLAGS
|
||||
|
||||
@@ -18,14 +18,15 @@
|
||||
* along with ucd-tools. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// NOTE: This file is automatically generated from the UnicodeData.txt file in
|
||||
// the Unicode Character database by the ucd-tools/tools/categories.py script.
|
||||
/* NOTE: This file is automatically generated from the UnicodeData.txt file in
|
||||
* the Unicode Character database by the ucd-tools/tools/categories.py script.
|
||||
*/
|
||||
|
||||
#include "ucd/ucd.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
// Unicode Character Data 9.0.0
|
||||
/* Unicode Character Data 10.0.0 */
|
||||
|
||||
struct case_conversion_entry
|
||||
{
|
||||
|
||||
+741
-679
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user