GUIA

Texto em fala em Swift para iOS com vozes naturais

No iOS, texto em fala começa com o AVSpeechSynthesizer: algumas linhas de Swift e o celular lê qualquer texto com as vozes embutidas, offline e de graça. Só que essas vozes dependem do que o usuário instalou e são as mesmas de todos os outros apps.

O motor gratuito SuperClonica dá a um app de iOS ou macOS uma voz natural própria, de dois jeitos: arquivos de áudio gerados antes e embutidos no app, ou um servidor de voz que o app chama. Este guia mostra os dois com código Swift pronto e diz quando o AVSpeechSynthesizer ainda é a ferramenta certa.

Três formas de fazer um app de iOS falar

Muitos apps combinam os três: falas embutidas para a interface, servidor para o texto do usuário e a voz do sistema como reserva.

  • AVSpeechSynthesizer: as vozes do sistema, offline e grátis, conforme o que o usuário instalou.
  • Áudio embutido: 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 iPhone.

Embuta falas prontas

Arquivos embutidos funcionam offline e sem atraso; uma mudança exige uma nova versão do app.

  • Gere cada fala no seu Mac 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.
  • Adicione os arquivos ao projeto do Xcode para que sejam copiados para o pacote do app.
  • Toque uma fala com o AVFoundation: player = try AVAudioPlayer(contentsOf: Bundle.main.url(forResource: "welcome", withExtension: "mp3")!); player.play()
  • Guarde player numa propriedade da sua classe: um AVAudioPlayer local para assim que é liberado.

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 iOS espera HTTPS por padrão, então coloque-o atrás de um certificado, e defina SUPERCLONICA_API_KEY para que só o seu app possa usá-lo. Assim, uma fala é um pedido: var request = URLRequest(url: URL(string: "https://tts.example.com/synthesize")!); request.httpMethod = "POST"; request.setValue("application/json", forHTTPHeaderField: "Content-Type"); request.httpBody = try JSONEncoder().encode(["text": "Seu pedido já está a caminho.", "voice": "F1", "lang": "pt"]); let (data, _) = try await URLSession.shared.data(for: request); player = try AVAudioPlayer(data: data); player.play() Adicione um cabeçalho Authorization com a chave e guarde em cache os dados das falas que se repetem.

Quando o AVSpeechSynthesizer basta

O AVSpeechSynthesizer 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 para cada usuário.