
Whisperina : De l'audio au texte en quelques clics
Whisperina : application Symfony de transcription audio automatique. Convertit fichiers audio en texte via l'API Whisper d'OpenAI pour gagner du temps
J'aime me lancer de petits défis en programmation. Cette fois, c'est une situation bien concrète qui m'a donné l'idée : une personne de mon entourage devait retranscrire manuellement des heures de réunions. Écouter, réécouter, taper… un travail long et fastidieux.
Je me suis dit que je pouvais sans doute automatiser ça. C'est ainsi qu'est né Whisperina, une petite application qui transforme un fichier audio en texte.
Comment fonctionne Whisperina?
Le processus est simple :
- Upload - L'utilisateur dépose un fichier audio
- Normalisation - Le fichier est converti en MP3 et normalisé
- Découpage - L'audio est découpé en segments de 3 minutes
- Transcription - Chaque segment est envoyé à Whisper, l'API d'OpenAI
- Affichage - Les résultats apparaissent petit à petit dans la page
Quels sont les outils utilisés
Les outils Backend
- Symfony 7 & PHP 8.3 pour la structure du projet
- Messenger pour gérer les tâches longues en asynchrone
- Mercure pour afficher les résultats en temps réel
Les outils FrontEnd
- Vanilla JS au départ, puis Tailwind CSS pour l'interface
Les outils de développement
- PHPStorm comme IDE principal
- Neovim comme éditeur léger
Mercure : le temps réel au service de l'utilisateur
Pour éviter que l'utilisateur reste dans le vide en attendant le résultat, j'ai branché mon backend à un hub Mercure. Concrètement, le backend envoie les avancées et les transcriptions morceau par morceau, et la page web les affiche aussitôt.
Résultat : en quelques secondes, on voit défiler la progression et les phrases transcrites apparaissent comme par magie.
L'apport de l'intelligence artificielle
La partie la plus importante repose sur Whisper d'OpenAI, un modèle d'IA spécialisé dans la transcription audio. Il prend en charge les fichiers MP3 découpés et renvoie le texte correspondant, avec une grande précision.
Grâce à cette combinaison entre Symfony, Mercure et Whisper, une tâche pénible et chronophage devient fluide et rapide
Détails techniques
Pour les développeurs qui souhaitent creuser davantage...
Architecture du projet
Le projet utilise un boilerplate Symfony 7.x mis à jour régulièrement. J'ai choisi cette stack car le but n'était pas de tester de nouveaux langages ou frameworks, mais d'aller droit au but.
Choix techniques :
- Twig Components : parfait pour une application à page unique sans redirection
- Tailwind Bundle : pour un rendu agréable une fois le prototype fonctionnel
- HttpClient : pour communiquer avec l'API Whisper
Configuration et contraintes
Upload de fichiers :
- Configuration via FormType pour n'accepter que les fichiers audio
- Adaptation de la taille maximale (par défaut, Symfony n'autorise pas 100 Mo)
Découpage audio :
- Segments de 3 minutes après plusieurs essais avec Whisper
- Un fichier d'une heure (100 Mo) ne peut pas être envoyé directement à l'API
Flux asynchrone détaillé
- Upload et normalisation : Le fichier est déplacé dans un répertoire temporaire puis converti en MP3 avec un débit binaire configurable
- Découpage : Division en segments acceptables par l'API Whisper
- Traitement asynchrone : Utilisation de Messenger pour éviter les timeouts
- Envoi des requêtes morceau par morceau via HttpClient
- Publication d'un message d'avancement sur un topic Mercure
- Affichage de la progression (conversion → découpage → transcription)
- Communication temps réel :
- Backend : Publication des messages via Mercure
- Frontend : Abonnement SSE avec différents topics (transcription, avancement)
- Affichage des indicateurs visuels (étoiles, barres de progression)
Installation du hub Mercure
L'installation en local est simplifiée grâce au bundle Symfony. Mercure sert de point central entre le backend (traitement) et le frontend (affichage), permettant une communication bidirectionnelle en temps réel.
Évolutions possibles
- Passage à Stimulus ou Alpine.js pour plus de logique frontend
- Support d'autres formats audio
- Amélioration de la précision avec des paramètres Whisper personnalisés