File size: 2,827 Bytes
dad9c94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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()