aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/extra/qwentts.cpp/examples/all.sh
blob: f0b701cc6a56016312209c66d64730301c469bc9 (plain)
1
2
3
4
5
6
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
#!/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 <desc> <outfile> <texto> [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|^|  |'