6.0 KiB
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 instancestart(): Démarre la capture audiostop(): Arrête la captureget_config(): Récupère la configurationchange_device(): Change le périphérique d'entréelist_available_devices(): Liste les périphériques disponibles
-
AudioCapture- Gère le processus de capture audio
- Utilise
Microphonepour l'accès au périphérique - Méthodes:
new(): Crée une nouvelle instancestart_capture(): Démarre la captureis_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 instancenew_with_capacity(): Crée avec une capacité spécifiéesubscribe_raw(): S'abonne aux données brutessubscribe_encoded(): S'abonne aux données encodéesnotify_raw(): Notifie les abonnés avec données brutesnotify_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 instancecreate_encoder(): Crée un encodeurcreate_decoder(): Crée un décodeur
-
AudioOpusEncoder- Gère l'encodage audio avec Opus
- Méthodes:
new(): Crée une nouvelle instanceencode(): Encode des données audioencode_reuse(): Encode avec réutilisation de buffer
-
AudioOpusDecoder- Gère le décodage audio avec Opus
- Méthodes:
new(): Crée une nouvelle instancedecode(): Décode des données audio
audio_stats.rs
-
AudioBufferWithStats- Buffer audio avec statistiques
- Méthodes:
new_frame(): Crée un nouveau frame avec statscalculate_peak_rms_simd(): Calcule pic et RMS avec SIMDnow_nanos(): Horodatage en nanosecondes
-
GlobalAudioStats- Statistiques audio globales
- Méthodes:
new(): Crée une nouvelle instanceget_live_stats(): Récupère les stats en temps réelnow_nanos(): Horodatage en nanosecondes
-
LiveAudioStats- Statistiques audio en temps réel
- Méthodes:
volume_bar_with_timing(): Affiche barre de volumetiming_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 instancesend(): Envoie des donnéestry_recv(): Tente de recevoir des donnéesstart(): Démarre le clientstop(): Arrête le clientget_audio_sender(): Récupère le sender audiocreate_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 instancesend_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 instancenotify(): Notifie les listenerswait(): Attend une notification
ringbuf.rs
-
RingBufWriter<T>- Écrit dans un buffer circulaire
- Méthodes:
push(): Ajoute un élémentpush_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