diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2a3f4fc7..88b40f43 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -101,7 +101,6 @@
android:theme="@style/DarkTheme_DarkSide">
-
@@ -200,6 +199,12 @@
android:label="@string/title_activity_tts_settings"
android:screenOrientation="fullUser"
android:theme="@style/DarkTheme_DarkSide"/>
+
+status testing
+
+speed 80 // speed adjustment, percentage
+stressRule 0
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/qdb b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/qdb
new file mode 100644
index 00000000..eb5ea363
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/qdb
@@ -0,0 +1,6 @@
+name Lang Belta
+language qdb
+
+numbers 4 3
+
+replace 1 t ?
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/qya b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/qya
new file mode 100644
index 00000000..2b515813
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/qya
@@ -0,0 +1,4 @@
+name Quenya
+language qya
+stressRule 2
+// rule=penultimate, with qya_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/sjn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/sjn
new file mode 100644
index 00000000..f927bc93
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/art/sjn
@@ -0,0 +1,4 @@
+name Sindarin
+language sjn
+stressRule 2
+// rule=penultimate, with sjn_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/azc/nci b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/azc/nci
new file mode 100644
index 00000000..f1896379
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/azc/nci
@@ -0,0 +1,6 @@
+name Nahuatl (Classical)
+language nci
+
+intonation 3
+stressRule 2
+stressLength 190 190 200 200 0 0 220 240
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/lt b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/lt
new file mode 100644
index 00000000..7cdb1930
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/lt
@@ -0,0 +1,2 @@
+name Lithuanian
+language lt
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/ltg b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/ltg
new file mode 100644
index 00000000..1041d9e3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/ltg
@@ -0,0 +1,12 @@
+name Latgalian
+language ltg
+maintainer Valdis Vitolins
+status testing
+phonemes lv
+dictionary lv
+dictrules 2 // Setting for Latgalian pronunciation
+words 0 2
+pitch 64 118
+tone 60 150 204 100 400 255 700 10 3000 255
+stressAmp 12 10 8 8 0 0 15 16
+stressLength 160 140 200 140 0 0 240 160
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/lv b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/lv
new file mode 100644
index 00000000..70eb61dc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bat/lv
@@ -0,0 +1,9 @@
+name Latvian
+language lv
+maintainer Valdis Vitolins
+status mature
+words 0 2
+pitch 67 123
+tone 60 150 204 100 400 255 700 10 3000 255
+stressAmp 11 8 11 9 0 0 14 12
+stressLength 160 120 200 130 0 0 230 180
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bnt/sw b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bnt/sw
new file mode 100644
index 00000000..d1a4db33
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bnt/sw
@@ -0,0 +1,4 @@
+name Swahili
+language sw
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bnt/tn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bnt/tn
new file mode 100644
index 00000000..8b484e43
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/bnt/tn
@@ -0,0 +1,4 @@
+name Setswana
+language tn
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ccs/ka b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ccs/ka
new file mode 100644
index 00000000..2a789b3c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ccs/ka
@@ -0,0 +1,3 @@
+name Georgian
+language ka
+lowercaseSentence // A period followed by a lowercase letter is considered a sentence (mkhedruli)
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/cy b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/cy
new file mode 100644
index 00000000..6d021329
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/cy
@@ -0,0 +1,4 @@
+name Welsh
+language cy
+
+intonation 4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/ga b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/ga
new file mode 100644
index 00000000..9fea2ae7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/ga
@@ -0,0 +1,4 @@
+name Gaelic (Irish)
+language ga
+
+dictrules 1 // fix for eclipsis
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/gd b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/gd
new file mode 100644
index 00000000..e416f6fa
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cel/gd
@@ -0,0 +1,4 @@
+name Gaelic (Scottish)
+language gd
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cus/om b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cus/om
new file mode 100644
index 00000000..1d6b396d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/cus/om
@@ -0,0 +1,4 @@
+name Oromo
+language om
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/kn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/kn
new file mode 100644
index 00000000..a32732c4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/kn
@@ -0,0 +1,5 @@
+name Kannada
+language kn
+
+intonation 2
+//consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/ml b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/ml
new file mode 100644
index 00000000..92394bbc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/ml
@@ -0,0 +1,5 @@
+name Malayalam
+language ml
+
+intonation 2
+//consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/ta b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/ta
new file mode 100644
index 00000000..aae63348
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/ta
@@ -0,0 +1,5 @@
+name Tamil
+language ta
+
+intonation 2
+consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/te b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/te
new file mode 100644
index 00000000..8acbb187
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/dra/te
@@ -0,0 +1,7 @@
+name Telugu
+language te
+
+status testing
+
+intonation 2
+//consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/esx/kl b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/esx/kl
new file mode 100644
index 00000000..e581b588
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/esx/kl
@@ -0,0 +1,3 @@
+name Greenlandic
+language kl
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/eu b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/eu
new file mode 100644
index 00000000..ef132e5b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/eu
@@ -0,0 +1,5 @@
+name Basque
+language eu
+
+status testing
+stressRule 15
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/da b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/da
new file mode 100644
index 00000000..58f02f15
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/da
@@ -0,0 +1,4 @@
+name Danish
+language da
+
+tunes s2 c2 q2 e2
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/is b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/is
new file mode 100644
index 00000000..04bf5ad3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/is
@@ -0,0 +1,2 @@
+name Icelandic
+language is
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/nb b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/nb
new file mode 100644
index 00000000..c29117f5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/nb
@@ -0,0 +1,7 @@
+name Norwegian Bokmål
+language nb
+language no
+phonemes no
+dictionary no
+
+intonation 4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/sv b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/sv
new file mode 100644
index 00000000..bb2d0299
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmq/sv
@@ -0,0 +1,2 @@
+name Swedish
+language sv
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/af b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/af
new file mode 100644
index 00000000..64fc96f5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/af
@@ -0,0 +1,8 @@
+name Afrikaans
+language af
+
+maintainer Christo de Klerk
+status mature
+
+roughness 0
+pitch 63 120
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/de b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/de
new file mode 100644
index 00000000..a43cc1a5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/de
@@ -0,0 +1,3 @@
+name German
+language de
+tunes s4 c1 q4 e1
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en
new file mode 100644
index 00000000..f23fb531
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en
@@ -0,0 +1,8 @@
+name English (Great Britain)
+language en-gb 2
+language en 2
+
+maintainer Reece H. Dunn
+status mature
+
+tunes s1 c1 q1 e1
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-029 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-029
new file mode 100644
index 00000000..493aae45
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-029
@@ -0,0 +1,20 @@
+name English (Caribbean)
+language en-029
+language en 10
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-wi
+dictrules 8
+stressLength 175 175 175 175 220 220 250 290
+
+replace 00 D d
+replace 00 T t[
+replace 00 U@ o@
+replace 03 @ a#
+replace 03 3 a#
+replace 03 N n
+
+formant 1 98 100 100
+formant 2 98 100 100
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-scotland b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-scotland
new file mode 100644
index 00000000..a4655a0e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-scotland
@@ -0,0 +1,17 @@
+name English (Scotland)
+language en-gb-scotland
+language en 4
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-sc
+dictrules 2 5 6 7
+stressLength 180 130 200 200 0 0 250 270
+
+replace 03 @ V
+replace 03 I i
+replace 03 I2 i
+replace 01 aI aI2
+replace 02 a a/
+replace 02 u: U
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-gbclan b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-gbclan
new file mode 100644
index 00000000..f54a06b7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-gbclan
@@ -0,0 +1,14 @@
+name English (Lancaster)
+language en-gb-x-gbclan
+language en-gb 3
+language en 5
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-n
+
+stressLength 160 150 180 180 220 220 290 290
+
+replace 03 N n
+replace 03 i I2
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-gbcwmd b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-gbcwmd
new file mode 100644
index 00000000..1831f9a9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-gbcwmd
@@ -0,0 +1,12 @@
+name English (West Midlands)
+language en-gb-x-gbcwmd
+language en-gb 9
+language en 9
+
+phonemes en-wm
+
+replace 00 h NULL
+replace 00 o@ O@
+dictrules 6
+intonation 4
+stressAdd 0 0 0 0 0 0 0 20
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-rp b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-rp
new file mode 100644
index 00000000..fb72cf1f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-GB-x-rp
@@ -0,0 +1,15 @@
+name English (Received Pronunciation)
+language en-gb-x-rp
+language en-gb 4
+language en 5
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-rp
+
+replace 00 o@ O@
+replace 03 I i
+replace 03 I2 i
+replace 03 @ a#
+replace 03 3 a#
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-US b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-US
new file mode 100644
index 00000000..31db652b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-US
@@ -0,0 +1,15 @@
+name English (America)
+language en-us 2
+language en 3
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-us
+dictrules 3 6
+
+stressLength 140 120 190 170 0 0 255 300
+stressAmp 17 16 19 19 19 19 21 19
+
+replace 03 I i
+replace 03 I2 i
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-US-nyc b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-US-nyc
new file mode 100644
index 00000000..2d76f88a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/en-US-nyc
@@ -0,0 +1,14 @@
+name English (America, New York City)
+language en-us-nyc
+
+maintainer Richard Calvi
+status testing
+
+phonemes en-us-nyc
+dictrules 3 6
+
+stressLength 140 120 190 170 0 0 255 300
+stressAmp 17 16 19 19 19 19 21 19
+
+replace 03 I i
+replace 03 I2 i
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/lb b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/lb
new file mode 100644
index 00000000..79724594
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/lb
@@ -0,0 +1,2 @@
+name Luxembourgish
+language lb
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/nl b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/nl
new file mode 100644
index 00000000..a212fbef
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/gmw/nl
@@ -0,0 +1,2 @@
+name Dutch
+language nl
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/grk/el b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/grk/el
new file mode 100644
index 00000000..548a01bc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/grk/el
@@ -0,0 +1,2 @@
+name Greek
+language el
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/grk/grc b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/grk/grc
new file mode 100644
index 00000000..baa8b2c6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/grk/grc
@@ -0,0 +1,6 @@
+name Greek (Ancient)
+language grc
+
+stressLength 170 170 190 190 0 0 230 240
+dictrules 1
+words 3
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/as b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/as
new file mode 100644
index 00000000..23991ad7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/as
@@ -0,0 +1,4 @@
+name Assamese
+language as
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/bn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/bn
new file mode 100644
index 00000000..c7918026
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/bn
@@ -0,0 +1,2 @@
+name Bengali
+language bn
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/bpy b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/bpy
new file mode 100644
index 00000000..b63bc8d1
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/bpy
@@ -0,0 +1,2 @@
+name Bishnupriya Manipuri
+language bpy
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/gu b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/gu
new file mode 100644
index 00000000..fcdacd21
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/gu
@@ -0,0 +1,4 @@
+name Gujarati
+language gu
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/hi b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/hi
new file mode 100644
index 00000000..16ea3892
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/hi
@@ -0,0 +1,2 @@
+name Hindi
+language hi
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/kok b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/kok
new file mode 100644
index 00000000..f2b1cc53
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/kok
@@ -0,0 +1,2 @@
+name Konkani
+language kok
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/mr b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/mr
new file mode 100644
index 00000000..d9181f90
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/mr
@@ -0,0 +1,4 @@
+name Marathi
+language mr
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/ne b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/ne
new file mode 100644
index 00000000..4b64cc2b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/ne
@@ -0,0 +1,4 @@
+name Nepali
+language ne
+
+dictrules 1
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/or b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/or
new file mode 100644
index 00000000..95a990ec
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/or
@@ -0,0 +1,4 @@
+name Oriya
+language or
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/pa b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/pa
new file mode 100644
index 00000000..0e9552d3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/pa
@@ -0,0 +1,2 @@
+name Punjabi
+language pa
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/sd b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/sd
new file mode 100644
index 00000000..51cf8afe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/sd
@@ -0,0 +1,3 @@
+name Sindhi
+language sd
+maintainer Ejaz Shah
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/si b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/si
new file mode 100644
index 00000000..3f877191
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/si
@@ -0,0 +1,6 @@
+name Sinhala
+language si
+
+status testing
+
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/ur b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/ur
new file mode 100644
index 00000000..16e54695
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/inc/ur
@@ -0,0 +1,7 @@
+name Urdu
+language ur
+maintainer Ejaz Shah
+status testing
+
+stressRule 6
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/hy b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/hy
new file mode 100644
index 00000000..ee0be2fe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/hy
@@ -0,0 +1,3 @@
+name Armenian (East Armenia)
+language hy
+language hy-arevela
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/hyw b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/hyw
new file mode 100644
index 00000000..9d5fe86b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/hyw
@@ -0,0 +1,24 @@
+name Armenian (West Armenia)
+language hyw
+language hy-arevmda
+language hy 8
+
+dictionary hy
+dictrules 1
+
+phonemes hy
+
+// change consonants for West Armenian pronunciation
+replace 00 b p#
+replace 00 d t#
+replace 00 dz ts#
+replace 00 dZ tS#
+replace 00 g k#
+
+replace 00 p b
+replace 00 t d
+replace 00 ts dz
+replace 00 tS dZ
+replace 00 k g
+
+replace 00 R2 R // ??
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/sq b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/sq
new file mode 100644
index 00000000..9ace3576
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ine/sq
@@ -0,0 +1,5 @@
+name Albanian
+language sq
+
+// add this line to remove 'ë' at the end of words
+// replace 00 @/ NULL
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/fa b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/fa
new file mode 100644
index 00000000..5a0c2b6d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/fa
@@ -0,0 +1,4 @@
+name Persian
+language fa
+maintainer Shadyar Khodayari
+status mature
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/fa-Latn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/fa-Latn
new file mode 100644
index 00000000..02c6da6e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/fa-Latn
@@ -0,0 +1,8 @@
+name Persian (Pinglish)
+// Sometimes, Farsi speakers write Farsi words using English characters, particularly in Chat and SMS (texte messages).), called Pinglish
+language fa-latn
+maintainer Shadyar Khodayari
+status mature
+dictrules 1
+phonemes fa
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/ku b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/ku
new file mode 100644
index 00000000..b26bca25
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ira/ku
@@ -0,0 +1,5 @@
+name Kurdish
+language ku
+
+//words 1 48
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/iro/chr b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/iro/chr
new file mode 100644
index 00000000..abe29382
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/iro/chr
@@ -0,0 +1,27 @@
+name Cherokee //https://github.com/espeak-ng/espeak-ng/blob/master/docs/voices.md
+language chr-US-Qaaa-x-west 5
+
+maintainer Michael Conrad
+status testing
+
+pitch 90 160
+
+voicing 100
+
+consonants 100 100
+
+speed 100
+
+words 2 1
+
+phonemes chr
+
+//stress on all syllables to simulate stress on no syllables
+stressRule 9
+stressLength 175 175 175 175 175 175 175 175 //all vowels the same length regardless of stress
+stressAmp 10 10 10 10 10 10 10 10 //all vowels the same strength regardless of marked stress
+
+intonation 1
+
+tunes chrs chrc chrq chre
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/itc/la b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/itc/la
new file mode 100644
index 00000000..c57270f9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/itc/la
@@ -0,0 +1,12 @@
+name Latin
+language la
+stressRule 2 0 2
+// rule=penultimate
+// unstressed_wd1=0
+// unstressed_wd2=2
+stressOpt 0 5 // flags=0100001 (no automatic secondary stress + don't stres monosyllables)
+
+// short gap between words
+words 2
+
+// Note: The Latin voice needs long vowels to be marked with macrons
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/jpx/ja b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/jpx/ja
new file mode 100644
index 00000000..20e21a1e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/jpx/ja
@@ -0,0 +1,5 @@
+name Japanese
+language ja
+phonemes ja
+
+intonation 4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ko b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ko
new file mode 100644
index 00000000..f03ba091
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/ko
@@ -0,0 +1,5 @@
+name Korean
+language ko
+pitch 80 118
+intonation 2
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/map/haw b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/map/haw
new file mode 100644
index 00000000..c0869132
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/map/haw
@@ -0,0 +1,3 @@
+name Hawaiian
+language haw
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/miz/mto b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/miz/mto
new file mode 100644
index 00000000..eb0f75ff
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/miz/mto
@@ -0,0 +1,8 @@
+name Totontepec Mixe
+language mto
+
+maintainer Bill Dengler and Elizabeth Resendiz
+status testing
+
+lowercaseSentence
+tunes s6 c6 q6 e6
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/myn/quc b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/myn/quc
new file mode 100644
index 00000000..e8e0ec6b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/myn/quc
@@ -0,0 +1,6 @@
+name K'iche'
+language quc
+status testing
+stressRule 3 // stress on final syllable
+stressAmp 8 8 20 15 0 0 25 25 // reduce unstressed vowels
+stressLength 120 120 200 150 0 0 250 250 // reduce unstressed vowels
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/id b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/id
new file mode 100644
index 00000000..d300372f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/id
@@ -0,0 +1,7 @@
+name Indonesian
+language id
+
+stressLength 160 200 180 180 0 0 220 240
+stressAmp 16 18 18 18 0 0 22 21
+
+consonants 80 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/mi b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/mi
new file mode 100644
index 00000000..fa1c71eb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/mi
@@ -0,0 +1,21 @@
+name Māori
+language mi
+status testing
+
+// https://github.com/espeak-ng/espeak-ng/blob/master/docs/voices.md#words
+words 1 2
+
+// taken from Jacky
+pitch 115 130
+
+formant 0 150 155 100
+formant 1 90 155 70
+formant 2 95 70 64
+formant 3 15 20 30
+formant 4 20 30 40
+formant 5 65 20 65
+formant 6 70 80 100
+formant 7 20 80 100
+formant 8 100 95 80
+voicing 135
+consonants 110
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/ms b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/ms
new file mode 100644
index 00000000..27a2712a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/poz/ms
@@ -0,0 +1,14 @@
+// Last updated: 14 October 2010, Jason Ong (jason@portalgroove.com)
+name Malay
+language ms
+phonemes id
+
+stressLength 160 200 180 180 0 0 220 240
+stressAmp 16 18 18 18 0 0 22 21
+intonation 3 // Less intonation, and comma does not raise the pitch.
+
+// Nuance - Peninsula Malaysia
+// replace 3 a @ // change 'saya' to 'saye'
+ // (only the last phoneme of a word, only in unstressed syllables)
+
+consonants 80 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/qu b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/qu
new file mode 100644
index 00000000..aa717f29
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/qu
@@ -0,0 +1,5 @@
+name Quechua
+language qu
+stressRule 2 // stress on penultimate syllable
+status testing
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/an b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/an
new file mode 100644
index 00000000..dc75aa8e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/an
@@ -0,0 +1,2 @@
+name Aragonese
+language an
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ca b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ca
new file mode 100644
index 00000000..54af356f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ca
@@ -0,0 +1,2 @@
+name Catalan
+language ca
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/es b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/es
new file mode 100644
index 00000000..dc90e41c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/es
@@ -0,0 +1,4 @@
+name Spanish (Spain)
+language es
+dictrules 1
+tunes s6 c6 q6 e6
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/es-419 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/es-419
new file mode 100644
index 00000000..236bef0b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/es-419
@@ -0,0 +1,11 @@
+name Spanish (Latin America)
+language es-419
+language es-mx 6
+
+phonemes es-la
+dictrules 2
+intonation 2
+stressLength 170 200 230 180 0 0 250 280
+
+tunes s6 c6 q6 e6
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr
new file mode 100644
index 00000000..9e0b9440
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr
@@ -0,0 +1,6 @@
+name French (France)
+language fr-fr
+language fr
+
+dictrules 1
+tunes s3 c3 q3 e3
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr-BE b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr-BE
new file mode 100644
index 00000000..1a0311f9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr-BE
@@ -0,0 +1,8 @@
+name French (Belgium)
+language fr-be
+language fr 8
+
+dictrules 2
+tunes s3 c3 q3 e3
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr-CH b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr-CH
new file mode 100644
index 00000000..2e45fbd1
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/fr-CH
@@ -0,0 +1,6 @@
+name French (Switzerland)
+language fr-ch
+language fr 8
+
+dictrules 3
+tunes s3 c3 q3 e3
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ht b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ht
new file mode 100644
index 00000000..8b572258
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ht
@@ -0,0 +1,8 @@
+name Haitian Creole
+language ht
+status testing
+maintainer // TODO somebody should take responsibility for this
+
+phonemes ht
+dictionary ht
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/it b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/it
new file mode 100644
index 00000000..ad7bb50e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/it
@@ -0,0 +1,7 @@
+name Italian
+language it
+
+maintainer Christian Leo M
+status mature
+
+tunes s4 c4 q4 e4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pap b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pap
new file mode 100644
index 00000000..b9e07fe0
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pap
@@ -0,0 +1,7 @@
+name Papiamento
+language pap
+
+status testing
+
+phonemes base2
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pt b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pt
new file mode 100644
index 00000000..5041b511
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pt
@@ -0,0 +1,7 @@
+name Portuguese (Portugal)
+language pt
+language pt-pt
+phonemes pt-pt
+
+dictrules 1
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pt-BR b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pt-BR
new file mode 100644
index 00000000..52b850c3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/pt-BR
@@ -0,0 +1,7 @@
+name Portuguese (Brazil)
+language pt-br
+language pt 6
+
+dictrules 2
+stressLength 200 115 230 230 0 0 250 270
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ro b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ro
new file mode 100644
index 00000000..94441efe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/roa/ro
@@ -0,0 +1,2 @@
+name Romanian
+language ro
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sai/gn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sai/gn
new file mode 100644
index 00000000..6e183e5a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sai/gn
@@ -0,0 +1,4 @@
+name Guarani
+language gn
+dictrules 1
+words 0 1
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/am b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/am
new file mode 100644
index 00000000..87ed65a3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/am
@@ -0,0 +1,4 @@
+name Amharic
+language am
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/ar b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/ar
new file mode 100644
index 00000000..52198086
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/ar
@@ -0,0 +1,5 @@
+name Arabic
+language ar
+phonemes ar
+
+stressRule 4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/he b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/he
new file mode 100644
index 00000000..38cce90a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/he
@@ -0,0 +1,4 @@
+name Hebrew
+language he
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/mt b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/mt
new file mode 100644
index 00000000..ea8a3fce
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sem/mt
@@ -0,0 +1,4 @@
+name Maltese
+language mt
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/cmn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/cmn
new file mode 100644
index 00000000..451016d7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/cmn
@@ -0,0 +1,36 @@
+name Chinese (Mandarin, latin as English)
+language cmn
+language zh-cmn
+language zh
+
+phonemes cmn
+dictionary cmn
+words 1
+pitch 80 118
+
+dict_min 100000
+
+//for some dialects
+
+//[en]: replace ng with n
+//[zh]: ��������ng���n
+//replace 0 N n
+
+//[en]: replace rfx consonants
+//[zh]: ��������r���l��z��er���e
+//replace 0 ts.h tsh
+//replace 0 ts. ts
+//replace 0 s. s
+//replace 0 i. i[
+//replace 0 z. l
+//replace 0 z. z
+//replace 0 @r @
+
+//[en]: replace beginning n or l
+//[zh]: ����nl��n���l��l���n
+//replace 2 n l
+//replace 2 l n
+
+//[en]: replace beginning w with v
+//[zh]: w���v
+//replace 0 w v
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/cmn-Latn-pinyin b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/cmn-Latn-pinyin
new file mode 100644
index 00000000..4b63db71
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/cmn-Latn-pinyin
@@ -0,0 +1,11 @@
+name Chinese (Mandarin, latin as Pinyin)
+language cmn-latn-pinyin
+language zh-cmn
+language zh
+
+phonemes cmn
+dictionary cmn
+words 1
+pitch 80 118
+
+dict_min 100000
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/hak b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/hak
new file mode 100644
index 00000000..0c3bf14c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/hak
@@ -0,0 +1,6 @@
+name Hakka Chinese
+language hak
+maintainer Chen Chien-ting
+status testing
+phonemes hak
+dictionary hak
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/my b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/my
new file mode 100644
index 00000000..3dbc767a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/my
@@ -0,0 +1,3 @@
+name Myanmar (Burmese)
+maintainer Min Maung
+language my
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/yue b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/yue
new file mode 100644
index 00000000..d65fac1f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/yue
@@ -0,0 +1,13 @@
+name Chinese (Cantonese)
+language yue
+language zh-yue
+language zh 8
+
+phonemes yue
+dictionary yue
+
+// interpret English letters as 1=English words, 2=jyutping
+dictrules 1
+
+words 1
+dict_min 10000
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/yue-Latn-jyutping b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/yue-Latn-jyutping
new file mode 100644
index 00000000..2324cd7d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/sit/yue-Latn-jyutping
@@ -0,0 +1,13 @@
+name Chinese (Cantonese, latin as Jyutping)
+language yue
+language zh-yue
+language zh 8
+
+phonemes yue
+dictionary yue
+
+// interpret English letters as 1=English words, 2=jyutping
+dictrules 2
+
+words 1
+dict_min 10000
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/tai/shn b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/tai/shn
new file mode 100644
index 00000000..8d30384d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/tai/shn
@@ -0,0 +1,4 @@
+name Shan (Tai Yai)
+language shn
+maintainer ronaldaug
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/tai/th b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/tai/th
new file mode 100644
index 00000000..9b337c13
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/tai/th
@@ -0,0 +1,3 @@
+name Thai
+language th
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/az b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/az
new file mode 100644
index 00000000..fd9e4f33
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/az
@@ -0,0 +1,4 @@
+name Azerbaijani
+language az
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ba b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ba
new file mode 100644
index 00000000..09fab480
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ba
@@ -0,0 +1,2 @@
+name Bashkir
+language ba
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/cv b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/cv
new file mode 100644
index 00000000..44e37f67
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/cv
@@ -0,0 +1,3 @@
+name Chuvash
+language cv
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/kk b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/kk
new file mode 100644
index 00000000..df3b0a07
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/kk
@@ -0,0 +1,4 @@
+name Kazakh
+language kk
+status testing
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ky b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ky
new file mode 100644
index 00000000..c031449e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ky
@@ -0,0 +1,4 @@
+name Kyrgyz
+language ky
+
+tunes s3 c3 q3 e3
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/nog b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/nog
new file mode 100644
index 00000000..691d0310
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/nog
@@ -0,0 +1,3 @@
+name Nogai
+language nog
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tk b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tk
new file mode 100644
index 00000000..795413a3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tk
@@ -0,0 +1,2 @@
+name Turkmen
+language tk
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tr b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tr
new file mode 100644
index 00000000..1d5cbc49
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tr
@@ -0,0 +1,2 @@
+name Turkish
+language tr
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tt b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tt
new file mode 100644
index 00000000..10ebba4c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/tt
@@ -0,0 +1,2 @@
+name Tatar
+language tt
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ug b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ug
new file mode 100644
index 00000000..f81b44fc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/ug
@@ -0,0 +1,2 @@
+name Uyghur
+language ug
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/uz b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/uz
new file mode 100644
index 00000000..b1a7586c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/trk/uz
@@ -0,0 +1,4 @@
+name Uzbek
+language uz
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/et b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/et
new file mode 100644
index 00000000..096565f9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/et
@@ -0,0 +1,10 @@
+name Estonian
+language et
+
+stressAmp 18 16 22 22 20 22 22 22
+stressLength 150 180 200 200 0 0 210 250
+stressOpt 1 2 4 6 // (S_NO_DIM + S_FINAL_DIM = S_FINAL_DIM_ONLY), S_FINAL_NO_2, S_2_TO_HEAVY
+stressRule 0
+
+intonation 3
+spellingStress
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/fi b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/fi
new file mode 100644
index 00000000..fe2447c8
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/fi
@@ -0,0 +1,11 @@
+name Finnish
+language fi
+
+
+stressAmp 18 16 22 22 20 22 22 22
+stressLength 150 180 200 200 0 0 210 250
+stressOpt 1 2 4 6 // (S_NO_DIM + S_FINAL_DIM = S_FINAL_DIM_ONLY), S_FINAL_NO_2, S_2_TO_HEAVY
+stressRule 0
+
+intonation 3
+spellingStress
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/hu b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/hu
new file mode 100644
index 00000000..f5bb2958
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/hu
@@ -0,0 +1,7 @@
+name Hungarian
+language hu
+brackets 0
+bracketsAnnounced 0
+pitch 81 117
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/smj b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/smj
new file mode 100644
index 00000000..316559cf
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/urj/smj
@@ -0,0 +1,4 @@
+name Lule Saami
+language smj
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/be b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/be
new file mode 100644
index 00000000..31b14e53
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/be
@@ -0,0 +1,4 @@
+name Belarusian
+language be
+dict_min 2000
+speed 95
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru
new file mode 100644
index 00000000..959754b6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru
@@ -0,0 +1,4 @@
+name Russian
+language ru
+replace 03 a a#
+dict_min 20000
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru-LV b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru-LV
new file mode 100644
index 00000000..fc9541ba
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru-LV
@@ -0,0 +1,16 @@
+name Russian (Latvia)
+language ru-lv 2
+
+maintainer Valdis Vitolins
+status testing
+
+phonemes ru-lv
+dictrules 2
+dict_min 20000
+speed 95
+
+words 0 2
+tone 150 220 450 255 750 20 3500 255
+stressAmp 12 10 8 8 0 0 16 17
+stressLength 160 140 200 140 0 0 240 160
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru-cl b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru-cl
new file mode 100644
index 00000000..ad100caf
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/ru-cl
@@ -0,0 +1,6 @@
+name Russian (Classic)
+language ru-cl
+replace 03 a a#
+dict_min 20000
+speed 95
+dictrules 3
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/uk b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/uk
new file mode 100644
index 00000000..b318c235
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zle/uk
@@ -0,0 +1,7 @@
+name Ukrainian
+language uk
+
+maintainer Andrij Mizyk
+status testing
+
+speed 80
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/bg b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/bg
new file mode 100644
index 00000000..870c0424
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/bg
@@ -0,0 +1,5 @@
+name Bulgarian
+language bg
+
+stressAmp 13 12 17 17 20 22 22 21
+stressLength 180 170 200 200 200 200 210 220
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/bs b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/bs
new file mode 100644
index 00000000..01fd1746
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/bs
@@ -0,0 +1,14 @@
+name Bosnian
+language bs
+phonemes hr
+
+pitch 81 120
+formant 0 100 100 100
+formant 1 97 97 100
+formant 2 97 97 100
+formant 3 97 102 100
+formant 4 97 102 100
+formant 5 97 102 100
+
+stressAdd 10 10 0 0 0 0 -30 -30
+dictrules 3 4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/hr b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/hr
new file mode 100644
index 00000000..d1cae3a3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/hr
@@ -0,0 +1,15 @@
+name Croatian
+language hr
+language hbs
+
+// attributes towards !variant3
+pitch 81 120
+formant 0 100 100 100
+formant 1 97 97 100
+formant 2 97 97 100
+formant 3 97 102 100
+formant 4 97 102 100
+formant 5 97 102 100
+
+stressAdd 10 10 0 0 0 0 -30 -30
+dictrules 1
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/mk b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/mk
new file mode 100644
index 00000000..380c20b6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/mk
@@ -0,0 +1,2 @@
+name Macedonian
+language mk
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/sl b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/sl
new file mode 100644
index 00000000..b7bf01f2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/sl
@@ -0,0 +1,4 @@
+name Slovenian
+language sl
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/sr b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/sr
new file mode 100644
index 00000000..81e33907
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zls/sr
@@ -0,0 +1,13 @@
+name Serbian
+language sr
+
+// attributes towards !variant3 pitch 80 120
+formant 0 100 100 100
+formant 1 97 97 100
+formant 2 97 97 100
+formant 3 97 102 100
+formant 4 97 102 100
+formant 5 97 102 100
+
+stressAdd 10 10 0 0 0 0 -30 -30
+dictrules 2 4
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/cs b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/cs
new file mode 100644
index 00000000..5c3bf2ac
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/cs
@@ -0,0 +1,2 @@
+name Czech
+language cs
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/pl b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/pl
new file mode 100644
index 00000000..b85f56be
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/pl
@@ -0,0 +1,4 @@
+name Polish
+language pl
+
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/sk b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/sk
new file mode 100644
index 00000000..e849e61b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lang/zlw/sk
@@ -0,0 +1,2 @@
+name Slovak
+language sk
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lb_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lb_dict
new file mode 100644
index 00000000..d0aee674
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lb_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lfn_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lfn_dict
new file mode 100644
index 00000000..9a8d4f89
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lfn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lt_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lt_dict
new file mode 100644
index 00000000..d0dd29f6
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lv_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lv_dict
new file mode 100644
index 00000000..60d70b1b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/lv_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mi_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mi_dict
new file mode 100644
index 00000000..b727a301
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mi_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mk_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mk_dict
new file mode 100644
index 00000000..974626c1
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ml_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ml_dict
new file mode 100644
index 00000000..e12f2227
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ml_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mr_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mr_dict
new file mode 100644
index 00000000..2cbf14d5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ms_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ms_dict
new file mode 100644
index 00000000..cb6fc297
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ms_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mt_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mt_dict
new file mode 100644
index 00000000..8cc965b9
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mto_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mto_dict
new file mode 100644
index 00000000..280aaa44
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/mto_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/my_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/my_dict
new file mode 100644
index 00000000..f60804ec
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/my_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nci_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nci_dict
new file mode 100644
index 00000000..4f001af8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nci_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ne_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ne_dict
new file mode 100644
index 00000000..fa8e29c6
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ne_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nl_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nl_dict
new file mode 100644
index 00000000..4b371b1c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/no_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/no_dict
new file mode 100644
index 00000000..e1805fac
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/no_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nog_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nog_dict
new file mode 100644
index 00000000..0819a517
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/nog_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/om_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/om_dict
new file mode 100644
index 00000000..81fa80d2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/om_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/or_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/or_dict
new file mode 100644
index 00000000..ad2d1919
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/or_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pa_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pa_dict
new file mode 100644
index 00000000..08485ee8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pa_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pap_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pap_dict
new file mode 100644
index 00000000..3fccee67
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pap_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phondata b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phondata
new file mode 100644
index 00000000..5b3c94a5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phondata differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phondata-manifest b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phondata-manifest
new file mode 100644
index 00000000..e7eac9a7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phondata-manifest
@@ -0,0 +1,987 @@
+# This file lists the type of data that has been compiled into the
+# phondata file
+#
+# The first character of a line indicates the type of data:
+# S - A SPECT_SEQ structure
+# W - A wavefile segment
+# E - An envelope
+#
+# Address is the displacement within phondata of this item
+#
+# Address Data file
+# ------- ---------
+W 0x00008 ustop/null
+S 0x00158 vowel/@
+S 0x0021c vowel/@-
+S 0x002e0 vowel/a
+S 0x003e4 vowel/e
+S 0x004e8 vowel/i
+S 0x005ec vowel/oo
+S 0x006f0 vowel/u
+S 0x007f4 klatt/m-syl
+S 0x008f8 m/m-syl
+S 0x009bc klatt/n-syl
+S 0x00ac0 n/n-syl
+S 0x00b84 nn/nn-syl
+W 0x00cc8 ustop/percus10
+S 0x00ed4 vowelr/r-voc
+S 0x01018 vwl_hi/l-voc
+S 0x0111c r/r@
+S 0x011e0 r/ra
+S 0x012a4 r/re
+S 0x01368 r/ri
+S 0x0142c r/ro
+S 0x014f0 r/ru
+S 0x015b4 r/xr
+S 0x01638 r/_r
+S 0x016fc r/tr
+S 0x01780 r/r
+S 0x01844 r3/r_n
+W 0x018c8 r3/rx
+S 0x02c20 r/trr
+S 0x02ce4 r/rr
+S 0x02da8 r3/r_
+S 0x02e2c r3/r_trill2
+W 0x02ef0 r3/r_trill2.wav
+S 0x035fc r3/r_trill
+W 0x03700 r3/r_trill.wav
+W 0x0416c r3/r_trill3.wav
+S 0x045b0 r3/r_uvl
+W 0x046b4 r3/r_uvl.wav
+S 0x055bc l/l@
+S 0x05680 l/la
+S 0x05704 l/le
+S 0x05788 l/li
+S 0x0584c l/lo
+S 0x05950 l/lu
+S 0x05a14 l/L1_@L
+S 0x05b18 l/L1_aL
+S 0x05c1c l/L1_eL
+S 0x05ce0 l/L1_iL
+S 0x05de4 l/L1_oL
+S 0x05f28 l/L1_uL
+S 0x0602c l/l_
+S 0x060b0 l/xl
+S 0x06134 l/_l
+S 0x061f8 l/tl
+S 0x0627c l/l_long
+S 0x06300 l/l
+S 0x06384 l/L2_eL
+S 0x06448 l/L2_uL
+S 0x0654c l/L2_@L
+S 0x06650 l/L2_aL
+S 0x06754 l/L2_iL
+S 0x06858 l/L2_oL
+S 0x0699c l/l_@
+S 0x06a20 l/l_a
+S 0x06aa4 l/l_e
+S 0x06b28 l/l_i
+S 0x06bec l/l_o
+S 0x06cb0 l/l_u
+S 0x06d34 l^/j2@
+S 0x06df8 l^/j2a
+S 0x06ebc l^/j2e
+S 0x06f80 l^/j2i
+S 0x07044 l^/j2o
+S 0x07148 l^/j2u
+S 0x0724c l^/_l^
+S 0x07350 l^/l^
+S 0x07454 l^/l_rfx
+S 0x07518 ll/xll
+S 0x075dc ll/_ll
+S 0x076e0 ll/ll
+S 0x077a4 w/w@
+S 0x07868 w/wa
+S 0x0792c w/we
+S 0x079f0 w/wi
+S 0x07ab4 w/wo
+S 0x07b78 w/wu
+S 0x07c3c w/xw
+S 0x07cc0 w/w
+S 0x07d44 w/_w
+S 0x07e08 w/iw_
+S 0x07f0c w/w_
+S 0x07fd0 j/j@
+S 0x080d4 j/ja
+S 0x081d8 j/je
+S 0x082dc j/ji
+S 0x083a0 j/jo
+S 0x084e4 j/ju
+S 0x085a8 j/xj
+S 0x0862c j/_j
+S 0x086b0 j/j_
+S 0x08774 j2/j2@
+S 0x08838 j2/j2a
+S 0x088fc j2/j2e
+S 0x089c0 j2/j2i
+S 0x08a84 j2/j2o
+S 0x08b88 j2/j2u
+S 0x08c4c j2/xj2
+S 0x08cd0 j2/_j2
+S 0x08d54 klatt/m_
+S 0x08e58 klatt/m
+S 0x08f5c m/m@
+S 0x09060 m/ma
+S 0x09164 m/me
+S 0x09268 m/mi
+S 0x093ac m/mo
+S 0x094b0 m/mu
+S 0x095b4 m/mj
+S 0x09678 m/_m
+S 0x096fc m/m_
+S 0x097c0 klatt/n
+S 0x098c4 n/n@
+S 0x099c8 n/na
+S 0x09acc n/ne
+S 0x09bd0 n/ni
+S 0x09cd4 n/no
+S 0x09dd8 n/nu
+S 0x09edc n/nj
+S 0x09fa0 n/_n
+S 0x0a024 n/n_
+S 0x0a0e8 klatt/nr
+S 0x0a1ec n/nr@
+S 0x0a2f0 n/nra
+S 0x0a3f4 n/nre
+S 0x0a4f8 n/nri
+S 0x0a5fc n/nro
+S 0x0a700 n/nru
+S 0x0a804 n/_nr
+S 0x0a888 n/nr_
+S 0x0a94c klatt/n^@
+S 0x0a9d0 klatt/n^
+S 0x0aad4 n^/n^@
+S 0x0ac58 n^/n^a
+S 0x0ad9c n^/n^e
+S 0x0af20 n^/n^i
+S 0x0b0a4 n^/n^o
+S 0x0b268 n^/n^u
+S 0x0b3ec n^/_n^
+S 0x0b470 n^/n^_
+S 0x0b5b4 klatt/nn_
+S 0x0b6b8 klatt/nn
+S 0x0b7bc nn/nn@
+S 0x0b880 nn/nna
+S 0x0b944 nn/nne
+S 0x0ba08 nn/nni
+S 0x0bacc nn/nno
+S 0x0bb90 nn/nnu
+S 0x0bc54 nn/inn
+S 0x0bd18 nn/nnj
+S 0x0bd9c nn/_nn
+S 0x0be20 nn/nn_
+S 0x0bee4 r3/@tap2
+S 0x0c028 r3/@tap
+S 0x0c16c d/tap1
+S 0x0c230 d/tap3
+S 0x0c334 d/dr
+S 0x0c3b8 r3/@tap_rfx_
+S 0x0c4fc r3/@tap_rfx
+S 0x0c640 b/xb
+S 0x0c704 klatt/b
+W 0x0c7c8 x/b_
+W 0x0cbe0 x/b
+S 0x0cd44 b/b_
+S 0x0ce08 b/b@2
+S 0x0cf0c b/b@
+S 0x0d010 b/ba
+S 0x0d114 b/be
+S 0x0d218 b/bi
+S 0x0d31c b/bo
+S 0x0d420 b/bu
+S 0x0d524 b/b
+S 0x0d628 d/xd
+S 0x0d6ec d/d_
+W 0x0d7b0 x/d_
+S 0x0dbd8 d/d
+W 0x0dc9c x/d
+W 0x0deb8 x/d_dnt
+S 0x0e19c dzh/xdzh
+S 0x0e260 dzh/dzh_
+W 0x0e324 x/dzh_
+S 0x0ed5c dzh/dzh
+W 0x0ee20 x/dzh
+W 0x0f22c x/dz_pzd
+S 0x0f68c dzh/xdz_pzd
+S 0x0f750 klatt/dz_pzd_
+S 0x0f814 klatt/dz_pzd
+S 0x0f8d8 dzh/dz_pzd_
+S 0x0f99c dzh/dz_pzd
+S 0x0fa60 g/xg
+S 0x0fb24 g/g_
+W 0x0fbe8 x/g_
+S 0x0ffa8 g/g
+W 0x1006c x/g2
+S 0x102f4 klatt/v_
+W 0x103b8 vocw/v
+S 0x10cb8 klatt/bh
+S 0x10d7c voc/v_
+S 0x10e40 voc/bh
+S 0x10f04 klatt/v
+S 0x10fc8 voc/v
+S 0x110cc voc/v#_
+S 0x11190 voc/v#
+S 0x11294 voc/dh_
+W 0x11358 vocw/dh
+S 0x11c60 voc/dh
+S 0x11d24 voc/z_
+W 0x11de8 ufric/s_
+S 0x1289c voc/z
+S 0x12960 klatt/zh_
+W 0x12a24 vocw/zh
+S 0x1338c klatt/zh
+S 0x13450 voc/zh_
+S 0x13514 voc/zh
+W 0x135d8 vocw/zh_rfx
+S 0x13e68 voc/z_pzd_
+W 0x13f2c ufric/s_pzd_
+S 0x14a30 voc/z_pzd
+W 0x14af4 ufric/s_pzd
+W 0x1542c ufric/sh_pzd_
+W 0x15ef4 ufric/sh_pzd
+S 0x16828 voc/j
+W 0x1692c ufric/ch
+S 0x17044 klatt/qqh_
+W 0x17108 vocw/Q_
+S 0x17914 klatt/qqh
+W 0x179d8 vocw/Q
+S 0x181e4 voc/Q_
+S 0x182a8 voc/Q
+S 0x1836c voc/Q_ulv
+W 0x18470 ufric/xx
+W 0x18f6c ustop/p_
+W 0x1977c ustop/pr
+W 0x19bc4 ustop/p_unasp
+W 0x19ef0 ustop/pl
+W 0x1a2e8 ustop/p
+W 0x1a658 ustop/t_
+W 0x1ab18 ustop/tr
+W 0x1b278 ustop/t_dnt
+W 0x1b688 ustop/t
+W 0x1babc ustop/t_hi
+W 0x1bd88 ustop/tsh_
+W 0x1c6c8 ustop/tsh
+W 0x1cd08 ustop/ts_pzd
+W 0x1d40c ustop/t_pzd
+W 0x1d858 ustop/c
+W 0x1db08 ustop/k_
+W 0x1dfc4 ustop/kr
+W 0x1e604 ustop/ki
+W 0x1ebcc ustop/kl
+W 0x1f1fc ustop/k_unasp
+W 0x1f6d0 ustop/k
+W 0x1fba4 ustop/q
+W 0x1fd10 ustop/q_u
+W 0x1fe30 ufric/f_
+W 0x20900 ufric/f
+W 0x210f0 ufric/th_
+W 0x21970 ufric/th
+W 0x22208 ufric/s!
+W 0x22ab8 ufric/s
+W 0x23258 ufric/sh_
+W 0x23d08 ufric/sh
+W 0x246b8 ufric/sh_rfx
+W 0x25054 ufric/l#
+W 0x25a98 ufric/ch_
+W 0x263c0 ufric/x_
+W 0x26f1c ufric/x_hr
+W 0x27830 h/h@
+W 0x27d84 h/ha
+W 0x28400 h/he
+W 0x28a94 h/hi
+W 0x2902c h/ho
+W 0x296e8 h/hu
+W 0x29e0c h/h_
+W 0x2a4b8 ustop/ts_
+W 0x2ae18 ustop/ts
+S 0x2b874 d/xdz
+W 0x2b938 ustop/p_unasp_
+W 0x2ba74 ustop/p_asp
+W 0x2bf78 ustop/t_short
+W 0x2c1bc ustop/ts_pzd_
+W 0x2c680 ustop/ts_pzd2
+W 0x2c9b4 ustop/k_asp
+W 0x2d0b8 ustop/k_asp_e
+W 0x2d820 ustop/k_asp_a
+W 0x2e0a4 ufric/s_continue
+S 0x2e854 vowel/a#
+S 0x2e958 vowel/a_2
+S 0x2ea5c vowel/ee_1
+S 0x2eba0 vowel/o
+S 0x2ece4 vowel/oo_4
+S 0x2ede8 vowel/u_bck
+S 0x2eeec vowel/uu_2
+S 0x2eff0 vowel/y
+S 0x2f134 vowel/y#
+S 0x2f238 vdiph/au_4
+S 0x2f3bc vdiph/eu
+S 0x2f500 vdiph2/iu
+S 0x2f684 vdiph/ai
+S 0x2f7c8 vdiph/ei
+S 0x2f90c vdiph/eei
+S 0x2fa90 vdiph/oi
+S 0x2fc54 vdiph/ui
+S 0x2fd98 w/w2
+W 0x2fe5c ustop/t_dnt2
+S 0x300b4 vowel/ii_5
+S 0x301b8 vowel/e_mid2
+S 0x302bc vowel/ii#_2
+S 0x303c0 vdiph/ai_5
+S 0x30504 vowel/a_6
+S 0x30608 vdiph/@i_2
+S 0x3074c vowel/@_3
+S 0x30810 vowel/o-_4
+S 0x30914 vowel/u_2
+W 0x30a18 ustop/tsh_unasp
+W 0x30ed8 ustop/k_ejc
+W 0x31688 vwl_ar/hah
+W 0x325ec vwl_ar/dhad
+W 0x3364c vwl_ar/shin
+S 0x34428 vowel/aa_7
+S 0x3452c vowel/u_7
+S 0x34630 vowel/ii#
+S 0x34734 vowel/oe
+S 0x34838 vowel/o_mid
+S 0x3493c vowel/@_2
+S 0x34a40 vowel/ee
+S 0x34b44 vowel/aa_8
+S 0x34c48 vowel/0_3
+S 0x34d4c vowel/e_6
+S 0x34e50 vowel/ii
+E 0x34f54 envelope/i_risefall
+E 0x34fd4 envelope/p_fall
+E 0x35054 envelope/p_214
+E 0x350d4 envelope/p_rise
+E 0x35154 envelope/p_level
+S 0x351d4 n/n_long_
+S 0x35298 nn/nn2_
+W 0x3535c ustop/t_unasp2
+W 0x35468 ustop/k_unasp_
+W 0x35724 ustop/tsh_pzd_unasp
+W 0x35f74 ustop/tsh_pzd
+W 0x36ab4 ufric/sh_pzd2
+W 0x37604 ustop/ts_unasp
+W 0x37e7c ustop/ts_rfx_unasp
+W 0x38a68 ustop/ts_rfx
+S 0x39748 vwl_zh/a_n
+S 0x3984c vowel/aa_2
+S 0x399d0 vowel/a_3
+S 0x39ad4 vdiph/ai_6
+S 0x39c98 vwl_zh/aau
+S 0x39ddc vowel/@_bck
+S 0x39ee0 vowel/3_2
+S 0x3a024 vowelr/V3_r
+S 0x3a168 vowel/ee_2
+S 0x3a26c vdiph2/ei_4
+S 0x3a3b0 vowel/ii_2
+S 0x3a4b4 vowel/i#_7
+S 0x3a5b8 vowel/i#_6
+S 0x3a6bc vwl_zh/iaa
+S 0x3a800 vwl_zh/iaau
+S 0x3a984 vwl_zh/ie
+S 0x3aac8 vdiph2/iioo
+S 0x3ac0c vwl_zh/iou
+S 0x3ad90 vnasal/oo_n2
+S 0x3aed4 vdiph2/o_oo
+S 0x3b018 vowel/8
+S 0x3b11c vdiph/8u
+S 0x3b260 vwl_zh/ong
+S 0x3b3e4 vnasal/u_n
+S 0x3b4e8 vwl_zh/uaa
+S 0x3b62c vdiph2/oa
+S 0x3b770 vwl_zh/uai
+S 0x3b8f4 vdiph2/o@
+S 0x3ba78 vwl_zh/uei
+S 0x3bbfc vwl_zh/uo
+S 0x3bd80 vowel/uu_3
+S 0x3be44 vowel/y_2
+S 0x3bf88 vdiph2/yu
+S 0x3c10c vwl_zh/y&
+S 0x3c250 vwl_zh/yee
+S 0x3c394 vdiph2/y@
+S 0x3c4d8 vdiph/yi
+S 0x3c61c vowel/ii_3
+S 0x3c720 vowel/oo_2
+S 0x3c824 vowel/i#
+S 0x3c928 vowel/o_2
+S 0x3ca6c vdiph/aai_2
+S 0x3cc30 vdiph/ai_2
+S 0x3cdf4 vdiph2/iu_4
+S 0x3cf38 vdiph/ooi
+S 0x3d0fc vdiph/ui_3
+S 0x3d280 vowel/a#_3
+S 0x3d384 r/a_
+S 0x3d448 vowel/i_4
+S 0x3d54c vowel/&
+S 0x3d650 vowel/a_8
+S 0x3d754 vowel/o_5
+S 0x3d858 vowel/V_4
+S 0x3d95c vowel/yy
+S 0x3da60 vowel/V
+S 0x3db64 r/aa
+S 0x3dc68 r2/r2@
+S 0x3dd2c r2/r2a
+S 0x3ddf0 r2/r2e
+S 0x3def4 r2/r2i
+S 0x3dfb8 r2/r2o
+S 0x3e07c r2/r2u
+S 0x3e140 vowel/@_6
+S 0x3e244 vwl_en/@L
+S 0x3e308 vowel/ee_5
+S 0x3e40c vowel/ii#_3
+S 0x3e510 vowel/ii_4
+S 0x3e614 vowel/ii_7
+S 0x3e718 vowel/0
+S 0x3e81c vowel/V_2
+S 0x3e920 vowel/8_2
+S 0x3ea24 vowel/uu
+S 0x3eb28 vowel/3_en
+S 0x3ec6c w/wi2
+S 0x3ed70 vowel/i_en
+S 0x3eeb4 vowel/oo_en
+S 0x3eff8 vwl_en/u_L
+S 0x3f13c vdiph2/uw_2
+S 0x3f280 vdiph/au
+S 0x3f404 vdiph/@u_en
+S 0x3f588 vdiph2/ii@
+S 0x3f70c vdiph2/8@
+S 0x3f850 vdiph2/uu@
+S 0x3f9d4 vwl_en/aI@
+S 0x3fb98 vwl_en/aU@
+S 0x3fd1c vowelr/V_r
+S 0x3fe60 vnasal/aa_n2
+S 0x3ffa4 vowel/oo_1
+S 0x400e8 vdiph/eei_2
+S 0x4022c vdiph/ooi_2
+S 0x403f0 vowel/aa_9
+S 0x404f4 vowel/aa
+S 0x405f8 vowel/e#
+S 0x406fc vowel/e_7
+S 0x40800 vowel/ee#_2
+S 0x40904 vowel/i_8
+S 0x40a08 vowel/i_7
+S 0x40b0c vowel/u_bck2
+S 0x40c10 vowel/u_bck3
+S 0x40d14 vowel/u_5
+S 0x40e18 vowel/8_7
+S 0x40f1c vowel/8_4
+S 0x41020 vdiph/&i
+S 0x41164 vdiph/@i
+W 0x412a8 ufric/s_pal
+S 0x41b5c d/xd_pzd
+W 0x41c20 x/d_pzd
+S 0x42034 vdiph/ou_2
+S 0x42178 vowel/aa#
+S 0x4227c vowel/uu_4
+S 0x42380 vdiph/aai_3
+S 0x42504 vdiph/y#i
+S 0x42648 vdiph/ui_4
+S 0x4278c vdiph/aau
+S 0x42910 vdiph/ou
+S 0x42a54 vdiph/eu_2
+S 0x42b98 vdiph2/iu_2
+S 0x42d1c vdiph/&y
+S 0x42e60 vdiph/eey
+S 0x42fa4 vdiph/y#y
+S 0x430e8 vdiph2/iy
+S 0x4322c vdiph2/uo
+S 0x43370 vdiph2/ie
+S 0x434b4 vdiph2/y-y#
+S 0x435f8 r3/r_trill_short
+W 0x436fc h/hu_fi
+S 0x43fec vowel/@_4
+S 0x440b0 vowel/ee_4
+S 0x441b4 vowel/u#_2
+S 0x442b8 vowel/oe_2
+S 0x443bc vwl_fr/y2r
+S 0x44440 vwl_fr/e_2r
+S 0x444c4 vwl_fr/aa2r
+S 0x44548 vwl_fr/ee2r
+S 0x4460c vwl_fr/oo2r
+S 0x446d0 vwl_fr/@2r
+S 0x44754 vwl_fr/a2r
+S 0x447d8 vwl_fr/e2r
+S 0x4485c vwl_fr/i2r
+S 0x448e0 vwl_fr/o2r
+S 0x44964 vwl_fr/u2r
+S 0x449e8 vwl_fr/re2
+S 0x44a6c vwl_fr/r@2
+S 0x44af0 vwl_fr/raa
+S 0x44b74 vwl_fr/ree
+S 0x44bf8 vwl_fr/ry
+S 0x44c7c vwl_fr/rw
+S 0x44d00 vwl_fr/roo
+S 0x44d84 vwl_fr/rj
+S 0x44e08 vwl_fr/r@
+S 0x44e8c vwl_fr/ra
+S 0x44f10 vwl_fr/re
+S 0x44f94 vwl_fr/ri
+S 0x45018 vwl_fr/ro
+S 0x4509c vwl_fr/ru
+S 0x45120 vwl_fr/r
+S 0x451a4 vwl_fr/trr
+S 0x45268 vwl_fr/rr
+S 0x452ec vwl_fr/r_@
+S 0x45370 vwl_fr/r_a
+S 0x453f4 vwl_fr/r_e
+S 0x45478 vwl_fr/r_i
+S 0x454fc vwl_fr/r_o
+S 0x45580 vwl_fr/r_u
+S 0x45604 vwl_fr/r_y
+S 0x45688 vwl_fr/r_n
+S 0x4574c vwl_fr/r_
+S 0x457d0 vwl_fr/tr
+S 0x458d4 vwl_fr/br
+S 0x459d8 vwl_fr/lo
+S 0x45a5c l/l_y
+S 0x45ae0 vowel/@_hgh
+S 0x45ba4 vowel/a_7
+S 0x45ca8 vowel/e_8
+S 0x45dac vowel/e_mid
+S 0x45eb0 vwl_fr/j
+S 0x45fb4 vowel/o_8
+S 0x460f8 vowel/o_mid2
+S 0x461fc vwl_fr/wa
+S 0x462c0 vnasal/aa_n4
+S 0x46404 vnasal/W_n
+S 0x46548 vnasal/o_n5
+S 0x4668c b/xbr
+S 0x46750 b/br
+S 0x467d4 d/xdr
+S 0x46898 g/xgr
+S 0x4695c g/gr
+W 0x46a20 x/g
+W 0x46ce0 ustop/t_short_
+S 0x46f6c vwl_af/r@
+S 0x47030 vwl_af/@
+S 0x470f4 vowel/a_4
+S 0x471f8 vdiph/@u_3
+S 0x4737c vdiph2/i@
+S 0x47540 vdiph2/u@
+S 0x476c4 vnasal/a#_n2
+S 0x477c8 vnasal/a_n
+S 0x4790c vnasal/e_n
+S 0x47a10 vnasal/i_n
+S 0x47b14 vnasal/o_n
+S 0x47c58 vowel/yy_4
+S 0x47d5c vowel/o-
+S 0x47e60 vwl_lv/a
+S 0x47f64 vwl_lv/aa
+S 0x48028 vwl_lv/e
+S 0x480ec vwl_lv/ee
+S 0x481b0 vwl_lv/i
+S 0x48274 vwl_lv/ii
+S 0x48338 vwl_lv/o
+S 0x483fc vwl_lv/oo
+S 0x484c0 vwl_lv/u
+S 0x48584 vwl_lv/uu
+S 0x48648 vdiph/aai
+S 0x487cc vdiph2/ie_2
+S 0x48910 vdiph2/ua
+S 0x48a14 vowel/@_low
+S 0x48ad8 vowel/V_3
+S 0x48bdc vowel/i_fnt
+S 0x48ce0 vowel/ii_6
+S 0x48da4 vowel/e_2
+S 0x48ea8 vdiph/ee-e
+S 0x48fec vowel/a_5
+S 0x490f0 vowel/uu_bck
+S 0x491f4 vnasal/i_n2
+S 0x492f8 vnasal/ii_n
+S 0x493fc vnasal/ee_n2
+S 0x49540 vnasal/V_n
+S 0x49644 vdiph/aau_3
+S 0x497c8 d/xd3
+W 0x4988c ustop/th_rfx2
+S 0x49e90 g2/xg
+W 0x49f54 ustop/percus02
+W 0x4a284 ustop/ts2
+S 0x4a754 vowel/y#_2
+S 0x4a858 vowel/e_3
+S 0x4a95c vowel/e_e
+S 0x4aa60 vowel/a#_2
+S 0x4ab64 vowel/oo_5
+S 0x4ac68 vowel/y##
+S 0x4ad6c vowel/y#_3
+S 0x4ae70 vdiph/ai_7
+S 0x4aff4 vdiph/ou_3
+S 0x4b0f8 vdiph/y#i_2
+S 0x4b23c m/m#_
+S 0x4b340 n/n#_
+S 0x4b444 n^/n^#_
+S 0x4b548 nn/nn#_
+W 0x4b64c ufric/tl#
+S 0x4bfb4 r3/r#_
+S 0x4c038 vowel/oo_3
+W 0x4c0fc ustop/k_asp_u
+W 0x4c92c ufric/x2
+S 0x4d284 vowel/aa_6
+S 0x4d3c8 vowel/u#_7
+S 0x4d4cc vowel/V_6
+W 0x4d5d0 ustop/t_unasp
+W 0x4d708 ustop/ts_pzd3
+S 0x4dd88 vowel/i_2
+S 0x4de8c vdiph/aau_2
+S 0x4dfd0 vdiph/ae
+S 0x4e114 vdiph/eeu_2
+S 0x4e258 vdiph/ae_2
+S 0x4e3dc vdiph/eei_5
+S 0x4e520 vwl_ru/ee
+S 0x4e664 vdiph2/ea
+S 0x4e7a8 vowel/i_3
+S 0x4e8ac vowel/i_6
+S 0x4e9b0 vdiph2/uaa
+S 0x4eb34 vdiph/eei_3
+S 0x4ec78 vwl_lv/e2
+S 0x4ed3c vwl_lv/ee2
+S 0x4ee00 vwl_lv/y
+S 0x4ef04 vwl_lv/yy
+S 0x4f008 vwl_lv/ai
+S 0x4f18c vwl_lv/au
+S 0x4f310 vwl_lv/ei
+S 0x4f454 vwl_lv/ie
+S 0x4f598 vwl_lv/iu
+S 0x4f71c vwl_lv/ui
+S 0x4f860 vwl_lv/ua
+S 0x4f964 vwl_lv/oi
+W 0x4fb28 h/h-lv
+S 0x504a8 l^/l^_
+W 0x505ac myanmar/k
+W 0x5149c myanmar/kh
+W 0x520b4 myanmar/g.wav
+S 0x52ef8 myanmar/ny
+W 0x530bc myanmar/s
+W 0x54258 myanmar/hs
+W 0x553f4 myanmar/z
+W 0x564dc myanmar/t_short
+W 0x5662c myanmar/ht
+W 0x571b4 myanmar/d
+W 0x57d28 myanmar/p
+W 0x58c54 myanmar/t_hi
+W 0x58f20 myanmar/h
+S 0x5a228 myanmar/yy
+S 0x5a42c myanmar/a
+S 0x5a4b0 myanmar/ky
+W 0x5a6f4 myanmar/by.wav
+W 0x5ac00 myanmar/ch.wav
+W 0x5b454 myanmar/gya.wav
+W 0x5c7d8 myanmar/htya.wav
+W 0x5db1c myanmar/phya.wav
+W 0x5e7d4 myanmar/pya.wav
+W 0x5fc58 myanmar/ty.wav
+W 0x60f18 myanmar/sh.wav
+S 0x61b2c myanmar/a01
+S 0x61c30 myanmar/a02
+S 0x61db4 myanmar/a03
+S 0x62038 myanmar/a04
+S 0x620fc myanmar/a05
+S 0x62200 myanmar/a06
+S 0x62584 myanmar/a07
+S 0x626c8 myanmar/a08
+S 0x6284c myanmar/a09
+S 0x62b50 myanmar/a11
+S 0x62cd4 myanmar/a12
+S 0x62f98 myanmar/a14
+S 0x6315c myanmar/a13
+S 0x633e0 myanmar/a17
+S 0x636a4 myanmar/a16
+S 0x639a8 myanmar/a20
+S 0x63b2c myanmar/a19
+S 0x63d70 myanmar/a21
+S 0x64034 myanmar/a23
+S 0x64138 myanmar/a22
+S 0x642bc myanmar/a24
+S 0x64600 myanmar/a29
+S 0x64744 myanmar/a28
+S 0x64988 myanmar/a30
+S 0x64d0c myanmar/a32
+S 0x64f50 myanmar/a31
+S 0x65214 myanmar/a33
+S 0x65318 myanmar/a35
+S 0x655dc myanmar/a34
+S 0x658a0 myanmar/a36
+S 0x65ba4 myanmar/a43
+S 0x65de8 myanmar/a42
+S 0x6602c myanmar/a44
+S 0x66430 myanmar/a49
+S 0x665b4 myanmar/a50
+S 0x66838 myanmar/a46
+S 0x66a3c myanmar/a45
+S 0x66c40 myanmar/a47
+S 0x66f44 myanmar/a25
+S 0x67088 myanmar/a26
+S 0x672cc myanmar/a27
+S 0x67490 myanmar/a37
+S 0x67654 myanmar/a38
+S 0x67798 myanmar/a39
+S 0x679dc myanmar/a40
+S 0x67b60 myanmar/a41
+S 0x67ce4 vowel/y_4
+S 0x67de8 vwl_no/y#
+S 0x67eec vwl_no/&
+S 0x67ff0 vwl_no/u#
+S 0x680f4 vwl_no/u#2
+S 0x68238 vdiph/0i_2
+S 0x683bc vdiph/ai_3
+S 0x68500 vwl_no/y#y
+S 0x68644 vwl_no/au-
+S 0x68808 vowel/ee#
+S 0x6890c vnasal/ee_u_n
+S 0x68a90 vnasal/oo_n3
+S 0x68c14 vowel/aa_3
+W 0x68d18 vocw/Q2
+W 0x695e4 ustop/tsh_asp
+W 0x6a24c x/g3
+S 0x6a434 vwl_ro/mi
+S 0x6a578 vwl_ru/ii-
+S 0x6a63c vwl_ru/ii
+S 0x6a740 vwl_ru/ii#
+S 0x6a804 vwl_ru/i#
+S 0x6a908 vwl_ru/e
+S 0x6aa0c vwl_ru/E#
+S 0x6ab10 vwl_ru/E@
+S 0x6ac14 vwl_ru/o
+S 0x6ad18 vwl_ru/oo
+S 0x6addc vwl_ru/u
+S 0x6aee0 vwl_ru/u#
+S 0x6b024 vwl_ru/u#u
+S 0x6b168 vwl_ru/8
+S 0x6b22c vwl_ru/ju
+S 0x6b330 vwl_ru/ja
+S 0x6b4b4 vwl_ru/a
+S 0x6b5b8 vwl_ru/aa
+S 0x6b6bc r3/r_ru2
+W 0x6b7c0 r3/r_ru
+S 0x6bac4 vwl_it/o_open
+S 0x6bbc8 vdiph/eeu
+S 0x6bd0c vdiph/au_2
+S 0x6be90 vdiph/ooi_3
+S 0x6c014 vdiph/aau_4
+S 0x6c198 vowel/8_6
+S 0x6c29c vdiph/ooi_4
+S 0x6c3e0 vdiph2/ye
+S 0x6c524 l/l_front_
+S 0x6c668 l/l_front
+S 0x6c76c l/l_4
+S 0x6c830 vowel/ee_6
+S 0x6c8f4 vowel/y_5
+S 0x6ca38 vowel/yy_3
+S 0x6cb3c vowel/oe_4
+S 0x6cc00 vowel/aa_4
+W 0x6cd04 ufric/sx_sv
+S 0x6d54c vowel/o_4
+W 0x6d650 ustop/t_hard
+W 0x6d890 ufric/sh3
+S 0x6e224 vwl_tn/r@
+S 0x6e2e8 vwl_tn/@
+S 0x6e3ac vwl_tn/I
+S 0x6e470 vdiph/i@_2
+S 0x6e5f4 vowel/0_2
+W 0x6e6f8 ufric/tlh
+E 0x6fc14 envelope/p_fallrise
+E 0x6fc94 envelope/vi_5amp
+E 0x6fd14 envelope/p_512
+E 0x6fd94 envelope/vi_6amp
+S 0x6fe14 vietnam/a_2
+S 0x6ff58 vietnam/aa
+S 0x7005c vietnam/e_e_2
+S 0x70160 vietnam/e
+S 0x70264 vietnam/e_short_1
+S 0x703e8 vietnam/i
+S 0x704ec vietnam/i_2
+S 0x705f0 vietnam/oo
+S 0x70734 vietnam/o_2
+S 0x70878 vietnam/u
+S 0x7097c vietnam/y_2
+S 0x70a80 vietnam/V_2
+S 0x70b84 vietnam/@_2
+S 0x70c88 vdiph/&i_2
+S 0x70dcc vdiph/u-i
+S 0x70f10 vdiph/@u
+S 0x71054 vdiph2/ii@_3
+S 0x711d8 vietnam/y@
+S 0x7131c vietnam/u@
+S 0x714a0 vietnam/o#
+S 0x715e4 vietnam/O_short_2
+S 0x71728 vietnam/oe
+S 0x7186c vietnam/ie
+S 0x719b0 vnasal/oi_n
+S 0x71b74 vdiph/@i_3
+S 0x71cb8 vowel/u_3
+W 0x71dbc vietnam/c_2
+W 0x722f8 vietnam/c
+S 0x72834 n/nm
+S 0x728f8 l/l_vi
+W 0x729fc vietnam/th
+W 0x72fec vietnam/tr
+W 0x732dc vietnam/dda_2
+W 0x737a8 vietnam/ch
+W 0x73d04 vietnam/w
+S 0x73f5c vietnam/_w
+S 0x74020 vietnam/w_
+S 0x740e4 vietnam/n^_
+W 0x74228 vietnam/hi
+W 0x74594 vietnam/hu
+S 0x74c18 vwl_zh/ang
+S 0x74e1c vwl_zh/aang
+S 0x75060 vwl_zh/eng
+S 0x75264 vwl_zh/ing
+S 0x754a8 vwl_zh/ng
+S 0x755ec vwl_zh/oeng
+S 0x757b0 vwl_zh/ung
+S 0x75934 vowel/8_3
+S 0x75a38 vdiph/y#y_2
+W 0x75bbc ustop/tsh_sr
+E 0x764d4 envelope/chr_fall21
+E 0x76554 envelope/chr_level2
+E 0x765d4 envelope/chr_rise23
+E 0x76654 envelope/chr_fall32
+E 0x766d4 envelope/chr_level3
+E 0x76754 envelope/chr_rise4
+E 0x767d4 envelope/chr_fall43
+S 0x76854 vnasal/a#_n
+W 0x76958 x/dz_pzd_
+S 0x77048 vwl_es/oo_
+S 0x7710c vwl_es/ooi_
+S 0x77290 vwl_es/ooi
+S 0x77414 voc/v2
+W 0x774d8 ufric/z_eu
+W 0x77ee0 ufric/ts_eu
+W 0x78888 ufric/tz_eu
+S 0x792f4 vdiph/0i
+S 0x794b8 vdiph/oou
+S 0x795fc vwl_it/a
+S 0x79700 vwl_it/e_open
+S 0x79804 vwl_it/i
+S 0x79908 vwl_it/o
+S 0x79a4c vwl_it/u
+S 0x79b50 vowel/8_5
+S 0x79c54 vowel/o_7
+S 0x79d58 vdiph/eeu_3
+S 0x79e9c vnasal/a#u_n
+S 0x79fe0 vowel/ee_3
+S 0x7a0a4 d/x_tap
+S 0x7a168 d/tap2
+S 0x7a22c vwl_ro/li
+S 0x7a330 vwl_ro/ni
+S 0x7a434 vwl_ro/ii-
+S 0x7a4f8 vowel/i#_5
+S 0x7a5fc vdiph/ii
+S 0x7a7c0 vdiph/i#i
+S 0x7a904 vdiph2/uw_3
+S 0x7aa48 vdiph2/eo
+S 0x7abcc vdiph2/e_u
+S 0x7ad10 d/tap_i
+S 0x7add4 d/tap
+S 0x7ae98 vowel/u#
+S 0x7af9c vowel/@_fr
+S 0x7b060 vowel/o-_2
+S 0x7b164 vowel/aa_5
+S 0x7b2a8 vwl_en_n/O@
+S 0x7b3ac vdiph2/uw_4
+S 0x7b4f0 vdiph2/ee@
+S 0x7b634 vowel/ii_final
+S 0x7b738 vowel/o-_3
+S 0x7b83c vwl_en_rp/aa
+S 0x7b980 vowel/3_3
+S 0x7bac4 vowel/uu#_2
+S 0x7bbc8 vdiph/au_3
+S 0x7bd4c vdiph/@u_2
+S 0x7be90 vdiph2/ei_2
+S 0x7bfd4 vdiph2/ee@_2
+S 0x7c118 vwl_en_rp/i@
+S 0x7c29c vwl_en_rp/aU@
+S 0x7c420 vowel/e_5
+S 0x7c524 vowel/u#_4
+S 0x7c628 vowelr/aa_r
+S 0x7c7ec vowelr/e_r
+S 0x7c970 vowel/i_5
+S 0x7ca74 vwl_en_us/or
+S 0x7cbb8 vowelr/oo_r
+S 0x7ccbc vdiph/au#
+S 0x7ce00 vowel/o_3
+S 0x7cf44 vwl_en/aI@_2
+S 0x7d0c8 vdiph2/e@
+S 0x7d20c vowelr/i_r
+S 0x7d350 vdiph2/u#@
+S 0x7d494 vwl_en/@L_2
+S 0x7d598 vwl_en_us/3_us
+S 0x7d69c vowel/@_low2
+S 0x7d760 vwl_en_us/ar
+S 0x7d8a4 vwl_en_us/a
+S 0x7d9a8 vwl_en_us/ee
+S 0x7daac vwl_en_us/aar
+S 0x7dc30 vwl_en_us/3_us2
+S 0x7dd74 vwl_en_us/oor
+S 0x7def8 vdiph2/uw_6
+S 0x7e03c vdiph/aoo
+S 0x7e180 vwl_en_us/ai
+S 0x7e304 vwl_en_us/er
+S 0x7e488 vwl_en_us/ir
+S 0x7e60c vwl_en_us/ur
+S 0x7e750 vwl_en_us/ai@
+S 0x7e8d4 vwl_en_us/ai3
+S 0x7ead8 vwl_en_us/aU@
+S 0x7ec9c klatt/x_tap
+S 0x7ed60 klatt/tap2
+S 0x7ee24 vwl_en_us_nyc/a_raised
+S 0x7ef28 vwl_en_us_nyc/a
+S 0x7f02c vwl_en_us_nyc/0_3
+S 0x7f130 vwl_en_us_nyc/aa_8
+S 0x7f234 vwl_en_us_nyc/@i
+S 0x7f3f8 vowel/@_fnt
+S 0x7f4fc vdiph2/ei_3
+S 0x7f640 vdiph/Vu_2
+S 0x7f7c4 vdiph2/i@_2
+S 0x7f948 vwl_en/ooi@
+S 0x7fb0c vwl_af/I
+S 0x7fbd0 l/L_eL_af
+S 0x7fc94 vowel/y_3
+S 0x7fd98 vdiph2/iu_3
+S 0x7ff5c vdiph/Vu
+S 0x800e0 vdiph/ai_4
+S 0x80264 vdiph/oi_2
+S 0x80428 vdiph/ui_2
+S 0x805ac vdiph2/y#@
+S 0x806f0 vnasal/aa_n3
+S 0x80834 vnasal/o_n2
+S 0x80978 vdiph/aau_6
+S 0x80afc vwl_de/y#
+S 0x80c00 l/l_3
+S 0x80c84 j/_j_short
+S 0x80d08 vdiph2/i@_3
+S 0x80e8c vwl_de/uu_@
+S 0x80fd0 vdiph2/ii@_2
+S 0x81154 vowel/ii_8
+S 0x81258 vowel/y#_4
+S 0x8135c vowel/o_6
+S 0x81460 vowel/a#_4
+S 0x81564 vdiph/y#y_3
+S 0x81668 vdiph/ou_4
+S 0x817ac voc/Q_less
+S 0x81870 vnasal/&_n
+W 0x81974 ustop/ki_ejc
+S 0x81d80 vdiph/Vi
+S 0x81f04 vowel/u_6
+S 0x82008 vowel/u#_3
+S 0x8210c vdiph/ai_8
+S 0x82290 voc/murmur1
+S 0x823d4 vdiph/@i_4
+S 0x82558 vnasal/ai_n
+S 0x8269c vdiph/a#u
+S 0x82820 vnasal/au_n
+S 0x82964 d/dr2
+S 0x82a28 vowel/&_2
+W 0x82b2c ustop/tsh_unasp2
+W 0x82f74 r3/rz_cs
+S 0x83a20 voc/zh_2
+W 0x83ae4 ustop/tsh2
+S 0x841f0 dzh/dzh2
+W 0x842b4 ustop/t_sr
+S 0x845ec d/d_dnt
+W 0x846b0 ufric/ch_sr
+W 0x85290 ufric/x_sr
+W 0x85b10 ustop/ts_sr
+S 0x862cc vowel/&_3
+S 0x863d0 vwl_fr/@R
+S 0x864d4 vietnam/a
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phonindex b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phonindex
new file mode 100644
index 00000000..03ba8068
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phonindex differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phontab b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phontab
new file mode 100644
index 00000000..5c25ca1f
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/phontab differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/piqd_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/piqd_dict
new file mode 100644
index 00000000..7924788c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/piqd_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pl_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pl_dict
new file mode 100644
index 00000000..dcb41321
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pt_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pt_dict
new file mode 100644
index 00000000..c8019733
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/pt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/py_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/py_dict
new file mode 100644
index 00000000..47b81238
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/py_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qdb_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qdb_dict
new file mode 100644
index 00000000..18a6895b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qdb_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qu_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qu_dict
new file mode 100644
index 00000000..afb6dcf0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qu_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/quc_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/quc_dict
new file mode 100644
index 00000000..2361f7b5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/quc_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qya_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qya_dict
new file mode 100644
index 00000000..94689430
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/qya_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ro_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ro_dict
new file mode 100644
index 00000000..22f7dfba
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ro_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ru_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ru_dict
new file mode 100644
index 00000000..ac39ad91
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ru_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sd_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sd_dict
new file mode 100644
index 00000000..c877d441
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sd_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/shn_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/shn_dict
new file mode 100644
index 00000000..625f6858
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/shn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/si_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/si_dict
new file mode 100644
index 00000000..9634893c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/si_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sjn_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sjn_dict
new file mode 100644
index 00000000..ba76f7c2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sjn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sk_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sk_dict
new file mode 100644
index 00000000..cd99f8f0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sl_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sl_dict
new file mode 100644
index 00000000..e13eb491
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/smj_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/smj_dict
new file mode 100644
index 00000000..203230f5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/smj_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sq_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sq_dict
new file mode 100644
index 00000000..fccdbf3f
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sq_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sr_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sr_dict
new file mode 100644
index 00000000..63576dd3
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sv_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sv_dict
new file mode 100644
index 00000000..a4e3f6d8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sv_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sw_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sw_dict
new file mode 100644
index 00000000..601f310c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/sw_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ta_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ta_dict
new file mode 100644
index 00000000..7e51266d
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ta_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/te_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/te_dict
new file mode 100644
index 00000000..36167c22
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/te_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/th_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/th_dict
new file mode 100644
index 00000000..f8689fdf
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/th_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tk_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tk_dict
new file mode 100644
index 00000000..e0dace41
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tn_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tn_dict
new file mode 100644
index 00000000..ffa39622
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tr_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tr_dict
new file mode 100644
index 00000000..69d521fe
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tt_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tt_dict
new file mode 100644
index 00000000..ef0b02bf
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/tt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ug_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ug_dict
new file mode 100644
index 00000000..25f827fd
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ug_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/uk_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/uk_dict
new file mode 100644
index 00000000..326dc446
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/uk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ur_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ur_dict
new file mode 100644
index 00000000..cfc9693b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/ur_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/uz_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/uz_dict
new file mode 100644
index 00000000..c58fae50
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/uz_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/vi_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/vi_dict
new file mode 100644
index 00000000..226a7990
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/vi_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Alex b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Alex
new file mode 100644
index 00000000..10c6b6e6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Alex
@@ -0,0 +1,10 @@
+language variant
+name Alex
+
+voicing 70
+pitch 105 115
+flutter 0
+
+formant 1 110 115 100
+formant 2 100 110 100
+formant 3 100 80 75
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Alicia b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Alicia
new file mode 100644
index 00000000..d33ed3a2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Alicia
@@ -0,0 +1,22 @@
+language variant
+name Alicia
+gender female
+pitch 180 275
+echo 40 50
+formant 0 115 115 110
+formant 1 130 160 120
+formant 2 150 110 150
+formant 3 135 150 100
+formant 4 120 120 120
+formant 5 120 120 120
+formant 6 100 110 105
+formant 7 100 110 160
+formant 8 200 120 100
+intonation 2
+voicing 38
+consonants 100 20
+roughness 1
+stressAdd 1 64 64 50 50 100 100 200
+stressAmp 12 12 20 20 12 12 20 20
+breathw 150 150 200 200 400 400 600 600
+breath 0 4 5 2 3 13 3 2
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Andrea b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Andrea
new file mode 100644
index 00000000..39fb1866
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Andrea
@@ -0,0 +1,20 @@
+language variant
+name Andrea
+gender female
+
+pitch 200 265
+roughness 0
+
+formant 0 100 100 100
+formant 1 110 100 80
+formant 2 110 80 80
+formant 3 115 110 80
+formant 4 115 80 100
+formant 5 95 50 100
+formant 6 0 0 0
+formant 7 120 100 100
+formant 8 110 100 100
+intonation 3
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+voicing 150
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Andy b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Andy
new file mode 100644
index 00000000..25582fb5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Andy
@@ -0,0 +1,19 @@
+language variant
+name Andy
+gender Male
+
+pitch 85 110
+
+flutter 0
+formant 0 80 80 80 80
+formant 1 100 100 100 120
+formant 2 100 88 100
+formant 3 0 0 0
+formant 4 80 80 80
+formant 5 80 80 80
+formant 6 0 0 0
+formant 7 0 0 0
+formant 8 0 0 0
+stressAdd 0 0 0 0 0 0 0 200
+stressAmp 35 35 35 35 35 35 35 35 35
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Annie b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Annie
new file mode 100644
index 00000000..3c5b0355
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Annie
@@ -0,0 +1,17 @@
+language variant
+name Annie
+gender female
+pitch 120 280
+
+formant 0 105 125 120
+formant 1 120 140 120
+formant 2 120 150 140
+formant 3 130 150 130
+formant 4 120 120 110
+formant 5 120 120 110
+formant 6 120 140 130
+formant 7 120 140 130
+formant 8 120 140 130
+intonation 1
+voicing 30
+consonants 110 120
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/AnxiousAndy b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/AnxiousAndy
new file mode 100644
index 00000000..0ed1f357
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/AnxiousAndy
@@ -0,0 +1,19 @@
+language variant
+name anxiousAndy
+gender Male
+
+pitch 115 110
+
+flutter 0
+formant 0 80 80 80 80
+formant 1 100 100 100 120
+formant 2 100 100 100
+formant 3 0 0 0
+formant 4 0 0 0
+formant 5 100 100 100
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+stressAdd 100 100 100 100 100 100 100 300
+stressAmp 35 35 35 35 35 35 35 35 35
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Demonic b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Demonic
new file mode 100644
index 00000000..131fe46a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Demonic
@@ -0,0 +1,65 @@
+##Ten en cuenta que los 2 signos de número en este archivo tienen explicaciones de las comfiguraciones que puede aplicar y cómo comfigurarlas
+## Language Establece el idioma de la voz. Esta opción es necesaria para cualquier comfiguración que realices
+##La siguiente línea es una configuración que puede cambiar. Sin embargo, si no conoce los códigos de idioma, puede ser mejor dejar la configuración tal y como está.
+language variant
+
+## La configuración de nombre es el nombre que aparecerá en la configuración de voz en el cuadro combinado de variante.
+##La siguiente línea es una opción que puede cambiar
+name Demonic
+##La siguiente línea establece el género de la voz. Male or Female (hombre o mujer)
+##La siguiente línea es una opción que puede cambiar
+gender male
+
+flutter 5
+stressAmp 20 18 20 20 20 22 22 22
+##Las opciones de formantes
+## Formant 0 es usado para dar una baja frecuencia a los sonnidos
+## Los tres números son frecuencia, fuerza y ancho, en orden. Ten en cuenta que los números están separados por espacios
+##La siguiente línea es una opción que puede cambiar
+formant 0 100 100 100
+
+# Formant 1, 2, y 3 son las 3 formantes estándar para definir las vocales.
+##Las siguientes 3 líneas son opciones que puedes cambiar
+formant 1 70 100 100
+formant 2 80 100 90
+formant 3 80 160 90
+
+# Formants 4 y 5 afectan a f3. Esto afectará la calidad de la voz.
+##Las siguientes 2 líneas son comfiguraciones que puede cambiar.
+formant 4 80 85
+formant 5 100 100 80
+
+## Formantes 6, 7 y 8 son opciones que te ofrecen un sonido más claro de las vocales
+##Las siguientes 3 líneas son opciones que puedes cambiar
+formant 6 80 80 100
+formant 7 130 130 110
+formant 8 120 120 150
+
+##Intonation afecta el ascenso y la caída de la voz
+## Las opciones son: 1 predeterminado, 2 entonación media, 3 entonación media y no afecta a las comas, 4 al final de la oración o punto aumenta el tono de la voz.
+##La siguiente línea es una opción que puedes cambiar.
+intonation 10
+
+# Establecer el rango de tono. El primer número le da un tono base a la voz (valor en hz). El segundo número controla el rango de tonos usado por la voz. Poniéndolo igual
+# si los 2 números son iguales, la voz será monótona. Por defecto los ajustes son 82 y 118
+pitch 43 120
+## La configuración del tono. El primer número en la línea de configuración, 600, es la configuración de frecuencia para la cantidad de graves en la voz.
+## El segundo número en la línea de tono es el volumen de la frecuencia de graves. Puede configurarlo de 0 a 255, siendo 0 la menor cantidad, 255 la mayor.
+##El tercer número en la línea de tono, 1200, es la frecuencia de rango medio. El cuarto número en la línea es la configuración para cambiar el volumen de la frecuencia de rango medio.
+##0 es la menor cantidad y 255 es la mayor.
+## El quinto número en la línea de tono, 2000, es la frecuencia de agudos. El sexto número es el volumen de la frecuencia de agudos. 0 es el mínimo y 255 es el máximo.
+## Notará que las 3 frecuencias están configuradas en 255.
+###La siguiente línea es una opción que puedes cambiar.
+tone 100 255 1200 255 1500 255
+echo 8 10000
+roughness 3
+breath 20 5 2 10 5 0 27 100
+breathw 255 255 60 180 160 255 255 255
+consonants 194 255
+voicing 65
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 250 350 700 500 450 290 100 225
+stressAmp 16 16 24 24 16 16 20 24
+##Este archivo no incluye todas las configuraciones que se pueden usar para modificar una voz E Speak. Su objetivo es familiarizarlo con lo que hace la configuración.
+##Sin envargo puedes visitar la página http://espeak.sourceforge.net/voices.html y consultar más información acerca de cómo agregar o cambiar otras configuraciones.
+## Espero que te haya servido esta ayuda, y que te hayas divertido.
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Denis b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Denis
new file mode 100644
index 00000000..23c7fb70
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Denis
@@ -0,0 +1,19 @@
+language variant
+name Denis
+gender male 35
+pitch 80 115
+flutter 0
+roughness 0
+
+
+formant 0 100 160 160
+formant 1 95 95 95
+formant 2 100 100 100
+formant 3 90 90 90
+formant 4 40 40 40
+formant 5 80 80 80
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 10 10 10
+voicing 40
+consonants 80 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Diogo b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Diogo
new file mode 100644
index 00000000..1e513966
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Diogo
@@ -0,0 +1,22 @@
+language variant
+name Diogo
+gender male 25
+pitch 82 122
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 60 250 140 100 1000 50 3500 35
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Gene b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Gene
new file mode 100644
index 00000000..3db343bc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Gene
@@ -0,0 +1,17 @@
+language variant
+name Gene
+
+pitch 80 110
+
+formant 0 120 120 120
+formant 1 90 100 110
+formant 2 100 100 95
+formant 3 90 100 100
+formant 4 90 100 110
+formant 5 90 110 110
+formant 6 100 70 100
+formant 7 100 70 100
+formant 8 100 80 100
+voicing 120
+consonants 50 110
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Gene2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Gene2
new file mode 100644
index 00000000..20e8f6f3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Gene2
@@ -0,0 +1,17 @@
+language variant
+name Gene2
+
+pitch 100 130
+
+formant 0 120 120 120
+formant 1 90 100 110
+formant 2 100 100 95
+formant 3 90 100 100
+formant 4 90 100 110
+formant 5 90 110 110
+formant 6 100 70 100
+formant 7 100 70 100
+formant 8 100 80 100
+voicing 120
+consonants 50 110
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Henrique b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Henrique
new file mode 100644
index 00000000..d3fa3d74
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Henrique
@@ -0,0 +1,22 @@
+language variant
+name Henrique
+gender male 25
+pitch 70 130
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 70 250 230 80 1100 30 3500 40
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Hugo b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Hugo
new file mode 100644
index 00000000..fe79235c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Hugo
@@ -0,0 +1,22 @@
+language variant
+name Hugo
+gender male 25
+pitch 70 130
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 400 160 1100 90 3500 90 150 35
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Jacky b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Jacky
new file mode 100644
index 00000000..e0884ed0
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Jacky
@@ -0,0 +1,17 @@
+language variant
+name Jacky
+
+pitch 85 130
+
+formant 0 150 155 100
+formant 1 90 155 70
+formant 2 95 70 64
+formant 3 15 20 30
+formant 4 20 30 40
+formant 5 65 20 65
+formant 6 70 80 100
+formant 7 20 80 100
+formant 8 100 95 80
+voicing 135
+consonants 110
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Lee b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Lee
new file mode 100644
index 00000000..e0194fa3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Lee
@@ -0,0 +1,20 @@
+language variant
+name Lee
+gender Male
+
+#echo 230 30
+pitch 85 110
+
+flutter 0
+formant 0 80 80 80 80
+formant 1 80 80 100 100
+formant 2 80 80 80
+formant 3 9 9 9
+formant 4 290 290
+formant 5 130 0 0
+formant 6 90 90 90
+formant 7 90 90 90
+formant 8 90 90 90
+stressAdd 0 0 0 200 0 0 0 100
+stressAmp 30 30 30 30 30 30 30 30 30
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Marco b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Marco
new file mode 100644
index 00000000..455cb264
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Marco
@@ -0,0 +1,23 @@
+language variant
+name Marco
+gender male 30
+intonation 1
+pitch 100 152
+echo 50 80
+flutter 2
+roughness 0
+stressAmp 25 25 24 20 38 31 39 27
+stressAdd 250 125 250 250 225 145 50 256
+
+formant 0 100 120 130
+formant 1 75 180 170
+formant 2 92 120 110
+formant 3 140 120 110
+formant 4 10 20 20 -50
+formant 5 110 70 20
+formant 6 140 100 98
+formant 7 130 120 115
+formant 8 105 120 108
+voicing 38
+consonants 90 140
+tone 420 150 1200 135 3000 70 4700 40
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mario b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mario
new file mode 100644
index 00000000..3ace3695
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mario
@@ -0,0 +1,17 @@
+language variant
+name Mario
+
+pitch 75 125
+
+formant 0 100 111 95
+formant 1 100 111 60
+formant 2 95 90 55
+formant 3 100 50 65
+formant 4 69 65 65
+formant 5 79 60 75
+formant 6 89 60 75
+formant 7 99 0 100
+formant 8 109 0 100
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Michael b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Michael
new file mode 100644
index 00000000..e155ea85
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Michael
@@ -0,0 +1,17 @@
+language variant
+name Michael
+
+pitch 75 125
+
+formant 0 105 111 95
+formant 1 85 111 60
+formant 2 95 90 55
+formant 3 59 50 65
+formant 4 69 65 65
+formant 5 79 60 75
+formant 6 89 60 75
+formant 7 99 0 100
+formant 8 109 0 100
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mike b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mike
new file mode 100644
index 00000000..93ea4d89
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mike
@@ -0,0 +1,7 @@
+language variant
+name Mike
+voicing 70
+formant 1 96 97 100
+formant 2 96 97 100
+formant 5 95 103 100
+pitch 67 107
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mr serious b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mr serious
new file mode 100644
index 00000000..4623c848
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Mr serious
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Mr_Serious
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 87 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 255 2000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Nguyen b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Nguyen
new file mode 100644
index 00000000..50c72fc6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Nguyen
@@ -0,0 +1,16 @@
+language variant
+name Nguyen
+
+pitch 95 175
+
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 75 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+tone 100 200 600 150 800 100 2400 80 3600 95 5400 100
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Reed b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Reed
new file mode 100644
index 00000000..1ccdf5d4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Reed
@@ -0,0 +1,15 @@
+language variant
+name Reed
+klatt 6
+consonants 85 85
+voicing 130
+breath 45
+
+pitch 85 135
+
+formant 1 72 100 90 90
+formant 2 83 100 75 180
+formant 3 98 100 100 90
+formant 4 98 100 90
+formant 5 100 100 90
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax
new file mode 100644
index 00000000..b269b641
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax
@@ -0,0 +1,16 @@
+language variant
+name RicishayMax
+echo 100 10000
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax2
new file mode 100644
index 00000000..65851342
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax2
@@ -0,0 +1,25 @@
+language variant
+name RicishayMax2
+echo 150 500
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax3
new file mode 100644
index 00000000..f4810027
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/RicishayMax3
@@ -0,0 +1,25 @@
+language variant
+name RicishayMax3
+echo 200 500
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Storm b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Storm
new file mode 100644
index 00000000..6fd53bb4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Storm
@@ -0,0 +1,23 @@
+language variant
+language en-us
+name Storm
+gender male
+formant 0 100 100 100
+formant 1 95 95 95
+formant 2 95 95 95
+formant 3 95 95 95
+formant 4 70 70 70
+formant 5 70 70 70
+formant 6 25 25 25
+formant 7 25 25 25
+formant 8 25 25 25
+breath 0 0 0 0 0 0 0 0
+consonants 100
+echo 0 0
+flutter 0
+intonation 3
+pitch 60 100
+roughness 0
+stressAdd 5 5 3 3 0 0 -15 -15
+tone 500 255 1500 255 2500 255
+voicing 100
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Tweaky b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Tweaky
new file mode 100644
index 00000000..f391d13b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/Tweaky
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Tweaky
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 200 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 255 2000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/UniRobot b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/UniRobot
new file mode 100644
index 00000000..f8892788
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/UniRobot
@@ -0,0 +1,19 @@
+language variant
+name UniversalRobot
+gender male
+klatt 4
+pitch 100 160
+echo 10 10000
+formant 1 75 120 135
+formant 2 90 50 140
+formant 3 70 85 95
+formant 4 150 60 80
+formant 5 100 85 80
+formant 6 112 100 80
+formant 7 110 95 100
+formant 8 105 110 100
+consonants 125 100
+tone 530 250 770 100 215 225
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 120 130 130 90 0 0 120 120
+stressAmp 16 16 24 24 16 16 20 24
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/adam b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/adam
new file mode 100644
index 00000000..a9f3d2ae
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/adam
@@ -0,0 +1,6 @@
+language variant
+name Adam
+klatt 6
+consonants 85 85
+
+formant 1 100 100 130
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/anika b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/anika
new file mode 100644
index 00000000..2413c908
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/anika
@@ -0,0 +1,25 @@
+language variant
+name anika
+gender female
+pitch 200 300
+flutter 6
+stressAmp 20 18 20 20 20 22 22 22
+
+roughness 0
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 120 120 110
+formant 5 120 120 110
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+intonation 10
+voicing 30
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/anikaRobot b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/anikaRobot
new file mode 100644
index 00000000..791d2bbb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/anikaRobot
@@ -0,0 +1,26 @@
+language variant
+name anikaRobot
+gender female
+pitch 200 300
+flutter 1
+stressAmp 20 18 20 20 20 22 22 22
+echo 10 10000
+
+roughness 0
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 120 120 110
+formant 5 120 120 110
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+intonation 10
+voicing 30
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/announcer b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/announcer
new file mode 100644
index 00000000..71e0795d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/announcer
@@ -0,0 +1,17 @@
+name Half-LifeAnnouncementSystem
+language variant
+pitch 37 83
+klatt 4
+
+formant 1 88 100 100 0
+formant 2 96 100 100 0
+formant 3 98 100 100 0
+formant 4 96 100 100 0
+formant 5 100 100 100 0
+formant 6 100 100 100 0
+formant 7 100 100 100 0
+formant 8 100 100 100 0
+
+voicing 70
+consonants 70 70
+echo 154 26
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/antonio b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/antonio
new file mode 100644
index 00000000..a41b681b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/antonio
@@ -0,0 +1,21 @@
+language variant
+name Antonio
+gender male
+
+pitch 82 128
+roughness 0
+
+formant 0 100 150 90
+formant 1 90 130 90
+formant 2 95 120 80
+formant 3 100 50 80
+formant 4 100 40 80
+formant 5 90 70 80
+formant 6 0 0 0
+formant 7 100 100 100
+formant 8 100 100 100
+voicing 150
+tone 600 255 1200 255 2000 80
+intonation 3
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/aunty b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/aunty
new file mode 100644
index 00000000..7d721eec
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/aunty
@@ -0,0 +1,19 @@
+language variant
+name Auntie
+gender female
+pitch 204 176
+flutter 12
+
+formant 0 88 85 154
+formant 1 115 80 160 -20
+formant 2 130 75 150 -200
+formant 3 123 75 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 0 20 120
+stressAmp 18 16 20 20 20 20 20 20
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/belinda b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/belinda
new file mode 100644
index 00000000..9a9e42b9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/belinda
@@ -0,0 +1,20 @@
+language variant
+name Belinda
+gender female
+
+pitch 200 247
+flutter 3
+
+formant 0 88 85 154
+formant 1 135 58 169 -30
+formant 2 120 70 150 -260
+formant 3 120 39 150
+formant 4 125 57 80
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 3 20 12
+stressAmp 18 16 20 20 10 20 27 20
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/benjamin b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/benjamin
new file mode 100644
index 00000000..c3006438
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/benjamin
@@ -0,0 +1,11 @@
+language variant
+name Benjamin
+klatt 6
+consonants 70 70
+
+formant 1 101 100 130
+formant 2 102 100 100
+formant 3 100 100 100
+formant 4 100 100 100 470
+formant 5 100 100 100 350
+formant 6 100 100 100 100
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/boris b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/boris
new file mode 100644
index 00000000..02e03ced
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/boris
@@ -0,0 +1,15 @@
+language variant
+name Boris
+
+formant 0 47 120 100
+formant 1 100 90 75
+formant 2 104 100 75
+formant 3 57 80 75
+formant 4 104 80 75
+formant 5 107 80 75
+formant 6 68 0 75
+formant 7 105 0 75
+formant 8 105 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/caleb b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/caleb
new file mode 100644
index 00000000..9c8a5b9c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/caleb
@@ -0,0 +1,5 @@
+language variant
+name Caleb
+klatt 6
+breath 100
+voicing 0
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/croak b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/croak
new file mode 100644
index 00000000..ae76a4c4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/croak
@@ -0,0 +1,11 @@
+language variant
+name croak
+gender male 70
+
+pitch 85 117
+flutter 20
+
+formant 0 100 80 110
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/david b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/david
new file mode 100644
index 00000000..7dc75ddb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/david
@@ -0,0 +1,8 @@
+language variant
+name David
+klatt 6
+pitch 62 89
+
+formant 1 75 100 100
+formant 2 85 100 100
+formant 3 85 100 100
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/ed b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/ed
new file mode 100644
index 00000000..7f293fc6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/ed
@@ -0,0 +1,17 @@
+language variant
+name Ed
+
+pitch 90 145
+
+formant 0 110 120 200 5
+formant 1 102 100 80
+formant 2 101 120 100
+formant 3 100 80 75
+formant 4 150 30 80
+formant 5 95 95 155
+formant 6 167 100 75
+formant 7 100 200 75
+formant 8 60 200 95
+consonants 55 80
+voicing 100
+tone 650 250 1000 130 240 255
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/edward b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/edward
new file mode 100644
index 00000000..303f5051
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/edward
@@ -0,0 +1,10 @@
+language variant
+name Edward
+klatt 5
+voicing 100
+consonants 70 80
+
+formant 1 92 100 130
+formant 2 103 100 80
+formant 3 103 100 70
+formant 4 114 100 60
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/edward2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/edward2
new file mode 100644
index 00000000..abee6aaa
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/edward2
@@ -0,0 +1,10 @@
+language variant
+name Edward2
+klatt 6
+voicing 100
+consonants 70 80
+
+formant 1 92 100 130
+formant 2 103 100 80
+formant 3 103 100 70
+formant 4 114 100 60
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f1 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f1
new file mode 100644
index 00000000..8f03a73a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f1
@@ -0,0 +1,18 @@
+language variant
+name female1
+gender female 70
+
+pitch 140 200
+flutter 8
+roughness 4
+formant 0 115 80 150
+formant 1 120 80 180
+formant 2 100 70 150 150
+formant 3 115 70 150
+formant 4 110 80 150
+formant 5 110 90 150
+formant 6 105 80 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAdd -10 -10 -20 -20 0 0 40 60
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f2
new file mode 100644
index 00000000..4122d96b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f2
@@ -0,0 +1,21 @@
+language variant
+name female2
+gender female
+
+pitch 142 220
+roughness 3
+
+formant 0 105 80 150
+formant 1 110 80 160
+formant 2 110 70 150
+formant 3 110 70 150
+formant 4 115 80 150
+formant 5 115 80 150
+formant 6 110 70 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAdd 0 0 -10 -10 0 0 10 40
+breath 0 2 3 3 3 3 3 2
+echo 140 10
+consonants 125 125
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f3
new file mode 100644
index 00000000..92a15828
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f3
@@ -0,0 +1,22 @@
+language variant
+name female3
+gender female
+
+pitch 140 240
+formant 0 105 80 150
+formant 1 120 75 150 -50
+formant 2 135 70 150 -250
+formant 3 125 80 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 120 70 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAmp 18 18 20 20 20 20 20 20
+//breath 0 2 4 4 4 4 4 4
+breath 0 2 3 3 3 3 3 2
+echo 120 10
+roughness 4
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f4 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f4
new file mode 100644
index 00000000..52c5ac93
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f4
@@ -0,0 +1,18 @@
+language variant
+name female4
+gender female
+
+echo 130 15
+pitch 142 200
+formant 0 120 80 150
+formant 1 115 80 160 -20
+formant 2 130 75 150 -200
+formant 3 123 75 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 0 20 120
+stressAmp 18 16 20 20 20 20 20 20
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f5 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f5
new file mode 100644
index 00000000..7fa4f882
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/f5
@@ -0,0 +1,23 @@
+language variant
+name female5
+gender female
+
+pitch 160 228
+roughness 0
+
+formant 0 105 80 150
+formant 1 110 80 160
+formant 2 110 70 150
+formant 3 110 70 150
+formant 4 115 80 200
+formant 5 115 80 100
+formant 6 110 70 150
+formant 7 110 70 100
+formant 8 110 70 150
+
+stressAdd 0 0 -10 -10 0 0 10 40
+breath 0 4 6 6 6 6 0 10
+echo 140 10
+voicing 75
+consonants 150 150
+breathw 150 150 200 200 400 400 600 600
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/fast b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/fast
new file mode 100644
index 00000000..a2c3da2a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/fast
@@ -0,0 +1,7 @@
+language variant
+name fast_test
+
+// Try decreasing these values to make eSpeak's fastest speed faster.
+// This is currently unstable.
+
+fast_test2 15
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/grandma b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/grandma
new file mode 100644
index 00000000..395ebe22
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/grandma
@@ -0,0 +1,17 @@
+language variant
+
+name grandma
+gender female 90
+pitch 120 230
+
+flutter 20
+formant 0 105 150 150
+formant 1 100 80 100
+formant 2 105 105 105
+formant 3 80 80 80
+formant 4 60 60 60
+formant 5 90 90 90
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 20 20 20
+voicing 50
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/grandpa b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/grandpa
new file mode 100644
index 00000000..41a870c3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/grandpa
@@ -0,0 +1,14 @@
+language variant
+name grandpa
+pitch 80 120
+flutter 20
+formant 0 100 100 100
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 100 100 100
+formant 4 100 100 100
+formant 5 100 100 100
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 10 10 10
+intonation 1
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/gustave b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/gustave
new file mode 100644
index 00000000..ce1d71b9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/gustave
@@ -0,0 +1,17 @@
+language variant
+name Gustave
+
+pitch 80 123
+
+formant 0 85 141 135
+formant 1 77 131 45
+formant 2 92 70 55
+formant 3 59 50 65
+formant 4 69 65 65
+formant 5 79 60 75
+formant 6 89 60 75
+formant 7 99 0 100
+formant 8 109 0 100
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/ian b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/ian
new file mode 100644
index 00000000..3e3d4090
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/ian
@@ -0,0 +1,51 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Ian
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 20 120 50
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 80 80 80
+formant 2 80 80 80
+formant 3 80 80 80
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 50 50 50
+formant 5 50 50 50
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 200 50 200
+formant 8 200 50 200
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 2
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice.
+# Setting it equal to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 69 96
+
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+##The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 1000 127 1200 127 2000 127
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven
new file mode 100644
index 00000000..3b8c1202
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven
@@ -0,0 +1,14 @@
+language variant
+name Iven
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 530
+tone 600 255 1200 255 2000 160
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven2
new file mode 100644
index 00000000..e61fd735
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven2
@@ -0,0 +1,15 @@
+language variant
+name Iven2
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 220
+consonants 28 42
+tone 600 255 1200 255 2000 150
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven3
new file mode 100644
index 00000000..a58e7459
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven3
@@ -0,0 +1,14 @@
+language variant
+name Iven3
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 165
+tone 600 255 1200 255 2000 160
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven4 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven4
new file mode 100644
index 00000000..43084c15
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/iven4
@@ -0,0 +1,14 @@
+language variant
+name Iven4
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 165
+tone 600 170 1200 100 2000 40
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/john b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/john
new file mode 100644
index 00000000..dce9446a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/john
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name John
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 100 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice.
+# Setting it equal to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+##The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 255 2000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/kaukovalta b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/kaukovalta
new file mode 100644
index 00000000..82cda331
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/kaukovalta
@@ -0,0 +1,16 @@
+language variant
+name Kaukovalta
+formant 0 80 80 100
+formant 1 40 80 100
+formant 2 70 100 130
+formant 3 80 100 60
+formant 4 70 90 100
+formant 5 70 90 100
+formant 6 70 100 90
+ formant 7 100 90 110
+formant 8 100 95 100
+pitch 70 120
+tone 100 130 800 130 2000 130
+consonants 70 70
+roughness 4
+
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt
new file mode 100644
index 00000000..b739a86e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt
@@ -0,0 +1,4 @@
+language variant
+name klatt
+klatt 1
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt2
new file mode 100644
index 00000000..01477be5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt2
@@ -0,0 +1,4 @@
+language variant
+name klatt2
+klatt 2
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt3
new file mode 100644
index 00000000..b1a874be
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt3
@@ -0,0 +1,4 @@
+language variant
+name klatt3
+klatt 3
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt4 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt4
new file mode 100644
index 00000000..65278087
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt4
@@ -0,0 +1,4 @@
+language variant
+name klatt4
+klatt 4
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt5 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt5
new file mode 100644
index 00000000..9d831fb2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt5
@@ -0,0 +1,4 @@
+language variant
+name klatt5
+klatt 5
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt6 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt6
new file mode 100644
index 00000000..7656ab35
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/klatt6
@@ -0,0 +1,4 @@
+language variant
+name klatt6
+klatt 6
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/linda b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/linda
new file mode 100644
index 00000000..a56a8b05
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/linda
@@ -0,0 +1,20 @@
+language variant
+name Linda
+gender female
+
+#echo 130 15
+pitch 200 247
+flutter 3
+formant 0 88 85 154
+formant 1 135 58 169 -30
+formant 2 131 75 152 -260
+formant 3 123 75 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 3 20 120
+stressAmp 18 16 20 20 20 20 27 20
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m1 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m1
new file mode 100644
index 00000000..4cc9a00b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m1
@@ -0,0 +1,20 @@
+language variant
+name male1
+gender male 70
+
+pitch 75 109
+flutter 5
+roughness 4
+consonants 80 100
+
+formant 0 98 100 100
+formant 1 97 100 100
+formant 2 97 95 100
+formant 3 97 95 100
+formant 4 97 85 100
+formant 5 105 80 100
+formant 6 95 80 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+//stressAdd -10 -10 -20 -20 0 0 40 70
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m2
new file mode 100644
index 00000000..c234f468
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m2
@@ -0,0 +1,15 @@
+language variant
+name male2
+gender male
+
+pitch 88 115
+echo 130 15
+formant 0 100 80 120
+formant 1 90 85 120
+formant 2 110 85 120
+formant 3 105 90 120
+formant 4 100 90 120
+formant 5 100 90 120
+formant 6 100 90 120
+formant 7 100 90 120
+formant 8 100 90 120
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m3
new file mode 100644
index 00000000..00479dc3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m3
@@ -0,0 +1,17 @@
+language variant
+name male3
+gender male
+
+pitch 80 122
+formant 0 100 100 100
+formant 1 96 97 100
+formant 2 96 97 100
+formant 3 96 103 100
+formant 4 95 103 100
+formant 5 95 103 100
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+consonants 100
+stressAdd 10 10 0 0 0 0 -30 -30
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m4 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m4
new file mode 100644
index 00000000..7199341c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m4
@@ -0,0 +1,17 @@
+language variant
+name male4
+gender male
+
+pitch 70 110
+
+formant 0 103 100 100
+formant 1 103 100 100
+formant 2 103 100 100
+formant 3 103 100 100
+formant 4 106 100 100
+formant 5 106 100 100
+formant 6 106 100 100
+formant 7 103 100 100
+formant 8 103 100 100
+
+stressAdd -10 -10 -30 -30 0 0 60 90
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m5 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m5
new file mode 100644
index 00000000..d2586560
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m5
@@ -0,0 +1,15 @@
+language variant
+name male5
+gender male
+
+formant 0 100 85 130
+formant 1 90 85 130 40
+formant 2 80 85 130 310
+formant 3 105 85 130
+formant 4 105 85 130
+formant 5 105 85 130
+formant 6 105 85 150
+formant 7 105 85 150
+formant 8 105 85 150
+
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m6 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m6
new file mode 100644
index 00000000..bd336a98
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m6
@@ -0,0 +1,13 @@
+language variant
+name male6
+gender male
+
+pitch 82 117
+
+formant 0 100 90 120
+formant 1 100 90 140
+formant 2 100 70 140
+formant 3 100 75 140
+formant 4 100 80 140
+formant 5 100 80 140
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m7 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m7
new file mode 100644
index 00000000..11b49ed2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m7
@@ -0,0 +1,17 @@
+language variant
+name male7
+gender male
+
+pitch 75 125
+
+formant 0 100 125 100
+formant 1 100 90 80
+formant 2 100 70 90
+formant 3 100 60 90
+formant 4 100 60 90
+formant 5 75 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+voicing 155
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m8 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m8
new file mode 100644
index 00000000..c03ca3eb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/m8
@@ -0,0 +1,16 @@
+language variant
+name male8
+gender male 50
+
+pitch 65 102
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/marcelo b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/marcelo
new file mode 100644
index 00000000..8df9651b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/marcelo
@@ -0,0 +1,17 @@
+language variant
+name Marcelo
+
+pitch 65 115
+
+formant 0 65 161 35
+formant 1 75 131 65
+formant 2 90 60 40
+formant 3 59 50 55
+formant 4 69 65 35
+formant 5 69 60 25
+formant 6 59 60 35
+formant 7 149 0 10
+formant 8 199 0 90
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/max b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/max
new file mode 100644
index 00000000..e3c2889b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/max
@@ -0,0 +1,15 @@
+language variant
+name Max
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/michel b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/michel
new file mode 100644
index 00000000..b9b5ecbd
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/michel
@@ -0,0 +1,22 @@
+language variant
+name Michel
+gender male 25
+pitch 82 122
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 400 160 1500 100 3000 70 4500 40
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/miguel b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/miguel
new file mode 100644
index 00000000..53d71e78
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/miguel
@@ -0,0 +1,22 @@
+language variant
+name Miguel
+gender male 25
+pitch 80 130
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 300 240 400 160 1500 100 3000 70
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/mike2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/mike2
new file mode 100644
index 00000000..2715f4d0
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/mike2
@@ -0,0 +1,12 @@
+language variant
+name Mike2
+klatt 6
+voicing 170
+pitch 67 107
+formant 1 95 100 100
+formant 2 95 100 100
+formant 3 105 100 100
+formant 4 115 100 100
+formant 5 115 100 100
+
+consonants 70 150
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/norbert b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/norbert
new file mode 100644
index 00000000..a210789a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/norbert
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name norbert
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 75 50 100
+formant 3 100 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1000 100 5000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/pablo b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/pablo
new file mode 100644
index 00000000..031e5fe7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/pablo
@@ -0,0 +1,52 @@
+##Pleas note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Pablo
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 90 100 90
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 95 100 80
+formant 2 97 100 80
+formant 3 98 90 80
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 110 100 100
+formant 5 110 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 3
+echo 30 30
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 130
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+## 0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 200 2000 255
+
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+#However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/paul b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/paul
new file mode 100644
index 00000000..9015cd37
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/paul
@@ -0,0 +1,17 @@
+language variant
+name Paul
+
+pitch 70 100
+
+formant 0 90 120 100
+formant 1 103 100 75
+formant 2 98 100 75
+formant 3 100 80 75
+formant 4 102 30 100
+formant 5 100 80 100
+formant 6 100 80 75
+formant 7 100 0 75
+formant 8 100 60 75
+consonants 90 60
+voicing 230
+tone 420 255 1300 130 4000 100
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/pedro b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/pedro
new file mode 100644
index 00000000..5cc34db2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/pedro
@@ -0,0 +1,23 @@
+language variant
+
+name Pedro
+
+formant 0 100 150 100
+
+formant 1 95 100 80
+formant 2 95 100 80
+formant 3 100 100 90
+
+formant 4 100 100 100
+formant 5 100 100 100
+
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+intonation 3
+
+pitch 82 118
+tone 600 255 1200 255 2000 255
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/quincy b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/quincy
new file mode 100644
index 00000000..dd75dadb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/quincy
@@ -0,0 +1,20 @@
+language variant
+name Quincy
+
+pitch 67 100
+
+formant 0 85 108 106 3
+formant 1 97 110 56
+formant 2 96 80 60
+formant 3 101 50 50
+formant 4 110 33 55
+formant 5 110 22 65
+formant 6 77 60 60 65
+formant 7 66 0 100
+formant 8 100 0 100
+voicing 99
+consonants 66 90
+
+roughness 0
+tone 600 170 1200 100 2000 70
+stressAmp 16 16 24 20 20 16 28 24
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/rob b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/rob
new file mode 100644
index 00000000..d7c7ae4e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/rob
@@ -0,0 +1,17 @@
+language variant
+name Rob
+
+pitch 50 130
+formant 0 100 100 100
+formant 1 95 100 60
+formant 2 97 90 50
+formant 3 101 70 50
+formant 4 110 65 55
+formant 5 110 70 65
+formant 6 110 70 65
+formant 7 0 0 0
+formant 8 0 0 0
+
+voicing 115
+consonants 110 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robert b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robert
new file mode 100644
index 00000000..46f50758
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robert
@@ -0,0 +1,17 @@
+language variant
+name Robert
+
+pitch 65 115
+
+formant 0 85 108 100
+formant 1 95 110 60
+formant 2 97 90 50
+formant 3 101 50 50
+formant 4 110 65 55
+formant 5 110 60 65
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 115
+consonants 110 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft
new file mode 100644
index 00000000..0668d9ab
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft
@@ -0,0 +1,26 @@
+language variant
+name Robosoft
+echo 30 1000
+klatt 5
+
+pitch 60 90
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 50
+
+intonation 0
+voicing 80
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft2
new file mode 100644
index 00000000..1695414a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft2
@@ -0,0 +1,26 @@
+language variant
+name Robosoft2
+echo 10 600
+klatt 4
+
+pitch 70 100
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 75
+
+intonation -25
+voicing 80
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft3
new file mode 100644
index 00000000..15bbe347
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft3
@@ -0,0 +1,26 @@
+language variant
+name Robosoft3
+echo 10 10000
+klatt 4
+
+pitch 75 115
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft4 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft4
new file mode 100644
index 00000000..5161a4fe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft4
@@ -0,0 +1,25 @@
+language variant
+name Robosoft4
+echo 10 10000
+
+pitch 75 115
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft5 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft5
new file mode 100644
index 00000000..2420f89c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft5
@@ -0,0 +1,25 @@
+language variant
+name Robosoft5
+echo 10 10000
+
+pitch 75 115
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 0
+
+intonation 10
+voicing 150
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft6 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft6
new file mode 100644
index 00000000..d3be1588
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft6
@@ -0,0 +1,15 @@
+language variant
+name Robosoft6
+echo 40 10000
+pitch 150 150
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft7 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft7
new file mode 100644
index 00000000..25bf759b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft7
@@ -0,0 +1,25 @@
+language variant
+name Robosoft7
+echo 10 10000
+
+pitch 75 115
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+roughness 0
+
+intonation 10
+voicing 150
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft8 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft8
new file mode 100644
index 00000000..5c84bd5f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/robosoft8
@@ -0,0 +1,16 @@
+language variant
+name Robosoft8
+echo 40 10000
+pitch 150 150
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/sandro b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/sandro
new file mode 100644
index 00000000..6dcfe02f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/sandro
@@ -0,0 +1,25 @@
+// This file is UTF-8 encoded
+// Variant sandro (ver.25-3) for eSpeak-ng Copyright (C)2019 by Lolo vmanolo301@gmail.com
+
+language variant
+name sandro
+gender male
+
+formant 0 95 146 100
+formant 1 98 90 100
+formant 2 103 98 100
+formant 3 100 90 100
+formant 4 100 101 100
+formant 5 110 120 100 2123
+formant 6 100 100 100 1200
+formant 7 32 125 80 600
+formant 8 34 95 30 49
+
+voicing 165
+consonants 194 255
+pitch 78 115
+roughness 3
+breath 20 5 2 10 5 0 27 100
+breathw 255 255 60 180 160 255 255 255
+
+tone 500 210 470 70 160 155 2985 32
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/shelby b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/shelby
new file mode 100644
index 00000000..21292d41
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/shelby
@@ -0,0 +1,18 @@
+language variant
+name shelby
+flutter 0
+roughness 0
+
+formant 0 100 160 190
+formant 1 90 90 90
+formant 2 140 140 140
+formant 3 130 150 130
+formant 4 110 110 110
+formant 5 120 120 110
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 10 10 10
+
+pitch 100 210
+voicing 40
+consonants 90 70
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph
new file mode 100644
index 00000000..e60b0dc6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph
@@ -0,0 +1,21 @@
+language variant
+name Steph
+gender female
+
+pitch 166 200
+flutter 1
+roughness 0
+tone 100 255 600 70 1200 22 2000 66 3000 12
+
+formant 0 99 80 150
+formant 1 120 60 160
+formant 2 99 70 110 150
+formant 3 116 77 150
+formant 4 9 59 110
+formant 5 100 50 2
+formant 6 104 80 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAmp 16 16 24 24 16 16 20 24
+consonants 55 90
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph2 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph2
new file mode 100644
index 00000000..6ac109be
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph2
@@ -0,0 +1,21 @@
+language variant
+name Steph2
+gender female
+
+pitch 166 200
+flutter 1
+roughness 0
+tone 100 255 600 70 1200 22 2000 66 3000 12
+
+formant 0 99 100 150
+formant 1 120 80 160
+formant 2 99 90 110 150
+formant 3 116 97 150
+formant 4 9 73 116
+formant 5 100 70 2
+formant 6 104 100 150
+formant 7 110 90 150
+formant 8 110 90 150
+
+stressAmp 16 16 24 24 16 16 20 24
+consonants 55 90
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph3 b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph3
new file mode 100644
index 00000000..a9257558
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/steph3
@@ -0,0 +1,22 @@
+language variant
+name Steph3
+gender female
+
+pitch 166 200
+flutter 1
+roughness 0
+voicing 200
+tone 100 255 600 70 1200 22 2000 66 3000 12
+
+formant 0 99 80 150
+formant 1 120 60 160
+formant 2 99 70 110 150
+formant 3 116 77 150
+formant 4 9 59 110
+formant 5 100 50 2
+formant 6 104 80 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAmp 16 16 24 24 16 16 20 24
+consonants 70 90
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/travis b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/travis
new file mode 100644
index 00000000..56c22f94
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/travis
@@ -0,0 +1,23 @@
+language variant
+name travis
+gender male 30
+
+pitch 75 120
+
+formant 0 90 90 90 90
+formant 1 50 100 80 95
+formant 2 90 60 90 100
+formant 3 80 80 90 100
+formant 4 50 90 100 100
+formant 5 100 95 100 55
+formant 6 80 50 100 85
+formant 7 60 60 60 120
+formant 8 80 80 140 100
+
+tone 600 100 1000 200 1500 50
+flutter 1
+
+roughness 3
+
+voicing 200
+consonants 120 190
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/victor b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/victor
new file mode 100644
index 00000000..fa275e89
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/victor
@@ -0,0 +1,16 @@
+language variant
+name victor
+gender male 25
+
+formant 0 100 100 100
+formant 1 95 95 95
+formant 2 90 90 90
+formant 3 90 90 90
+formant 4 40 40 40
+formant 5 80 80 80
+formant 6 20 20 20
+formant 7 20 20 20
+formant 8 20 20 20
+pitch 80 110
+voicing 60
+breath 2 4
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/whisper b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/whisper
new file mode 100644
index 00000000..4f8f5e88
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/whisper
@@ -0,0 +1,13 @@
+language variant
+name whisper
+gender male
+
+pitch 82 117
+flutter 20
+
+formant 0 100 0 100
+formant 1 100 80 100
+
+voicing 17
+breath 75 75 50 40 15 10
+breathw 150 150 200 200 400 400
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/whisperf b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/whisperf
new file mode 100644
index 00000000..f239e8a2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/whisperf
@@ -0,0 +1,24 @@
+language variant
+name female_whisper
+gender female
+
+pitch 160 220
+roughness 3
+
+formant 0 105 0 150
+formant 1 110 40 160
+formant 2 110 70 150
+formant 3 110 70 150
+formant 4 115 80 150
+formant 5 115 80 150
+formant 6 110 70 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAdd 0 0 -10 -10 0 0 10 40
+
+// whisper
+voicing 20
+breath 75 75 50 40 15 10
+breathw 150 150 200 200 400 400
+
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/zac b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/zac
new file mode 100644
index 00000000..ca415a66
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/voices/!v/zac
@@ -0,0 +1,15 @@
+language variant
+name Zac
+flutter 5
+
+pitch 240 390
+formant 0 145 100 145
+formant 1 145 100 145
+formant 2 145 100 145
+formant 3 145 100 145
+formant 4 145 100 145
+formant 5 145 120 145
+formant 6 145 120 145
+formant 7 145 120 145
+formant 8 145 120 145
+voicing 80
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/yue_dict b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/yue_dict
new file mode 100644
index 00000000..ed9cf076
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-kusal-medium/espeak-ng-data/yue_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-kusal-medium/tokens.txt b/app/src/main/assets/vits-piper-en_US-kusal-medium/tokens.txt
new file mode 100644
index 00000000..82449830
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-kusal-medium/tokens.txt
@@ -0,0 +1,154 @@
+_ 0
+^ 1
+$ 2
+ 3
+! 4
+' 5
+( 6
+) 7
+, 8
+- 9
+. 10
+: 11
+; 12
+? 13
+a 14
+b 15
+c 16
+d 17
+e 18
+f 19
+h 20
+i 21
+j 22
+k 23
+l 24
+m 25
+n 26
+o 27
+p 28
+q 29
+r 30
+s 31
+t 32
+u 33
+v 34
+w 35
+x 36
+y 37
+z 38
+æ 39
+ç 40
+ð 41
+ø 42
+ħ 43
+ŋ 44
+œ 45
+ǀ 46
+ǁ 47
+ǂ 48
+ǃ 49
+ɐ 50
+ɑ 51
+ɒ 52
+ɓ 53
+ɔ 54
+ɕ 55
+ɖ 56
+ɗ 57
+ɘ 58
+ə 59
+ɚ 60
+ɛ 61
+ɜ 62
+ɞ 63
+ɟ 64
+ɠ 65
+ɡ 66
+ɢ 67
+ɣ 68
+ɤ 69
+ɥ 70
+ɦ 71
+ɧ 72
+ɨ 73
+ɪ 74
+ɫ 75
+ɬ 76
+ɭ 77
+ɮ 78
+ɯ 79
+ɰ 80
+ɱ 81
+ɲ 82
+ɳ 83
+ɴ 84
+ɵ 85
+ɶ 86
+ɸ 87
+ɹ 88
+ɺ 89
+ɻ 90
+ɽ 91
+ɾ 92
+ʀ 93
+ʁ 94
+ʂ 95
+ʃ 96
+ʄ 97
+ʈ 98
+ʉ 99
+ʊ 100
+ʋ 101
+ʌ 102
+ʍ 103
+ʎ 104
+ʏ 105
+ʐ 106
+ʑ 107
+ʒ 108
+ʔ 109
+ʕ 110
+ʘ 111
+ʙ 112
+ʛ 113
+ʜ 114
+ʝ 115
+ʟ 116
+ʡ 117
+ʢ 118
+ʲ 119
+ˈ 120
+ˌ 121
+ː 122
+ˑ 123
+˞ 124
+β 125
+θ 126
+χ 127
+ᵻ 128
+ⱱ 129
+0 130
+1 131
+2 132
+3 133
+4 134
+5 135
+6 136
+7 137
+8 138
+9 139
+̧ 140
+̃ 141
+̪ 142
+̯ 143
+̩ 144
+ʰ 145
+ˤ 146
+ε 147
+↓ 148
+# 149
+" 150
+↑ 151
+̺ 152
+̻ 153
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/MODEL_CARD b/app/src/main/assets/vits-piper-en_US-lessac-medium/MODEL_CARD
new file mode 100644
index 00000000..c0b9a3d6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/MODEL_CARD
@@ -0,0 +1,15 @@
+# Model card for lessac (medium)
+
+* Language: en_US (English, United States)
+* Speakers: 1
+* Quality: medium
+* Samplerate: 22,050Hz
+
+## Dataset
+
+* URL: https://www.cstr.ed.ac.uk/projects/blizzard/2013/lessac_blizzard2013/
+* License: https://www.cstr.ed.ac.uk/projects/blizzard/2013/lessac_blizzard2013/license.html
+
+## Training
+
+Trained from scratch.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/en_US-lessac-medium.onnx b/app/src/main/assets/vits-piper-en_US-lessac-medium/en_US-lessac-medium.onnx
new file mode 100644
index 00000000..18797cc0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/en_US-lessac-medium.onnx differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/en_US-lessac-medium.onnx.json b/app/src/main/assets/vits-piper-en_US-lessac-medium/en_US-lessac-medium.onnx.json
new file mode 100644
index 00000000..c67cea2c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/en_US-lessac-medium.onnx.json
@@ -0,0 +1,493 @@
+{
+ "audio": {
+ "sample_rate": 22050,
+ "quality": "medium"
+ },
+ "espeak": {
+ "voice": "en-us"
+ },
+ "inference": {
+ "noise_scale": 0.667,
+ "length_scale": 1,
+ "noise_w": 0.8
+ },
+ "phoneme_type": "espeak",
+ "phoneme_map": {},
+ "phoneme_id_map": {
+ "_": [
+ 0
+ ],
+ "^": [
+ 1
+ ],
+ "$": [
+ 2
+ ],
+ " ": [
+ 3
+ ],
+ "!": [
+ 4
+ ],
+ "'": [
+ 5
+ ],
+ "(": [
+ 6
+ ],
+ ")": [
+ 7
+ ],
+ ",": [
+ 8
+ ],
+ "-": [
+ 9
+ ],
+ ".": [
+ 10
+ ],
+ ":": [
+ 11
+ ],
+ ";": [
+ 12
+ ],
+ "?": [
+ 13
+ ],
+ "a": [
+ 14
+ ],
+ "b": [
+ 15
+ ],
+ "c": [
+ 16
+ ],
+ "d": [
+ 17
+ ],
+ "e": [
+ 18
+ ],
+ "f": [
+ 19
+ ],
+ "h": [
+ 20
+ ],
+ "i": [
+ 21
+ ],
+ "j": [
+ 22
+ ],
+ "k": [
+ 23
+ ],
+ "l": [
+ 24
+ ],
+ "m": [
+ 25
+ ],
+ "n": [
+ 26
+ ],
+ "o": [
+ 27
+ ],
+ "p": [
+ 28
+ ],
+ "q": [
+ 29
+ ],
+ "r": [
+ 30
+ ],
+ "s": [
+ 31
+ ],
+ "t": [
+ 32
+ ],
+ "u": [
+ 33
+ ],
+ "v": [
+ 34
+ ],
+ "w": [
+ 35
+ ],
+ "x": [
+ 36
+ ],
+ "y": [
+ 37
+ ],
+ "z": [
+ 38
+ ],
+ "æ": [
+ 39
+ ],
+ "ç": [
+ 40
+ ],
+ "ð": [
+ 41
+ ],
+ "ø": [
+ 42
+ ],
+ "ħ": [
+ 43
+ ],
+ "ŋ": [
+ 44
+ ],
+ "œ": [
+ 45
+ ],
+ "ǀ": [
+ 46
+ ],
+ "ǁ": [
+ 47
+ ],
+ "ǂ": [
+ 48
+ ],
+ "ǃ": [
+ 49
+ ],
+ "ɐ": [
+ 50
+ ],
+ "ɑ": [
+ 51
+ ],
+ "ɒ": [
+ 52
+ ],
+ "ɓ": [
+ 53
+ ],
+ "ɔ": [
+ 54
+ ],
+ "ɕ": [
+ 55
+ ],
+ "ɖ": [
+ 56
+ ],
+ "ɗ": [
+ 57
+ ],
+ "ɘ": [
+ 58
+ ],
+ "ə": [
+ 59
+ ],
+ "ɚ": [
+ 60
+ ],
+ "ɛ": [
+ 61
+ ],
+ "ɜ": [
+ 62
+ ],
+ "ɞ": [
+ 63
+ ],
+ "ɟ": [
+ 64
+ ],
+ "ɠ": [
+ 65
+ ],
+ "ɡ": [
+ 66
+ ],
+ "ɢ": [
+ 67
+ ],
+ "ɣ": [
+ 68
+ ],
+ "ɤ": [
+ 69
+ ],
+ "ɥ": [
+ 70
+ ],
+ "ɦ": [
+ 71
+ ],
+ "ɧ": [
+ 72
+ ],
+ "ɨ": [
+ 73
+ ],
+ "ɪ": [
+ 74
+ ],
+ "ɫ": [
+ 75
+ ],
+ "ɬ": [
+ 76
+ ],
+ "ɭ": [
+ 77
+ ],
+ "ɮ": [
+ 78
+ ],
+ "ɯ": [
+ 79
+ ],
+ "ɰ": [
+ 80
+ ],
+ "ɱ": [
+ 81
+ ],
+ "ɲ": [
+ 82
+ ],
+ "ɳ": [
+ 83
+ ],
+ "ɴ": [
+ 84
+ ],
+ "ɵ": [
+ 85
+ ],
+ "ɶ": [
+ 86
+ ],
+ "ɸ": [
+ 87
+ ],
+ "ɹ": [
+ 88
+ ],
+ "ɺ": [
+ 89
+ ],
+ "ɻ": [
+ 90
+ ],
+ "ɽ": [
+ 91
+ ],
+ "ɾ": [
+ 92
+ ],
+ "ʀ": [
+ 93
+ ],
+ "ʁ": [
+ 94
+ ],
+ "ʂ": [
+ 95
+ ],
+ "ʃ": [
+ 96
+ ],
+ "ʄ": [
+ 97
+ ],
+ "ʈ": [
+ 98
+ ],
+ "ʉ": [
+ 99
+ ],
+ "ʊ": [
+ 100
+ ],
+ "ʋ": [
+ 101
+ ],
+ "ʌ": [
+ 102
+ ],
+ "ʍ": [
+ 103
+ ],
+ "ʎ": [
+ 104
+ ],
+ "ʏ": [
+ 105
+ ],
+ "ʐ": [
+ 106
+ ],
+ "ʑ": [
+ 107
+ ],
+ "ʒ": [
+ 108
+ ],
+ "ʔ": [
+ 109
+ ],
+ "ʕ": [
+ 110
+ ],
+ "ʘ": [
+ 111
+ ],
+ "ʙ": [
+ 112
+ ],
+ "ʛ": [
+ 113
+ ],
+ "ʜ": [
+ 114
+ ],
+ "ʝ": [
+ 115
+ ],
+ "ʟ": [
+ 116
+ ],
+ "ʡ": [
+ 117
+ ],
+ "ʢ": [
+ 118
+ ],
+ "ʲ": [
+ 119
+ ],
+ "ˈ": [
+ 120
+ ],
+ "ˌ": [
+ 121
+ ],
+ "ː": [
+ 122
+ ],
+ "ˑ": [
+ 123
+ ],
+ "˞": [
+ 124
+ ],
+ "β": [
+ 125
+ ],
+ "θ": [
+ 126
+ ],
+ "χ": [
+ 127
+ ],
+ "ᵻ": [
+ 128
+ ],
+ "ⱱ": [
+ 129
+ ],
+ "0": [
+ 130
+ ],
+ "1": [
+ 131
+ ],
+ "2": [
+ 132
+ ],
+ "3": [
+ 133
+ ],
+ "4": [
+ 134
+ ],
+ "5": [
+ 135
+ ],
+ "6": [
+ 136
+ ],
+ "7": [
+ 137
+ ],
+ "8": [
+ 138
+ ],
+ "9": [
+ 139
+ ],
+ "̧": [
+ 140
+ ],
+ "̃": [
+ 141
+ ],
+ "̪": [
+ 142
+ ],
+ "̯": [
+ 143
+ ],
+ "̩": [
+ 144
+ ],
+ "ʰ": [
+ 145
+ ],
+ "ˤ": [
+ 146
+ ],
+ "ε": [
+ 147
+ ],
+ "↓": [
+ 148
+ ],
+ "#": [
+ 149
+ ],
+ "\"": [
+ 150
+ ],
+ "↑": [
+ 151
+ ],
+ "̺": [
+ 152
+ ],
+ "̻": [
+ 153
+ ]
+ },
+ "num_symbols": 256,
+ "num_speakers": 1,
+ "speaker_id_map": {},
+ "piper_version": "1.0.0",
+ "language": {
+ "code": "en_US",
+ "family": "en",
+ "region": "US",
+ "name_native": "English",
+ "name_english": "English",
+ "country_english": "United States"
+ },
+ "dataset": "lessac"
+}
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/af_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/af_dict
new file mode 100644
index 00000000..b6259eff
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/af_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/am_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/am_dict
new file mode 100644
index 00000000..b2b04422
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/am_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/an_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/an_dict
new file mode 100644
index 00000000..d10d32ce
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/an_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ar_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ar_dict
new file mode 100644
index 00000000..108ff2be
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ar_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/as_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/as_dict
new file mode 100644
index 00000000..0bec8d9c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/as_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/az_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/az_dict
new file mode 100644
index 00000000..77ca0917
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/az_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ba_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ba_dict
new file mode 100644
index 00000000..f175c683
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ba_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/be_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/be_dict
new file mode 100644
index 00000000..39d7434e
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/be_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bg_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bg_dict
new file mode 100644
index 00000000..ecd7f4a8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bg_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bn_dict
new file mode 100644
index 00000000..604b80f0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bpy_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bpy_dict
new file mode 100644
index 00000000..735496ff
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bpy_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bs_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bs_dict
new file mode 100644
index 00000000..71a38939
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/bs_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ca_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ca_dict
new file mode 100644
index 00000000..f134d4e8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ca_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/chr_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/chr_dict
new file mode 100644
index 00000000..b48216ce
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/chr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cmn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cmn_dict
new file mode 100644
index 00000000..f284cabe
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cmn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cs_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cs_dict
new file mode 100644
index 00000000..cf916dab
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cs_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cv_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cv_dict
new file mode 100644
index 00000000..79311d99
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cv_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cy_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cy_dict
new file mode 100644
index 00000000..c4f738b5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/cy_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/da_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/da_dict
new file mode 100644
index 00000000..23be1ca5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/da_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/de_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/de_dict
new file mode 100644
index 00000000..6f7697c7
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/de_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/el_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/el_dict
new file mode 100644
index 00000000..e6831f06
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/el_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/en_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/en_dict
new file mode 100644
index 00000000..b05b8615
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/en_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/eo_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/eo_dict
new file mode 100644
index 00000000..4ea54fe3
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/eo_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/es_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/es_dict
new file mode 100644
index 00000000..c810ac74
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/es_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/et_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/et_dict
new file mode 100644
index 00000000..f336d145
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/et_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/eu_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/eu_dict
new file mode 100644
index 00000000..ff71e050
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/eu_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fa_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fa_dict
new file mode 100644
index 00000000..c67fb89b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fa_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fi_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fi_dict
new file mode 100644
index 00000000..a6028472
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fi_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fr_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fr_dict
new file mode 100644
index 00000000..560a8c6f
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/fr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ga_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ga_dict
new file mode 100644
index 00000000..65338e22
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ga_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gd_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gd_dict
new file mode 100644
index 00000000..3ce4b954
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gd_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gn_dict
new file mode 100644
index 00000000..ee7fa4b4
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/grc_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/grc_dict
new file mode 100644
index 00000000..1d9f3742
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/grc_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gu_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gu_dict
new file mode 100644
index 00000000..245afbb4
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/gu_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hak_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hak_dict
new file mode 100644
index 00000000..38adf87e
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hak_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/haw_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/haw_dict
new file mode 100644
index 00000000..a78245c2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/haw_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/he_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/he_dict
new file mode 100644
index 00000000..e1037a69
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/he_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hi_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hi_dict
new file mode 100644
index 00000000..c612100b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hi_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hr_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hr_dict
new file mode 100644
index 00000000..0ecec2df
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ht_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ht_dict
new file mode 100644
index 00000000..ada2b705
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ht_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hu_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hu_dict
new file mode 100644
index 00000000..560dc2a2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hu_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hy_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hy_dict
new file mode 100644
index 00000000..7fb0fe31
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/hy_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ia_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ia_dict
new file mode 100644
index 00000000..2177d153
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ia_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/id_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/id_dict
new file mode 100644
index 00000000..6e71d720
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/id_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/intonations b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/intonations
new file mode 100644
index 00000000..ca2d4b36
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/intonations differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/io_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/io_dict
new file mode 100644
index 00000000..e690ae89
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/io_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/is_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/is_dict
new file mode 100644
index 00000000..935799a4
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/is_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/it_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/it_dict
new file mode 100644
index 00000000..aef22eb0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/it_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ja_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ja_dict
new file mode 100644
index 00000000..9b29e2d2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ja_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/jbo_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/jbo_dict
new file mode 100644
index 00000000..938b323a
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/jbo_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ka_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ka_dict
new file mode 100644
index 00000000..a43848b2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ka_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kk_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kk_dict
new file mode 100644
index 00000000..7e02e220
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kl_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kl_dict
new file mode 100644
index 00000000..10a0566c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kn_dict
new file mode 100644
index 00000000..6a41a8d5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ko_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ko_dict
new file mode 100644
index 00000000..fd206732
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ko_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kok_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kok_dict
new file mode 100644
index 00000000..136be4b8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/kok_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ku_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ku_dict
new file mode 100644
index 00000000..bf3d745c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ku_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ky_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ky_dict
new file mode 100644
index 00000000..3ea39d99
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ky_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/la_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/la_dict
new file mode 100644
index 00000000..3f30fd3f
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/la_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi
new file mode 100644
index 00000000..7808128d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi
@@ -0,0 +1,8 @@
+name Vietnamese (Northern)
+language vi
+
+words 1 2
+pitch 95 175
+
+
+tone 100 225 800 100 2000 50 5400 75 8000 200
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi-VN-x-central b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi-VN-x-central
new file mode 100644
index 00000000..0defacaa
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi-VN-x-central
@@ -0,0 +1,9 @@
+name Vietnamese (Central)
+language vi-vn-x-central
+phonemes vi-hue
+dictrules 1
+
+words 1
+pitch 82 118 //80 118
+ voicing 90 //18
+ flutter 20
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi-VN-x-south b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi-VN-x-south
new file mode 100644
index 00000000..4c32561d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/aav/vi-VN-x-south
@@ -0,0 +1,9 @@
+name Vietnamese (Southern)
+language vi-vn-x-south
+phonemes vi-sgn
+dictrules 2
+
+words 1
+pitch 82 118 //80 118
+ voicing 90 //18
+ flutter 20
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/eo b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/eo
new file mode 100644
index 00000000..e47501fa
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/eo
@@ -0,0 +1,4 @@
+name Esperanto
+language eo
+
+apostrophe 2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/ia b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/ia
new file mode 100644
index 00000000..6a147287
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/ia
@@ -0,0 +1,2 @@
+name Interlingua
+language ia
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/io b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/io
new file mode 100644
index 00000000..c50f9fab
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/io
@@ -0,0 +1,5 @@
+name Ido
+language io
+phonemes eo
+status testing
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/jbo b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/jbo
new file mode 100644
index 00000000..9cf2f309
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/jbo
@@ -0,0 +1,4 @@
+name Lojban
+language jbo
+
+speed 80 // speed adjustment, percentage
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/lfn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/lfn
new file mode 100644
index 00000000..d5e43871
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/lfn
@@ -0,0 +1,8 @@
+name Lingua Franca Nova
+language lfn
+
+phonemes base2
+l_unpronouncable 0
+numbers 2 3
+
+stressLength 150 140 180 180 0 0 200 200
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/piqd b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/piqd
new file mode 100644
index 00000000..49367cd8
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/piqd
@@ -0,0 +1,5 @@
+name Klingon
+language piqd
+status testing
+stressRule 3
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/py b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/py
new file mode 100644
index 00000000..850a34e8
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/py
@@ -0,0 +1,7 @@
+name Pyash
+language py
+maintainer Logan Streondj
+status testing
+
+speed 80 // speed adjustment, percentage
+stressRule 0
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/qdb b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/qdb
new file mode 100644
index 00000000..eb5ea363
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/qdb
@@ -0,0 +1,6 @@
+name Lang Belta
+language qdb
+
+numbers 4 3
+
+replace 1 t ?
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/qya b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/qya
new file mode 100644
index 00000000..2b515813
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/qya
@@ -0,0 +1,4 @@
+name Quenya
+language qya
+stressRule 2
+// rule=penultimate, with qya_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/sjn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/sjn
new file mode 100644
index 00000000..f927bc93
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/art/sjn
@@ -0,0 +1,4 @@
+name Sindarin
+language sjn
+stressRule 2
+// rule=penultimate, with sjn_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/azc/nci b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/azc/nci
new file mode 100644
index 00000000..f1896379
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/azc/nci
@@ -0,0 +1,6 @@
+name Nahuatl (Classical)
+language nci
+
+intonation 3
+stressRule 2
+stressLength 190 190 200 200 0 0 220 240
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/lt b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/lt
new file mode 100644
index 00000000..7cdb1930
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/lt
@@ -0,0 +1,2 @@
+name Lithuanian
+language lt
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/ltg b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/ltg
new file mode 100644
index 00000000..1041d9e3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/ltg
@@ -0,0 +1,12 @@
+name Latgalian
+language ltg
+maintainer Valdis Vitolins
+status testing
+phonemes lv
+dictionary lv
+dictrules 2 // Setting for Latgalian pronunciation
+words 0 2
+pitch 64 118
+tone 60 150 204 100 400 255 700 10 3000 255
+stressAmp 12 10 8 8 0 0 15 16
+stressLength 160 140 200 140 0 0 240 160
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/lv b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/lv
new file mode 100644
index 00000000..70eb61dc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bat/lv
@@ -0,0 +1,9 @@
+name Latvian
+language lv
+maintainer Valdis Vitolins
+status mature
+words 0 2
+pitch 67 123
+tone 60 150 204 100 400 255 700 10 3000 255
+stressAmp 11 8 11 9 0 0 14 12
+stressLength 160 120 200 130 0 0 230 180
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bnt/sw b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bnt/sw
new file mode 100644
index 00000000..d1a4db33
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bnt/sw
@@ -0,0 +1,4 @@
+name Swahili
+language sw
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bnt/tn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bnt/tn
new file mode 100644
index 00000000..8b484e43
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/bnt/tn
@@ -0,0 +1,4 @@
+name Setswana
+language tn
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ccs/ka b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ccs/ka
new file mode 100644
index 00000000..2a789b3c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ccs/ka
@@ -0,0 +1,3 @@
+name Georgian
+language ka
+lowercaseSentence // A period followed by a lowercase letter is considered a sentence (mkhedruli)
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/cy b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/cy
new file mode 100644
index 00000000..6d021329
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/cy
@@ -0,0 +1,4 @@
+name Welsh
+language cy
+
+intonation 4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/ga b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/ga
new file mode 100644
index 00000000..9fea2ae7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/ga
@@ -0,0 +1,4 @@
+name Gaelic (Irish)
+language ga
+
+dictrules 1 // fix for eclipsis
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/gd b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/gd
new file mode 100644
index 00000000..e416f6fa
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cel/gd
@@ -0,0 +1,4 @@
+name Gaelic (Scottish)
+language gd
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cus/om b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cus/om
new file mode 100644
index 00000000..1d6b396d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/cus/om
@@ -0,0 +1,4 @@
+name Oromo
+language om
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/kn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/kn
new file mode 100644
index 00000000..a32732c4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/kn
@@ -0,0 +1,5 @@
+name Kannada
+language kn
+
+intonation 2
+//consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/ml b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/ml
new file mode 100644
index 00000000..92394bbc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/ml
@@ -0,0 +1,5 @@
+name Malayalam
+language ml
+
+intonation 2
+//consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/ta b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/ta
new file mode 100644
index 00000000..aae63348
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/ta
@@ -0,0 +1,5 @@
+name Tamil
+language ta
+
+intonation 2
+consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/te b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/te
new file mode 100644
index 00000000..8acbb187
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/dra/te
@@ -0,0 +1,7 @@
+name Telugu
+language te
+
+status testing
+
+intonation 2
+//consonants 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/esx/kl b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/esx/kl
new file mode 100644
index 00000000..e581b588
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/esx/kl
@@ -0,0 +1,3 @@
+name Greenlandic
+language kl
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/eu b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/eu
new file mode 100644
index 00000000..ef132e5b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/eu
@@ -0,0 +1,5 @@
+name Basque
+language eu
+
+status testing
+stressRule 15
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/da b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/da
new file mode 100644
index 00000000..58f02f15
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/da
@@ -0,0 +1,4 @@
+name Danish
+language da
+
+tunes s2 c2 q2 e2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/is b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/is
new file mode 100644
index 00000000..04bf5ad3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/is
@@ -0,0 +1,2 @@
+name Icelandic
+language is
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/nb b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/nb
new file mode 100644
index 00000000..c29117f5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/nb
@@ -0,0 +1,7 @@
+name Norwegian Bokmål
+language nb
+language no
+phonemes no
+dictionary no
+
+intonation 4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/sv b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/sv
new file mode 100644
index 00000000..bb2d0299
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmq/sv
@@ -0,0 +1,2 @@
+name Swedish
+language sv
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/af b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/af
new file mode 100644
index 00000000..64fc96f5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/af
@@ -0,0 +1,8 @@
+name Afrikaans
+language af
+
+maintainer Christo de Klerk
+status mature
+
+roughness 0
+pitch 63 120
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/de b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/de
new file mode 100644
index 00000000..a43cc1a5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/de
@@ -0,0 +1,3 @@
+name German
+language de
+tunes s4 c1 q4 e1
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en
new file mode 100644
index 00000000..f23fb531
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en
@@ -0,0 +1,8 @@
+name English (Great Britain)
+language en-gb 2
+language en 2
+
+maintainer Reece H. Dunn
+status mature
+
+tunes s1 c1 q1 e1
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-029 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-029
new file mode 100644
index 00000000..493aae45
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-029
@@ -0,0 +1,20 @@
+name English (Caribbean)
+language en-029
+language en 10
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-wi
+dictrules 8
+stressLength 175 175 175 175 220 220 250 290
+
+replace 00 D d
+replace 00 T t[
+replace 00 U@ o@
+replace 03 @ a#
+replace 03 3 a#
+replace 03 N n
+
+formant 1 98 100 100
+formant 2 98 100 100
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-scotland b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-scotland
new file mode 100644
index 00000000..a4655a0e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-scotland
@@ -0,0 +1,17 @@
+name English (Scotland)
+language en-gb-scotland
+language en 4
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-sc
+dictrules 2 5 6 7
+stressLength 180 130 200 200 0 0 250 270
+
+replace 03 @ V
+replace 03 I i
+replace 03 I2 i
+replace 01 aI aI2
+replace 02 a a/
+replace 02 u: U
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-gbclan b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-gbclan
new file mode 100644
index 00000000..f54a06b7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-gbclan
@@ -0,0 +1,14 @@
+name English (Lancaster)
+language en-gb-x-gbclan
+language en-gb 3
+language en 5
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-n
+
+stressLength 160 150 180 180 220 220 290 290
+
+replace 03 N n
+replace 03 i I2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-gbcwmd b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-gbcwmd
new file mode 100644
index 00000000..1831f9a9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-gbcwmd
@@ -0,0 +1,12 @@
+name English (West Midlands)
+language en-gb-x-gbcwmd
+language en-gb 9
+language en 9
+
+phonemes en-wm
+
+replace 00 h NULL
+replace 00 o@ O@
+dictrules 6
+intonation 4
+stressAdd 0 0 0 0 0 0 0 20
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-rp b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-rp
new file mode 100644
index 00000000..fb72cf1f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-GB-x-rp
@@ -0,0 +1,15 @@
+name English (Received Pronunciation)
+language en-gb-x-rp
+language en-gb 4
+language en 5
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-rp
+
+replace 00 o@ O@
+replace 03 I i
+replace 03 I2 i
+replace 03 @ a#
+replace 03 3 a#
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-US b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-US
new file mode 100644
index 00000000..31db652b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-US
@@ -0,0 +1,15 @@
+name English (America)
+language en-us 2
+language en 3
+
+maintainer Reece H. Dunn
+status mature
+
+phonemes en-us
+dictrules 3 6
+
+stressLength 140 120 190 170 0 0 255 300
+stressAmp 17 16 19 19 19 19 21 19
+
+replace 03 I i
+replace 03 I2 i
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-US-nyc b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-US-nyc
new file mode 100644
index 00000000..2d76f88a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/en-US-nyc
@@ -0,0 +1,14 @@
+name English (America, New York City)
+language en-us-nyc
+
+maintainer Richard Calvi
+status testing
+
+phonemes en-us-nyc
+dictrules 3 6
+
+stressLength 140 120 190 170 0 0 255 300
+stressAmp 17 16 19 19 19 19 21 19
+
+replace 03 I i
+replace 03 I2 i
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/lb b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/lb
new file mode 100644
index 00000000..79724594
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/lb
@@ -0,0 +1,2 @@
+name Luxembourgish
+language lb
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/nl b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/nl
new file mode 100644
index 00000000..a212fbef
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/gmw/nl
@@ -0,0 +1,2 @@
+name Dutch
+language nl
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/grk/el b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/grk/el
new file mode 100644
index 00000000..548a01bc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/grk/el
@@ -0,0 +1,2 @@
+name Greek
+language el
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/grk/grc b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/grk/grc
new file mode 100644
index 00000000..baa8b2c6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/grk/grc
@@ -0,0 +1,6 @@
+name Greek (Ancient)
+language grc
+
+stressLength 170 170 190 190 0 0 230 240
+dictrules 1
+words 3
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/as b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/as
new file mode 100644
index 00000000..23991ad7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/as
@@ -0,0 +1,4 @@
+name Assamese
+language as
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/bn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/bn
new file mode 100644
index 00000000..c7918026
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/bn
@@ -0,0 +1,2 @@
+name Bengali
+language bn
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/bpy b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/bpy
new file mode 100644
index 00000000..b63bc8d1
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/bpy
@@ -0,0 +1,2 @@
+name Bishnupriya Manipuri
+language bpy
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/gu b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/gu
new file mode 100644
index 00000000..fcdacd21
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/gu
@@ -0,0 +1,4 @@
+name Gujarati
+language gu
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/hi b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/hi
new file mode 100644
index 00000000..16ea3892
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/hi
@@ -0,0 +1,2 @@
+name Hindi
+language hi
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/kok b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/kok
new file mode 100644
index 00000000..f2b1cc53
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/kok
@@ -0,0 +1,2 @@
+name Konkani
+language kok
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/mr b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/mr
new file mode 100644
index 00000000..d9181f90
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/mr
@@ -0,0 +1,4 @@
+name Marathi
+language mr
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/ne b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/ne
new file mode 100644
index 00000000..4b64cc2b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/ne
@@ -0,0 +1,4 @@
+name Nepali
+language ne
+
+dictrules 1
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/or b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/or
new file mode 100644
index 00000000..95a990ec
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/or
@@ -0,0 +1,4 @@
+name Oriya
+language or
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/pa b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/pa
new file mode 100644
index 00000000..0e9552d3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/pa
@@ -0,0 +1,2 @@
+name Punjabi
+language pa
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/sd b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/sd
new file mode 100644
index 00000000..51cf8afe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/sd
@@ -0,0 +1,3 @@
+name Sindhi
+language sd
+maintainer Ejaz Shah
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/si b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/si
new file mode 100644
index 00000000..3f877191
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/si
@@ -0,0 +1,6 @@
+name Sinhala
+language si
+
+status testing
+
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/ur b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/ur
new file mode 100644
index 00000000..16e54695
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/inc/ur
@@ -0,0 +1,7 @@
+name Urdu
+language ur
+maintainer Ejaz Shah
+status testing
+
+stressRule 6
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/hy b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/hy
new file mode 100644
index 00000000..ee0be2fe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/hy
@@ -0,0 +1,3 @@
+name Armenian (East Armenia)
+language hy
+language hy-arevela
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/hyw b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/hyw
new file mode 100644
index 00000000..9d5fe86b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/hyw
@@ -0,0 +1,24 @@
+name Armenian (West Armenia)
+language hyw
+language hy-arevmda
+language hy 8
+
+dictionary hy
+dictrules 1
+
+phonemes hy
+
+// change consonants for West Armenian pronunciation
+replace 00 b p#
+replace 00 d t#
+replace 00 dz ts#
+replace 00 dZ tS#
+replace 00 g k#
+
+replace 00 p b
+replace 00 t d
+replace 00 ts dz
+replace 00 tS dZ
+replace 00 k g
+
+replace 00 R2 R // ??
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/sq b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/sq
new file mode 100644
index 00000000..9ace3576
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ine/sq
@@ -0,0 +1,5 @@
+name Albanian
+language sq
+
+// add this line to remove 'ë' at the end of words
+// replace 00 @/ NULL
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/fa b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/fa
new file mode 100644
index 00000000..5a0c2b6d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/fa
@@ -0,0 +1,4 @@
+name Persian
+language fa
+maintainer Shadyar Khodayari
+status mature
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/fa-Latn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/fa-Latn
new file mode 100644
index 00000000..02c6da6e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/fa-Latn
@@ -0,0 +1,8 @@
+name Persian (Pinglish)
+// Sometimes, Farsi speakers write Farsi words using English characters, particularly in Chat and SMS (texte messages).), called Pinglish
+language fa-latn
+maintainer Shadyar Khodayari
+status mature
+dictrules 1
+phonemes fa
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/ku b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/ku
new file mode 100644
index 00000000..b26bca25
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ira/ku
@@ -0,0 +1,5 @@
+name Kurdish
+language ku
+
+//words 1 48
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/iro/chr b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/iro/chr
new file mode 100644
index 00000000..abe29382
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/iro/chr
@@ -0,0 +1,27 @@
+name Cherokee //https://github.com/espeak-ng/espeak-ng/blob/master/docs/voices.md
+language chr-US-Qaaa-x-west 5
+
+maintainer Michael Conrad
+status testing
+
+pitch 90 160
+
+voicing 100
+
+consonants 100 100
+
+speed 100
+
+words 2 1
+
+phonemes chr
+
+//stress on all syllables to simulate stress on no syllables
+stressRule 9
+stressLength 175 175 175 175 175 175 175 175 //all vowels the same length regardless of stress
+stressAmp 10 10 10 10 10 10 10 10 //all vowels the same strength regardless of marked stress
+
+intonation 1
+
+tunes chrs chrc chrq chre
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/itc/la b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/itc/la
new file mode 100644
index 00000000..c57270f9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/itc/la
@@ -0,0 +1,12 @@
+name Latin
+language la
+stressRule 2 0 2
+// rule=penultimate
+// unstressed_wd1=0
+// unstressed_wd2=2
+stressOpt 0 5 // flags=0100001 (no automatic secondary stress + don't stres monosyllables)
+
+// short gap between words
+words 2
+
+// Note: The Latin voice needs long vowels to be marked with macrons
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/jpx/ja b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/jpx/ja
new file mode 100644
index 00000000..20e21a1e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/jpx/ja
@@ -0,0 +1,5 @@
+name Japanese
+language ja
+phonemes ja
+
+intonation 4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ko b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ko
new file mode 100644
index 00000000..f03ba091
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/ko
@@ -0,0 +1,5 @@
+name Korean
+language ko
+pitch 80 118
+intonation 2
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/map/haw b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/map/haw
new file mode 100644
index 00000000..c0869132
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/map/haw
@@ -0,0 +1,3 @@
+name Hawaiian
+language haw
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/miz/mto b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/miz/mto
new file mode 100644
index 00000000..eb0f75ff
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/miz/mto
@@ -0,0 +1,8 @@
+name Totontepec Mixe
+language mto
+
+maintainer Bill Dengler and Elizabeth Resendiz
+status testing
+
+lowercaseSentence
+tunes s6 c6 q6 e6
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/myn/quc b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/myn/quc
new file mode 100644
index 00000000..e8e0ec6b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/myn/quc
@@ -0,0 +1,6 @@
+name K'iche'
+language quc
+status testing
+stressRule 3 // stress on final syllable
+stressAmp 8 8 20 15 0 0 25 25 // reduce unstressed vowels
+stressLength 120 120 200 150 0 0 250 250 // reduce unstressed vowels
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/id b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/id
new file mode 100644
index 00000000..d300372f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/id
@@ -0,0 +1,7 @@
+name Indonesian
+language id
+
+stressLength 160 200 180 180 0 0 220 240
+stressAmp 16 18 18 18 0 0 22 21
+
+consonants 80 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/mi b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/mi
new file mode 100644
index 00000000..fa1c71eb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/mi
@@ -0,0 +1,21 @@
+name Māori
+language mi
+status testing
+
+// https://github.com/espeak-ng/espeak-ng/blob/master/docs/voices.md#words
+words 1 2
+
+// taken from Jacky
+pitch 115 130
+
+formant 0 150 155 100
+formant 1 90 155 70
+formant 2 95 70 64
+formant 3 15 20 30
+formant 4 20 30 40
+formant 5 65 20 65
+formant 6 70 80 100
+formant 7 20 80 100
+formant 8 100 95 80
+voicing 135
+consonants 110
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/ms b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/ms
new file mode 100644
index 00000000..27a2712a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/poz/ms
@@ -0,0 +1,14 @@
+// Last updated: 14 October 2010, Jason Ong (jason@portalgroove.com)
+name Malay
+language ms
+phonemes id
+
+stressLength 160 200 180 180 0 0 220 240
+stressAmp 16 18 18 18 0 0 22 21
+intonation 3 // Less intonation, and comma does not raise the pitch.
+
+// Nuance - Peninsula Malaysia
+// replace 3 a @ // change 'saya' to 'saye'
+ // (only the last phoneme of a word, only in unstressed syllables)
+
+consonants 80 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/qu b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/qu
new file mode 100644
index 00000000..aa717f29
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/qu
@@ -0,0 +1,5 @@
+name Quechua
+language qu
+stressRule 2 // stress on penultimate syllable
+status testing
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/an b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/an
new file mode 100644
index 00000000..dc75aa8e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/an
@@ -0,0 +1,2 @@
+name Aragonese
+language an
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ca b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ca
new file mode 100644
index 00000000..54af356f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ca
@@ -0,0 +1,2 @@
+name Catalan
+language ca
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/es b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/es
new file mode 100644
index 00000000..dc90e41c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/es
@@ -0,0 +1,4 @@
+name Spanish (Spain)
+language es
+dictrules 1
+tunes s6 c6 q6 e6
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/es-419 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/es-419
new file mode 100644
index 00000000..236bef0b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/es-419
@@ -0,0 +1,11 @@
+name Spanish (Latin America)
+language es-419
+language es-mx 6
+
+phonemes es-la
+dictrules 2
+intonation 2
+stressLength 170 200 230 180 0 0 250 280
+
+tunes s6 c6 q6 e6
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr
new file mode 100644
index 00000000..9e0b9440
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr
@@ -0,0 +1,6 @@
+name French (France)
+language fr-fr
+language fr
+
+dictrules 1
+tunes s3 c3 q3 e3
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr-BE b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr-BE
new file mode 100644
index 00000000..1a0311f9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr-BE
@@ -0,0 +1,8 @@
+name French (Belgium)
+language fr-be
+language fr 8
+
+dictrules 2
+tunes s3 c3 q3 e3
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr-CH b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr-CH
new file mode 100644
index 00000000..2e45fbd1
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/fr-CH
@@ -0,0 +1,6 @@
+name French (Switzerland)
+language fr-ch
+language fr 8
+
+dictrules 3
+tunes s3 c3 q3 e3
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ht b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ht
new file mode 100644
index 00000000..8b572258
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ht
@@ -0,0 +1,8 @@
+name Haitian Creole
+language ht
+status testing
+maintainer // TODO somebody should take responsibility for this
+
+phonemes ht
+dictionary ht
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/it b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/it
new file mode 100644
index 00000000..ad7bb50e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/it
@@ -0,0 +1,7 @@
+name Italian
+language it
+
+maintainer Christian Leo M
+status mature
+
+tunes s4 c4 q4 e4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pap b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pap
new file mode 100644
index 00000000..b9e07fe0
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pap
@@ -0,0 +1,7 @@
+name Papiamento
+language pap
+
+status testing
+
+phonemes base2
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pt b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pt
new file mode 100644
index 00000000..5041b511
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pt
@@ -0,0 +1,7 @@
+name Portuguese (Portugal)
+language pt
+language pt-pt
+phonemes pt-pt
+
+dictrules 1
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pt-BR b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pt-BR
new file mode 100644
index 00000000..52b850c3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/pt-BR
@@ -0,0 +1,7 @@
+name Portuguese (Brazil)
+language pt-br
+language pt 6
+
+dictrules 2
+stressLength 200 115 230 230 0 0 250 270
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ro b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ro
new file mode 100644
index 00000000..94441efe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/roa/ro
@@ -0,0 +1,2 @@
+name Romanian
+language ro
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sai/gn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sai/gn
new file mode 100644
index 00000000..6e183e5a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sai/gn
@@ -0,0 +1,4 @@
+name Guarani
+language gn
+dictrules 1
+words 0 1
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/am b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/am
new file mode 100644
index 00000000..87ed65a3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/am
@@ -0,0 +1,4 @@
+name Amharic
+language am
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/ar b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/ar
new file mode 100644
index 00000000..52198086
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/ar
@@ -0,0 +1,5 @@
+name Arabic
+language ar
+phonemes ar
+
+stressRule 4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/he b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/he
new file mode 100644
index 00000000..38cce90a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/he
@@ -0,0 +1,4 @@
+name Hebrew
+language he
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/mt b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/mt
new file mode 100644
index 00000000..ea8a3fce
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sem/mt
@@ -0,0 +1,4 @@
+name Maltese
+language mt
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/cmn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/cmn
new file mode 100644
index 00000000..451016d7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/cmn
@@ -0,0 +1,36 @@
+name Chinese (Mandarin, latin as English)
+language cmn
+language zh-cmn
+language zh
+
+phonemes cmn
+dictionary cmn
+words 1
+pitch 80 118
+
+dict_min 100000
+
+//for some dialects
+
+//[en]: replace ng with n
+//[zh]: ��������ng���n
+//replace 0 N n
+
+//[en]: replace rfx consonants
+//[zh]: ��������r���l��z��er���e
+//replace 0 ts.h tsh
+//replace 0 ts. ts
+//replace 0 s. s
+//replace 0 i. i[
+//replace 0 z. l
+//replace 0 z. z
+//replace 0 @r @
+
+//[en]: replace beginning n or l
+//[zh]: ����nl��n���l��l���n
+//replace 2 n l
+//replace 2 l n
+
+//[en]: replace beginning w with v
+//[zh]: w���v
+//replace 0 w v
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/cmn-Latn-pinyin b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/cmn-Latn-pinyin
new file mode 100644
index 00000000..4b63db71
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/cmn-Latn-pinyin
@@ -0,0 +1,11 @@
+name Chinese (Mandarin, latin as Pinyin)
+language cmn-latn-pinyin
+language zh-cmn
+language zh
+
+phonemes cmn
+dictionary cmn
+words 1
+pitch 80 118
+
+dict_min 100000
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/hak b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/hak
new file mode 100644
index 00000000..0c3bf14c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/hak
@@ -0,0 +1,6 @@
+name Hakka Chinese
+language hak
+maintainer Chen Chien-ting
+status testing
+phonemes hak
+dictionary hak
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/my b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/my
new file mode 100644
index 00000000..3dbc767a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/my
@@ -0,0 +1,3 @@
+name Myanmar (Burmese)
+maintainer Min Maung
+language my
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/yue b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/yue
new file mode 100644
index 00000000..d65fac1f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/yue
@@ -0,0 +1,13 @@
+name Chinese (Cantonese)
+language yue
+language zh-yue
+language zh 8
+
+phonemes yue
+dictionary yue
+
+// interpret English letters as 1=English words, 2=jyutping
+dictrules 1
+
+words 1
+dict_min 10000
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/yue-Latn-jyutping b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/yue-Latn-jyutping
new file mode 100644
index 00000000..2324cd7d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/sit/yue-Latn-jyutping
@@ -0,0 +1,13 @@
+name Chinese (Cantonese, latin as Jyutping)
+language yue
+language zh-yue
+language zh 8
+
+phonemes yue
+dictionary yue
+
+// interpret English letters as 1=English words, 2=jyutping
+dictrules 2
+
+words 1
+dict_min 10000
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/tai/shn b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/tai/shn
new file mode 100644
index 00000000..8d30384d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/tai/shn
@@ -0,0 +1,4 @@
+name Shan (Tai Yai)
+language shn
+maintainer ronaldaug
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/tai/th b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/tai/th
new file mode 100644
index 00000000..9b337c13
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/tai/th
@@ -0,0 +1,3 @@
+name Thai
+language th
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/az b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/az
new file mode 100644
index 00000000..fd9e4f33
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/az
@@ -0,0 +1,4 @@
+name Azerbaijani
+language az
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ba b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ba
new file mode 100644
index 00000000..09fab480
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ba
@@ -0,0 +1,2 @@
+name Bashkir
+language ba
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/cv b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/cv
new file mode 100644
index 00000000..44e37f67
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/cv
@@ -0,0 +1,3 @@
+name Chuvash
+language cv
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/kk b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/kk
new file mode 100644
index 00000000..df3b0a07
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/kk
@@ -0,0 +1,4 @@
+name Kazakh
+language kk
+status testing
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ky b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ky
new file mode 100644
index 00000000..c031449e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ky
@@ -0,0 +1,4 @@
+name Kyrgyz
+language ky
+
+tunes s3 c3 q3 e3
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/nog b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/nog
new file mode 100644
index 00000000..691d0310
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/nog
@@ -0,0 +1,3 @@
+name Nogai
+language nog
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tk b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tk
new file mode 100644
index 00000000..795413a3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tk
@@ -0,0 +1,2 @@
+name Turkmen
+language tk
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tr b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tr
new file mode 100644
index 00000000..1d5cbc49
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tr
@@ -0,0 +1,2 @@
+name Turkish
+language tr
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tt b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tt
new file mode 100644
index 00000000..10ebba4c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/tt
@@ -0,0 +1,2 @@
+name Tatar
+language tt
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ug b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ug
new file mode 100644
index 00000000..f81b44fc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/ug
@@ -0,0 +1,2 @@
+name Uyghur
+language ug
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/uz b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/uz
new file mode 100644
index 00000000..b1a7586c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/trk/uz
@@ -0,0 +1,4 @@
+name Uzbek
+language uz
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/et b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/et
new file mode 100644
index 00000000..096565f9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/et
@@ -0,0 +1,10 @@
+name Estonian
+language et
+
+stressAmp 18 16 22 22 20 22 22 22
+stressLength 150 180 200 200 0 0 210 250
+stressOpt 1 2 4 6 // (S_NO_DIM + S_FINAL_DIM = S_FINAL_DIM_ONLY), S_FINAL_NO_2, S_2_TO_HEAVY
+stressRule 0
+
+intonation 3
+spellingStress
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/fi b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/fi
new file mode 100644
index 00000000..fe2447c8
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/fi
@@ -0,0 +1,11 @@
+name Finnish
+language fi
+
+
+stressAmp 18 16 22 22 20 22 22 22
+stressLength 150 180 200 200 0 0 210 250
+stressOpt 1 2 4 6 // (S_NO_DIM + S_FINAL_DIM = S_FINAL_DIM_ONLY), S_FINAL_NO_2, S_2_TO_HEAVY
+stressRule 0
+
+intonation 3
+spellingStress
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/hu b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/hu
new file mode 100644
index 00000000..f5bb2958
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/hu
@@ -0,0 +1,7 @@
+name Hungarian
+language hu
+brackets 0
+bracketsAnnounced 0
+pitch 81 117
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/smj b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/smj
new file mode 100644
index 00000000..316559cf
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/urj/smj
@@ -0,0 +1,4 @@
+name Lule Saami
+language smj
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/be b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/be
new file mode 100644
index 00000000..31b14e53
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/be
@@ -0,0 +1,4 @@
+name Belarusian
+language be
+dict_min 2000
+speed 95
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru
new file mode 100644
index 00000000..959754b6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru
@@ -0,0 +1,4 @@
+name Russian
+language ru
+replace 03 a a#
+dict_min 20000
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru-LV b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru-LV
new file mode 100644
index 00000000..fc9541ba
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru-LV
@@ -0,0 +1,16 @@
+name Russian (Latvia)
+language ru-lv 2
+
+maintainer Valdis Vitolins
+status testing
+
+phonemes ru-lv
+dictrules 2
+dict_min 20000
+speed 95
+
+words 0 2
+tone 150 220 450 255 750 20 3500 255
+stressAmp 12 10 8 8 0 0 16 17
+stressLength 160 140 200 140 0 0 240 160
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru-cl b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru-cl
new file mode 100644
index 00000000..ad100caf
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/ru-cl
@@ -0,0 +1,6 @@
+name Russian (Classic)
+language ru-cl
+replace 03 a a#
+dict_min 20000
+speed 95
+dictrules 3
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/uk b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/uk
new file mode 100644
index 00000000..b318c235
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zle/uk
@@ -0,0 +1,7 @@
+name Ukrainian
+language uk
+
+maintainer Andrij Mizyk
+status testing
+
+speed 80
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/bg b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/bg
new file mode 100644
index 00000000..870c0424
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/bg
@@ -0,0 +1,5 @@
+name Bulgarian
+language bg
+
+stressAmp 13 12 17 17 20 22 22 21
+stressLength 180 170 200 200 200 200 210 220
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/bs b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/bs
new file mode 100644
index 00000000..01fd1746
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/bs
@@ -0,0 +1,14 @@
+name Bosnian
+language bs
+phonemes hr
+
+pitch 81 120
+formant 0 100 100 100
+formant 1 97 97 100
+formant 2 97 97 100
+formant 3 97 102 100
+formant 4 97 102 100
+formant 5 97 102 100
+
+stressAdd 10 10 0 0 0 0 -30 -30
+dictrules 3 4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/hr b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/hr
new file mode 100644
index 00000000..d1cae3a3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/hr
@@ -0,0 +1,15 @@
+name Croatian
+language hr
+language hbs
+
+// attributes towards !variant3
+pitch 81 120
+formant 0 100 100 100
+formant 1 97 97 100
+formant 2 97 97 100
+formant 3 97 102 100
+formant 4 97 102 100
+formant 5 97 102 100
+
+stressAdd 10 10 0 0 0 0 -30 -30
+dictrules 1
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/mk b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/mk
new file mode 100644
index 00000000..380c20b6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/mk
@@ -0,0 +1,2 @@
+name Macedonian
+language mk
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/sl b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/sl
new file mode 100644
index 00000000..b7bf01f2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/sl
@@ -0,0 +1,4 @@
+name Slovenian
+language sl
+
+status testing
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/sr b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/sr
new file mode 100644
index 00000000..81e33907
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zls/sr
@@ -0,0 +1,13 @@
+name Serbian
+language sr
+
+// attributes towards !variant3 pitch 80 120
+formant 0 100 100 100
+formant 1 97 97 100
+formant 2 97 97 100
+formant 3 97 102 100
+formant 4 97 102 100
+formant 5 97 102 100
+
+stressAdd 10 10 0 0 0 0 -30 -30
+dictrules 2 4
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/cs b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/cs
new file mode 100644
index 00000000..5c3bf2ac
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/cs
@@ -0,0 +1,2 @@
+name Czech
+language cs
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/pl b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/pl
new file mode 100644
index 00000000..b85f56be
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/pl
@@ -0,0 +1,4 @@
+name Polish
+language pl
+
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/sk b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/sk
new file mode 100644
index 00000000..e849e61b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lang/zlw/sk
@@ -0,0 +1,2 @@
+name Slovak
+language sk
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lb_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lb_dict
new file mode 100644
index 00000000..d0aee674
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lb_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lfn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lfn_dict
new file mode 100644
index 00000000..9a8d4f89
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lfn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lt_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lt_dict
new file mode 100644
index 00000000..d0dd29f6
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lv_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lv_dict
new file mode 100644
index 00000000..60d70b1b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/lv_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mi_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mi_dict
new file mode 100644
index 00000000..b727a301
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mi_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mk_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mk_dict
new file mode 100644
index 00000000..974626c1
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ml_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ml_dict
new file mode 100644
index 00000000..e12f2227
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ml_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mr_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mr_dict
new file mode 100644
index 00000000..2cbf14d5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ms_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ms_dict
new file mode 100644
index 00000000..cb6fc297
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ms_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mt_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mt_dict
new file mode 100644
index 00000000..8cc965b9
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mto_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mto_dict
new file mode 100644
index 00000000..280aaa44
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/mto_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/my_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/my_dict
new file mode 100644
index 00000000..f60804ec
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/my_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nci_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nci_dict
new file mode 100644
index 00000000..4f001af8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nci_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ne_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ne_dict
new file mode 100644
index 00000000..fa8e29c6
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ne_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nl_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nl_dict
new file mode 100644
index 00000000..4b371b1c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/no_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/no_dict
new file mode 100644
index 00000000..e1805fac
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/no_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nog_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nog_dict
new file mode 100644
index 00000000..0819a517
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/nog_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/om_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/om_dict
new file mode 100644
index 00000000..81fa80d2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/om_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/or_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/or_dict
new file mode 100644
index 00000000..ad2d1919
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/or_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pa_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pa_dict
new file mode 100644
index 00000000..08485ee8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pa_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pap_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pap_dict
new file mode 100644
index 00000000..3fccee67
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pap_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phondata b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phondata
new file mode 100644
index 00000000..5b3c94a5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phondata differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phondata-manifest b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phondata-manifest
new file mode 100644
index 00000000..e7eac9a7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phondata-manifest
@@ -0,0 +1,987 @@
+# This file lists the type of data that has been compiled into the
+# phondata file
+#
+# The first character of a line indicates the type of data:
+# S - A SPECT_SEQ structure
+# W - A wavefile segment
+# E - An envelope
+#
+# Address is the displacement within phondata of this item
+#
+# Address Data file
+# ------- ---------
+W 0x00008 ustop/null
+S 0x00158 vowel/@
+S 0x0021c vowel/@-
+S 0x002e0 vowel/a
+S 0x003e4 vowel/e
+S 0x004e8 vowel/i
+S 0x005ec vowel/oo
+S 0x006f0 vowel/u
+S 0x007f4 klatt/m-syl
+S 0x008f8 m/m-syl
+S 0x009bc klatt/n-syl
+S 0x00ac0 n/n-syl
+S 0x00b84 nn/nn-syl
+W 0x00cc8 ustop/percus10
+S 0x00ed4 vowelr/r-voc
+S 0x01018 vwl_hi/l-voc
+S 0x0111c r/r@
+S 0x011e0 r/ra
+S 0x012a4 r/re
+S 0x01368 r/ri
+S 0x0142c r/ro
+S 0x014f0 r/ru
+S 0x015b4 r/xr
+S 0x01638 r/_r
+S 0x016fc r/tr
+S 0x01780 r/r
+S 0x01844 r3/r_n
+W 0x018c8 r3/rx
+S 0x02c20 r/trr
+S 0x02ce4 r/rr
+S 0x02da8 r3/r_
+S 0x02e2c r3/r_trill2
+W 0x02ef0 r3/r_trill2.wav
+S 0x035fc r3/r_trill
+W 0x03700 r3/r_trill.wav
+W 0x0416c r3/r_trill3.wav
+S 0x045b0 r3/r_uvl
+W 0x046b4 r3/r_uvl.wav
+S 0x055bc l/l@
+S 0x05680 l/la
+S 0x05704 l/le
+S 0x05788 l/li
+S 0x0584c l/lo
+S 0x05950 l/lu
+S 0x05a14 l/L1_@L
+S 0x05b18 l/L1_aL
+S 0x05c1c l/L1_eL
+S 0x05ce0 l/L1_iL
+S 0x05de4 l/L1_oL
+S 0x05f28 l/L1_uL
+S 0x0602c l/l_
+S 0x060b0 l/xl
+S 0x06134 l/_l
+S 0x061f8 l/tl
+S 0x0627c l/l_long
+S 0x06300 l/l
+S 0x06384 l/L2_eL
+S 0x06448 l/L2_uL
+S 0x0654c l/L2_@L
+S 0x06650 l/L2_aL
+S 0x06754 l/L2_iL
+S 0x06858 l/L2_oL
+S 0x0699c l/l_@
+S 0x06a20 l/l_a
+S 0x06aa4 l/l_e
+S 0x06b28 l/l_i
+S 0x06bec l/l_o
+S 0x06cb0 l/l_u
+S 0x06d34 l^/j2@
+S 0x06df8 l^/j2a
+S 0x06ebc l^/j2e
+S 0x06f80 l^/j2i
+S 0x07044 l^/j2o
+S 0x07148 l^/j2u
+S 0x0724c l^/_l^
+S 0x07350 l^/l^
+S 0x07454 l^/l_rfx
+S 0x07518 ll/xll
+S 0x075dc ll/_ll
+S 0x076e0 ll/ll
+S 0x077a4 w/w@
+S 0x07868 w/wa
+S 0x0792c w/we
+S 0x079f0 w/wi
+S 0x07ab4 w/wo
+S 0x07b78 w/wu
+S 0x07c3c w/xw
+S 0x07cc0 w/w
+S 0x07d44 w/_w
+S 0x07e08 w/iw_
+S 0x07f0c w/w_
+S 0x07fd0 j/j@
+S 0x080d4 j/ja
+S 0x081d8 j/je
+S 0x082dc j/ji
+S 0x083a0 j/jo
+S 0x084e4 j/ju
+S 0x085a8 j/xj
+S 0x0862c j/_j
+S 0x086b0 j/j_
+S 0x08774 j2/j2@
+S 0x08838 j2/j2a
+S 0x088fc j2/j2e
+S 0x089c0 j2/j2i
+S 0x08a84 j2/j2o
+S 0x08b88 j2/j2u
+S 0x08c4c j2/xj2
+S 0x08cd0 j2/_j2
+S 0x08d54 klatt/m_
+S 0x08e58 klatt/m
+S 0x08f5c m/m@
+S 0x09060 m/ma
+S 0x09164 m/me
+S 0x09268 m/mi
+S 0x093ac m/mo
+S 0x094b0 m/mu
+S 0x095b4 m/mj
+S 0x09678 m/_m
+S 0x096fc m/m_
+S 0x097c0 klatt/n
+S 0x098c4 n/n@
+S 0x099c8 n/na
+S 0x09acc n/ne
+S 0x09bd0 n/ni
+S 0x09cd4 n/no
+S 0x09dd8 n/nu
+S 0x09edc n/nj
+S 0x09fa0 n/_n
+S 0x0a024 n/n_
+S 0x0a0e8 klatt/nr
+S 0x0a1ec n/nr@
+S 0x0a2f0 n/nra
+S 0x0a3f4 n/nre
+S 0x0a4f8 n/nri
+S 0x0a5fc n/nro
+S 0x0a700 n/nru
+S 0x0a804 n/_nr
+S 0x0a888 n/nr_
+S 0x0a94c klatt/n^@
+S 0x0a9d0 klatt/n^
+S 0x0aad4 n^/n^@
+S 0x0ac58 n^/n^a
+S 0x0ad9c n^/n^e
+S 0x0af20 n^/n^i
+S 0x0b0a4 n^/n^o
+S 0x0b268 n^/n^u
+S 0x0b3ec n^/_n^
+S 0x0b470 n^/n^_
+S 0x0b5b4 klatt/nn_
+S 0x0b6b8 klatt/nn
+S 0x0b7bc nn/nn@
+S 0x0b880 nn/nna
+S 0x0b944 nn/nne
+S 0x0ba08 nn/nni
+S 0x0bacc nn/nno
+S 0x0bb90 nn/nnu
+S 0x0bc54 nn/inn
+S 0x0bd18 nn/nnj
+S 0x0bd9c nn/_nn
+S 0x0be20 nn/nn_
+S 0x0bee4 r3/@tap2
+S 0x0c028 r3/@tap
+S 0x0c16c d/tap1
+S 0x0c230 d/tap3
+S 0x0c334 d/dr
+S 0x0c3b8 r3/@tap_rfx_
+S 0x0c4fc r3/@tap_rfx
+S 0x0c640 b/xb
+S 0x0c704 klatt/b
+W 0x0c7c8 x/b_
+W 0x0cbe0 x/b
+S 0x0cd44 b/b_
+S 0x0ce08 b/b@2
+S 0x0cf0c b/b@
+S 0x0d010 b/ba
+S 0x0d114 b/be
+S 0x0d218 b/bi
+S 0x0d31c b/bo
+S 0x0d420 b/bu
+S 0x0d524 b/b
+S 0x0d628 d/xd
+S 0x0d6ec d/d_
+W 0x0d7b0 x/d_
+S 0x0dbd8 d/d
+W 0x0dc9c x/d
+W 0x0deb8 x/d_dnt
+S 0x0e19c dzh/xdzh
+S 0x0e260 dzh/dzh_
+W 0x0e324 x/dzh_
+S 0x0ed5c dzh/dzh
+W 0x0ee20 x/dzh
+W 0x0f22c x/dz_pzd
+S 0x0f68c dzh/xdz_pzd
+S 0x0f750 klatt/dz_pzd_
+S 0x0f814 klatt/dz_pzd
+S 0x0f8d8 dzh/dz_pzd_
+S 0x0f99c dzh/dz_pzd
+S 0x0fa60 g/xg
+S 0x0fb24 g/g_
+W 0x0fbe8 x/g_
+S 0x0ffa8 g/g
+W 0x1006c x/g2
+S 0x102f4 klatt/v_
+W 0x103b8 vocw/v
+S 0x10cb8 klatt/bh
+S 0x10d7c voc/v_
+S 0x10e40 voc/bh
+S 0x10f04 klatt/v
+S 0x10fc8 voc/v
+S 0x110cc voc/v#_
+S 0x11190 voc/v#
+S 0x11294 voc/dh_
+W 0x11358 vocw/dh
+S 0x11c60 voc/dh
+S 0x11d24 voc/z_
+W 0x11de8 ufric/s_
+S 0x1289c voc/z
+S 0x12960 klatt/zh_
+W 0x12a24 vocw/zh
+S 0x1338c klatt/zh
+S 0x13450 voc/zh_
+S 0x13514 voc/zh
+W 0x135d8 vocw/zh_rfx
+S 0x13e68 voc/z_pzd_
+W 0x13f2c ufric/s_pzd_
+S 0x14a30 voc/z_pzd
+W 0x14af4 ufric/s_pzd
+W 0x1542c ufric/sh_pzd_
+W 0x15ef4 ufric/sh_pzd
+S 0x16828 voc/j
+W 0x1692c ufric/ch
+S 0x17044 klatt/qqh_
+W 0x17108 vocw/Q_
+S 0x17914 klatt/qqh
+W 0x179d8 vocw/Q
+S 0x181e4 voc/Q_
+S 0x182a8 voc/Q
+S 0x1836c voc/Q_ulv
+W 0x18470 ufric/xx
+W 0x18f6c ustop/p_
+W 0x1977c ustop/pr
+W 0x19bc4 ustop/p_unasp
+W 0x19ef0 ustop/pl
+W 0x1a2e8 ustop/p
+W 0x1a658 ustop/t_
+W 0x1ab18 ustop/tr
+W 0x1b278 ustop/t_dnt
+W 0x1b688 ustop/t
+W 0x1babc ustop/t_hi
+W 0x1bd88 ustop/tsh_
+W 0x1c6c8 ustop/tsh
+W 0x1cd08 ustop/ts_pzd
+W 0x1d40c ustop/t_pzd
+W 0x1d858 ustop/c
+W 0x1db08 ustop/k_
+W 0x1dfc4 ustop/kr
+W 0x1e604 ustop/ki
+W 0x1ebcc ustop/kl
+W 0x1f1fc ustop/k_unasp
+W 0x1f6d0 ustop/k
+W 0x1fba4 ustop/q
+W 0x1fd10 ustop/q_u
+W 0x1fe30 ufric/f_
+W 0x20900 ufric/f
+W 0x210f0 ufric/th_
+W 0x21970 ufric/th
+W 0x22208 ufric/s!
+W 0x22ab8 ufric/s
+W 0x23258 ufric/sh_
+W 0x23d08 ufric/sh
+W 0x246b8 ufric/sh_rfx
+W 0x25054 ufric/l#
+W 0x25a98 ufric/ch_
+W 0x263c0 ufric/x_
+W 0x26f1c ufric/x_hr
+W 0x27830 h/h@
+W 0x27d84 h/ha
+W 0x28400 h/he
+W 0x28a94 h/hi
+W 0x2902c h/ho
+W 0x296e8 h/hu
+W 0x29e0c h/h_
+W 0x2a4b8 ustop/ts_
+W 0x2ae18 ustop/ts
+S 0x2b874 d/xdz
+W 0x2b938 ustop/p_unasp_
+W 0x2ba74 ustop/p_asp
+W 0x2bf78 ustop/t_short
+W 0x2c1bc ustop/ts_pzd_
+W 0x2c680 ustop/ts_pzd2
+W 0x2c9b4 ustop/k_asp
+W 0x2d0b8 ustop/k_asp_e
+W 0x2d820 ustop/k_asp_a
+W 0x2e0a4 ufric/s_continue
+S 0x2e854 vowel/a#
+S 0x2e958 vowel/a_2
+S 0x2ea5c vowel/ee_1
+S 0x2eba0 vowel/o
+S 0x2ece4 vowel/oo_4
+S 0x2ede8 vowel/u_bck
+S 0x2eeec vowel/uu_2
+S 0x2eff0 vowel/y
+S 0x2f134 vowel/y#
+S 0x2f238 vdiph/au_4
+S 0x2f3bc vdiph/eu
+S 0x2f500 vdiph2/iu
+S 0x2f684 vdiph/ai
+S 0x2f7c8 vdiph/ei
+S 0x2f90c vdiph/eei
+S 0x2fa90 vdiph/oi
+S 0x2fc54 vdiph/ui
+S 0x2fd98 w/w2
+W 0x2fe5c ustop/t_dnt2
+S 0x300b4 vowel/ii_5
+S 0x301b8 vowel/e_mid2
+S 0x302bc vowel/ii#_2
+S 0x303c0 vdiph/ai_5
+S 0x30504 vowel/a_6
+S 0x30608 vdiph/@i_2
+S 0x3074c vowel/@_3
+S 0x30810 vowel/o-_4
+S 0x30914 vowel/u_2
+W 0x30a18 ustop/tsh_unasp
+W 0x30ed8 ustop/k_ejc
+W 0x31688 vwl_ar/hah
+W 0x325ec vwl_ar/dhad
+W 0x3364c vwl_ar/shin
+S 0x34428 vowel/aa_7
+S 0x3452c vowel/u_7
+S 0x34630 vowel/ii#
+S 0x34734 vowel/oe
+S 0x34838 vowel/o_mid
+S 0x3493c vowel/@_2
+S 0x34a40 vowel/ee
+S 0x34b44 vowel/aa_8
+S 0x34c48 vowel/0_3
+S 0x34d4c vowel/e_6
+S 0x34e50 vowel/ii
+E 0x34f54 envelope/i_risefall
+E 0x34fd4 envelope/p_fall
+E 0x35054 envelope/p_214
+E 0x350d4 envelope/p_rise
+E 0x35154 envelope/p_level
+S 0x351d4 n/n_long_
+S 0x35298 nn/nn2_
+W 0x3535c ustop/t_unasp2
+W 0x35468 ustop/k_unasp_
+W 0x35724 ustop/tsh_pzd_unasp
+W 0x35f74 ustop/tsh_pzd
+W 0x36ab4 ufric/sh_pzd2
+W 0x37604 ustop/ts_unasp
+W 0x37e7c ustop/ts_rfx_unasp
+W 0x38a68 ustop/ts_rfx
+S 0x39748 vwl_zh/a_n
+S 0x3984c vowel/aa_2
+S 0x399d0 vowel/a_3
+S 0x39ad4 vdiph/ai_6
+S 0x39c98 vwl_zh/aau
+S 0x39ddc vowel/@_bck
+S 0x39ee0 vowel/3_2
+S 0x3a024 vowelr/V3_r
+S 0x3a168 vowel/ee_2
+S 0x3a26c vdiph2/ei_4
+S 0x3a3b0 vowel/ii_2
+S 0x3a4b4 vowel/i#_7
+S 0x3a5b8 vowel/i#_6
+S 0x3a6bc vwl_zh/iaa
+S 0x3a800 vwl_zh/iaau
+S 0x3a984 vwl_zh/ie
+S 0x3aac8 vdiph2/iioo
+S 0x3ac0c vwl_zh/iou
+S 0x3ad90 vnasal/oo_n2
+S 0x3aed4 vdiph2/o_oo
+S 0x3b018 vowel/8
+S 0x3b11c vdiph/8u
+S 0x3b260 vwl_zh/ong
+S 0x3b3e4 vnasal/u_n
+S 0x3b4e8 vwl_zh/uaa
+S 0x3b62c vdiph2/oa
+S 0x3b770 vwl_zh/uai
+S 0x3b8f4 vdiph2/o@
+S 0x3ba78 vwl_zh/uei
+S 0x3bbfc vwl_zh/uo
+S 0x3bd80 vowel/uu_3
+S 0x3be44 vowel/y_2
+S 0x3bf88 vdiph2/yu
+S 0x3c10c vwl_zh/y&
+S 0x3c250 vwl_zh/yee
+S 0x3c394 vdiph2/y@
+S 0x3c4d8 vdiph/yi
+S 0x3c61c vowel/ii_3
+S 0x3c720 vowel/oo_2
+S 0x3c824 vowel/i#
+S 0x3c928 vowel/o_2
+S 0x3ca6c vdiph/aai_2
+S 0x3cc30 vdiph/ai_2
+S 0x3cdf4 vdiph2/iu_4
+S 0x3cf38 vdiph/ooi
+S 0x3d0fc vdiph/ui_3
+S 0x3d280 vowel/a#_3
+S 0x3d384 r/a_
+S 0x3d448 vowel/i_4
+S 0x3d54c vowel/&
+S 0x3d650 vowel/a_8
+S 0x3d754 vowel/o_5
+S 0x3d858 vowel/V_4
+S 0x3d95c vowel/yy
+S 0x3da60 vowel/V
+S 0x3db64 r/aa
+S 0x3dc68 r2/r2@
+S 0x3dd2c r2/r2a
+S 0x3ddf0 r2/r2e
+S 0x3def4 r2/r2i
+S 0x3dfb8 r2/r2o
+S 0x3e07c r2/r2u
+S 0x3e140 vowel/@_6
+S 0x3e244 vwl_en/@L
+S 0x3e308 vowel/ee_5
+S 0x3e40c vowel/ii#_3
+S 0x3e510 vowel/ii_4
+S 0x3e614 vowel/ii_7
+S 0x3e718 vowel/0
+S 0x3e81c vowel/V_2
+S 0x3e920 vowel/8_2
+S 0x3ea24 vowel/uu
+S 0x3eb28 vowel/3_en
+S 0x3ec6c w/wi2
+S 0x3ed70 vowel/i_en
+S 0x3eeb4 vowel/oo_en
+S 0x3eff8 vwl_en/u_L
+S 0x3f13c vdiph2/uw_2
+S 0x3f280 vdiph/au
+S 0x3f404 vdiph/@u_en
+S 0x3f588 vdiph2/ii@
+S 0x3f70c vdiph2/8@
+S 0x3f850 vdiph2/uu@
+S 0x3f9d4 vwl_en/aI@
+S 0x3fb98 vwl_en/aU@
+S 0x3fd1c vowelr/V_r
+S 0x3fe60 vnasal/aa_n2
+S 0x3ffa4 vowel/oo_1
+S 0x400e8 vdiph/eei_2
+S 0x4022c vdiph/ooi_2
+S 0x403f0 vowel/aa_9
+S 0x404f4 vowel/aa
+S 0x405f8 vowel/e#
+S 0x406fc vowel/e_7
+S 0x40800 vowel/ee#_2
+S 0x40904 vowel/i_8
+S 0x40a08 vowel/i_7
+S 0x40b0c vowel/u_bck2
+S 0x40c10 vowel/u_bck3
+S 0x40d14 vowel/u_5
+S 0x40e18 vowel/8_7
+S 0x40f1c vowel/8_4
+S 0x41020 vdiph/&i
+S 0x41164 vdiph/@i
+W 0x412a8 ufric/s_pal
+S 0x41b5c d/xd_pzd
+W 0x41c20 x/d_pzd
+S 0x42034 vdiph/ou_2
+S 0x42178 vowel/aa#
+S 0x4227c vowel/uu_4
+S 0x42380 vdiph/aai_3
+S 0x42504 vdiph/y#i
+S 0x42648 vdiph/ui_4
+S 0x4278c vdiph/aau
+S 0x42910 vdiph/ou
+S 0x42a54 vdiph/eu_2
+S 0x42b98 vdiph2/iu_2
+S 0x42d1c vdiph/&y
+S 0x42e60 vdiph/eey
+S 0x42fa4 vdiph/y#y
+S 0x430e8 vdiph2/iy
+S 0x4322c vdiph2/uo
+S 0x43370 vdiph2/ie
+S 0x434b4 vdiph2/y-y#
+S 0x435f8 r3/r_trill_short
+W 0x436fc h/hu_fi
+S 0x43fec vowel/@_4
+S 0x440b0 vowel/ee_4
+S 0x441b4 vowel/u#_2
+S 0x442b8 vowel/oe_2
+S 0x443bc vwl_fr/y2r
+S 0x44440 vwl_fr/e_2r
+S 0x444c4 vwl_fr/aa2r
+S 0x44548 vwl_fr/ee2r
+S 0x4460c vwl_fr/oo2r
+S 0x446d0 vwl_fr/@2r
+S 0x44754 vwl_fr/a2r
+S 0x447d8 vwl_fr/e2r
+S 0x4485c vwl_fr/i2r
+S 0x448e0 vwl_fr/o2r
+S 0x44964 vwl_fr/u2r
+S 0x449e8 vwl_fr/re2
+S 0x44a6c vwl_fr/r@2
+S 0x44af0 vwl_fr/raa
+S 0x44b74 vwl_fr/ree
+S 0x44bf8 vwl_fr/ry
+S 0x44c7c vwl_fr/rw
+S 0x44d00 vwl_fr/roo
+S 0x44d84 vwl_fr/rj
+S 0x44e08 vwl_fr/r@
+S 0x44e8c vwl_fr/ra
+S 0x44f10 vwl_fr/re
+S 0x44f94 vwl_fr/ri
+S 0x45018 vwl_fr/ro
+S 0x4509c vwl_fr/ru
+S 0x45120 vwl_fr/r
+S 0x451a4 vwl_fr/trr
+S 0x45268 vwl_fr/rr
+S 0x452ec vwl_fr/r_@
+S 0x45370 vwl_fr/r_a
+S 0x453f4 vwl_fr/r_e
+S 0x45478 vwl_fr/r_i
+S 0x454fc vwl_fr/r_o
+S 0x45580 vwl_fr/r_u
+S 0x45604 vwl_fr/r_y
+S 0x45688 vwl_fr/r_n
+S 0x4574c vwl_fr/r_
+S 0x457d0 vwl_fr/tr
+S 0x458d4 vwl_fr/br
+S 0x459d8 vwl_fr/lo
+S 0x45a5c l/l_y
+S 0x45ae0 vowel/@_hgh
+S 0x45ba4 vowel/a_7
+S 0x45ca8 vowel/e_8
+S 0x45dac vowel/e_mid
+S 0x45eb0 vwl_fr/j
+S 0x45fb4 vowel/o_8
+S 0x460f8 vowel/o_mid2
+S 0x461fc vwl_fr/wa
+S 0x462c0 vnasal/aa_n4
+S 0x46404 vnasal/W_n
+S 0x46548 vnasal/o_n5
+S 0x4668c b/xbr
+S 0x46750 b/br
+S 0x467d4 d/xdr
+S 0x46898 g/xgr
+S 0x4695c g/gr
+W 0x46a20 x/g
+W 0x46ce0 ustop/t_short_
+S 0x46f6c vwl_af/r@
+S 0x47030 vwl_af/@
+S 0x470f4 vowel/a_4
+S 0x471f8 vdiph/@u_3
+S 0x4737c vdiph2/i@
+S 0x47540 vdiph2/u@
+S 0x476c4 vnasal/a#_n2
+S 0x477c8 vnasal/a_n
+S 0x4790c vnasal/e_n
+S 0x47a10 vnasal/i_n
+S 0x47b14 vnasal/o_n
+S 0x47c58 vowel/yy_4
+S 0x47d5c vowel/o-
+S 0x47e60 vwl_lv/a
+S 0x47f64 vwl_lv/aa
+S 0x48028 vwl_lv/e
+S 0x480ec vwl_lv/ee
+S 0x481b0 vwl_lv/i
+S 0x48274 vwl_lv/ii
+S 0x48338 vwl_lv/o
+S 0x483fc vwl_lv/oo
+S 0x484c0 vwl_lv/u
+S 0x48584 vwl_lv/uu
+S 0x48648 vdiph/aai
+S 0x487cc vdiph2/ie_2
+S 0x48910 vdiph2/ua
+S 0x48a14 vowel/@_low
+S 0x48ad8 vowel/V_3
+S 0x48bdc vowel/i_fnt
+S 0x48ce0 vowel/ii_6
+S 0x48da4 vowel/e_2
+S 0x48ea8 vdiph/ee-e
+S 0x48fec vowel/a_5
+S 0x490f0 vowel/uu_bck
+S 0x491f4 vnasal/i_n2
+S 0x492f8 vnasal/ii_n
+S 0x493fc vnasal/ee_n2
+S 0x49540 vnasal/V_n
+S 0x49644 vdiph/aau_3
+S 0x497c8 d/xd3
+W 0x4988c ustop/th_rfx2
+S 0x49e90 g2/xg
+W 0x49f54 ustop/percus02
+W 0x4a284 ustop/ts2
+S 0x4a754 vowel/y#_2
+S 0x4a858 vowel/e_3
+S 0x4a95c vowel/e_e
+S 0x4aa60 vowel/a#_2
+S 0x4ab64 vowel/oo_5
+S 0x4ac68 vowel/y##
+S 0x4ad6c vowel/y#_3
+S 0x4ae70 vdiph/ai_7
+S 0x4aff4 vdiph/ou_3
+S 0x4b0f8 vdiph/y#i_2
+S 0x4b23c m/m#_
+S 0x4b340 n/n#_
+S 0x4b444 n^/n^#_
+S 0x4b548 nn/nn#_
+W 0x4b64c ufric/tl#
+S 0x4bfb4 r3/r#_
+S 0x4c038 vowel/oo_3
+W 0x4c0fc ustop/k_asp_u
+W 0x4c92c ufric/x2
+S 0x4d284 vowel/aa_6
+S 0x4d3c8 vowel/u#_7
+S 0x4d4cc vowel/V_6
+W 0x4d5d0 ustop/t_unasp
+W 0x4d708 ustop/ts_pzd3
+S 0x4dd88 vowel/i_2
+S 0x4de8c vdiph/aau_2
+S 0x4dfd0 vdiph/ae
+S 0x4e114 vdiph/eeu_2
+S 0x4e258 vdiph/ae_2
+S 0x4e3dc vdiph/eei_5
+S 0x4e520 vwl_ru/ee
+S 0x4e664 vdiph2/ea
+S 0x4e7a8 vowel/i_3
+S 0x4e8ac vowel/i_6
+S 0x4e9b0 vdiph2/uaa
+S 0x4eb34 vdiph/eei_3
+S 0x4ec78 vwl_lv/e2
+S 0x4ed3c vwl_lv/ee2
+S 0x4ee00 vwl_lv/y
+S 0x4ef04 vwl_lv/yy
+S 0x4f008 vwl_lv/ai
+S 0x4f18c vwl_lv/au
+S 0x4f310 vwl_lv/ei
+S 0x4f454 vwl_lv/ie
+S 0x4f598 vwl_lv/iu
+S 0x4f71c vwl_lv/ui
+S 0x4f860 vwl_lv/ua
+S 0x4f964 vwl_lv/oi
+W 0x4fb28 h/h-lv
+S 0x504a8 l^/l^_
+W 0x505ac myanmar/k
+W 0x5149c myanmar/kh
+W 0x520b4 myanmar/g.wav
+S 0x52ef8 myanmar/ny
+W 0x530bc myanmar/s
+W 0x54258 myanmar/hs
+W 0x553f4 myanmar/z
+W 0x564dc myanmar/t_short
+W 0x5662c myanmar/ht
+W 0x571b4 myanmar/d
+W 0x57d28 myanmar/p
+W 0x58c54 myanmar/t_hi
+W 0x58f20 myanmar/h
+S 0x5a228 myanmar/yy
+S 0x5a42c myanmar/a
+S 0x5a4b0 myanmar/ky
+W 0x5a6f4 myanmar/by.wav
+W 0x5ac00 myanmar/ch.wav
+W 0x5b454 myanmar/gya.wav
+W 0x5c7d8 myanmar/htya.wav
+W 0x5db1c myanmar/phya.wav
+W 0x5e7d4 myanmar/pya.wav
+W 0x5fc58 myanmar/ty.wav
+W 0x60f18 myanmar/sh.wav
+S 0x61b2c myanmar/a01
+S 0x61c30 myanmar/a02
+S 0x61db4 myanmar/a03
+S 0x62038 myanmar/a04
+S 0x620fc myanmar/a05
+S 0x62200 myanmar/a06
+S 0x62584 myanmar/a07
+S 0x626c8 myanmar/a08
+S 0x6284c myanmar/a09
+S 0x62b50 myanmar/a11
+S 0x62cd4 myanmar/a12
+S 0x62f98 myanmar/a14
+S 0x6315c myanmar/a13
+S 0x633e0 myanmar/a17
+S 0x636a4 myanmar/a16
+S 0x639a8 myanmar/a20
+S 0x63b2c myanmar/a19
+S 0x63d70 myanmar/a21
+S 0x64034 myanmar/a23
+S 0x64138 myanmar/a22
+S 0x642bc myanmar/a24
+S 0x64600 myanmar/a29
+S 0x64744 myanmar/a28
+S 0x64988 myanmar/a30
+S 0x64d0c myanmar/a32
+S 0x64f50 myanmar/a31
+S 0x65214 myanmar/a33
+S 0x65318 myanmar/a35
+S 0x655dc myanmar/a34
+S 0x658a0 myanmar/a36
+S 0x65ba4 myanmar/a43
+S 0x65de8 myanmar/a42
+S 0x6602c myanmar/a44
+S 0x66430 myanmar/a49
+S 0x665b4 myanmar/a50
+S 0x66838 myanmar/a46
+S 0x66a3c myanmar/a45
+S 0x66c40 myanmar/a47
+S 0x66f44 myanmar/a25
+S 0x67088 myanmar/a26
+S 0x672cc myanmar/a27
+S 0x67490 myanmar/a37
+S 0x67654 myanmar/a38
+S 0x67798 myanmar/a39
+S 0x679dc myanmar/a40
+S 0x67b60 myanmar/a41
+S 0x67ce4 vowel/y_4
+S 0x67de8 vwl_no/y#
+S 0x67eec vwl_no/&
+S 0x67ff0 vwl_no/u#
+S 0x680f4 vwl_no/u#2
+S 0x68238 vdiph/0i_2
+S 0x683bc vdiph/ai_3
+S 0x68500 vwl_no/y#y
+S 0x68644 vwl_no/au-
+S 0x68808 vowel/ee#
+S 0x6890c vnasal/ee_u_n
+S 0x68a90 vnasal/oo_n3
+S 0x68c14 vowel/aa_3
+W 0x68d18 vocw/Q2
+W 0x695e4 ustop/tsh_asp
+W 0x6a24c x/g3
+S 0x6a434 vwl_ro/mi
+S 0x6a578 vwl_ru/ii-
+S 0x6a63c vwl_ru/ii
+S 0x6a740 vwl_ru/ii#
+S 0x6a804 vwl_ru/i#
+S 0x6a908 vwl_ru/e
+S 0x6aa0c vwl_ru/E#
+S 0x6ab10 vwl_ru/E@
+S 0x6ac14 vwl_ru/o
+S 0x6ad18 vwl_ru/oo
+S 0x6addc vwl_ru/u
+S 0x6aee0 vwl_ru/u#
+S 0x6b024 vwl_ru/u#u
+S 0x6b168 vwl_ru/8
+S 0x6b22c vwl_ru/ju
+S 0x6b330 vwl_ru/ja
+S 0x6b4b4 vwl_ru/a
+S 0x6b5b8 vwl_ru/aa
+S 0x6b6bc r3/r_ru2
+W 0x6b7c0 r3/r_ru
+S 0x6bac4 vwl_it/o_open
+S 0x6bbc8 vdiph/eeu
+S 0x6bd0c vdiph/au_2
+S 0x6be90 vdiph/ooi_3
+S 0x6c014 vdiph/aau_4
+S 0x6c198 vowel/8_6
+S 0x6c29c vdiph/ooi_4
+S 0x6c3e0 vdiph2/ye
+S 0x6c524 l/l_front_
+S 0x6c668 l/l_front
+S 0x6c76c l/l_4
+S 0x6c830 vowel/ee_6
+S 0x6c8f4 vowel/y_5
+S 0x6ca38 vowel/yy_3
+S 0x6cb3c vowel/oe_4
+S 0x6cc00 vowel/aa_4
+W 0x6cd04 ufric/sx_sv
+S 0x6d54c vowel/o_4
+W 0x6d650 ustop/t_hard
+W 0x6d890 ufric/sh3
+S 0x6e224 vwl_tn/r@
+S 0x6e2e8 vwl_tn/@
+S 0x6e3ac vwl_tn/I
+S 0x6e470 vdiph/i@_2
+S 0x6e5f4 vowel/0_2
+W 0x6e6f8 ufric/tlh
+E 0x6fc14 envelope/p_fallrise
+E 0x6fc94 envelope/vi_5amp
+E 0x6fd14 envelope/p_512
+E 0x6fd94 envelope/vi_6amp
+S 0x6fe14 vietnam/a_2
+S 0x6ff58 vietnam/aa
+S 0x7005c vietnam/e_e_2
+S 0x70160 vietnam/e
+S 0x70264 vietnam/e_short_1
+S 0x703e8 vietnam/i
+S 0x704ec vietnam/i_2
+S 0x705f0 vietnam/oo
+S 0x70734 vietnam/o_2
+S 0x70878 vietnam/u
+S 0x7097c vietnam/y_2
+S 0x70a80 vietnam/V_2
+S 0x70b84 vietnam/@_2
+S 0x70c88 vdiph/&i_2
+S 0x70dcc vdiph/u-i
+S 0x70f10 vdiph/@u
+S 0x71054 vdiph2/ii@_3
+S 0x711d8 vietnam/y@
+S 0x7131c vietnam/u@
+S 0x714a0 vietnam/o#
+S 0x715e4 vietnam/O_short_2
+S 0x71728 vietnam/oe
+S 0x7186c vietnam/ie
+S 0x719b0 vnasal/oi_n
+S 0x71b74 vdiph/@i_3
+S 0x71cb8 vowel/u_3
+W 0x71dbc vietnam/c_2
+W 0x722f8 vietnam/c
+S 0x72834 n/nm
+S 0x728f8 l/l_vi
+W 0x729fc vietnam/th
+W 0x72fec vietnam/tr
+W 0x732dc vietnam/dda_2
+W 0x737a8 vietnam/ch
+W 0x73d04 vietnam/w
+S 0x73f5c vietnam/_w
+S 0x74020 vietnam/w_
+S 0x740e4 vietnam/n^_
+W 0x74228 vietnam/hi
+W 0x74594 vietnam/hu
+S 0x74c18 vwl_zh/ang
+S 0x74e1c vwl_zh/aang
+S 0x75060 vwl_zh/eng
+S 0x75264 vwl_zh/ing
+S 0x754a8 vwl_zh/ng
+S 0x755ec vwl_zh/oeng
+S 0x757b0 vwl_zh/ung
+S 0x75934 vowel/8_3
+S 0x75a38 vdiph/y#y_2
+W 0x75bbc ustop/tsh_sr
+E 0x764d4 envelope/chr_fall21
+E 0x76554 envelope/chr_level2
+E 0x765d4 envelope/chr_rise23
+E 0x76654 envelope/chr_fall32
+E 0x766d4 envelope/chr_level3
+E 0x76754 envelope/chr_rise4
+E 0x767d4 envelope/chr_fall43
+S 0x76854 vnasal/a#_n
+W 0x76958 x/dz_pzd_
+S 0x77048 vwl_es/oo_
+S 0x7710c vwl_es/ooi_
+S 0x77290 vwl_es/ooi
+S 0x77414 voc/v2
+W 0x774d8 ufric/z_eu
+W 0x77ee0 ufric/ts_eu
+W 0x78888 ufric/tz_eu
+S 0x792f4 vdiph/0i
+S 0x794b8 vdiph/oou
+S 0x795fc vwl_it/a
+S 0x79700 vwl_it/e_open
+S 0x79804 vwl_it/i
+S 0x79908 vwl_it/o
+S 0x79a4c vwl_it/u
+S 0x79b50 vowel/8_5
+S 0x79c54 vowel/o_7
+S 0x79d58 vdiph/eeu_3
+S 0x79e9c vnasal/a#u_n
+S 0x79fe0 vowel/ee_3
+S 0x7a0a4 d/x_tap
+S 0x7a168 d/tap2
+S 0x7a22c vwl_ro/li
+S 0x7a330 vwl_ro/ni
+S 0x7a434 vwl_ro/ii-
+S 0x7a4f8 vowel/i#_5
+S 0x7a5fc vdiph/ii
+S 0x7a7c0 vdiph/i#i
+S 0x7a904 vdiph2/uw_3
+S 0x7aa48 vdiph2/eo
+S 0x7abcc vdiph2/e_u
+S 0x7ad10 d/tap_i
+S 0x7add4 d/tap
+S 0x7ae98 vowel/u#
+S 0x7af9c vowel/@_fr
+S 0x7b060 vowel/o-_2
+S 0x7b164 vowel/aa_5
+S 0x7b2a8 vwl_en_n/O@
+S 0x7b3ac vdiph2/uw_4
+S 0x7b4f0 vdiph2/ee@
+S 0x7b634 vowel/ii_final
+S 0x7b738 vowel/o-_3
+S 0x7b83c vwl_en_rp/aa
+S 0x7b980 vowel/3_3
+S 0x7bac4 vowel/uu#_2
+S 0x7bbc8 vdiph/au_3
+S 0x7bd4c vdiph/@u_2
+S 0x7be90 vdiph2/ei_2
+S 0x7bfd4 vdiph2/ee@_2
+S 0x7c118 vwl_en_rp/i@
+S 0x7c29c vwl_en_rp/aU@
+S 0x7c420 vowel/e_5
+S 0x7c524 vowel/u#_4
+S 0x7c628 vowelr/aa_r
+S 0x7c7ec vowelr/e_r
+S 0x7c970 vowel/i_5
+S 0x7ca74 vwl_en_us/or
+S 0x7cbb8 vowelr/oo_r
+S 0x7ccbc vdiph/au#
+S 0x7ce00 vowel/o_3
+S 0x7cf44 vwl_en/aI@_2
+S 0x7d0c8 vdiph2/e@
+S 0x7d20c vowelr/i_r
+S 0x7d350 vdiph2/u#@
+S 0x7d494 vwl_en/@L_2
+S 0x7d598 vwl_en_us/3_us
+S 0x7d69c vowel/@_low2
+S 0x7d760 vwl_en_us/ar
+S 0x7d8a4 vwl_en_us/a
+S 0x7d9a8 vwl_en_us/ee
+S 0x7daac vwl_en_us/aar
+S 0x7dc30 vwl_en_us/3_us2
+S 0x7dd74 vwl_en_us/oor
+S 0x7def8 vdiph2/uw_6
+S 0x7e03c vdiph/aoo
+S 0x7e180 vwl_en_us/ai
+S 0x7e304 vwl_en_us/er
+S 0x7e488 vwl_en_us/ir
+S 0x7e60c vwl_en_us/ur
+S 0x7e750 vwl_en_us/ai@
+S 0x7e8d4 vwl_en_us/ai3
+S 0x7ead8 vwl_en_us/aU@
+S 0x7ec9c klatt/x_tap
+S 0x7ed60 klatt/tap2
+S 0x7ee24 vwl_en_us_nyc/a_raised
+S 0x7ef28 vwl_en_us_nyc/a
+S 0x7f02c vwl_en_us_nyc/0_3
+S 0x7f130 vwl_en_us_nyc/aa_8
+S 0x7f234 vwl_en_us_nyc/@i
+S 0x7f3f8 vowel/@_fnt
+S 0x7f4fc vdiph2/ei_3
+S 0x7f640 vdiph/Vu_2
+S 0x7f7c4 vdiph2/i@_2
+S 0x7f948 vwl_en/ooi@
+S 0x7fb0c vwl_af/I
+S 0x7fbd0 l/L_eL_af
+S 0x7fc94 vowel/y_3
+S 0x7fd98 vdiph2/iu_3
+S 0x7ff5c vdiph/Vu
+S 0x800e0 vdiph/ai_4
+S 0x80264 vdiph/oi_2
+S 0x80428 vdiph/ui_2
+S 0x805ac vdiph2/y#@
+S 0x806f0 vnasal/aa_n3
+S 0x80834 vnasal/o_n2
+S 0x80978 vdiph/aau_6
+S 0x80afc vwl_de/y#
+S 0x80c00 l/l_3
+S 0x80c84 j/_j_short
+S 0x80d08 vdiph2/i@_3
+S 0x80e8c vwl_de/uu_@
+S 0x80fd0 vdiph2/ii@_2
+S 0x81154 vowel/ii_8
+S 0x81258 vowel/y#_4
+S 0x8135c vowel/o_6
+S 0x81460 vowel/a#_4
+S 0x81564 vdiph/y#y_3
+S 0x81668 vdiph/ou_4
+S 0x817ac voc/Q_less
+S 0x81870 vnasal/&_n
+W 0x81974 ustop/ki_ejc
+S 0x81d80 vdiph/Vi
+S 0x81f04 vowel/u_6
+S 0x82008 vowel/u#_3
+S 0x8210c vdiph/ai_8
+S 0x82290 voc/murmur1
+S 0x823d4 vdiph/@i_4
+S 0x82558 vnasal/ai_n
+S 0x8269c vdiph/a#u
+S 0x82820 vnasal/au_n
+S 0x82964 d/dr2
+S 0x82a28 vowel/&_2
+W 0x82b2c ustop/tsh_unasp2
+W 0x82f74 r3/rz_cs
+S 0x83a20 voc/zh_2
+W 0x83ae4 ustop/tsh2
+S 0x841f0 dzh/dzh2
+W 0x842b4 ustop/t_sr
+S 0x845ec d/d_dnt
+W 0x846b0 ufric/ch_sr
+W 0x85290 ufric/x_sr
+W 0x85b10 ustop/ts_sr
+S 0x862cc vowel/&_3
+S 0x863d0 vwl_fr/@R
+S 0x864d4 vietnam/a
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phonindex b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phonindex
new file mode 100644
index 00000000..03ba8068
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phonindex differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phontab b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phontab
new file mode 100644
index 00000000..5c25ca1f
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/phontab differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/piqd_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/piqd_dict
new file mode 100644
index 00000000..7924788c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/piqd_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pl_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pl_dict
new file mode 100644
index 00000000..dcb41321
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pt_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pt_dict
new file mode 100644
index 00000000..c8019733
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/pt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/py_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/py_dict
new file mode 100644
index 00000000..47b81238
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/py_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qdb_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qdb_dict
new file mode 100644
index 00000000..18a6895b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qdb_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qu_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qu_dict
new file mode 100644
index 00000000..afb6dcf0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qu_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/quc_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/quc_dict
new file mode 100644
index 00000000..2361f7b5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/quc_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qya_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qya_dict
new file mode 100644
index 00000000..94689430
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/qya_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ro_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ro_dict
new file mode 100644
index 00000000..22f7dfba
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ro_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ru_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ru_dict
new file mode 100644
index 00000000..ac39ad91
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ru_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sd_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sd_dict
new file mode 100644
index 00000000..c877d441
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sd_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/shn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/shn_dict
new file mode 100644
index 00000000..625f6858
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/shn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/si_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/si_dict
new file mode 100644
index 00000000..9634893c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/si_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sjn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sjn_dict
new file mode 100644
index 00000000..ba76f7c2
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sjn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sk_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sk_dict
new file mode 100644
index 00000000..cd99f8f0
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sl_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sl_dict
new file mode 100644
index 00000000..e13eb491
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sl_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/smj_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/smj_dict
new file mode 100644
index 00000000..203230f5
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/smj_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sq_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sq_dict
new file mode 100644
index 00000000..fccdbf3f
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sq_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sr_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sr_dict
new file mode 100644
index 00000000..63576dd3
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sv_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sv_dict
new file mode 100644
index 00000000..a4e3f6d8
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sv_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sw_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sw_dict
new file mode 100644
index 00000000..601f310c
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/sw_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ta_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ta_dict
new file mode 100644
index 00000000..7e51266d
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ta_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/te_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/te_dict
new file mode 100644
index 00000000..36167c22
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/te_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/th_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/th_dict
new file mode 100644
index 00000000..f8689fdf
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/th_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tk_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tk_dict
new file mode 100644
index 00000000..e0dace41
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tn_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tn_dict
new file mode 100644
index 00000000..ffa39622
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tn_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tr_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tr_dict
new file mode 100644
index 00000000..69d521fe
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tr_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tt_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tt_dict
new file mode 100644
index 00000000..ef0b02bf
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/tt_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ug_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ug_dict
new file mode 100644
index 00000000..25f827fd
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ug_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/uk_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/uk_dict
new file mode 100644
index 00000000..326dc446
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/uk_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ur_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ur_dict
new file mode 100644
index 00000000..cfc9693b
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/ur_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/uz_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/uz_dict
new file mode 100644
index 00000000..c58fae50
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/uz_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/vi_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/vi_dict
new file mode 100644
index 00000000..226a7990
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/vi_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Alex b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Alex
new file mode 100644
index 00000000..10c6b6e6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Alex
@@ -0,0 +1,10 @@
+language variant
+name Alex
+
+voicing 70
+pitch 105 115
+flutter 0
+
+formant 1 110 115 100
+formant 2 100 110 100
+formant 3 100 80 75
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Alicia b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Alicia
new file mode 100644
index 00000000..d33ed3a2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Alicia
@@ -0,0 +1,22 @@
+language variant
+name Alicia
+gender female
+pitch 180 275
+echo 40 50
+formant 0 115 115 110
+formant 1 130 160 120
+formant 2 150 110 150
+formant 3 135 150 100
+formant 4 120 120 120
+formant 5 120 120 120
+formant 6 100 110 105
+formant 7 100 110 160
+formant 8 200 120 100
+intonation 2
+voicing 38
+consonants 100 20
+roughness 1
+stressAdd 1 64 64 50 50 100 100 200
+stressAmp 12 12 20 20 12 12 20 20
+breathw 150 150 200 200 400 400 600 600
+breath 0 4 5 2 3 13 3 2
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Andrea b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Andrea
new file mode 100644
index 00000000..39fb1866
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Andrea
@@ -0,0 +1,20 @@
+language variant
+name Andrea
+gender female
+
+pitch 200 265
+roughness 0
+
+formant 0 100 100 100
+formant 1 110 100 80
+formant 2 110 80 80
+formant 3 115 110 80
+formant 4 115 80 100
+formant 5 95 50 100
+formant 6 0 0 0
+formant 7 120 100 100
+formant 8 110 100 100
+intonation 3
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+voicing 150
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Andy b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Andy
new file mode 100644
index 00000000..25582fb5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Andy
@@ -0,0 +1,19 @@
+language variant
+name Andy
+gender Male
+
+pitch 85 110
+
+flutter 0
+formant 0 80 80 80 80
+formant 1 100 100 100 120
+formant 2 100 88 100
+formant 3 0 0 0
+formant 4 80 80 80
+formant 5 80 80 80
+formant 6 0 0 0
+formant 7 0 0 0
+formant 8 0 0 0
+stressAdd 0 0 0 0 0 0 0 200
+stressAmp 35 35 35 35 35 35 35 35 35
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Annie b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Annie
new file mode 100644
index 00000000..3c5b0355
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Annie
@@ -0,0 +1,17 @@
+language variant
+name Annie
+gender female
+pitch 120 280
+
+formant 0 105 125 120
+formant 1 120 140 120
+formant 2 120 150 140
+formant 3 130 150 130
+formant 4 120 120 110
+formant 5 120 120 110
+formant 6 120 140 130
+formant 7 120 140 130
+formant 8 120 140 130
+intonation 1
+voicing 30
+consonants 110 120
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/AnxiousAndy b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/AnxiousAndy
new file mode 100644
index 00000000..0ed1f357
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/AnxiousAndy
@@ -0,0 +1,19 @@
+language variant
+name anxiousAndy
+gender Male
+
+pitch 115 110
+
+flutter 0
+formant 0 80 80 80 80
+formant 1 100 100 100 120
+formant 2 100 100 100
+formant 3 0 0 0
+formant 4 0 0 0
+formant 5 100 100 100
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+stressAdd 100 100 100 100 100 100 100 300
+stressAmp 35 35 35 35 35 35 35 35 35
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Demonic b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Demonic
new file mode 100644
index 00000000..131fe46a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Demonic
@@ -0,0 +1,65 @@
+##Ten en cuenta que los 2 signos de número en este archivo tienen explicaciones de las comfiguraciones que puede aplicar y cómo comfigurarlas
+## Language Establece el idioma de la voz. Esta opción es necesaria para cualquier comfiguración que realices
+##La siguiente línea es una configuración que puede cambiar. Sin embargo, si no conoce los códigos de idioma, puede ser mejor dejar la configuración tal y como está.
+language variant
+
+## La configuración de nombre es el nombre que aparecerá en la configuración de voz en el cuadro combinado de variante.
+##La siguiente línea es una opción que puede cambiar
+name Demonic
+##La siguiente línea establece el género de la voz. Male or Female (hombre o mujer)
+##La siguiente línea es una opción que puede cambiar
+gender male
+
+flutter 5
+stressAmp 20 18 20 20 20 22 22 22
+##Las opciones de formantes
+## Formant 0 es usado para dar una baja frecuencia a los sonnidos
+## Los tres números son frecuencia, fuerza y ancho, en orden. Ten en cuenta que los números están separados por espacios
+##La siguiente línea es una opción que puede cambiar
+formant 0 100 100 100
+
+# Formant 1, 2, y 3 son las 3 formantes estándar para definir las vocales.
+##Las siguientes 3 líneas son opciones que puedes cambiar
+formant 1 70 100 100
+formant 2 80 100 90
+formant 3 80 160 90
+
+# Formants 4 y 5 afectan a f3. Esto afectará la calidad de la voz.
+##Las siguientes 2 líneas son comfiguraciones que puede cambiar.
+formant 4 80 85
+formant 5 100 100 80
+
+## Formantes 6, 7 y 8 son opciones que te ofrecen un sonido más claro de las vocales
+##Las siguientes 3 líneas son opciones que puedes cambiar
+formant 6 80 80 100
+formant 7 130 130 110
+formant 8 120 120 150
+
+##Intonation afecta el ascenso y la caída de la voz
+## Las opciones son: 1 predeterminado, 2 entonación media, 3 entonación media y no afecta a las comas, 4 al final de la oración o punto aumenta el tono de la voz.
+##La siguiente línea es una opción que puedes cambiar.
+intonation 10
+
+# Establecer el rango de tono. El primer número le da un tono base a la voz (valor en hz). El segundo número controla el rango de tonos usado por la voz. Poniéndolo igual
+# si los 2 números son iguales, la voz será monótona. Por defecto los ajustes son 82 y 118
+pitch 43 120
+## La configuración del tono. El primer número en la línea de configuración, 600, es la configuración de frecuencia para la cantidad de graves en la voz.
+## El segundo número en la línea de tono es el volumen de la frecuencia de graves. Puede configurarlo de 0 a 255, siendo 0 la menor cantidad, 255 la mayor.
+##El tercer número en la línea de tono, 1200, es la frecuencia de rango medio. El cuarto número en la línea es la configuración para cambiar el volumen de la frecuencia de rango medio.
+##0 es la menor cantidad y 255 es la mayor.
+## El quinto número en la línea de tono, 2000, es la frecuencia de agudos. El sexto número es el volumen de la frecuencia de agudos. 0 es el mínimo y 255 es el máximo.
+## Notará que las 3 frecuencias están configuradas en 255.
+###La siguiente línea es una opción que puedes cambiar.
+tone 100 255 1200 255 1500 255
+echo 8 10000
+roughness 3
+breath 20 5 2 10 5 0 27 100
+breathw 255 255 60 180 160 255 255 255
+consonants 194 255
+voicing 65
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 250 350 700 500 450 290 100 225
+stressAmp 16 16 24 24 16 16 20 24
+##Este archivo no incluye todas las configuraciones que se pueden usar para modificar una voz E Speak. Su objetivo es familiarizarlo con lo que hace la configuración.
+##Sin envargo puedes visitar la página http://espeak.sourceforge.net/voices.html y consultar más información acerca de cómo agregar o cambiar otras configuraciones.
+## Espero que te haya servido esta ayuda, y que te hayas divertido.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Denis b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Denis
new file mode 100644
index 00000000..23c7fb70
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Denis
@@ -0,0 +1,19 @@
+language variant
+name Denis
+gender male 35
+pitch 80 115
+flutter 0
+roughness 0
+
+
+formant 0 100 160 160
+formant 1 95 95 95
+formant 2 100 100 100
+formant 3 90 90 90
+formant 4 40 40 40
+formant 5 80 80 80
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 10 10 10
+voicing 40
+consonants 80 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Diogo b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Diogo
new file mode 100644
index 00000000..1e513966
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Diogo
@@ -0,0 +1,22 @@
+language variant
+name Diogo
+gender male 25
+pitch 82 122
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 60 250 140 100 1000 50 3500 35
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Gene b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Gene
new file mode 100644
index 00000000..3db343bc
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Gene
@@ -0,0 +1,17 @@
+language variant
+name Gene
+
+pitch 80 110
+
+formant 0 120 120 120
+formant 1 90 100 110
+formant 2 100 100 95
+formant 3 90 100 100
+formant 4 90 100 110
+formant 5 90 110 110
+formant 6 100 70 100
+formant 7 100 70 100
+formant 8 100 80 100
+voicing 120
+consonants 50 110
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Gene2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Gene2
new file mode 100644
index 00000000..20e8f6f3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Gene2
@@ -0,0 +1,17 @@
+language variant
+name Gene2
+
+pitch 100 130
+
+formant 0 120 120 120
+formant 1 90 100 110
+formant 2 100 100 95
+formant 3 90 100 100
+formant 4 90 100 110
+formant 5 90 110 110
+formant 6 100 70 100
+formant 7 100 70 100
+formant 8 100 80 100
+voicing 120
+consonants 50 110
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Henrique b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Henrique
new file mode 100644
index 00000000..d3fa3d74
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Henrique
@@ -0,0 +1,22 @@
+language variant
+name Henrique
+gender male 25
+pitch 70 130
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 70 250 230 80 1100 30 3500 40
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Hugo b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Hugo
new file mode 100644
index 00000000..fe79235c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Hugo
@@ -0,0 +1,22 @@
+language variant
+name Hugo
+gender male 25
+pitch 70 130
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 400 160 1100 90 3500 90 150 35
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Jacky b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Jacky
new file mode 100644
index 00000000..e0884ed0
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Jacky
@@ -0,0 +1,17 @@
+language variant
+name Jacky
+
+pitch 85 130
+
+formant 0 150 155 100
+formant 1 90 155 70
+formant 2 95 70 64
+formant 3 15 20 30
+formant 4 20 30 40
+formant 5 65 20 65
+formant 6 70 80 100
+formant 7 20 80 100
+formant 8 100 95 80
+voicing 135
+consonants 110
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Lee b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Lee
new file mode 100644
index 00000000..e0194fa3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Lee
@@ -0,0 +1,20 @@
+language variant
+name Lee
+gender Male
+
+#echo 230 30
+pitch 85 110
+
+flutter 0
+formant 0 80 80 80 80
+formant 1 80 80 100 100
+formant 2 80 80 80
+formant 3 9 9 9
+formant 4 290 290
+formant 5 130 0 0
+formant 6 90 90 90
+formant 7 90 90 90
+formant 8 90 90 90
+stressAdd 0 0 0 200 0 0 0 100
+stressAmp 30 30 30 30 30 30 30 30 30
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Marco b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Marco
new file mode 100644
index 00000000..455cb264
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Marco
@@ -0,0 +1,23 @@
+language variant
+name Marco
+gender male 30
+intonation 1
+pitch 100 152
+echo 50 80
+flutter 2
+roughness 0
+stressAmp 25 25 24 20 38 31 39 27
+stressAdd 250 125 250 250 225 145 50 256
+
+formant 0 100 120 130
+formant 1 75 180 170
+formant 2 92 120 110
+formant 3 140 120 110
+formant 4 10 20 20 -50
+formant 5 110 70 20
+formant 6 140 100 98
+formant 7 130 120 115
+formant 8 105 120 108
+voicing 38
+consonants 90 140
+tone 420 150 1200 135 3000 70 4700 40
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mario b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mario
new file mode 100644
index 00000000..3ace3695
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mario
@@ -0,0 +1,17 @@
+language variant
+name Mario
+
+pitch 75 125
+
+formant 0 100 111 95
+formant 1 100 111 60
+formant 2 95 90 55
+formant 3 100 50 65
+formant 4 69 65 65
+formant 5 79 60 75
+formant 6 89 60 75
+formant 7 99 0 100
+formant 8 109 0 100
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Michael b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Michael
new file mode 100644
index 00000000..e155ea85
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Michael
@@ -0,0 +1,17 @@
+language variant
+name Michael
+
+pitch 75 125
+
+formant 0 105 111 95
+formant 1 85 111 60
+formant 2 95 90 55
+formant 3 59 50 65
+formant 4 69 65 65
+formant 5 79 60 75
+formant 6 89 60 75
+formant 7 99 0 100
+formant 8 109 0 100
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mike b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mike
new file mode 100644
index 00000000..93ea4d89
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mike
@@ -0,0 +1,7 @@
+language variant
+name Mike
+voicing 70
+formant 1 96 97 100
+formant 2 96 97 100
+formant 5 95 103 100
+pitch 67 107
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mr serious b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mr serious
new file mode 100644
index 00000000..4623c848
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Mr serious
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Mr_Serious
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 87 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 255 2000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Nguyen b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Nguyen
new file mode 100644
index 00000000..50c72fc6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Nguyen
@@ -0,0 +1,16 @@
+language variant
+name Nguyen
+
+pitch 95 175
+
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 75 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+tone 100 200 600 150 800 100 2400 80 3600 95 5400 100
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Reed b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Reed
new file mode 100644
index 00000000..1ccdf5d4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Reed
@@ -0,0 +1,15 @@
+language variant
+name Reed
+klatt 6
+consonants 85 85
+voicing 130
+breath 45
+
+pitch 85 135
+
+formant 1 72 100 90 90
+formant 2 83 100 75 180
+formant 3 98 100 100 90
+formant 4 98 100 90
+formant 5 100 100 90
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax
new file mode 100644
index 00000000..b269b641
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax
@@ -0,0 +1,16 @@
+language variant
+name RicishayMax
+echo 100 10000
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax2
new file mode 100644
index 00000000..65851342
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax2
@@ -0,0 +1,25 @@
+language variant
+name RicishayMax2
+echo 150 500
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax3
new file mode 100644
index 00000000..f4810027
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/RicishayMax3
@@ -0,0 +1,25 @@
+language variant
+name RicishayMax3
+echo 200 500
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Storm b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Storm
new file mode 100644
index 00000000..6fd53bb4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Storm
@@ -0,0 +1,23 @@
+language variant
+language en-us
+name Storm
+gender male
+formant 0 100 100 100
+formant 1 95 95 95
+formant 2 95 95 95
+formant 3 95 95 95
+formant 4 70 70 70
+formant 5 70 70 70
+formant 6 25 25 25
+formant 7 25 25 25
+formant 8 25 25 25
+breath 0 0 0 0 0 0 0 0
+consonants 100
+echo 0 0
+flutter 0
+intonation 3
+pitch 60 100
+roughness 0
+stressAdd 5 5 3 3 0 0 -15 -15
+tone 500 255 1500 255 2500 255
+voicing 100
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Tweaky b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Tweaky
new file mode 100644
index 00000000..f391d13b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/Tweaky
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Tweaky
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 200 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 255 2000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/UniRobot b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/UniRobot
new file mode 100644
index 00000000..f8892788
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/UniRobot
@@ -0,0 +1,19 @@
+language variant
+name UniversalRobot
+gender male
+klatt 4
+pitch 100 160
+echo 10 10000
+formant 1 75 120 135
+formant 2 90 50 140
+formant 3 70 85 95
+formant 4 150 60 80
+formant 5 100 85 80
+formant 6 112 100 80
+formant 7 110 95 100
+formant 8 105 110 100
+consonants 125 100
+tone 530 250 770 100 215 225
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 120 130 130 90 0 0 120 120
+stressAmp 16 16 24 24 16 16 20 24
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/adam b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/adam
new file mode 100644
index 00000000..a9f3d2ae
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/adam
@@ -0,0 +1,6 @@
+language variant
+name Adam
+klatt 6
+consonants 85 85
+
+formant 1 100 100 130
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/anika b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/anika
new file mode 100644
index 00000000..2413c908
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/anika
@@ -0,0 +1,25 @@
+language variant
+name anika
+gender female
+pitch 200 300
+flutter 6
+stressAmp 20 18 20 20 20 22 22 22
+
+roughness 0
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 120 120 110
+formant 5 120 120 110
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+intonation 10
+voicing 30
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/anikaRobot b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/anikaRobot
new file mode 100644
index 00000000..791d2bbb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/anikaRobot
@@ -0,0 +1,26 @@
+language variant
+name anikaRobot
+gender female
+pitch 200 300
+flutter 1
+stressAmp 20 18 20 20 20 22 22 22
+echo 10 10000
+
+roughness 0
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 120 120 110
+formant 5 120 120 110
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+intonation 10
+voicing 30
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/announcer b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/announcer
new file mode 100644
index 00000000..71e0795d
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/announcer
@@ -0,0 +1,17 @@
+name Half-LifeAnnouncementSystem
+language variant
+pitch 37 83
+klatt 4
+
+formant 1 88 100 100 0
+formant 2 96 100 100 0
+formant 3 98 100 100 0
+formant 4 96 100 100 0
+formant 5 100 100 100 0
+formant 6 100 100 100 0
+formant 7 100 100 100 0
+formant 8 100 100 100 0
+
+voicing 70
+consonants 70 70
+echo 154 26
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/antonio b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/antonio
new file mode 100644
index 00000000..a41b681b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/antonio
@@ -0,0 +1,21 @@
+language variant
+name Antonio
+gender male
+
+pitch 82 128
+roughness 0
+
+formant 0 100 150 90
+formant 1 90 130 90
+formant 2 95 120 80
+formant 3 100 50 80
+formant 4 100 40 80
+formant 5 90 70 80
+formant 6 0 0 0
+formant 7 100 100 100
+formant 8 100 100 100
+voicing 150
+tone 600 255 1200 255 2000 80
+intonation 3
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/aunty b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/aunty
new file mode 100644
index 00000000..7d721eec
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/aunty
@@ -0,0 +1,19 @@
+language variant
+name Auntie
+gender female
+pitch 204 176
+flutter 12
+
+formant 0 88 85 154
+formant 1 115 80 160 -20
+formant 2 130 75 150 -200
+formant 3 123 75 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 0 20 120
+stressAmp 18 16 20 20 20 20 20 20
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/belinda b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/belinda
new file mode 100644
index 00000000..9a9e42b9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/belinda
@@ -0,0 +1,20 @@
+language variant
+name Belinda
+gender female
+
+pitch 200 247
+flutter 3
+
+formant 0 88 85 154
+formant 1 135 58 169 -30
+formant 2 120 70 150 -260
+formant 3 120 39 150
+formant 4 125 57 80
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 3 20 12
+stressAmp 18 16 20 20 10 20 27 20
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/benjamin b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/benjamin
new file mode 100644
index 00000000..c3006438
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/benjamin
@@ -0,0 +1,11 @@
+language variant
+name Benjamin
+klatt 6
+consonants 70 70
+
+formant 1 101 100 130
+formant 2 102 100 100
+formant 3 100 100 100
+formant 4 100 100 100 470
+formant 5 100 100 100 350
+formant 6 100 100 100 100
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/boris b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/boris
new file mode 100644
index 00000000..02e03ced
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/boris
@@ -0,0 +1,15 @@
+language variant
+name Boris
+
+formant 0 47 120 100
+formant 1 100 90 75
+formant 2 104 100 75
+formant 3 57 80 75
+formant 4 104 80 75
+formant 5 107 80 75
+formant 6 68 0 75
+formant 7 105 0 75
+formant 8 105 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/caleb b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/caleb
new file mode 100644
index 00000000..9c8a5b9c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/caleb
@@ -0,0 +1,5 @@
+language variant
+name Caleb
+klatt 6
+breath 100
+voicing 0
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/croak b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/croak
new file mode 100644
index 00000000..ae76a4c4
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/croak
@@ -0,0 +1,11 @@
+language variant
+name croak
+gender male 70
+
+pitch 85 117
+flutter 20
+
+formant 0 100 80 110
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/david b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/david
new file mode 100644
index 00000000..7dc75ddb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/david
@@ -0,0 +1,8 @@
+language variant
+name David
+klatt 6
+pitch 62 89
+
+formant 1 75 100 100
+formant 2 85 100 100
+formant 3 85 100 100
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/ed b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/ed
new file mode 100644
index 00000000..7f293fc6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/ed
@@ -0,0 +1,17 @@
+language variant
+name Ed
+
+pitch 90 145
+
+formant 0 110 120 200 5
+formant 1 102 100 80
+formant 2 101 120 100
+formant 3 100 80 75
+formant 4 150 30 80
+formant 5 95 95 155
+formant 6 167 100 75
+formant 7 100 200 75
+formant 8 60 200 95
+consonants 55 80
+voicing 100
+tone 650 250 1000 130 240 255
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/edward b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/edward
new file mode 100644
index 00000000..303f5051
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/edward
@@ -0,0 +1,10 @@
+language variant
+name Edward
+klatt 5
+voicing 100
+consonants 70 80
+
+formant 1 92 100 130
+formant 2 103 100 80
+formant 3 103 100 70
+formant 4 114 100 60
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/edward2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/edward2
new file mode 100644
index 00000000..abee6aaa
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/edward2
@@ -0,0 +1,10 @@
+language variant
+name Edward2
+klatt 6
+voicing 100
+consonants 70 80
+
+formant 1 92 100 130
+formant 2 103 100 80
+formant 3 103 100 70
+formant 4 114 100 60
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f1 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f1
new file mode 100644
index 00000000..8f03a73a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f1
@@ -0,0 +1,18 @@
+language variant
+name female1
+gender female 70
+
+pitch 140 200
+flutter 8
+roughness 4
+formant 0 115 80 150
+formant 1 120 80 180
+formant 2 100 70 150 150
+formant 3 115 70 150
+formant 4 110 80 150
+formant 5 110 90 150
+formant 6 105 80 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAdd -10 -10 -20 -20 0 0 40 60
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f2
new file mode 100644
index 00000000..4122d96b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f2
@@ -0,0 +1,21 @@
+language variant
+name female2
+gender female
+
+pitch 142 220
+roughness 3
+
+formant 0 105 80 150
+formant 1 110 80 160
+formant 2 110 70 150
+formant 3 110 70 150
+formant 4 115 80 150
+formant 5 115 80 150
+formant 6 110 70 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAdd 0 0 -10 -10 0 0 10 40
+breath 0 2 3 3 3 3 3 2
+echo 140 10
+consonants 125 125
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f3
new file mode 100644
index 00000000..92a15828
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f3
@@ -0,0 +1,22 @@
+language variant
+name female3
+gender female
+
+pitch 140 240
+formant 0 105 80 150
+formant 1 120 75 150 -50
+formant 2 135 70 150 -250
+formant 3 125 80 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 120 70 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAmp 18 18 20 20 20 20 20 20
+//breath 0 2 4 4 4 4 4 4
+breath 0 2 3 3 3 3 3 2
+echo 120 10
+roughness 4
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f4 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f4
new file mode 100644
index 00000000..52c5ac93
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f4
@@ -0,0 +1,18 @@
+language variant
+name female4
+gender female
+
+echo 130 15
+pitch 142 200
+formant 0 120 80 150
+formant 1 115 80 160 -20
+formant 2 130 75 150 -200
+formant 3 123 75 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 0 20 120
+stressAmp 18 16 20 20 20 20 20 20
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f5 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f5
new file mode 100644
index 00000000..7fa4f882
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/f5
@@ -0,0 +1,23 @@
+language variant
+name female5
+gender female
+
+pitch 160 228
+roughness 0
+
+formant 0 105 80 150
+formant 1 110 80 160
+formant 2 110 70 150
+formant 3 110 70 150
+formant 4 115 80 200
+formant 5 115 80 100
+formant 6 110 70 150
+formant 7 110 70 100
+formant 8 110 70 150
+
+stressAdd 0 0 -10 -10 0 0 10 40
+breath 0 4 6 6 6 6 0 10
+echo 140 10
+voicing 75
+consonants 150 150
+breathw 150 150 200 200 400 400 600 600
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/fast b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/fast
new file mode 100644
index 00000000..a2c3da2a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/fast
@@ -0,0 +1,7 @@
+language variant
+name fast_test
+
+// Try decreasing these values to make eSpeak's fastest speed faster.
+// This is currently unstable.
+
+fast_test2 15
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/grandma b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/grandma
new file mode 100644
index 00000000..395ebe22
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/grandma
@@ -0,0 +1,17 @@
+language variant
+
+name grandma
+gender female 90
+pitch 120 230
+
+flutter 20
+formant 0 105 150 150
+formant 1 100 80 100
+formant 2 105 105 105
+formant 3 80 80 80
+formant 4 60 60 60
+formant 5 90 90 90
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 20 20 20
+voicing 50
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/grandpa b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/grandpa
new file mode 100644
index 00000000..41a870c3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/grandpa
@@ -0,0 +1,14 @@
+language variant
+name grandpa
+pitch 80 120
+flutter 20
+formant 0 100 100 100
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 100 100 100
+formant 4 100 100 100
+formant 5 100 100 100
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 10 10 10
+intonation 1
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/gustave b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/gustave
new file mode 100644
index 00000000..ce1d71b9
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/gustave
@@ -0,0 +1,17 @@
+language variant
+name Gustave
+
+pitch 80 123
+
+formant 0 85 141 135
+formant 1 77 131 45
+formant 2 92 70 55
+formant 3 59 50 65
+formant 4 69 65 65
+formant 5 79 60 75
+formant 6 89 60 75
+formant 7 99 0 100
+formant 8 109 0 100
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/ian b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/ian
new file mode 100644
index 00000000..3e3d4090
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/ian
@@ -0,0 +1,51 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Ian
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 20 120 50
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 80 80 80
+formant 2 80 80 80
+formant 3 80 80 80
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 50 50 50
+formant 5 50 50 50
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 200 50 200
+formant 8 200 50 200
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 2
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice.
+# Setting it equal to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 69 96
+
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+##The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 1000 127 1200 127 2000 127
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven
new file mode 100644
index 00000000..3b8c1202
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven
@@ -0,0 +1,14 @@
+language variant
+name Iven
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 530
+tone 600 255 1200 255 2000 160
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven2
new file mode 100644
index 00000000..e61fd735
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven2
@@ -0,0 +1,15 @@
+language variant
+name Iven2
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 220
+consonants 28 42
+tone 600 255 1200 255 2000 150
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven3
new file mode 100644
index 00000000..a58e7459
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven3
@@ -0,0 +1,14 @@
+language variant
+name Iven3
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 165
+tone 600 255 1200 255 2000 160
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven4 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven4
new file mode 100644
index 00000000..43084c15
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/iven4
@@ -0,0 +1,14 @@
+language variant
+name Iven4
+pitch 74 118
+formant 0 52 133 88
+formant 1 87 82 76
+formant 2 94 56 42
+formant 3 93 52 130
+formant 4 110 76 65
+formant 5 102 45 20
+formant 6 40 50 50
+formant 7 60 50 60
+formant 8 100 50 40
+voicing 165
+tone 600 170 1200 100 2000 40
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/john b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/john
new file mode 100644
index 00000000..dce9446a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/john
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name John
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 100 100 100
+formant 3 100 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice.
+# Setting it equal to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+##The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 255 2000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/kaukovalta b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/kaukovalta
new file mode 100644
index 00000000..82cda331
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/kaukovalta
@@ -0,0 +1,16 @@
+language variant
+name Kaukovalta
+formant 0 80 80 100
+formant 1 40 80 100
+formant 2 70 100 130
+formant 3 80 100 60
+formant 4 70 90 100
+formant 5 70 90 100
+formant 6 70 100 90
+ formant 7 100 90 110
+formant 8 100 95 100
+pitch 70 120
+tone 100 130 800 130 2000 130
+consonants 70 70
+roughness 4
+
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt
new file mode 100644
index 00000000..b739a86e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt
@@ -0,0 +1,4 @@
+language variant
+name klatt
+klatt 1
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt2
new file mode 100644
index 00000000..01477be5
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt2
@@ -0,0 +1,4 @@
+language variant
+name klatt2
+klatt 2
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt3
new file mode 100644
index 00000000..b1a874be
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt3
@@ -0,0 +1,4 @@
+language variant
+name klatt3
+klatt 3
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt4 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt4
new file mode 100644
index 00000000..65278087
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt4
@@ -0,0 +1,4 @@
+language variant
+name klatt4
+klatt 4
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt5 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt5
new file mode 100644
index 00000000..9d831fb2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt5
@@ -0,0 +1,4 @@
+language variant
+name klatt5
+klatt 5
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt6 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt6
new file mode 100644
index 00000000..7656ab35
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/klatt6
@@ -0,0 +1,4 @@
+language variant
+name klatt6
+klatt 6
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/linda b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/linda
new file mode 100644
index 00000000..a56a8b05
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/linda
@@ -0,0 +1,20 @@
+language variant
+name Linda
+gender female
+
+#echo 130 15
+pitch 200 247
+flutter 3
+formant 0 88 85 154
+formant 1 135 58 169 -30
+formant 2 131 75 152 -260
+formant 3 123 75 150
+formant 4 125 80 150
+formant 5 125 80 150
+formant 6 110 80 150
+formant 7 110 75 150
+formant 8 110 75 150
+
+stressAdd -20 -20 -20 -20 0 3 20 120
+stressAmp 18 16 20 20 20 20 27 20
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m1 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m1
new file mode 100644
index 00000000..4cc9a00b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m1
@@ -0,0 +1,20 @@
+language variant
+name male1
+gender male 70
+
+pitch 75 109
+flutter 5
+roughness 4
+consonants 80 100
+
+formant 0 98 100 100
+formant 1 97 100 100
+formant 2 97 95 100
+formant 3 97 95 100
+formant 4 97 85 100
+formant 5 105 80 100
+formant 6 95 80 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+//stressAdd -10 -10 -20 -20 0 0 40 70
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m2
new file mode 100644
index 00000000..c234f468
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m2
@@ -0,0 +1,15 @@
+language variant
+name male2
+gender male
+
+pitch 88 115
+echo 130 15
+formant 0 100 80 120
+formant 1 90 85 120
+formant 2 110 85 120
+formant 3 105 90 120
+formant 4 100 90 120
+formant 5 100 90 120
+formant 6 100 90 120
+formant 7 100 90 120
+formant 8 100 90 120
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m3
new file mode 100644
index 00000000..00479dc3
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m3
@@ -0,0 +1,17 @@
+language variant
+name male3
+gender male
+
+pitch 80 122
+formant 0 100 100 100
+formant 1 96 97 100
+formant 2 96 97 100
+formant 3 96 103 100
+formant 4 95 103 100
+formant 5 95 103 100
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+consonants 100
+stressAdd 10 10 0 0 0 0 -30 -30
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m4 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m4
new file mode 100644
index 00000000..7199341c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m4
@@ -0,0 +1,17 @@
+language variant
+name male4
+gender male
+
+pitch 70 110
+
+formant 0 103 100 100
+formant 1 103 100 100
+formant 2 103 100 100
+formant 3 103 100 100
+formant 4 106 100 100
+formant 5 106 100 100
+formant 6 106 100 100
+formant 7 103 100 100
+formant 8 103 100 100
+
+stressAdd -10 -10 -30 -30 0 0 60 90
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m5 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m5
new file mode 100644
index 00000000..d2586560
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m5
@@ -0,0 +1,15 @@
+language variant
+name male5
+gender male
+
+formant 0 100 85 130
+formant 1 90 85 130 40
+formant 2 80 85 130 310
+formant 3 105 85 130
+formant 4 105 85 130
+formant 5 105 85 130
+formant 6 105 85 150
+formant 7 105 85 150
+formant 8 105 85 150
+
+intonation 2
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m6 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m6
new file mode 100644
index 00000000..bd336a98
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m6
@@ -0,0 +1,13 @@
+language variant
+name male6
+gender male
+
+pitch 82 117
+
+formant 0 100 90 120
+formant 1 100 90 140
+formant 2 100 70 140
+formant 3 100 75 140
+formant 4 100 80 140
+formant 5 100 80 140
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m7 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m7
new file mode 100644
index 00000000..11b49ed2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m7
@@ -0,0 +1,17 @@
+language variant
+name male7
+gender male
+
+pitch 75 125
+
+formant 0 100 125 100
+formant 1 100 90 80
+formant 2 100 70 90
+formant 3 100 60 90
+formant 4 100 60 90
+formant 5 75 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+voicing 155
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m8 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m8
new file mode 100644
index 00000000..c03ca3eb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/m8
@@ -0,0 +1,16 @@
+language variant
+name male8
+gender male 50
+
+pitch 65 102
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/marcelo b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/marcelo
new file mode 100644
index 00000000..8df9651b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/marcelo
@@ -0,0 +1,17 @@
+language variant
+name Marcelo
+
+pitch 65 115
+
+formant 0 65 161 35
+formant 1 75 131 65
+formant 2 90 60 40
+formant 3 59 50 55
+formant 4 69 65 35
+formant 5 69 60 25
+formant 6 59 60 35
+formant 7 149 0 10
+formant 8 199 0 90
+voicing 135
+consonants 115 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/max b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/max
new file mode 100644
index 00000000..e3c2889b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/max
@@ -0,0 +1,15 @@
+language variant
+name Max
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/michel b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/michel
new file mode 100644
index 00000000..b9b5ecbd
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/michel
@@ -0,0 +1,22 @@
+language variant
+name Michel
+gender male 25
+pitch 82 122
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 400 160 1500 100 3000 70 4500 40
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/miguel b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/miguel
new file mode 100644
index 00000000..53d71e78
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/miguel
@@ -0,0 +1,22 @@
+language variant
+name Miguel
+gender male 25
+pitch 80 130
+echo 0 0
+flutter 0
+roughness 0
+stressAmp 20 18 20 20 20 22 22 22
+
+
+formant 0 105 200 140
+formant 1 95 150 120
+formant 2 100 120 140
+formant 3 95 95 140
+formant 4 30 30 30 -100
+formant 5 90 90 90
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 35
+consonants 60 40
+tone 300 240 400 160 1500 100 3000 70
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/mike2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/mike2
new file mode 100644
index 00000000..2715f4d0
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/mike2
@@ -0,0 +1,12 @@
+language variant
+name Mike2
+klatt 6
+voicing 170
+pitch 67 107
+formant 1 95 100 100
+formant 2 95 100 100
+formant 3 105 100 100
+formant 4 115 100 100
+formant 5 115 100 100
+
+consonants 70 150
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/norbert b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/norbert
new file mode 100644
index 00000000..a210789a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/norbert
@@ -0,0 +1,50 @@
+##Please note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name norbert
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 100 100 100
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 100 100 100
+formant 2 75 50 100
+formant 3 100 100 100
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 100 100 100
+formant 5 100 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 1
+
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 118
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+##0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1000 100 5000 255
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+##However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/pablo b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/pablo
new file mode 100644
index 00000000..031e5fe7
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/pablo
@@ -0,0 +1,52 @@
+##Pleas note the 2 number signs, or pound signs in this file are for comments to help you to understand what the settings are and how to set them.
+## Language sets the language of your voice. This setting is required for every voice that you make.
+##The next line is a setting you can change. However if you don't know the language codes it may be best to leave the setting as it is.
+language variant
+
+## The name setting is the name that will show up in the voice settings in the variant combo box.
+##The next line is a setting you can change
+name Pablo
+
+##The formant settings
+## Formant 0 is used to give a low frequency component to the sounds.
+## The three numbers are frequency, strength, and Width, in that order. Please note, the numbers are seperated by a space.
+##The next line is a setting you can change
+formant 0 90 100 90
+
+# Formants 1,2, and 3 are the standard three formants which define vowels.
+##The next 3 lines are settings you can change
+formant 1 95 100 80
+formant 2 97 100 80
+formant 3 98 90 80
+
+# Formants 4,5 are higher than F3. They affect the quality of the voice.
+##The next 2 lines are settings that you can change.
+formant 4 110 100 100
+formant 5 110 100 100
+
+## Formants 6, 7, and 8 are weak, high frequency, additions to vowels to give a clearer sound.
+##The next 3 lines are settings that you can change.
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+##Intonation affects the rise and fall of the voice
+## The settings are 1 default, 2 less intonation, 3 less intonation and commas do not raise the pitch, 4 the pitch rises at the end of a sentence rather than falling.
+##The next line is a setting you can change.
+intonation 3
+echo 30 30
+# Setting the pitch range. The first number gives a base pitch to the voice (value in Hertz). The second number controls the range of pitches used by the voice. Setting it equal
+# to the first number will give a monotone sounding voice. The default values are 82 and 118.
+pitch 82 130
+## The tone setting. The first number on the setting line, 600, is the frequency setting for the amount of bass in the voice.
+## The second number on the tone line is the volume of the bass frequency. You can set it from 0 to 255, 0 being the least amount, 255 being the most.
+##The third number on the tone line, 1200, is the mid range frequency. The fourth number on the line is the setting to change the volume of the mid range frequency.
+## 0 being the least amount and 255 being the maximum.
+## The fifth number on the tone line, 2000, is the treble frequency. The sixth number is the volume of the treble frequency. 0 is the minimum and 255 is the maximum.
+## You will notice that all 3 frequencies are set to 255.
+##The next line is a setting that you can change.
+tone 600 255 1200 200 2000 255
+
+##This file does not include all of the settings that can be used to modify an E Speak voice. It is intended to get you familiar with what the settings do.
+#However, you can go to http://espeak.sourceforge.net/voices.html and read further information about other settings that can be added and changed. I hope this helps, and Have fun.
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/paul b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/paul
new file mode 100644
index 00000000..9015cd37
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/paul
@@ -0,0 +1,17 @@
+language variant
+name Paul
+
+pitch 70 100
+
+formant 0 90 120 100
+formant 1 103 100 75
+formant 2 98 100 75
+formant 3 100 80 75
+formant 4 102 30 100
+formant 5 100 80 100
+formant 6 100 80 75
+formant 7 100 0 75
+formant 8 100 60 75
+consonants 90 60
+voicing 230
+tone 420 255 1300 130 4000 100
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/pedro b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/pedro
new file mode 100644
index 00000000..5cc34db2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/pedro
@@ -0,0 +1,23 @@
+language variant
+
+name Pedro
+
+formant 0 100 150 100
+
+formant 1 95 100 80
+formant 2 95 100 80
+formant 3 100 100 90
+
+formant 4 100 100 100
+formant 5 100 100 100
+
+formant 6 100 100 100
+formant 7 100 100 100
+formant 8 100 100 100
+
+intonation 3
+
+pitch 82 118
+tone 600 255 1200 255 2000 255
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/quincy b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/quincy
new file mode 100644
index 00000000..dd75dadb
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/quincy
@@ -0,0 +1,20 @@
+language variant
+name Quincy
+
+pitch 67 100
+
+formant 0 85 108 106 3
+formant 1 97 110 56
+formant 2 96 80 60
+formant 3 101 50 50
+formant 4 110 33 55
+formant 5 110 22 65
+formant 6 77 60 60 65
+formant 7 66 0 100
+formant 8 100 0 100
+voicing 99
+consonants 66 90
+
+roughness 0
+tone 600 170 1200 100 2000 70
+stressAmp 16 16 24 20 20 16 28 24
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/rob b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/rob
new file mode 100644
index 00000000..d7c7ae4e
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/rob
@@ -0,0 +1,17 @@
+language variant
+name Rob
+
+pitch 50 130
+formant 0 100 100 100
+formant 1 95 100 60
+formant 2 97 90 50
+formant 3 101 70 50
+formant 4 110 65 55
+formant 5 110 70 65
+formant 6 110 70 65
+formant 7 0 0 0
+formant 8 0 0 0
+
+voicing 115
+consonants 110 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robert b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robert
new file mode 100644
index 00000000..46f50758
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robert
@@ -0,0 +1,17 @@
+language variant
+name Robert
+
+pitch 65 115
+
+formant 0 85 108 100
+formant 1 95 110 60
+formant 2 97 90 50
+formant 3 101 50 50
+formant 4 110 65 55
+formant 5 110 60 65
+formant 6 110 60 65
+formant 7 100 0 100
+formant 8 100 0 100
+voicing 115
+consonants 110 120
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft
new file mode 100644
index 00000000..0668d9ab
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft
@@ -0,0 +1,26 @@
+language variant
+name Robosoft
+echo 30 1000
+klatt 5
+
+pitch 60 90
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 50
+
+intonation 0
+voicing 80
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft2
new file mode 100644
index 00000000..1695414a
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft2
@@ -0,0 +1,26 @@
+language variant
+name Robosoft2
+echo 10 600
+klatt 4
+
+pitch 70 100
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 75
+
+intonation -25
+voicing 80
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft3
new file mode 100644
index 00000000..15bbe347
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft3
@@ -0,0 +1,26 @@
+language variant
+name Robosoft3
+echo 10 10000
+klatt 4
+
+pitch 75 115
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft4 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft4
new file mode 100644
index 00000000..5161a4fe
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft4
@@ -0,0 +1,25 @@
+language variant
+name Robosoft4
+echo 10 10000
+
+pitch 75 115
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 5
+
+intonation 10
+voicing 150
+consonants 110 120
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft5 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft5
new file mode 100644
index 00000000..2420f89c
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft5
@@ -0,0 +1,25 @@
+language variant
+name Robosoft5
+echo 10 10000
+
+pitch 75 115
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+roughness 0
+
+intonation 10
+voicing 150
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+stressAmp 16 16 24 24 16 16 20 24
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft6 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft6
new file mode 100644
index 00000000..d3be1588
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft6
@@ -0,0 +1,15 @@
+language variant
+name Robosoft6
+echo 40 10000
+pitch 150 150
+formant 0 100 125 100
+formant 1 96 90 80
+formant 2 97 70 90
+formant 3 97 60 90
+formant 4 97 60 90
+formant 5 100 50 90
+formant 6 90 50 100
+formant 7 100 50 100
+formant 8 100 50 100
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft7 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft7
new file mode 100644
index 00000000..25bf759b
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft7
@@ -0,0 +1,25 @@
+language variant
+name Robosoft7
+echo 10 10000
+
+pitch 75 115
+
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+roughness 0
+
+intonation 10
+voicing 150
+consonants 60 40
+stressLength 0 1 2 3 4 5 6 7
+stressAdd 130 140 140 100 0 0 130 160
+
+tone 100 255 600 70 1200 22 2000 66 3000 12
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft8 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft8
new file mode 100644
index 00000000..5c84bd5f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/robosoft8
@@ -0,0 +1,16 @@
+language variant
+name Robosoft8
+echo 40 10000
+pitch 150 150
+formant 0 90 120 100
+formant 1 100 100 75
+formant 2 100 100 75
+formant 3 100 80 75
+formant 4 100 80 75
+formant 5 100 80 75
+formant 6 100 0 75
+formant 7 100 0 75
+formant 8 100 0 75
+
+
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/sandro b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/sandro
new file mode 100644
index 00000000..6dcfe02f
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/sandro
@@ -0,0 +1,25 @@
+// This file is UTF-8 encoded
+// Variant sandro (ver.25-3) for eSpeak-ng Copyright (C)2019 by Lolo vmanolo301@gmail.com
+
+language variant
+name sandro
+gender male
+
+formant 0 95 146 100
+formant 1 98 90 100
+formant 2 103 98 100
+formant 3 100 90 100
+formant 4 100 101 100
+formant 5 110 120 100 2123
+formant 6 100 100 100 1200
+formant 7 32 125 80 600
+formant 8 34 95 30 49
+
+voicing 165
+consonants 194 255
+pitch 78 115
+roughness 3
+breath 20 5 2 10 5 0 27 100
+breathw 255 255 60 180 160 255 255 255
+
+tone 500 210 470 70 160 155 2985 32
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/shelby b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/shelby
new file mode 100644
index 00000000..21292d41
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/shelby
@@ -0,0 +1,18 @@
+language variant
+name shelby
+flutter 0
+roughness 0
+
+formant 0 100 160 190
+formant 1 90 90 90
+formant 2 140 140 140
+formant 3 130 150 130
+formant 4 110 110 110
+formant 5 120 120 110
+formant 6 10 10 10
+formant 7 10 10 10
+formant 8 10 10 10
+
+pitch 100 210
+voicing 40
+consonants 90 70
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph
new file mode 100644
index 00000000..e60b0dc6
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph
@@ -0,0 +1,21 @@
+language variant
+name Steph
+gender female
+
+pitch 166 200
+flutter 1
+roughness 0
+tone 100 255 600 70 1200 22 2000 66 3000 12
+
+formant 0 99 80 150
+formant 1 120 60 160
+formant 2 99 70 110 150
+formant 3 116 77 150
+formant 4 9 59 110
+formant 5 100 50 2
+formant 6 104 80 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAmp 16 16 24 24 16 16 20 24
+consonants 55 90
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph2 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph2
new file mode 100644
index 00000000..6ac109be
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph2
@@ -0,0 +1,21 @@
+language variant
+name Steph2
+gender female
+
+pitch 166 200
+flutter 1
+roughness 0
+tone 100 255 600 70 1200 22 2000 66 3000 12
+
+formant 0 99 100 150
+formant 1 120 80 160
+formant 2 99 90 110 150
+formant 3 116 97 150
+formant 4 9 73 116
+formant 5 100 70 2
+formant 6 104 100 150
+formant 7 110 90 150
+formant 8 110 90 150
+
+stressAmp 16 16 24 24 16 16 20 24
+consonants 55 90
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph3 b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph3
new file mode 100644
index 00000000..a9257558
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/steph3
@@ -0,0 +1,22 @@
+language variant
+name Steph3
+gender female
+
+pitch 166 200
+flutter 1
+roughness 0
+voicing 200
+tone 100 255 600 70 1200 22 2000 66 3000 12
+
+formant 0 99 80 150
+formant 1 120 60 160
+formant 2 99 70 110 150
+formant 3 116 77 150
+formant 4 9 59 110
+formant 5 100 50 2
+formant 6 104 80 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAmp 16 16 24 24 16 16 20 24
+consonants 70 90
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/travis b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/travis
new file mode 100644
index 00000000..56c22f94
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/travis
@@ -0,0 +1,23 @@
+language variant
+name travis
+gender male 30
+
+pitch 75 120
+
+formant 0 90 90 90 90
+formant 1 50 100 80 95
+formant 2 90 60 90 100
+formant 3 80 80 90 100
+formant 4 50 90 100 100
+formant 5 100 95 100 55
+formant 6 80 50 100 85
+formant 7 60 60 60 120
+formant 8 80 80 140 100
+
+tone 600 100 1000 200 1500 50
+flutter 1
+
+roughness 3
+
+voicing 200
+consonants 120 190
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/victor b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/victor
new file mode 100644
index 00000000..fa275e89
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/victor
@@ -0,0 +1,16 @@
+language variant
+name victor
+gender male 25
+
+formant 0 100 100 100
+formant 1 95 95 95
+formant 2 90 90 90
+formant 3 90 90 90
+formant 4 40 40 40
+formant 5 80 80 80
+formant 6 20 20 20
+formant 7 20 20 20
+formant 8 20 20 20
+pitch 80 110
+voicing 60
+breath 2 4
\ No newline at end of file
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/whisper b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/whisper
new file mode 100644
index 00000000..4f8f5e88
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/whisper
@@ -0,0 +1,13 @@
+language variant
+name whisper
+gender male
+
+pitch 82 117
+flutter 20
+
+formant 0 100 0 100
+formant 1 100 80 100
+
+voicing 17
+breath 75 75 50 40 15 10
+breathw 150 150 200 200 400 400
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/whisperf b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/whisperf
new file mode 100644
index 00000000..f239e8a2
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/whisperf
@@ -0,0 +1,24 @@
+language variant
+name female_whisper
+gender female
+
+pitch 160 220
+roughness 3
+
+formant 0 105 0 150
+formant 1 110 40 160
+formant 2 110 70 150
+formant 3 110 70 150
+formant 4 115 80 150
+formant 5 115 80 150
+formant 6 110 70 150
+formant 7 110 70 150
+formant 8 110 70 150
+
+stressAdd 0 0 -10 -10 0 0 10 40
+
+// whisper
+voicing 20
+breath 75 75 50 40 15 10
+breathw 150 150 200 200 400 400
+
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/zac b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/zac
new file mode 100644
index 00000000..ca415a66
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/voices/!v/zac
@@ -0,0 +1,15 @@
+language variant
+name Zac
+flutter 5
+
+pitch 240 390
+formant 0 145 100 145
+formant 1 145 100 145
+formant 2 145 100 145
+formant 3 145 100 145
+formant 4 145 100 145
+formant 5 145 120 145
+formant 6 145 120 145
+formant 7 145 120 145
+formant 8 145 120 145
+voicing 80
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/yue_dict b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/yue_dict
new file mode 100644
index 00000000..ed9cf076
Binary files /dev/null and b/app/src/main/assets/vits-piper-en_US-lessac-medium/espeak-ng-data/yue_dict differ
diff --git a/app/src/main/assets/vits-piper-en_US-lessac-medium/tokens.txt b/app/src/main/assets/vits-piper-en_US-lessac-medium/tokens.txt
new file mode 100644
index 00000000..82449830
--- /dev/null
+++ b/app/src/main/assets/vits-piper-en_US-lessac-medium/tokens.txt
@@ -0,0 +1,154 @@
+_ 0
+^ 1
+$ 2
+ 3
+! 4
+' 5
+( 6
+) 7
+, 8
+- 9
+. 10
+: 11
+; 12
+? 13
+a 14
+b 15
+c 16
+d 17
+e 18
+f 19
+h 20
+i 21
+j 22
+k 23
+l 24
+m 25
+n 26
+o 27
+p 28
+q 29
+r 30
+s 31
+t 32
+u 33
+v 34
+w 35
+x 36
+y 37
+z 38
+æ 39
+ç 40
+ð 41
+ø 42
+ħ 43
+ŋ 44
+œ 45
+ǀ 46
+ǁ 47
+ǂ 48
+ǃ 49
+ɐ 50
+ɑ 51
+ɒ 52
+ɓ 53
+ɔ 54
+ɕ 55
+ɖ 56
+ɗ 57
+ɘ 58
+ə 59
+ɚ 60
+ɛ 61
+ɜ 62
+ɞ 63
+ɟ 64
+ɠ 65
+ɡ 66
+ɢ 67
+ɣ 68
+ɤ 69
+ɥ 70
+ɦ 71
+ɧ 72
+ɨ 73
+ɪ 74
+ɫ 75
+ɬ 76
+ɭ 77
+ɮ 78
+ɯ 79
+ɰ 80
+ɱ 81
+ɲ 82
+ɳ 83
+ɴ 84
+ɵ 85
+ɶ 86
+ɸ 87
+ɹ 88
+ɺ 89
+ɻ 90
+ɽ 91
+ɾ 92
+ʀ 93
+ʁ 94
+ʂ 95
+ʃ 96
+ʄ 97
+ʈ 98
+ʉ 99
+ʊ 100
+ʋ 101
+ʌ 102
+ʍ 103
+ʎ 104
+ʏ 105
+ʐ 106
+ʑ 107
+ʒ 108
+ʔ 109
+ʕ 110
+ʘ 111
+ʙ 112
+ʛ 113
+ʜ 114
+ʝ 115
+ʟ 116
+ʡ 117
+ʢ 118
+ʲ 119
+ˈ 120
+ˌ 121
+ː 122
+ˑ 123
+˞ 124
+β 125
+θ 126
+χ 127
+ᵻ 128
+ⱱ 129
+0 130
+1 131
+2 132
+3 133
+4 134
+5 135
+6 136
+7 137
+8 138
+9 139
+̧ 140
+̃ 141
+̪ 142
+̯ 143
+̩ 144
+ʰ 145
+ˤ 146
+ε 147
+↓ 148
+# 149
+" 150
+↑ 151
+̺ 152
+̻ 153
diff --git a/app/src/main/java/com/k2fsa/sherpa/onnx/Tts.kt b/app/src/main/java/com/k2fsa/sherpa/onnx/Tts.kt
new file mode 100644
index 00000000..1fca1b13
--- /dev/null
+++ b/app/src/main/java/com/k2fsa/sherpa/onnx/Tts.kt
@@ -0,0 +1,346 @@
+// Copyright (c) 2023 Xiaomi Corporation
+package com.k2fsa.sherpa.onnx
+
+import android.content.res.AssetManager
+
+data class OfflineTtsVitsModelConfig(
+ var model: String = "",
+ var lexicon: String = "",
+ var tokens: String = "",
+ var dataDir: String = "",
+ var dictDir: String = "", // unused
+ var noiseScale: Float = 0.667f,
+ var noiseScaleW: Float = 0.8f,
+ var lengthScale: Float = 1.0f,
+)
+
+data class OfflineTtsMatchaModelConfig(
+ var acousticModel: String = "",
+ var vocoder: String = "",
+ var lexicon: String = "",
+ var tokens: String = "",
+ var dataDir: String = "",
+ var dictDir: String = "", // unused
+ var noiseScale: Float = 1.0f,
+ var lengthScale: Float = 1.0f,
+)
+
+data class OfflineTtsKokoroModelConfig(
+ var model: String = "",
+ var voices: String = "",
+ var tokens: String = "",
+ var dataDir: String = "",
+ var lexicon: String = "",
+ var lang: String = "",
+ var dictDir: String = "", // unused
+ var lengthScale: Float = 1.0f,
+)
+
+data class OfflineTtsKittenModelConfig(
+ var model: String = "",
+ var voices: String = "",
+ var tokens: String = "",
+ var dataDir: String = "",
+ var lengthScale: Float = 1.0f,
+)
+
+/**
+ * Configuration for Pocket TTS models.
+ *
+ * See https://k2-fsa.github.io/sherpa/onnx/tts/pocket/index.html for details.
+ *
+ * @property lmFlow Path to the LM flow model (.onnx)
+ * @property lmMain Path to the LM main model (.onnx)
+ * @property encoder Path to the encoder model (.onnx)
+ * @property decoder Path to the decoder model (.onnx)
+ * @property textConditioner Path to the text conditioner model (.onnx)
+ * @property vocabJson Path to vocabulary JSON file
+ * @property tokenScoresJson Path to token scores JSON file
+ */
+data class OfflineTtsPocketModelConfig(
+ var lmFlow: String = "",
+ var lmMain: String = "",
+ var encoder: String = "",
+ var decoder: String = "",
+ var textConditioner: String = "",
+ var vocabJson: String = "",
+ var tokenScoresJson: String = "",
+ var voiceEmbeddingCacheCapacity: Int = 50,
+)
+
+data class OfflineTtsModelConfig(
+ var vits: OfflineTtsVitsModelConfig = OfflineTtsVitsModelConfig(),
+ var matcha: OfflineTtsMatchaModelConfig = OfflineTtsMatchaModelConfig(),
+ var kokoro: OfflineTtsKokoroModelConfig = OfflineTtsKokoroModelConfig(),
+ var kitten: OfflineTtsKittenModelConfig = OfflineTtsKittenModelConfig(),
+ val pocket: OfflineTtsPocketModelConfig = OfflineTtsPocketModelConfig(),
+
+ var numThreads: Int = 1,
+ var debug: Boolean = false,
+ var provider: String = "cpu",
+)
+
+data class OfflineTtsConfig(
+ var model: OfflineTtsModelConfig = OfflineTtsModelConfig(),
+ var ruleFsts: String = "",
+ var ruleFars: String = "",
+ var maxNumSentences: Int = 1,
+ var silenceScale: Float = 0.2f,
+)
+
+class GeneratedAudio(
+ val samples: FloatArray,
+ val sampleRate: Int,
+) {
+ fun save(filename: String) =
+ saveImpl(filename = filename, samples = samples, sampleRate = sampleRate)
+
+ private external fun saveImpl(
+ filename: String,
+ samples: FloatArray,
+ sampleRate: Int
+ ): Boolean
+}
+
+data class GenerationConfig(
+ var silenceScale: Float = 0.2f,
+ var speed: Float = 1.0f,
+ var sid: Int = 0,
+ var referenceAudio: FloatArray? = null,
+ var referenceSampleRate: Int = 0,
+ var referenceText: String? = null,
+ var numSteps: Int = 5,
+ var extra: Map? = null
+)
+
+class OfflineTts(
+ assetManager: AssetManager? = null,
+ var config: OfflineTtsConfig,
+) {
+ private var ptr: Long
+
+ init {
+ ptr = if (assetManager != null) {
+ newFromAsset(assetManager, config)
+ } else {
+ newFromFile(config)
+ }
+ }
+
+ fun sampleRate() = getSampleRate(ptr)
+
+ fun numSpeakers() = getNumSpeakers(ptr)
+
+ fun generate(
+ text: String,
+ sid: Int = 0,
+ speed: Float = 1.0f
+ ): GeneratedAudio {
+ return generateImpl(ptr, text = text, sid = sid, speed = speed)
+ }
+
+ fun generateWithCallback(
+ text: String,
+ sid: Int = 0,
+ speed: Float = 1.0f,
+ callback: (samples: FloatArray) -> Int
+ ): GeneratedAudio {
+ return generateWithCallbackImpl(
+ ptr,
+ text = text,
+ sid = sid,
+ speed = speed,
+ callback = callback
+ )
+ }
+
+ fun generateWithConfig(
+ text: String,
+ config: GenerationConfig
+ ): GeneratedAudio {
+ return generateWithConfigImpl(ptr, text, config, null)
+ }
+
+ fun generateWithConfigAndCallback(
+ text: String,
+ config: GenerationConfig,
+ callback: (samples: FloatArray) -> Int
+ ): GeneratedAudio {
+ return generateWithConfigImpl(ptr, text, config, callback)
+ }
+
+ fun allocate(assetManager: AssetManager? = null) {
+ if (ptr == 0L) {
+ ptr = if (assetManager != null) {
+ newFromAsset(assetManager, config)
+ } else {
+ newFromFile(config)
+ }
+ }
+ }
+
+ fun free() {
+ if (ptr != 0L) {
+ delete(ptr)
+ ptr = 0
+ }
+ }
+
+ fun release() = free()
+
+ private external fun newFromAsset(
+ assetManager: AssetManager,
+ config: OfflineTtsConfig,
+ ): Long
+
+ private external fun newFromFile(
+ config: OfflineTtsConfig,
+ ): Long
+
+ private external fun delete(ptr: Long)
+ private external fun getSampleRate(ptr: Long): Int
+ private external fun getNumSpeakers(ptr: Long): Int
+
+ private external fun generateImpl(
+ ptr: Long,
+ text: String,
+ sid: Int = 0,
+ speed: Float = 1.0f
+ ): GeneratedAudio
+
+ private external fun generateWithCallbackImpl(
+ ptr: Long,
+ text: String,
+ sid: Int = 0,
+ speed: Float = 1.0f,
+ callback: (samples: FloatArray) -> Int
+ ): GeneratedAudio
+
+ private external fun generateWithConfigImpl(
+ ptr: Long,
+ text: String,
+ config: GenerationConfig,
+ callback: ((samples: FloatArray) -> Int)?
+ ): GeneratedAudio
+
+ companion object {
+ init {
+ System.loadLibrary("sherpa-onnx-jni")
+ }
+ }
+}
+
+// please refer to
+// https://k2-fsa.github.io/sherpa/onnx/tts/pretrained_models/index.html
+// to download models
+fun getOfflineTtsConfig(
+ modelDir: String,
+ modelName: String, // for VITS
+ acousticModelName: String, // for Matcha
+ vocoder: String, // for Matcha
+ voices: String, // for Kokoro or kitten
+ lexicon: String,
+ dataDir: String,
+ dictDir: String, // unused
+ ruleFsts: String,
+ ruleFars: String,
+ numThreads: Int? = null,
+ isKitten: Boolean = false
+): OfflineTtsConfig {
+ // For Matcha TTS, please set
+ // acousticModelName, vocoder
+
+ // For Kokoro TTS, please set
+ // modelName, voices
+
+ // For Kitten TTS, please set
+ // modelName, voices, isKitten
+
+ // For VITS, please set
+ // modelName
+
+ val numberOfThreads = if (numThreads != null) {
+ numThreads
+ } else if (voices.isNotEmpty()) {
+ // for Kokoro and Kitten TTS models, we use more threads
+ 4
+ } else {
+ 2
+ }
+
+ if (modelName.isEmpty() && acousticModelName.isEmpty()) {
+ throw IllegalArgumentException("Please specify a TTS model")
+ }
+
+ if (modelName.isNotEmpty() && acousticModelName.isNotEmpty()) {
+ throw IllegalArgumentException("Please specify either a VITS or a Matcha model, but not both")
+ }
+
+ if (acousticModelName.isNotEmpty() && vocoder.isEmpty()) {
+ throw IllegalArgumentException("Please provide vocoder for Matcha TTS")
+ }
+
+ val vits = if (modelName.isNotEmpty() && voices.isEmpty()) {
+ OfflineTtsVitsModelConfig(
+ model = "$modelDir/$modelName",
+ lexicon = "$modelDir/$lexicon",
+ tokens = "$modelDir/tokens.txt",
+ dataDir = dataDir,
+ )
+ } else {
+ OfflineTtsVitsModelConfig()
+ }
+
+ val matcha = if (acousticModelName.isNotEmpty()) {
+ OfflineTtsMatchaModelConfig(
+ acousticModel = "$modelDir/$acousticModelName",
+ vocoder = vocoder,
+ lexicon = "$modelDir/$lexicon",
+ tokens = "$modelDir/tokens.txt",
+ dataDir = dataDir,
+ )
+ } else {
+ OfflineTtsMatchaModelConfig()
+ }
+
+ val kokoro = if (voices.isNotEmpty() && !isKitten) {
+ OfflineTtsKokoroModelConfig(
+ model = "$modelDir/$modelName",
+ voices = "$modelDir/$voices",
+ tokens = "$modelDir/tokens.txt",
+ dataDir = dataDir,
+ lexicon = when {
+ lexicon == "" -> lexicon
+ "," in lexicon -> lexicon
+ else -> "$modelDir/$lexicon"
+ },
+ )
+ } else {
+ OfflineTtsKokoroModelConfig()
+ }
+
+ val kitten = if (isKitten) {
+ OfflineTtsKittenModelConfig(
+ model = "$modelDir/$modelName",
+ voices = "$modelDir/$voices",
+ tokens = "$modelDir/tokens.txt",
+ dataDir = dataDir,
+ )
+ } else {
+ OfflineTtsKittenModelConfig()
+ }
+
+ return OfflineTtsConfig(
+ model = OfflineTtsModelConfig(
+ vits = vits,
+ matcha = matcha,
+ kokoro = kokoro,
+ kitten = kitten,
+ numThreads = numberOfThreads,
+ debug = true,
+ provider = "cpu",
+ ),
+ ruleFsts = ruleFsts,
+ ruleFars = ruleFars,
+ )
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/NovelLibraryApplication.kt b/app/src/main/java/io/github/gmathi/novellibrary/NovelLibraryApplication.kt
index 6c2fbbca..9cbcec6b 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/NovelLibraryApplication.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/NovelLibraryApplication.kt
@@ -75,6 +75,28 @@ open class NovelLibraryApplication : Application(), LifecycleObserver {
setRemoteConfig(dataCenter)
setupNotificationChannels()
+
+ // Preload AI TTS model in background if AI TTS is enabled
+ if (dataCenter.ttsPreferences.ttsEngine == "ai_vits") {
+ try {
+ val preloader = io.github.gmathi.novellibrary.service.tts.AiTtsPreloader.getInstance(this, dataCenter)
+ preloader.preloadModel()
+ Logs.debug(TAG, "Started AI TTS model preloading")
+ } catch (e: Exception) {
+ Logs.error(TAG, "Failed to start AI TTS preloading", e)
+ }
+ }
+ }
+
+ override fun onTerminate() {
+ // Best-effort cleanup of the preloader's coroutine scope and cached player.
+ // onTerminate() is called on emulators; on production devices process death
+ // also reclaims all resources, so this is supplementary.
+ try {
+ val dataCenter: DataCenter by injectLazy()
+ io.github.gmathi.novellibrary.service.tts.AiTtsPreloader.getInstance(this, dataCenter).shutdown()
+ } catch (_: Exception) {}
+ super.onTerminate()
}
private fun cleanupDatabase() {
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/activity/TextToSpeechControlsActivity.kt b/app/src/main/java/io/github/gmathi/novellibrary/activity/TextToSpeechControlsActivity.kt
index 51626c81..6a87db7b 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/activity/TextToSpeechControlsActivity.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/activity/TextToSpeechControlsActivity.kt
@@ -277,6 +277,9 @@ class TextToSpeechControlsActivity : BaseActivity(), GenericAdapter.Listener(
+ R.id.aiTtsControlsCompose
+ )
+
+ composeView?.setContent {
+ // Use Material3 theme
+ androidx.compose.material3.MaterialTheme {
+ val viewModel = remember {
+ io.github.gmathi.novellibrary.compose.AiTtsPlaybackViewModel(
+ controller,
+ dataCenter.ttsPreferences
+ )
+ }
+ io.github.gmathi.novellibrary.compose.AiTtsPlaybackControls(viewModel = viewModel)
+ }
+ }
+
+ updateTtsControlsVisibility()
+ }
+
+ private fun updateTtsControlsVisibility() {
+ val isAiTts = dataCenter.ttsPreferences.ttsEngine == "ai_vits"
+
+ // Show/hide AI TTS Compose controls
+ val composeView = quickSettings.root.findViewById(
+ R.id.aiTtsControlsCompose
+ )
+ composeView?.visibility = if (isAiTts) View.VISIBLE else View.GONE
+
+ // Show/hide system TTS controls (pitch and speech rate)
+ quickSettings.pitch.visibility = if (isAiTts) View.GONE else View.VISIBLE
+ quickSettings.speechRate.visibility = if (isAiTts) View.GONE else View.VISIBLE
}
private fun refreshTimerState() {
@@ -398,6 +439,11 @@ class TextToSpeechControlsActivity : BaseActivity(), GenericAdapter.Listener Unit
+) {
+ val uiState by viewModel.uiState.collectAsState()
+
+ Scaffold(
+ topBar = {
+ TopAppBar(
+ title = { Text("AI TTS Test") },
+ navigationIcon = {
+ IconButton(onClick = onNavigateBack) {
+ Icon(
+ imageVector = Icons.AutoMirrored.Filled.ArrowBack,
+ contentDescription = "Back"
+ )
+ }
+ }
+ )
+ }
+ ) { paddingValues ->
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(paddingValues)
+ .verticalScroll(rememberScrollState())
+ .padding(16.dp),
+ verticalArrangement = Arrangement.spacedBy(16.dp)
+ ) {
+ Text(
+ text = uiState.statusText,
+ style = MaterialTheme.typography.bodyMedium
+ )
+
+ OutlinedTextField(
+ value = uiState.inputText,
+ onValueChange = { viewModel.updateInputText(it) },
+ label = { Text("Enter text to speak") },
+ modifier = Modifier.fillMaxWidth(),
+ minLines = 3
+ )
+
+ Column {
+ Text(
+ text = "Speed: ${"%.1f".format(uiState.speed)}x",
+ style = MaterialTheme.typography.bodyMedium
+ )
+ Slider(
+ value = uiState.speed,
+ onValueChange = { viewModel.updateSpeed(it) },
+ valueRange = 0.5f..3.0f,
+ modifier = Modifier.fillMaxWidth()
+ )
+ }
+
+ Column {
+ Text(
+ text = "Pitch: ${"%.1f".format(uiState.pitch)}x",
+ style = MaterialTheme.typography.bodyMedium
+ )
+ Slider(
+ value = uiState.pitch,
+ onValueChange = { viewModel.updatePitch(it) },
+ valueRange = 0.5f..2.0f,
+ modifier = Modifier.fillMaxWidth()
+ )
+ }
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(8.dp)
+ ) {
+ Button(
+ onClick = { viewModel.speak() },
+ enabled = uiState.isSpeakEnabled,
+ modifier = Modifier.weight(1f)
+ ) {
+ Text("Speak")
+ }
+
+ Button(
+ onClick = { viewModel.stopSpeaking() },
+ enabled = uiState.isStopEnabled,
+ modifier = Modifier.weight(1f)
+ ) {
+ Text("Stop")
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/AiTtsTestViewModel.kt b/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/AiTtsTestViewModel.kt
new file mode 100644
index 00000000..a19904ff
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/AiTtsTestViewModel.kt
@@ -0,0 +1,319 @@
+package io.github.gmathi.novellibrary.activity.settings
+
+import android.content.res.AssetManager
+import android.media.AudioAttributes
+import android.media.AudioFormat
+import android.media.AudioTrack
+import android.util.Log
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.k2fsa.sherpa.onnx.OfflineTts
+import com.k2fsa.sherpa.onnx.OfflineTtsConfig
+import com.k2fsa.sherpa.onnx.OfflineTtsModelConfig
+import com.k2fsa.sherpa.onnx.OfflineTtsVitsModelConfig
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
+import java.io.File
+import java.io.FileOutputStream
+
+data class AiTtsTestUiState(
+ val statusText: String = "Initializing…",
+ val inputText: String = "Hello! This is a test of the AI text to speech engine.",
+ val speed: Float = 1.0f,
+ val pitch: Float = 1.0f,
+ val isSpeakEnabled: Boolean = false,
+ val isStopEnabled: Boolean = false,
+ val isSpeaking: Boolean = false
+)
+
+class AiTtsTestViewModel : ViewModel() {
+
+ companion object {
+ private const val TAG = "AiTtsTest"
+ private const val MODEL_DIR = "vits-piper-en_US-kusal-medium"
+ private const val MODEL_NAME = "en_US-kusal-medium.onnx"
+ private const val MIN_ESPEAK_FILES = 50
+ }
+
+ private val _uiState = MutableStateFlow(AiTtsTestUiState())
+ val uiState: StateFlow = _uiState.asStateFlow()
+
+ private var tts: OfflineTts? = null
+ private var sampleRate = 0
+
+ @Volatile
+ private var stopRequested = false
+ private var speakThread: Thread? = null
+
+ fun initEngine(filesDir: File, assetManager: AssetManager) {
+ viewModelScope.launch(Dispatchers.IO) {
+ try {
+ updateStatus("Copying espeak-ng-data to filesystem…")
+ val espeakDataPath = copyEspeakData(filesDir, assetManager)
+
+ updateStatus("Creating OfflineTts (model from assets, espeak from filesystem)…")
+
+ val config = OfflineTtsConfig(
+ model = OfflineTtsModelConfig(
+ vits = OfflineTtsVitsModelConfig(
+ model = "$MODEL_DIR/$MODEL_NAME",
+ tokens = "$MODEL_DIR/tokens.txt",
+ dataDir = espeakDataPath,
+ lexicon = "",
+ noiseScale = 0.667f,
+ noiseScaleW = 0.8f,
+ lengthScale = 1.0f,
+ ),
+ numThreads = 2,
+ debug = true,
+ provider = "cpu",
+ )
+ )
+
+ val engine = OfflineTts(assetManager = assetManager, config = config)
+ tts = engine
+ sampleRate = engine.sampleRate()
+
+ Log.i(TAG, "OfflineTts ready! sampleRate=$sampleRate speakers=${engine.numSpeakers()}")
+
+ if (sampleRate <= 0) {
+ updateStatus("ERROR: invalid sampleRate=$sampleRate")
+ return@launch
+ }
+
+ updateStatus("Ready! sampleRate=$sampleRate")
+ _uiState.value = _uiState.value.copy(isSpeakEnabled = true)
+
+ } catch (e: UnsatisfiedLinkError) {
+ Log.e(TAG, "Native lib error", e)
+ updateStatus("ERROR: native library — ${e.message}")
+ } catch (e: Exception) {
+ Log.e(TAG, "Init error", e)
+ updateStatus("ERROR: ${e.javaClass.simpleName}: ${e.message}")
+ }
+ }
+ }
+
+ fun updateInputText(text: String) {
+ _uiState.value = _uiState.value.copy(inputText = text)
+ }
+
+ fun updateSpeed(speed: Float) {
+ _uiState.value = _uiState.value.copy(speed = speed)
+ }
+
+ fun updatePitch(pitch: Float) {
+ _uiState.value = _uiState.value.copy(pitch = pitch)
+ }
+
+ fun speak() {
+ val text = _uiState.value.inputText.trim()
+ if (text.isEmpty()) {
+ updateStatus("Error: No text to speak")
+ return
+ }
+
+ val engine = tts
+ if (engine == null) {
+ updateStatus("Error: TTS engine not initialized")
+ return
+ }
+
+ // Stop any existing thread first
+ if (speakThread?.isAlive == true) {
+ stopRequested = true
+ speakThread?.join(1000) // Wait up to 1 second for thread to finish
+ }
+
+ // Capture speed and pitch values before starting thread
+ val currentSpeed = _uiState.value.speed
+ val currentPitch = _uiState.value.pitch
+
+ _uiState.value = _uiState.value.copy(
+ isSpeakEnabled = false,
+ isStopEnabled = true,
+ isSpeaking = true
+ )
+ stopRequested = false
+ updateStatus("Synthesizing…")
+
+ speakThread = Thread({
+ var audioTrack: AudioTrack? = null
+ try {
+ updateStatus("Generating audio (speed: ${String.format("%.1f", currentSpeed)}x)…")
+
+ // Use currentSpeed for synthesis (not 1.0f)
+ val audio = engine.generate(text = text, sid = 0, speed = currentSpeed)
+ val samples = audio.samples
+
+ if (stopRequested) {
+ updateStatus("Stopped")
+ return@Thread
+ }
+ if (samples.isEmpty()) {
+ updateStatus("ERROR: engine returned empty audio")
+ return@Thread
+ }
+
+ val secs = samples.size.toFloat() / sampleRate
+ Log.i(TAG, "Generated ${samples.size} samples (${secs}s)")
+ updateStatus("Playing ${String.format("%.1f", secs)}s of audio…")
+
+ val pcm = floatToPcm16(samples)
+ val bufSize = AudioTrack.getMinBufferSize(
+ sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT
+ )
+ val actualBufSize = maxOf(bufSize, sampleRate * 2)
+
+ audioTrack = AudioTrack.Builder()
+ .setAudioAttributes(
+ AudioAttributes.Builder()
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
+ .setUsage(AudioAttributes.USAGE_MEDIA)
+ .build()
+ )
+ .setAudioFormat(
+ AudioFormat.Builder()
+ .setSampleRate(sampleRate)
+ .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
+ .setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
+ .build()
+ )
+ .setBufferSizeInBytes(actualBufSize)
+ .setTransferMode(AudioTrack.MODE_STREAM)
+ .build()
+
+ // Apply pitch adjustment via playback params (Android API 23+)
+ // Note: Speed is already applied during synthesis, so we only adjust pitch here
+ if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
+ try {
+ val playbackParams = android.media.PlaybackParams()
+ playbackParams.pitch = currentPitch
+ audioTrack.playbackParams = playbackParams
+ Log.i(TAG, "Applied pitch: ${currentPitch}x (speed ${currentSpeed}x applied during synthesis)")
+ } catch (e: Exception) {
+ Log.w(TAG, "Failed to set playback parameters", e)
+ }
+ }
+
+ audioTrack.play()
+
+ var offset = 0
+ while (offset < pcm.size && !stopRequested) {
+ val written = audioTrack.write(pcm, offset, minOf(4096, pcm.size - offset))
+ if (written < 0) {
+ Log.e(TAG, "AudioTrack.write error: $written")
+ break
+ }
+ offset += written
+ }
+
+ if (!stopRequested) {
+ audioTrack.stop()
+ updateStatus("Done! (${String.format("%.1f", secs)}s)")
+ } else {
+ updateStatus("Stopped")
+ }
+ } catch (e: Exception) {
+ Log.e(TAG, "Speak error", e)
+ updateStatus("ERROR: ${e.javaClass.simpleName}: ${e.message}")
+ } finally {
+ try {
+ audioTrack?.release()
+ } catch (_: Exception) {
+ }
+ _uiState.value = _uiState.value.copy(
+ isSpeakEnabled = true,
+ isStopEnabled = false,
+ isSpeaking = false
+ )
+ }
+ }, "ai_tts_speak")
+ speakThread!!.start()
+ }
+
+ fun stopSpeaking() {
+ stopRequested = true
+ speakThread?.interrupt()
+ updateStatus("Stopping…")
+ _uiState.value = _uiState.value.copy(
+ isStopEnabled = false
+ )
+ }
+
+ private fun updateStatus(msg: String) {
+ Log.d(TAG, "Status: $msg")
+ _uiState.value = _uiState.value.copy(statusText = msg)
+ }
+
+ private fun copyEspeakData(filesDir: File, assetManager: AssetManager): String {
+ val targetDir = File(filesDir, "$MODEL_DIR/espeak-ng-data")
+ if (targetDir.exists() && (targetDir.listFiles()?.size ?: 0) > MIN_ESPEAK_FILES) {
+ Log.i(TAG, "espeak-ng-data already present at ${targetDir.absolutePath}")
+ return targetDir.absolutePath
+ }
+
+ Log.i(TAG, "Copying espeak-ng-data from assets to ${targetDir.absolutePath}")
+ targetDir.mkdirs()
+
+ copyAssetDir(assetManager, "$MODEL_DIR/espeak-ng-data", targetDir)
+
+ val count = targetDir.walkTopDown().count { it.isFile }
+ Log.i(TAG, "Copied $count files to espeak-ng-data")
+ return targetDir.absolutePath
+ }
+
+ private fun copyAssetDir(mgr: AssetManager, assetPath: String, targetDir: File) {
+ val children = mgr.list(assetPath) ?: return
+ if (children.isEmpty()) {
+ val fileName = assetPath.substringAfterLast('/')
+ mgr.open(assetPath).use { input ->
+ FileOutputStream(File(targetDir, fileName)).use { output ->
+ input.copyTo(output)
+ }
+ }
+ return
+ }
+ for (child in children) {
+ val childAssetPath = "$assetPath/$child"
+ val subList = mgr.list(childAssetPath)
+ if (subList != null && subList.isNotEmpty()) {
+ val subDir = File(targetDir, child)
+ subDir.mkdirs()
+ copyAssetDir(mgr, childAssetPath, subDir)
+ } else {
+ mgr.open(childAssetPath).use { input ->
+ FileOutputStream(File(targetDir, child)).use { output ->
+ input.copyTo(output)
+ }
+ }
+ }
+ }
+ }
+
+ private fun floatToPcm16(audio: FloatArray): ByteArray {
+ val out = ByteArray(audio.size * 2)
+ for (i in audio.indices) {
+ val clamped = audio[i].coerceIn(-1.0f, 1.0f)
+ val s = (clamped * 32767).toInt()
+ out[2 * i] = (s and 0xFF).toByte()
+ out[2 * i + 1] = ((s shr 8) and 0xFF).toByte()
+ }
+ return out
+ }
+
+ override fun onCleared() {
+ super.onCleared()
+ stopRequested = true
+ speakThread?.join(2000)
+ try {
+ tts?.free()
+ } catch (_: Exception) {
+ }
+ tts = null
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/TTSSettingsActivity.kt b/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/TTSSettingsActivity.kt
index 775eb3ef..9789623d 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/TTSSettingsActivity.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/activity/settings/TTSSettingsActivity.kt
@@ -23,6 +23,7 @@ import io.github.gmathi.novellibrary.model.other.TTSFilter
import io.github.gmathi.novellibrary.model.other.TTSFilterList
import io.github.gmathi.novellibrary.model.other.TTSFilterSource
import io.github.gmathi.novellibrary.model.ui.ListitemSetting
+import io.github.gmathi.novellibrary.service.tts.ModelAssetManager
import io.github.gmathi.novellibrary.service.tts.TTSService
import io.github.gmathi.novellibrary.util.lang.fromHumanPercentage
import io.github.gmathi.novellibrary.util.network.safeExecute
@@ -46,6 +47,48 @@ class TTSSettingsActivity : BaseSettingsActivity
+ selectEngine()
+ },
+ // Voice preset hidden: all bundled VITS-Piper models are single-speaker (sid=0),
+ // so the setting has no audible effect. Re-enable if multi-speaker models are added.
+ TTSSetting(R.string.tts_ai_voice_preset, R.string.tts_ai_voice_preset_description).onBind { _, view, _ ->
+ view.root.visibility = View.GONE
+ },
+ TTSSetting(R.string.tts_ai_speed, R.string.tts_ai_speed_description).onBind { _, view, _ ->
+ // Only show when AI engine is selected
+ val isAiEngine = dataCenter.ttsPreferences.ttsEngine == "ai_vits"
+ view.root.visibility = if (isAiEngine) View.VISIBLE else View.GONE
+ if (isAiEngine) {
+ view.currentValue.visibility = View.VISIBLE
+ @SuppressLint("SetTextI18n")
+ view.currentValue.text = String.format("%.1fx", dataCenter.ttsPreferences.aiSpeed)
+ view.root.setOnClickListener {
+ sliderMenu(view.currentValue, dataCenter.ttsPreferences.aiSpeed, 0.5f, 3.0f, false) { value, closing ->
+ if (closing) dataCenter.ttsPreferences.aiSpeed = value
+ value
+ }
+ }
+ }
+ },
+ TTSSetting(R.string.tts_ai_model_management, R.string.tts_ai_model_management_description).onBind { _, view, _ ->
+ // Only show when AI engine is selected
+ val isAiEngine = dataCenter.ttsPreferences.ttsEngine == "ai_vits"
+ view.root.visibility = if (isAiEngine) View.VISIBLE else View.GONE
+ if (isAiEngine) {
+ view.bindChevron()
+ view.root.setOnClickListener { manageAiModel() }
+ }
+ },
+ TTSSetting(R.string.tts_ai_test, R.string.tts_ai_test_description).onBind { _, view, _ ->
+ view.bindChevron()
+ view.root.setOnClickListener {
+ startActivity(android.content.Intent(this, AiTtsTestActivity::class.java))
+ }
+ },
+
TTSSetting(R.string.tts_header_playback, R.string.empty).bindHeader(),
TTSSetting(R.string.tts_pitch, R.string.tts_pitch_description).onBind { _, view, _ ->
view.currentValue.visibility = View.VISIBLE
@@ -78,8 +121,14 @@ class TTSSettingsActivity : BaseSettingsActivity
view.bindSwitch(dataCenter.ttsPreferences.markChaptersRead) { _, value -> dataCenter.ttsPreferences.markChaptersRead = value }
},
- TTSSetting(R.string.tts_language, R.string.tts_language_description).bindChevron { _, _ ->
- selectLanguage()
+ TTSSetting(R.string.tts_language, R.string.tts_language_description).onBind { _, view, _ ->
+ // Only show when System TTS is selected
+ val isSystemEngine = dataCenter.ttsPreferences.ttsEngine == "system"
+ view.root.visibility = if (isSystemEngine) View.VISIBLE else View.GONE
+ if (isSystemEngine) {
+ view.bindChevron()
+ view.root.setOnClickListener { selectLanguage() }
+ }
},
TTSSetting(R.string.tts_downpitch_dialogue, R.string.tts_downpitch_dialogue_description).onBind { _, view, _ ->
view.bindSwitch(dataCenter.ttsPreferences.downpitchDialogue) { _, value -> dataCenter.ttsPreferences.downpitchDialogue = value }
@@ -246,6 +295,143 @@ class TTSSettingsActivity : BaseSettingsActivity(R.id.listGroup) ?: return
+
+ // System TTS option
+ val systemButton = RadioButton(this)
+ systemButton.id = View.generateViewId()
+ systemButton.text = getString(R.string.tts_engine_system)
+ systemButton.isChecked = selectedEngine == "system"
+ group.addView(systemButton)
+
+ // AI TTS option
+ val aiButton = RadioButton(this)
+ aiButton.id = View.generateViewId()
+ aiButton.text = getString(R.string.tts_engine_ai_vits)
+ aiButton.isChecked = selectedEngine == "ai_vits"
+ group.addView(aiButton)
+
+ val buttonMap = mapOf(
+ systemButton.id to "system",
+ aiButton.id to "ai_vits"
+ )
+
+ group.setOnCheckedChangeListener { _, checkedId ->
+ selectedEngine = buttonMap[checkedId] ?: "system"
+ }
+ }
+
+ fun selectAiVoice() {
+ var selectedVoiceId = dataCenter.ttsPreferences.aiVoicePreset
+
+ val dialog = MaterialDialog(this).show {
+ title(R.string.tts_ai_voice_preset)
+ customView(R.layout.dialog_list, scrollable = true)
+ positiveButton(R.string.okay) {
+ dataCenter.ttsPreferences.aiVoicePreset = selectedVoiceId
+ tts?.sendCommand(TTSService.ACTION_UPDATE_SETTINGS, null, null)
+ }
+ negativeButton(R.string.cancel) { dismiss() }
+ }
+
+ val group = dialog.getCustomView().findViewById(R.id.listGroup) ?: return
+
+ val voicePresets = AiVoicePreset.entries
+ val buttonMap = mutableMapOf()
+
+ voicePresets.forEach { preset ->
+ val button = RadioButton(this)
+ button.id = View.generateViewId()
+ @SuppressLint("SetTextI18n")
+ button.text = "${preset.displayName} (${preset.gender})"
+ button.isChecked = selectedVoiceId == preset.sid
+ group.addView(button)
+ buttonMap[button.id] = preset.sid
+ }
+
+ group.setOnCheckedChangeListener { _, checkedId ->
+ selectedVoiceId = buttonMap[checkedId] ?: 0
+ }
+ }
+
+ fun manageAiModel() {
+ val assetManager = ModelAssetManager(this)
+ val status = assetManager.getAssetStatus()
+
+ when (status) {
+ ModelAssetManager.AssetStatus.NOT_DOWNLOADED,
+ ModelAssetManager.AssetStatus.CORRUPT -> {
+ // Models are bundled in APK, this should never happen
+ MaterialDialog(this).show {
+ title(R.string.alert)
+ message(text = "AI TTS models are missing or corrupted. Please reinstall the app.")
+ positiveButton(R.string.okay)
+ }
+ }
+ ModelAssetManager.AssetStatus.READY -> {
+ // Show model info and delete option
+ val sizeBytes = assetManager.getAssetSizeBytes()
+ val sizeMB = sizeBytes / (1024f * 1024f)
+
+ MaterialDialog(this).show {
+ title(R.string.tts_ai_model_management)
+ @SuppressLint("SetTextI18n")
+ message(text = getString(R.string.tts_ai_model_size, sizeMB) + "\n\n" + getString(R.string.tts_ai_model_ready))
+ positiveButton(R.string.tts_ai_model_delete) {
+ deleteAiModel(sizeMB)
+ }
+ negativeButton(R.string.cancel) { dismiss() }
+ }
+ }
+ }
+ }
+
+ private fun deleteAiModel(sizeMB: Float) {
+ MaterialDialog(this).show {
+ title(R.string.tts_ai_model_delete)
+ message(text = getString(R.string.tts_ai_model_delete_confirm, sizeMB))
+ positiveButton(R.string.okay) {
+ val assetManager = ModelAssetManager(this@TTSSettingsActivity)
+ val success = assetManager.deleteAssets()
+
+ if (success) {
+ toast("Model deleted successfully. Models will be re-copied from APK on next use.", Toast.LENGTH_LONG)
+ adapter.notifyDataSetChanged()
+ } else {
+ toast("Failed to delete model", Toast.LENGTH_SHORT)
+ }
+ }
+ negativeButton(R.string.cancel) { dismiss() }
+ }
+ }
+
fun selectFilters() {
val originalFilters = dataCenter.ttsPreferences.filters
val filters = originalFilters.toMutableList()
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/compose/AiTtsPlaybackControls.kt b/app/src/main/java/io/github/gmathi/novellibrary/compose/AiTtsPlaybackControls.kt
new file mode 100644
index 00000000..d42c55ed
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/compose/AiTtsPlaybackControls.kt
@@ -0,0 +1,244 @@
+package io.github.gmathi.novellibrary.compose
+
+import android.os.Bundle
+import android.support.v4.media.session.MediaControllerCompat
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.*
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import androidx.lifecycle.ViewModel
+import io.github.gmathi.novellibrary.model.preference.TTSPreferences
+import io.github.gmathi.novellibrary.service.tts.AiVoicePreset
+import io.github.gmathi.novellibrary.service.tts.TTSService
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.flow.update
+
+/**
+ * AI TTS Playback Controls UI component.
+ * Provides real-time voice and speed controls for AI TTS during playback.
+ *
+ * This composable follows MVVM architecture with AiTtsPlaybackViewModel managing state
+ * and communicating with TTSService via MediaController commands.
+ */
+@Composable
+fun AiTtsPlaybackControls(
+ viewModel: AiTtsPlaybackViewModel,
+ modifier: Modifier = Modifier
+) {
+ val uiState by viewModel.uiState.collectAsState()
+
+ Column(
+ modifier = modifier
+ .fillMaxWidth()
+ .padding(16.dp),
+ verticalArrangement = Arrangement.spacedBy(16.dp)
+ ) {
+ // Voice Selector
+ VoiceSelector(
+ selectedVoice = uiState.selectedVoice,
+ voices = uiState.availableVoices,
+ onVoiceSelected = { viewModel.onVoiceChanged(it) }
+ )
+
+ // Speed Slider
+ SpeedSlider(
+ speed = uiState.speed,
+ onSpeedChanged = { viewModel.onSpeedChanged(it) }
+ )
+ }
+}
+
+/**
+ * Voice selector dropdown displaying all available AI voice presets.
+ */
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun VoiceSelector(
+ selectedVoice: AiVoicePreset,
+ voices: List,
+ onVoiceSelected: (AiVoicePreset) -> Unit,
+ modifier: Modifier = Modifier
+) {
+ var expanded by remember { mutableStateOf(false) }
+
+ Column(modifier = modifier.fillMaxWidth()) {
+ Text(
+ text = "AI Voice",
+ style = MaterialTheme.typography.labelMedium
+ )
+
+ Spacer(modifier = Modifier.height(4.dp))
+
+ ExposedDropdownMenuBox(
+ expanded = expanded,
+ onExpandedChange = { expanded = it }
+ ) {
+ OutlinedTextField(
+ value = "${selectedVoice.displayName} (${selectedVoice.gender})",
+ onValueChange = {},
+ readOnly = true,
+ trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
+ modifier = Modifier
+ .fillMaxWidth()
+ .menuAnchor(),
+ colors = ExposedDropdownMenuDefaults.outlinedTextFieldColors()
+ )
+
+ ExposedDropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { expanded = false }
+ ) {
+ voices.forEach { voice ->
+ DropdownMenuItem(
+ text = {
+ Column {
+ Text(voice.displayName)
+ Text(
+ text = voice.gender,
+ style = MaterialTheme.typography.bodySmall,
+ color = MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ }
+ },
+ onClick = {
+ onVoiceSelected(voice)
+ expanded = false
+ }
+ )
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Speed slider with range 0.5x to 3.0x.
+ */
+@Composable
+fun SpeedSlider(
+ speed: Float,
+ onSpeedChanged: (Float) -> Unit,
+ modifier: Modifier = Modifier
+) {
+ Column(modifier = modifier.fillMaxWidth()) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Text(
+ text = "AI Speed",
+ style = MaterialTheme.typography.labelMedium
+ )
+
+ Text(
+ text = String.format("%.1fx", speed),
+ style = MaterialTheme.typography.bodyMedium,
+ color = MaterialTheme.colorScheme.primary
+ )
+ }
+
+ Spacer(modifier = Modifier.height(4.dp))
+
+ Slider(
+ value = speed,
+ onValueChange = onSpeedChanged,
+ valueRange = 0.5f..3.0f,
+ steps = 24, // 0.1 increments: (3.0 - 0.5) / 0.1 - 1 = 24
+ modifier = Modifier.fillMaxWidth()
+ )
+
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween
+ ) {
+ Text(
+ text = "0.5x",
+ style = MaterialTheme.typography.bodySmall,
+ color = MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ Text(
+ text = "3.0x",
+ style = MaterialTheme.typography.bodySmall,
+ color = MaterialTheme.colorScheme.onSurfaceVariant
+ )
+ }
+ }
+}
+
+/**
+ * ViewModel for AI TTS Playback Controls.
+ * Manages UI state and communicates with TTSService via MediaController.
+ */
+class AiTtsPlaybackViewModel(
+ private val mediaController: MediaControllerCompat?,
+ private val ttsPreferences: TTSPreferences
+) : ViewModel() {
+
+ data class UiState(
+ val selectedVoice: AiVoicePreset = AiVoicePreset.EXPR_VOICE_2_M,
+ val availableVoices: List = AiVoicePreset.entries,
+ val speed: Float = 1.0f,
+ val isAiTtsActive: Boolean = false
+ )
+
+ private val _uiState = MutableStateFlow(UiState())
+ val uiState: StateFlow = _uiState.asStateFlow()
+
+ init {
+ loadPreferences()
+ }
+
+ /**
+ * Handle voice preset change.
+ * Updates preferences and sends command to TTSService.
+ */
+ fun onVoiceChanged(voice: AiVoicePreset) {
+ _uiState.update { it.copy(selectedVoice = voice) }
+ ttsPreferences.aiVoicePreset = voice.sid
+
+ // Send command to TTSService to update voice in real-time
+ mediaController?.sendCommand(
+ TTSService.ACTION_UPDATE_AI_VOICE,
+ Bundle().apply {
+ putInt("voiceId", voice.sid)
+ },
+ null
+ )
+ }
+
+ /**
+ * Handle speed change.
+ * Updates preferences and sends command to TTSService.
+ */
+ fun onSpeedChanged(speed: Float) {
+ _uiState.update { it.copy(speed = speed) }
+ ttsPreferences.aiSpeed = speed
+
+ // Send command to TTSService to update speed in real-time
+ mediaController?.sendCommand(
+ TTSService.ACTION_UPDATE_AI_SPEED,
+ Bundle().apply {
+ putFloat("speed", speed)
+ },
+ null
+ )
+ }
+
+ /**
+ * Load current preferences into UI state.
+ */
+ private fun loadPreferences() {
+ _uiState.update {
+ it.copy(
+ selectedVoice = AiVoicePreset.fromSid(ttsPreferences.aiVoicePreset),
+ speed = ttsPreferences.aiSpeed,
+ isAiTtsActive = ttsPreferences.ttsEngine == "ai_vits"
+ )
+ }
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/model/preference/TTSPreferences.kt b/app/src/main/java/io/github/gmathi/novellibrary/model/preference/TTSPreferences.kt
index 2e85ed21..d53a279c 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/model/preference/TTSPreferences.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/model/preference/TTSPreferences.kt
@@ -88,6 +88,27 @@ data class TTSPreferences(val context: Context, val prefs: SharedPreferences) {
//#endregion
+ //#region AI TTS
+
+ var ttsEngine: String
+ get() = prefs.getString("ttsEngine", "ai_vits") ?: "ai_vits"
+ set(value) = prefs.edit().putString("ttsEngine", value).apply()
+
+ var aiModel: String
+ get() = prefs.getString("ttsAiModel", "vits-piper-en_US-kusal-medium") ?: "vits-piper-en_US-kusal-medium"
+ set(value) = prefs.edit().putString("ttsAiModel", value).apply()
+
+ @Deprecated("Use aiModel instead - voice presets don't apply to single-speaker models")
+ var aiVoicePreset: Int
+ get() = prefs.getInt("ttsAiVoicePreset", 0)
+ set(value) = prefs.edit().putInt("ttsAiVoicePreset", value).apply()
+
+ var aiSpeed: Float
+ get() = prefs.getFloat("ttsAiSpeed", 1.0f)
+ set(value) = prefs.edit().putFloat("ttsAiSpeed", value).apply()
+
+ //#endregion
+
//#region Remote control
var rewindSentences: Int
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiAudioPlayer.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiAudioPlayer.kt
new file mode 100644
index 00000000..bf7c3d70
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiAudioPlayer.kt
@@ -0,0 +1,280 @@
+package io.github.gmathi.novellibrary.service.tts
+
+import android.media.AudioAttributes
+import android.media.AudioFormat
+import android.media.AudioTrack
+import android.util.Log
+import com.k2fsa.sherpa.onnx.OfflineTts
+import com.k2fsa.sherpa.onnx.OfflineTtsConfig
+import com.k2fsa.sherpa.onnx.OfflineTtsModelConfig
+import com.k2fsa.sherpa.onnx.OfflineTtsVitsModelConfig
+import java.io.File
+
+/**
+ * Standalone AI TTS audio player. Modeled directly on the sherpa-onnx example project.
+ *
+ * Design principles (learned from previous crash analysis):
+ * - Single OfflineTts instance, created once, never released until destroy().
+ * - All synthesis happens on ONE dedicated thread — no coroutines, no dispatchers.
+ * - AudioTrack is created once at init and reused.
+ * - generateWithCallback streams PCM chunks directly into AudioTrack.
+ * - Interruption via a single volatile boolean.
+ * - No interaction with TTSWrapper at all.
+ */
+class AiAudioPlayer(private val modelDir: String) {
+
+ companion object {
+ private const val TAG = "AiAudioPlayer"
+ }
+
+ interface Callback {
+ fun onUtteranceStart(utteranceId: String)
+ fun onUtteranceDone(utteranceId: String)
+ fun onError(utteranceId: String, message: String)
+ }
+
+ // --- state ---
+ private var tts: OfflineTts? = null
+ private var track: AudioTrack? = null
+ private var sampleRate: Int = 0
+
+ @Volatile var stopped: Boolean = false
+ private set
+ @Volatile private var destroyed: Boolean = false
+
+ // Thread synchronization to prevent multiple concurrent speak() calls
+ private val speakLock = Any()
+ @Volatile private var isSpeaking: Boolean = false
+
+ var speed: Float = 1.0f
+ var callback: Callback? = null
+
+ // -------------------------------------------------------------------------
+ // Lifecycle
+ // -------------------------------------------------------------------------
+
+
+ /**
+ * Create the OfflineTts engine and AudioTrack.
+ * Call from a background thread — model loading takes a few seconds.
+ *
+ * @return null on success, or an error message string on failure.
+ */
+ fun init(): String? {
+ try {
+ // Find the .onnx model file
+ val onnxFile = File(modelDir).listFiles()?.find { it.name.endsWith(".onnx") }
+ ?: return "No .onnx model file found in $modelDir"
+
+ val tokensFile = File(modelDir, "tokens.txt")
+ if (!tokensFile.exists()) return "Missing tokens.txt in $modelDir"
+
+ val espeakDir = File(modelDir, "espeak-ng-data")
+ if (!espeakDir.isDirectory) return "Missing espeak-ng-data in $modelDir"
+
+ val config = OfflineTtsConfig(
+ model = OfflineTtsModelConfig(
+ vits = OfflineTtsVitsModelConfig(
+ model = onnxFile.absolutePath,
+ tokens = tokensFile.absolutePath,
+ dataDir = espeakDir.absolutePath,
+ lexicon = "",
+ noiseScale = 0.667f,
+ noiseScaleW = 0.8f,
+ lengthScale = 1.0f,
+ ),
+ numThreads = 2,
+ debug = false,
+ provider = "cpu",
+ )
+ )
+
+ tts = OfflineTts(config = config)
+ sampleRate = tts!!.sampleRate()
+ Log.i(TAG, "OfflineTts created. sampleRate=$sampleRate, speakers=${tts!!.numSpeakers()}")
+
+ // Pre-create AudioTrack so first utterance doesn't stutter
+ track = createTrack(sampleRate)
+ track!!.play()
+
+ return null // success
+ } catch (e: UnsatisfiedLinkError) {
+ Log.e(TAG, "Native library not available", e)
+ return "AI TTS native library not supported on this device"
+ } catch (e: Exception) {
+ Log.e(TAG, "init failed", e)
+ return e.message ?: "Unknown init error"
+ }
+ }
+
+ /**
+ * Speak a single piece of text. Blocks the calling thread until synthesis
+ * is complete or [stop] is called. Designed to be called from a dedicated
+ * synthesis thread — never from the main thread.
+ *
+ * Uses generate() (non-callback) to avoid JNI callback lambda issues with
+ * R8 desugaring that cause native crashes in generateWithCallback().
+ */
+ fun speak(text: String, utteranceId: String) {
+ // Ensure only one speak() call is active at a time
+ synchronized(speakLock) {
+ if (isSpeaking) {
+ Log.w(TAG, "speak() called while already speaking, ignoring")
+ return
+ }
+ isSpeaking = true
+ }
+
+ try {
+ speakInternal(text, utteranceId)
+ } finally {
+ synchronized(speakLock) {
+ isSpeaking = false
+ }
+ }
+ }
+
+ private fun speakInternal(text: String, utteranceId: String) {
+ val engine = tts ?: run {
+ Log.e(TAG, "speak() called but engine is null")
+ callback?.onError(utteranceId, "Engine not initialized")
+ return
+ }
+ val audioTrack = track ?: run {
+ Log.e(TAG, "speak() called but audioTrack is null")
+ callback?.onError(utteranceId, "AudioTrack not initialized")
+ return
+ }
+ if (destroyed) {
+ Log.d(TAG, "speak() called but player is destroyed")
+ return
+ }
+ if (text.isBlank()) {
+ Log.w(TAG, "speak() called with blank text, skipping")
+ callback?.onUtteranceDone(utteranceId)
+ return
+ }
+
+ stopped = false
+
+ callback?.onUtteranceStart(utteranceId)
+
+ try {
+ // Ensure AudioTrack is in correct state before writing
+ try {
+ if (audioTrack.playState != AudioTrack.PLAYSTATE_PLAYING) {
+ audioTrack.flush()
+ audioTrack.play()
+ }
+ } catch (e: Exception) {
+ Log.w(TAG, "Failed to prepare AudioTrack", e)
+ }
+
+ // Use generate() instead of generateWithCallback() to avoid JNI
+ // callback lambda crash with R8 desugaring. For line-by-line TTS
+ // the latency difference is negligible.
+ Log.d(TAG, "Generating audio with speed=${speed}x")
+ val audio = engine.generate(text = text, sid = 0, speed = speed)
+ val samples = audio.samples
+
+ if (stopped || destroyed) {
+ Log.d(TAG, "Stopped or destroyed after generation")
+ return
+ }
+ if (samples.isEmpty()) {
+ Log.e(TAG, "Engine returned empty audio")
+ callback?.onError(utteranceId, "Engine returned empty audio")
+ return
+ }
+
+ val pcm = floatToPcm(samples)
+ var offset = 0
+ while (offset < pcm.size && !stopped && !destroyed) {
+ val written = audioTrack.write(pcm, offset, pcm.size - offset)
+ if (written < 0) {
+ Log.e(TAG, "AudioTrack.write error: $written")
+ break
+ }
+ offset += written
+ }
+
+ if (!stopped && !destroyed) {
+ callback?.onUtteranceDone(utteranceId)
+ }
+ } catch (e: Exception) {
+ Log.e(TAG, "speak() error", e)
+ callback?.onError(utteranceId, e.message ?: "synthesis error")
+ }
+ }
+
+ /** Stop current synthesis and flush audio. Thread-safe. */
+ fun stop() {
+ stopped = true
+ track?.let {
+ try {
+ it.pause()
+ it.flush()
+ // Don't call play() here - let the next speak() call handle it
+ } catch (e: Exception) {
+ Log.w(TAG, "stop() track error", e)
+ }
+ }
+ // Wait for any active speak() to finish
+ var attempts = 0
+ while (isSpeaking && attempts < 20) {
+ Thread.sleep(50)
+ attempts++
+ }
+ }
+
+ /** Release everything. After this call the instance is unusable. */
+ fun destroy() {
+ destroyed = true
+ stopped = true
+ try { track?.stop() } catch (_: Exception) {}
+ try { track?.release() } catch (_: Exception) {}
+ track = null
+ try { tts?.free() } catch (_: Exception) {}
+ tts = null
+ Log.i(TAG, "destroyed")
+ }
+
+ // -------------------------------------------------------------------------
+ // Helpers
+ // -------------------------------------------------------------------------
+
+ private fun createTrack(sr: Int): AudioTrack {
+ val bufSize = AudioTrack.getMinBufferSize(
+ sr, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT
+ )
+ return AudioTrack(
+ AudioAttributes.Builder()
+ .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
+ .setUsage(AudioAttributes.USAGE_MEDIA)
+ .build(),
+ AudioFormat.Builder()
+ .setSampleRate(sr)
+ .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
+ .setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
+ .build(),
+ bufSize,
+ AudioTrack.MODE_STREAM,
+ android.media.AudioManager.AUDIO_SESSION_ID_GENERATE,
+ )
+ }
+
+ /**
+ * Float [-1,1] → 16-bit PCM little-endian.
+ * Clamps to [-1,1] before conversion to guard against occasional out-of-range
+ * samples from the ONNX model; uses explicit bit masking for correct sign handling.
+ */
+ private fun floatToPcm(audio: FloatArray): ByteArray {
+ val out = ByteArray(audio.size * 2)
+ for (i in audio.indices) {
+ val s = (audio[i].coerceIn(-1.0f, 1.0f) * 32767).toInt()
+ out[2 * i] = (s and 0xFF).toByte()
+ out[2 * i + 1] = ((s shr 8) and 0xFF).toByte()
+ }
+ return out
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiModelSwitcher.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiModelSwitcher.kt
new file mode 100644
index 00000000..be75958b
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiModelSwitcher.kt
@@ -0,0 +1,80 @@
+package io.github.gmathi.novellibrary.service.tts
+
+import android.content.Context
+import android.os.Bundle
+import android.support.v4.media.session.MediaControllerCompat
+import android.util.Log
+import io.github.gmathi.novellibrary.model.preference.DataCenter
+
+/**
+ * Helper class for switching AI TTS models.
+ * Handles both the preference update and the service notification.
+ */
+object AiModelSwitcher {
+ private const val TAG = "AiModelSwitcher"
+
+ /**
+ * Switch to a different AI TTS model.
+ * This will:
+ * 1. Update the preference
+ * 2. Notify the TTS service to switch models
+ * 3. Preload the new model in the background
+ *
+ * @param context Application context
+ * @param dataCenter DataCenter instance
+ * @param newModelId The new model ID (e.g., "vits-piper-en_US-lessac-medium")
+ * @param mediaController Optional media controller for active TTS session
+ */
+ fun switchModel(
+ context: Context,
+ dataCenter: DataCenter,
+ newModelId: String,
+ mediaController: MediaControllerCompat? = null
+ ) {
+ Log.i(TAG, "Switching AI model to: $newModelId")
+
+ // Update preference
+ dataCenter.ttsPreferences.aiModel = newModelId
+
+ // If TTS is currently active, notify the service
+ if (mediaController != null) {
+ val extras = Bundle().apply {
+ putString("modelId", newModelId)
+ }
+ mediaController.sendCommand(TTSService.ACTION_SWITCH_AI_MODEL, extras, null)
+ } else {
+ // If TTS is not active, just preload the new model
+ val preloader = AiTtsPreloader.getInstance(context, dataCenter)
+ preloader.switchModel(newModelId)
+ }
+ }
+
+ /**
+ * Get the currently selected model.
+ *
+ * @param dataCenter DataCenter instance
+ * @return Current model ID
+ */
+ fun getCurrentModel(dataCenter: DataCenter): String {
+ return dataCenter.ttsPreferences.aiModel
+ }
+
+ /**
+ * Get the display name for a model.
+ *
+ * @param modelId Model ID
+ * @return Display name
+ */
+ fun getModelDisplayName(modelId: String): String {
+ return AiTtsModel.fromId(modelId).displayName
+ }
+
+ /**
+ * Get all available models.
+ *
+ * @return List of available models
+ */
+ fun getAvailableModels(): List {
+ return AiTtsModel.entries
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiTtsPreloader.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiTtsPreloader.kt
new file mode 100644
index 00000000..d9b7c433
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiTtsPreloader.kt
@@ -0,0 +1,189 @@
+package io.github.gmathi.novellibrary.service.tts
+
+import android.content.Context
+import android.util.Log
+import io.github.gmathi.novellibrary.model.preference.DataCenter
+import kotlinx.coroutines.*
+
+/**
+ * Preloads AI TTS models in the background to eliminate first-use delay.
+ *
+ * This class handles:
+ * - Copying model files from assets to filesystem on first run
+ * - Pre-initializing the TTS engine in the background
+ * - Caching the initialized engine for immediate use
+ */
+class AiTtsPreloader(private val context: Context, private val dataCenter: DataCenter) {
+
+ companion object {
+ private const val TAG = "AiTtsPreloader"
+
+ @Volatile
+ private var instance: AiTtsPreloader? = null
+
+ fun getInstance(context: Context, dataCenter: DataCenter): AiTtsPreloader {
+ return instance ?: synchronized(this) {
+ instance ?: AiTtsPreloader(context.applicationContext, dataCenter).also { instance = it }
+ }
+ }
+ }
+
+ private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
+
+ /** Guards all mutations of preloadedPlayer / preloadedModelId / isPreloading. */
+ private val stateLock = Any()
+ private var preloadedPlayer: AiAudioPlayer? = null
+ private var preloadedModelId: String? = null
+ private var isPreloading = false
+
+ /**
+ * Switch to a different model and preload it.
+ * This will:
+ * 1. Clear the current preloaded player
+ * 2. Start preloading the new model in the background
+ *
+ * @param newModelId The new model to switch to
+ */
+ fun switchModel(newModelId: String) {
+ Log.i(TAG, "Switching model from $preloadedModelId to $newModelId")
+
+ // Clear old preloaded player
+ clearPreloadedPlayer()
+
+ // Start preloading the new model
+ preloadModel(newModelId)
+ }
+
+ /**
+ * Start preloading the AI TTS model in the background.
+ * This should be called early in the app lifecycle (e.g., Application.onCreate).
+ *
+ * @param modelId Model to preload (defaults to user's selected model)
+ */
+ fun preloadModel(modelId: String? = null) {
+ val targetModelId = modelId ?: dataCenter.ttsPreferences.aiModel
+
+ // Atomically check-and-set: skip if already preloading or already cached for this model.
+ val shouldStart = synchronized(stateLock) {
+ when {
+ isPreloading -> { Log.d(TAG, "Preload already in progress, skipping"); false }
+ preloadedPlayer != null && preloadedModelId == targetModelId -> { Log.d(TAG, "Model $targetModelId already preloaded"); false }
+ else -> { isPreloading = true; true }
+ }
+ }
+ if (!shouldStart) return
+
+ Log.i(TAG, "Starting background preload of model: $targetModelId")
+
+ scope.launch {
+ try {
+ val modelAssetManager = ModelAssetManager(context)
+
+ // Step 1: Copy model files from assets if needed
+ Log.d(TAG, "Checking if model files need to be copied...")
+ val copyResult = modelAssetManager.copyModelsFromAssets(targetModelId)
+ if (copyResult.isFailure) {
+ Log.e(TAG, "Failed to copy model files", copyResult.exceptionOrNull())
+ return@launch
+ }
+
+ // Step 2: Verify model files are ready
+ val status = modelAssetManager.getAssetStatus(targetModelId)
+ if (status != ModelAssetManager.AssetStatus.READY) {
+ Log.e(TAG, "Model files not ready after copy. Status: $status")
+ return@launch
+ }
+
+ // Step 3: Initialize the TTS engine
+ Log.d(TAG, "Initializing TTS engine...")
+ val modelDir = modelAssetManager.getModelDirectory(targetModelId)
+ val player = AiAudioPlayer(modelDir)
+
+ val error = player.init()
+ if (error != null) {
+ Log.e(TAG, "Failed to initialize TTS engine: $error")
+ player.destroy()
+ return@launch
+ }
+
+ // Step 4: Atomically swap in the new player and destroy the old one.
+ val oldPlayer = synchronized(stateLock) {
+ val old = preloadedPlayer
+ player.speed = dataCenter.ttsPreferences.aiSpeed
+ preloadedPlayer = player
+ preloadedModelId = targetModelId
+ old
+ }
+ oldPlayer?.destroy()
+
+ Log.i(TAG, "Successfully preloaded model: $targetModelId")
+
+ } catch (e: Exception) {
+ Log.e(TAG, "Error during model preload", e)
+ } finally {
+ synchronized(stateLock) { isPreloading = false }
+ }
+ }
+ }
+
+ /**
+ * Get the preloaded player if available and matches the requested model.
+ * Returns null if not preloaded or model doesn't match.
+ *
+ * IMPORTANT: The caller takes ownership of the returned player and must call destroy() when done.
+ *
+ * @param modelId Model ID to retrieve (defaults to user's selected model)
+ * @return Preloaded AiAudioPlayer or null
+ */
+ fun getPreloadedPlayer(modelId: String? = null): AiAudioPlayer? {
+ val targetModelId = modelId ?: dataCenter.ttsPreferences.aiModel
+ val player = synchronized(stateLock) {
+ if (preloadedModelId == targetModelId && preloadedPlayer != null) {
+ val p = preloadedPlayer
+ preloadedPlayer = null
+ preloadedModelId = null
+ p
+ } else null
+ }
+ if (player != null) Log.i(TAG, "Returning preloaded player for model: $targetModelId")
+ else Log.d(TAG, "No preloaded player available for model: $targetModelId")
+ return player
+ }
+
+ /**
+ * Check if a model is currently preloaded and ready.
+ *
+ * @param modelId Model ID to check (defaults to user's selected model)
+ * @return true if preloaded and ready
+ */
+ fun isModelPreloaded(modelId: String? = null): Boolean {
+ val targetModelId = modelId ?: dataCenter.ttsPreferences.aiModel
+ return synchronized(stateLock) {
+ preloadedModelId == targetModelId && preloadedPlayer != null
+ }
+ }
+
+ /**
+ * Clear the preloaded player and free resources.
+ * Should be called when switching models or when the app is being destroyed.
+ */
+ fun clearPreloadedPlayer() {
+ Log.d(TAG, "Clearing preloaded player")
+ val player = synchronized(stateLock) {
+ val p = preloadedPlayer
+ preloadedPlayer = null
+ preloadedModelId = null
+ p
+ }
+ player?.destroy()
+ }
+
+ /**
+ * Cancel any ongoing preload operation and clean up resources.
+ */
+ fun shutdown() {
+ Log.d(TAG, "Shutting down preloader")
+ scope.cancel()
+ clearPreloadedPlayer()
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiVoicePreset.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiVoicePreset.kt
new file mode 100644
index 00000000..c96c0083
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/AiVoicePreset.kt
@@ -0,0 +1,64 @@
+package io.github.gmathi.novellibrary.service.tts
+
+/**
+ * AI TTS model selection.
+ *
+ * Each model represents a different voice with its own characteristics.
+ * Models are bundled in the APK assets folder.
+ */
+enum class AiTtsModel(val modelId: String, val displayName: String, val gender: String, val description: String) {
+ KUSAL("vits-piper-en_US-kusal-medium", "Kusal (Male)", "Male", "Clear, neutral American English voice"),
+ LESSAC("vits-piper-en_US-lessac-medium", "Lessac (Female)", "Female", "Expressive American English voice");
+
+ /**
+ * Get the model directory name in assets.
+ */
+ fun getAssetPath(): String = modelId
+
+ /**
+ * Get the .onnx model filename.
+ */
+ fun getModelFileName(): String {
+ val baseName = modelId.removePrefix("vits-piper-")
+ return "$baseName.onnx"
+ }
+
+ companion object {
+ /**
+ * Get model by ID.
+ * @param modelId Model identifier
+ * @return Corresponding AiTtsModel, defaults to KUSAL if invalid
+ */
+ fun fromId(modelId: String): AiTtsModel =
+ entries.firstOrNull { it.modelId == modelId } ?: KUSAL
+ }
+}
+
+/**
+ * Voice presets for AI TTS models (DEPRECATED - use AiTtsModel instead).
+ *
+ * NOTE: Current VITS-Piper models (kusal, lessac) only support sid=0.
+ * This enum is retained for backward compatibility with existing preferences.
+ * Each preset corresponds to a speaker ID (sid) in multi-speaker models.
+ */
+@Deprecated("Use AiTtsModel for model selection instead")
+enum class AiVoicePreset(val sid: Int, val displayName: String, val gender: String) {
+ EXPR_VOICE_2_M(0, "expr-voice-2-m", "Male"),
+ EXPR_VOICE_2_F(1, "expr-voice-2-f", "Female"),
+ EXPR_VOICE_3_M(2, "expr-voice-3-m", "Male"),
+ EXPR_VOICE_3_F(3, "expr-voice-3-f", "Female"),
+ EXPR_VOICE_4_M(4, "expr-voice-4-m", "Male"),
+ EXPR_VOICE_4_F(5, "expr-voice-4-f", "Female"),
+ EXPR_VOICE_5_M(6, "expr-voice-5-m", "Male"),
+ EXPR_VOICE_5_F(7, "expr-voice-5-f", "Female");
+
+ companion object {
+ /**
+ * Get voice preset by speaker ID.
+ * @param sid Speaker ID (0-7)
+ * @return Corresponding AiVoicePreset, defaults to EXPR_VOICE_2_M if invalid
+ */
+ fun fromSid(sid: Int): AiVoicePreset =
+ entries.firstOrNull { it.sid == sid } ?: EXPR_VOICE_2_M
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/ModelAssetManager.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/ModelAssetManager.kt
new file mode 100644
index 00000000..7b632569
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/ModelAssetManager.kt
@@ -0,0 +1,240 @@
+package io.github.gmathi.novellibrary.service.tts
+
+import android.content.Context
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import java.io.File
+import java.io.FileOutputStream
+
+/**
+ * Manages AI TTS model assets bundled in the APK.
+ *
+ * Models are bundled in APK assets and copied to filesDir on first use.
+ * Contains VITS-Piper model files: *.onnx, tokens.txt, espeak-ng-data/
+ *
+ * Native JNI libraries (libonnxruntime.so, libsherpa-onnx-jni.so) are bundled
+ * in the APK via jniLibs/.
+ */
+class ModelAssetManager(private val context: Context) {
+
+ companion object {
+ // Default model
+ private const val DEFAULT_MODEL_DIR = "vits-piper-en_US-kusal-medium"
+
+ // Required model files (VITS-Piper doesn't need voices.bin)
+ private val REQUIRED_MODEL_FILES = listOf(
+ "tokens.txt"
+ )
+
+ // Required directories
+ private const val ESPEAK_DATA_DIR = "espeak-ng-data"
+ }
+
+ enum class AssetStatus {
+ NOT_DOWNLOADED,
+ READY,
+ CORRUPT
+ }
+
+ /**
+ * Check if all model files are present and valid for the specified model.
+ *
+ * @param modelDir Model directory name (e.g., "vits-piper-en_US-kusal-medium")
+ * @return Current status of the asset pack
+ */
+ fun getAssetStatus(modelDir: String = DEFAULT_MODEL_DIR): AssetStatus {
+ val modelDirFile = getModelDirectoryFile(modelDir)
+
+ if (!modelDirFile.exists()) {
+ return AssetStatus.NOT_DOWNLOADED
+ }
+
+ // Check for any .onnx file (VITS-Piper model)
+ val onnxFiles = modelDirFile.listFiles { file -> file.name.endsWith(".onnx") }
+ val hasOnnxModel = onnxFiles?.isNotEmpty() == true
+
+ // Check all required model files
+ val allFilesPresent = REQUIRED_MODEL_FILES.all { fileName ->
+ val file = File(modelDirFile, fileName)
+ file.exists() && file.length() > 0
+ }
+
+ // Check espeak-ng-data directory
+ val espeakDir = File(modelDirFile, ESPEAK_DATA_DIR)
+ val espeakDataPresent = espeakDir.exists() && espeakDir.isDirectory &&
+ (espeakDir.listFiles()?.isNotEmpty() == true)
+
+ return if (hasOnnxModel && allFilesPresent && espeakDataPresent) {
+ AssetStatus.READY
+ } else {
+ AssetStatus.CORRUPT
+ }
+ }
+
+ /**
+ * Get the directory path where model files are stored.
+ *
+ * @param modelDir Model directory name (e.g., "vits-piper-en_US-kusal-medium")
+ * @return Absolute path to the model directory
+ */
+ fun getModelDirectory(modelDir: String = DEFAULT_MODEL_DIR): String {
+ return getModelDirectoryFile(modelDir).absolutePath
+ }
+
+ private fun getModelDirectoryFile(modelDir: String = DEFAULT_MODEL_DIR): File {
+ return File(context.filesDir, modelDir)
+ }
+
+ /**
+ * Copy model files from APK assets to filesDir if not already present.
+ * This is needed because Sherpa-ONNX requires filesystem paths, not asset paths.
+ *
+ * @param modelDir Model directory name (e.g., "vits-piper-en_US-kusal-medium")
+ * @return Result indicating success or failure
+ */
+ suspend fun copyModelsFromAssets(modelDir: String = DEFAULT_MODEL_DIR): Result = withContext(Dispatchers.IO) {
+ try {
+ val modelDirFile = getModelDirectoryFile(modelDir)
+
+ // If models already exist and are valid, skip copying
+ if (getAssetStatus(modelDir) == AssetStatus.READY) {
+ android.util.Log.d("ModelAssetManager", "Models already present and valid, skipping copy")
+ return@withContext Result.success(Unit)
+ }
+
+ android.util.Log.d("ModelAssetManager", "Starting model copy from assets to ${modelDirFile.absolutePath}")
+
+ // Create model directory
+ if (!modelDirFile.exists()) {
+ val created = modelDirFile.mkdirs()
+ android.util.Log.d("ModelAssetManager", "Created model directory: $created")
+ }
+
+ // Copy all files from assets/[modelDir]/ to filesDir
+ val assetManager = context.assets
+ val assetPath = modelDir
+
+ // Check if asset path exists
+ val rootFiles = assetManager.list(assetPath)
+ if (rootFiles == null || rootFiles.isEmpty()) {
+ throw IllegalStateException("Asset path '$assetPath' not found or empty in APK")
+ }
+
+ android.util.Log.d("ModelAssetManager", "Found ${rootFiles.size} items in assets/$assetPath")
+
+ fun copyAssetFolder(assetPath: String, targetDir: File) {
+ try {
+ val files = assetManager.list(assetPath) ?: emptyArray()
+
+ for (filename in files) {
+ try {
+ val fullAssetPath = "$assetPath/$filename"
+ val targetFile = File(targetDir, filename)
+
+ // Check if it's a directory by trying to list its contents
+ val subFiles = assetManager.list(fullAssetPath)
+ if (subFiles != null && subFiles.isNotEmpty()) {
+ // It's a directory
+ android.util.Log.d("ModelAssetManager", "Creating directory: ${targetFile.absolutePath}")
+ targetFile.mkdirs()
+ copyAssetFolder(fullAssetPath, targetFile)
+ } else {
+ // It's a file
+ android.util.Log.d("ModelAssetManager", "Copying file: $fullAssetPath -> ${targetFile.absolutePath}")
+ assetManager.open(fullAssetPath).use { input ->
+ FileOutputStream(targetFile).use { output ->
+ input.copyTo(output)
+ }
+ }
+ }
+ } catch (e: Exception) {
+ android.util.Log.e("ModelAssetManager", "Error copying $filename: ${e.message}", e)
+ throw e
+ }
+ }
+ } catch (e: Exception) {
+ android.util.Log.e("ModelAssetManager", "Error in copyAssetFolder for $assetPath: ${e.message}", e)
+ throw e
+ }
+ }
+
+ copyAssetFolder(assetPath, modelDirFile)
+
+ android.util.Log.d("ModelAssetManager", "Model copy completed, verifying...")
+
+ // Verify the copy was successful
+ val status = getAssetStatus(modelDir)
+ if (status != AssetStatus.READY) {
+ throw IllegalStateException("Model files not valid after copying from assets. Status: $status")
+ }
+
+ android.util.Log.d("ModelAssetManager", "Model copy and verification successful")
+ Result.success(Unit)
+ } catch (e: Exception) {
+ android.util.Log.e("ModelAssetManager", "Failed to copy models from assets", e)
+ Result.failure(e)
+ }
+ }
+
+ /**
+ * Get total disk space used by model files in bytes.
+ *
+ * @param modelDir Model directory name (e.g., "vits-piper-en_US-kusal-medium")
+ * @return Total size in bytes
+ */
+ fun getAssetSizeBytes(modelDir: String = DEFAULT_MODEL_DIR): Long {
+ return calculateDirectorySize(getModelDirectoryFile(modelDir))
+ }
+
+ private fun calculateDirectorySize(directory: File): Long {
+ if (!directory.exists()) return 0L
+
+ var size = 0L
+ directory.walkTopDown().forEach { file ->
+ if (file.isFile) {
+ size += file.length()
+ }
+ }
+ return size
+ }
+
+ /**
+ * Verify integrity of model files.
+ * Checks that all required files are present with non-zero sizes.
+ *
+ * @param modelDir Model directory name (e.g., "vits-piper-en_US-kusal-medium")
+ * @return true if all files are valid, false otherwise
+ */
+ fun verifyIntegrity(modelDir: String = DEFAULT_MODEL_DIR): Boolean {
+ return getAssetStatus(modelDir) == AssetStatus.READY
+ }
+
+ /**
+ * Delete all model files from storage for the specified model.
+ * Models will be re-copied from APK assets on next use.
+ *
+ * @param modelDir Model directory name (e.g., "vits-piper-en_US-kusal-medium")
+ * @return true if deletion was successful, false otherwise
+ */
+ fun deleteAssets(modelDir: String = DEFAULT_MODEL_DIR): Boolean {
+ val modelDirFile = getModelDirectoryFile(modelDir)
+
+ if (modelDirFile.exists()) {
+ return modelDirFile.deleteRecursively()
+ }
+
+ return true
+ }
+
+ /**
+ * Get list of all available models in assets.
+ *
+ * @return List of model directory names
+ */
+ fun getAvailableModels(): List {
+ return listOf(
+ "vits-piper-en_US-kusal-medium",
+ "vits-piper-en_US-lessac-medium"
+ )
+ }
+}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSPlayer.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSPlayer.kt
index cf392008..2dda2c0c 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSPlayer.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSPlayer.kt
@@ -99,6 +99,13 @@ class TTSPlayer(private val context: Context,
private val silence: MediaPlayer = MediaPlayer.create(context, R.raw.silence).apply {
isLooping = true
}
+
+ // AI TTS engine mode
+ private var currentEngineMode: TtsEngineMode = TtsEngineMode.SYSTEM
+ private var aiEngineInitialized = false
+ private var aiEngineInitializing = false // prevents concurrent init attempts
+ private var aiPlayer: AiAudioPlayer? = null
+ private var aiSpeakThread: Thread? = null // tracked so stop()/destroy() can signal it
// Player metadata
lateinit var novel: Novel
@@ -121,6 +128,7 @@ class TTSPlayer(private val context: Context,
private lateinit var rawText: String
var lineNumber: Int = 0
var queuedLine: Int = 0
+ var pendingRestoreLine: Int = -1
var lines: MutableList = mutableListOf()
var cacheNextChapterLine: Int = -1
@@ -165,7 +173,11 @@ class TTSPlayer(private val context: Context,
tts.addEarcon(CHAPTER_CHANGE_EARCON, R.raw.chapter_change)
selectLanguage()
ttsReady = true
- Log.d(TAG, "TTS initialized")
+
+ // Read engine mode preference and initialize if needed
+ currentEngineMode = TtsEngineMode.fromKey(dataCenter.ttsPreferences.ttsEngine)
+
+ Log.d(TAG, "TTS initialized with engine mode: $currentEngineMode")
if (desiredState == STATE_PLAY && currentState != STATE_PLAY) {
Log.d(TAG, "Play was called before TTS initialization: Starting now")
start()
@@ -317,6 +329,15 @@ class TTSPlayer(private val context: Context,
metadata.trackNumber = (chapterIndex+1).toLong()
// Enable caching only for chapters longer than 42 lines
cacheNextChapterLine = if (lines.count() > 42) lines.count() shr 1 else -1
+ // Restore saved sentence position (e.g. after service was killed and restarted)
+ if (pendingRestoreLine > 0 && lines.isNotEmpty()) {
+ lineNumber = minOf(pendingRestoreLine, lines.size - 1)
+ queuedLine = lineNumber
+ pendingRestoreLine = -1
+ }
+ // Push updated content to the activity so UI refreshes without an explicit request
+ sendSentences()
+ sendLinkedPages()
}
//#endregion
@@ -334,9 +355,109 @@ class TTSPlayer(private val context: Context,
Log.d(TAG, "Attempting to start prior TTS initialization: Waiting for init")
return
}
+
+ // Always re-read engine mode from preferences so that changes made in
+ // settings while the service is alive are picked up on the next start().
+ currentEngineMode = TtsEngineMode.fromKey(dataCenter.ttsPreferences.ttsEngine)
+
+ // Initialize AI engine if needed
+ if (currentEngineMode == TtsEngineMode.AI_VITS && !aiEngineInitialized) {
+ if (aiEngineInitializing) {
+ Log.d(TAG, "AI TTS engine already initializing, will start on completion")
+ return
+ }
+ aiEngineInitializing = true
+ Log.d(TAG, "Starting AI TTS engine initialization via AiAudioPlayer")
+ launchIO {
+ try {
+ val modelAssetManager = ModelAssetManager(context)
+ val selectedModel = dataCenter.ttsPreferences.aiModel
+
+ // Try to get preloaded player first
+ val preloader = AiTtsPreloader.getInstance(context, dataCenter)
+ var player = preloader.getPreloadedPlayer(selectedModel)
+
+ if (player != null) {
+ Log.i(TAG, "Using preloaded AI TTS engine")
+ } else {
+ Log.d(TAG, "No preloaded engine available, initializing from scratch")
+
+ val copyResult = modelAssetManager.copyModelsFromAssets(selectedModel)
+ if (copyResult.isFailure) {
+ val error = copyResult.exceptionOrNull()
+ Log.e(TAG, "Failed to copy AI TTS model files: ${error?.message}", error)
+ aiEngineInitializing = false
+ if (!isDisposed) withUIContext {
+ context.showToastWithMain("Failed to prepare AI TTS models: ${error?.message}", Toast.LENGTH_LONG)
+ fallbackToSystemTts()
+ continueStart()
+ }
+ return@launchIO
+ }
+
+ val assetStatus = modelAssetManager.getAssetStatus(selectedModel)
+ if (assetStatus != ModelAssetManager.AssetStatus.READY) {
+ Log.e(TAG, "AI TTS model files not ready. Status: $assetStatus")
+ aiEngineInitializing = false
+ if (!isDisposed) withUIContext {
+ context.showToastWithMain("AI TTS model files are missing.", Toast.LENGTH_LONG)
+ fallbackToSystemTts()
+ continueStart()
+ }
+ return@launchIO
+ }
+
+ val modelDir = modelAssetManager.getModelDirectory(selectedModel)
+ Log.d(TAG, "Creating AiAudioPlayer with model dir: $modelDir")
+
+ player = AiAudioPlayer(modelDir)
+ val error = player.init()
+
+ if (error != null) {
+ Log.e(TAG, "AiAudioPlayer init failed: $error")
+ player.destroy()
+ aiEngineInitializing = false
+ if (!isDisposed) withUIContext {
+ context.showToastWithMain("AI TTS init failed: $error", Toast.LENGTH_LONG)
+ fallbackToSystemTts()
+ continueStart()
+ }
+ return@launchIO
+ }
+ }
+
+ player.speed = dataCenter.ttsPreferences.aiSpeed
+ player.callback = aiPlayerCallback
+ aiPlayer = player
+ aiEngineInitialized = true
+ aiEngineInitializing = false
+
+ if (!isDisposed) withUIContext {
+ Log.d(TAG, "AiAudioPlayer initialized successfully")
+ continueStart()
+ }
+ } catch (e: Exception) {
+ Log.e(TAG, "Error initializing AI TTS", e)
+ aiEngineInitializing = false
+ if (!isDisposed) withUIContext {
+ context.showToastWithMain("AI TTS error. Falling back to system TTS.", Toast.LENGTH_LONG)
+ fallbackToSystemTts()
+ continueStart()
+ }
+ }
+ }
+ return
+ }
+
+ continueStart()
+ }
+
+ private fun continueStart() {
currentState = STATE_PLAY
Log.d(TAG, "TTSPlayer.start()")
- updateVoiceConfig()
+ if (currentEngineMode == TtsEngineMode.SYSTEM) {
+ updateVoiceConfig()
+ }
mediaSession.setMetadata(metadata.build())
queuedLine = lineNumber
speakLine(TextToSpeech.QUEUE_ADD)
@@ -372,8 +493,11 @@ class TTSPlayer(private val context: Context,
if (currentState != STATE_LOADING) currentState = STATE_STOP
// Log.d(TAG, "TTSPlayer.stop()")
if (silence.isPlaying) silence.stop()
+ aiPlayer?.stop()
+ aiSpeakThread?.interrupt()
tts.stop()
queuedLine = lineNumber
+ dataCenter.internalPut { putInt(TTSService.STATE_LINE_NUMBER, lineNumber) }
setPlaybackState(withState)
}
@@ -384,6 +508,15 @@ class TTSPlayer(private val context: Context,
silence.release()
tts.stop()
+
+ // Release AI player if initialized
+ aiPlayer?.destroy()
+ aiPlayer = null
+ aiEngineInitialized = false
+ aiEngineInitializing = false
+ aiSpeakThread?.interrupt()
+ aiSpeakThread = null
+
tts.shutdown()
webLoadingJobs.forEach {
@@ -519,6 +652,13 @@ class TTSPlayer(private val context: Context,
//#region Playback
private fun speakLine(queueMode:Int = TextToSpeech.QUEUE_ADD) {
+ // AI TTS path: use AiAudioPlayer on a dedicated thread
+ if (currentEngineMode == TtsEngineMode.AI_VITS && aiPlayer != null) {
+ speakLineAi()
+ return
+ }
+
+ // System TTS path (original)
if (lines.isNotEmpty() && lineNumber < lines.size) {
if (lineNumber == cacheNextChapterLine) loadChapter(chapterIndex+1, true)
var mode = queueMode
@@ -550,6 +690,85 @@ class TTSPlayer(private val context: Context,
}
}
+ /**
+ * AI TTS playback: speak the current line using AiAudioPlayer on a background thread.
+ * Each line is spoken one at a time. The AiAudioPlayer.Callback advances to the next line.
+ */
+ private fun speakLineAi() {
+ if (lines.isEmpty() || lineNumber >= lines.size) {
+ onLastLine()
+ return
+ }
+ if (lineNumber == cacheNextChapterLine) loadChapter(chapterIndex + 1, true)
+
+ val line = lines[lineNumber]
+ val text = when (line.mode) {
+ TTSReadMode.ModeDialogue -> {
+ if (line.speaker.isNullOrEmpty()) line.line
+ else "${line.line} ${line.speaker}"
+ }
+ TTSReadMode.ModeSceneChange -> null // skip scene changes in AI mode
+ TTSReadMode.ModeRegular -> line.line
+ }
+
+ if (text.isNullOrBlank()) {
+ // Skip blank/scene-change lines
+ lineNumber++
+ queuedLine = lineNumber
+ speakLineAi()
+ return
+ }
+
+ val player = aiPlayer
+ if (player == null) {
+ Log.e(TAG, "AI player is null, cannot speak line - stopping playback")
+ stop()
+ return
+ }
+
+ queuedLine = lineNumber
+ onNextLine()
+
+ // Stop any in-progress synthesis before starting a new one
+ player.stop()
+
+ // Speak on a background thread — AiAudioPlayer.speak() blocks until done.
+ // Daemon so it never prevents JVM shutdown if synthesis hangs.
+ aiSpeakThread = Thread({
+ player.speak(text, TYPE_SENTENCE)
+ }, "ai_tts_speak").also { it.isDaemon = true; it.start() }
+ }
+
+ /** Callback from AiAudioPlayer — runs on the ai_tts_speak thread. */
+ private val aiPlayerCallback = object : AiAudioPlayer.Callback {
+ override fun onUtteranceStart(utteranceId: String) {
+ // nothing needed
+ }
+
+ override fun onUtteranceDone(utteranceId: String) {
+ if (desiredState != STATE_PLAY || isDisposed) {
+ Log.d(TAG, "onUtteranceDone: skipping - desiredState=$desiredState, isDisposed=$isDisposed")
+ return
+ }
+ // Advance to next line on the main thread
+ android.os.Handler(android.os.Looper.getMainLooper()).post {
+ if (desiredState != STATE_PLAY || isDisposed) {
+ Log.d(TAG, "onUtteranceDone post: skipping - desiredState=$desiredState, isDisposed=$isDisposed")
+ return@post
+ }
+ lineNumber++
+ Log.d(TAG, "AI TTS advancing to line $lineNumber of ${lines.size}")
+ speakLineAi()
+ }
+ }
+
+ override fun onError(utteranceId: String, message: String) {
+ Log.e(TAG, "AI TTS error: $message")
+ // Don't crash — just advance
+ onUtteranceDone(utteranceId)
+ }
+ }
+
private fun onNextLine() {
setPlaybackState(PlaybackStateCompat.STATE_PLAYING)
}
@@ -935,6 +1154,178 @@ class TTSPlayer(private val context: Context,
false
} else true
}
+
+ /**
+ * Update AI TTS voice preset in real-time.
+ * The new voice will be applied starting from the next synthesis request.
+ *
+ * Requirements: 8.4
+ */
+ @Deprecated("Use switchAiModel instead - voice presets don't apply to single-speaker models")
+ fun updateAiVoice(voiceId: Int) {
+ if (isDisposed) return
+ if (currentEngineMode != TtsEngineMode.AI_VITS) {
+ Log.w(TAG, "Cannot update AI voice when not using AI TTS engine")
+ return
+ }
+
+ Log.d(TAG, "Updating AI voice to: $voiceId")
+ // VITS-Piper has only 1 speaker per model, so voice preset is stored but not applied
+ dataCenter.ttsPreferences.aiVoicePreset = voiceId
+ }
+
+ /**
+ * Switch to a different AI TTS model.
+ * This will:
+ * 1. Stop current playback
+ * 2. Release the current AI player
+ * 3. Update the preference
+ * 4. Preload the new model in the background
+ * 5. Resume playback with the new model on next start()
+ *
+ * @param newModelId The new model ID (e.g., "vits-piper-en_US-lessac-medium")
+ */
+ fun switchAiModel(newModelId: String) {
+ if (isDisposed) return
+ if (currentEngineMode != TtsEngineMode.AI_VITS) {
+ Log.w(TAG, "Cannot switch AI model when not using AI TTS engine")
+ return
+ }
+
+ Log.i(TAG, "Switching AI model to: $newModelId")
+
+ // Preserve current reading position
+ val savedLineNumber = lineNumber
+ val savedChapterIndex = chapterIndex
+
+ // Stop current playback
+ val wasPlaying = isPlaying
+ stop()
+
+ // Release current AI player
+ if (aiEngineInitialized) {
+ aiPlayer?.destroy()
+ aiPlayer = null
+ aiEngineInitialized = false
+ }
+
+ // Update preference
+ dataCenter.ttsPreferences.aiModel = newModelId
+
+ // Preload the new model in the background
+ val preloader = AiTtsPreloader.getInstance(context, dataCenter)
+ preloader.switchModel(newModelId)
+
+ // Restore reading position
+ lineNumber = savedLineNumber
+ chapterIndex = savedChapterIndex
+
+ // Resume playback if it was playing
+ if (wasPlaying) {
+ start()
+ }
+ }
+
+ /**
+ * Update AI TTS speed in real-time.
+ * The new speed will be applied starting from the next synthesis request.
+ *
+ * Requirements: 8.5
+ */
+ fun updateAiSpeed(speed: Float) {
+ if (isDisposed) return
+ if (currentEngineMode != TtsEngineMode.AI_VITS) {
+ Log.w(TAG, "Cannot update AI speed when not using AI TTS engine")
+ return
+ }
+
+ Log.d(TAG, "Updating AI speed to: $speed (will apply to next sentence)")
+ aiPlayer?.speed = speed
+ dataCenter.ttsPreferences.aiSpeed = speed
+ }
+
+ /**
+ * Switch between AI TTS and system TTS engines.
+ * Stops current engine, initializes new engine, and resumes from current position.
+ *
+ * Requirements: 4.4
+ */
+ fun switchEngine(newEngineMode: TtsEngineMode) {
+ if (isDisposed) return
+ if (currentEngineMode == newEngineMode) {
+ Log.d(TAG, "Engine mode already set to $newEngineMode")
+ return
+ }
+
+ Log.d(TAG, "Switching engine from $currentEngineMode to $newEngineMode")
+
+ // Preserve current reading position
+ val savedLineNumber = lineNumber
+ val savedChapterIndex = chapterIndex
+
+ // Stop current playback
+ val wasPlaying = isPlaying
+ stop()
+
+ // Release old engine if switching away from AI
+ if (currentEngineMode == TtsEngineMode.AI_VITS && aiEngineInitialized) {
+ aiPlayer?.destroy()
+ aiPlayer = null
+ aiEngineInitialized = false
+ }
+
+ // Update engine mode
+ currentEngineMode = newEngineMode
+
+ // Update preference
+ dataCenter.ttsPreferences.ttsEngine = newEngineMode.key
+
+ // Restore reading position
+ lineNumber = savedLineNumber
+ chapterIndex = savedChapterIndex
+
+ // Resume playback if it was playing
+ if (wasPlaying) {
+ start()
+ }
+ }
+
+ /**
+ * Fall back to system TTS when AI TTS fails.
+ * Preserves reading position (lineNumber and chapterIndex).
+ *
+ * Requirements: 7.4
+ */
+ private fun fallbackToSystemTts() {
+ Log.d(TAG, "Falling back to system TTS")
+
+ // Release AI player
+ aiPlayer?.destroy()
+ aiPlayer = null
+ aiEngineInitialized = false
+
+ // Switch to system TTS
+ currentEngineMode = TtsEngineMode.SYSTEM
+
+ // Update preference
+ dataCenter.ttsPreferences.ttsEngine = TtsEngineMode.SYSTEM.key
+ }
+
+ /**
+ * Release AI engine resources in response to low memory signal.
+ * The engine will be re-initialized on next synthesis request.
+ *
+ * Requirements: 6.3
+ */
+ fun releaseAiEngineOnLowMemory() {
+ if (currentEngineMode == TtsEngineMode.AI_VITS && aiEngineInitialized) {
+ Log.d(TAG, "Releasing AI engine due to low memory")
+ aiPlayer?.destroy()
+ aiPlayer = null
+ aiEngineInitialized = false
+ // Engine will be re-initialized on next start() call
+ }
+ }
//#endregion
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSService.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSService.kt
index acc78501..3bced0ac 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSService.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSService.kt
@@ -63,6 +63,9 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
const val COMMAND_UPDATE_TIMER = "update_timer"
const val COMMAND_LOAD_BUFFER_LINK = "cmd_load_buffer_link"
const val COMMAND_RELOAD_CHAPTER = "cmd_reload_chapter"
+ const val ACTION_UPDATE_AI_VOICE = "update_ai_voice"
+ const val ACTION_UPDATE_AI_SPEED = "update_ai_speed"
+ const val ACTION_SWITCH_AI_MODEL = "switch_ai_model"
const val EVENT_SENTENCE_LIST = "event_$KEY_SENTENCES"
const val EVENT_LINKED_PAGES = "event_$LINKED_PAGES"
const val EVENT_TEXT_RANGE = "event_text_range"
@@ -74,6 +77,7 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
const val STATE_NOVEL_ID = STATE_PREFIX + NOVEL_ID
const val STATE_TRANSLATOR_SOURCE_NAME = STATE_PREFIX + TRANSLATOR_SOURCE_NAME
const val STATE_CHAPTER_INDEX = STATE_PREFIX + CHAPTER_INDEX
+ const val STATE_LINE_NUMBER = STATE_PREFIX + "lineNumber"
const val PITCH_MIN = 0.5f
const val PITCH_MAX = 2.0f
@@ -214,6 +218,26 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
super.onDestroy()
}
+ /**
+ * Handle low memory conditions by releasing AI TTS engine resources.
+ * The engine will be re-initialized on next synthesis request.
+ *
+ * Requirements: 6.3
+ */
+ override fun onTrimMemory(level: Int) {
+ super.onTrimMemory(level)
+ if (!::player.isInitialized) return
+ when (level) {
+ ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW,
+ ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL,
+ ComponentCallbacks2.TRIM_MEMORY_MODERATE,
+ ComponentCallbacks2.TRIM_MEMORY_COMPLETE -> {
+ Log.d(TAG, "Low memory signal received (level: $level), releasing AI TTS engine")
+ player.releaseAiEngineOnLowMemory()
+ }
+ }
+ }
+
override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot {
return BrowserRoot("NONE", null)
@@ -252,13 +276,16 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
ACTION_PLAY_PAUSE -> {
if (player.isDisposed || !initialized) {
val data = Bundle()
+ var savedLine = 0
// TODO: Fix it pausing due to MediaButtonReceiver calling onPause
player.dataCenter.internalGet {
data.putLong(NOVEL_ID, getLong(STATE_NOVEL_ID, 0))
val translator = getString(STATE_TRANSLATOR_SOURCE_NAME, null)
if (translator != null) data.putString(TRANSLATOR_SOURCE_NAME, translator)
data.putInt(CHAPTER_INDEX, getInt(STATE_CHAPTER_INDEX, 0))
+ savedLine = getInt(STATE_LINE_NUMBER, 0)
}
+ if (savedLine > 0) player.pendingRestoreLine = savedLine
actionStartup(data)
} else {
if (player.isPlaying) mediaCallback.onPause()
@@ -339,7 +366,6 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
} else {
startForeground(TTS_NOTIFICATION_ID, notificationBuilder.buildNotification(mediaSession.sessionToken))
}
- startForeground(TTS_NOTIFICATION_ID, notificationBuilder.buildNotification(mediaSession.sessionToken))
notification.start()
stopTimer.start()
@@ -376,6 +402,13 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
}
resumeOnFocus = false
+ // Release AI engine when service is unhooked (app backgrounded with no playback)
+ // Requirements: 6.2
+ if (!player.isPlaying) {
+ Log.d(TAG, "Service unhooked with no active playback, releasing AI engine")
+ player.releaseAiEngineOnLowMemory()
+ }
+
isHooked = false
return true
}
@@ -494,6 +527,24 @@ class TTSService : MediaBrowserServiceCompat(), AudioManager.OnAudioFocusChangeL
player.clearChapterCache()
player.loadCurrentChapter()
}
+ ACTION_UPDATE_AI_VOICE -> {
+ extras?.getInt("voiceId")?.let { voiceId ->
+ Log.d(TAG, "Updating AI voice to: $voiceId")
+ player.updateAiVoice(voiceId)
+ }
+ }
+ ACTION_UPDATE_AI_SPEED -> {
+ extras?.getFloat("speed")?.let { speed ->
+ Log.d(TAG, "Updating AI speed to: $speed")
+ player.updateAiSpeed(speed)
+ }
+ }
+ ACTION_SWITCH_AI_MODEL -> {
+ extras?.getString("modelId")?.let { modelId ->
+ Log.d(TAG, "Switching AI model to: $modelId")
+ player.switchAiModel(modelId)
+ }
+ }
}
super.onCommand(command, extras, cb)
}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSWrapper.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSWrapper.kt
index f467a7d7..5bf0b88a 100644
--- a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSWrapper.kt
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TTSWrapper.kt
@@ -187,33 +187,41 @@ class TTSWrapper(val context: Context, var callback: TTSWrapperCallback, private
tts.tts.speak(text, TextToSpeech.QUEUE_ADD, params, utteranceId)
return false
} else {
- if (cached) {
- tts.initDefaultTrack(internalId)
- begin = tts.frame
- markers.forEach { tts.addMarkerUnsafe(it) }
- tts.frame += frames
- tts.writer.addList(audio)
- tts.synthesizing = null
- return true
- } else {
- var retries = 0
- while (retries < 3) {
- try {
- if (tts.tts.synthesizeToFile(text, params, tts.devNull(), internalId) == TextToSpeech.ERROR) {
- // TTS engine bug: Randomly disconnect service for no reason
- tts.queue.addFirst(this)
- tts.synthesizing = null
- tts.restartTTS()
- return false
- }
- break
- } catch (crash: DeadObjectException) {
- // TTS engine bug: Randomly complain about dead objects
+ // System TTS path (AI TTS is handled by AiAudioPlayer in TTSPlayer)
+ return executeSystemSynthesis(tts)
+ }
+ }
+
+ /**
+ * Execute synthesis using the system TTS engine (existing logic).
+ */
+ private fun executeSystemSynthesis(tts: TTSWrapper): Boolean {
+ if (cached) {
+ tts.initDefaultTrack(internalId)
+ begin = tts.frame
+ markers.forEach { tts.addMarkerUnsafe(it) }
+ tts.frame += frames
+ tts.writer.addList(audio)
+ tts.synthesizing = null
+ return true
+ } else {
+ var retries = 0
+ while (retries < 3) {
+ try {
+ if (tts.tts.synthesizeToFile(text, params, tts.devNull(), internalId) == TextToSpeech.ERROR) {
+ // TTS engine bug: Randomly disconnect service for no reason
+ tts.queue.addFirst(this)
+ tts.synthesizing = null
+ tts.restartTTS()
+ return false
}
- retries++
+ break
+ } catch (crash: DeadObjectException) {
+ // TTS engine bug: Randomly complain about dead objects
}
- return false
+ retries++
}
+ return false
}
}
@@ -295,6 +303,7 @@ class TTSWrapper(val context: Context, var callback: TTSWrapperCallback, private
private var bytesPerFrame: Int = 1 // How many bytes 1 frame of sample data takes
private var bufferSize: Int = 4096 // The size of the immediate AudioTrack buffer
private val writer = BufferWriter()
+ private var writerThread: Thread? = null
private val silence: ByteArray = ByteArray(2205*2) // 100ms worth of 16BIT PCM at 2205hz
private var preventConsume: Boolean = false // Would prevent next command from being consumed during callbacks.
//private val activeConfig: TTSQueue = TTSQueue(TTSQueueType.Setup)
@@ -330,7 +339,10 @@ class TTSWrapper(val context: Context, var callback: TTSWrapperCallback, private
AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).setUsage(AudioAttributes.USAGE_MEDIA).build(),
earconId
)
-
+ if (player == null) {
+ Log.e(TTSPlayer.TAG, "Failed to create MediaPlayer for earcon '$earcon' (resource $resourceId)")
+ return
+ }
// Log.d(TTSPlayer.TAG, "Adding a new earcon: $earcon, duration: ${player.duration}")
earcons[earcon] = Earcon(player)
}
@@ -366,6 +378,10 @@ class TTSWrapper(val context: Context, var callback: TTSWrapperCallback, private
tts.shutdown()
disposed = true
if (!legacyMode) {
+ // Wait for the buffer writer thread to observe disposed=true and exit
+ // before releasing the AudioTrack it may still be writing to.
+ writerThread?.join(200)
+ writerThread = null
track?.release()
track = null
earcons.forEach { earcon -> earcon.value.player.release() }
@@ -587,9 +603,10 @@ class TTSWrapper(val context: Context, var callback: TTSWrapperCallback, private
callback.onInit(status)
if (!legacyMode) {
eventHandler = Handler(Looper.getMainLooper(), this)
- val thread = Thread(writer, "tts_buffer_writer")
- thread.priority = Thread.MAX_PRIORITY
- thread.start()
+ writerThread = Thread(writer, "tts_buffer_writer").also {
+ it.priority = Thread.MAX_PRIORITY
+ it.start()
+ }
}
if (synthesizing == null && !queue.isEmpty()) consumeNext()
}
diff --git a/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TtsEngineMode.kt b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TtsEngineMode.kt
new file mode 100644
index 00000000..cb92cae4
--- /dev/null
+++ b/app/src/main/java/io/github/gmathi/novellibrary/service/tts/TtsEngineMode.kt
@@ -0,0 +1,22 @@
+package io.github.gmathi.novellibrary.service.tts
+
+/**
+ * TTS engine mode selection.
+ */
+enum class TtsEngineMode(val key: String) {
+ /** Android system TextToSpeech engine */
+ SYSTEM("system"),
+
+ /** AI TTS using VITS-Piper via sherpa-onnx */
+ AI_VITS("ai_vits");
+
+ companion object {
+ /**
+ * Get engine mode from preference key.
+ * @param key Preference key string
+ * @return Corresponding TtsEngineMode, defaults to AI_VITS if key is invalid
+ */
+ fun fromKey(key: String): TtsEngineMode =
+ entries.firstOrNull { it.key == key } ?: AI_VITS
+ }
+}
diff --git a/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so b/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so
new file mode 100644
index 00000000..fa056400
Binary files /dev/null and b/app/src/main/jniLibs/arm64-v8a/libonnxruntime.so differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so
new file mode 100644
index 00000000..7763aaf1
Binary files /dev/null and b/app/src/main/jniLibs/arm64-v8a/libsherpa-onnx-jni.so differ
diff --git a/app/src/main/jniLibs/armeabi-v7a/libonnxruntime.so b/app/src/main/jniLibs/armeabi-v7a/libonnxruntime.so
new file mode 100644
index 00000000..f9d5c733
Binary files /dev/null and b/app/src/main/jniLibs/armeabi-v7a/libonnxruntime.so differ
diff --git a/app/src/main/jniLibs/armeabi-v7a/libsherpa-onnx-jni.so b/app/src/main/jniLibs/armeabi-v7a/libsherpa-onnx-jni.so
new file mode 100644
index 00000000..95e4644e
Binary files /dev/null and b/app/src/main/jniLibs/armeabi-v7a/libsherpa-onnx-jni.so differ
diff --git a/app/src/main/jniLibs/x86/libonnxruntime.so b/app/src/main/jniLibs/x86/libonnxruntime.so
new file mode 100644
index 00000000..289dcd0e
Binary files /dev/null and b/app/src/main/jniLibs/x86/libonnxruntime.so differ
diff --git a/app/src/main/jniLibs/x86/libsherpa-onnx-jni.so b/app/src/main/jniLibs/x86/libsherpa-onnx-jni.so
new file mode 100644
index 00000000..1fa5e2c9
Binary files /dev/null and b/app/src/main/jniLibs/x86/libsherpa-onnx-jni.so differ
diff --git a/app/src/main/jniLibs/x86_64/libonnxruntime.so b/app/src/main/jniLibs/x86_64/libonnxruntime.so
new file mode 100644
index 00000000..117ae6e6
Binary files /dev/null and b/app/src/main/jniLibs/x86_64/libonnxruntime.so differ
diff --git a/app/src/main/jniLibs/x86_64/libsherpa-onnx-jni.so b/app/src/main/jniLibs/x86_64/libsherpa-onnx-jni.so
new file mode 100644
index 00000000..65fc1a32
Binary files /dev/null and b/app/src/main/jniLibs/x86_64/libsherpa-onnx-jni.so differ
diff --git a/app/src/main/res/layout/fragment_text_to_speech_quick_settings.xml b/app/src/main/res/layout/fragment_text_to_speech_quick_settings.xml
index 66518523..62cf8dcf 100644
--- a/app/src/main/res/layout/fragment_text_to_speech_quick_settings.xml
+++ b/app/src/main/res/layout/fragment_text_to_speech_quick_settings.xml
@@ -83,6 +83,14 @@
android:gravity="center_vertical"
android:background="?android:attr/listDivider">
+
+
+
+
Use TTS to announce when last chapter has finished reading and no more chapters can be read.
+ TTS Engine
Playback
Remote control
Processing
Filters
Misc
+
+
+ TTS Engine
+ Choose between System TTS and AI TTS
+ System TTS
+ AI TTS (VITS-Piper)
+ AI Voice
+ Select AI voice model (Kusal or Lessac)
+ AI Speed
+ Adjust AI speech speed (0.5x - 3.0x)
+ AI Model
+ Manage AI TTS models
+ Test AI TTS
+ Open standalone test screen for AI TTS engine
+ AI TTS Test
+ Not Downloaded
+ Downloading: %d%%
+ Ready
+ Model size: %.1f MB
+ Download Model
+ Delete Model
+ Download AI TTS model to use AI voices. This will download approximately 50MB of data.
+ Delete AI TTS model? This will free up approximately %.1f MB of storage.
+ Model download failed: %s
+ Not enough storage space. Need at least 50MB free.
+ AI TTS is not supported on this device architecture
Scroll current sentence into view
Cover