| 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) |
| |
| |
| audio_data = client.text_to_sound_effects.convert( |
| text=text_prompt, |
| duration_seconds=duration |
| ) |
| |
| |
| 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)}") |
|
|
| |
| 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_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" |
| ) |
| |
| |
| 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 |
| ) |
| |
| |
| 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 |
|
|
| |
| demo = create_interface() |
| demo.launch() |