Files
ox_speak_old/tree.md
2025-06-18 03:15:36 +02:00

6.0 KiB

Projet ox_speak_rs - Structure du Code

Structure des Modules

ox_speak_rs/
├── src/
│   ├── main.rs                  # Point d'entrée de l'application
│   ├── modules/                 # Modules fonctionnels
│   │   ├── mod.rs               # Exports des modules
│   │   ├── audio_processor_in.rs # Traitement audio d'entrée
│   │   ├── audio_processor_out.rs # Traitement audio de sortie
│   │   ├── audio_opus.rs        # Encodage/décodage Opus
│   │   ├── audio_stats.rs       # Statistiques audio
│   │   ├── client.rs            # Client réseau UDP
│   │   ├── client_old.rs        # Ancienne implémentation du client
│   │   ├── config.rs            # Configuration (commenté)
│   │   ├── audio_client.rs      # Client audio (vide)
│   │   └── utils.rs             # Utilitaires pour les modules (vide)
│   └── utils/                   # Utilitaires génériques
│       ├── mod.rs               # Exports des utilitaires
│       ├── real_time_event.rs   # Gestion d'événements temps réel
│       ├── ringbuf.rs           # Implémentation de buffer circulaire
│       └── ringbuf.md           # Documentation du buffer circulaire

Hiérarchie des Structures

Module Principal (main.rs)

  • Initialise les composants principaux
  • Configure les threads de traitement audio

Modules Audio

audio_processor_in.rs

  • Microphone

    • Gère l'accès au périphérique d'entrée audio
    • Méthodes:
      • new(): Crée une nouvelle instance
      • start(): Démarre la capture audio
      • stop(): Arrête la capture
      • get_config(): Récupère la configuration
      • change_device(): Change le périphérique d'entrée
      • list_available_devices(): Liste les périphériques disponibles
  • AudioCapture

    • Gère le processus de capture audio
    • Utilise Microphone pour l'accès au périphérique
    • Méthodes:
      • new(): Crée une nouvelle instance
      • start_capture(): Démarre la capture
      • is_silence(): Détecte le silence dans un buffer
  • Subscriber

    • Structure pour les abonnés aux événements audio
  • AudioEventBus

    • Bus d'événements pour la distribution des données audio
    • Méthodes:
      • new(): Crée une nouvelle instance
      • new_with_capacity(): Crée avec une capacité spécifiée
      • subscribe_raw(): S'abonne aux données brutes
      • subscribe_encoded(): S'abonne aux données encodées
      • notify_raw(): Notifie les abonnés avec données brutes
      • notify_encoded(): Notifie les abonnés avec données encodées

audio_processor_out.rs

  • Speaker
    • Gère l'accès au périphérique de sortie audio
    • Méthodes:
      • new(): Crée une nouvelle instance

audio_opus.rs

  • AudioOpus

    • Configuration de base pour le codec Opus
    • Méthodes:
      • new(): Crée une nouvelle instance
      • create_encoder(): Crée un encodeur
      • create_decoder(): Crée un décodeur
  • AudioOpusEncoder

    • Gère l'encodage audio avec Opus
    • Méthodes:
      • new(): Crée une nouvelle instance
      • encode(): Encode des données audio
      • encode_reuse(): Encode avec réutilisation de buffer
  • AudioOpusDecoder

    • Gère le décodage audio avec Opus
    • Méthodes:
      • new(): Crée une nouvelle instance
      • decode(): Décode des données audio

audio_stats.rs

  • AudioBufferWithStats

    • Buffer audio avec statistiques
    • Méthodes:
      • new_frame(): Crée un nouveau frame avec stats
      • calculate_peak_rms_simd(): Calcule pic et RMS avec SIMD
      • now_nanos(): Horodatage en nanosecondes
  • GlobalAudioStats

    • Statistiques audio globales
    • Méthodes:
      • new(): Crée une nouvelle instance
      • get_live_stats(): Récupère les stats en temps réel
      • now_nanos(): Horodatage en nanosecondes
  • LiveAudioStats

    • Statistiques audio en temps réel
    • Méthodes:
      • volume_bar_with_timing(): Affiche barre de volume
      • timing_analysis(): Analyse de timing

Modules Réseau

client.rs

  • MessageType (enum)

    • Types de messages réseau
    • Variantes: Keepalive, Hello, Bye, Command, Status, Audio, Error
  • UdpClient

    • Client UDP pour communication réseau
    • Méthodes:
      • new(): Crée une nouvelle instance
      • send(): Envoie des données
      • try_recv(): Tente de recevoir des données
      • start(): Démarre le client
      • stop(): Arrête le client
      • get_audio_sender(): Récupère le sender audio
      • create_audio_handle(): Crée un handle audio
  • Client

    • Wrapper autour de UdpClient
    • Méthodes:
      • new(): Crée une nouvelle instance
  • MessageCall (enum)

    • Représente les messages sortants
    • Variantes: KeepAlive, Hello, Bye, Command, Audio, Error
    • Méthodes:
      • serialize(): Sérialise le message
      • Constructeurs pour chaque type de message
  • MessageEvent (enum)

    • Représente les messages entrants
    • Variantes: Status, Audio, Error
  • AudioHandle

    • Gère l'envoi de frames audio
    • Méthodes:
      • new(): Crée une nouvelle instance
      • send_audio_frame(): Envoie un frame audio

Utilitaires

real_time_event.rs

  • RealTimeEventInner

    • Implémentation interne pour la gestion d'événements
  • RealTimeEvent

    • API publique pour notification et attente d'événements
    • Méthodes:
      • new(): Crée une nouvelle instance
      • notify(): Notifie les listeners
      • wait(): Attend une notification

ringbuf.rs

  • RingBufWriter<T>

    • Écrit dans un buffer circulaire
    • Méthodes:
      • push(): Ajoute un élément
      • push_slice(): Ajoute un slice d'éléments
  • RingBufReader<T>

    • Lit depuis un buffer circulaire
    • Méthodes:
      • pop_blocking(): Récupère un élément (bloquant)
      • try_pop(): Tente de récupérer un élément
  • InnerRingBuf<T>

    • Implémentation interne du buffer circulaire
    • Méthodes:
      • next(): Calcule l'index suivant
  • Fonction ringbuf<T>()

    • Crée une paire (writer, reader) de buffer circulaire