fix: update dingtalk_tts.sh with Python hex parsing

This commit is contained in:
root
2026-03-30 01:33:44 +08:00
parent 96d4366bdc
commit 84d47fc753

View File

@@ -62,8 +62,19 @@ TTS_RESPONSE=$(curl -s -X POST "https://api.minimaxi.com/v1/t2a_v2" \
} }
}") }")
HEX_AUDIO=$(echo "$TTS_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('audio',''))") # 用 Python 解析响应(处理特殊字符)
AUDIO_LENGTH=$(echo "$TTS_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('extra_info',{}).get('audio_length',0))") TTS_RESULT=$(python3 << PYEOF
import json
import sys
data = json.loads("""$TTS_RESPONSE""")
hex_audio = data.get('data', {}).get('audio', '')
audio_len = data.get('extra_info', {}).get('audio_length', 0)
print(f"{hex_audio}\n{audio_len}")
PYEOF
)
HEX_AUDIO=$(echo "$TTS_RESULT" | head -1)
AUDIO_LENGTH=$(echo "$TTS_RESULT" | tail -1)
if [ -z "$HEX_AUDIO" ]; then if [ -z "$HEX_AUDIO" ]; then
echo "❌ TTS 调用失败: $TTS_RESPONSE" echo "❌ TTS 调用失败: $TTS_RESPONSE"
@@ -76,11 +87,11 @@ echo "[3/6] 转换格式..."
echo "$HEX_AUDIO" | xxd -r -p > "$TMP_DIR/voice.mp3" echo "$HEX_AUDIO" | xxd -r -p > "$TMP_DIR/voice.mp3"
# 获取时长(秒) # 获取时长(秒)
DURATION_SEC=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$TMP_DIR/voice.mp3" 2>/dev/null | awk '{printf "%.0f", $1}') DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$TMP_DIR/voice.mp3" 2>/dev/null | awk '{printf "%.0f", $1}')
if [ -z "$DURATION_SEC" ] || [ "$DURATION_SEC" = "0" ]; then if [ -z "$DURATION" ] || [ "$DURATION" = "0" ]; then
DURATION_SEC=$(echo "scale=0; $AUDIO_LENGTH / 1000" | bc) DURATION=$(echo "scale=0; $AUDIO_LENGTH / 1000" | bc)
fi fi
echo "✓ MP3 生成完成,时长: ${DURATION_SEC}" echo "✓ MP3 生成完成,时长: ${DURATION}"
# Step 4: 上传 MP3 到钉钉 # Step 4: 上传 MP3 到钉钉
echo "[4/6] 上传音频到钉钉..." echo "[4/6] 上传音频到钉钉..."
@@ -103,7 +114,7 @@ SEND_RESPONSE=$(curl -s -X POST "https://api.dingtalk.com/v1.0/robot/oToMessages
\"robotCode\": \"$DINGTALK_APP_KEY\", \"robotCode\": \"$DINGTALK_APP_KEY\",
\"userIds\": [\"$USER_ID\"], \"userIds\": [\"$USER_ID\"],
\"msgKey\": \"sampleAudio\", \"msgKey\": \"sampleAudio\",
\"msgParam\": \"{\\\"mediaId\\\":\\\"$MEDIA_ID\\\",\\\"duration\\\":\\\"$DURATION_SEC\\\"}\" \"msgParam\": \"{\\\"mediaId\\\":\\\"$MEDIA_ID\\\",\\\"duration\\\":\\\"$DURATION\\\"}\"
}") }")
PROCESS_KEY=$(echo "$SEND_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('processQueryKey',''))") PROCESS_KEY=$(echo "$SEND_RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin).get('processQueryKey',''))")