diff --git a/speak.sh b/speak.sh index d98e0b3..0769709 100755 --- a/speak.sh +++ b/speak.sh @@ -2,49 +2,23 @@ cd "$(dirname "$0")" -# Lade .env (alle Variablen automatisch exportieren) if test -f .env; then set -a . ./.env set +a fi -# Ausgabedatei (optionaler Parameter, Default: output.wav) OUT="${1:-output.wav}" -# Text von STDIN in temporäre Datei lesen TMP_TEXT=$(mktemp) trap 'rm -f "$TMP_TEXT"' EXIT - cat > "$TMP_TEXT" -# Referenz-Audio als base64 kodieren (Linux: -w 0) REF_AUDIO_B64=$(base64 -w 0 elena-referenz.wav) +ESCAPED_TEXT=$(awk '{gsub(/\\/, "\\\\"); gsub(/"/, "\\\""); gsub(/\t/, "\\t"); if (NR>1) printf "\\n"; printf "%s", $0}' "$TMP_TEXT") -# JSON-Body via Pipe an curl übergeben, damit der Text -# nie von der Shell expandiert wird (keine $-Probleme). -{ - printf '{\n' - printf ' "text": "' - # JSON-Escaping für Text: \, ", Tab, Zeilenumbruch - awk '{ - gsub(/\\/, "\\\\"); - gsub(/"/, "\\\""); - gsub(/\t/, "\\t"); - if (NR > 1) printf "\\n"; - printf "%s", $0 - }' "$TMP_TEXT" - printf '",\n' - printf ' "language": "German",\n' - printf ' "ref_text": "Das Café Laube roch nach einer Mischung aus frisch gerösteten Bohnen, süßlichen Lilien und dem metallischen Unterton von Regen",\n' - printf ' "trim_sample": true,\n' - printf ' "auto_denoise": false,\n' - printf ' "high_fidelity": false,\n' - printf ' "ref_audio_b64": "' - printf '%s' "$REF_AUDIO_B64" - printf '"\n' - printf '}\n' -} | curl -X POST "https://vonkaiser-audiodojo.chutes.ai/tts/qwen3clone" \ +printf '{"text":"%s","language":"German","ref_text":"Das Café Laube roch nach einer Mischung aus frisch gerösteten Bohnen, süßlichen Lilien und dem metallischen Unterton von Regen","trim_sample":true,"auto_denoise":false,"high_fidelity":false,"ref_audio_b64":"%s"}' "$ESCAPED_TEXT" "$REF_AUDIO_B64" | \ +curl -X POST "https://vonkaiser-audiodojo.chutes.ai/tts/qwen3clone" \ -H "Authorization: Bearer $CHUTES_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- \