Spaces:
Runtime error
Runtime error
File size: 4,813 Bytes
88b0de1 1165da5 88b0de1 1165da5 f539be4 634e467 f539be4 634e467 6e94458 a25f31d 634e467 f539be4 634e467 6e403ce 634e467 f539be4 9d3f5dd f539be4 6e94458 634e467 6e94458 f539be4 634e467 f539be4 634e467 1165da5 f539be4 634e467 6e94458 634e467 f539be4 634e467 f539be4 6e94458 f539be4 6e94458 f539be4 634e467 f539be4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
#Open API KEY:-
#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
#Eleven Lab API KEY:-
#sk_044c9cf1dd6faa95c78f01af4b538c2a2cdd8b9e9c373510
import os
import gradio as gr
import openai
import tempfile
import logging
from dotenv import load_dotenv
import requests
# Load environment variables from .env file
load_dotenv()
# Set up logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Set up API keys
openai_api_key = os.getenv('OPENAI_API_KEY')
eleven_labs_api_key = os.getenv('ELEVEN_LABS_API_KEY')
if not openai_api_key:
raise ValueError("OPENAI_API_KEY is not set.")
else:
logger.info("OpenAI API key is set.")
if not eleven_labs_api_key:
raise ValueError("ELEVEN_LABS_API_KEY is not set.")
else:
logger.info("Eleven Labs API key is set.")
# Set the API key for OpenAI
openai.api_key = openai_api_key
def text_to_speech_elevenlabs(text, voice="Rachel"):
url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice}"
headers = {
"Accept": "audio/mpeg",
"Content-Type": "application/json",
"xi-api-key": eleven_labs_api_key
}
data = {
"text": text,
"model_id": "eleven_multilingual_v1",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.75
}
}
response = requests.post(url, json=data, headers=headers)
response.raise_for_status()
# Save the audio content
temp_audio_file = tempfile.NamedTemporaryFile(delete=False, suffix='.mp3')
with open(temp_audio_file.name, 'wb') as f:
f.write(response.content)
return temp_audio_file.name
def process_audio(audio_file, target_language):
try:
# Transcribe audio using OpenAI Whisper API
with open(audio_file, "rb") as audio_file_for_openai:
result = openai.Audio.transcribe("whisper-1", audio_file_for_openai)
user_text = result['text']
logger.info(f"Transcription successful: {user_text}")
except Exception as e:
logger.error(f"Error in transcribing audio: {e}")
return "Error in transcribing audio.", None
try:
# Translate text using OpenAI's ChatGPT API
messages = [
{
"role": "system",
"content": f"You are a helpful assistant that translates English to {target_language}."
},
{
"role": "user",
"content": f"Please translate the following text to {target_language}: {user_text}"
}
]
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages
)
response_text = response['choices'][0]['message']['content'].strip()
logger.info(f"Translation successful: {response_text}")
except Exception as e:
logger.error(f"Error in generating translation with OpenAI API: {e}")
return "Error in generating translation.", None
try:
# Convert translated text to speech using Eleven Labs API directly
temp_audio_file_name = text_to_speech_elevenlabs(response_text)
logger.info("Text-to-speech conversion successful.")
except Exception as e:
logger.error(f"Error in text-to-speech conversion: {e}")
return "Error in text-to-speech conversion.", None
return response_text, temp_audio_file_name
# Optional: Function to list available voices
def list_available_voices():
url = "https://api.elevenlabs.io/v1/voices"
headers = {
"Accept": "application/json",
"xi-api-key": eleven_labs_api_key
}
response = requests.get(url, headers=headers)
response.raise_for_status()
voices = response.json()
print("Available voices:")
for voice in voices['voices']:
print(f"Name: {voice['name']}, Voice ID: {voice['voice_id']}")
# Uncomment the following line to list available voices
# list_available_voices()
# Create Gradio interface
iface = gr.Interface(
fn=process_audio,
inputs=[
gr.Audio(type="filepath", label="Input Audio"),
gr.Dropdown(
choices=["French", "Spanish", "German", "Chinese", "Japanese", "Hindi"],
value="French",
label="Target Language"
)
],
outputs=[
gr.Textbox(label="Translated Text"),
gr.Audio(label="Translated Speech")
],
title="Multilingual Translator",
description="Upload an audio file and translate it into a different language.",
live=False
)
try:
iface.launch()
logger.info("Gradio interface launched successfully.")
except Exception as e:
logger.error(f"Failed to launch Gradio interface: {e}")
raise
|