본문 바로가기
개발/일지

EP3. 개인화 TTS 적용

by Evan Park

개요

개인 서버에는 유틸리티 성격의 Spring Boot 애플리케이션이 돌아가는데 이 앱에서 제공하는 기능 중 하나가 TTS이다. 여러 Provider의 TTS 서비스를 이용할 수 있도록 설계되어있으며 이를 사용하는 곳의 특성상 어느 정도 캐시 기능도 포함하고 있다.

 

최근에 발생한 이슈는 할당량에 대한 고민이었는데. 최근 지인이 본인의 TTS를 만들어보고 싶다고 이야기를 하였고. 내가 했던 답변은 "최근 머신러닝 기술이 많이 발전했고. 개인화 TTS 구현하는 방법에 대해 잘 기술한 자료들이 많을 것"이라고 대답을 했었다.

 

개인화 TTS 작업

그리고 구글링을 조금 해보니 어느 사람이 초보자도 개인화 TTS를 만들 수 있을 정도로 이해하기 쉽게 잘 정리된 문서가 있었고. 지인은 이를 이용해서 모델을 학습한 후 결과물을 나에게 보여주었다.

 

결과물은 매우 놀라웠으며 이는 고작 30분 분량의 녹음본과 하루 정도의 학습 시간으로 만들어낸 것이었다. 해당 문서의 프로젝트에서는 이 모델을 기반으로 음성을 합성하여 사용자들이 음성 파일 제공하는 API가 담긴 Python 서버 프로그램을 제공하였고 그로 인해 TTS 쪽은 별 작업이 필요 없이 내 유틸리티 서버와 쉽게 연동할 수 있었다.

 

구성도는 다음과 같다.

사용자가 유틸리티 서버에 TTS를 요청하면 해당 서버는 TTS 합성을 담당하는 Python 서버에 요청한다. 해당 서버는 유틸리티 서버에서 받은 Text를 Acoustic, Vocoder 모델을 거쳐 음성 Waveform 파일을 합성한 다음 다시 유틸리티 서버로 전달한다.

 

유틸리티 서버는 UUID를 발급한 후 해당 이름으로 음성 파일을 Storage에 저장한다. 이후 사용자가 UUID로 해당 음성 파일의 다운로드 요청을 할 수 있다.

 

결론

해당 API를 사용하는 프로그램에서 잘 동작하였으며. 개인화된 TTS를 사용하니 사용자들의 반응도 좋았다.

 

그리고 해당 기능은 내 컴퓨터 자원을 통해 음성을 합성하기에 별다른 할당량이 존재하지 않아 기존 Provider의 할당량이 초과되면 failover 용도로 사용이 가능할 것 같다.

 

비고

해당 문서의 링크를 남긴다. 방법도 그렇게 어렵지 않으니 시간이 남는다면 시도해보면 좋을 것이다.

 

SCE-TTS: 내 목소리로 TTS 만들기

문서를 불러오고 있습니다...

sce-tts.github.io