Schémas historiques (options soundboard, rack) + MixMixer v0.1 (solution retenue).
┌─────────────────────────────────────────────────────────────────┐
│ MICRO FIFINE (physique) │
└───────────────────────────────┬─────────────────────────────────┘
│
┌───────────▼───────────┐
│ UniteFx (Soundpad) │ ← installé, app arrêtée
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ Equalizer APO │
│ 8× VST (gate→lim) │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ Discord / OBS / jeux │
└───────────────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ VB-Cable │ │ Behringer │ │ fifine SC3 (HP) │
│ (isolé) │ │ (offline) │ │ pas d'E-APO │
└──────────────┘ └──────────────┘ └──────────────────────┘
- Pas de mixeur → impossible de mixer micro + VB-Cable sans outil additionnel.
- Soundpad peut injecter sans VoiceMeeter, mais partage le pipeline avec E-APO.
- Behringer entrée ligne = config prête pour injection « jack » quand reconnecté.
- Dupliquer le micro vers 2 sorties.
- Injecter soundboard dans le signal micro (Discord, jeux, OBS).
- Latence minimale sur la soundboard.
Micro → UniteFx (Soundpad injecte ici) → E-APO VST → apps
| Pour | Contre |
|---|---|
| Déjà installé | Demo Steam (limites) |
| Pas de mixeur requis | Latence = UniteFx + 8 VST |
| Injection native micro | Pas de duplication sortie |
Action minimale : lancer Soundpad, tester latence, éventuellement alléger VST.
Micro fifine ──────────────────────────► mix ? ──► apps
Soundboard → Behringer Line In → E-APO (Harmonic+LoudMax) ──┘
| Pour | Contre |
|---|---|
Config déjà partielle dans configAPO.txt |
Behringer offline ; mix micro+ligne non trivial dans E-APO seul |
| Entrée jack physique | Equalizer APO ne mixe pas 2 captures |
Limite : E-APO traite un device par config — le mix micro + ligne nécessite VoiceMeeter ou mix hardware Behringer.
Micro ──► VM Input 1 ──┐
Soundpad / app ──► VM Input 2 ──┤
▼
VM Mix (A1 + B1)
│
┌─────────────────┴─────────────────┐
▼ ▼
Casque (A1) VM Output = micro virtuel
│ │
│ E-APO (optionnel, chaîne VST)
│ │
└──────────────► Discord / OBS ◄────┘
| Pour | Contre |
|---|---|
| Mix + duplication native | Installation + courbe d'apprentissage |
| VB-Cable déjà présent | Latence supplémentaire (~10–20 ms) |
| E-APO en aval du mix | Reconfig devices Windows |
Envisager seulement si A–C échouent. Voir agent.md section dev.
Objectif : envoyer une copie du signal micro vers CABLE Input pour qu'une autre app lise CABLE Output.
Micro fifine ──► [E-APO 8 VST] ──► Discord / jeux (micro Windows)
│
└──► copie ──► CABLE Input ──► CABLE Output ──► OBS / enregistreur / 2e app
| Pour | Contre |
|---|---|
| 2 apps consomment le même flux (ex. Discord + OBS) | E-APO ne duplique pas — il faut un routeur |
| VB-Cable déjà installé | Sans VoiceMeeter ou app WASAPI custom : pas trivial |
| Pas de dev VST | Ne injecte pas dans le micro — branche parallèle seulement |
Implémentations possibles :
| Méthode | Latence | Dev |
|---|---|---|
| VoiceMeeter (micro → B1 = CABLE) | ~10–20 ms | Config |
| App WASAPI loopback → CABLE Input | Contrôlable | Moyen |
| Windows « Écouter ce périphérique » | Élevée | ❌ déconseillé |
Limite : si la copie part avant E-APO, OBS n'entend pas la chaîne VST. Si après, il faut capturer le device micro déjà traité et le réinjecter vers CABLE — boucle ou tap WASAPI.
Objectif : garder un seul micro Windows ; mixer en dernier plugin ce qui arrive d'une 2e source.
Source A (voix) Micro fifine ──► Gate → EQ → … → [InjectMix VST] ──► apps
Source B (inject) VB-Cable Output ──► app compagnon (WASAPI) ──► ring buffer ──► ↑
ou 2e micro ──► app compagnon ──► ring buffer ──► ↑
| Pour | Contre |
|---|---|
| Soundboard sèche en fin de chaîne (gate ne coupe pas les sfx) | Dev VST + app compagnon |
| Un seul device micro pour Discord | Le VST ne lit pas VB-Cable directement — app intermédiaire requise |
| Remplace Soundpad UniteFx (1 APO en moins) | Latence = capture 2e source + ring buffer |
Flux VB-Cable typique :
Soundboard app ──► CABLE Input (playback)
│
CABLE Output (capture)
│
App compagnon (WASAPI capture, ~128–512 buffer)
│
Ring buffer (shared memory)
│
InjectMix VST (dernier dans config.txt)
Flux 2e micro : idem, l'app compagnon capture le 2e micro au lieu de CABLE Output.
Config E-APO (extrait) :
Device: Microphone fifine Microphone {c63663e8-...}
VSTPlugin: Library "Sonalksis SV-719 Stereo Gate (64 bit).dll" ...
# … chaîne voix existante …
VSTPlugin: Library "InjectMix-x64.dll" InjectGain 0.85| Critère | Option 1 — Dupliquer → VB-Cable | Option 2 — VST fin de chaîne |
|---|---|---|
| Besoin principal injection Discord | ❌ indirect | ✅ direct |
| Dupliquer vers 2e app (OBS) | ✅ naturel | |
| Dev custom | Optionnel (WASAPI router) | Requis (VST + app) |
| VoiceMeeter suffit ? | Oui, sans dev | Non (mix dans E-APO) |
| Soundboard via VB-Cable | Branche parallèle | ✅ source B idéale |
| Latence soundboard | Dépend du routeur | Faible si WAV pré-décodés + buffer court |
Recommandation :
- Injection soundboard sans délai → Option 2 (alignée objectif principal).
- Dupliquer le micro traité vers OBS en parallèle → Option 1 (VoiceMeeter ou tap WASAPI).
- Les deux sont combinables : Option 2 pour Discord + Option 1 si OBS doit aussi enregistrer le mix.
Question : peut-on avoir un système de rack pour envoyer n'importe quelle source vers n'importe quelle sortie ?
Réponse : oui. C'est la définition d'un mixeur matriciel logiciel. Trois niveaux possibles :
VoiceMeeter Banana (3 entrées / 3 sorties virtuelles) ou Potato (5 / 5) = déjà un rack :
┌─────────────────────────────────────────────────────────────┐
│ VOICEMEETER POTATO (rack) │
├──────────────┬──────────────┬──────────────┬────────────────┤
│ Strip 1 │ Strip 2 │ Strip 3 │ Virtual I/O │
│ Micro fifine│ VB-Cable │ Behringer │ VAIO / AUX │
│ Hardware In1│ (soundboard)│ ligne │ (apps) │
├──────────────┴──────────────┴──────────────┴────────────────┤
│ Bus A1 → Casque SC3 Bus A2 → HP Behringer │
│ Bus B1 → VB-Cable Out (= micro virtuel Discord) │
│ Bus B2 → OBS / enregistrement │
│ Niveaux · Pan · Mute · Solo · EQ intégré (basique) │
└─────────────────────────────────────────────────────────────┘
│ │
▼ ▼
Equalizer APO (optionnel) Apps Windows
sur le bus B1 ou strip 1 (micro = VM Output)
| Route exemple | Réglage VM |
|---|---|
| Micro → Discord + casque | Strip1 → B1 + A1 |
| Soundboard → Discord seulement | Strip2 → B1 (pas A1 si tu ne veux pas l'entendre) |
| Micro + sfx → OBS | Strip1+2 → B2 |
| Dupliquer micro traité E-APO | E-APO sur strip1 ou sur B1 en aval |
Où mettre Equalizer APO :
- Sur le micro physique (actuel) — tout ce qui passe strip1 est traité.
- Sur VoiceMeeter Output (B1) — seul le mix envoyé à Discord est traité ; soundboard peut bypass la chaîne voix.
Latence : ~10–25 ms. Suffisant pour soundboard si buffers bas.
REAPER agit comme rack illimité : pistes, sends, returns, VST par piste, ReaRoute vers devices Windows.
| Pour | Contre |
|---|---|
| Rack visuel complet, VST illimités | Lourd, orienté DAW |
| Routage arbitraire | Latence + complexité |
| Tu connais déjà l'écosystème VST | Overkill pour « parler sur Discord » |
Un FlowAudio Rack — app dédiée avec matrice source × destination :
┌────────────────────────────────────────────────────────────┐
│ SOURCES (inputs) │ MATRICE │ DESTINATIONS │
├──────────────────────────┼─────────────────┼───────────────┤
│ · Micro fifine │ [x] gain/mute │ · VM / VB-Cable│
│ · VB-Cable Output │ par cellule │ · Casque SC3 │
│ · Behringer line │ │ · OBS bus │
│ · Soundboard (WAV) │ VST insert │ · « Micro » virt│
│ · App loopback (WASAPI) │ par strip │ │
└──────────────────────────┴─────────────────┴───────────────┘
Stack possible :
- Rust :
cpal+rubato+ egui (UI matrice) - C++/JUCE : AudioDeviceManager + matrix mixer + VST host optionnel
- IPC : pas obligatoire si tout est dans une seule app
Difficultés Windows :
- Capturer une app précise (Discord, jeu) → WASAPI session capture ou loopback device
- Plusieurs devices simultanés → sync horloge (drift) entre interfaces
- Low latency → buffers 128–512, même sample rate partout (48 kHz)
Scope MVP rack custom :
- 4 entrées × 4 sorties, gains + mute
- 1 bus master « micro virtuel » (VB-Cable Output)
- Soundboard intégrée (hotkeys WAV) — remplace Soundpad + Option 2 VST
- Option : lien avec E-APO (traitement sur un bus, pas sur tout)
| Solution | Router tout | Dev | Latence | E-APO compatible |
|---|---|---|---|---|
| VoiceMeeter Potato | ✅ quasi tout | ❌ config | ~15 ms | ✅ par device/bus |
| REAPER + ReaRoute | ✅ tout | ❌ config | Variable | ✅ inserts VST natifs |
| Rack custom | ✅ sur mesure | ⭐⭐⭐ mois | Optimisable | ✅ si 1 bus → device E-APO |
| Option 2 seule (VST inject) | ❌ 1 mix seulement | ⭐⭐ semaines | Basse | ✅ dans la chaîne |
| Ton besoin | Meilleure piste |
|---|---|
| « Je veux router tout où je veux » | VoiceMeeter Potato (E1) — immédiat |
| « Je veux uniquement injecter sfx en fin de chaîne E-APO » | Option 2 (VST InjectMix) |
| « Je veux mon rack avec UI perso + Stream Deck » | Rack custom (E3) — long terme |
| « Studio / enregistrement complexe » | REAPER (E2) |
Architecture hybride recommandée (le plus pragmatique pour toi) :
[Rack VoiceMeeter]
In1 = Micro fifine
In2 = VB-Cable (soundboard)
In3 = Behringer ligne (quand branché)
B1 = sortie « micro Discord » → Equalizer APO (chaîne VST actuelle) → apps
A1 = casque SC3 (monitor)
B2 = OBS
→ Tu obtiens rack + chaîne E-APO + soundboard + duplication sans dev VST.
→ Option 2 (VST inject) reste utile seulement si tu refuses VoiceMeeter et veux tout dans E-APO.
App Rust tray (mix-mixer/) — v0.1 baseline : routage micro post-E-APO → VB-Cable.
┌─────────────────────────────────────────────────────────────────┐
│ MICRO FIFINE (physique) │
└───────────────────────────────┬─────────────────────────────────┘
│
┌───────────▼───────────┐
│ Equalizer APO │
│ 8× VST (gate→lim) │
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ MixMixer │
│ capture → CABLE In │
└───────────┬───────────┘
│
┌─────────────────┴─────────────────┐
▼ ▼
CABLE Input → CABLE Output fifine SC3 (monitor opt.)
(Discord / GTA / OBS)
Apps / soundboard / navigateur → CABLE Input (mix Windows, hors MixMixer)
| Pour | Contre |
|---|---|
| Un exe tray, latence ~5 ms (buffer 128) | Pas de mix sfx interne (v0.1) |
| Voix post-E-APO vers micro virtuel | Pas de matrice N×M |
| Reconnexion auto + métriques UI | Monitor = stream séparé |
| Pas de VoiceMeeter | Soundboard = apps → CABLE Input (mix OS) |
Setup : mix-mixer/README.md, dev-mix-mixer.md
Git baseline : commit 8c50c7d (2026-07-14)
| Besoin | Option privilégiée |
|---|---|
| Routage micro → Discord (actuel) | MixMixer v0.1 — DEC-005 / DEC-006 |
| Soundboard mixée dans l'app | Évolution future ou apps → CABLE Input |
| Dupliquer micro + mix complexe | C / E1 — VoiceMeeter Potato |
| Router tous les flux (rack) | E1 — VoiceMeeter Potato, ou E3 dev custom |
| Contrôle latence micro | MixMixer (WASAPI direct, buffer 128) |
-
buffer_frames128 (ou 256/512 si crackling) - 48 kHz identique partout (fifine, CABLE, SC3)
- Discord micro = CABLE Output (pas fifine)
- Réduire chaîne VST si retard audible (Limiter6 latency)
- Éviter « Écouter ce périphérique » Windows