Skip to main content
Cette page décrit les crates de 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

  1. apps/desktop/src-tauri crée le fournisseur audio : syntheo-audio-actual (ActualAudio), ou syntheo-audio-mock en build de développement.
  2. plugins/transcription passe par syntheo-transcription-core, qui réexporte syntheo-listener-core (écoute en direct) et syntheo-listener2-core (import par lot).
  3. Les deux listeners parlent au serveur STT via owhisper-client, qui s’appuie sur openai-transcription et syntheo-ws-client.
  4. syntheo-transcript assemble les mots reçus en segments et en locuteurs.
  5. plugins/dictation réutilise syntheo-audio et owhisper-client pour 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 si MOCK_AUDIO est défini dans un build dev ou devtools.
  • API : ActualAudio, AudioInput, AudioOutput, AudioSource, AudioStream ; réexporte AudioProvider, CaptureConfig, CaptureFrame, CaptureStream de crates/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, sur wasapi ; sous macOS, sur cidre. 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_dir vé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.rs dé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 modules listener et listener2 réexportent listener-core et listener2-core. Le module realtime_file importe un fichier par le flux temps réel : décodage en mémoire, passage par file_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, via whatlang) et langue dominante d’un texte (dominant_language).
  • Dépendances internes : whisper (feature whisper, active par défaut).
  • Utilisée par : detect, listener-core, listener2-core, owhisper-client, owhisper-interface, plugins/tantivy, plugins/template (commande dominant_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 via xcap), language. meeting_ax lit l’accessibilité macOS.
  • API : Detector, DetectEvent, DetectCallback, new_callback, BackgroundTask.
  • Dépendances internes : language ; bundle sous macOS.
  • Utilisée par : plugins/detect (features mic, 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 via swift-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.