무료 오프라인 목소리로 만드는 Streamlit 음성 변환 앱
Streamlit은 Python 스크립트를 웹 앱으로 바꿔 주고, 같은 프로세스에서 도는 음성 합성 엔진과 함께라면 외부 음성 서비스, 키, 요금 없는 음성 앱이 됩니다. 이 가이드는 무료 SuperClonica 엔진으로 약 35줄짜리 앱을 만듭니다. 텍스트 입력, 목소리와 언어 선택, 플레이어, WAV 다운로드가 들어 있습니다.
Streamlit 자체의 AppTest 프레임워크로 테스트했습니다. 모든 것이 Python 프로세스 안에서 돌아가므로 텍스트가 컴퓨터나 서버 밖으로 나가지 않습니다.
설치
Python 3.10 이상이 필요합니다. 두 패키지를 설치하세요:
pip install streamlit superclonica-cpu
첫 실행 때 엔진이 약 400 MB의 Supertonic 3 모델을 내려받고, 그 뒤로는 일반 프로세서에서 오프라인으로 작동합니다. NVIDIA 그래픽카드는 속도만 높여 줍니다.
앱
이 코드를 app.py로 저장하세요:
import io, threading, wave
import numpy as np
import streamlit as st
from superclonica import Superclonica
VOICES = ["F1", "F2", "F3", "F4", "F5", "M1", "M2", "M3", "M4", "M5"]
LANGUAGES = {"English": "en", "Español": "es", "Deutsch": "de", "Français": "fr", "Русский": "ru", "日本語": "ja"}
@st.cache_resource
def engine():
return Superclonica(), threading.Lock()
def to_wav(audio, rate):
pcm = (np.clip(np.asarray(audio, dtype=np.float32).reshape(-1), -1, 1) * 32767).astype(np.int16)
buffer = io.BytesIO()
with wave.open(buffer, "wb") as file:
file.setnchannels(1)
file.setsampwidth(2)
file.setframerate(rate)
file.writeframes(pcm.tobytes())
return buffer.getvalue()
st.title("Text to speech")
text = st.text_area("Text", max_chars=2000)
voice = st.selectbox("Voice", VOICES)
language = st.selectbox("Language", list(LANGUAGES))
if st.button("Voice it", disabled=not text.strip()):
tts, lock = engine()
with st.spinner("Voicing..."), lock:
audio, rate = tts.synthesize(text, voice=voice, lang=LANGUAGES[language])
wav = to_wav(audio, rate)
st.audio(wav, format="audio/wav")
st.download_button("Download WAV", wav, file_name="speech.wav", mime="audio/wav")실행하고 출력된 주소를 여세요:
streamlit run app.py
st.cache_resource는 스크립트를 다시 실행할 때마다가 아니라 모든 방문자에게 한 번만 엔진을 만들고, 잠금은 여러 사람의 요청이 차례로 처리되게 합니다. 텍스트가 있기 전까지 버튼은 비활성화되고, st.download_button은 같은 WAV를 방문자에게 줍니다.
목소리, 언어, 속도
목록에는 기본 목소리 10개(M1~M5, F1~F5)가 있습니다. SuperClonica 카탈로그 목소리를 추가하려면 그 음성 파일 경로를 목록에 넣으세요. 먼저 목소리 페이지에서 30~100자 문장을 무료로 들어 보세요. 사전에는 지원하는 31개 언어 중 어떤 코드든 추가할 수 있지만 중국어는 아직 지원하지 않습니다. 속도는 엔진에서 tts.speed = 1.1처럼 0.7~2.0 사이로 정합니다.
공유하기
Streamlit Community Cloud는 GitHub 저장소에서 앱을 배포할 수 있습니다. superclonica-cpu를 적은 requirements.txt를 추가하세요. 공개 앱에서는 max_chars를 낮게 두고 공유해도 되는 목소리만 제공하세요. 기본 목소리는 모델 라이선스에 따라 자유롭게 쓸 수 있고, 구매한 카탈로그 목소리는 내 프로젝트용입니다. 모델을 직접 돌리고 싶지 않다면 같은 버튼에서 SuperClonica 음성 API를 호출하세요.