Skip to content

Latest commit

 

History

History
207 lines (168 loc) · 6.04 KB

File metadata and controls

207 lines (168 loc) · 6.04 KB

Architecture WebAmp

Vue d'ensemble

WebAmp est une application hybride composée de :

  1. Native Helper (C++) : Traitement audio temps réel
  2. Frontend Web (React/TypeScript) : Interface utilisateur
  3. Communication WebSocket : Liaison entre les deux
┌─────────────────┐
│   Frontend Web  │
│  (React/TS)     │
│  Port 10000     │
└────────┬────────┘
         │ WebSocket
         │ (Port 8765)
         ▼
┌─────────────────┐
│  Native Helper  │
│     (C++)       │
│                 │
│  ┌───────────┐  │
│  │Audio Driver│  │
│  │WASAPI/ASIO │  │
│  └─────┬─────┘  │
│        │        │
│  ┌─────▼─────┐  │
│  │DSP Pipeline│ │
│  │            │  │
│  │Effect Chain│ │
│  └────────────┘ │
└─────────────────┘

Native Helper

Structure

native/
├── include/          # Headers
│   ├── audio_engine.h
│   ├── audio_driver.h
│   ├── dsp_pipeline.h
│   ├── effect_chain.h
│   ├── effect_base.h
│   ├── websocket_server.h
│   ├── wasapi_driver.h
│   └── asio_driver.h
├── src/             # Implémentations
│   ├── main.cpp
│   ├── audio_engine.cpp
│   ├── dsp_pipeline.cpp
│   ├── effect_chain.cpp
│   ├── wasapi_driver.cpp
│   ├── asio_driver.cpp
│   └── websocket_server.cpp
└── CMakeLists.txt

Composants principaux

AudioEngine

  • Coordonne le driver audio et le pipeline DSP
  • Gère le cycle de vie de l'application
  • Point d'entrée principal

AudioDriver (Interface)

  • Abstraction pour différents drivers (WASAPI, ASIO, CoreAudio, PipeWire)
  • Gère les callbacks audio temps réel
  • Mesure la latence

DSPPipeline

  • Traite l'audio dans le callback
  • Applique les gains d'entrée/sortie
  • Gère les statistiques (CPU, peaks)

EffectChain

  • Chaîne d'effets modulaire
  • Thread-safe pour modifications à chaud
  • Support des presets

WebSocketServer

  • Communication avec le frontend
  • Envoi/réception de messages JSON
  • Gestion des reconnexions

Frontend

Structure

frontend/
├── src/
│   ├── components/
│   │   ├── Pedalboard.tsx         # Chaîne d'effets
│   │   ├── AmplifierSelector.tsx  # Sélecteur d'ampli
│   │   ├── drummachine/           # Machine à rythmes
│   │   │   ├── DrumMachinePanel.tsx
│   │   │   └── DrumMachineCompact.tsx
│   │   └── monitoring/            # Panneaux de monitoring
│   ├── utils/
│   │   ├── pedalControlHelpers.ts # Analyse des contrôles de pédales
│   │   ├── pedalboardSync.ts     # Synchronisation WebSocket/Audio
│   │   └── profileLoader.ts      # Chargement de profils
│   ├── services/
│   │   └── websocket.ts          # Client WebSocket
│   ├── App.tsx
│   └── main.tsx
└── package.json

Composants

Pedalboard

  • Affichage de la chaîne d'effets
  • Ajout/suppression d'effets
  • Réordonnancement par drag & drop
  • Contrôle des paramètres
  • Synchronisation avec moteur audio et WebSocket

AmplifierSelector

  • Sélection d'amplificateur
  • Contrôles ampli (gain, volume, tone)
  • Sélection de cabinet (IR)
  • Position du micro

DrumMachine

  • Machine à rythmes complète
  • Interface compacte intégrée au layout
  • Modal plein écran pour édition avancée
  • Synchronisation avec le contexte global

Utilitaires

  • pedalControlHelpers.ts : Analyse des types de contrôles (sliders, knobs, switch-selectors)
    • analyzeControlTypes() : Analyse les paramètres d'une pédale
    • analyzeControlTypesFromModel() : Analyse depuis le modèle de pédale
    • determineKnobSize() : Détermine la taille optimale des knobs
  • pedalboardSync.ts : Synchronisation unifiée entre moteur audio et WebSocket
    • syncEffectToAudio() : Synchronise avec le moteur audio
    • syncEffectToWebSocket() : Synchronise avec WebSocket
    • removeEffectFromAudio() : Supprime un effet
    • updateEffectParametersInAudio() : Met à jour les paramètres
    • setEffectEnabledInAudio() : Active/désactive un effet
  • profileLoader.ts : Chargement séquentiel de profils/presets avec gestion d'état
    • loadProfile() : Charge un profil depuis les données
    • loadProfileSequentially() : Charge un profil de manière séquentielle avec délais configurables

Voir OPTIMIZATION.md pour plus de détails sur les optimisations.

Monitoring

  • CPU usage
  • Latence
  • Vu-mètres (input/output)

Communication

Protocole WebSocket

Messages JSON bidirectionnels :

Client → Serveur:

  • start / stop
  • setParameter
  • addEffect / removeEffect
  • getStats

Serveur → Client:

  • status (running state)
  • stats (CPU, latence, peaks)
  • ack / error

Voir API WebSocket pour les détails complets du protocole.

⚡ Performance & Latence

Objectif : < 10 ms total

Répartition cible :

  • Audio callback : 2-3 ms
  • Pipeline DSP : 1-2 ms
  • Communication WebSocket : 1-2 ms
  • Rendu UI : < 1 ms
  • Buffer audio : 2-3 ms

Optimisations implémentées

  1. Buffer audio minimal : 64-128 samples
  2. Mode exclusif : WASAPI exclusive mode
  3. Pas d'allocation : Dans le callback audio
  4. Lock-free : Ring buffers pour communication
  5. Thread-safety : Mutex uniquement hors callback

Métriques actuelles

  • Latence moyenne : 3-5 ms
  • CPU usage : < 15% (avec 5-10 effets)
  • Stabilité : Testé 24h+ sans crash

🔗 Voir aussi