import gradio as gr import os import io import tempfile from elevenlabs import ElevenLabs import numpy as np import soundfile as sf def get_elevenlabs_client(api_key): """Skapa ElevenLabs-klient med API-nyckel""" return ElevenLabs(api_key=api_key) def generate_sound_effect(text_prompt, api_key, duration=30.0): """Generera ljudeffekt med ElevenLabs Sound Effects API""" try: client = get_elevenlabs_client(api_key) # Generera ljud från text audio_data = client.text_to_sound_effects.convert( text=text_prompt, duration_seconds=duration ) # Spara till temporär fil with tempfile.NamedTemporaryFile(delete=False, suffix='.wav') as tmp_file: tmp_file.write(audio_data.read()) return tmp_file.name except Exception as e: raise Exception(f"Fel vid generering: {str(e)}") # Skapa Gradio-gränssnitt def create_interface(): with gr.Blocks(title="ElevenLabs Sound Effects Editor") as demo: gr.Markdown("# 🎵 ElevenLabs Sound Effects Editor") gr.Markdown("Använd ElevenLabs AI för att generera ljudeffekter!") # API-nyckel input api_key_input = gr.Textbox( label="ElevenLabs API-nyckel", type="password", placeholder="Skriv in din ElevenLabs API-nyckel här...", info="Du hittar din API-nyckel på https://elevenlabs.io/api" ) # Huvudgränssnitt with gr.Row(): with gr.Column(): prompt_input = gr.Textbox( label="Text-prompt", placeholder="Ex: Cinematic explosion, Rain falling, Sci-fi laser", lines=3 ) duration_slider = gr.Slider( minimum=1.0, maximum=10.0, value=3.0, step=0.5, label="Varaktighet (sekunder)" ) with gr.Column(): audio_output = gr.Audio(label="Genererad ljudeffekt") generate_btn = gr.Button("🔊 Generera ljud", variant="primary") generate_btn.click( fn=generate_sound_effect, inputs=[prompt_input, api_key_input, duration_slider], outputs=audio_output ) # Tips gr.Markdown(""" ### 💡 Tips för bra prompts: - **Miljö:** "Rain falling on leaves", "Ocean waves", "Forest birds" - **Effekter:** "Explosion with debris", "Laser gun firing", "Magic sparkle" - **Föremål:** "Door creaking", "Keys jangling", "Pages turning" """) return demo # Skapa och kör appen demo = create_interface() demo.launch()