STT natif vs Deepgram : quel moteur vocal choisir ?
Quand j'ai lance TAMSIV, toute la reconnaissance vocale passait par Deepgram. Un service cloud excellent, precis, rapide. Le francais ? Impeccable. Les accents regionaux ? Geres. La ponctuation automatique ? Parfaite. Il y avait juste un detail : chaque seconde d'audio transcrite avait un prix. Et quand ton app repose entierement sur la voix, ce prix grimpe vite.
J'ai donc du faire un choix strategique : soit je maintiens Deepgram pour tout le monde et je repercute le cout sur les abonnements, soit je trouve une alternative gratuite pour le plan Free et je reserve Deepgram aux utilisateurs payants. J'ai choisi la deuxieme option. Voici comment j'ai construit une architecture duale STT natif + Deepgram, et ce que j'ai appris en comparant les deux en conditions reelles.
Points cles a retenir :
- Le STT natif (Google/Apple) est gratuit, local et suffisant pour des dictees courtes
- Deepgram reste superieur en precision, surtout dans le bruit et avec des accents
- Une architecture duale permet d'offrir un plan gratuit viable sans sacrifier la qualite premium
- L'abstraction frontend fait que les composants ignorent quel moteur tourne
- Le choix STT natif vs cloud est configurable par l'admin sans mise a jour de l'app
Pourquoi la reconnaissance vocale est-elle si centrale dans une app de productivite ?
TAMSIV n'est pas une app de productivite classique ou tu tapes des listes. C'est une app ou tu parles. Tu dictes une tache, un memo, un evenement. L'assistant vocal comprend ce que tu dis, cree l'element, et te repond. Tout passe par la voix.
Ca veut dire que la qualite de la transcription impacte directement l'experience. Si le STT comprend mal "acheter du pain" et transcrit "acheter du bain", l'utilisateur perd confiance. Si la ponctuation est absente, le memo devient un bloc de texte illisible. Le STT n'est pas un gadget — c'est le fondement de toute l'experience utilisateur.
C'est pourquoi j'ai passe du temps a construire le pipeline vocal complet avec soin. Le STT est la premiere etape de la chaine : Audio → STT → Texte → LLM → Function Calling → TTS → Audio. Si la premiere etape echoue, tout le reste s'effondre.
Comment fonctionne le STT natif sur Android et iOS ?
Chaque smartphone moderne embarque un moteur de reconnaissance vocale. Sur Android, c'est le SpeechRecognizer de Google. Sur iOS, c'est le Speech framework d'Apple. Ces moteurs sont integres au systeme d'exploitation et fonctionnent localement — aucune donnee ne quitte le telephone.
Les avantages sont clairs :
- Gratuit : Pas de cout par seconde, pas de limite de requetes, pas de facture surprise.
- Local : Les donnees vocales restent sur le device. Parfait pour la confidentialite.
- Rapide : Pas de latence reseau. La transcription commence quasi-instantanement.
- Hors ligne : Fonctionne meme sans connexion internet (avec les modeles telecharges).
Mais il y a des limites. Le STT natif n'est pas concu pour des cas d'usage professionnels. La ponctuation est souvent absente ou approximative. La precision baisse significativement dans un environnement bruyant. Et pour le francais avec des accents (quebecois, africain, belge), les resultats varient beaucoup.
Qu'est-ce que Deepgram apporte de plus ?
Deepgram est un service de STT cloud specialise. Son modele Nova-2 est entraine sur des milliards d'heures d'audio et offre une precision remarquable. Voici ce qui le distingue du STT natif :
- Ponctuation automatique : Les phrases sont correctement ponctuees, ce qui rend les memos immediatement lisibles.
- VAD (Voice Activity Detection) : Deepgram detecte quand tu parles et quand tu fais une pause. Pas de transcription du bruit ambiant.
- Streaming WebSocket : L'audio est transcrit en temps reel via WebSocket, mot par mot. L'utilisateur voit sa dictee apparaitre au fur et a mesure.
- Multi-langues natif : Le francais, y compris avec des accents, est bien supporte.
- Endpointing intelligent : Deepgram sait quand tu as fini de parler, ce qui declenche le traitement LLM au bon moment.
Le cout ? Environ $0.0043 par minute d'audio en streaming. Ca parait peu, mais pour une app vocale ou chaque interaction dure 10 a 30 secondes, ca s'additionne vite avec des centaines d'utilisateurs actifs.
Comment j'ai concu l'architecture duale dans TAMSIV ?
L'objectif etait clair : offrir deux moteurs STT interchangeables, sans que le code de l'interface ait besoin de savoir lequel tourne. Le pattern est celui de l'abstraction — une interface commune, deux implementations.
Cote frontend (React Native), j'expose une interface unifiee :
// Interface commune
interface STTEngine {
start(): void;
stop(): void;
onResult(callback: (text: string) => void): void;
onError(callback: (error: Error) => void): void;
}
// Deux implementations
class NativeSTTEngine implements STTEngine { ... }
class DeepgramSTTEngine implements STTEngine { ... }
Le choix du moteur est determine par deux facteurs :
- Le plan de l'utilisateur : Free → natif, Pro/Team → Deepgram (configurable).
- La configuration admin : Via la table
app_configdans Supabase, je peux forcer un moteur pour tous les utilisateurs. Utile pour les tests A/B ou en cas de probleme avec un provider.
Les composants UI (le Dictaphone, l'ecran de conversation) ne savent pas quel moteur tourne. Ils appellent start(), stop(), et recoivent du texte. C'est le principe de responsabilite unique applique au pipeline vocal.
Quels sont les resultats de la comparaison en conditions reelles ?
J'ai teste les deux moteurs sur trois scenarios concrets, avec le meme contenu dicte en francais :
| Scenario | STT natif | Deepgram |
|---|---|---|
| Environnement calme | ~92% | ~98% |
| Bruit de fond (cafe, rue) | ~75% | ~94% |
| Francais avec accents | ~80% | ~95% |
| Dictee rapide (>150 mots/min) | ~70% | ~93% |
Le verdict est sans appel : Deepgram est objectivement superieur dans tous les scenarios. L'ecart se creuse particulierement dans les environnements bruyants et avec les accents. La ponctuation automatique de Deepgram est un avantage enorme pour les memos vocaux — un memo sans ponctuation est un bloc de texte penible a relire.
Mais — et c'est la nuance importante — pour dicter une tache courte ("Acheter du lait demain matin"), le STT natif est suffisant. Dans un environnement calme, 92% de precision sur une phrase de 5 mots, ca fonctionne. L'utilisateur peut toujours editer le texte apres la creation vocale.
Comment cette architecture sert-elle le modele economique ?
L'architecture duale n'est pas qu'une prouesse technique — c'est un choix business. Elle permet trois choses :
- Un plan Free viable : L'utilisateur gratuit peut utiliser la voix sans que ca me coute quoi que ce soit en STT. Le cout est zero car le traitement est local.
- Un argument pour le premium : "Tu veux une meilleure precision, surtout dans le bruit ? Passe Pro." L'utilisateur qui a essaye le natif et qui veut mieux a une raison concrete de payer. C'est le meme principe que j'applique aux abonnements RevenueCat.
- Un fallback de securite : Si Deepgram a une panne (ca arrive), je peux basculer tous les utilisateurs sur le natif en changeant une valeur dans
app_config. Pas de mise a jour de l'app necessaire. C'est le meme pattern de fallback que j'utilise pour le LLM via OpenRouter.
Quelles sont les difficultes techniques de l'integration STT natif en React Native ?
Integrer le STT natif dans React Native n'est pas trivial. Voici les problemes que j'ai rencontres :
- API differentes Android/iOS : Le SpeechRecognizer Android et le Speech framework iOS ont des APIs completement differentes. La librairie React Native que j'utilise abstrait une partie de ces differences, mais pas tout.
- Gestion du lifecycle : Sur Android, le SpeechRecognizer doit etre correctement nettoye quand l'app passe en arriere-plan. Sinon, il continue d'ecouter et consomme de la batterie. J'ai du ajouter des listeners sur l'AppState pour gerer ca.
- Timeout de securite : Le STT natif peut rester bloque en etat "listening" indefiniment. J'ai ajoute un timeout de 30 secondes (le meme pattern que dans l'AudioPlayerService) avec cleanup automatique.
- Pas de streaming fiable : Contrairement a Deepgram qui envoie les mots au fur et a mesure, le STT natif retourne des resultats partiels qui peuvent etre contradictoires. J'ai du implementer un debounce pour eviter le "flickering" du texte affiche.
Comment configurer le choix STT a distance sans deployer ?
Un des avantages de cette architecture, c'est la configurabilite a distance. Dans Supabase, j'ai une table app_config qui stocke des parametres globaux de l'application. Le choix du moteur STT est l'un d'eux.
Quand l'app demarre, elle lit la config depuis Supabase (ou depuis le cache, grace au ContentCacheService). Si la config dit "natif pour tous", meme les utilisateurs Pro utilisent le natif. C'est utile dans plusieurs cas :
- Panne Deepgram : Basculer instantanement sans mise a jour.
- Tests A/B : Comparer les metriques de retention entre les deux moteurs sur un panel d'utilisateurs.
- Reduction de couts temporaire : Si le budget cloud est serre un mois donne, je peux desactiver Deepgram temporairement.
Le dashboard admin affiche les metriques d'utilisation par moteur STT, ce qui permet de prendre des decisions informees.
Quel est le futur du STT dans les apps mobiles ?
Le paysage du STT evolue rapidement. Whisper d'OpenAI a democratise les modeles STT open-source de haute qualite. Des projets comme whisper.cpp permettent de faire tourner Whisper directement sur mobile, avec une qualite proche de Deepgram et zero cout cloud.
Je surveille cette evolution de pres. Le jour ou un modele Whisper tourne suffisamment bien sur un smartphone standard avec le support du francais en temps reel, le STT cloud deviendra optionnel pour tout le monde. En attendant, l'architecture duale que j'ai mise en place est parfaitement positionnee pour integrer un troisieme moteur sans toucher aux composants UI.
FAQ
Le STT natif fonctionne-t-il hors ligne ?
Oui, a condition que le modele de langue soit telecharge sur le device. Sur Android, Google propose le telechargement des modeles vocaux dans les parametres. Sur iOS, les modeles sont generalement deja presents. La qualite hors ligne est legerement inferieure a la version en ligne.
Deepgram est-il le meilleur service STT cloud ?
Deepgram Nova-2 est parmi les meilleurs pour le rapport qualite/prix. Google Cloud Speech-to-Text et AWS Transcribe sont des alternatives serieuses. J'ai choisi Deepgram pour son API WebSocket native et sa facturation a la seconde (pas a la minute).
L'utilisateur peut-il choisir son moteur STT ?
Actuellement, le choix est lie au plan (Free = natif, Pro = Deepgram). A terme, je prevois d'ajouter un toggle dans les parametres pour que l'utilisateur Pro puisse choisir le natif s'il prefere la confidentialite locale.
Comment gerer les langues autres que le francais ?
TAMSIV supporte 6 langues. Le STT natif et Deepgram supportent tous les deux ces langues. La detection de la langue est basee sur les parametres de l'app (pas de detection automatique), ce qui evite les confusions entre langues proches.
Le STT natif consomme-t-il beaucoup de batterie ?
Moins que le STT cloud, car il n'y a pas de transfert reseau. Mais le traitement local utilise le processeur du telephone. Sur une dictee courte (30 secondes), l'impact est negligeable. Sur une dictee longue (5+ minutes), le STT natif peut consommer plus de batterie que le cloud car le processeur tourne en continu.