|
|
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() |