Parler_TTS_API / test_urdu_tts.py
aspirant312's picture
Add Urdu TTS test suite - generates audio files and saves to output folder
5481f58
Raw
History Blame Contribute Delete
4.83 kB
#!/usr/bin/env python3
"""
Test TTS API with Urdu text and save audio outputs
"""
import requests
import os
from pathlib import Path
from datetime import datetime
# API configuration
API_URL = "https://ebitlogix-parler-tts-api.hf.space"
# For local testing, change to: API_URL = "http://localhost:7860"
OUTPUT_DIR = Path("tts_output")
OUTPUT_DIR.mkdir(exist_ok=True)
# Test cases with Urdu text
TEST_CASES = [
{
"text": "سلام دنیا",
"speaker": "Divya",
"description": "Hello World"
},
{
"text": "مرحبا بك في تطبيق تحويل النص إلى كلام",
"speaker": "Rani",
"description": "Welcome to TTS App"
},
{
"text": "یہ ایک اردو متن ہے جو آواز میں تبدیل ہوگا",
"speaker": "Rohit",
"description": "This is Urdu text converted to speech"
},
{
"text": "کتاب پڑھنا میرا پسندیدہ کام ہے",
"speaker": "Aman",
"description": "Reading books is my favorite"
},
{
"text": "خوشامدید، یہ ایک خوبصورت دن ہے",
"speaker": "Generic Female",
"description": "Welcome, it's a beautiful day"
},
{
"text": "ہمیں اپنے لیے بہتر مستقبل بنانی ہے",
"speaker": "Generic Male",
"description": "We must build a better future"
},
]
def test_health():
"""Test API health check."""
print("\n" + "="*60)
print("Testing API Health Check")
print("="*60)
try:
response = requests.get(f"{API_URL}/")
if response.status_code == 200:
data = response.json()
print(f"✅ API is running")
print(f" Model: {data.get('model')}")
print(f" Speakers: {', '.join(data.get('speakers', []))}")
print(f" Sample Rate: {data.get('sample_rate')} Hz")
return True
else:
print(f"❌ API health check failed: {response.status_code}")
return False
except Exception as e:
print(f"❌ Cannot connect to API: {e}")
return False
def test_tts_generation():
"""Generate TTS audio for all test cases."""
print("\n" + "="*60)
print("Testing TTS Generation with Urdu Text")
print("="*60 + "\n")
successful = 0
failed = 0
for i, test_case in enumerate(TEST_CASES, 1):
text = test_case["text"]
speaker = test_case["speaker"]
description = test_case["description"]
print(f"[{i}/{len(TEST_CASES)}] Testing: {description}")
print(f" Text: {text}")
print(f" Speaker: {speaker}")
try:
payload = {
"text": text,
"speaker": speaker,
"pitch": "Moderate",
"rate": "Moderate",
"temperature": 0.8,
"do_sample": True
}
response = requests.post(f"{API_URL}/tts", json=payload, timeout=60)
if response.status_code != 200:
print(f" ❌ Failed: {response.status_code} - {response.text[:100]}")
failed += 1
continue
# Save audio file
audio_data = response.content
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{timestamp}_{speaker.replace(' ', '_')}_{i}.wav"
filepath = OUTPUT_DIR / filename
with open(filepath, "wb") as f:
f.write(audio_data)
file_size_kb = len(audio_data) / 1024
print(f" ✅ Success - Saved to: {filepath} ({file_size_kb:.1f} KB)")
successful += 1
except requests.exceptions.Timeout:
print(f" ❌ Failed: Request timeout (60s)")
failed += 1
except Exception as e:
print(f" ❌ Failed: {str(e)[:100]}")
failed += 1
print()
# Summary
print("="*60)
print(f"Results: {successful} successful, {failed} failed")
print(f"Audio files saved to: {OUTPUT_DIR.absolute()}")
print("="*60)
return successful, failed
def main():
"""Run all tests."""
print("\n" + "█"*60)
print("█ TTS API Test Suite - Urdu Text Generation")
print("█"*60)
# Health check
if not test_health():
print("\n❌ API is not available. Exiting...")
return
# TTS generation tests
successful, failed = test_tts_generation()
# Final status
if failed == 0:
print("\n✅ All tests passed!")
else:
print(f"\n⚠️ {failed} test(s) failed.")
print(f"\n📁 Output folder: {OUTPUT_DIR.absolute()}")
print(f"📊 Generated {successful} audio files\n")
if __name__ == "__main__":
main()