Documentation complète du protocole de communication WebSocket entre le frontend et le native helper.
ws://localhost:8765
Configurable via variable d'environnement VITE_WEBSOCKET_URL.
- Le frontend se connecte automatiquement au démarrage
- Le native helper accepte la connexion
- Le frontend envoie automatiquement
getStatepour synchroniser l'état initial - Le serveur répond avec un message
statecontenant l'état complet
Récupère l'état complet du serveur (effets, ampli, paramètres).
{
"type": "getState"
}Réponse : Message state (voir Messages Serveur → Client)
Ajoute un effet à la chaîne.
{
"type": "addEffect",
"effectType": "distortion",
"pedalId": "boss-ds1",
"position": 0,
"effectId": "effect-1234567890"
}Champs :
effectType: Type d'effet (distortion,delay,reverb, etc.)pedalId: ID de la pédale dans la bibliothèqueposition: Position dans la chaîne (0 = début)effectId: ID unique de l'effet (généré par le frontend)
Réponse : Message ack avec messageId
Supprime un effet de la chaîne.
{
"type": "removeEffect",
"effectId": "effect-1234567890"
}Champs :
effectId: ID de l'effet à supprimer
Réponse : Message ack
Modifie un paramètre d'un effet.
{
"type": "setParameter",
"effectId": "effect-1234567890",
"parameter": "gain",
"value": 75.5
}Champs :
effectId: ID de l'effetparameter: Nom du paramètrevalue: Nouvelle valeur (nombre)
Réponse : Message ack
Active ou désactive un effet (bypass).
{
"type": "toggleBypass",
"effectId": "effect-1234567890",
"bypassed": true
}Champs :
effectId: ID de l'effetbypassed:truepour bypasser,falsepour activer
Réponse : Message ack
Déplace un effet dans la chaîne.
{
"type": "moveEffect",
"effectId": "effect-1234567890",
"fromPosition": 0,
"toPosition": 2
}Champs :
effectId: ID de l'effetfromPosition: Position actuelletoPosition: Nouvelle position
Réponse : Message ack
Supprime tous les effets de la chaîne.
{
"type": "clearEffects"
}Réponse : Message ack
Sélectionne un amplificateur.
{
"type": "setAmplifier",
"amplifierId": "fender-65-twin"
}Champs :
amplifierId: ID de l'amplificateur dans la bibliothèque
Réponse : Message ack
Modifie un paramètre d'amplificateur.
{
"type": "setAmplifierParameter",
"amplifierId": "fender-65-twin",
"parameter": "volume",
"value": 7.5
}Champs :
amplifierId: ID de l'amplificateurparameter: Nom du paramètre (volume,gain,bass,middle,treble, etc.)value: Nouvelle valeur
Réponse : Message ack
Allume ou éteint l'amplificateur.
{
"type": "setAmplifierPower",
"amplifierId": "fender-65-twin",
"powered": true
}Champs :
amplifierId: ID de l'amplificateurpowered:truepour allumer,falsepour éteindre
Réponse : Message ack
Démarre ou arrête le traitement audio.
{
"type": "start"
}{
"type": "stop"
}Réponse : Message ack + Message status avec running: true/false
Demande les statistiques actuelles.
{
"type": "getStats"
}Réponse : Message stats (voir Messages Serveur → Client)
Confirmation qu'un message a été reçu et traité.
{
"type": "ack",
"messageId": "msg-1234567890-1234567890"
}Champs :
messageId: ID du message original (si présent)
Erreur lors du traitement d'un message.
{
"type": "error",
"message": "Effet non trouvé",
"messageId": "msg-1234567890-1234567890"
}Champs :
message: Description de l'erreurmessageId: ID du message qui a causé l'erreur (si présent)
État du serveur (running/stopped).
{
"type": "status",
"running": true
}Champs :
running:truesi le traitement audio est actif,falsesinon
Envoi : Automatique lors des changements d'état
Statistiques de performance.
{
"type": "stats",
"cpu": 15.5,
"latency": 3.2,
"peakInput": -12.5,
"peakOutput": -6.3
}Champs :
cpu: Utilisation CPU en pourcentagelatency: Latence totale en millisecondespeakInput: Pic d'entrée en dBpeakOutput: Pic de sortie en dB
Envoi : Périodique (toutes les 100ms environ)
État complet du serveur (réponse à getState).
{
"type": "state",
"amplifierId": "fender-65-twin",
"amplifierParameters": {
"volume": 7.5,
"gain": 5.0,
"bass": 5.0,
"middle": 5.0,
"treble": 5.0
},
"effects": [
{
"id": "effect-1234567890",
"type": "distortion",
"pedalId": "boss-ds1",
"bypassed": false,
"parameters": {
"distortion": 50,
"tone": 50,
"level": 50
},
"position": 0
}
]
}Champs :
amplifierId: ID de l'amplificateur actuel (ounull)amplifierParameters: Paramètres de l'amplificateureffects: Liste des effets dans l'ordre
Envoi : En réponse à getState ou après reconnexion
Pour les messages critiques, le frontend peut demander un acknowledgment :
await ws.send({
type: 'addEffect',
effectType: 'distortion',
pedalId: 'boss-ds1',
position: 0,
effectId: 'effect-123'
}, true) // requireAck = trueLe serveur répondra avec un message ack contenant le messageId.
Si aucun ack n'est reçu dans les 5 secondes, une erreur est levée.
Certains messages n'ont pas besoin d'acknowledgment :
getState: La réponsestatesert de confirmationgetStats: La réponsestatssert de confirmation
En cas d'erreur de connexion, le frontend :
- Tente de se reconnecter automatiquement (backoff exponentiel)
- Met en queue les messages pendant la déconnexion
- Envoie automatiquement
getStateaprès reconnexion
Si le serveur renvoie un message error :
- Le frontend log l'erreur dans la console
- La promesse est rejetée (si acknowledgment requis)
- L'utilisateur peut être notifié (à implémenter)
// 1. Ajouter l'effet
await ws.send({
type: 'addEffect',
effectType: 'distortion',
pedalId: 'boss-ds1',
position: 0,
effectId: 'effect-123'
}, true)
// 2. Modifier un paramètre
await ws.send({
type: 'setParameter',
effectId: 'effect-123',
parameter: 'distortion',
value: 75
}, true)// Le frontend envoie automatiquement au démarrage
ws.send({ type: 'getState' }, false)
// Le serveur répond avec l'état complet
// Le frontend reconstruit l'UI depuis cet état- Architecture - Vue d'ensemble de l'architecture
- Composants - Documentation des composants React
- Protocole détaillé - Spécification technique complète