Spaces:
Runtime error
Runtime error
| # ========================================================= | |
| # 1) INSTALL DEPENDENCIES | |
| # ========================================================= | |
| !pip -q install git+https://github.com/huggingface/parler-tts.git | |
| !pip -q install soundfile transformers accelerate sentencepiece huggingface_hub | |
| # ========================================================= | |
| # 2) IMPORTS | |
| # ========================================================= | |
| import os | |
| import torch | |
| import soundfile as sf | |
| from IPython.display import Audio, display | |
| from google.colab import files | |
| from parler_tts import ParlerTTSForConditionalGeneration | |
| from transformers import AutoTokenizer | |
| from huggingface_hub import notebook_login, hf_hub_download | |
| # ========================================================= | |
| # 3) HUGGING FACE LOGIN | |
| # ========================================================= | |
| print("🔐 Please login with your Hugging Face READ token") | |
| notebook_login() | |
| # ========================================================= | |
| # 4) VERIFY MODEL ACCESS | |
| # ========================================================= | |
| MODEL_NAME = "ai4bharat/indic-parler-tts" | |
| try: | |
| hf_hub_download( | |
| repo_id=MODEL_NAME, | |
| filename="config.json" | |
| ) | |
| print("✅ Model access verified") | |
| except Exception as e: | |
| print("❌ ACCESS ERROR") | |
| print("Open this page:") | |
| print("https://huggingface.co/ai4bharat/indic-parler-tts") | |
| print("Then click 👉 Agree and access repository") | |
| raise e | |
| # ========================================================= | |
| # 5) DEVICE | |
| # ========================================================= | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| print("🚀 Using device:", device) | |
| # ========================================================= | |
| # 6) LOAD MODEL | |
| # ========================================================= | |
| print("⏳ Loading Kannada TTS model...") | |
| model = ParlerTTSForConditionalGeneration.from_pretrained( | |
| MODEL_NAME | |
| ).to(device) | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) | |
| description_tokenizer = AutoTokenizer.from_pretrained( | |
| model.config.text_encoder._name_or_path | |
| ) | |
| print("✅ Model loaded successfully") | |
| # ========================================================= | |
| # 7) SAFE GENERATION FUNCTION | |
| # ========================================================= | |
| def generate_kannada_tts(prompt_text, output_file="/content/kannada_output.wav"): | |
| prompt_text = str(prompt_text).strip() | |
| if not prompt_text: | |
| raise ValueError("❌ Kannada input cannot be empty") | |
| description = ( | |
| "A calm Kannada male speaker with natural pronunciation, " | |
| "clear studio quality audio, smooth narration, " | |
| "and no background noise." | |
| ) | |
| description_inputs = description_tokenizer( | |
| description, | |
| return_tensors="pt" | |
| ).to(device) | |
| prompt_inputs = tokenizer( | |
| prompt_text, | |
| return_tensors="pt" | |
| ).to(device) | |
| with torch.no_grad(): | |
| generation = model.generate( | |
| input_ids=description_inputs.input_ids, | |
| prompt_input_ids=prompt_inputs.input_ids | |
| ) | |
| audio = generation.cpu().numpy().squeeze() | |
| sf.write( | |
| output_file, | |
| audio, | |
| model.config.sampling_rate | |
| ) | |
| print(f"✅ Audio saved → {output_file}") | |
| display(Audio(output_file)) | |
| return output_file | |
| # ========================================================= | |
| # 8) USER INPUT OUTSIDE FUNCTION | |
| # ========================================================= | |
| user_text = input("Enter Kannada text: ") | |
| # Example: | |
| # ನಮಸ್ಕಾರ, ನನ್ನ ಹೆಸರು ಅಥ್ಮಿಕ | |
| try: | |
| output_path = generate_kannada_tts(user_text) | |
| except Exception as e: | |
| print("❌ Error:", e) | |
| # ========================================================= | |
| # 9) DOWNLOAD | |
| # ========================================================= | |
| if os.path.exists("/content/kannada_output.wav"): | |
| files.download("/content/kannada_output.wav") |