import gradio as gr import requests def generate_audio(text, voice_name): # 각 음성 옵션에 대한 기본 텍스트 예시 default_examples = { "남성AI": "안녕하세요, 남성 AI 표준 음성입니다.", "여성AI": "안녕하세요, 여성 AI 표준 음성입니다.", "트럼프": "Make, America, Great, Again! , 다시, 위대한, 미국을, 만듭시다!", "차승원": "안녕하세요, 새해 복 많이 받으시길 기원합니다.", "김정은": "안녕하세요, 새해 복 많이 받으시길 기원합니다.", "노무현": "안녕하세요, 새해 복 많이 받으시길 기원합니다.", "곽철용": "마포 대교는 무너졌냐~? , 내 순정을 묻고, 더블로 가~!", "궁예": "안녕하세요, 미륵의 가르침은, 옴마니 반메홈이니라.", "윤석열": "안녕하세요, 새해 복 많이 받으시길 기원합니다." } MAX_CHARS = 100 if not text: text = default_examples[voice_name] # 사용자 입력이 없으면 기본 예시 사용 elif len(text) > MAX_CHARS: text = text[:MAX_CHARS] # 최대 글자수로 텍스트 자르기 voices = { "남성AI": "6uQD2RqeSgIey9LVBafG", "여성AI": "jeuEgCxtyEYkC3zsQODy", "트럼프": "nP4xQZkEwzlvgutdc3xM", "차승원": "SKwm0HLYsVDCM2ruvw2p", "김정은": "YPWL3nQPzBN1XaiZF4aj", "노무현": "6JdivX36i1eJ3LqLmvwH", "곽철용": "xareIzgmUtHZat32qZIN", "궁예": "4kFrgJPCTjA6DyPM5Gr5", "윤석열": "Qrf03Q67kRgpFlj9fto3" } 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("FakeVoice: AI가 복제한 유명인의 음성으로, 텍스트만 입력하면 자연스럽게 해당 인물의 음성으로 생성합니다.") gr.Markdown("지금 커뮤니티에 참여하시면 더욱 많은 정보와 다양한 기회를 얻으실 것입니다. 커뮤니티 참여 링크 https://open.kakao.com/o/gE6hK9Vf ") gr.Markdown("음성을 먼저 선택한 후 원하시는 텍스트를 입력하세요. 텍스트를 입력하지 않고 생성을 누르면 예시 대사가 생성됩니다.") gr.Markdown("생성된 오디오를 다운로드 할 수 있습니다. 다운로드 받으신 후 다운로드 받은 파일의 확장자를 mp3로 변경하시면 됩니다. ") voice_choice = gr.Dropdown(choices=["남성AI", "여성AI", "트럼프", "차승원", "김정은", "노무현", "곽철용", "궁예", "윤석열"], label="음성 선택") text_input = gr.Textbox(label="음성으로 생성할 텍스트를 입력하세요.(100글자 이내 제한 설정되어, 초과시 음성 생성이 제한됩니다.)") 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()