05_10_CELLS_L2 - Moléculas Funcionales de Procesamiento DSP¶
🧬 Visión General¶
El subsistema CELLS_L2 representa el nivel molecular de la arquitectura DSP: donde átomos individuales L1 se combinan en unidades funcionales complejas que resuelven necesidades musicales específicas.
Metáfora biológica: Si los átomos L1 son aminoácidos, las células L2 son proteínas. Un oscilador solo genera onda. Un filtro solo modifica espectro. Pero oscilador + filtro + envolventes + VCA = synth voice completa.
🎯 Propósito¶
Las células L2 son productos funcionales completos, no componentes: - Sintetizadores completos (subtractive, FM, granular, physical modeling) - Procesadores de efectos (reverbs, delays complejos, multi-band processors) - Sistemas de modulación (modulation matrices, macro controls, morphing) - Voice management para instrumentos polifónicos
Sin células L2: Cada producto sería una maraña de 200+ conexiones átomo-a-átomo. Imposible de mantener.
Con células L2: Declaras "SubtractiveSynth" y obtienes arquitectura completa, probada, optimizada.
🏗️ Arquitectura¶
CELLS L2 = Composición inteligente de ATOMS L1
├── Synthesis Cells (generadores de sonido)
├── Effect Cells (procesadores de audio)
├── Modulation Cells (routing de control)
├── Voice Management (polifonía)
└── Routing Systems (flujo interno)
Características clave: - Encapsulación completa: Estado interno coordinado - Parameter aggregation: 100s de params → 16 macros usables - Performance modes: Eco/Normal/Pristine con adaptación CPU - Preset morphing: Interpolación entre estados - Thread-safe: Lock-free cuando posible
📊 Impacto¶
| Métrica | Sin Células L2 | Con Células L2 | Mejora |
|---|---|---|---|
| Desarrollo synth | 3-4 semanas | 2-3 días | 10x |
| Líneas de código | 2000+ | 200 | 90% menos |
| CPU overhead | Variable | <5%/voz | Optimizado |
| Bugs de integración | Alto | Bajo | 80% menos |
| Tiempo mantenimiento | 40h/mes | 5h/mes | 87% menos |
🔑 Componentes Principales¶
1. Cell Architecture Base¶
Interface común ICellL2 que todas las células implementan:
- Lifecycle management (prepare/reset/release)
- Parameter mapping (cell → atoms)
- Resource pooling (buffers, modulación)
2. Synthesis Cells¶
- SubtractiveSynthCell: Arquitectura clásica (osc→filter→vca)
- FMSynthCell: 6 operadores, 32 algoritmos DX7-style
- GranularSynthCell: 1-1000 grains/sec, spatial distribution
- PhysicalModelCell: Karplus-Strong extendido
3. Effect Cells¶
- ReverbCell: Early + diffusion + late + damping (3 quality modes)
- MultiBandDynamicsCell: 3-5 bandas, comp/exp/sat per-band
- DelayNetworkCell: 1-8 taps, feedback, modulation, host sync
4. Modulation Cells¶
- ModulationMatrixCell: 64 slots, transformers, MIDI learn
- MacroControlCell: 8 macros, morphing A/B/C/D
5. Voice Management¶
- PolyphonicVoiceManager: 1-128 voces, 5 allocation modes
- Voice stealing con priority system
- Unison mode (1-8 voces/nota)
- CPU-adaptive quality scaling
🚀 Casos de Uso¶
Caso 1: Crear un Synth Lead¶
// Sin células: 200+ líneas conectando átomos
auto osc1 = createOscillator(...);
auto osc2 = createOscillator(...);
auto mixer = createMixer(...);
auto filter = createFilter(...);
// ... 50 líneas más ...
// Con células: 5 líneas
auto leadSynth = CellFactory::create<SubtractiveSynthCell>();
leadSynth->loadPreset("Vintage Lead");
leadSynth->setParameter(ParamID::Cutoff, 0.7f);
leadSynth->prepare(sampleRate, blockSize);
// ¡Listo para usar!
Caso 2: Morphing entre Presets¶
auto presetA = loadPreset("Bright Pad");
auto presetB = loadPreset("Dark Bass");
auto morpher = PresetMorpher(synth);
// Morph suave entre presets
for (float pos = 0.0f; pos <= 1.0f; pos += 0.01f) {
morpher.morph(presetA, presetB, pos);
processAudio();
}
Caso 3: Polifonía Automática¶
auto voiceManager = PolyphonicVoiceManager(leadSynth, 16);
voiceManager.setAllocationMode(AllocationMode::RoundRobin);
voiceManager.enableUnison(4, 0.1f); // 4 voces, 10% detune
// Voice manager se encarga de todo
voiceManager.noteOn(60, 100); // Allocates voice
voiceManager.noteOn(64, 100); // Allocates another
// Auto stealing cuando se acaban voces
📈 Roadmap¶
Fase 1: Células Fundamentales (3 meses)¶
- 10 células básicas
- Voice management simple
- Routing básico
- Performance modes
Fase 2: Células Profesionales (4 meses)¶
- 30 células completas
- Modulation matrix avanzada
- Resource pooling optimizado
- Preset morphing
Fase 3: Células Inteligentes (5 meses)¶
- 50+ células especializadas
- ML-driven parameter reduction
- Auto-optimization
- Adaptive learning
🔗 Dependencias¶
Requiere: - 00_CATALOG_REGISTRY (registro) - 07_ATOMS_L1 (bloques de construcción) - 08_COMPONENT_PATTERNS (recetas) - 09_FACTORY_SYSTEM (generación) - 11_GRAPH_SYSTEM (conexiones)
Alimenta a: - 13_ENGINES_L3 (productos completos) - 14_PRESET_SYSTEM (persistencia) - 15_REFERENCE_IMPLEMENTATIONS (ejemplos)
📚 Documentación¶
PLAN_DE_DESARROLLO.md- Plan detallado con 14 tareas05_10_00_cell_architecture/- Fundamentos de células05_10_01_synthesis_cells/- Células de síntesis05_10_documentation/- Documentación completa
⚡ Quick Start¶
#include "cells/SubtractiveSynthCell.h"
// Crear célula
auto synth = std::make_unique<SubtractiveSynthCell>();
// Preparar
synth->prepare(44100.0, 512);
// Configurar
synth->setParameter(ParamID::Cutoff, 0.8f);
synth->setParameter(ParamID::Resonance, 0.5f);
// Procesar
MidiBuffer midi;
midi.addEvent(MidiMessage::noteOn(1, 60, 100), 0);
synth->processMidi(midi);
synth->processBlock(audioBuffer);
🎯 Métricas de Calidad¶
| Métrica | Target |
|---|---|
| Test coverage | >90% |
| CPU per voice | <5% |
| Voice capacity | 128+ |
| Parameter reduction | 100s → 16 |
| Real-time safety | Zero allocations |
| Preset compatibility | 100% |
🤝 Contribuir¶
Ver PLAN_DE_DESARROLLO.md para tareas específicas y guidelines.
Key principles: - Modularidad: Max 10 átomos por célula - Thread-safety: Lock-free cuando posible - Real-time safe: Zero allocations en audio thread - Testabilidad: >90% coverage - Documentación: Inline + API + examples
📝 Licencia¶
© 2025 AudioLab - Todos los derechos reservados
Última actualización: 2025-10-14 Versión: 1.0.0 Criticidad: ⭐⭐⭐⭐⭐