import gradio as gr import requests def generate_audio(text, voice_name): 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 = 300 # Gradio 인터페이스 정의 with gr.Blocks() as demo: gr.Markdown("### 텍스트를 복제된 음성으로 변환") 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()