crates/ qui portent la capture audio, la transcription et la détection de réunion. Elle sert à savoir quel code pilote quel comportement documenté. Le flux de bout en bout est décrit dans Architecture.
Dans les Cargo.toml, ces crates sont référencées par l’alias de workspace syntheo-<nom> (par exemple syntheo-audio-actual), sauf owhisper-client, owhisper-interface et openai-transcription, qui gardent leur nom.
Chaîne principale
apps/desktop/src-tauricrée le fournisseur audio :syntheo-audio-actual(ActualAudio), ousyntheo-audio-mocken build de développement.plugins/transcriptionpasse parsyntheo-transcription-core, qui réexportesyntheo-listener-core(écoute en direct) etsyntheo-listener2-core(import par lot).- Les deux listeners parlent au serveur STT via
owhisper-client, qui s’appuie suropenai-transcriptionetsyntheo-ws-client. syntheo-transcriptassemble les mots reçus en segments et en locuteurs.plugins/dictationréutilisesyntheo-audioetowhisper-clientpour la dictée.
Capture audio
crates/audio-actual
- Rôle : le seul fournisseur audio des builds publiés.
apps/desktop/src-tauri/src/lib.rs(create_audio_provider) l’instancie, sauf siMOCK_AUDIOest défini dans un builddevoudevtools. - API :
ActualAudio,AudioInput,AudioOutput,AudioSource,AudioStream; réexporteAudioProvider,CaptureConfig,CaptureFrame,CaptureStreamdecrates/audio. - Capture de l’audio système :
src/speaker/contient une implémentation par plateforme. Sous Linux, elle s’appuie sur PulseAudio (libpulse-binding) et PipeWire ; sous Windows, surwasapi; sous macOS, surcidre. La sortie choisie dans les réglages est prise en compte, sinon la sortie par défaut. - Capture :
src/capture/assemble micro et audio système (joiner.rs), applique l’annulation d’écho (echo_gate.rs) et gère la reprise après erreur (recovery.rs). - Dépendances internes :
aec,audio,audio-device,audio-interface,audio-sync,audio-utils,resampler. - Pages de doc concernées : /meetings, /troubleshooting (audio sous Linux et Windows), /data-and-privacy (audio jamais conservé).
Détection d’activité vocale
Pages de doc concernées : /meetings pour
vad-masking ; aucune pour vad et onnx pris isolément.
Sessions d’écoute
crates/listener-core
- Rôle : moteur de l’écoute en direct. Des acteurs (
src/actors/) gèrent la session (session/), la source audio (source/, avec les sourdines et le suivi des périphériques), la connexion STT (listener/), le balayage audio (audio_sweep.rs) et la lecture d’un fichier au rythme du temps réel (file_stream/). - API :
State,Snapshot,TranscriptionMode,StartSessionError,DegradedError, les événements (events.rs) et la transcription en direct (live_transcript). - Garantie : le test
supervisor_writes_no_audio_to_session_dirvérifie qu’aucun fichier audio n’apparaît dans le dossier de session. - Dépendances internes :
audio,audio-device,audio-utils,device-monitor,language,storage,supervisor,transcript,vad-masking,owhisper-client,owhisper-interface. - Pages de doc concernées : /meetings, /automatic-capture, /data-and-privacy, /offline, /troubleshooting.
crates/listener2-core
- Rôle : transcription par lot d’un fichier importé.
src/batch/propose un mode simple et un mode progressif ;upload.rsdécoupe l’audio en segments MP3 en mémoire avant envoi. - API :
BatchRuntime,BatchParams,BatchEvent,BatchRunMode;is_supported_languages_live/_batch,suggest_providers_for_languages_live/_batch,list_documented_language_codes_batch; lecture et export de sous-titres (parse_subtitle_from_path,export_words_to_vtt_file). - Dépendances internes :
audio-utils,language,mp3,user-error,owhisper-client,owhisper-interface. - Pages de doc concernées : /import-recordings, /languages.
crates/transcription-core
- Rôle : façade unique pour
plugins/transcription. Les moduleslisteneretlistener2réexportentlistener-coreetlistener2-core. Le modulerealtime_fileimporte un fichier par le flux temps réel : décodage en mémoire, passage parfile_stream, puis rendu au format batch, sans rien écrire sur le disque. - Dépendances internes :
listener-core,listener2-core,owhisper-interface. - Pages de doc concernées : /meetings, /import-recordings.
crates/supervisor
- Rôle : supervision d’acteurs : budget de redémarrages (
RestartBudget,RestartTracker), relance avec stratégie (RetryStrategy,spawn_with_retry), superviseur dynamique (dynamic). - Utilisée par :
listener-core(redémarrage de la source audio). - Pages de doc concernées : /meetings (reprise sans redémarrer la capture).
Clients STT
Pages de doc concernées : /ai-setup, /meetings, /dictation, /import-recordings, /offline, /troubleshooting, /conformite/rgpd.
Transcription et langues
crates/transcript
- Rôle : transforme les mots reçus du STT en transcription : traitement (
TranscriptProcessor), post-traitement, segments (build_segments), étiquettes de locuteurs (SpeakerLabeler,render_speaker_label), contexte des locuteurs, raffinement après lot (batch_refine), matérialisation en direct et rendu. - Dépendances internes :
template-app,owhisper-interface. - Utilisée par :
listener-core,plugins/transcription,agent-access(CLI et serveur MCP). - Pages de doc concernées : /meetings, /notes, /contacts, /reference/cli, /reference/mcp.
crates/language
- Rôle : codes de langue ISO 639-1 (
ISO639,Language), listes de langues supportées (whisper_multilingual,parakeet_tdt_v3_languages), détection (detect, viawhatlang) et langue dominante d’un texte (dominant_language). - Dépendances internes :
whisper(featurewhisper, active par défaut). - Utilisée par :
detect,listener-core,listener2-core,owhisper-client,owhisper-interface,plugins/tantivy,plugins/template(commandedominant_language),plugins/transcription. - Pages de doc concernées : /languages.
crates/whisper
Aucun modèle Whisper : la crate ne contient que l’énumération Language des langues du tokenizer Whisper (whisper_index). Seule crates/language l’utilise. Pages de doc concernées : aucune.
Détection de réunion
crates/detect
- Rôle : observe le poste pour déclencher la capture automatique. Modules derrière des features :
mic(micro utilisé par une autre application ; PulseAudio sous Linux),list(applications installées),app,zoom,sleep(mise en veille),screen(capture d’écran viaxcap),language.meeting_axlit l’accessibilité macOS. - API :
Detector,DetectEvent,DetectCallback,new_callback,BackgroundTask. - Dépendances internes :
language;bundlesous macOS. - Utilisée par :
plugins/detect(featuresmic,list,language,sleep,screen). - Pages de doc concernées : /automatic-capture.
Crates propres à macOS
Aucun build macOS n’est publié (voir Architecture). Ces crates appellent du code Swift viaswift-rs et n’ont d’effet que sous macOS.
Pages de doc concernées : aucune, tant que macOS n’est pas distribué.
Crates annexes
Repères pour la documentation
- Changement de plateforme audio, de périphérique ou de capture système :
crates/audio-actual,crates/audio-device,crates/device-monitor. Mettez à jour /meetings et /troubleshooting. - Nouveau protocole ou fournisseur STT :
crates/owhisper-client. Mettez à jour /ai-setup, /conformite/rgpd et /architecture. - Changement des formats d’import ou de la transcription par lot :
crates/listener2-core,crates/transcription-core. Mettez à jour /import-recordings. - Changement des langues supportées :
crates/language,crates/listener2-core. Mettez à jour /languages. - Toute écriture d’audio sur disque contredit /data-and-privacy et les garanties d’architecture.