Skip to content

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 tareas
  • 05_10_00_cell_architecture/ - Fundamentos de células
  • 05_10_01_synthesis_cells/ - Células de síntesis
  • 05_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: ⭐⭐⭐⭐⭐