Spaces:
Running
Running
Update app_qwen_tts.py
Browse files- app_qwen_tts.py +36 -8
app_qwen_tts.py
CHANGED
|
@@ -98,18 +98,46 @@ def answer_question(question):
|
|
| 98 |
# =====================================================
|
| 99 |
# TTS (BASE64 → WAV)
|
| 100 |
# =====================================================
|
| 101 |
-
def generate_audio(text):
|
| 102 |
-
payload = {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
r = requests.post(TTS_API_URL, json=payload, timeout=None)
|
| 104 |
-
audio_b64 = r.json()["audio"]
|
| 105 |
|
| 106 |
-
|
| 107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
|
| 109 |
-
|
| 110 |
-
|
| 111 |
|
| 112 |
-
return wav_path
|
| 113 |
|
| 114 |
# =====================================================
|
| 115 |
# MAIN HANDLER
|
|
|
|
| 98 |
# =====================================================
|
| 99 |
# TTS (BASE64 → WAV)
|
| 100 |
# =====================================================
|
| 101 |
+
def generate_audio(text: str):
|
| 102 |
+
payload = {
|
| 103 |
+
"text": text,
|
| 104 |
+
"language_id": "en",
|
| 105 |
+
"mode": "Speak 🗣️"
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
r = requests.post(TTS_API_URL, json=payload, timeout=None)
|
|
|
|
| 109 |
|
| 110 |
+
# ---- Case 1: API returns raw WAV bytes ----
|
| 111 |
+
if r.headers.get("content-type", "").startswith("audio"):
|
| 112 |
+
wav_path = "/tmp/output.wav"
|
| 113 |
+
with open(wav_path, "wb") as f:
|
| 114 |
+
f.write(r.content)
|
| 115 |
+
return wav_path
|
| 116 |
+
|
| 117 |
+
# ---- Case 2: API returns JSON ----
|
| 118 |
+
data = r.json()
|
| 119 |
+
|
| 120 |
+
# Try known keys safely
|
| 121 |
+
audio_b64 = (
|
| 122 |
+
data.get("audio")
|
| 123 |
+
or data.get("audio_base64")
|
| 124 |
+
or data.get("wav")
|
| 125 |
+
)
|
| 126 |
+
|
| 127 |
+
if audio_b64:
|
| 128 |
+
wav_bytes = base64.b64decode(audio_b64)
|
| 129 |
+
wav_path = "/tmp/output.wav"
|
| 130 |
+
with open(wav_path, "wb") as f:
|
| 131 |
+
f.write(wav_bytes)
|
| 132 |
+
return wav_path
|
| 133 |
+
|
| 134 |
+
# ---- Case 3: API returns a file path ----
|
| 135 |
+
if "path" in data and os.path.exists(data["path"]):
|
| 136 |
+
return data["path"]
|
| 137 |
|
| 138 |
+
# ---- Otherwise ----
|
| 139 |
+
raise RuntimeError(f"TTS API response invalid: {data}")
|
| 140 |
|
|
|
|
| 141 |
|
| 142 |
# =====================================================
|
| 143 |
# MAIN HANDLER
|