termux-tts 1.5.4 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +17 -17
- package/README.md +174 -351
- package/README.pypi.md +54 -115
- package/bin/cli.js +51 -51
- package/index.js +5 -5
- package/package.json +65 -65
package/LICENSE
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
Apache License
|
|
2
|
-
Version 2.0, January 2004
|
|
3
|
-
http://www.apache.org/licenses/
|
|
4
|
-
|
|
5
|
-
Copyright 2026 UnoKim & AMEVA Open-Source Foundation
|
|
6
|
-
|
|
7
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
-
you may not use this file except in compliance with the License.
|
|
9
|
-
You may obtain a copy of the License at
|
|
10
|
-
|
|
11
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
-
|
|
13
|
-
Unless required by applicable law or agreed to in writing, software
|
|
14
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
-
See the License for the specific language governing permissions and
|
|
17
|
-
limitations under the License.
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
Copyright 2026 UnoKim & AMEVA Open-Source Foundation
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
package/README.md
CHANGED
|
@@ -1,351 +1,174 @@
|
|
|
1
|
-
# Termux-TTS
|
|
2
|
-
|
|
3
|
-
[](https://pypi.org/project/termux-tts/)
|
|
4
|
-
[](https://pypi.org/project/termux-tts/)
|
|
5
|
-
[](https://www.npmjs.com/package/termux-tts)
|
|
6
|
-
[](https://github.com/uno-km/termux-tts)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
---
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
$$\text{VkPhysicalDeviceLimits.maxBufferSize} = 33,554,432 \text{ Bytes} (32 \text{ MB})$$
|
|
176
|
-
|
|
177
|
-
Termux-TTS formally documents this mobile silicon boundary and implements temporal chunk tiling ($T_{\text{chunk}} \le 819$ frames) to safely bypass the 32MB ceiling, while Piper VITS operates with on-chip SRAM kernels (<8MB) guaranteeing 100% stable execution across all devices.
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## 7. Installation & Automated Provisioning
|
|
182
|
-
|
|
183
|
-
### 7.1 Standard Package Installation
|
|
184
|
-
```bash
|
|
185
|
-
# Python Package (PyPI)
|
|
186
|
-
pip install termux-tts
|
|
187
|
-
|
|
188
|
-
# Node.js / TypeScript Package (NPM)
|
|
189
|
-
npm install termux-tts
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### 7.2 Prerequisites on Android Termux
|
|
193
|
-
```bash
|
|
194
|
-
pkg update && pkg install -y termux-api pulseaudio sox clang
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
### 7.3 Automated 1-Click Provisioning
|
|
198
|
-
```bash
|
|
199
|
-
# 1. Provision Default Models (Korean KSS + English Lessac)
|
|
200
|
-
termux-tts install
|
|
201
|
-
|
|
202
|
-
# 2. Provision Studio Vulkan High-Resolution Tier (FP16, 22.05kHz)
|
|
203
|
-
termux-tts install --tier high
|
|
204
|
-
|
|
205
|
-
# 3. On-Demand Language Model Provisioning
|
|
206
|
-
termux-tts install --models hi # Hindi (Piper Swara)
|
|
207
|
-
termux-tts install --models ja # Japanese (Piper Hina)
|
|
208
|
-
termux-tts install --models ru # Russian (Piper Dmitri)
|
|
209
|
-
termux-tts install --models zh # Chinese (AISHELL3)
|
|
210
|
-
termux-tts install --models all # All 9 official languages
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## 8. CLI Ergonomics & Developer Canon
|
|
216
|
-
|
|
217
|
-
### 8.1 Zero-Config CLI Recipes
|
|
218
|
-
```bash
|
|
219
|
-
# 1. Direct Synthesis with Speaker Output (Top-Level Command)
|
|
220
|
-
termux-tts "Hello world! This is on-device speech synthesis." --play
|
|
221
|
-
|
|
222
|
-
# 2. Pure Vulkan GPU Hardware Synthesis
|
|
223
|
-
termux-tts synth -e vulkan --tier high -t "Operating at full hardware capacity." -o speech.wav --play
|
|
224
|
-
|
|
225
|
-
# 3. Instant Zero-Dependency DSP Formant Mode
|
|
226
|
-
termux-tts synth -e dsp -p ultra -t "Zero dependency parametric speech synthesis." -o dsp.wav
|
|
227
|
-
|
|
228
|
-
# 4. Direct Android System Native Broadcast
|
|
229
|
-
termux-tts speak -t "System notification broadcast." -l en
|
|
230
|
-
|
|
231
|
-
# 5. Full Hardware & Driver Diagnostics
|
|
232
|
-
termux-tts doctor
|
|
233
|
-
```
|
|
234
|
-
|
|
235
|
-
### 8.2 Python SDK Canon
|
|
236
|
-
```python
|
|
237
|
-
import termux_tts as tts
|
|
238
|
-
|
|
239
|
-
# Recipe 1: Pure Vulkan GPU Neural Engine
|
|
240
|
-
with tts.load(engine="vulkan", model_tier="high") as engine:
|
|
241
|
-
res = engine.synthesize("Validating deterministic tensor execution.", output="vulkan.wav")
|
|
242
|
-
print(f"Elapsed: {res.elapsed_ms:.1f}ms | RTF: {res.rtf:.4f}x | Device: {res.gpu_device}")
|
|
243
|
-
|
|
244
|
-
# Recipe 2: Resident C-API In-Memory Engine (<0.18x RTF)
|
|
245
|
-
with tts.load(engine="sherpa", model="vits-piper-en_US-lessac-medium") as engine:
|
|
246
|
-
res = engine.synthesize("Ultra-low latency in-memory synthesis.")
|
|
247
|
-
res.save("output_capi.wav")
|
|
248
|
-
|
|
249
|
-
# Recipe 3: Zero-Dependency DSP Formant Mode (<50ms, 0MB)
|
|
250
|
-
with tts.load(engine="dsp", preset="balanced") as engine:
|
|
251
|
-
res = engine.synthesize("Instant speech without external model weights.")
|
|
252
|
-
```
|
|
253
|
-
|
|
254
|
-
### 8.3 Node.js / TypeScript Canon
|
|
255
|
-
```javascript
|
|
256
|
-
const tts = require('termux-tts');
|
|
257
|
-
|
|
258
|
-
async function main() {
|
|
259
|
-
// 1. Initialize Vulkan GPU Engine
|
|
260
|
-
const engine = tts.load({ engine: 'vulkan', tier: 'high' });
|
|
261
|
-
const res = await engine.synthesize("High-performance speech synthesis on mobile hardware.", { output: "out.wav" });
|
|
262
|
-
console.log(`Generated: ${res.durationSec}s in ${res.elapsedMs}ms (RTF: ${res.rtf}x)`);
|
|
263
|
-
|
|
264
|
-
// 2. Hardware Diagnostics
|
|
265
|
-
const diag = await tts.doctor();
|
|
266
|
-
console.log(`Vulkan GPU Device: ${diag.device_name} (API: ${diag.api_version})`);
|
|
267
|
-
}
|
|
268
|
-
main();
|
|
269
|
-
```
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## 9. Heterogeneous Performance & Thermal Trade-offs
|
|
274
|
-
|
|
275
|
-
| Evaluation Metric | CPU Synthesis (ARM Cortex-A78) | Vulkan GPU Neural (Adreno 830) | Parametric DSP (0MB) |
|
|
276
|
-
| :--- | :--- | :--- | :--- |
|
|
277
|
-
| **Real-Time Factor (Medium)** | ~0.85x – 1.10x | **0.264x** (3.5x Faster) | **0.013x** (70x Faster) |
|
|
278
|
-
| **Real-Time Factor (Studio High)** | ~3.80x – 5.20x | **0.993x** (Real-time) | N/A (Formant Only) |
|
|
279
|
-
| **First-Token Latency (TTFA)** | ~450 ms | ~180 ms | **< 15 ms** |
|
|
280
|
-
| **CPU Big-Core Utilization** | 100% across 4 cores | < 15% (Driver Dispatch) | Single Core ~8% |
|
|
281
|
-
| **Thermal Dissipation** | High (Thermal Throttling at ~3min) | Low to Moderate | Negligible |
|
|
282
|
-
| **Memory Allocation** | ~85 MB Heap | ~38 MB (GPU VRAM Mapped) | **0 MB Disk / < 2MB RAM** |
|
|
283
|
-
|
|
284
|
-
---
|
|
285
|
-
|
|
286
|
-
## 10. 24/7 Unattended Background Execution Guide
|
|
287
|
-
|
|
288
|
-
Android aggressively terminates background user-space processes running inside Termux. Follow these three steps to guarantee uninterrupted 24/7 autonomous operation:
|
|
289
|
-
|
|
290
|
-
### 10.1 Stage 1: Termux CPU Wake-Lock
|
|
291
|
-
```bash
|
|
292
|
-
termux-wake-lock
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
### 10.2 Stage 2: Android Battery Optimization Exemption
|
|
296
|
-
1. Navigate to **Android Settings > Apps > Termux > Battery**.
|
|
297
|
-
2. Select **Unrestricted** (Disable battery optimization).
|
|
298
|
-
3. Grant **Notifications** and **Display over other apps** permissions.
|
|
299
|
-
|
|
300
|
-
### 10.3 Stage 3: ADB Phantom Process Killer Mitigation (Android 12+)
|
|
301
|
-
```bash
|
|
302
|
-
# Disable Android Phantom Process Killer
|
|
303
|
-
adb shell device_config put activity_manager max_phantom_processes 2147483647
|
|
304
|
-
adb shell settings put global settings_enable_monitor_phantom_procs false
|
|
305
|
-
|
|
306
|
-
# Verify configuration (Expected output: false)
|
|
307
|
-
adb shell settings get global settings_enable_monitor_phantom_procs
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
## 11. Hardware Requirements & Operational Limits
|
|
313
|
-
|
|
314
|
-
| Specification Metric | Minimum Requirements | Recommended Production Spec |
|
|
315
|
-
| :--- | :--- | :--- |
|
|
316
|
-
| **Operating System** | Android 9.0+ (API level 28+) / Linux 5.4+ | Android 12.0+ (API level 31+) |
|
|
317
|
-
| **Architecture** | ARM64 (aarch64) or x86_64 | ARM64-v8a / v9a |
|
|
318
|
-
| **System RAM** | 2 GB Total (DSP Tier: 512 MB) | 4 GB+ Unified RAM |
|
|
319
|
-
| **Storage Footprint** | 10 MB (DSP Only) / 80 MB (Neural) | 250 MB Free Flash Storage |
|
|
320
|
-
| **GPU Subsystem** | Vulkan 1.1 Conforming Mobile Driver | Qualcomm Adreno 660 / 730 / 830 or Mali-G78+ |
|
|
321
|
-
|
|
322
|
-
---
|
|
323
|
-
|
|
324
|
-
## 12. Open Source License
|
|
325
|
-
|
|
326
|
-
Termux-TTS is open-sourced under the **Apache License, Version 2.0**.
|
|
327
|
-
|
|
328
|
-
```text
|
|
329
|
-
Copyright 2026 Eunho Kim (@uno-km) & AMEVA Open-Source Foundation.
|
|
330
|
-
|
|
331
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
|
332
|
-
you may not use this file except in compliance with the License.
|
|
333
|
-
You may obtain a copy of the License at
|
|
334
|
-
|
|
335
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
|
336
|
-
|
|
337
|
-
Unless required by applicable law or agreed to in writing, software
|
|
338
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
|
339
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
340
|
-
See the License for the specific language governing permissions and
|
|
341
|
-
limitations under the License.
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
---
|
|
345
|
-
|
|
346
|
-
## 13. Official Documentation & Ecosystem Portals
|
|
347
|
-
|
|
348
|
-
- **Official Documentation Portal**: [https://uno-km.vercel.app/lib/tts/](https://uno-km.vercel.app/lib/tts/)
|
|
349
|
-
- **GitHub Repository**: [https://github.com/uno-km/termux-tts](https://github.com/uno-km/termux-tts)
|
|
350
|
-
- **AMEVA Foundation Portal**: [https://uno-km.vercel.app/foundation/index.html](https://uno-km.vercel.app/foundation/index.html)
|
|
351
|
-
- **Ecosystem Metrics & Registry**: [https://uno-km.vercel.app/foundation/metrics](https://uno-km.vercel.app/foundation/metrics)
|
|
1
|
+
# Termux-TTS
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/termux-tts/)
|
|
4
|
+
[](https://pypi.org/project/termux-tts/)
|
|
5
|
+
[](https://www.npmjs.com/package/termux-tts)
|
|
6
|
+
[](https://github.com/uno-km/termux-tts)
|
|
7
|
+
|
|
8
|
+
> Production-Grade 4-Tier On-Device Speech Synthesis Framework (Multilingual Neural Orchestrator, Zero-Dependency DSP Formant & C++ Acceleration)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Architecture & Overview
|
|
13
|
+
|
|
14
|
+
Termux-TTS is an enterprise-grade, on-device text-to-speech framework optimized for mobile edge hardware and Android Termux environments. Built to eliminate heavy dependency stacks and fragile driver behaviors, it features a resilient 4-Tier architecture:
|
|
15
|
+
|
|
16
|
+
- **Multilingual Neural Orchestrator**: Dynamic cross-language code-switching mesh covering 9 official languages (Korean, English, Japanese, Chinese, Hindi, Russian, Spanish, French, German) with Unicode script tokenization and 50ms context-aware silence padding.
|
|
17
|
+
- **Resident C-API In-Memory Engine**: Direct C-API memory residency with `SherpaResidentManager` achieving sub-0.18x real-time factor with ARM NEON SIMD acceleration and zero subprocess lag.
|
|
18
|
+
- **Tier 1: Zero-Dependency Parametric DSP Formant Vocoder**: 0MB disk footprint, Rosenberg glottal pulse formulation, and 5-band biquad formant filters providing deterministic speech synthesis in under 50 milliseconds (RTF 0.013x).
|
|
19
|
+
- **Tier 2: Android System Native Voice Bridge**: Direct IPC integration to physical Samsung and Google speech engines via the Termux-API service layer.
|
|
20
|
+
- **Tier 3: Subprocess-Isolated Sherpa C++ CPU Engine**: Subprocess-isolated VITS acoustic modeling on ARM64 NEON with memory leak protection.
|
|
21
|
+
- **Tier 4: Pure Vulkan GPU Hardware Neural Engine**: High-performance GPU tensor synthesis via precompiled native C++ binaries (`sherpa-ncnn-offline-tts-vulkan`) running high-resolution studio models (`vits-piper-en_US-lessac-high-fp16`) with zero silent CPU fallback.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Empirical Hardware Benchmarks (Physical Devices)
|
|
26
|
+
|
|
27
|
+
Measurements gathered on physical Android 16 hardware running Termux ARM64:
|
|
28
|
+
|
|
29
|
+
| Target Device | Hardware Architecture | Synthesis Engine | Model Profile | Audio Length | Synthesis Time | Real-Time Factor (RTF) | Status |
|
|
30
|
+
| :--- | :--- | :--- | :--- | :--- | :---: | :---: | :---: |
|
|
31
|
+
| **Galaxy A53** | Exynos 1280 / ARM64 NEON | Multilingual Neural C-API | `KSS + Lessac` (Bilingual) | 10.50 s | **1.82 s** | **0.173x** | Validated (5.78x RT) |
|
|
32
|
+
| **Galaxy S25** | Snapdragon 8 Elite / Adreno 830 | Vulkan GPU Neural | `lessac-high-fp16` | 6.70 s | **6.65 s** | **0.993x** | Validated |
|
|
33
|
+
| **Galaxy S25** | Snapdragon 8 Elite / Adreno 830 | Vulkan GPU Neural | `lessac-medium` | 4.59 s | **1.21 s** | **0.264x** | Validated (3.79x RT) |
|
|
34
|
+
| **Galaxy A35** | Exynos 1380 / Mali-G68 MP5 | Vulkan GPU Neural | `lessac-medium` | 4.52 s | **5.18 s** | **1.146x** | Validated |
|
|
35
|
+
| **ARM64 CPU** | Cortex-A78 / A55 | Parametric DSP | 5-Band Biquad | 4.15 s | **0.054 s** | **0.0130x** | Validated (76x RT) |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Installation & Automated Provisioning
|
|
40
|
+
|
|
41
|
+
### 1. Package Installation
|
|
42
|
+
```bash
|
|
43
|
+
# Python SDK & CLI
|
|
44
|
+
pip install termux-tts
|
|
45
|
+
|
|
46
|
+
# Node.js / TypeScript
|
|
47
|
+
npm install termux-tts
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. Automated Model Provisioning
|
|
51
|
+
Automate downloading and linking precompiled models to the official immutable path (`/data/data/com.termux/files/home/models/tts/`):
|
|
52
|
+
```bash
|
|
53
|
+
# Default lightweight installation (Korean KSS + English Lessac)
|
|
54
|
+
termux-tts install
|
|
55
|
+
|
|
56
|
+
# On-demand provision specific language models:
|
|
57
|
+
termux-tts install --models hi # Hindi (Piper Swara)
|
|
58
|
+
termux-tts install --models ja # Japanese (Piper Hina)
|
|
59
|
+
termux-tts install --models ru # Russian (Piper Dmitri)
|
|
60
|
+
termux-tts install --models zh # Chinese (AISHELL3)
|
|
61
|
+
termux-tts install --models all # All 9 official languages
|
|
62
|
+
|
|
63
|
+
# Provision Studio Vulkan GPU engine:
|
|
64
|
+
termux-tts install --tier high
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Quickstart
|
|
70
|
+
|
|
71
|
+
### Global Command-Line Interface (Zero-Config)
|
|
72
|
+
```bash
|
|
73
|
+
# 1. Zero-config synthesis with physical speaker playback
|
|
74
|
+
termux-tts "Hello 방가방가 나는 parrot 이라고 해." -o ~/out.wav --play
|
|
75
|
+
|
|
76
|
+
# 2. Flag-based syntax
|
|
77
|
+
termux-tts -t "Multilingual neural speech synthesis on device." --play
|
|
78
|
+
|
|
79
|
+
# 3. Force language pinning
|
|
80
|
+
termux-tts -l en -t "Pure English text output." --play
|
|
81
|
+
termux-tts -l ko -t "한국어 단독 신경망 음성 합성." --play
|
|
82
|
+
|
|
83
|
+
# 4. Instant DSP Formant synthesis (0MB footprint)
|
|
84
|
+
termux-tts synth -e dsp -t "Zero dependency DSP synthesis." -o dsp.wav
|
|
85
|
+
|
|
86
|
+
# 5. Direct Android system native speaker broadcast
|
|
87
|
+
termux-tts speak -t "Hardware speaker broadcast via Android service."
|
|
88
|
+
|
|
89
|
+
# 6. Hardware diagnostics
|
|
90
|
+
termux-tts doctor
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Python SDK
|
|
94
|
+
```python
|
|
95
|
+
import termux_tts as tts
|
|
96
|
+
|
|
97
|
+
# 1. Zero-Config Multilingual Neural Synthesis (Korean + English Code-Switching)
|
|
98
|
+
with tts.load() as engine:
|
|
99
|
+
result = engine.synthesize(
|
|
100
|
+
"Hello 방가방가 키키키키 나는 parrot 이라고 해.",
|
|
101
|
+
output="multilingual.wav"
|
|
102
|
+
)
|
|
103
|
+
print(f"Generated {result.duration_sec:.2f}s in {result.elapsed_ms:.1f}ms (RTF: {result.rtf:.4f}x)")
|
|
104
|
+
|
|
105
|
+
# 2. Pure Vulkan GPU Neural Synthesis (Studio Tier)
|
|
106
|
+
with tts.load(engine="vulkan", model_tier="high") as engine:
|
|
107
|
+
result = engine.synthesize("Pure Vulkan neural execution on mobile.", output="speech.wav")
|
|
108
|
+
print(f"Synthesized in {result.elapsed_ms:.1f}ms (RTF: {result.rtf:.4f}x)")
|
|
109
|
+
|
|
110
|
+
# 3. Zero-Dependency DSP Formant Synthesis
|
|
111
|
+
with tts.load(engine="dsp", preset="balanced") as engine:
|
|
112
|
+
result = engine.synthesize("Instant speech without model downloads.", output="dsp.wav")
|
|
113
|
+
print(f"DSP Latency: {result.elapsed_ms:.1f}ms")
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Node.js / TypeScript
|
|
117
|
+
```typescript
|
|
118
|
+
import * as tts from 'termux-tts';
|
|
119
|
+
|
|
120
|
+
async function main() {
|
|
121
|
+
const engine = tts.load({ engine: 'vulkan', tier: 'high' });
|
|
122
|
+
const res = await engine.synthesize("High performance speech synthesis.", { output: "speech.wav" });
|
|
123
|
+
console.log(`Synthesized in ${res.elapsedMs}ms`);
|
|
124
|
+
}
|
|
125
|
+
main();
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Distributed Clustering & Memory Pooling (AMEVA-Cluster)
|
|
131
|
+
|
|
132
|
+
Termux-TTS natively integrates with **AMEVA-Cluster** (`pip install ameva-cluster`) for distributed speech synthesis across interconnected mobile nodes.
|
|
133
|
+
|
|
134
|
+
### 1. Install Cluster Runtime
|
|
135
|
+
```bash
|
|
136
|
+
pip install ameva-cluster
|
|
137
|
+
# or Node.js:
|
|
138
|
+
npm install @ameva/cluster
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 2. Launch Worker Node on Remote Phone
|
|
142
|
+
```bash
|
|
143
|
+
# On remote worker device (e.g. Galaxy A53):
|
|
144
|
+
ameva-cluster worker --port 50052
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 3. Distributed Speech Synthesis via Master Node
|
|
148
|
+
```bash
|
|
149
|
+
# Master CLI offloading neural vocoder synthesis:
|
|
150
|
+
termux-tts synthesize "Clustering active across distributed phone fleet." \
|
|
151
|
+
--rpc 192.0.2.10:50052,192.0.2.11:50052 \
|
|
152
|
+
-o cluster_output.wav
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
```python
|
|
156
|
+
import termux_tts as tts
|
|
157
|
+
|
|
158
|
+
# Python SDK Distributed TTS
|
|
159
|
+
with tts.load(cluster_rpc_servers="192.0.2.10:50052,192.0.2.11:50052") as engine:
|
|
160
|
+
result = engine.synthesize("Distributed TTS voice synthesis active.", output="distributed.wav")
|
|
161
|
+
print(f"Elapsed: {result.elapsed_ms:.1f}ms")
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Official Documentation & Benchmarks
|
|
167
|
+
- [Official Architecture & API Reference](https://uno-km.vercel.app/lib/tts/)
|
|
168
|
+
- [Ecosystem Metrics & Registry Stats](https://uno-km.vercel.app/foundation/metrics)
|
|
169
|
+
- [AMEVA Open-Source Foundation Portal](https://uno-km.vercel.app/foundation/index.html)
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## License
|
|
174
|
+
Licensed under the Apache-2.0 License. Copyright (c) 2026 Eunho Kim ([@uno-km](https://github.com/uno-km)).
|
package/README.pypi.md
CHANGED
|
@@ -1,115 +1,54 @@
|
|
|
1
|
-
# Termux-TTS (
|
|
2
|
-
|
|
3
|
-
[](https://pypi.org/project/termux-tts/)
|
|
4
|
-
[](https://pypi.org/project/termux-tts/)
|
|
5
|
-
[](https://github.com/uno-km/termux-tts)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
1.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
Termux-TTS v1.5.0 enforces direct binding to the vendor Android Bionic Vulkan loader (`/system/lib64/libvulkan.so`), unlocking true hardware compute queues across **Qualcomm Adreno** and **ARM Mali** silicon.
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## Empirical Hardware Benchmarks (Physical Android 16 Fleet)
|
|
60
|
-
|
|
61
|
-
| Target Device | SoC / Hardware GPU Silicon | Vulkan Driver ABI | Audio Length | Synthesis Time | Real-Time Factor (RTF) | Status |
|
|
62
|
-
| :--- | :--- | :---: | :---: | :---: | :---: | :--- |
|
|
63
|
-
| **Galaxy S21** | Samsung Exynos 2100 / **ARM Mali-G78** (`0x9800000`) | Vulkan 1.1 (`/system/lib64`) | 4.25 s | **9,371 ms** | **2.2055x** | Validated (Native GPU) |
|
|
64
|
-
| **Galaxy S25** | Qualcomm Snapdragon 8 Elite / **Adreno 830** (`0x80320040`) | Vulkan 1.3 (`/system/lib64`) | 4.25 s | **16,208 ms** | **3.8145x** | Validated (Native GPU) |
|
|
65
|
-
| **Galaxy S22** | Qualcomm Snapdragon 8 Gen 1 / **Adreno 730** (`0x80267062`) | Vulkan 1.1 (`/system/lib64`) | 4.27 s | **38,092 ms** | **8.9159x** | Validated (Native GPU) |
|
|
66
|
-
| **Galaxy A35** | Samsung Exynos 1380 / **ARM Mali-G68 MP5** (`0x9801000`) | Vulkan 1.1 (`/system/lib64`) | 4.27 s | **51,912 ms** | **12.1505x** | Validated (Native GPU) |
|
|
67
|
-
| **Heterogeneous CPU** | Cortex-A78 / A55 Multi-Core | Sherpa C++ NEON SIMD | 4.25 s | **1,850 ms** | **0.4350x** | Validated (CPU Reference) |
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Quickstart
|
|
72
|
-
|
|
73
|
-
```python
|
|
74
|
-
import termux_tts as tts
|
|
75
|
-
|
|
76
|
-
# 1. Pure Vulkan GPU Hardware Synthesis (Studio High FP16)
|
|
77
|
-
with tts.load(engine="vulkan", model_tier="high") as engine:
|
|
78
|
-
result = engine.synthesize("Operating at full hardware capacity.", output="speech.wav")
|
|
79
|
-
print(f"Elapsed: {result.elapsed_ms:.1f}ms (RTF: {result.rtf:.4f}x) | Device: {result.gpu_device}")
|
|
80
|
-
|
|
81
|
-
# 2. Resident C-API In-Memory Multilingual Engine (<0.18x RTF)
|
|
82
|
-
with tts.load(engine="sherpa", model="vits-piper-en_US-lessac-medium") as engine:
|
|
83
|
-
result = engine.synthesize("Ultra-low latency in-memory synthesis.")
|
|
84
|
-
result.save("speech_capi.wav")
|
|
85
|
-
|
|
86
|
-
# 3. Instant Zero-Dependency DSP Formant Mode (<50ms, 0MB)
|
|
87
|
-
with tts.load(engine="dsp", preset="balanced") as engine:
|
|
88
|
-
result = engine.synthesize("Instant speech without external model weights.")
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## Installation & Automated Provisioning
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
# Install Python package
|
|
97
|
-
pip install termux-tts
|
|
98
|
-
|
|
99
|
-
# 1-Click Provision Default Models (Korean KSS + English Lessac)
|
|
100
|
-
termux-tts install
|
|
101
|
-
|
|
102
|
-
# 1-Click Provision Studio Vulkan High-Resolution Tier (FP16, 22.05kHz)
|
|
103
|
-
termux-tts install --tier high
|
|
104
|
-
|
|
105
|
-
# Synthesize speech directly via CLI:
|
|
106
|
-
termux-tts "Hello world! On-device neural speech synthesis." --play
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Documentation & Foundation Ecosystem
|
|
112
|
-
|
|
113
|
-
- **Official Documentation Portal**: [https://uno-km.vercel.app/lib/tts/](https://uno-km.vercel.app/lib/tts/)
|
|
114
|
-
- **GitHub Repository**: [https://github.com/uno-km/termux-tts](https://github.com/uno-km/termux-tts)
|
|
115
|
-
- **AMEVA Foundation Portal**: [https://uno-km.vercel.app/foundation/index.html](https://uno-km.vercel.app/foundation/index.html)
|
|
1
|
+
# Termux-TTS (Python)
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/termux-tts/)
|
|
4
|
+
[](https://pypi.org/project/termux-tts/)
|
|
5
|
+
[](https://github.com/uno-km/termux-tts)
|
|
6
|
+
|
|
7
|
+
> Production-Grade 4-Tier On-Device Speech Synthesis Framework for Mobile & Edge (Zero-Dependency DSP Formant, C++ Vulkan GPU Neural Engine & Android Native Voice Bridge)
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pip install termux-tts
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 1-Click Automated Engine Provisioning
|
|
16
|
+
```bash
|
|
17
|
+
termux-tts install --tier high
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quickstart
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
import termux_tts as tts
|
|
24
|
+
|
|
25
|
+
# 1. Studio Vulkan GPU Neural Engine
|
|
26
|
+
with tts.load(engine="vulkan", model_tier="high") as engine:
|
|
27
|
+
result = engine.synthesize("Neural speech synthesis on mobile GPU.", output="speech.wav")
|
|
28
|
+
print(f"Elapsed: {result.elapsed_ms:.1f}ms (RTF: {result.rtf:.4f}x)")
|
|
29
|
+
|
|
30
|
+
# 2. Zero-Dependency DSP Formant Mode
|
|
31
|
+
with tts.load(engine="dsp", preset="balanced") as engine:
|
|
32
|
+
result = engine.synthesize("Instant speech generation.", output="dsp.wav")
|
|
33
|
+
print(f"DSP Latency: {result.elapsed_ms:.1f}ms")
|
|
34
|
+
|
|
35
|
+
# 3. Direct Android Native Speaker Output
|
|
36
|
+
with tts.load(engine="native", language="en") as engine:
|
|
37
|
+
engine.speak("Direct hardware speaker output.")
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Benchmarks (Physical Devices)
|
|
41
|
+
|
|
42
|
+
| Target Device | Hardware Architecture | Synthesis Engine | Real-Time Factor (RTF) | Status |
|
|
43
|
+
| :--- | :--- | :--- | :---: | :---: |
|
|
44
|
+
| **Galaxy S25** | Snapdragon 8 Elite / Adreno 830 | Vulkan GPU (`lessac-high-fp16`) | **0.993x** | Validated |
|
|
45
|
+
| **Galaxy S25** | Snapdragon 8 Elite / Adreno 830 | Vulkan GPU (`lessac-medium`) | **0.264x** | Validated |
|
|
46
|
+
| **Galaxy A35** | Exynos 1380 / Mali-G68 MP5 | Vulkan GPU (`lessac-medium`) | **1.146x** | Validated |
|
|
47
|
+
| **ARM64 CPU** | All Core Profiles | Parametric DSP Formant | **0.0130x** | Validated |
|
|
48
|
+
|
|
49
|
+
## Documentation
|
|
50
|
+
- [Official Documentation & API Reference](https://uno-km.vercel.app/lib/tts/)
|
|
51
|
+
- [GitHub Repository](https://github.com/uno-km/termux-tts)
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
Apache-2.0 License. Copyright (c) 2026 Eunho Kim (@uno-km).
|
package/bin/cli.js
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* AMEVA Standard Node.js CLI Runner for termux_tts.
|
|
4
|
-
* Automatically resolves Python 3 environment and dispatches to python -m termux_tts.
|
|
5
|
-
*/
|
|
6
|
-
const fs = require('fs');
|
|
7
|
-
const { spawn, execSync } = require('child_process');
|
|
8
|
-
|
|
9
|
-
function findPython() {
|
|
10
|
-
if (process.env.PYTHON && fs.existsSync(process.env.PYTHON)) {
|
|
11
|
-
return process.env.PYTHON;
|
|
12
|
-
}
|
|
13
|
-
const termuxBin = '/data/data/com.termux/files/usr/bin/python3';
|
|
14
|
-
if (fs.existsSync(termuxBin)) {
|
|
15
|
-
return termuxBin;
|
|
16
|
-
}
|
|
17
|
-
const termuxBinAlt = '/data/data/com.termux/files/usr/bin/python';
|
|
18
|
-
if (fs.existsSync(termuxBinAlt)) {
|
|
19
|
-
return termuxBinAlt;
|
|
20
|
-
}
|
|
21
|
-
const candidates = ['python3', 'python'];
|
|
22
|
-
for (const cmd of candidates) {
|
|
23
|
-
try {
|
|
24
|
-
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `command -v ${cmd}`;
|
|
25
|
-
const res = execSync(checkCmd, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
|
|
26
|
-
if (res) return cmd;
|
|
27
|
-
} catch (_) {}
|
|
28
|
-
}
|
|
29
|
-
return 'python3';
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const pythonBin = findPython();
|
|
33
|
-
const args = ['-m', 'termux_tts', ...process.argv.slice(2)];
|
|
34
|
-
|
|
35
|
-
const child = spawn(pythonBin, args, {
|
|
36
|
-
stdio: 'inherit',
|
|
37
|
-
env: process.env
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
child.on('error', (err) => {
|
|
41
|
-
console.error(`[${'termux_tts'}] Failed to spawn python process (${pythonBin}):`, err.message);
|
|
42
|
-
process.exit(1);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
child.on('exit', (code, signal) => {
|
|
46
|
-
if (signal) {
|
|
47
|
-
process.kill(process.pid, signal);
|
|
48
|
-
} else {
|
|
49
|
-
process.exit(code || 0);
|
|
50
|
-
}
|
|
51
|
-
});
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AMEVA Standard Node.js CLI Runner for termux_tts.
|
|
4
|
+
* Automatically resolves Python 3 environment and dispatches to python -m termux_tts.
|
|
5
|
+
*/
|
|
6
|
+
const fs = require('fs');
|
|
7
|
+
const { spawn, execSync } = require('child_process');
|
|
8
|
+
|
|
9
|
+
function findPython() {
|
|
10
|
+
if (process.env.PYTHON && fs.existsSync(process.env.PYTHON)) {
|
|
11
|
+
return process.env.PYTHON;
|
|
12
|
+
}
|
|
13
|
+
const termuxBin = '/data/data/com.termux/files/usr/bin/python3';
|
|
14
|
+
if (fs.existsSync(termuxBin)) {
|
|
15
|
+
return termuxBin;
|
|
16
|
+
}
|
|
17
|
+
const termuxBinAlt = '/data/data/com.termux/files/usr/bin/python';
|
|
18
|
+
if (fs.existsSync(termuxBinAlt)) {
|
|
19
|
+
return termuxBinAlt;
|
|
20
|
+
}
|
|
21
|
+
const candidates = ['python3', 'python'];
|
|
22
|
+
for (const cmd of candidates) {
|
|
23
|
+
try {
|
|
24
|
+
const checkCmd = process.platform === 'win32' ? `where ${cmd}` : `command -v ${cmd}`;
|
|
25
|
+
const res = execSync(checkCmd, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
|
|
26
|
+
if (res) return cmd;
|
|
27
|
+
} catch (_) {}
|
|
28
|
+
}
|
|
29
|
+
return 'python3';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const pythonBin = findPython();
|
|
33
|
+
const args = ['-m', 'termux_tts', ...process.argv.slice(2)];
|
|
34
|
+
|
|
35
|
+
const child = spawn(pythonBin, args, {
|
|
36
|
+
stdio: 'inherit',
|
|
37
|
+
env: process.env
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
child.on('error', (err) => {
|
|
41
|
+
console.error(`[${'termux_tts'}] Failed to spawn python process (${pythonBin}):`, err.message);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
child.on('exit', (code, signal) => {
|
|
46
|
+
if (signal) {
|
|
47
|
+
process.kill(process.pid, signal);
|
|
48
|
+
} else {
|
|
49
|
+
process.exit(code || 0);
|
|
50
|
+
}
|
|
51
|
+
});
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* termux-tts Node.js SDK Entrypoint
|
|
3
|
-
*/
|
|
4
|
-
const tts = require('./binding_node');
|
|
5
|
-
module.exports = tts;
|
|
1
|
+
/**
|
|
2
|
+
* termux-tts Node.js SDK Entrypoint
|
|
3
|
+
*/
|
|
4
|
+
const tts = require('./binding_node');
|
|
5
|
+
module.exports = tts;
|
package/package.json
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "termux-tts",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "On-device Text-to-Speech framework utilizing device resources (DSP Formant Vocoder, ONNX Neural Runtime & Android Native Voice)",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"termux-tts": "bin/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"index.js",
|
|
11
|
-
"bin",
|
|
12
|
-
"binding_node",
|
|
13
|
-
"README.md",
|
|
14
|
-
"README.pypi.md",
|
|
15
|
-
"LICENSE"
|
|
16
|
-
],
|
|
17
|
-
"scripts": {
|
|
18
|
-
"test": "node binding_node/test_node.js",
|
|
19
|
-
"doctor": "node bin/cli.js doctor"
|
|
20
|
-
},
|
|
21
|
-
"keywords": [
|
|
22
|
-
"tts",
|
|
23
|
-
"text-to-speech",
|
|
24
|
-
"vulkan",
|
|
25
|
-
"vulkan-compute",
|
|
26
|
-
"vits",
|
|
27
|
-
"piper-tts",
|
|
28
|
-
"sherpa-onnx",
|
|
29
|
-
"sherpa-ncnn",
|
|
30
|
-
"termux",
|
|
31
|
-
"android",
|
|
32
|
-
"on-device-ai",
|
|
33
|
-
"speech-synthesis",
|
|
34
|
-
"edge-ai",
|
|
35
|
-
"formant-synthesis",
|
|
36
|
-
"vocoder",
|
|
37
|
-
"mobile-ai",
|
|
38
|
-
"adreno",
|
|
39
|
-
"mali-gpu",
|
|
40
|
-
"dsp",
|
|
41
|
-
"rosenberg-glottal",
|
|
42
|
-
"biquad-filter",
|
|
43
|
-
"expressive-speech",
|
|
44
|
-
"voice-cloning",
|
|
45
|
-
"audio-generation",
|
|
46
|
-
"ncnn",
|
|
47
|
-
"arm64",
|
|
48
|
-
"snapdragon",
|
|
49
|
-
"exynos",
|
|
50
|
-
"real-time-factor",
|
|
51
|
-
"low-latency",
|
|
52
|
-
"zero-dependency",
|
|
53
|
-
"voice-assistant",
|
|
54
|
-
"headless-audio",
|
|
55
|
-
"embedded-systems"
|
|
56
|
-
],
|
|
57
|
-
"author": "AMEVA Foundation",
|
|
58
|
-
"license": "Apache-2.0",
|
|
59
|
-
"dependencies": {
|
|
60
|
-
"@ameva/runtime": ">=2.1.0"
|
|
61
|
-
},
|
|
62
|
-
"engines": {
|
|
63
|
-
"node": ">=16.0.0"
|
|
64
|
-
}
|
|
65
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "termux-tts",
|
|
3
|
+
"version": "1.6.0",
|
|
4
|
+
"description": "On-device Text-to-Speech framework utilizing device resources (DSP Formant Vocoder, ONNX Neural Runtime & Android Native Voice)",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"termux-tts": "bin/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.js",
|
|
11
|
+
"bin",
|
|
12
|
+
"binding_node",
|
|
13
|
+
"README.md",
|
|
14
|
+
"README.pypi.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"test": "node binding_node/test_node.js",
|
|
19
|
+
"doctor": "node bin/cli.js doctor"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"tts",
|
|
23
|
+
"text-to-speech",
|
|
24
|
+
"vulkan",
|
|
25
|
+
"vulkan-compute",
|
|
26
|
+
"vits",
|
|
27
|
+
"piper-tts",
|
|
28
|
+
"sherpa-onnx",
|
|
29
|
+
"sherpa-ncnn",
|
|
30
|
+
"termux",
|
|
31
|
+
"android",
|
|
32
|
+
"on-device-ai",
|
|
33
|
+
"speech-synthesis",
|
|
34
|
+
"edge-ai",
|
|
35
|
+
"formant-synthesis",
|
|
36
|
+
"vocoder",
|
|
37
|
+
"mobile-ai",
|
|
38
|
+
"adreno",
|
|
39
|
+
"mali-gpu",
|
|
40
|
+
"dsp",
|
|
41
|
+
"rosenberg-glottal",
|
|
42
|
+
"biquad-filter",
|
|
43
|
+
"expressive-speech",
|
|
44
|
+
"voice-cloning",
|
|
45
|
+
"audio-generation",
|
|
46
|
+
"ncnn",
|
|
47
|
+
"arm64",
|
|
48
|
+
"snapdragon",
|
|
49
|
+
"exynos",
|
|
50
|
+
"real-time-factor",
|
|
51
|
+
"low-latency",
|
|
52
|
+
"zero-dependency",
|
|
53
|
+
"voice-assistant",
|
|
54
|
+
"headless-audio",
|
|
55
|
+
"embedded-systems"
|
|
56
|
+
],
|
|
57
|
+
"author": "AMEVA Foundation",
|
|
58
|
+
"license": "Apache-2.0",
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@ameva/runtime": ">=2.1.0"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=16.0.0"
|
|
64
|
+
}
|
|
65
|
+
}
|