Texto em fala no Flutter com vozes naturais
No Flutter, texto em fala costuma ser o plugin flutter_tts, que fala com as vozes do próprio celular. Funciona offline e não custa nada, mas a voz muda de um aparelho para outro e raramente soa como a sua marca ou os seus personagens.
O motor gratuito SuperClonica dá ao app a mesma voz natural em todos os celulares, de dois jeitos: arquivos de áudio gerados antes dentro do app, ou um servidor de voz que o app chama. Este guia mostra os dois com código Dart pronto e diz quando o flutter_tts ainda é a escolha certa.
Três formas de fazer um app Flutter falar
A maioria dos apps combina os três: assets para a interface, servidor para o texto do usuário e a voz do sistema como reserva.
- flutter_tts: as vozes instaladas no celular, offline e grátis, diferentes em cada aparelho.
- Assets prontos: cada fala fixa é gerada uma vez com a SuperClonica e vai dentro do app.
- Um servidor de voz: o app envia o texto ao seu servidor SuperClonica e toca a resposta, para texto que muda.
- A SuperClonica fala 31 idiomas; o chinês ainda não é suportado.
Escolha uma voz grátis online
Na página de qualquer voz, escreva uma fala do seu app, de 30 a 100 caracteres, escolha o idioma e clique no botão para gerar. Em poucos segundos você ouve se combina, sem conta, inclusive no celular.
Inclua falas prontas como assets
O MP3 deixa o app leve: uma fala de uma frase tem algumas dezenas de kilobytes.
- Gere cada fala no computador com o motor: python -m pip install superclonica-cpu, depois superclonica --text "Que bom ter você de volta!" --voice F1 --lang pt --output assets/voice/welcome.mp3.
- Declare a pasta em flutter: assets: no pubspec.yaml.
- Toque uma fala com o pacote audioplayers: await AudioPlayer().play(AssetSource('voice/welcome.mp3'));
- Assets funcionam offline e sem atraso, mas cada mudança exige uma nova versão do app.
Chame o seu próprio servidor de voz
Rode o servidor numa máquina que você controla: docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Coloque-o atrás de HTTPS, que iOS e Android esperam por padrão, e defina SUPERCLONICA_API_KEY para que só o seu app possa usá-lo. Com os pacotes http, path_provider e audioplayers, uma fala é um pedido: final res = await http.post(Uri.parse('https://tts.example.com/synthesize'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'text': 'Seu pedido já está a caminho.', 'voice': 'F1', 'lang': 'pt'})); final file = File('${(await getTemporaryDirectory()).path}/line.wav'); await file.writeAsBytes(res.bodyBytes); await AudioPlayer().play(DeviceFileSource(file.path)); Adicione um cabeçalho Authorization: Bearer com a chave e guarde em cache as falas que se repetem.
Quando o flutter_tts basta
O flutter_tts basta quando a voz só precisa ser entendida: ler uma notificação, um recurso de acessibilidade, um protótipo ou um app que precisa falar sem rede nenhuma e não tem falas fixas. Escolha a SuperClonica quando a voz faz parte do produto: um tutor, um personagem de jogo, uma meditação guiada, uma marca que deve soar igual em todos os celulares.