voice_generator / app.py
mrestrepo's picture
save and get video to gcp
ff92946
raw
history blame
1.96 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 signed_url_audio
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()