Flutter TTS: 자연스러운 목소리로
Flutter에서 음성 합성이라면 보통 휴대폰 자체의 목소리로 말하는 flutter_tts 플러그인을 씁니다. 오프라인이고 무료지만, 기기마다 목소리가 달라지고 브랜드나 캐릭터처럼 들리는 일은 드뭅니다.
무료 SuperClonica 엔진은 어느 휴대폰에서나 같은 자연스러운 목소리를 앱에 줍니다. 방법은 두 가지로, 앱에 넣는 미리 만든 오디오 파일이나 앱이 호출하는 음성 서버입니다. 이 가이드에서는 두 방법을 Dart 코드와 함께 보여 주고, flutter_tts가 여전히 맞는 경우도 알려 드립니다.
Flutter 앱을 말하게 하는 세 가지 방법
대부분의 앱은 섞어 씁니다. 인터페이스에는 에셋, 사용자 텍스트에는 서버, 예비로 시스템 목소리.
- flutter_tts: 휴대폰에 설치된 목소리. 오프라인이고 무료지만 기기마다 다릅니다.
- 미리 만든 에셋: 고정된 대사를 SuperClonica로 한 번 만들어 앱에 넣습니다.
- 음성 서버: 바뀌는 텍스트는 앱이 SuperClonica 서버로 보내고 답을 재생합니다.
- SuperClonica는 31개 언어를 말하며, 중국어는 아직 지원하지 않습니다.
목소리를 무료로 골라 보기
아무 목소리 페이지에서 앱의 대사를 30~100자로 입력하고 언어를 고른 뒤 생성 버튼을 누르세요. 몇 초 만에 앱에 맞는지 들을 수 있습니다. 계정은 필요 없고 휴대폰에서도 됩니다.
미리 만든 대사를 에셋으로 넣기
MP3면 앱이 가볍습니다. 한 문장짜리 대사는 수십 KB입니다.
- 컴퓨터에서 엔진으로 대사마다 음성을 만드세요: python -m pip install superclonica-cpu 후 superclonica --text "다시 오신 걸 환영해요!" --voice F1 --lang ko --output assets/voice/welcome.mp3.
- pubspec.yaml의 flutter: assets: 아래에 폴더를 등록하세요.
- audioplayers 패키지로 재생하세요: await AudioPlayer().play(AssetSource('voice/welcome.mp3'));
- 에셋은 오프라인이고 지연이 없지만, 바꿀 때마다 새 앱 버전이 필요합니다.
내 음성 서버 호출하기
직접 관리하는 컴퓨터에서 서버를 돌리세요: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. iOS와 Android가 기본으로 요구하는 HTTPS 뒤에 두고, SUPERCLONICA_API_KEY를 설정해 내 앱만 쓰게 하세요. http, path_provider, audioplayers 패키지로 대사 하나가 요청 하나입니다: final res = await http.post(Uri.parse('https://tts.example.com/synthesize'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'text': '주문하신 상품이 발송되었습니다.', 'voice': 'F1', 'lang': 'ko'})); final file = File('${(await getTemporaryDirectory()).path}/line.wav'); await file.writeAsBytes(res.bodyBytes); await AudioPlayer().play(DeviceFileSource(file.path)); 키를 Authorization: Bearer 헤더로 붙이고, 반복되는 대사 파일은 캐시하세요.
flutter_tts로 충분할 때
알림 읽기, 접근성 도우미, 프로토타입, 네트워크 없이 말해야 하고 고정 대사가 없는 앱처럼 목소리가 알아듣기만 하면 될 때는 flutter_tts로 충분합니다. 튜터, 게임 캐릭터, 명상 가이드, 모든 휴대폰에서 같은 소리여야 하는 브랜드처럼 목소리가 제품의 일부라면 SuperClonica를 고르세요.