Synthèse vocale dans Flutter avec des voix naturelles
Dans Flutter, la synthèse vocale passe en général par le plugin flutter_tts, qui parle avec les voix du téléphone lui-même. Cela fonctionne hors ligne et ne coûte rien, mais la voix change d’un appareil à l’autre et ressemble rarement à votre marque ou à vos personnages.
Le moteur gratuit SuperClonica donne à une application la même voix naturelle sur tous les téléphones, de deux façons : des fichiers audio préparés livrés avec l’application, ou un serveur de synthèse que l’application appelle. Ce guide montre les deux avec du code Dart prêt à l’emploi et dit quand flutter_tts reste le bon choix.
Trois façons de faire parler une app Flutter
La plupart des apps les combinent : assets pour l’interface, serveur pour le texte des utilisateurs, voix du système en secours.
- flutter_tts : les voix installées sur le téléphone, hors ligne et gratuites, différentes sur chaque appareil.
- Assets préparés : chaque réplique fixe vocalisée une fois avec SuperClonica et livrée dans l’app.
- Un serveur de synthèse : l’app envoie le texte à votre serveur SuperClonica et joue la réponse, pour un texte qui change.
- SuperClonica parle 31 langues ; le chinois n’est pas encore pris en charge.
Choisir une voix gratuitement en ligne
Sur la page de n’importe quelle voix, saisissez une réplique de votre app, 30 à 100 caractères, choisissez la langue et cliquez sur le bouton de synthèse. En quelques secondes, vous entendez si elle convient, sans compte, y compris sur téléphone.
Livrer des répliques préparées en assets
Le MP3 garde l’app légère : une réplique d’une phrase pèse quelques dizaines de kilo-octets.
- Vocalisez chaque réplique sur votre ordinateur avec le moteur : python -m pip install superclonica-cpu, puis superclonica --text "Bon retour parmi nous !" --voice F1 --lang fr --output assets/voice/welcome.mp3.
- Déclarez le dossier sous flutter: assets: dans pubspec.yaml.
- Jouez une réplique avec le paquet audioplayers : await AudioPlayer().play(AssetSource('voice/welcome.mp3'));
- Les assets fonctionnent hors ligne et sans délai, mais chaque modification demande une nouvelle version de l’app.
Appeler votre propre serveur de synthèse
Faites tourner le serveur sur une machine que vous contrôlez : docker run -d -p 8000:8000 -v superclonica-models:/models superclonica/superclonica:cpu. Placez-le derrière HTTPS, qu’iOS et Android attendent par défaut, et définissez SUPERCLONICA_API_KEY pour que seule votre app puisse l’utiliser. Avec les paquets http, path_provider et audioplayers, une réplique tient en une requête : final res = await http.post(Uri.parse('https://tts.example.com/synthesize'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({'text': 'Votre commande est en route.', 'voice': 'F1', 'lang': 'fr'})); final file = File('${(await getTemporaryDirectory()).path}/line.wav'); await file.writeAsBytes(res.bodyBytes); await AudioPlayer().play(DeviceFileSource(file.path)); Ajoutez un en-tête Authorization: Bearer avec la clé et mettez en cache les répliques qui reviennent.
Quand flutter_tts suffit
flutter_tts suffit quand la voix doit seulement être comprise : lire une notification, une aide à l’accessibilité, un prototype, ou une app qui doit parler sans aucun réseau et n’a pas de répliques fixes. Choisissez SuperClonica quand la voix fait partie du produit : un tuteur, un personnage de jeu, une méditation guidée, une marque qui doit sonner pareil sur chaque téléphone.