Spaces:
Sleeping
Sleeping
# import gradio as gr | |
# import requests | |
# from TTS.api import TTS | |
# import os | |
# # β Load TTS model (Make sure model is downloaded or install TTS first) | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts") | |
# # β Get Ayah from AlQuran API | |
# def get_quran_ayat(surah_num, ayat_num): | |
# try: | |
# url = f"https://api.alquran.cloud/v1/ayah/{surah_num}:{ayat_num}/editions/quran-simple,en.asad" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if "data" in data and len(data["data"]) >= 2: | |
# arabic_text = data["data"][0]["text"] | |
# translation = data["data"][1]["text"] | |
# return arabic_text, translation | |
# else: | |
# return "β Ayah not found.", "β Translation not found." | |
# except Exception as e: | |
# return f"β API Error: {e}", "" | |
# # β Gradio main function | |
# def qari_bot(surah, ayah): | |
# arabic_text, translation = get_quran_ayat(surah, ayah) | |
# # Return early if error | |
# if "β" in arabic_text: | |
# return arabic_text, translation, None | |
# # Generate audio and save to file | |
# output_path = "ayat.wav" | |
# try: | |
# tts.tts_to_file( | |
# text=arabic_text, | |
# file_path=output_path, | |
# language="ar" | |
# ) | |
# return arabic_text, translation, output_path | |
# except Exception as e: | |
# return arabic_text, translation, f"β TTS Error: {e}" | |
# # β Gradio Interface | |
# interface = gr.Interface( | |
# fn=qari_bot, | |
# inputs=[ | |
# gr.Number(label="Surah Number", value=1), | |
# gr.Number(label="Ayah Number", value=1) | |
# ], | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Ayah"), | |
# gr.Textbox(label="π Translation (English)"), | |
# gr.Audio(label="π Listen to Ayah") | |
# ], | |
# title="π AI Qari Bot", | |
# description="Enter Surah & Ayah number to hear the Quran Ayah with AI voice and English translation. Example: Surah 1, Ayah 1 = Al-Fatiha" | |
# ) | |
# interface.launch() | |
# import gradio as gr | |
# import requests | |
# from TTS.api import TTS | |
# # π Map Surah names to numbers | |
# surah_map = { | |
# "Al-Fatiha": 1, | |
# "Al-Baqarah": 2, | |
# "Aal-i-Imran": 3, | |
# "An-Nisa": 4, | |
# "Al-Ma'idah": 5, | |
# "Al-An'am": 6, | |
# "Al-A'raf": 7, | |
# "Al-Anfal": 8, | |
# "At-Tawbah": 9, | |
# "Yunus": 10, | |
# # β Add more if needed... | |
# } | |
# # β Load multilingual TTS model | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts") | |
# # π Fetch full Surah (Arabic + English) | |
# def fetch_surah(surah_name): | |
# surah_num = surah_map.get(surah_name) | |
# if not surah_num: | |
# return "Invalid Surah name.", "", None | |
# try: | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_num}/editions/quran-simple,en.asad" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if 'data' in data and len(data['data']) == 2: | |
# arabic_ayahs = data['data'][0]['ayahs'] | |
# english_ayahs = data['data'][1]['ayahs'] | |
# arabic_text = "\n".join([a['text'] for a in arabic_ayahs]) | |
# english_text = "\n".join([e['text'] for e in english_ayahs]) | |
# # Generate audio | |
# audio_path = "surah.wav" | |
# tts.tts_to_file(text=arabic_text, file_path=audio_path, language="ar") | |
# return arabic_text, english_text, audio_path | |
# else: | |
# return "β Surah not found.", "", None | |
# except Exception as e: | |
# return f"β API Error: {e}", "", None | |
# # ποΈ Gradio UI | |
# interface = gr.Interface( | |
# fn=fetch_surah, | |
# inputs=gr.Dropdown(choices=list(surah_map.keys()), label="Select Surah"), | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Ayahs"), | |
# gr.Textbox(label="π English Translation"), | |
# gr.Audio(label="π Arabic Voice Recitation") | |
# ], | |
# title="π AI Qari Bot", | |
# description="Select a Surah name to listen to Arabic AI recitation with English translation." | |
# ) | |
# interface.launch() | |
# import gradio as gr | |
# import requests | |
# from TTS.api import TTS | |
# # π Surah name mapping | |
# surah_map = { | |
# "Al-Fatiha": 1, | |
# "Al-Baqarah": 2, | |
# "Aal-i-Imran": 3, | |
# "An-Nisa": 4, | |
# "Al-Ma'idah": 5, | |
# "Al-An'am": 6, | |
# "Al-A'raf": 7, | |
# "Al-Anfal": 8, | |
# "At-Tawbah": 9, | |
# "Yunus": 10, | |
# # Add more if needed | |
# } | |
# # β Load TTS model with speaker | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/your_tts") | |
# available_speakers = tts.speakers | |
# default_speaker = available_speakers[0] # Pick the first available speaker | |
# # π Fetch Surah | |
# def fetch_surah(surah_name): | |
# surah_num = surah_map.get(surah_name) | |
# if not surah_num: | |
# return "β Invalid Surah name.", "", None | |
# try: | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_num}/editions/quran-simple,en.asad" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if 'data' in data and len(data['data']) == 2: | |
# arabic_ayahs = data['data'][0]['ayahs'] | |
# english_ayahs = data['data'][1]['ayahs'] | |
# arabic_text = "\n".join([a['text'] for a in arabic_ayahs]) | |
# english_text = "\n".join([e['text'] for e in english_ayahs]) | |
# # π Generate voice | |
# audio_path = "surah.wav" | |
# tts.tts_to_file( | |
# text=arabic_text, | |
# speaker=default_speaker, | |
# language="ar", | |
# file_path=audio_path | |
# ) | |
# return arabic_text, english_text, audio_path | |
# else: | |
# return "β Surah not found.", "", None | |
# except Exception as e: | |
# return f"β API Error: {e}", "", None | |
# # ποΈ Gradio UI | |
# interface = gr.Interface( | |
# fn=fetch_surah, | |
# inputs=gr.Dropdown(choices=list(surah_map.keys()), label="Select Surah"), | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Ayahs"), | |
# gr.Textbox(label="π English Translation"), | |
# gr.Audio(label="π Arabic Voice Recitation") | |
# ], | |
# title="π AI Qari Bot", | |
# description=f"Select a Surah to hear AI recitation. Model speaker used: {default_speaker}" | |
# ) | |
# interface.launch() | |
# import gradio as gr | |
# import requests | |
# from TTS.api import TTS | |
# # π Surah names and numbers (partial shown, full in full code) | |
# surah_info = { | |
# "Al-Fatiha": (1, 7), | |
# "Al-Baqarah": (2, 286), | |
# "Aal-i-Imran": (3, 200), | |
# "An-Nisa": (4, 176), | |
# "Al-Ma'idah": (5, 120), | |
# "Al-An'am": (6, 165), | |
# "Al-A'raf": (7, 206), | |
# "Al-Anfal": (8, 75), | |
# "At-Tawbah": (9, 129), | |
# "Yunus": (10, 109), | |
# # β Add all 114 surahs with total ayats here | |
# } | |
# # β Load TTS model | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2") | |
# speaker = "random" # or "en_0", "ar_0" | |
# # π§ Main Function | |
# def ai_quran(surah_name, ayat_num, mode): | |
# surah_num, total_ayats = surah_info.get(surah_name, (None, None)) | |
# if not surah_num: | |
# return "Invalid Surah", "", None | |
# if mode == "Full Surah": | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_num}/editions/quran-simple,en.asad" | |
# else: # Single Ayah | |
# if ayat_num < 1 or ayat_num > total_ayats: | |
# return "β Invalid Ayat number", "", None | |
# url = f"https://api.alquran.cloud/v1/ayah/{surah_num}:{ayat_num}/editions/quran-simple,en.asad" | |
# try: | |
# res = requests.get(url) | |
# res.raise_for_status() | |
# data = res.json() | |
# if mode == "Full Surah": | |
# arabic_ayahs = data['data'][0]['ayahs'] | |
# english_ayahs = data['data'][1]['ayahs'] | |
# arabic_text = "\n".join([a['text'] for a in arabic_ayahs]) | |
# english_text = "\n".join([e['text'] for e in english_ayahs]) | |
# else: | |
# arabic_text = data['data'][0]['text'] | |
# english_text = data['data'][1]['text'] | |
# # π Generate TTS | |
# audio_path = "ayat.wav" | |
# tts.tts_to_file( | |
# text=arabic_text, | |
# speaker=speaker, | |
# language="ar", | |
# file_path=audio_path | |
# ) | |
# return arabic_text, english_text, audio_path | |
# except Exception as e: | |
# return f"API Error: {e}", "", None | |
# # π§ Mode Selector | |
# def update_ayat_field(mode, surah): | |
# if mode == "Full Surah": | |
# return gr.update(visible=False) | |
# return gr.update(visible=True, maximum=surah_info[surah][1]) | |
# # ποΈ Gradio Interface | |
# with gr.Blocks(title="π AI Quran Reciter") as demo: | |
# gr.Markdown("### π AI Quran Reciter with Voice | XTTSv2 Arabic TTS") | |
# with gr.Row(): | |
# mode = gr.Radio(["Full Surah", "Single Ayat"], value="Full Surah", label="Mode") | |
# surah = gr.Dropdown(choices=list(surah_info.keys()), label="Select Surah", value="Al-Fatiha") | |
# ayat = gr.Number(label="Ayat Number", visible=False) | |
# run = gr.Button("π₯ Recite") | |
# arabic = gr.Textbox(label="π Arabic Text") | |
# english = gr.Textbox(label="π English Translation") | |
# audio = gr.Audio(label="π Listen") | |
# # Event handlers | |
# mode.change(update_ayat_field, inputs=[mode, surah], outputs=ayat) | |
# surah.change(update_ayat_field, inputs=[mode, surah], outputs=ayat) | |
# run.click(fn=ai_quran, inputs=[surah, ayat, mode], outputs=[arabic, english, audio]) | |
# demo.launch() | |
# import os | |
# import gradio as gr | |
# import requests | |
# from TTS.api import TTS | |
# # β Accept Coqui TTS license | |
# os.environ["COQUI_TOS_AGREED"] = "1" | |
# # π Surah info: name -> (number, total ayats) | |
# surah_info = { | |
# "Al-Fatiha": (1, 7), | |
# "Al-Baqarah": (2, 286), | |
# "Aal-i-Imran": (3, 200), | |
# "An-Nisa": (4, 176), | |
# "Al-Ma'idah": (5, 120), | |
# "Al-An'am": (6, 165), | |
# "Al-A'raf": (7, 206), | |
# "Al-Anfal": (8, 75), | |
# "At-Tawbah": (9, 129), | |
# "Yunus": (10, 109), | |
# "Hud": (11, 123), | |
# "Yusuf": (12, 111), | |
# "Ar-Ra'd": (13, 43), | |
# "Ibrahim": (14, 52), | |
# "Al-Hijr": (15, 99), | |
# "An-Nahl": (16, 128), | |
# "Al-Isra": (17, 111), | |
# "Al-Kahf": (18, 110), | |
# "Maryam": (19, 98), | |
# "Taha": (20, 135), | |
# # π Add remaining up to Surah 114 | |
# "An-Nas": (114, 6), | |
# } | |
# # β Load TTS with Arabic + speaker support | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2") | |
# speaker = "random" # or use "en_0", "ar_0" etc. | |
# # π Main function | |
# def ai_quran(surah_name, ayat_num, mode): | |
# surah_num, total_ayats = surah_info.get(surah_name, (None, None)) | |
# if not surah_num: | |
# return "Invalid Surah", "", None | |
# if mode == "Full Surah": | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_num}/editions/quran-simple,en.asad" | |
# else: # Single Ayah | |
# if not ayat_num or ayat_num < 1 or ayat_num > total_ayats: | |
# return f"β Ayat number must be between 1 and {total_ayats}", "", None | |
# url = f"https://api.alquran.cloud/v1/ayah/{surah_num}:{ayat_num}/editions/quran-simple,en.asad" | |
# try: | |
# res = requests.get(url) | |
# res.raise_for_status() | |
# data = res.json() | |
# if mode == "Full Surah": | |
# arabic_ayahs = data['data'][0]['ayahs'] | |
# english_ayahs = data['data'][1]['ayahs'] | |
# arabic_text = "\n".join([a['text'] for a in arabic_ayahs]) | |
# english_text = "\n".join([e['text'] for e in english_ayahs]) | |
# else: | |
# arabic_text = data['data'][0]['text'] | |
# english_text = data['data'][1]['text'] | |
# # π Generate TTS | |
# audio_path = "ayat.wav" | |
# tts.tts_to_file( | |
# text=arabic_text, | |
# speaker=speaker, | |
# language="ar", | |
# file_path=audio_path | |
# ) | |
# return arabic_text, english_text, audio_path | |
# except Exception as e: | |
# return f"API Error: {e}", "", None | |
# # π§ Ayat field visibility toggle | |
# def toggle_ayat(mode, surah): | |
# if mode == "Full Surah": | |
# return gr.update(visible=False) | |
# return gr.update(visible=True, maximum=surah_info[surah][1]) | |
# # ποΈ Gradio UI | |
# with gr.Blocks(title="π AI Quran Reciter") as demo: | |
# gr.Markdown("## π AI Quran Reciter with Arabic Voice | XTTSv2 Model") | |
# with gr.Row(): | |
# mode = gr.Radio(["Full Surah", "Single Ayat"], label="Mode", value="Full Surah") | |
# surah = gr.Dropdown(choices=list(surah_info.keys()), label="Surah", value="Al-Fatiha") | |
# ayat = gr.Number(label="Ayat Number", visible=False) | |
# recite_btn = gr.Button("π₯ Recite") | |
# arabic = gr.Textbox(label="π Arabic Text") | |
# english = gr.Textbox(label="π English Translation") | |
# audio = gr.Audio(label="π Listen") | |
# # Event hooks | |
# mode.change(toggle_ayat, inputs=[mode, surah], outputs=ayat) | |
# surah.change(toggle_ayat, inputs=[mode, surah], outputs=ayat) | |
# recite_btn.click(ai_quran, inputs=[surah, ayat, mode], outputs=[arabic, english, audio]) | |
# demo.launch() | |
# import os | |
# import gradio as gr | |
# import requests | |
# from TTS.api import TTS | |
# # β Accept Coqui license for Hugging Face Space | |
# os.environ["COQUI_TOS_AGREED"] = "1" | |
# # β Fix PyTorch 2.6 checkpoint loading issue | |
# import torch | |
# from torch.serialization import add_safe_globals | |
# from TTS.tts.configs.xtts_config import XttsConfig | |
# add_safe_globals([XttsConfig]) | |
# # β Load multilingual XTTSv2 model (speaker supported) | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2") | |
# speaker_wav = None # Optional: path to your own .wav voice file | |
# # Surah list with Ayah counts (can be extended) | |
# surah_info = { | |
# "Al-Fatiha": (1, 7), | |
# "Al-Baqarah": (2, 286), | |
# "Aal-i-Imran": (3, 200), | |
# "An-Nisa": (4, 176), | |
# "Al-Ma'idah": (5, 120), | |
# "Al-An'am": (6, 165), | |
# "Al-A'raf": (7, 206), | |
# "Al-Anfal": (8, 75), | |
# "At-Tawbah": (9, 129), | |
# "Yunus": (10, 109), | |
# "Hud": (11, 123), | |
# "Yusuf": (12, 111), | |
# "Ar-Ra'd": (13, 43), | |
# "Ibrahim": (14, 52), | |
# "Al-Hijr": (15, 99), | |
# "An-Nahl": (16, 128), | |
# "Al-Isra": (17, 111), | |
# "Al-Kahf": (18, 110), | |
# "Maryam": (19, 98), | |
# "Taha": (20, 135), | |
# "Al-Anbiya": (21, 112), | |
# "Al-Hajj": (22, 78), | |
# "Al-Mu'minun": (23, 118), | |
# "An-Nur": (24, 64), | |
# "Al-Furqan": (25, 77), | |
# "Ash-Shu'ara": (26, 227), | |
# "An-Naml": (27, 93), | |
# "Al-Qasas": (28, 88), | |
# "Al-Ankabut": (29, 69), | |
# "Ar-Rum": (30, 60), | |
# "Luqman": (31, 34), | |
# "As-Sajda": (32, 30), | |
# "Al-Ahzab": (33, 73), | |
# "Saba": (34, 54), | |
# "Fatir": (35, 45), | |
# "Ya-Sin": (36, 83), | |
# "As-Saffat": (37, 182), | |
# "Sad": (38, 88), | |
# "Az-Zumar": (39, 75), | |
# "Ghafir": (40, 85), | |
# "Fussilat": (41, 54), | |
# "Ash-Shura": (42, 53), | |
# "Az-Zukhruf": (43, 89), | |
# "Ad-Dukhan": (44, 59), | |
# "Al-Jathiya": (45, 37), | |
# "Al-Ahqaf": (46, 35), | |
# "Muhammad": (47, 38), | |
# "Al-Fath": (48, 29), | |
# "Al-Hujurat": (49, 18), | |
# "Qaf": (50, 45), | |
# "Adh-Dhariyat": (51, 60), | |
# "At-Tur": (52, 49), | |
# "An-Najm": (53, 62), | |
# "Al-Qamar": (54, 55), | |
# "Ar-Rahman": (55, 78), | |
# "Al-Waqia": (56, 96), | |
# "Al-Hadid": (57, 29), | |
# "Al-Mujadila": (58, 22), | |
# "Al-Hashr": (59, 24), | |
# "Al-Mumtahina": (60, 13), | |
# "As-Saff": (61, 14), | |
# "Al-Jumu'a": (62, 11), | |
# "Al-Munafiqun": (63, 11), | |
# "At-Taghabun": (64, 18), | |
# "At-Talaq": (65, 12), | |
# "At-Tahrim": (66, 12), | |
# "Al-Mulk": (67, 30), | |
# "Al-Qalam": (68, 52), | |
# "Al-Haqqa": (69, 52), | |
# "Al-Ma'arij": (70, 44), | |
# "Nuh": (71, 28), | |
# "Al-Jinn": (72, 28), | |
# "Al-Muzzammil": (73, 20), | |
# "Al-Muddaththir": (74, 56), | |
# "Al-Qiyamah": (75, 40), | |
# "Al-Insan": (76, 31), | |
# "Al-Mursalat": (77, 50), | |
# "An-Naba": (78, 40), | |
# "An-Nazi'at": (79, 46), | |
# "Abasa": (80, 42), | |
# "At-Takwir": (81, 29), | |
# "Al-Infitar": (82, 19), | |
# "Al-Mutaffifin": (83, 36), | |
# "Al-Inshiqaq": (84, 25), | |
# "Al-Buruj": (85, 22), | |
# "At-Tariq": (86, 17), | |
# "Al-A'la": (87, 19), | |
# "Al-Ghashiyah": (88, 26), | |
# "Al-Fajr": (89, 30), | |
# "Al-Balad": (90, 20), | |
# "Ash-Shams": (91, 15), | |
# "Al-Layl": (92, 21), | |
# "Ad-Duha": (93, 11), | |
# "Ash-Sharh": (94, 8), | |
# "At-Tin": (95, 8), | |
# "Al-Alaq": (96, 19), | |
# "Al-Qadr": (97, 5), | |
# "Al-Bayyina": (98, 8), | |
# "Az-Zalzalah": (99, 8), | |
# "Al-Adiyat": (100, 11), | |
# "Al-Qari'a": (101, 11), | |
# "At-Takathur": (102, 8), | |
# "Al-Asr": (103, 3), | |
# "Al-Humazah": (104, 9), | |
# "Al-Fil": (105, 5), | |
# "Quraysh": (106, 4), | |
# "Al-Ma'un": (107, 7), | |
# "Al-Kawthar": (108, 3), | |
# "Al-Kafirun": (109, 6), | |
# "An-Nasr": (110, 3), | |
# "Al-Masad": (111, 5), | |
# "Al-Ikhlas": (112, 4), | |
# "Al-Falaq": (113, 5), | |
# "An-Nas": (114, 6) | |
# } | |
# def recite_quran(surah_name, ayah_number, mode): | |
# surah_num, total_ayahs = surah_info[surah_name] | |
# if mode == "Full Surah": | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_num}/editions/quran-simple,en.asad" | |
# else: | |
# if not (1 <= ayah_number <= total_ayahs): | |
# return f"Ayat must be between 1 and {total_ayahs}", "", None | |
# url = f"https://api.alquran.cloud/v1/ayah/{surah_num}:{ayah_number}/editions/quran-simple,en.asad" | |
# try: | |
# res = requests.get(url) | |
# res.raise_for_status() | |
# data = res.json() | |
# if mode == "Full Surah": | |
# arabic = "\n".join([a['text'] for a in data['data'][0]['ayahs']]) | |
# english = "\n".join([a['text'] for a in data['data'][1]['ayahs']]) | |
# else: | |
# arabic = data['data'][0]['text'] | |
# english = data['data'][1]['text'] | |
# audio_path = "output.wav" | |
# tts.tts_to_file( | |
# text=arabic, | |
# speaker_wav=speaker_wav, | |
# language="ar", | |
# file_path=audio_path | |
# ) | |
# return arabic, english, audio_path | |
# except Exception as e: | |
# return f"β Error: {e}", "", None | |
# def toggle_ayah_visibility(mode, surah): | |
# if mode == "Full Surah": | |
# return gr.update(visible=False) | |
# return gr.update(visible=True, maximum=surah_info[surah][1]) | |
# # Gradio Interface | |
# with gr.Blocks(title="π Quran AI Reader (with Speaker)") as demo: | |
# gr.Markdown("## π AI Quran Reciter using XTTSv2 (Arabic Voice with Speaker)") | |
# with gr.Row(): | |
# mode = gr.Radio(["Full Surah", "Single Ayat"], label="Mode", value="Full Surah") | |
# surah = gr.Dropdown(choices=list(surah_info.keys()), label="Surah", value="Al-Fatiha") | |
# ayah = gr.Number(label="Ayat Number", visible=False) | |
# recite_btn = gr.Button("π§ Recite") | |
# arabic_box = gr.Textbox(label="π Arabic Text") | |
# english_box = gr.Textbox(label="π English Translation") | |
# audio_output = gr.Audio(label="π Listen") | |
# mode.change(toggle_ayah_visibility, inputs=[mode, surah], outputs=ayah) | |
# surah.change(toggle_ayah_visibility, inputs=[mode, surah], outputs=ayah) | |
# recite_btn.click(recite_quran, inputs=[surah, ayah, mode], outputs=[arabic_box, english_box, audio_output]) | |
# demo.launch() | |
# app.py | |
# app.py | |
# import gradio as gr | |
# import requests | |
# import torch | |
# from TTS.api import TTS # β This is the correct class | |
# import TTS.tts.configs.xtts_config | |
# import TTS.tts.models.xtts | |
# # β Required for PyTorch 2.6+ for XTTS models | |
# torch.serialization.add_safe_globals([ | |
# TTS.tts.configs.xtts_config.XttsConfig, | |
# TTS.tts.models.xtts.XttsAudioConfig | |
# ]) | |
# # β Load XTTS v2 Model (Arabic + Speaker Cloning Support) | |
# tts = TTS(model_name="tts_models/multilingual/multi-dataset/xtts_v2") | |
# # β Fetch Full Surah in Arabic & English | |
# def get_surah_text(surah_name): | |
# try: | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_name}/editions/quran-simple,en.asad" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if 'data' in data and len(data['data']) == 2: | |
# arabic = "\n".join([a['text'] for a in data['data'][0]['ayahs']]) | |
# translation = "\n".join([t['text'] for t in data['data'][1]['ayahs']]) | |
# return arabic, translation | |
# return "Surah not found.", "Translation not found." | |
# except Exception as e: | |
# return f"API Error: {e}", "" | |
# # β Gradio Inference Function | |
# def qari_bot(surah_name, speaker_audio): | |
# arabic_text, translation = get_surah_text(surah_name) | |
# if "Error" in arabic_text or "not found" in arabic_text: | |
# return arabic_text, translation, None | |
# # β Generate TTS with optional speaker audio | |
# tts.tts_to_file( | |
# text=arabic_text, | |
# speaker_wav=speaker_audio if speaker_audio else None, | |
# language="ar", | |
# file_path="output.wav" | |
# ) | |
# return arabic_text, translation, "output.wav" | |
# # β Gradio Interface | |
# interface = gr.Interface( | |
# fn=qari_bot, | |
# inputs=[ | |
# gr.Textbox(label="Surah Name (e.g., Al-Fatiha, An-Nas)", placeholder="Enter Surah name"), | |
# gr.Audio(label="Upload Speaker Audio (Optional)", type="filepath") | |
# ], | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Text"), | |
# gr.Textbox(label="π English Translation"), | |
# gr.Audio(label="π Quran Recitation") | |
# ], | |
# title="π AI Qari Bot", | |
# description="Enter a Surah name to hear full Arabic recitation with optional speaker voice." | |
# ) | |
# interface.launch() | |
# import gradio as gr | |
# import requests | |
# # β Fetch Surah data | |
# def get_surah(surah_name): | |
# try: | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_name}/editions/quran-simple,en.asad" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if 'data' in data and len(data['data']) == 2: | |
# arabic = "\n\n".join( | |
# [f"{i+1}. {a['text']}" for i, a in enumerate(data['data'][0]['ayahs'])] | |
# ) | |
# translation = "\n\n".join( | |
# [f"{i+1}. {t['text']}" for i, t in enumerate(data['data'][1]['ayahs'])] | |
# ) | |
# return arabic, translation | |
# return "Surah not found.", "Translation not found." | |
# except Exception as e: | |
# return f"API Error: {e}", "" | |
# # β Gradio UI | |
# gr.Interface( | |
# fn=get_surah, | |
# inputs=gr.Textbox(label="Enter Surah Name (e.g., Al-Fatiha, An-Nas)", placeholder="Al-Fatiha"), | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Text", lines=15), | |
# gr.Textbox(label="π English Translation", lines=15) | |
# ], | |
# title="π Surah Viewer", | |
# description="View full Surah from Quran with Arabic and English translation (No Audio)" | |
# ).launch() | |
# import gradio as gr | |
# import requests | |
# # Get surah text by number | |
# def get_surah(surah_number): | |
# try: | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_number}/editions/quran-simple,en.asad" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if 'data' in data and len(data['data']) == 2: | |
# arabic = "\n\n".join( | |
# [f"{i+1}. {a['text']}" for i, a in enumerate(data['data'][0]['ayahs'])] | |
# ) | |
# translation = "\n\n".join( | |
# [f"{i+1}. {t['text']}" for i, t in enumerate(data['data'][1]['ayahs'])] | |
# ) | |
# return arabic, translation | |
# return "β Surah not found.", "β Translation not found." | |
# except Exception as e: | |
# return f"β API Error: {e}", "" | |
# # Surah List (1-114) | |
# surah_names = [ | |
# "1 - Al-Fatiha", "2 - Al-Baqarah", "3 - Aal-E-Imran", "4 - An-Nisa", "5 - Al-Ma'idah", | |
# "6 - Al-An'am", "7 - Al-A'raf", "8 - Al-Anfal", "9 - At-Tawbah", "10 - Yunus", | |
# "11 - Hud", "12 - Yusuf", "13 - Ar-Ra'd", "14 - Ibrahim", "15 - Al-Hijr", | |
# "16 - An-Nahl", "17 - Al-Isra", "18 - Al-Kahf", "19 - Maryam", "20 - Ta-Ha", | |
# "21 - Al-Anbiya", "22 - Al-Hajj", "23 - Al-Mu'minun", "24 - An-Nur", "25 - Al-Furqan", | |
# "26 - Ash-Shu'ara", "27 - An-Naml", "28 - Al-Qasas", "29 - Al-Ankabut", "30 - Ar-Rum", | |
# "31 - Luqman", "32 - As-Sajda", "33 - Al-Ahzab", "34 - Saba", "35 - Fatir", | |
# "36 - Ya-Sin", "37 - As-Saffat", "38 - Sad", "39 - Az-Zumar", "40 - Ghafir", | |
# "41 - Fussilat", "42 - Ash-Shura", "43 - Az-Zukhruf", "44 - Ad-Dukhan", "45 - Al-Jathiya", | |
# "46 - Al-Ahqaf", "47 - Muhammad", "48 - Al-Fath", "49 - Al-Hujurat", "50 - Qaf", | |
# "51 - Adh-Dhariyat", "52 - At-Tur", "53 - An-Najm", "54 - Al-Qamar", "55 - Ar-Rahman", | |
# "56 - Al-Waqi'a", "57 - Al-Hadid", "58 - Al-Mujadila", "59 - Al-Hashr", "60 - Al-Mumtahina", | |
# "61 - As-Saff", "62 - Al-Jumua", "63 - Al-Munafiqun", "64 - At-Taghabun", "65 - At-Talaq", | |
# "66 - At-Tahrim", "67 - Al-Mulk", "68 - Al-Qalam", "69 - Al-Haqqah", "70 - Al-Ma'arij", | |
# "71 - Nuh", "72 - Al-Jinn", "73 - Al-Muzzammil", "74 - Al-Muddaththir", "75 - Al-Qiyama", | |
# "76 - Al-Insan", "77 - Al-Mursalat", "78 - An-Naba", "79 - An-Nazi'at", "80 - Abasa", | |
# "81 - At-Takwir", "82 - Al-Infitar", "83 - Al-Mutaffifin", "84 - Al-Inshiqaq", "85 - Al-Buruj", | |
# "86 - At-Tariq", "87 - Al-Ala", "88 - Al-Ghashiyah", "89 - Al-Fajr", "90 - Al-Balad", | |
# "91 - Ash-Shams", "92 - Al-Lail", "93 - Ad-Duhaa", "94 - Ash-Sharh", "95 - At-Tin", | |
# "96 - Al-Alaq", "97 - Al-Qadr", "98 - Al-Bayyina", "99 - Az-Zalzala", "100 - Al-Adiyat", | |
# "101 - Al-Qari'a", "102 - At-Takathur", "103 - Al-Asr", "104 - Al-Humaza", "105 - Al-Fil", | |
# "106 - Quraish", "107 - Al-Ma'un", "108 - Al-Kawthar", "109 - Al-Kafiroon", "110 - An-Nasr", | |
# "111 - Al-Masad", "112 - Al-Ikhlas", "113 - Al-Falaq", "114 - An-Nas" | |
# ] | |
# # Extract surah number | |
# def extract_number(surah_name): | |
# return int(surah_name.split(" - ")[0]) | |
# # Gradio App | |
# gr.Interface( | |
# fn=lambda selected: get_surah(extract_number(selected)), | |
# inputs=gr.Dropdown(choices=surah_names, label="π Select a Surah"), | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Text", lines=15), | |
# gr.Textbox(label="π English Translation", lines=15) | |
# ], | |
# title="π Quran Surah Viewer (Arabic + English)", | |
# description="Select a Surah to see its Arabic text and English translation." | |
# ).launch() | |
# import gradio as gr | |
# import requests | |
# # β Get Arabic, English, and Urdu text | |
# def get_surah(surah_number): | |
# try: | |
# url = f"https://api.alquran.cloud/v1/surah/{surah_number}/editions/quran-simple,en.asad,ur.jalandhry" | |
# response = requests.get(url) | |
# response.raise_for_status() | |
# data = response.json() | |
# if 'data' in data and len(data['data']) == 3: | |
# arabic = "\n\n".join( | |
# [f"{i+1}. {a['text']}" for i, a in enumerate(data['data'][0]['ayahs'])] | |
# ) | |
# english = "\n\n".join( | |
# [f"{i+1}. {t['text']}" for i, t in enumerate(data['data'][1]['ayahs'])] | |
# ) | |
# urdu = "\n\n".join( | |
# [f"{i+1}. {u['text']}" for i, u in enumerate(data['data'][2]['ayahs'])] | |
# ) | |
# return arabic, english, urdu | |
# return "β Surah not found.", "β English not found.", "β Urdu not found." | |
# except Exception as e: | |
# return f"β API Error: {e}", "", "" | |
# # β Surah List | |
# surah_names = [ | |
# "1 - Al-Fatiha", "2 - Al-Baqarah", "3 - Aal-E-Imran", "4 - An-Nisa", "5 - Al-Ma'idah", | |
# "6 - Al-An'am", "7 - Al-A'raf", "8 - Al-Anfal", "9 - At-Tawbah", "10 - Yunus", | |
# "11 - Hud", "12 - Yusuf", "13 - Ar-Ra'd", "14 - Ibrahim", "15 - Al-Hijr", | |
# "16 - An-Nahl", "17 - Al-Isra", "18 - Al-Kahf", "19 - Maryam", "20 - Ta-Ha", | |
# "21 - Al-Anbiya", "22 - Al-Hajj", "23 - Al-Mu'minun", "24 - An-Nur", "25 - Al-Furqan", | |
# "26 - Ash-Shu'ara", "27 - An-Naml", "28 - Al-Qasas", "29 - Al-Ankabut", "30 - Ar-Rum", | |
# "31 - Luqman", "32 - As-Sajda", "33 - Al-Ahzab", "34 - Saba", "35 - Fatir", | |
# "36 - Ya-Sin", "37 - As-Saffat", "38 - Sad", "39 - Az-Zumar", "40 - Ghafir", | |
# "41 - Fussilat", "42 - Ash-Shura", "43 - Az-Zukhruf", "44 - Ad-Dukhan", "45 - Al-Jathiya", | |
# "46 - Al-Ahqaf", "47 - Muhammad", "48 - Al-Fath", "49 - Al-Hujurat", "50 - Qaf", | |
# "51 - Adh-Dhariyat", "52 - At-Tur", "53 - An-Najm", "54 - Al-Qamar", "55 - Ar-Rahman", | |
# "56 - Al-Waqi'a", "57 - Al-Hadid", "58 - Al-Mujadila", "59 - Al-Hashr", "60 - Al-Mumtahina", | |
# "61 - As-Saff", "62 - Al-Jumua", "63 - Al-Munafiqun", "64 - At-Taghabun", "65 - At-Talaq", | |
# "66 - At-Tahrim", "67 - Al-Mulk", "68 - Al-Qalam", "69 - Al-Haqqah", "70 - Al-Ma'arij", | |
# "71 - Nuh", "72 - Al-Jinn", "73 - Al-Muzzammil", "74 - Al-Muddaththir", "75 - Al-Qiyama", | |
# "76 - Al-Insan", "77 - Al-Mursalat", "78 - An-Naba", "79 - An-Nazi'at", "80 - Abasa", | |
# "81 - At-Takwir", "82 - Al-Infitar", "83 - Al-Mutaffifin", "84 - Al-Inshiqaq", "85 - Al-Buruj", | |
# "86 - At-Tariq", "87 - Al-Ala", "88 - Al-Ghashiyah", "89 - Al-Fajr", "90 - Al-Balad", | |
# "91 - Ash-Shams", "92 - Al-Lail", "93 - Ad-Duhaa", "94 - Ash-Sharh", "95 - At-Tin", | |
# "96 - Al-Alaq", "97 - Al-Qadr", "98 - Al-Bayyina", "99 - Az-Zalzala", "100 - Al-Adiyat", | |
# "101 - Al-Qari'a", "102 - At-Takathur", "103 - Al-Asr", "104 - Al-Humaza", "105 - Al-Fil", | |
# "106 - Quraish", "107 - Al-Ma'un", "108 - Al-Kawthar", "109 - Al-Kafiroon", "110 - An-Nasr", | |
# "111 - Al-Masad", "112 - Al-Ikhlas", "113 - Al-Falaq", "114 - An-Nas" | |
# ] | |
# # β Extract number from dropdown | |
# def extract_number(surah_name): | |
# return int(surah_name.split(" - ")[0]) | |
# # β Gradio App (3 outputs now: Arabic, English, Urdu) | |
# gr.Interface( | |
# fn=lambda selected: get_surah(extract_number(selected)), | |
# inputs=gr.Dropdown(choices=surah_names, label="π Select a Surah"), | |
# outputs=[ | |
# gr.Textbox(label="π Arabic Text", lines=15), | |
# gr.Textbox(label="π English Translation", lines=15), | |
# gr.Textbox(label="π Urdu Translation", lines=15) | |
# ], | |
# title="π Quran Surah Viewer (Arabic + English + Urdu)", | |
# description="Select a Surah to view Arabic text, English translation, and Urdu translation." | |
# ).launch() | |
import gradio as gr | |
import requests | |
# β Get Surah or Ayah Text | |
def get_surah_ayah(surah_number, ayah_number): | |
try: | |
url = f"https://api.alquran.cloud/v1/surah/{surah_number}/editions/quran-simple,en.asad,ur.jalandhry" | |
response = requests.get(url) | |
response.raise_for_status() | |
data = response.json() | |
if 'data' in data and len(data['data']) == 3: | |
if ayah_number: | |
ayah_index = int(ayah_number) - 1 | |
arabic = f"{ayah_number}. {data['data'][0]['ayahs'][ayah_index]['text']}" | |
english = f"{ayah_number}. {data['data'][1]['ayahs'][ayah_index]['text']}" | |
urdu = f"{ayah_number}. {data['data'][2]['ayahs'][ayah_index]['text']}" | |
else: | |
arabic = "\n\n".join( | |
[f"{i+1}. {a['text']}" for i, a in enumerate(data['data'][0]['ayahs'])] | |
) | |
english = "\n\n".join( | |
[f"{i+1}. {t['text']}" for i, t in enumerate(data['data'][1]['ayahs'])] | |
) | |
urdu = "\n\n".join( | |
[f"{i+1}. {u['text']}" for i, u in enumerate(data['data'][2]['ayahs'])] | |
) | |
return arabic, english, urdu | |
return "β Surah not found.", "β English not found.", "β Urdu not found." | |
except Exception as e: | |
return f"β API Error: {e}", "", "" | |
# β Surah List | |
surah_names = [ | |
"1 - Al-Fatiha", "2 - Al-Baqarah", "3 - Aal-E-Imran", "4 - An-Nisa", "5 - Al-Ma'idah", | |
"6 - Al-An'am", "7 - Al-A'raf", "8 - Al-Anfal", "9 - At-Tawbah", "10 - Yunus", | |
"11 - Hud", "12 - Yusuf", "13 - Ar-Ra'd", "14 - Ibrahim", "15 - Al-Hijr", | |
"16 - An-Nahl", "17 - Al-Isra", "18 - Al-Kahf", "19 - Maryam", "20 - Ta-Ha", | |
"21 - Al-Anbiya", "22 - Al-Hajj", "23 - Al-Mu'minun", "24 - An-Nur", "25 - Al-Furqan", | |
"26 - Ash-Shu'ara", "27 - An-Naml", "28 - Al-Qasas", "29 - Al-Ankabut", "30 - Ar-Rum", | |
"31 - Luqman", "32 - As-Sajda", "33 - Al-Ahzab", "34 - Saba", "35 - Fatir", | |
"36 - Ya-Sin", "37 - As-Saffat", "38 - Sad", "39 - Az-Zumar", "40 - Ghafir", | |
"41 - Fussilat", "42 - Ash-Shura", "43 - Az-Zukhruf", "44 - Ad-Dukhan", "45 - Al-Jathiya", | |
"46 - Al-Ahqaf", "47 - Muhammad", "48 - Al-Fath", "49 - Al-Hujurat", "50 - Qaf", | |
"51 - Adh-Dhariyat", "52 - At-Tur", "53 - An-Najm", "54 - Al-Qamar", "55 - Ar-Rahman", | |
"56 - Al-Waqi'a", "57 - Al-Hadid", "58 - Al-Mujadila", "59 - Al-Hashr", "60 - Al-Mumtahina", | |
"61 - As-Saff", "62 - Al-Jumua", "63 - Al-Munafiqun", "64 - At-Taghabun", "65 - At-Talaq", | |
"66 - At-Tahrim", "67 - Al-Mulk", "68 - Al-Qalam", "69 - Al-Haqqah", "70 - Al-Ma'arij", | |
"71 - Nuh", "72 - Al-Jinn", "73 - Al-Muzzammil", "74 - Al-Muddaththir", "75 - Al-Qiyama", | |
"76 - Al-Insan", "77 - Al-Mursalat", "78 - An-Naba", "79 - An-Nazi'at", "80 - Abasa", | |
"81 - At-Takwir", "82 - Al-Infitar", "83 - Al-Mutaffifin", "84 - Al-Inshiqaq", "85 - Al-Buruj", | |
"86 - At-Tariq", "87 - Al-Ala", "88 - Al-Ghashiyah", "89 - Al-Fajr", "90 - Al-Balad", | |
"91 - Ash-Shams", "92 - Al-Lail", "93 - Ad-Duhaa", "94 - Ash-Sharh", "95 - At-Tin", | |
"96 - Al-Alaq", "97 - Al-Qadr", "98 - Al-Bayyina", "99 - Az-Zalzala", "100 - Al-Adiyat", | |
"101 - Al-Qari'a", "102 - At-Takathur", "103 - Al-Asr", "104 - Al-Humaza", "105 - Al-Fil", | |
"106 - Quraish", "107 - Al-Ma'un", "108 - Al-Kawthar", "109 - Al-Kafiroon", "110 - An-Nasr", | |
"111 - Al-Masad", "112 - Al-Ikhlas", "113 - Al-Falaq", "114 - An-Nas" | |
] | |
# β Extract Surah Number | |
def extract_number(surah_name): | |
return int(surah_name.split(" - ")[0]) | |
# β Gradio App (Surah + Ayah input) | |
gr.Interface( | |
fn=lambda surah, ayah: get_surah_ayah(extract_number(surah), ayah), | |
inputs=[ | |
gr.Dropdown(choices=surah_names, label="π Select Surah"), | |
gr.Textbox(label="π’ Optional Ayah Number (e.g., 1, 5, 7)") | |
], | |
outputs=[ | |
gr.Textbox(label="π Arabic", lines=10), | |
gr.Textbox(label="π English", lines=10), | |
gr.Textbox(label="π Urdu", lines=10) | |
], | |
title="π Quran Surah & Ayah Viewer (Arabic + English + Urdu)", | |
description="Select a Surah, optionally enter an Ayah number to view that verse only. Leave blank for full Surah." | |
).launch() | |