File size: 2,125 Bytes
aa95dd5
bc18a34
 
a2087de
a160271
 
 
 
 
 
a2087de
 
 
 
 
 
 
bc18a34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
699ea5d
02665d5
 
 
7d0efdb
bc18a34
699ea5d
 
02665d5
bc18a34
 
2796462
2d9d2d5
a9616a3
2d9d2d5
a2087de
2796462
 
 
 
 
a2087de
2796462
 
bc18a34
 
a2087de
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
import gradio as gr
import requests

def generate_audio(text, voice_name):
    
    MAX_CHARS = 100
    # μž…λ ₯된 ν…μŠ€νŠΈ 길이 검증
    if len(text) > MAX_CHARS:
        text = text[:MAX_CHARS]  # μ΅œλŒ€ κΈ€μžμˆ˜λ‘œ ν…μŠ€νŠΈ 자λ₯΄κΈ°
        
    voices = {
        "μ°¨μŠΉμ›": "SKwm0HLYsVDCM2ruvw2p",
        "김정은": "YPWL3nQPzBN1XaiZF4aj",
        "ꢁ예": "4kFrgJPCTjA6DyPM5Gr5"
    }
    voice_id = voices[voice_name]
    url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
    model_id = "eleven_multilingual_v2"
    payload = {
        "model_id": model_id,
        "text": text,
        "voice_settings": {
            "similarity_boost": 0.75,
            "stability": 0.5,
            "style": 0,
            "use_speaker_boost": True
        }
    }
    headers = {
        "Content-Type": "application/json",
        "xi-api-key": "c5fb99a2b25402f104d246379bcf819a"
    }

    response = requests.post(url, json=payload, headers=headers, stream=True)

    if response.status_code == 200:
        chunks = []
        for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
            chunks.append(chunk)
        return b''.join(chunks)
    else:
        raise Exception(f"였λ₯˜ λ°œμƒ. μƒνƒœ μ½”λ“œ: {response.status_code}")

CHUNK_SIZE = 1024


# Gradio μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
with gr.Blocks() as demo:
    gr.Markdown(""따라 보이슀: AI μŒμ„± 볡제, 생성 Playground" ")
    gr.Markdown("AIκ°€ λ³΅μ œν•œ 유λͺ…μΈμ˜ μŒμ„±μœΌλ‘œ, ν…μŠ€νŠΈλ§Œ μž…λ ₯ν•˜λ©΄ μžμ—°μŠ€λŸ½κ²Œ ν•΄λ‹Ή 인물의 μŒμ„±μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.")
    text_input = gr.Textbox(label="μŒμ„±μœΌλ‘œ 생성할 ν…μŠ€νŠΈλ₯Ό μž…λ ₯ν•˜μ„Έμš”.(100κΈ€μž 이내 μ œν•œ μ„€μ •λ˜μ–΄, μ΄ˆκ³Όμ‹œ μŒμ„± 생성이 μ œν•œλ©λ‹ˆλ‹€.)")
    voice_choice = gr.Dropdown(choices=["μ°¨μŠΉμ›", "김정은", "ꢁ예"], label="μŒμ„± 선택")
    submit_button = gr.Button("생성")
    audio_output = gr.Audio(label="μƒμ„±λœ μ˜€λ””μ˜€")

    submit_button.click(
        fn=generate_audio,
        inputs=[text_input, voice_choice],
        outputs=audio_output
    )

if __name__ == "__main__":
    demo.launch()