File size: 2,733 Bytes
4b8c0f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PYTHON_BIN="${PYTHON_BIN:-python3}"
TEXT="你好,今天是美好的一天。"
VOICE="Junhao"
SEED=1234
MAX_NEW_FRAMES=110
GREEDY_PREFIX_FRAMES=4
DECODE_BACKEND="onnx"
DECODE_ONNX_THREADS=0
DECODE_WARMUP_FRAMES=32
DECODE_ONNX="$ROOT_DIR/models/onnxmodels/moss_tts_decode_step.onnx"
OUTPUT_WAV="$ROOT_DIR/outputs/moss_tts_ax650.wav"
OUTPUT_LOG="$ROOT_DIR/outputs/moss_tts_ax650.log"

usage() {
  echo "usage: $0 --text TEXT [--voice NAME] [--decode-backend onnx|axmodel]"
  echo "       [--decode-onnx FILE] [--decode-onnx-threads N] [--decode-warmup-frames N]"
  echo "       [--seed N] [--max-new-frames N] [--output-wav FILE] [--output-log FILE]"
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    --text) TEXT="$2"; shift 2 ;;
    --voice) VOICE="$2"; shift 2 ;;
    --seed) SEED="$2"; shift 2 ;;
    --max-new-frames) MAX_NEW_FRAMES="$2"; shift 2 ;;
    --greedy-prefix-frames) GREEDY_PREFIX_FRAMES="$2"; shift 2 ;;
    --decode-backend) DECODE_BACKEND="$2"; shift 2 ;;
    --decode-onnx) DECODE_ONNX="$2"; shift 2 ;;
    --decode-onnx-threads) DECODE_ONNX_THREADS="$2"; shift 2 ;;
    --decode-warmup-frames) DECODE_WARMUP_FRAMES="$2"; shift 2 ;;
    --output-wav) OUTPUT_WAV="$2"; shift 2 ;;
    --output-log) OUTPUT_LOG="$2"; shift 2 ;;
    -h|--help) usage; exit 0 ;;
    *) echo "unknown arg: $1" >&2; usage >&2; exit 2 ;;
  esac
done

mkdir -p "$(dirname "$OUTPUT_WAV")" "$(dirname "$OUTPUT_LOG")"
export LD_LIBRARY_PATH="$ROOT_DIR/bin/moss_tts_ax650:${LD_LIBRARY_PATH:-}"

if [[ "$DECODE_BACKEND" == "onnx" ]]; then
  [[ -f "$DECODE_ONNX" ]] || { echo "missing decode ONNX: $DECODE_ONNX" >&2; exit 1; }
  EXTRA=(--decode-backend onnx --decode-onnx "$DECODE_ONNX"
         --decode-onnx-threads "$DECODE_ONNX_THREADS"
         --decode-warmup-frames "$DECODE_WARMUP_FRAMES")
elif [[ "$DECODE_BACKEND" == "axmodel" ]]; then
  EXTRA=(--decode-backend axmodel --decode-axmodel "$ROOT_DIR/models/axmodels_650/tts_decode_step.axmodel")
else
  echo "--decode-backend must be onnx or axmodel" >&2
  exit 2
fi

REQUEST="$ROOT_DIR/outputs/request.txt"
"$PYTHON_BIN" "$ROOT_DIR/python/prepare_request.py" \
  --config-dir "$ROOT_DIR/config" --text "$TEXT" --voice "$VOICE" \
  --seed "$SEED" --max-new-frames "$MAX_NEW_FRAMES" \
  --greedy-prefix-frames "$GREEDY_PREFIX_FRAMES" --output "$REQUEST"

"$ROOT_DIR/bin/moss_tts_ax650/moss_tts_ax650" \
  --axmodel-dir "$ROOT_DIR/models/axmodels_650" \
  --onnx-dir "$ROOT_DIR/models/onnxmodels" \
  "${EXTRA[@]}" --request "$REQUEST" \
  --output-wav "$OUTPUT_WAV" --max-new-frames "$MAX_NEW_FRAMES" \
  --seed "$SEED" --greedy-prefix-frames "$GREEDY_PREFIX_FRAMES" \
  2>&1 | tee "$OUTPUT_LOG"