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 음성 복제, 생성 시뮬레이션 ") 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()