Spaces:
Sleeping
Sleeping
File size: 1,472 Bytes
6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 6e85a42 1071494 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# genesis/narration.py
"""
Narration Module for GENESIS-AI
Generates audio narration from text using ElevenLabs, with gTTS fallback.
"""
import os
import requests
from gtts import gTTS
ELEVEN_LABS_API_KEY = os.getenv("ELEVEN_LABS_API_KEY")
ELEVEN_TTS_URL = "https://api.elevenlabs.io/v1/text-to-speech"
def narrate_text_elevenlabs(text, voice="Rachel"):
"""Generate narration using ElevenLabs API."""
headers = {
"xi-api-key": ELEVEN_LABS_API_KEY,
"Content-Type": "application/json"
}
payload = {"text": text, "voice_settings": {"stability": 0.75, "similarity_boost": 0.75}}
try:
r = requests.post(f"{ELEVEN_TTS_URL}/{voice}", json=payload, headers=headers)
r.raise_for_status()
output_path = "narration.mp3"
with open(output_path, "wb") as f:
f.write(r.content)
return output_path
except Exception as e:
return {"error": str(e)}
def narrate_text_gtts(text, lang="en"):
"""Fallback narration with gTTS."""
try:
tts = gTTS(text=text, lang=lang)
output_path = "narration_fallback.mp3"
tts.save(output_path)
return output_path
except Exception as e:
return {"error": str(e)}
def narrate_text(text):
"""Try ElevenLabs first, else fallback."""
if ELEVEN_LABS_API_KEY:
result = narrate_text_elevenlabs(text)
if isinstance(result, str):
return result
return narrate_text_gtts(text)
|