#!/bin/bash
# CosyVoice 非实时语音合成测试
# 使用阿里云百炼 API，测试长文本合成

API_KEY="sk-c25679401ba24c749f53be86b0c9a7a6"
API_URL="https://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer"
OUTPUT_DIR="./test-results"
mkdir -p "$OUTPUT_DIR"

# 测试文本 - 《匆匆》朱自清，约 1300 字
TEXT='燕子去了，有再来的时候；杨柳枯了，有再青的时候；桃花谢了，有再开的时候。但是，聪明的，你告诉我，我们的日子为什么一去不复返呢？——是有人偷了他们罢：那是谁？又藏在何处呢？是他们自己逃走了罢：现在又到了哪里呢？

我不知道他们给了我多少日子；但我的手确乎是渐渐空虚了。在默默里算着，八千多日子已经从我手中溜去；像针尖上一滴水滴在大海里，我的日子滴在时间的流里，没有声音，也没有影子。我不禁头涔涔而泪潸潸了。

去的尽管去了，来的尽管来着；去来的中间，又怎样地匆匆呢？早上我起来的时候，小屋里射进两三方斜斜的太阳。太阳他有脚啊，轻轻悄悄地挪移了；我也茫茫然跟着旋转。于是——洗手的时候，日子从水盆里过去；吃饭的时候，日子从饭碗里过去；默默时，便从凝然的双眼前过去。我觉察他去的匆匆了，伸出手遮挽时，他又从遮挽着的手边过去，天黑时，我躺在床上，他便伶伶俐俐地从我身上跨过，从我脚边飞去了。等我睁开眼和太阳再见，这算又溜走了一日。我掩着面叹息。但是新来的日子的影儿又开始在叹息里闪过了。

在逃去如飞的日子里，在千门万户的世界里的我能做些什么呢？只有徘徊罢了，只有匆匆罢了；在八千多日的匆匆里，除徘徊外，又剩些什么呢？过去的日子如轻烟，被微风吹散了，如薄雾，被初阳蒸融了；我留着些什么痕迹呢？我何曾留着像游丝样的痕迹呢？我赤裸裸来到这世界，转眼间也将赤裸裸的回去罢？但不能平的，为什么偏要白白走这一遭啊？

你聪明的，告诉我，我们的日子为什么一去不复返呢？'

echo "========================================="
echo "  CosyVoice 非实时语音合成测试"
echo "========================================="
echo ""
echo "模型: cosyvoice-v3.5-flash"
echo "音色: longanyang"
echo "格式: mp3 / 采样率: 24000"
echo "文本长度: $(echo -n "$TEXT" | wc -m) 字符"
echo ""

echo "正在调用 API ..."
START_TIME=$(date +%s)

RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$API_URL" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n \
    --arg model "cosyvoice-v3.5-flash" \
    --arg text "$TEXT" \
    --arg voice "longanyang" \
    '{
      model: $model,
      input: {
        text: $text,
        voice: $voice,
        format: "mp3",
        sample_rate: 24000
      }
    }')")

HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')

END_TIME=$(date +%s)
ELAPSED=$((END_TIME - START_TIME))

echo "HTTP状态码: $HTTP_CODE"
echo "耗时: ${ELAPSED}秒"
echo ""

if [ "$HTTP_CODE" != "200" ]; then
  echo "❌ 请求失败！响应内容："
  echo "$BODY" | jq .
  exit 1
fi

# 解析响应
REQUEST_ID=$(echo "$BODY" | jq -r '.request_id')
AUDIO_URL=$(echo "$BODY" | jq -r '.output.audio.url')
AUDIO_ID=$(echo "$BODY" | jq -r '.output.audio.id')
EXPIRE_AT=$(echo "$BODY" | jq -r '.output.audio.expires_at')
CHAR_COUNT=$(echo "$BODY" | jq -r '.usage.characters')
FINISH_REASON=$(echo "$BODY" | jq -r '.output.finish_reason')

echo "✅ 请求成功！"
echo ""
echo "--- 响应摘要 ---"
echo "Request ID:  $REQUEST_ID"
echo "音频 ID:     $AUDIO_ID"
echo "完成原因:     $FINISH_REASON"
echo "计费字符数:   $CHAR_COUNT"
echo "链接过期:     $(date -d @"$EXPIRE_AT" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "时间戳: $EXPIRE_AT")"
echo "音频 URL:     $AUDIO_URL"
echo ""

# 下载音频
AUDIO_FILE="$OUTPUT_DIR/cosyvoice-test-$(date +%Y%m%d_%H%M%S).mp3"
echo "正在下载音频到: $AUDIO_FILE"
curl -s -o "$AUDIO_FILE" "$AUDIO_URL"

FILE_SIZE=$(stat -c%s "$AUDIO_FILE" 2>/dev/null || stat -f%z "$AUDIO_FILE" 2>/dev/null)
if [ -f "$AUDIO_FILE" ] && [ "$FILE_SIZE" -gt 0 ]; then
  echo "✅ 音频下载成功！"
  echo "   文件: $AUDIO_FILE"
  echo "   大小: $FILE_SIZE 字节 ($(( FILE_SIZE / 1024 )) KB)"
  echo ""
  echo "完整响应:"
  echo "$BODY" | jq .
else
  echo "❌ 音频下载失败或文件为空"
  exit 1
fi
