React Native 텍스트 음성 변환: 시스템 목소리부터 내 음성 서버까지
React Native 앱이 말하는 방법은 세 가지입니다. 휴대폰의 목소리, 미리 만든 오디오 파일, 새 텍스트를 그때그때 음성으로 만드는 서버입니다. 휴대폰 목소리는 무료이고 오프라인으로 되지만 기기마다 다르게 들리고, 나머지 두 방법은 앱에 알아볼 수 있는 하나의 목소리를 줍니다.
SuperClonica에는 31개 언어의 자연스러운 목소리가 있어 온라인에서 무료로 들어 볼 수 있고, 앱의 대사를 컴퓨터에서 만드는 무료 엔진과 바뀌는 텍스트를 위한 Docker 서버도 있습니다. 이 가이드에서는 React Native와 Expo에서 각 방법을 소개합니다.
앱이 말하게 하는 세 가지 방법
SuperClonica는 31개 언어를 지원하지만 중국어는 아직 지원하지 않아, 중국어 화면에는 다른 목소리가 필요합니다.
- expo-speech나 react-native-tts: 휴대폰에 설치된 목소리로, 무료이고 오프라인이지만 기기마다 다르며 오디오를 저장할 수 없습니다.
- 미리 만든 에셋: 고정 대사를 SuperClonica로 한 번 만들어 앱에 포함.
- 음성 서버: 앱이 텍스트를 내 SuperClonica 서버로 보내고 응답을 재생.
- 대부분의 앱은 섞어 씁니다. 고정 대사는 에셋, 사용자 텍스트는 서버, 예비로 시스템 목소리.
무료로 온라인에서 목소리 고르기
아무 목소리 페이지에서 앱의 대사를 30~100자로 입력하고 언어를 고른 뒤 생성 버튼을 누르세요. 몇 초면 앱에 어울리는지 알 수 있고, 계정 없이 휴대폰에서도 됩니다.
expo-audio로 미리 만든 대사
파일 이름을 번역에 쓰는 키와 맞추면 언어별 폴더마다 같은 파일 이름이 됩니다.
- 컴퓨터에 무료 엔진 설치: python -m pip install superclonica-cpu.
- 대사마다 음성 만들기: superclonica --text "다시 오신 걸 환영해요!" --voice F1 --lang ko --output assets/voice/welcome.mp3.
- expo-audio로 재생: const player = useAudioPlayer(require('./assets/voice/welcome.mp3')); player.play();
- 에셋은 오프라인으로 지연 없이 동작하고, MP3로 한 문장은 수십 KB입니다.
사용자 텍스트용 음성 서버
채팅 메시지, 사용자 메모, 답해 주는 튜터처럼 바뀌는 텍스트에는 내가 관리하는 서버에서 실행하세요: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. HTTPS 뒤에 두고 SUPERCLONICA_API_KEY를 설정해 내 앱만 호출하게 하세요. 앱은 text, voice, lang이 담긴 JSON을 /synthesize로 보내고 WAV를 받습니다. 파일 시스템 라이브러리로 파일에 저장해 플레이어에 넘기세요. 반복되는 텍스트는 캐시하세요. 같은 텍스트, 목소리, seed는 항상 같은 파일을 냅니다.
시스템 목소리로 충분할 때
시스템 목소리는 알아듣기만 하면 될 때 충분합니다. 알림 읽기, 접근성 보조, 네트워크 없이 돌아야 하는 프로토타입 같은 경우죠. 목소리가 제품의 일부라면 내 목소리를 고르세요. 튜터, 게임 캐릭터, 가이드 명상 같은 경우입니다. 공개하는 앱에는 OpenRAIL-M 라이선스로 무료인 기본 목소리 10개(M1~M5, F1~F5)나 SuperClonica 스튜디오에서 학습한 내 목소리를 쓰세요. 팬이 만든 캐릭터 목소리는 스토어 앱용이 아닙니다.