#!/bin/bash # Matriz completa de pruebas de qwentts.cpp con los modelos disponibles. # Genera un WAV por cada posibilidad en examples/out/ y un resumen al final. # Uso: ./all.sh set -u cd "$(dirname "$0")" TTS=../build/qwen-tts CODEC=../build/qwen-codec COD=../models/qwen-tokenizer-12hz-Q8_0.gguf T06B=../models/qwen-talker-0.6b-base-Q4_K_M.gguf T06C=../models/qwen-talker-0.6b-customvoice-Q4_K_M.gguf T17B=../models/qwen-talker-1.7b-base-Q8_0.gguf T17C=../models/qwen-talker-1.7b-customvoice-Q8_0.gguf T17V=../models/qwen-talker-1.7b-voicedesign-Q8_0.gguf OUT=out mkdir -p "$OUT" EN="qwentts runs entirely offline on your own machine." ES="Hola, esto es una prueba de sintesis de voz totalmente local." ZH="这是一个完全本地运行的语音合成测试。" n=0; ok=0 # run [args extra de qwen-tts...] run() { local desc="$1" out="$2" text="$3"; shift 3 n=$((n+1)) printf '%2d) %-46s ' "$n" "$desc" local t0 t1 t0=$(date +%s.%N) if printf '%s' "$text" | "$TTS" --codec "$COD" --seed 42 "$@" \ -o "$OUT/$out" >"$OUT/$out.log" 2>&1; then t1=$(date +%s.%N) printf 'OK %5s %4.0fs %s\n' "$(du -h "$OUT/$out" | cut -f1)" \ "$(echo "$t1 - $t0" | bc)" "$out" ok=$((ok+1)) else printf 'FALLO (ver %s)\n' "$OUT/$out.log" fi } echo "########## A. BASE (voz por defecto) ##########" run "Base 0.6B english" base_0.6b_en.wav "$EN" --model "$T06B" --lang english run "Base 1.7B english" base_1.7b_en.wav "$EN" --model "$T17B" --lang english run "Base 1.7B auto (autodetec)" base_1.7b_auto.wav "$EN" --model "$T17B" run "Base 1.7B spanish" base_1.7b_es.wav "$ES" --model "$T17B" --lang spanish run "Base 1.7B chinese" base_1.7b_zh.wav "$ZH" --model "$T17B" --lang chinese echo "########## B. CLONACION (referencia freeman, Base) ##########" run "Clone ref-wav (encode interno)" clone_refwav_1.7b.wav "$EN" --model "$T17B" --lang english \ --ref-wav freeman.wav --ref-text freeman.txt run "Clone x-vector only (solo .spk)" clone_xvec_1.7b.wav "$EN" --model "$T17B" --lang english \ --ref-spk freeman.spk run "Clone ICL (.spk+.rvq+.txt)" clone_icl_1.7b.wav "$EN" --model "$T17B" --lang english \ --ref-spk freeman.spk --ref-rvq freeman.rvq --ref-text freeman.txt run "Clone ICL 0.6B" clone_icl_0.6b.wav "$EN" --model "$T06B" --lang english \ --ref-spk freeman.spk --ref-rvq freeman.rvq --ref-text freeman.txt echo "########## C. CUSTOMVOICE (speakers con nombre) ##########" for spk in serena vivian uncle_fu ryan aiden ono_anna sohee; do run "CustomVoice 1.7B $spk" "cv_1.7b_${spk}.wav" "$EN" --model "$T17C" --lang english --speaker "$spk" done run "CustomVoice 1.7B eric (sichuan, ZH)" cv_1.7b_eric_zh.wav "$ZH" --model "$T17C" --lang chinese --speaker eric run "CustomVoice 1.7B dylan (beijing, ZH)" cv_1.7b_dylan_zh.wav "$ZH" --model "$T17C" --lang chinese --speaker dylan run "CustomVoice 0.6B vivian" cv_0.6b_vivian.wav "$EN" --model "$T06C" --lang english --speaker vivian run "CustomVoice 1.7B vivian + instruct" cv_1.7b_vivian_instr.wav "$EN" --model "$T17C" --lang english \ --speaker vivian --instruct "happy, energetic" echo "########## D. VOICEDESIGN (instruccion de atributos, 1.7B) ##########" run "VoiceDesign male young" vd_male_young.wav "$EN" --model "$T17V" --lang english \ --instruct "male, young adult, moderate pitch" run "VoiceDesign female elderly" vd_female_elderly.wav "$EN" --model "$T17V" --lang english \ --instruct "female, elderly, low pitch, calm" run "VoiceDesign teen excited" vd_teen_excited.wav "$EN" --model "$T17V" --lang english \ --instruct "female, teenager, high pitch, excited and fast" echo "########## E. MUESTREO / FORMATO (Base 1.7B) ##########" run "Greedy (determinista)" fmt_greedy.wav "$EN" --model "$T17B" --lang english --greedy run "Sampled temp=1.2 top-p=0.9" fmt_temp.wav "$EN" --model "$T17B" --lang english --temp 1.2 --top-p 0.9 run "Formato wav24" fmt_wav24.wav "$EN" --model "$T17B" --lang english --format wav24 run "Formato wav32" fmt_wav32.wav "$EN" --model "$T17B" --lang english --format wav32 echo "########## F. QWEN-CODEC (encode/decode round-trip) ##########" cp -f freeman.wav "$OUT/rt.wav" echo -n "F1) codec encode (wav -> .rvq + .spk) " if "$CODEC" --model "$COD" --talker "$T17B" -i "$OUT/rt.wav" >"$OUT/codec_encode.log" 2>&1; then echo "OK ($(du -h "$OUT/rt.rvq" 2>/dev/null | cut -f1) rvq, $(du -h "$OUT/rt.spk" 2>/dev/null | cut -f1) spk)" else echo "FALLO (ver $OUT/codec_encode.log)"; fi cp -f "$OUT/rt.rvq" "$OUT/roundtrip.rvq" echo -n "F2) codec decode (.rvq -> wav round-trip) " if "$CODEC" --model "$COD" -i "$OUT/roundtrip.rvq" >"$OUT/codec_decode.log" 2>&1; then echo "OK ($(du -h "$OUT/roundtrip.wav" 2>/dev/null | cut -f1))" else echo "FALLO (ver $OUT/codec_decode.log)"; fi echo echo "########## RESUMEN ##########" echo "Sintesis OK: $ok / $n" echo "WAVs en $(pwd)/$OUT/:" /bin/ls -1 "$OUT"/*.wav 2>/dev/null | sed 's|^| |'