Image d'illustration du projet Whisperina : De l'audio au texte en quelques clics par pixelservices.be

Whisperina : De l'audio au texte en quelques clics

Application Web Symfony 7.2 Twig Components HttpClient Hub Mercure IA

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 :

  1. Upload - L'utilisateur dépose un fichier audio
  2. Normalisation - Le fichier est converti en MP3 et normalisé
  3. Découpage - L'audio est découpé en segments de 3 minutes
  4. Transcription - Chaque segment est envoyé à Whisper, l'API d'OpenAI
  5. 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é

  1. Upload et normalisation : Le fichier est déplacé dans un répertoire temporaire puis converti en MP3 avec un débit binaire configurable
  2. Découpage : Division en segments acceptables par l'API Whisper
  3. 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)
  4. 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
 
Moi, c’est Jeanphi, développeur et webmaster basé à Liège et au Brabant wallon, mais disponible pour toute la Wallonie. Besoin d’un site qui reflète votre activité ? Parlons-en et donnons vie à vos projets en ligne !