Login / Sign up
Discover Bonzai
Terms of Use
Legal notice
Privacy
Region
Language
matyo91
matyo91
14
Subscribers
Facebook
X
Whatsapp
Telegram
👉 You must follow matyo91 to access chat.
Feed Shop About

🚀 Je construis un moteur de dictĂ©e en PHP (Flow + Symfony + Whisper.cpp)

Facebook
Twitter
Whatsapp
Telegram
3 months ago


Construire un moteur de dictée en 2026 est trivial.

Construire une architecture propre autour d’un moteur de dictĂ©e est plus intĂ©ressant.

Cet article prĂ©sente Flowvox, un MVP de moteur de transcription audio dĂ©veloppĂ© en PHP, en s’appuyant sur :

  • Symfony

  • Symfony Messenger

  • Flow : orchestrateur maison

  • ffmpeg

  • whisper.cpp

Le code source est disponible en open source : 👉 https://github.com/darkwood-com/flowvox

L’objectif n’était pas simplement d’utiliser Whisper. L’objectif Ă©tait de structurer correctement le pipeline.

Le problĂšme : la transcription n’est qu’une Ă©tape

Un moteur vocal minimal peut se résumer à :

Audio → Texte

Mais dans un systÚme réel, plusieurs contraintes apparaissent :

  • DĂ©clenchement start / stop

  • Finalisation propre du fichier audio

  • Gestion d’état du recorder

  • Orchestration des Ă©tapes

  • Extension vers post-traitement (rĂ©sumĂ©, LLM, analyse)

La question devient alors :

Comment modéliser un pipeline audio propre, extensible et maßtrisé ?

Stack technique

Le MVP repose sur :

  • PHP 8+

  • Symfony

  • Symfony Messenger

  • Flow (orchestrateur)

  • ffmpeg (captation audio locale)

  • whisper.cpp (transcription open source locale)

Aucune API distante. Aucun service cloud. Transcription 100% locale.

Architecture générale

L’architecture est organisĂ©e en trois flows :

InputProvider → Recorder → Transcribe

Chaque Ă©tape est isolĂ©e et responsable d’un rĂŽle prĂ©cis.

InputProviderFlow

Responsabilité :

  • Écouter les commandes voice:start et voice:stop

  • Émettre un VoiceControlEvent

Les commandes CLI déclenchent des messages via Symfony Messenger.

Le worker, en arriÚre-plan, reçoit ces événements et les injecte dans Flow.

Ce découplage permet :

  • Un contrĂŽle granulaire

  • Une gestion multi-session

  • Une sĂ©paration claire des responsabilitĂ©s

RecorderFlow

Responsabilité :

  • Piloter une instance de VoiceRecorder

  • GĂ©rer le cycle de vie d’un processus ffmpeg

Le VoiceRecorder encapsule un processus systÚme lancé via :

Symfony\Component\Process\Process

ProblĂšme central :

Comment gérer proprement start / stop sans corrompre le fichier audio ?

Trois états sont explicitement modélisés :

  • idle

  • recording

  • stopping

Lors d’un stop, un SIGINT est envoyĂ© Ă  ffmpeg afin de finaliser correctement le header WAV.

L’état stopping Ă©vite :

  • Les double-start

  • Les conflits concurrents

  • Les fichiers incomplets

Le processus est maßtrisé, pas subi.

TranscribeFlow

Responsabilité :

  • Recevoir un fichier WAV finalisĂ©

  • Lancer whisper.cpp

  • Produire un texte transcrit

Whisper est exécuté localement via CLI.

Le MVP reste volontairement simple :

  • Pas de streaming

  • Pas de chunking temps rĂ©el

  • Une transcription synchrone

L’objectif est de valider l’intĂ©gration et l’orchestration.

Worker et orchestration

Le moteur fonctionne via un worker Symfony :

php bin/console voice:worker

Ce worker :

  1. Instancie Flow

  2. Enregistre les flows

  3. Écoute Symfony Messenger

  4. Ordonne l’exĂ©cution des Ă©tapes

Commandes disponibles :

voice:start voice:stop voice:worker-list

Le flux complet devient :

voice:start → Recorder dĂ©marre → voice:stop → Recorder finalise → TranscribeFlow s’exĂ©cute → Texte produit

Sans état global externe.

Pourquoi Flow ?

Flow permet :

  • Une architecture orientĂ©e pipeline

  • Des stratĂ©gies d’Input Processing (IP Strategy)

  • Une gestion explicite des Ă©vĂ©nements

  • Une sĂ©paration nette entre orchestration et logique mĂ©tier

Le systĂšme n’est pas couplĂ© Ă  Whisper.

Whisper est une implémentation. Flow est la structure.

Ce que valide le MVP

  • Gestion propre d’un processus systĂšme

  • ModĂ©lisation explicite des Ă©tats

  • Orchestration Ă©vĂ©nementielle

  • ExtensibilitĂ© du pipeline

Ce n’est pas un produit.

C’est une base architecturale.

Évolutions possibles

Les prochaines itérations naturelles :

  • Streaming par chunk audio

  • Transcription parallĂšle

  • Post-traitement LLM

  • IntĂ©gration NativePHP (desktop)

  • Support mobile

  • Batching multi-modĂšles

Mais ces Ă©volutions ne changent pas le cƓur :

Une architecture claire. Une orchestration maßtrisée. Un pipeline extensible.

Code source

Le dépÎt open source est disponible ici :

👉 https://github.com/darkwood-com/flowvox

Contributions, suggestions et retours sont les bienvenus.

Conclusion

Construire un moteur vocal en PHP est simple.

Construire une architecture propre autour d’un moteur vocal est plus intĂ©ressant.

Flowvox valide un principe :

La transcription n’est qu’un composant. L’orchestration est la vĂ©ritable structure.

matyo91
matyo91
€99.00

Consulting Automation avec Flow

Open
Follow matyo91 to comment
matyo91

matyo91

Je t'aide Ă  automatiser tes process
14
Visit this Bonzai
Follow matyo91 to get the latest updates.

đŸŽ€ Sunday Labs #4 : ce que l’écosystĂšme builder parisien cherche vraiment

2 days ago
6

đŸ§© Un agent IA aujourd’hui, c’est un stagiaire hypermotivĂ© avec 400 onglets ouverts.

5 days ago
11

âŹ†ïž Flowvox update : Symfony devient une plateforme d’agents vocaux temps rĂ©el

1 week ago
20

⚙ NoLife Models - Vers une infrastructure locale des runtimes IA avec Symfony

2 weeks ago
20

💡 Devoxx France 2026 - L'Ère de l'Agentique au CƓur de Paris

2 weeks ago
49

đŸ’« J’ai forcĂ© 4 IA Ă  recrĂ©er Mario de zĂ©ro avec Symfony AI et Godot

2 weeks ago
24

âšĄïž Projection du film "Mon Extraordinaire"

3 weeks ago
33

✹ Le design transformatif : ne plus concevoir des usages, mais des mĂ©tamorphoses

3 weeks ago
33

⚙ Construire une architecture multi-agent gouvernĂ©e avec Symfony AI, Flow et Navi

4 weeks ago
66

🚀 LevĂ©e de fonds vs Bootstrap : deux chemins pour construire une boĂźte

4 weeks ago
37

🚀 J’ai reconstruit un LLM
 avec des pixels.

1 month ago
36

🔊 DJ Matyo Live - Soundcloud set

1 month ago
36

đŸ€– Symfony AI in Action - Construire des systĂšmes IA rĂ©els avec Symfony

1 month ago
47

🐳 Agentic Workflows avec Docker - vers des systĂšmes autonomes, sĂ©curisĂ©s et orchestrĂ©s

1 month ago
44

đŸ‘šâ€đŸ’» Évaluation comparative de petits modĂšles de langage dans le monde rĂ©el

1 month ago
39

🚀 Sundays Lab #3 - Quand l’IA devient un terrain de jeu collectif

1 month ago
43

⚙ Message-oriented vs Data-oriented orchestration - de la donnĂ©e Ă  la connaissance

1 month ago
57

đŸ€© RelĂącher les connecteurs - Des outils au langage

1 month ago
55

💡 J’ai créé une app IA RGPD en 1h avec Symfony

1 month ago
57

đŸ—‚ïž Hellcats Over The Pacific - ouverture des archives

1 month ago
54
© 2026 Bonzai Privacy Legal notice Terms of Use