agentvibes 2.0.3 → 2.0.6
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/.claude/commands/agent-vibes/provider.md +54 -0
- package/.claude/hooks/piper-download-voices.sh +133 -0
- package/.claude/hooks/piper-voice-manager.sh +227 -0
- package/.claude/hooks/play-tts-elevenlabs.sh +201 -0
- package/.claude/hooks/play-tts-piper.sh +175 -0
- package/.claude/hooks/play-tts.sh.backup-20251005-163851 +138 -0
- package/.claude/hooks/provider-commands.sh +374 -0
- package/.claude/hooks/provider-manager.sh +196 -0
- package/.claude/language-voices.yaml +372 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx +0 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx.json +493 -0
- package/.mcp-minimal.json +53 -0
- package/README.md +2 -2
- package/docs/ai-optimized-documentation-standards.md +306 -0
- package/docs/architecture/provider-system.md +574 -0
- package/docs/voice-mapping-format.md +218 -0
- package/package.json +1 -1
- package/scripts/piper-voice/README.md +145 -0
- package/scripts/piper-voice/wsl-install.sh +193 -0
- package/src/installer.js +248 -21
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# @fileoverview TTS Provider Management Functions
|
|
4
|
+
# @context Core provider abstraction layer for multi-provider TTS system
|
|
5
|
+
# @architecture Provides functions to get/set/list/validate TTS providers
|
|
6
|
+
# @dependencies None - pure bash implementation
|
|
7
|
+
# @entrypoints Sourced by play-tts.sh and provider management commands
|
|
8
|
+
# @patterns File-based state management with project-local and global fallback
|
|
9
|
+
# @related play-tts.sh, play-tts-elevenlabs.sh, GitHub Issue #25
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
# @function get_provider_config_path
|
|
13
|
+
# @intent Determine path to tts-provider.txt file
|
|
14
|
+
# @why Supports both project-local (.claude/) and global (~/.claude/) storage
|
|
15
|
+
# @returns Echoes path to provider config file
|
|
16
|
+
# @exitcode 0=always succeeds
|
|
17
|
+
# @sideeffects None
|
|
18
|
+
# @edgecases Creates parent directory if missing
|
|
19
|
+
get_provider_config_path() {
|
|
20
|
+
local provider_file
|
|
21
|
+
|
|
22
|
+
# Check project-local first
|
|
23
|
+
if [[ -n "$CLAUDE_PROJECT_DIR" ]] && [[ -d "$CLAUDE_PROJECT_DIR/.claude" ]]; then
|
|
24
|
+
provider_file="$CLAUDE_PROJECT_DIR/.claude/tts-provider.txt"
|
|
25
|
+
else
|
|
26
|
+
# Search up directory tree for .claude/
|
|
27
|
+
local current_dir="$PWD"
|
|
28
|
+
while [[ "$current_dir" != "/" ]]; do
|
|
29
|
+
if [[ -d "$current_dir/.claude" ]]; then
|
|
30
|
+
provider_file="$current_dir/.claude/tts-provider.txt"
|
|
31
|
+
break
|
|
32
|
+
fi
|
|
33
|
+
current_dir=$(dirname "$current_dir")
|
|
34
|
+
done
|
|
35
|
+
|
|
36
|
+
# Fallback to global if no project .claude found
|
|
37
|
+
if [[ -z "$provider_file" ]]; then
|
|
38
|
+
provider_file="$HOME/.claude/tts-provider.txt"
|
|
39
|
+
fi
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
echo "$provider_file"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# @function get_active_provider
|
|
46
|
+
# @intent Read currently active TTS provider from config file
|
|
47
|
+
# @why Central function for determining which provider to use
|
|
48
|
+
# @returns Echoes provider name (e.g., "elevenlabs", "piper")
|
|
49
|
+
# @exitcode 0=success
|
|
50
|
+
# @sideeffects None
|
|
51
|
+
# @edgecases Returns "elevenlabs" if file missing or empty (default)
|
|
52
|
+
get_active_provider() {
|
|
53
|
+
local provider_file
|
|
54
|
+
provider_file=$(get_provider_config_path)
|
|
55
|
+
|
|
56
|
+
# Read provider from file, default to elevenlabs if not found
|
|
57
|
+
if [[ -f "$provider_file" ]]; then
|
|
58
|
+
local provider
|
|
59
|
+
provider=$(cat "$provider_file" | tr -d '[:space:]')
|
|
60
|
+
if [[ -n "$provider" ]]; then
|
|
61
|
+
echo "$provider"
|
|
62
|
+
return 0
|
|
63
|
+
fi
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Default to elevenlabs
|
|
67
|
+
echo "elevenlabs"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
# @function set_active_provider
|
|
71
|
+
# @intent Write active provider to config file
|
|
72
|
+
# @why Allows runtime provider switching without restart
|
|
73
|
+
# @param $1 {string} provider - Provider name (e.g., "elevenlabs", "piper")
|
|
74
|
+
# @returns None (outputs success/error message)
|
|
75
|
+
# @exitcode 0=success, 1=invalid provider
|
|
76
|
+
# @sideeffects Writes to tts-provider.txt file
|
|
77
|
+
# @edgecases Creates file and parent directory if missing
|
|
78
|
+
set_active_provider() {
|
|
79
|
+
local provider="$1"
|
|
80
|
+
|
|
81
|
+
if [[ -z "$provider" ]]; then
|
|
82
|
+
echo "❌ Error: Provider name required"
|
|
83
|
+
echo "Usage: set_active_provider <provider_name>"
|
|
84
|
+
return 1
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
# Validate provider exists
|
|
88
|
+
if ! validate_provider "$provider"; then
|
|
89
|
+
echo "❌ Error: Provider '$provider' not found"
|
|
90
|
+
echo "Available providers:"
|
|
91
|
+
list_providers
|
|
92
|
+
return 1
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
local provider_file
|
|
96
|
+
provider_file=$(get_provider_config_path)
|
|
97
|
+
|
|
98
|
+
# Create directory if it doesn't exist
|
|
99
|
+
mkdir -p "$(dirname "$provider_file")"
|
|
100
|
+
|
|
101
|
+
# Write provider to file
|
|
102
|
+
echo "$provider" > "$provider_file"
|
|
103
|
+
|
|
104
|
+
echo "✓ Active provider set to: $provider"
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
# @function list_providers
|
|
108
|
+
# @intent List all available TTS providers
|
|
109
|
+
# @why Discover which providers are installed
|
|
110
|
+
# @returns Echoes provider names (one per line)
|
|
111
|
+
# @exitcode 0=success
|
|
112
|
+
# @sideeffects None
|
|
113
|
+
# @edgecases Returns empty if no play-tts-*.sh files found
|
|
114
|
+
list_providers() {
|
|
115
|
+
local script_dir
|
|
116
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
117
|
+
|
|
118
|
+
# Find all play-tts-*.sh files
|
|
119
|
+
local providers=()
|
|
120
|
+
shopt -s nullglob # Handle case where no files match
|
|
121
|
+
for file in "$script_dir"/play-tts-*.sh; do
|
|
122
|
+
if [[ -f "$file" ]] && [[ "$file" != *"play-tts.sh" ]]; then
|
|
123
|
+
# Extract provider name from filename (play-tts-elevenlabs.sh -> elevenlabs)
|
|
124
|
+
local basename
|
|
125
|
+
basename=$(basename "$file")
|
|
126
|
+
local provider
|
|
127
|
+
provider="${basename#play-tts-}"
|
|
128
|
+
provider="${provider%.sh}"
|
|
129
|
+
providers+=("$provider")
|
|
130
|
+
fi
|
|
131
|
+
done
|
|
132
|
+
shopt -u nullglob
|
|
133
|
+
|
|
134
|
+
# Output providers
|
|
135
|
+
if [[ ${#providers[@]} -eq 0 ]]; then
|
|
136
|
+
echo "⚠️ No providers found"
|
|
137
|
+
return 0
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
for provider in "${providers[@]}"; do
|
|
141
|
+
echo "$provider"
|
|
142
|
+
done
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
# @function validate_provider
|
|
146
|
+
# @intent Check if provider implementation exists
|
|
147
|
+
# @why Prevent errors from switching to non-existent provider
|
|
148
|
+
# @param $1 {string} provider - Provider name to validate
|
|
149
|
+
# @returns None
|
|
150
|
+
# @exitcode 0=provider exists, 1=provider not found
|
|
151
|
+
# @sideeffects None
|
|
152
|
+
# @edgecases Checks for corresponding play-tts-*.sh file
|
|
153
|
+
validate_provider() {
|
|
154
|
+
local provider="$1"
|
|
155
|
+
|
|
156
|
+
if [[ -z "$provider" ]]; then
|
|
157
|
+
return 1
|
|
158
|
+
fi
|
|
159
|
+
|
|
160
|
+
local script_dir
|
|
161
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
162
|
+
local provider_script="$script_dir/play-tts-${provider}.sh"
|
|
163
|
+
|
|
164
|
+
[[ -f "$provider_script" ]]
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
# @function get_provider_script_path
|
|
168
|
+
# @intent Get absolute path to provider implementation script
|
|
169
|
+
# @why Used by router to execute provider-specific logic
|
|
170
|
+
# @param $1 {string} provider - Provider name
|
|
171
|
+
# @returns Echoes absolute path to play-tts-*.sh file
|
|
172
|
+
# @exitcode 0=success, 1=provider not found
|
|
173
|
+
# @sideeffects None
|
|
174
|
+
get_provider_script_path() {
|
|
175
|
+
local provider="$1"
|
|
176
|
+
|
|
177
|
+
if [[ -z "$provider" ]]; then
|
|
178
|
+
echo "❌ Error: Provider name required" >&2
|
|
179
|
+
return 1
|
|
180
|
+
fi
|
|
181
|
+
|
|
182
|
+
local script_dir
|
|
183
|
+
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
184
|
+
local provider_script="$script_dir/play-tts-${provider}.sh"
|
|
185
|
+
|
|
186
|
+
if [[ ! -f "$provider_script" ]]; then
|
|
187
|
+
echo "❌ Error: Provider '$provider' not found at $provider_script" >&2
|
|
188
|
+
return 1
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
echo "$provider_script"
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
# AI NOTE: This file provides the core abstraction layer for multi-provider TTS.
|
|
195
|
+
# All provider state is managed through simple text files for simplicity and reliability.
|
|
196
|
+
# Project-local configuration takes precedence over global to support per-project providers.
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
# AgentVibes Multi-Provider Language Voice Mappings
|
|
2
|
+
# @fileoverview Provider-specific voice mappings for all 30 supported languages
|
|
3
|
+
# @context Maps each language to appropriate voices for ElevenLabs and Piper
|
|
4
|
+
# @architecture Language abstraction layer - separates language from provider
|
|
5
|
+
# @related language-manager.sh, play-tts-elevenlabs.sh, play-tts-piper.sh
|
|
6
|
+
|
|
7
|
+
languages:
|
|
8
|
+
english:
|
|
9
|
+
code: en
|
|
10
|
+
name: English
|
|
11
|
+
elevenlabs:
|
|
12
|
+
voice: Charlotte
|
|
13
|
+
voice_id: XB0fDUnXU5powFXDhCwa
|
|
14
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
15
|
+
piper:
|
|
16
|
+
voice: en_US-lessac-medium
|
|
17
|
+
locale: en_US
|
|
18
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/en/en_US/lessac/medium
|
|
19
|
+
notes: Default language, best quality on both providers
|
|
20
|
+
|
|
21
|
+
spanish:
|
|
22
|
+
code: es
|
|
23
|
+
name: Spanish
|
|
24
|
+
elevenlabs:
|
|
25
|
+
voice: Antoni
|
|
26
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
27
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
28
|
+
piper:
|
|
29
|
+
voice: es_ES-sharvard-medium
|
|
30
|
+
locale: es_ES
|
|
31
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/es/es_ES/sharvard/medium
|
|
32
|
+
notes: Castilian Spanish for Piper, multilingual for ElevenLabs
|
|
33
|
+
|
|
34
|
+
french:
|
|
35
|
+
code: fr
|
|
36
|
+
name: French
|
|
37
|
+
elevenlabs:
|
|
38
|
+
voice: Antoni
|
|
39
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
40
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
41
|
+
piper:
|
|
42
|
+
voice: fr_FR-siwis-medium
|
|
43
|
+
locale: fr_FR
|
|
44
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/fr/fr_FR/siwis/medium
|
|
45
|
+
notes: European French
|
|
46
|
+
|
|
47
|
+
german:
|
|
48
|
+
code: de
|
|
49
|
+
name: German
|
|
50
|
+
elevenlabs:
|
|
51
|
+
voice: Antoni
|
|
52
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
53
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
54
|
+
piper:
|
|
55
|
+
voice: de_DE-thorsten-medium
|
|
56
|
+
locale: de_DE
|
|
57
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/de/de_DE/thorsten/medium
|
|
58
|
+
notes: Standard German (Hochdeutsch)
|
|
59
|
+
|
|
60
|
+
italian:
|
|
61
|
+
code: it
|
|
62
|
+
name: Italian
|
|
63
|
+
elevenlabs:
|
|
64
|
+
voice: Antoni
|
|
65
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
66
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
67
|
+
piper:
|
|
68
|
+
voice: it_IT-riccardo-x_low
|
|
69
|
+
locale: it_IT
|
|
70
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/it/it_IT/riccardo/x_low
|
|
71
|
+
notes: Piper uses low quality for smaller size
|
|
72
|
+
|
|
73
|
+
portuguese:
|
|
74
|
+
code: pt
|
|
75
|
+
name: Portuguese
|
|
76
|
+
elevenlabs:
|
|
77
|
+
voice: Antoni
|
|
78
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
79
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
80
|
+
piper:
|
|
81
|
+
voice: pt_BR-faber-medium
|
|
82
|
+
locale: pt_BR
|
|
83
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/pt/pt_BR/faber/medium
|
|
84
|
+
notes: Brazilian Portuguese for Piper
|
|
85
|
+
|
|
86
|
+
polish:
|
|
87
|
+
code: pl
|
|
88
|
+
name: Polish
|
|
89
|
+
elevenlabs:
|
|
90
|
+
voice: Antoni
|
|
91
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
92
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
93
|
+
piper:
|
|
94
|
+
voice: pl_PL-mls_6892-low
|
|
95
|
+
locale: pl_PL
|
|
96
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/pl/pl_PL/mls_6892/low
|
|
97
|
+
notes: Piper uses low quality (smaller model)
|
|
98
|
+
|
|
99
|
+
turkish:
|
|
100
|
+
code: tr
|
|
101
|
+
name: Turkish
|
|
102
|
+
elevenlabs:
|
|
103
|
+
voice: Antoni
|
|
104
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
105
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
106
|
+
piper:
|
|
107
|
+
voice: tr_TR-dfki-medium
|
|
108
|
+
locale: tr_TR
|
|
109
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/tr/tr_TR/dfki/medium
|
|
110
|
+
notes: Turkish
|
|
111
|
+
|
|
112
|
+
russian:
|
|
113
|
+
code: ru
|
|
114
|
+
name: Russian
|
|
115
|
+
elevenlabs:
|
|
116
|
+
voice: Antoni
|
|
117
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
118
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
119
|
+
piper:
|
|
120
|
+
voice: ru_RU-ruslan-medium
|
|
121
|
+
locale: ru_RU
|
|
122
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/ru/ru_RU/ruslan/medium
|
|
123
|
+
notes: Russian
|
|
124
|
+
|
|
125
|
+
dutch:
|
|
126
|
+
code: nl
|
|
127
|
+
name: Dutch
|
|
128
|
+
elevenlabs:
|
|
129
|
+
voice: Antoni
|
|
130
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
131
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
132
|
+
piper:
|
|
133
|
+
voice: nl_NL-mls_5809-low
|
|
134
|
+
locale: nl_NL
|
|
135
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/nl/nl_NL/mls_5809/low
|
|
136
|
+
notes: Piper uses low quality (smaller model)
|
|
137
|
+
|
|
138
|
+
czech:
|
|
139
|
+
code: cs
|
|
140
|
+
name: Czech
|
|
141
|
+
elevenlabs:
|
|
142
|
+
voice: Antoni
|
|
143
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
144
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
145
|
+
piper:
|
|
146
|
+
voice: cs_CZ-jirka-medium
|
|
147
|
+
locale: cs_CZ
|
|
148
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/cs/cs_CZ/jirka/medium
|
|
149
|
+
notes: Czech
|
|
150
|
+
|
|
151
|
+
arabic:
|
|
152
|
+
code: ar
|
|
153
|
+
name: Arabic
|
|
154
|
+
elevenlabs:
|
|
155
|
+
voice: Antoni
|
|
156
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
157
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
158
|
+
piper:
|
|
159
|
+
fallback: english
|
|
160
|
+
notes: No native Piper support, falls back to English
|
|
161
|
+
|
|
162
|
+
chinese-simplified:
|
|
163
|
+
code: zh-cn
|
|
164
|
+
name: Chinese (Simplified)
|
|
165
|
+
elevenlabs:
|
|
166
|
+
voice: Antoni
|
|
167
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
168
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
169
|
+
piper:
|
|
170
|
+
fallback: english
|
|
171
|
+
notes: No native Piper support, falls back to English
|
|
172
|
+
|
|
173
|
+
chinese-traditional:
|
|
174
|
+
code: zh-tw
|
|
175
|
+
name: Chinese (Traditional)
|
|
176
|
+
elevenlabs:
|
|
177
|
+
voice: Antoni
|
|
178
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
179
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
180
|
+
piper:
|
|
181
|
+
fallback: english
|
|
182
|
+
notes: No native Piper support, falls back to English
|
|
183
|
+
|
|
184
|
+
japanese:
|
|
185
|
+
code: ja
|
|
186
|
+
name: Japanese
|
|
187
|
+
elevenlabs:
|
|
188
|
+
voice: Antoni
|
|
189
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
190
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
191
|
+
piper:
|
|
192
|
+
fallback: english
|
|
193
|
+
notes: No native Piper support, falls back to English
|
|
194
|
+
|
|
195
|
+
korean:
|
|
196
|
+
code: ko
|
|
197
|
+
name: Korean
|
|
198
|
+
elevenlabs:
|
|
199
|
+
voice: Antoni
|
|
200
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
201
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
202
|
+
piper:
|
|
203
|
+
fallback: english
|
|
204
|
+
notes: No native Piper support, falls back to English
|
|
205
|
+
|
|
206
|
+
hindi:
|
|
207
|
+
code: hi
|
|
208
|
+
name: Hindi
|
|
209
|
+
elevenlabs:
|
|
210
|
+
voice: Antoni
|
|
211
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
212
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
213
|
+
piper:
|
|
214
|
+
fallback: english
|
|
215
|
+
notes: No native Piper support, falls back to English
|
|
216
|
+
|
|
217
|
+
finnish:
|
|
218
|
+
code: fi
|
|
219
|
+
name: Finnish
|
|
220
|
+
elevenlabs:
|
|
221
|
+
voice: Antoni
|
|
222
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
223
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
224
|
+
piper:
|
|
225
|
+
voice: fi_FI-harri-medium
|
|
226
|
+
locale: fi_FI
|
|
227
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/fi/fi_FI/harri/medium
|
|
228
|
+
notes: Finnish
|
|
229
|
+
|
|
230
|
+
swedish:
|
|
231
|
+
code: sv
|
|
232
|
+
name: Swedish
|
|
233
|
+
elevenlabs:
|
|
234
|
+
voice: Antoni
|
|
235
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
236
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
237
|
+
piper:
|
|
238
|
+
voice: sv_SE-nst-medium
|
|
239
|
+
locale: sv_SE
|
|
240
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/sv/sv_SE/nst/medium
|
|
241
|
+
notes: Swedish
|
|
242
|
+
|
|
243
|
+
danish:
|
|
244
|
+
code: da
|
|
245
|
+
name: Danish
|
|
246
|
+
elevenlabs:
|
|
247
|
+
voice: Antoni
|
|
248
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
249
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
250
|
+
piper:
|
|
251
|
+
voice: da_DK-talesyntese-medium
|
|
252
|
+
locale: da_DK
|
|
253
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/da/da_DK/talesyntese/medium
|
|
254
|
+
notes: Danish
|
|
255
|
+
|
|
256
|
+
norwegian:
|
|
257
|
+
code: no
|
|
258
|
+
name: Norwegian
|
|
259
|
+
elevenlabs:
|
|
260
|
+
voice: Antoni
|
|
261
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
262
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
263
|
+
piper:
|
|
264
|
+
voice: no_NO-talesyntese-medium
|
|
265
|
+
locale: no_NO
|
|
266
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/no/no_NO/talesyntese/medium
|
|
267
|
+
notes: Norwegian Bokmål
|
|
268
|
+
|
|
269
|
+
romanian:
|
|
270
|
+
code: ro
|
|
271
|
+
name: Romanian
|
|
272
|
+
elevenlabs:
|
|
273
|
+
voice: Antoni
|
|
274
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
275
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
276
|
+
piper:
|
|
277
|
+
fallback: english
|
|
278
|
+
notes: No native Piper support, falls back to English
|
|
279
|
+
|
|
280
|
+
ukrainian:
|
|
281
|
+
code: uk
|
|
282
|
+
name: Ukrainian
|
|
283
|
+
elevenlabs:
|
|
284
|
+
voice: Antoni
|
|
285
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
286
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
287
|
+
piper:
|
|
288
|
+
voice: uk_UA-lada-x_low
|
|
289
|
+
locale: uk_UA
|
|
290
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/uk/uk_UA/lada/x_low
|
|
291
|
+
notes: Piper uses low quality (smaller model)
|
|
292
|
+
|
|
293
|
+
greek:
|
|
294
|
+
code: el
|
|
295
|
+
name: Greek
|
|
296
|
+
elevenlabs:
|
|
297
|
+
voice: Antoni
|
|
298
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
299
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
300
|
+
piper:
|
|
301
|
+
voice: el_GR-rapunzelina-low
|
|
302
|
+
locale: el_GR
|
|
303
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/el/el_GR/rapunzelina/low
|
|
304
|
+
notes: Piper uses low quality (smaller model)
|
|
305
|
+
|
|
306
|
+
bulgarian:
|
|
307
|
+
code: bg
|
|
308
|
+
name: Bulgarian
|
|
309
|
+
elevenlabs:
|
|
310
|
+
voice: Antoni
|
|
311
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
312
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
313
|
+
piper:
|
|
314
|
+
fallback: english
|
|
315
|
+
notes: No native Piper support, falls back to English
|
|
316
|
+
|
|
317
|
+
indonesian:
|
|
318
|
+
code: id
|
|
319
|
+
name: Indonesian
|
|
320
|
+
elevenlabs:
|
|
321
|
+
voice: Antoni
|
|
322
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
323
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
324
|
+
piper:
|
|
325
|
+
fallback: english
|
|
326
|
+
notes: No native Piper support, falls back to English
|
|
327
|
+
|
|
328
|
+
malay:
|
|
329
|
+
code: ms
|
|
330
|
+
name: Malay
|
|
331
|
+
elevenlabs:
|
|
332
|
+
voice: Antoni
|
|
333
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
334
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
335
|
+
piper:
|
|
336
|
+
fallback: english
|
|
337
|
+
notes: No native Piper support, falls back to English
|
|
338
|
+
|
|
339
|
+
filipino:
|
|
340
|
+
code: fil
|
|
341
|
+
name: Filipino
|
|
342
|
+
elevenlabs:
|
|
343
|
+
voice: Antoni
|
|
344
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
345
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
346
|
+
piper:
|
|
347
|
+
fallback: english
|
|
348
|
+
notes: No native Piper support, falls back to English
|
|
349
|
+
|
|
350
|
+
vietnamese:
|
|
351
|
+
code: vi
|
|
352
|
+
name: Vietnamese
|
|
353
|
+
elevenlabs:
|
|
354
|
+
voice: Antoni
|
|
355
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
356
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
357
|
+
piper:
|
|
358
|
+
voice: vi_VN-vais1000-medium
|
|
359
|
+
locale: vi_VN
|
|
360
|
+
preview: https://huggingface.co/rhasspy/piper-voices/tree/main/vi/vi_VN/vais1000/medium
|
|
361
|
+
notes: Vietnamese
|
|
362
|
+
|
|
363
|
+
tamil:
|
|
364
|
+
code: ta
|
|
365
|
+
name: Tamil
|
|
366
|
+
elevenlabs:
|
|
367
|
+
voice: Antoni
|
|
368
|
+
voice_id: ErXwobaYiN019PkySvjV
|
|
369
|
+
preview: https://elevenlabs.io/app/voice-library
|
|
370
|
+
piper:
|
|
371
|
+
fallback: english
|
|
372
|
+
notes: No native Piper support, falls back to English
|
|
Binary file
|