#!/usr/bin/env python3 """ test_voice_gronk.py TEST: Generate Gronk's welcome message Tests Edge-TTS integration for Hipodevil666 Studios™ Created: Jan 10, 2026 Author: David "HIPO" Kotnik """ import asyncio import sys from pathlib import Path try: import edge_tts except ImportError: print("❌ Error: edge-tts not installed!") print("Install it with: pip install edge-tts") sys.exit(1) # Gronk's test phrase (in Slovenian!) TEST_PHRASE = "Ej stari, dobrodošel v Hipodevil666 Studios. V mojem vapi je zmanjkalo olja, zombiji so spet vse pokadili!" # Gronk voice profile (Deep, Gritty Male) VOICE = 'en-GB-RyanNeural' # Deep British male RATE = '-15%' # Slower (gritty, laid back) PITCH = '-8Hz' # Deeper VOLUME = '+0%' # Output OUTPUT_DIR = Path('assets/audio/voice') OUTPUT_FILE = OUTPUT_DIR / 'test_gronk.ogg' async def generate_gronk_test(): """Generate Gronk's test voice""" print("🎙️ Hipodevil666 Studios™ - Voice Test") print("=" * 60) print(f"Character: GRONK (Deep Troll)") print(f"Voice: {VOICE}") print(f"Phrase: \"{TEST_PHRASE}\"") print() # Create output directory OUTPUT_DIR.mkdir(parents=True, exist_ok=True) print(f"🔄 Generating voice...") try: # Create TTS communicator communicate = edge_tts.Communicate( TEST_PHRASE, VOICE, rate=RATE, pitch=PITCH, volume=VOLUME ) # Save as MP3 first mp3_path = OUTPUT_FILE.with_suffix('.mp3') await communicate.save(str(mp3_path)) print(f" ✅ MP3 generated: {mp3_path.name}") # Convert to OGG (if ffmpeg available) import subprocess try: print(f"🔄 Converting to OGG...") subprocess.run([ 'ffmpeg', '-i', str(mp3_path), '-c:a', 'libvorbis', '-q:a', '5', '-y', str(OUTPUT_FILE) ], check=True, capture_output=True) print(f" ✅ OGG converted: {OUTPUT_FILE.name}") # Delete MP3 (keep only OGG) mp3_path.unlink() print(f" 🗑️ MP3 deleted (OGG kept)") except (subprocess.CalledProcessError, FileNotFoundError) as e: print(f" ⚠️ ffmpeg not found - keeping MP3 format") print(f" 💡 Install ffmpeg: brew install ffmpeg") # Rename MP3 to final output mp3_path.rename(OUTPUT_FILE.with_suffix('.mp3')) print() print("=" * 60) print("🎉 SUCCESS!") print() print(f"📂 File saved: {OUTPUT_FILE}") print(f"📏 File size: {OUTPUT_FILE.stat().st_size if OUTPUT_FILE.exists() else OUTPUT_FILE.with_suffix('.mp3').stat().st_size} bytes") print() print("🎮 Ready to test in game!") print() print("💡 To play in terminal:") print(f" afplay {OUTPUT_FILE}") print() return True except Exception as e: print(f"❌ Error: {e}") return False def main(): """Main entry point""" success = asyncio.run(generate_gronk_test()) if success: print("✅ Voice generation complete!") sys.exit(0) else: print("❌ Voice generation failed!") sys.exit(1) if __name__ == '__main__': main()