|
import gradio as gr |
|
import assemblyai as aai |
|
from translate import Translator |
|
from elevenlabs import VoiceSettings |
|
from elevenlabs.client import ElevenLabs |
|
import uuid |
|
from pathlib import Path |
|
|
|
|
|
def voice_to_voice(): |
|
|
|
|
|
transcription_response = audio_transcription(audio_file) |
|
|
|
if transcript.status == aai.TranscriptStatus.error: |
|
raise gr.Error(transcription_response.error) |
|
else: |
|
text = transcription_response.text |
|
|
|
es_translation, en_translation, ja_translation = text_translation(text) |
|
|
|
es_audio_path = text_to_speech(es_translation) |
|
en_audio_path = text_to_speech(en_translation) |
|
ja_audio_path = text_to_speech(ja_translation) |
|
|
|
es_path = Path(es_audio_path) |
|
en_path = Path(en_audio_path) |
|
ja_path = Path(ja_audio_path) |
|
return ja_path,en_path,es_path |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def audio_translation(): |
|
|
|
aai.settings.api_key = "d502d55e78d54bff9c03b19031129069" |
|
|
|
transcriber = aai.Transcriber() |
|
transcription = transcriber.transcribe(audio_file) |
|
return transcription |
|
|
|
|
|
|
|
|
|
|
|
def text_translation(): |
|
|
|
translator_es(from_lang="tr", to_lang="es") |
|
es_text = translator_es.translate(text) |
|
|
|
translator_en(from_lang="tr", to_lang="en") |
|
en_text = translator_en.translate(text) |
|
|
|
translator_ja(from_lang="tr", to_lang="ja") |
|
ja_text = translator_ja.translate(text) |
|
|
|
return es_text, en_text, ja_text |
|
|
|
def text_to_speech(text): |
|
|
|
ELEVENLABS_API_KEY = os.getenv("sk_c65e00fa906e4d07b84d74a83cc2e6661a4a57261ae714ea") |
|
client = ElevenLabs( |
|
api_key=ELEVENLABS_API_KEY, |
|
) |
|
|
|
|
|
response = client.text_to_speech.convert( |
|
voice_id="pNInz6obpgDQGcFmaJgB", |
|
optimize_streaming_latency="0", |
|
output_format="mp3_22050_32", |
|
text=text, |
|
model_id="eleven_turbo_v2", |
|
voice_settings=VoiceSettings( |
|
stability=0.0, |
|
similarity_boost=1.0, |
|
style=0.0, |
|
use_speaker_boost=True, |
|
), |
|
) |
|
|
|
|
|
|
|
|
|
|
|
save_file_path = f"{uuid.uuid4()}.mp3" |
|
|
|
|
|
with open(save_file_path, "wb") as f: |
|
for chunk in response: |
|
if chunk: |
|
f.write(chunk) |
|
|
|
print(f"{save_file_path}: A new audio file was saved successfully!") |
|
|
|
|
|
return save_file_path |
|
|
|
audio_input = gr.Audio( |
|
sources=["microphone"], |
|
type="filepath" |
|
) |
|
|
|
|
|
demo = gr.Interface( |
|
fn=voice_to_voice, |
|
inputs=audio_input, |
|
outputs = [gr.Audio(label="Spanish"), gr.Audio(label="Turkish"), gr.Audio(label="Japanese")] |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch(share=True) |
|
|
|
|