Sopro TTS: CPU에서 실행되는 제로샷 음성 복제 지원 1억6900만 파라미터 TTS 모델
(github.com/samuel-vitorino)- Sopro TTS는 영어 기반의 경량 텍스트-음성 변환 모델로, 제로샷 음성 복제와 스트리밍 생성을 지원
- 1억6900만 개 파라미터를 가지며, CPU에서 0.25 RTF 속도로 30초 오디오를 약 7.5초에 생성
- 3~12초 길이의 참조 음성만으로 화자의 목소리를 복제할 수 있으며, WaveNet 스타일의 dilated conv와 경량 cross-attention 구조 사용
- 단일 L40S GPU로 훈련된 저예산 프로젝트로, 데이터 품질 개선 시 성능 향상 여지 존재
- 스트리밍 및 비스트리밍 모드, CLI·Python API·웹 데모를 모두 지원해 개발자 실험과 통합 활용성이 높음
Sopro TTS 개요
- Sopro는 포르투갈어로 ‘숨결’을 뜻하며, 경량 영어 TTS 모델로 개발
- Transformer 대신 dilated convolution과 cross-attention을 결합한 구조
- 단일 L40S GPU로 훈련된 개인 프로젝트 형태
- 주요 특징
- 169M 파라미터, 스트리밍 지원, 제로샷 음성 복제
- CPU 기준 0.25 RTF로 30초 오디오를 7.5초에 생성
- 3~12초 길이의 참조 오디오로 음성 복제 가능
설치 및 실행
- 최소 의존성 버전만 지정되어 별도 환경 생성 없이 설치 가능
- 예시:
torch==2.6.0버전이 M3 CPU에서 약 3배 성능 향상
- 예시:
- 설치 방법
-
PyPI:
pip install sopro -
GitHub 저장소:
git clone후pip install -e .
-
PyPI:
사용 예시
-
CLI 실행 예시
- 텍스트, 참조 오디오, 출력 파일 지정 가능
-
--style_strength,--no_stop_head,--stop_threshold,--stop_patience등 세부 제어 파라미터 제공
-
Python API 예시
-
SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu")로 모델 로드 - 비스트리밍과 스트리밍 두 방식 모두 지원
- 스트리밍 모드에서는 생성된 오디오 청크를 순차적으로 결합 가능
-
인터랙티브 스트리밍 데모
- 설치 후
uvicorn demo.server:app명령으로 로컬 서버 실행 - 또는 Docker로 빌드 및 실행 가능
-
docker build -t sopro-demo . -
docker run --rm -p 8000:8000 sopro-demo
-
- 브라우저에서
http://localhost:8000접속으로 데모 확인 가능
주의사항 및 한계
- 출력 일관성 부족 가능성 있으며, 파라미터 조정 필요
- 음성 복제 품질은 마이크 품질과 주변 소음에 크게 의존
- 비스트리밍 버전이 더 높은 음질 제공
- 생성 길이 약 32초(400프레임) 로 제한, 초과 시 환각적 출력 발생
-
torchaudio 사용 시 ffmpeg 필요,
soundfile사용 권장 - 훈련 데이터는 사전 토크나이즈된 형태로, 원본 오디오는 저장 공간 문제로 폐기됨
- 향후 훈련 코드 공개 및 다국어 지원 확대 계획 언급
훈련 데이터
- Emilia YODAS, LibriTTS-R, Mozilla Common Voice 22, MLS 데이터셋 사용
참고 및 기반 기술
- Mimi Codec (Kyutai) , WaveNet, Attentive Stats Pooling, AudioLM, CSM 등의 연구 및 코드 기반 활용
Hacker News 의견들
-
멋지고 유용한 프로젝트임
개인적으로는 Chatterbox-TTS-Server가 가장 좋은 대안이라고 생각함
속도는 느리지만 음질이 꽤 높음- 나는 IndexTTS2를 선호함
이 모델은 음성 클로닝과 감정 벡터를 통한 수동 감정 조절이 가능해서 매우 강력한 도구라고 느낌
현재 진행 중인 모델 오케스트레이션 프로젝트에서 특히 유용했음
외부 감정 분류 모델이 LLM의 페르소나와 TTS 출력을 동시에 제어해 일관성을 유지함
감정 상태에 따라 ‘기억’ 검색 확률도 달라지는데, IndexTTS2만큼 세밀한 제어가 가능한 TTS는 거의 없음 - 하지만 Chatterbox-TTS의 출력 품질은 훨씬 뛰어남
Sopro TTS의 출력은 GitHub 영상 기준으로는 심각하게 나쁘고 실사용 불가 수준임
반면 Chatterbox는 놀라운 결과를 냄
내 GPU는 RTX5090인데, 1초 생성에 약 2초 런타임으로 매우 빠름
첫 번째 예시와 두 번째 예시를 참고할 수 있음. 후자는 유튜버 ArbitorIan의 목소리를 클로닝한 데모임
- 나는 IndexTTS2를 선호함
-
정말 멋짐!
나는 로컬에서 Kokoro (82M) 를 사용 중인데, 작동도 빠르고 음질도 훌륭함- 혹시 좋은 오픈소스 음성 비서 스택 아는 사람 있음?
나는 ricky0123/vad로 음성 활성화를 처리하고, Web Speech API로 빠른 인식 후 상용 TTS를 사용 중임
아직 오픈소스 중에서는 속도 좋은 걸 못 찾았음 - 브라우저에서 실행되는 Kokoro-JS도 써봤는데, 지연 시간이 너무 길고 원하는 언어도 지원하지 않아서 아쉬웠음
- 혹시 좋은 오픈소스 음성 비서 스택 아는 사람 있음?
-
“zero-shot”이 무슨 뜻인지 궁금했음
- zero-shot은 단일 프롬프트(또는 파일 형태의 추가 컨텍스트 포함)로 모델을 작동시키는 방식임
few-shot은 몇 가지 예시를 제공해 모델을 유도하는 것이고, multi-shot은 여러 번의 프롬프트와 수정 과정을 거치는 것임 - 이 경우에는 다른 음성 샘플을 제공하지 않아도 좋은 클론을 얻을 수 있다는 의미로 보임
- zero-shot은 단일 프롬프트(또는 파일 형태의 추가 컨텍스트 포함)로 모델을 작동시키는 방식임
-
긴 컴파일 없이 Mission Impossible 수준의 음성 클로닝을 구현한 느낌임
관련된 유튜브 영상과 언어유희 시도 함께 공유함 -
영어로 테스트해봤는데 꽤 인상적이었음
저예산 프로젝트치고는 놀라운 결과였고, 사용도 매우 쉬웠음- 하지만 영어 전용이라 다른 언어는 시도할 수 없었음
독일어 버전이 있다면 꼭 써보고 싶음
- 하지만 영어 전용이라 다른 언어는 시도할 수 없었음
-
제약 조건을 고려하면 꽤 인상적인 결과임
혹시 더 강력한 버전(아티팩트가 적고 연산량이 더 필요한)을 공개할 계획이 있는지 궁금함
Chatterbox를 주로 쓰지만, 이게 고음질로 발전한다면 좋은 대안이 될 수 있을 것 같음- 이건 내 사이드 프로젝트임
연산 비용이 꽤 비싸지만, 커뮤니티 반응이 좋으면 더 발전시킬 생각임
참고로 Chatterbox는 훌륭한 모델이자 영감의 원천임
- 이건 내 사이드 프로젝트임
-
“zero-shot”의 의미가 궁금했음
- 이런 *-shot 용어는 사실상 의미 없는 업계 은어라고 생각함
Big O 표기법보다도 더 자의적임 -
Wikipedia 정의에 따르면, zero-shot은 학습 시 보지 못한 클래스의 샘플을 테스트 시 예측하는 문제 설정임
즉, 모델이 P(Audio|Voice) 조건부 확률을 학습하고, 훈련 중 보지 못한 음성 클래스에 대해 샘플링할 수 있으면 zero-shot임
참고 오디오를 제공하는 것은 모델 가중치를 바꾸는 게 아니라 컨텍스트 제공에 해당함
- 이런 *-shot 용어는 사실상 의미 없는 업계 은어라고 생각함
-
오디오를 들어봤는데 음질이 너무 끔찍해서 놀랐음
15년 전 컴퓨터 음성보다도 못하고, 왜 사람들이 좋다고 하는지 이해가 안 됨
여러 브라우저에서 테스트했지만 동일했음- 일부 레퍼런스 음성이 품질 저하를 일으킬 수 있음
그렇게 심각하다면 다른 문제가 있을 수도 있으니 함께 살펴보고 싶음 - 만약 이 샘플이 데모 중 최고라면, 발음 왜곡이 심해 바로 거부감이 들었음
- 나는 순간 RFK 목소리인 줄 알았음
- 여러 음성을 시도했지만 생성된 오디오는 전혀 비슷하지 않았고, 제대로 된 목소리도 아니었음
- 나도 들으면서 믿기 힘들었음. 1분 이상 듣기 힘들 정도로 불쾌한 음질이었음
- 일부 레퍼런스 음성이 품질 저하를 일으킬 수 있음
-
정말 멋진 기술임
앞으로 더 좋아질 것 같음
다만 임시방편으로라도 거친 음색(razziness) 을 줄이는 간단한 오디오 후처리를 추가하면 좋겠음 -
혹시 이런 모델 중에서 speech-to-speech 음성 변조기 형태로 작동하는 게 있는지 궁금함
즉, 하나의 고정된 음성 샘플(프롬프트)과 실시간 입력 오디오 스트림을 받아, 입력의 음성을 프롬프트의 톤과 음색으로 변환하는 방식임
V-tuber 같은 경우엔 프롬프트를 자주 바꿀 필요가 없으니, 한 번의 fine-tuning으로 고정된 음색을 입히는 것도 가능할 듯함-
Chatterbox TTS가 “voice cloning” 모드에서 이걸 지원함
다만 스트리밍 처리는 직접 구현해야 함
오디오 A(스타일)와 B(콘텐츠)를 입력받아, A의 음색과 B의 발음·억양을 결합함
이런 모델은 사실상 “TTS”라기보다 S+STS (speech+style to speech) 로 보는 게 맞음 - 오픈소스는 모르겠지만, ElevenLabs가 예전부터 이 아이디어를 구현해왔음
공식 블로그에 자세히 설명되어 있음 -
RVC (Retrieval Voice Conversion) 도 좋은 오픈소스 음성 변환기임
다만 원 제작자와 개발자 간 갈등이 있어 메인 포크는 피하고, 영어로 관리되는 최신 포크를 찾는 게 좋음 - 실제로 많은 V-tuber들이 이런 기술을 사용하므로, 안정적인 솔루션이 분명 존재할 것 같음
-
Chatterbox TTS가 “voice cloning” 모드에서 이걸 지원함