import tkinter as tk from tkinter import filedialog import os import shutil import pygame from moviepy.editor import VideoFileClip import openai from open_ai_voice import text_to_voice_openai from Combined import combine_audio_video tts = False if tts: from TTS.api import TTS client = openai.OpenAI(api_key="sk-proj-8nFPKH1bvaw0KH93XKAfT3BlbkFJUW2IOhGnIf95oCK3VZXn") def contect_gather(subject): selected_language = language_var.get() if selected_language == "en": response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": f"Write a About 200 words paraghraph short story about the {subject} with a positive and adventurous tone. Avoid violence, hatred, and mature themes?"}, ] ) else: response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "انت كاتب قصص."}, {"role": "user", "content": f"اكتب قصة صغيره عن {subject}"}, ] ) print(response.choices[0].message.content) return response.choices[0].message.content tts = True # Initialize tts as None initially # Initialize TTS object if tts is True if tts: from TTS.api import TTS tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False) # Function to convert text to voice def text_to_voice(text, speaker, language): selected_ai = model_var.get() if selected_ai == 1: text_to_voice_openai(text) elif tts: # Check if tts is initialized before calling tts_to_file tts.tts_to_file(text=text, file_path="output.wav", speaker_wav=f"sounds/{speaker}", language=language, split_sentences=True ) play_audio("output.wav") else: print("TTS is not initialized. Set 'tts' to True and provide appropriate configuration.") # Function to play audio using pygame def play_audio(file_path): pygame.mixer.init() pygame.mixer.music.load(file_path) pygame.mixer.music.play() # Function to import voice def import_voice(): file_path = filedialog.askopenfilename() if file_path: save_path = "sounds/" os.makedirs(save_path, exist_ok=True) save_path = os.path.join(save_path, os.path.basename(file_path)) shutil.copyfile(file_path, save_path) print(f"File '{file_path}' imported and saved to '{save_path}'") refresh_file_list() # Function to refresh file list def refresh_file_list(): sound_folder = "sounds/" file_listbox.delete(0, tk.END) # Clear the listbox for file_name in os.listdir(sound_folder): file_listbox.insert(tk.END, file_name) # Function to process data def process_data(): selected_file = file_listbox.get(tk.ACTIVE) # Get the selected file name selected_language = language_var.get() # Get the selected language if var.get() == 1: # Code to send data from single line textbox to API single_line_data = single_line_textbox.get() text_ai = contect_gather(single_line_data) text_to_voice(text_ai, selected_file, selected_language) print("Sending single line data, selected file, and selected language to API:", single_line_data, selected_file, selected_language) elif var.get() == 2: # Code to process data from multi-line textbox multi_line_data = multi_line_textbox.get("1.0", tk.END) text_to_voice(multi_line_data, selected_file, selected_language) print("Processing multi-line data, selected file, and selected language:", multi_line_data, selected_file, selected_language) combine_audio_video("output.wav", "original_video.webm", "combined_video.mp4") # Function to save video def save_video(): # Code to save video pass # Create the main window root = tk.Tk() root.title("Make a story") root.geometry("800x800") # Create radio buttons for textboxes var = tk.IntVar() single_line_radio = tk.Radiobutton(root, text="Single Line Textbox", variable=var, value=1) multi_line_radio = tk.Radiobutton(root, text="Multi Line Textbox", variable=var, value=2) single_line_radio.grid(row=0, column=0, padx=10, pady=10, sticky="w") multi_line_radio.grid(row=1, column=0, padx=10, pady=10, sticky="w") # Create radio buttons for language selection language_var = tk.StringVar() language_var.set("AR") # Default selection ar_radio = tk.Radiobutton(root, text="AR", variable=language_var, value="ar") en_radio = tk.Radiobutton(root, text="EN", variable=language_var, value="en") ar_radio.grid(row=2, column=0, padx=10, pady=5, sticky="w") en_radio.grid(row=2, column=1, padx=10, pady=5, sticky="w") model_var = tk.IntVar() model_var.set(1) # Default to OpenAI openai_radio = tk.Radiobutton(root, text="OpenAI Model", variable=model_var, value=1) xtts_radio = tk.Radiobutton(root, text="xtts", variable=model_var, value=2) openai_radio.grid(row=3, column=0, padx=10, pady=5, sticky="w") xtts_radio.grid(row=3, column=1, padx=10, pady=5, sticky="w") # Create textboxes single_line_textbox = tk.Entry(root) multi_line_textbox = tk.Text(root, height=5, width=30) single_line_textbox.grid(row=0, column=1, padx=10, pady=10, sticky="ew") multi_line_textbox.grid(row=1, column=1, padx=10, pady=10, sticky="ew") # Create import button import_button = tk.Button(root, text="Import Voice", command=import_voice) import_button.grid(row=4, column=0, padx=10, pady=10, sticky="ew") # Create listbox for file names file_listbox = tk.Listbox(root) file_listbox.grid(row=4, column=1, padx=10, pady=10, sticky="nsew") refresh_file_list() # Refresh the file list initially # Create process button process_button = tk.Button(root, text="Process Data", command=process_data) process_button.grid(row=5, column=0, columnspan=2, padx=10, pady=10, sticky="ew") # Create canvas for video and audio player video_canvas = tk.Canvas(root, bg="black", width=400, height=300) video_canvas.grid(row=6, column=0, columnspan=2, padx=10, pady=10) # Function to play video def play_video(file_path): clip = VideoFileClip(file_path) clip.preview() # Function to play audio or video based on the file type def play_media(file_path): if file_path.endswith(".mp3") or file_path.endswith(".wav"): play_audio(file_path) elif file_path.endswith(".mp4") or file_path.endswith(".avi"): play_video(file_path) # Function to display output file in the canvas and play media def display_output(): file_path = "combined_video.mp4" if os.path.exists(file_path): play_media(file_path) # Display output on canvas # You need to implement this part using a suitable library like pygame for displaying images or videos on canvas. # Create save video button save_button = tk.Button(root, text="Save Video", command=combine_audio_video("output.wav", "original_video.webm", "combined_video.mp4")) save_button.grid(row=7, column=0, columnspan=2, padx=10, pady=10, sticky="ew") combine_audio_video("output.wav", "original_video.webm", "combined_video.mp4") root.mainloop()