import gradio as gr from gtts import gTTS from pydub import AudioSegment import numpy as np import os import io def text_to_speech(prompt): # gTTS를 사용하여 Bulgarian 텍스트를 음성으로 변환 tts = gTTS(text=prompt, lang="bg") audio_file = "output.mp3" tts.save(audio_file) # pydub을 사용하여 mp3 파일을 로드합니다. sound = AudioSegment.from_mp3(audio_file) # pydub의 raw data를 numpy 배열로 변환 (16비트 정수형) samples = np.array(sound.get_array_of_samples()) # 모노 채널이 아니라면, 채널을 합칩니다. if sound.channels > 1: samples = samples.reshape((-1, sound.channels)) samples = samples.mean(axis=1).astype(np.int16) sample_rate = sound.frame_rate # 임시 mp3 파일 삭제 os.remove(audio_file) # gr.Audio(type="numpy")는 (numpy array, sample_rate) 튜플을 기대합니다. return samples, sample_rate with gr.Blocks() as demo: gr.Markdown("## Bulgarian Text-to-Speech (TTS)") with gr.Row(): input_prompt = gr.Textbox(label="Enter a prompt in Bulgarian:") output_audio = gr.Audio(label="Generated Speech", type="numpy") generate_button = gr.Button("Generate Speech") generate_button.click(text_to_speech, inputs=input_prompt, outputs=output_audio) if __name__ == "__main__": demo.launch()