import os import gradio as gr from datetime import datetime from docx import Document from docx.shared import Pt, RGBColor from docx.enum.text import WD_ALIGN_PARAGRAPH from audio_processor import AudioProcessor import config class NewsApp: def __init__(self): self.processor = AudioProcessor() def process_audio_file(self, audio_file, content_type="news", language="tr"): """Process audio file and generate content""" try: if audio_file is None: return "Lütfen bir ses dosyası yükleyin.", None # Print debug information print(f"Received audio file: {audio_file}") # Create temporary file to save the uploaded content temp_dir = "temp_audio" os.makedirs(temp_dir, exist_ok=True) # Generate a unique filename timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") temp_audio_path = os.path.join(temp_dir, f"temp_audio_{timestamp}.m4a") # Save the uploaded file with open(temp_audio_path, "wb") as f: f.write(audio_file) print(f"Saved temporary file to: {temp_audio_path}") # Process audio and generate content results = self.processor.process_audio( audio_path=temp_audio_path, language=language, content_type=content_type, generate_content=True ) if not results.get("generated_content"): return "İçerik oluşturulamadı. Lütfen ses kaydını kontrol edin.", None # Create Word document doc = Document() # Add title title = doc.add_heading(results["generated_content"]["title"], 0) title.alignment = WD_ALIGN_PARAGRAPH.CENTER # Add date date_paragraph = doc.add_paragraph() date_paragraph.alignment = WD_ALIGN_PARAGRAPH.RIGHT date_run = date_paragraph.add_run(f"Tarih: {results['date']}") date_run.font.size = Pt(10) date_run.font.color.rgb = RGBColor(128, 128, 128) # Add separator doc.add_paragraph("").add_run("_" * 50) # Add content content_lines = results["generated_content"]["content"].split('\n') current_paragraph = None for line in content_lines: if line.strip(): if line.startswith('#'): # Handle headers level = line.count('#') text = line.strip('#').strip() doc.add_heading(text, level) else: if current_paragraph is None or line.startswith('*'): current_paragraph = doc.add_paragraph() current_paragraph.add_run(line) else: current_paragraph = None # Save document output_dir = "data/output" os.makedirs(output_dir, exist_ok=True) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") doc_path = os.path.join(output_dir, f"haber_{timestamp}.docx") doc.save(doc_path) # Return success message and document path return f"İçerik başarıyla oluşturuldu!", doc_path except Exception as e: return f"Hata oluştu: {str(e)}", None def create_ui(): """Create Gradio interface""" app = NewsApp() with gr.Blocks(title="Ses Dosyasından Haber Oluşturma", theme=gr.themes.Soft()) as interface: gr.Markdown(""" # 🎙️ Ses Dosyasından Haber/Blog Oluşturma Ses kaydınızı yükleyin, yapay zeka destekli sistemimiz sizin için profesyonel bir haber metni veya blog yazısı oluştursun. ### Nasıl Kullanılır: 1. Ses dosyanızı yükleyin (.mp3, .m4a, .wav formatları desteklenir) 2. İçerik tipini seçin (Haber/Blog) 3. Dili seçin 4. "Oluştur" butonuna tıklayın 5. Oluşturulan Word belgesini indirin ### Önemli Notlar: - Desteklenen ses formatları: MP3, M4A, WAV - Maksimum dosya boyutu: 25MB - İşlem süresi dosya boyutuna göre değişebilir - Türkçe ve İngilizce dilleri desteklenmektedir """) with gr.Row(): with gr.Column(): audio_input = gr.File( label="Ses Dosyası", file_types=[".mp3", ".m4a", ".wav"], type="binary" ) content_type = gr.Radio( choices=["news", "blog"], value="news", label="İçerik Tipi", info="Oluşturulacak içeriğin türünü seçin" ) language = gr.Radio( choices=["tr", "en"], value="tr", label="Dil", info="İçeriğin dilini seçin" ) submit_btn = gr.Button("Oluştur", variant="primary") with gr.Column(): output_message = gr.Textbox( label="Durum", interactive=False ) output_file = gr.File( label="Oluşturulan Dosya", interactive=False ) submit_btn.click( fn=app.process_audio_file, inputs=[audio_input, content_type, language], outputs=[output_message, output_file] ) return interface if __name__ == "__main__": demo = create_ui() demo.launch()