Map all available Piper voices and expand Makefile downloads
- Added 40+ Piper voice mappings to voice_to_speaker.default.yaml * 20 English US voices (libritts_r speakers + single-speaker models) * 9 English GB voices * All voices use proper naming convention (en_us_*, en_gb_*) * Kept OpenAI-compatible aliases (alloy, echo, fable, onyx, nova, shimmer) - Updated Makefile voices-piper target to download ALL voices: * 20 English US models (amy, arctic, bryce, danny, hfc_female, hfc_male, joe, john, kathleen, kristin, kusal, l2arctic, lessac, libritts, libritts_r, ljspeech, norman, reza_ibrahim, ryan, sam) * 9 English GB models (alan, alba, aru, cori, jenny_dioco, northern_english_male, semaine, southern_english_female, vctk) * Download function with error handling - Updated main 'voices' target to include Silero downloads 🦝 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
01e51b08b5
commit
a8865564ae
2 changed files with 202 additions and 22 deletions
63
Makefile
63
Makefile
|
|
@ -86,25 +86,56 @@ test:
|
|||
@echo "✅ Test complete! Playing audio..."
|
||||
@firefox /tmp/raccoon_test.mp3 || mpv /tmp/raccoon_test.mp3 || echo "Install firefox or mpv to play audio"
|
||||
|
||||
voices: voices-piper voices-xtts
|
||||
@echo "✅ All voices downloaded!"
|
||||
voices: voices-piper voices-xtts voices-silero
|
||||
@echo "✅ All voices downloaded (Piper, XTTS, Silero)!"
|
||||
|
||||
voices-piper:
|
||||
@echo "🎤 Downloading Piper voices with correct directory structure..."
|
||||
@echo "🎤 Downloading all Piper voices..."
|
||||
ssh $(REMOTE_USER)@$(REMOTE_HOST) "docker exec $(CONTAINER_NAME) bash -c '\
|
||||
mkdir -p /app/voices/en/en_US/libritts_r/medium && \
|
||||
cd /app/voices/en/en_US/libritts_r/medium && \
|
||||
curl -L https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx -o en_US-libritts_r-medium.onnx && \
|
||||
curl -L https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx.json -o en_US-libritts_r-medium.onnx.json && \
|
||||
mkdir -p /app/voices/en/en_GB/northern_english_male/medium && \
|
||||
cd /app/voices/en/en_GB/northern_english_male/medium && \
|
||||
curl -L https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_GB/northern_english_male/medium/en_GB-northern_english_male-medium.onnx -o en_GB-northern_english_male-medium.onnx && \
|
||||
curl -L https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_GB/northern_english_male/medium/en_GB-northern_english_male-medium.onnx.json -o en_GB-northern_english_male-medium.onnx.json'"
|
||||
@echo "📝 Updating voice_to_speaker.yaml with ABSOLUTE paths..."
|
||||
ssh $(REMOTE_USER)@$(REMOTE_HOST) "docker exec $(CONTAINER_NAME) bash -c '\
|
||||
sed -i \"s|model: voices/en_US-libritts_r-medium.onnx|model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx|g\" /app/config/voice_to_speaker.yaml && \
|
||||
sed -i \"s|model: voices/en_GB-northern_english_male-medium.onnx|model: /app/voices/en/en_GB/northern_english_male/medium/en_GB-northern_english_male-medium.onnx|g\" /app/config/voice_to_speaker.yaml'"
|
||||
@echo "✅ Piper voices installed with absolute paths!"
|
||||
set -e; \
|
||||
BASE_URL=\"https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0\"; \
|
||||
download_voice() { \
|
||||
local path=\"\$$1\"; \
|
||||
local name=\"\$$2\"; \
|
||||
mkdir -p \"/app/voices/\$$path\"; \
|
||||
cd \"/app/voices/\$$path\"; \
|
||||
echo \"Downloading \$$name...\"; \
|
||||
curl -f -L \"\$$BASE_URL/\$$path/\$$name.onnx\" -o \"\$$name.onnx\" || echo \"Failed to download \$$name.onnx\"; \
|
||||
curl -f -L \"\$$BASE_URL/\$$path/\$$name.onnx.json\" -o \"\$$name.onnx.json\" || echo \"Failed to download \$$name.onnx.json\"; \
|
||||
}; \
|
||||
echo \"=== Downloading English US voices ===\"; \
|
||||
download_voice \"en/en_US/libritts_r/medium\" \"en_US-libritts_r-medium\"; \
|
||||
download_voice \"en/en_US/amy/medium\" \"en_US-amy-medium\"; \
|
||||
download_voice \"en/en_US/arctic/medium\" \"en_US-arctic-medium\"; \
|
||||
download_voice \"en/en_US/bryce/medium\" \"en_US-bryce-medium\"; \
|
||||
download_voice \"en/en_US/danny/low\" \"en_US-danny-low\"; \
|
||||
download_voice \"en/en_US/hfc_female/medium\" \"en_US-hfc_female-medium\"; \
|
||||
download_voice \"en/en_US/hfc_male/medium\" \"en_US-hfc_male-medium\"; \
|
||||
download_voice \"en/en_US/joe/medium\" \"en_US-joe-medium\"; \
|
||||
download_voice \"en/en_US/john/medium\" \"en_US-john-medium\"; \
|
||||
download_voice \"en/en_US/kathleen/low\" \"en_US-kathleen-low\"; \
|
||||
download_voice \"en/en_US/kristin/medium\" \"en_US-kristin-medium\"; \
|
||||
download_voice \"en/en_US/kusal/medium\" \"en_US-kusal-medium\"; \
|
||||
download_voice \"en/en_US/l2arctic/medium\" \"en_US-l2arctic-medium\"; \
|
||||
download_voice \"en/en_US/lessac/medium\" \"en_US-lessac-medium\"; \
|
||||
download_voice \"en/en_US/libritts/high\" \"en_US-libritts-high\"; \
|
||||
download_voice \"en/en_US/ljspeech/medium\" \"en_US-ljspeech-medium\"; \
|
||||
download_voice \"en/en_US/norman/medium\" \"en_US-norman-medium\"; \
|
||||
download_voice \"en/en_US/reza_ibrahim/medium\" \"en_US-reza_ibrahim-medium\"; \
|
||||
download_voice \"en/en_US/ryan/high\" \"en_US-ryan-high\"; \
|
||||
download_voice \"en/en_US/sam/medium\" \"en_US-sam-medium\"; \
|
||||
echo \"=== Downloading English GB voices ===\"; \
|
||||
download_voice \"en/en_GB/northern_english_male/medium\" \"en_GB-northern_english_male-medium\"; \
|
||||
download_voice \"en/en_GB/alan/medium\" \"en_GB-alan-medium\"; \
|
||||
download_voice \"en/en_GB/alba/medium\" \"en_GB-alba-medium\"; \
|
||||
download_voice \"en/en_GB/aru/medium\" \"en_GB-aru-medium\"; \
|
||||
download_voice \"en/en_GB/cori/medium\" \"en_GB-cori-medium\"; \
|
||||
download_voice \"en/en_GB/jenny_dioco/medium\" \"en_GB-jenny_dioco-medium\"; \
|
||||
download_voice \"en/en_GB/semaine/medium\" \"en_GB-semaine-medium\"; \
|
||||
download_voice \"en/en_GB/southern_english_female/low\" \"en_GB-southern_english_female-low\"; \
|
||||
download_voice \"en/en_GB/vctk/medium\" \"en_GB-vctk-medium\"; \
|
||||
echo \"=== All Piper voices downloaded! ===\"'"
|
||||
@echo "✅ All Piper voices downloaded!"
|
||||
|
||||
voices-xtts:
|
||||
@echo "🎤 Downloading XTTS speaker samples..."
|
||||
|
|
|
|||
|
|
@ -1,16 +1,11 @@
|
|||
tts-1:
|
||||
some_other_voice_name_you_want:
|
||||
model: voices/choose your own model.onnx
|
||||
speaker: set your own speaker
|
||||
# OpenAI-compatible voice aliases (backward compatibility)
|
||||
alloy:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 79 # 64, 79, 80, 101, 130
|
||||
echo:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 134 # 52, 102, 134
|
||||
echo-alt:
|
||||
model: /app/voices/en_US-ryan-high.onnx
|
||||
speaker: # default speaker (DISABLED - model not included)
|
||||
fable:
|
||||
model: /app/voices/en/en_GB/northern_english_male/medium/en_GB-northern_english_male-medium.onnx
|
||||
speaker: # default speaker
|
||||
|
|
@ -23,6 +18,160 @@
|
|||
shimmer:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 163
|
||||
|
||||
# English US voices - all available Piper models
|
||||
# libritts_r has 904 speakers (multi-speaker model)
|
||||
en_us_libritts_r_0:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 0
|
||||
en_us_libritts_r_52:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 52
|
||||
en_us_libritts_r_55:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 55
|
||||
en_us_libritts_r_57:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 57
|
||||
en_us_libritts_r_61:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 61
|
||||
en_us_libritts_r_64:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 64
|
||||
en_us_libritts_r_79:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 79
|
||||
en_us_libritts_r_80:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 80
|
||||
en_us_libritts_r_90:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 90
|
||||
en_us_libritts_r_101:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 101
|
||||
en_us_libritts_r_102:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 102
|
||||
en_us_libritts_r_107:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 107
|
||||
en_us_libritts_r_130:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 130
|
||||
en_us_libritts_r_132:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 132
|
||||
en_us_libritts_r_134:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 134
|
||||
en_us_libritts_r_136:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 136
|
||||
en_us_libritts_r_137:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 137
|
||||
en_us_libritts_r_150:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 150
|
||||
en_us_libritts_r_159:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 159
|
||||
en_us_libritts_r_162:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 162
|
||||
en_us_libritts_r_163:
|
||||
model: /app/voices/en/en_US/libritts_r/medium/en_US-libritts_r-medium.onnx
|
||||
speaker: 163
|
||||
|
||||
# Single-speaker Piper voices (to be downloaded)
|
||||
en_us_amy:
|
||||
model: /app/voices/en/en_US/amy/medium/en_US-amy-medium.onnx
|
||||
speaker: # default
|
||||
en_us_arctic:
|
||||
model: /app/voices/en/en_US/arctic/medium/en_US-arctic-medium.onnx
|
||||
speaker: # default
|
||||
en_us_bryce:
|
||||
model: /app/voices/en/en_US/bryce/medium/en_US-bryce-medium.onnx
|
||||
speaker: # default
|
||||
en_us_danny:
|
||||
model: /app/voices/en/en_US/danny/low/en_US-danny-low.onnx
|
||||
speaker: # default
|
||||
en_us_hfc_female:
|
||||
model: /app/voices/en/en_US/hfc_female/medium/en_US-hfc_female-medium.onnx
|
||||
speaker: # default
|
||||
en_us_hfc_male:
|
||||
model: /app/voices/en/en_US/hfc_male/medium/en_US-hfc_male-medium.onnx
|
||||
speaker: # default
|
||||
en_us_joe:
|
||||
model: /app/voices/en/en_US/joe/medium/en_US-joe-medium.onnx
|
||||
speaker: # default
|
||||
en_us_john:
|
||||
model: /app/voices/en/en_US/john/medium/en_US-john-medium.onnx
|
||||
speaker: # default
|
||||
en_us_kathleen:
|
||||
model: /app/voices/en/en_US/kathleen/low/en_US-kathleen-low.onnx
|
||||
speaker: # default
|
||||
en_us_kristin:
|
||||
model: /app/voices/en/en_US/kristin/medium/en_US-kristin-medium.onnx
|
||||
speaker: # default
|
||||
en_us_kusal:
|
||||
model: /app/voices/en/en_US/kusal/medium/en_US-kusal-medium.onnx
|
||||
speaker: # default
|
||||
en_us_l2arctic:
|
||||
model: /app/voices/en/en_US/l2arctic/medium/en_US-l2arctic-medium.onnx
|
||||
speaker: # default (multi-speaker model)
|
||||
en_us_lessac:
|
||||
model: /app/voices/en/en_US/lessac/medium/en_US-lessac-medium.onnx
|
||||
speaker: # default (multi-speaker model)
|
||||
en_us_libritts:
|
||||
model: /app/voices/en/en_US/libritts/high/en_US-libritts-high.onnx
|
||||
speaker: # default (multi-speaker model)
|
||||
en_us_ljspeech:
|
||||
model: /app/voices/en/en_US/ljspeech/medium/en_US-ljspeech-medium.onnx
|
||||
speaker: # default
|
||||
en_us_norman:
|
||||
model: /app/voices/en/en_US/norman/medium/en_US-norman-medium.onnx
|
||||
speaker: # default
|
||||
en_us_reza_ibrahim:
|
||||
model: /app/voices/en/en_US/reza_ibrahim/medium/en_US-reza_ibrahim-medium.onnx
|
||||
speaker: # default
|
||||
en_us_ryan:
|
||||
model: /app/voices/en/en_US/ryan/high/en_US-ryan-high.onnx
|
||||
speaker: # default
|
||||
en_us_sam:
|
||||
model: /app/voices/en/en_US/sam/medium/en_US-sam-medium.onnx
|
||||
speaker: # default
|
||||
|
||||
# English GB voices
|
||||
en_gb_alan:
|
||||
model: /app/voices/en/en_GB/alan/medium/en_GB-alan-medium.onnx
|
||||
speaker: # default
|
||||
en_gb_alba:
|
||||
model: /app/voices/en/en_GB/alba/medium/en_GB-alba-medium.onnx
|
||||
speaker: # default
|
||||
en_gb_aru:
|
||||
model: /app/voices/en/en_GB/aru/medium/en_GB-aru-medium.onnx
|
||||
speaker: # default (multi-speaker model)
|
||||
en_gb_cori:
|
||||
model: /app/voices/en/en_GB/cori/medium/en_GB-cori-medium.onnx
|
||||
speaker: # default (multi-speaker model)
|
||||
en_gb_jenny_dioco:
|
||||
model: /app/voices/en/en_GB/jenny_dioco/medium/en_GB-jenny_dioco-medium.onnx
|
||||
speaker: # default
|
||||
en_gb_northern_english_male:
|
||||
model: /app/voices/en/en_GB/northern_english_male/medium/en_GB-northern_english_male-medium.onnx
|
||||
speaker: # default
|
||||
en_gb_semaine:
|
||||
model: /app/voices/en/en_GB/semaine/medium/en_GB-semaine-medium.onnx
|
||||
speaker: # default
|
||||
en_gb_southern_english_female:
|
||||
model: /app/voices/en/en_GB/southern_english_female/low/en_GB-southern_english_female-low.onnx
|
||||
speaker: # default
|
||||
en_gb_vctk:
|
||||
model: /app/voices/en/en_GB/vctk/medium/en_GB-vctk-medium.onnx
|
||||
speaker: # default (multi-speaker model)
|
||||
tts-1-hd:
|
||||
alloy-alt:
|
||||
model: xtts
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue