Spaces:
Sleeping
Sleeping
| import tempfile | |
| import gradio as gr | |
| from openai import OpenAI | |
| def text_to_audio(api_key, text, voice_name): | |
| """ | |
| Convert text to speech using OpenAI's TTS API | |
| """ | |
| # Input validation | |
| if not api_key or not api_key.strip(): | |
| raise gr.Error("Please provide an OpenAI API key") | |
| if not text or not text.strip(): | |
| raise gr.Error("Please provide some text to convert to speech") | |
| try: | |
| # Initialize OpenAI client with the provided API key | |
| client = OpenAI(api_key=api_key.strip()) | |
| # Create a temporary file to store the audio | |
| with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_audio_file: | |
| speech_file_path = temp_audio_file.name | |
| # Generate speech using OpenAI's API | |
| response = client.audio.speech.create( | |
| model="tts-1", | |
| voice=voice_name.strip(), # Ensure voice name is properly formatted | |
| input=text.strip() | |
| ) | |
| # Save the audio to the temporary file | |
| response.stream_to_file(speech_file_path) | |
| return speech_file_path | |
| except Exception as e: | |
| raise gr.Error(f"Error: {str(e)}") | |
| # Create the Gradio interface | |
| demo = gr.Interface( | |
| fn=text_to_audio, | |
| inputs=[ | |
| gr.Textbox( | |
| label="OpenAI API Key", | |
| placeholder="Enter your OpenAI API key", | |
| type="password" | |
| ), | |
| gr.Textbox( | |
| label="Enter Text", | |
| placeholder="Enter the text you want to convert to speech", | |
| lines=6 | |
| ), | |
| gr.Dropdown( | |
| choices=["alloy", "echo", "fable", "onyx", "nova", "shimmer"], | |
| label="Select Voice", | |
| value="nova" | |
| ) | |
| ], | |
| outputs=gr.Audio( | |
| label="Generated Audio", | |
| type="filepath" | |
| ), | |
| title="Text to Speech with OpenAI", | |
| description="Convert text to speech using OpenAI's TTS API. Enter your API key (not stored), type your text, and select a voice.", | |
| ) | |
| # Launch the app | |
| if __name__ == "__main__": | |
| demo.launch() | |
| else: | |
| demo.launch(show_error=True) |