| """ |
| Pro Audio Generator β Edge TTS (instant, no GPU/RAM needed). |
| Replaces XTTS-v2 to prevent OOM crashes on HF Spaces. |
| """ |
| import os |
| import asyncio |
| import time |
| import edge_tts |
|
|
| |
| VOICE = os.environ.get("TTS_VOICE", "en-US-GuyNeural") |
|
|
|
|
| def process_script_to_audio(script_text, output_filename="output.mp3"): |
| """ |
| Generates audio from text using Edge TTS. |
| Instant generation, no model loading, no RAM usage. |
| Returns path to generated audio file. |
| """ |
| output_dir = "output/audio" |
| os.makedirs(output_dir, exist_ok=True) |
|
|
| |
| if output_filename.endswith(".wav"): |
| output_filename = output_filename.replace(".wav", ".mp3") |
|
|
| output_path = os.path.join(output_dir, output_filename) |
|
|
| print(f"ποΈ Generating Audio ({len(script_text)} chars) with Edge TTS...", flush=True) |
| start_time = time.time() |
|
|
| try: |
| |
| asyncio.run( |
| edge_tts.Communicate( |
| script_text, |
| VOICE, |
| rate="+5%" |
| ).save(output_path) |
| ) |
|
|
| elapsed = time.time() - start_time |
| size_kb = os.path.getsize(output_path) / 1024 |
| print(f"β
Audio Generated in {elapsed:.1f}s ({size_kb:.0f} KB): {output_path}", flush=True) |
| return output_path |
|
|
| except Exception as e: |
| print(f"β Edge TTS Failed: {e}", flush=True) |
| return None |
|
|