파이썬 텍스트 음성 변환: 오프라인, 무료, 자연스러운 목소리로
파이썬에서 텍스트를 음성으로 바꾸는 방법은 여러 가지입니다. 운영체제의 로봇 같은 목소리로 읽는 라이브러리, 텍스트를 온라인 서비스로 보내는 라이브러리, 그리고 내 컴퓨터에서 신경망 모델을 실행하는 라이브러리가 있습니다. 마지막 방식은 이제 사람 목소리에 가깝게 들리면서도 인터넷 없이 동작합니다.
이 가이드는 선택지를 비교한 뒤, 오픈 모델 Supertonic 3 기반의 pip 패키지인 SuperClonica 엔진으로 동작하는 코드를 보여 줍니다. 설치, 첫 스크립트, 커스텀 음성, 긴 텍스트, Docker의 로컬 HTTP API까지 다룹니다. 엔진은 저희 제품이므로 해당 부분에서는 그렇다고 밝힙니다.
파이썬에서 텍스트를 음성으로 바꾸는 방법
라이브러리를 고르기 전에 두 가지를 정하세요. 텍스트가 컴퓨터 밖으로 나가도 되는지, 그리고 목소리가 얼마나 자연스러워야 하는지입니다.
- pyttsx3는 시스템에 내장된 음성 엔진을 제어합니다. Windows에서는 SAPI5, macOS에서는 NSSpeechSynthesizer, Linux에서는 eSpeak입니다. 오프라인으로 동작하고 몇 초 만에 설치되지만, 목소리가 로봇 같고 컴퓨터마다 다릅니다.
- gTTS는 텍스트를 Google 번역의 음성 서비스로 보내 MP3로 저장합니다. 소리는 더 깨끗하지만 인터넷이 필요하고, 목소리 대신 언어와 억양만 고를 수 있으며, 비공식 인터페이스라 언제든 멈출 수 있습니다.
- Google, Amazon, Microsoft, ElevenLabs의 클라우드 API는 음질이 매우 좋지만 계정과 키가 필요하고, 글자 수만큼 비용이 들며, 모든 텍스트가 제공업체로 전송됩니다.
- Supertonic 3, Kokoro, Piper 같은 로컬 신경망 모델은 내 CPU나 GPU에서 실행됩니다. 모델을 한 번 내려받으면 오프라인으로 동작하고, 글자당 비용이 없으며, 시스템 음성보다 훨씬 자연스럽습니다. 자세한 내용은 비교 페이지에서 다룹니다.
SuperClonica 엔진 설치
엔진은 두 가지 빌드로 제공되는 하나의 pip 패키지입니다. Windows, macOS, Linux의 모든 CPU와 Python 3.10 이상이라면 python -m pip install superclonica-cpu, Windows 또는 Linux의 NVIDIA GPU와 Python 3.11 이상이라면 python -m pip install superclonica-gpu-cuda를 실행합니다. 한 환경에는 둘 중 하나만 설치하세요. 둘 다 같은 superclonica 모듈을 제공합니다.
GPU 빌드는 CUDA와 cuDNN을 pip로 함께 설치하므로 시스템에는 CUDA 12를 지원하는 NVIDIA 드라이버만 있으면 됩니다. GPU가 동작하지 않으면 CPU로 전환합니다. 처음 실행할 때 Supertonic 3 모델(약 385 MB)이 ~/.cache/supertonic3에 한 번만 다운로드됩니다. 다른 위치에 두려면 SUPERTONIC_CACHE_DIR을 설정하세요.
첫 번째 스크립트
엔진을 가져와 문장을 합성하고 저장합니다. from superclonica import Superclonica, 그다음 tts = Superclonica(), audio, sample_rate = tts.synthesize("안녕하세요! 이 목소리는 제 컴퓨터에서 실행됩니다.", voice="F1", lang="ko", seed=7), 마지막으로 tts.save("hello.wav", audio). 모델에는 M1~M5와 F1~F5의 10가지 목소리가 포함되어 있어 추가 파일이 필요 없습니다.
엔진은 한 번 만들어 재사용하세요. 불러오는 데 몇 초가 걸리지만 이후 문장은 1초도 걸리지 않습니다. 저희 측정에서 짧은 문장의 중앙값은 RTX 5070 Ti에서 0.12초, 4스레드 Ryzen 7 5800X에서 0.43초였습니다.
커스텀 음성 사용하기
Supertonic 3 음성은 약 0.3 MB 크기의 JSON 파일입니다. 오디오 샘플이 있는 무료 음성은 GitHub의 superclonica/supertonic-voices 저장소에 있고, SuperClonica 카탈로그에는 게임 캐릭터부터 내레이터까지 170개가 넘는 음성이 있으며 모두 무료 온라인 데모를 제공합니다.
프리셋 이름 대신 파일을 전달합니다. tts.synthesize("좋은 아침입니다!", voice="ciri.json", lang="ko", seed=7). 명령줄에서는 superclonica --text "좋은 아침입니다!" --voice ciri.json --lang ko --output morning.wav. 모든 음성은 모델의 31개 언어를 모두 말합니다. lang에는 텍스트의 언어를 지정하세요(예: en, de, es, ja). 중국어는 지원하지 않습니다.
긴 텍스트, 대화, 파일 형식
몇 가지 옵션으로 대부분의 실제 프로젝트를 처리할 수 있습니다.
- 한 장(章) 같은 긴 텍스트도 한 번의 호출로 넘길 수 있습니다. 엔진이 최대 160자의 자연스러운 조각으로 나누므로 단어가 반복되거나 빠지지 않습니다.
- normalize=True는 음량을 −18 LUFS로 맞춰 줍니다. 여러 파일을 이어 붙일 때 유용합니다.
- tts.synthesize_batch()는 여러 줄을 각각 다른 목소리로 한 번에 합성합니다. 대화 대사 같은 경우에 쓰며, 결과는 입력 순서를 유지합니다.
- 같은 텍스트, 같은 음성, 같은 시드는 같은 오디오를 다시 만들어 내므로 한 줄만 다시 만들어도 나머지는 바뀌지 않습니다.
- 숫자는 단어로 읽히고, 채팅에서 흔한 줄임말은 풀어서 읽으며, 이모지나 알 수 없는 기호는 오류 대신 정리됩니다.
- tts.save()는 파일 확장자에 따라 WAV, FLAC, OGG로 저장합니다.
로컬 HTTP API로 쓰는 음성 합성
음성이 필요한 프로그램이 파이썬으로 작성되지 않았다면 엔진을 Docker로 실행하세요. docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu, NVIDIA GPU에서는 --gpus all과 함께 cuda 태그를 사용합니다. 모델은 처음 시작할 때 볼륨에 다운로드됩니다.
텍스트, 언어, 음성 파일 내용을 담은 JSON으로 POST /synthesize를 보내면 WAV가 돌아옵니다. 음성 하나가 약 0.3 MB이므로 요청은 파일로 만들어 curl -d @request.json으로 보내세요.
라이선스와 책임 있는 사용
Supertonic 3는 OpenRAIL-M으로 배포됩니다. 비상업 조항 대신 금지 용도 목록이 있는 로열티 없는 라이선스입니다. 동의 없이 다른 사람을 사칭하거나, 속이거나, 괴롭히는 데 음성을 쓰지 말고, 중요한 경우에는 기계가 생성한 오디오임을 밝히세요.
카탈로그의 일부 음성은 유명인에게서 영감을 받았습니다. 실제 본인의 목소리가 아니므로 그런 오디오를 본인의 실제 발언처럼 내세우지 마세요.