voice_generator / app.py
mrestrepo's picture
Validate audio download file
33c11bc
raw
history blame
1.98 kB
import os
import gradio as gr
import uuid
import requests
import pathlib
from elevenlabs.client import ElevenLabs, AsyncElevenLabs
from elevenlabs import play, save, Voice, stream
from dotenv import load_dotenv
from datetime import timedelta
from gcloud import storage
load_dotenv()
KEY_ELEVENLABS = os.getenv('ELEVENLABS_KEY')
async def generate_audio(text_input: str, creator: str) -> str:
voice_id = ''
match creator:
case 'Roomie':
voice_id = '2Onew6n5JwT9uEbmTSrO'
case 'Xavy':
voice_id = 'cYBsY94mzMC7VpGoVMgr'
case 'Bella':
voice_id = 'X9j5sAaRD6aEgBblOUOG'
CLIENT_ELEVENLABS = ElevenLabs(api_key=KEY_ELEVENLABS)
VOICE_CREATOR = Voice(voice_id=voice_id)
CREDENTIALS_GCP = os.getenv("GOOGLE_APPLICATION_CREDENTIALS")
NAME_BUCKET = os.getenv("NAME_BUCKET")
unique_id = str(uuid.uuid4())
STORAGE_CLIENT = storage.Client.from_service_account_json(CREDENTIALS_GCP)
audio = CLIENT_ELEVENLABS.generate(
text=text_input,
voice=VOICE_CREATOR,
model="eleven_multilingual_v2"
)
source_audio_file_name = f'./audios/file_audio_{unique_id}.wav'
try:
save(audio, source_audio_file_name)
except Exception as e:
print(e)
destination_blob_name_audio = unique_id + '.wav'
bucket = STORAGE_CLIENT.bucket(NAME_BUCKET)
blob = bucket.blob(destination_blob_name_audio)
try:
blob.upload_from_filename(source_audio_file_name)
except Exception as e:
print(e)
try:
url_expiration = timedelta(minutes=15)
signed_url_audio = blob.generate_signed_url(expiration=url_expiration)
except Exception as e:
print(e)
return gr.Audio(value=source_audio_file_name)
app = gr.Interface(
fn=generate_audio,
inputs=[gr.Textbox(label='Text to Speach'), gr.Dropdown(
['Roomie', 'Xavy', 'Bella'], label="Coice your creator")],
outputs=['audio']
)
app.launch()