Texto em fala em Kotlin para Android com vozes naturais
O Android já traz texto em fala: a classe TextToSpeech lê qualquer texto com o mecanismo instalado no celular, offline e de graça. A voz que o usuário ouve depende do aparelho, do mecanismo e das vozes baixadas, então o mesmo app soa diferente em cada celular.
O motor gratuito SuperClonica dá a um app Android uma única voz natural em todo lugar, de dois jeitos: arquivos de áudio gerados antes e incluídos como recursos, ou um servidor de voz que o app chama. Este guia mostra os dois com código Kotlin pronto e diz quando o mecanismo do sistema ainda é a ferramenta certa.
Três formas de fazer um app Android falar
Muitos apps combinam os três: recursos para a interface, servidor para o texto do usuário e o mecanismo do sistema como reserva.
- TextToSpeech: o mecanismo instalado no celular, offline e grátis, com vozes que mudam conforme o aparelho.
- Recursos raw: 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 o WAV que volta.
- 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, no próprio celular.
Inclua falas prontas como recursos
Recursos funcionam offline e sem atraso; uma mudança exige uma nova versão do app.
- 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 welcome.mp3.
- Coloque os arquivos em res/raw; nomes de recurso só aceitam letras minúsculas, dígitos e sublinhados.
- Toque uma fala: MediaPlayer.create(context, R.raw.welcome).start()
- Libere o player ao terminar, por exemplo no setOnCompletionListener.
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. O Android bloqueia HTTP sem criptografia por padrão, então coloque-o atrás de HTTPS, e defina SUPERCLONICA_API_KEY para que só o seu app possa usá-lo. Com o OkHttp, uma fala é um pedido, feito fora da thread principal, por exemplo numa corrotina em Dispatchers.IO: val body = """{"text": "Seu pedido já está a caminho.", "voice": "F1", "lang": "pt"}""".toRequestBody("application/json".toMediaType()); val bytes = client.newCall(Request.Builder().url("https://tts.example.com/synthesize").post(body).build()).execute().body!!.bytes(); val file = File(cacheDir, "line.wav").apply { writeBytes(bytes) }; MediaPlayer().apply { setDataSource(file.path); prepare(); start() } Adicione um cabeçalho Authorization com a chave e guarde em cache os arquivos das falas que se repetem.
Quando o TextToSpeech do sistema basta
O mecanismo do sistema 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. Escolha a SuperClonica quando a voz faz parte do produto: um professor de idiomas, um personagem de jogo, uma meditação guiada, uma marca que deve soar igual em todos os celulares.