fix: update dingtalk_tts.sh with Python hex parsing
This commit is contained in:
@@ -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',''))")
|
||||||
|
|||||||
Reference in New Issue
Block a user