# WORKFLOW DE PRODUCCION REGGAETON

> Pipeline completo de produccion de reggaeton con AbletonMCP_AI, desde analisis de libreria hasta export final.

## Tabla de Contenidos

1. [Vista General del Pipeline](#vista-general-del-pipeline)
2. [Fase 1: Analisis de Libreria](#fase-1-analisis-de-libreria)
3. [Fase 2: Seleccion de Samples](#fase-2-seleccion-de-samples)
4. [Fase 3: Produccion Completa](#fase-3-produccion-completa)
5. [Fase 4: Verificacion de Calidad](#fase-4-verificacion-de-calidad)
6. [Fase 5: Export Final](#fase-5-export-final)
7. [Ejemplo Completo Paso a Paso](#ejemplo-completo-paso-a-paso)
8. [Variantes de Estilo](#variantes-de-estilo)
9. [Produccion en Lote](#produccion-en-lote)
10. [Produccion desde Referencia](#produccion-desde-referencia)

---

## Vista General del Pipeline

```
┌─────────────────────────────────────────────────────────────────┐
│                   PIPELINE DE PRODUCCION                        │
├─────────────┬─────────────┬─────────────┬─────────────┬─────────┤
│  FASE 1     │  FASE 2     │  FASE 3     │  FASE 4     │ FASE 5  │
│  Analisis   │  Seleccion  │  Produccion │  Calidad    │ Export  │
│             │             │             │             │         │
│ analyze_    │ get_recom-  │ produce_    │ full_quality│ render_ │
│ library     │ mended_     │ reggaeton   │ _check      │ stems   │
│             │ samples     │             │             │         │
│ get_user_   │ browse_     │ generate_   │ fix_quality │ render_ │
│ sound_      │ library     │ dembow_clip │ _issues     │ full_mix│
│ profile     │             │ generate_   │             │         │
│             │             │ bass_clip   │ validate_   │ create_ │
│             │             │ generate_   │ project     │ radio_  │
│             │             │ chords_clip │             │ edit    │
│             │             │ generate_   │             │         │
│             │             │ melody_clip │             │ create_ │
│             │             │             │             │ dj_edit │
├─────────────┴─────────────┴─────────────┴─────────────┴─────────┤
│  Duracion estimada: 15-45 minutos (dependiendo del hardware)    │
└─────────────────────────────────────────────────────────────────┘
```

---

## Fase 1: Analisis de Libreria

**Objetivo:** Analizar toda la biblioteca de samples para extraer caracteristicas sonoras.

### Paso 1.1: Verificar estado del sistema

```
Command: health_check()
Expected: {"score": "5/5", "status": "HEALTHY"}
```

Si el score es menor a 4/5, reiniciar el Remote Script en Ableton antes de continuar.

### Paso 1.2: Analizar la biblioteca

```
Command: analyze_library(force_reanalyze=False)
Expected: {"total_analyzed": N, "cache_file": "..."}
```

- `force_reanalyze=False`: Usa cache existente (mas rapido)
- `force_reanalyze=True`: Reanaliza todo (lento pero actualizado)

**Duracion:** 2-10 minutos dependiendo del numero de samples.

### Paso 1.3: Obtener estadisticas

```
Command: get_library_stats()
Expected: {
  "total_files_found": N,
  "files_by_role": {
    "kick": N,
    "snare": N,
    "hat_closed": N,
    "hat_open": N,
    "clap": N,
    "perc": N,
    "bass": N,
    "synths": N,
    "fx": N
  },
  "bpm_distribution": {...},
  "key_distribution": {...}
}
```

### Paso 1.4: Obtener perfil de sonido del usuario

```
Command: get_user_sound_profile()
Expected: {
  "preferred_bpm_range": "90-100",
  "preferred_key": "Am",
  "sonic_characteristics": ["warm", "punchy", "clean"],
  "sample_preferences": {...}
}
```

---

## Fase 2: Seleccion de Samples

**Objetivo:** Seleccionar los mejores samples para la produccion actual.

### Paso 2.1: Obtener samples recomendados

```
Command: get_recommended_samples(role="kick", count=5)
Expected: {
  "role": "kick",
  "samples": [
    {"path": "...", "name": "...", "bpm": 95, "key": "Am", "score": 0.92},
    ...
  ]
}
```

**Roles disponibles:**
- `kick` - Bombo
- `snare` - Caja
- `hat_closed` - Hi-hat cerrado
- `hat_open` - Hi-hat abierto
- `clap` - Palma
- `perc` - Percusion
- `bass` - Bajo
- `synths` - Sintetizadores
- `fx` - Efectos

### Paso 2.2: Navegar la biblioteca con filtros

```
Command: browse_library(role="kick", bpm_min=90, bpm_max=100, key="Am")
Expected: {
  "total": N,
  "samples": [
    {"path": "...", "bpm": 95, "key": "Am", "pack": "...", "role": "kick", ...},
    ...
  ]
}
```

### Paso 2.3: Comparar samples candidatos

```
Command: compare_two_samples(
  path1="C:\\ProgramData\\Ableton\\Live 12 Suite\\Resources\\MIDI Remote Scripts\\libreria\\reggaeton\\kick\\kick_01.wav",
  path2="C:\\ProgramData\\Ableton\\Live 12 Suite\\Resources\\MIDI Remote Scripts\\libreria\\reggaeton\\kick\\kick_02.wav"
)
Expected: {
  "similarity": 0.85,
  "sample1": {...},
  "sample2": {...}
}
```

### Paso 2.4: Seleccion completa para el genero

```
Command: select_samples_for_genre(genre="reggaeton", key="Am", bpm=95)
Expected: {
  "genre": "reggaeton",
  "key": "Am",
  "bpm": 95,
  "drums": {
    "kick": "kick_01.wav",
    "snare": "snare_03.wav",
    "clap": "clap_02.wav",
    "hat_closed": "hat_closed_01.wav",
    "hat_open": "hat_open_01.wav"
  },
  "bass": ["bass_01.wav", "bass_02.wav", ...],
  "synths": ["synth_01.wav", ...],
  "fx": ["fx_01.wav", ...]
}
```

---

## Fase 3: Produccion Completa

**Objetivo:** Generar la produccion completa con todos los elementos musicales.

### Opcion A: Pipeline Automatico (Recomendado)

```
Command: produce_reggaeton(
  bpm=95,
  key="Am",
  style="classic",
  structure="verse-chorus"
)
```

Este comando ejecuta automaticamente:
1. Creacion de pistas (drums, bass, chords, melody, fx)
2. Generacion de clips MIDI para cada elemento
3. Carga de samples seleccionados
4. Configuracion inicial de mezcla
5. Estructura de cancion completa

**Parametros de style:**
- `"classic"` - Reggaeton clasico estilo 2000s
- `"dembow"` - Dembow puro, enfocado en el ritmo
- `"perreo"` - Perreo intenso, bass pesado
- `"moombahton"` - Moombahton, mas melodico

**Parametros de structure:**
- `"verse-chorus"` - Estructura verso-estribillo
- `"full"` - Estructura completa (intro, verso, chorus, puente, outro)
- `"intro-drop"` - Intro larga con drop principal

### Opcion B: Construccion Manual Paso a Paso

#### Paso 3.1: Configurar proyecto

```
Command: set_tempo(tempo=95)
Command: set_time_signature(numerator=4, denominator=4)
Command: create_midi_track(index=-1)  → track 0: Drums
Command: create_midi_track(index=-1)  → track 1: Bass
Command: create_midi_track(index=-1)  → track 2: Chords
Command: create_midi_track(index=-1)  → track 3: Melody
Command: create_audio_track(index=-1) → track 4: Samples
```

#### Paso 3.2: Nombrar pistas

```
Command: set_track_name(track_index=0, name="Drums")
Command: set_track_name(track_index=1, name="Bass")
Command: set_track_name(track_index=2, name="Chords")
Command: set_track_name(track_index=3, name="Melody")
Command: set_track_name(track_index=4, name="Samples")
```

#### Paso 3.3: Generar patron dembow

```
Command: generate_dembow_clip(
  track_index=0,
  clip_index=0,
  bars=4,
  variation="standard"
)
```

**Variaciones disponibles:**
- `"standard"` - Patron dembow clasico (kick en 1, 1.5, 2, 2.5)
- `"minimal"` - Patron simplificado
- `"complex"` - Patron con notas adicionales y sincopas
- `"fill"` - Patron de fill para transiciones

#### Paso 3.4: Generar linea de bajo

```
Command: generate_bass_clip(
  track_index=1,
  clip_index=0,
  bars=4,
  root_notes=[36, 36, 36, 36],  // C1 para Am
  style="standard"
)
```

**Estilos de bass:**
- `"standard"` - Bajo ritmico clasico
- `"melodic"` - Bajo con movimiento melodico
- `"staccato"` - Bajo cortado y percusivo
- `"slides"` - Bajo con slides entre notas

#### Paso 3.5: Generar progresion de acordes

```
Command: generate_chords_clip(
  track_index=2,
  clip_index=0,
  bars=4,
  progression="i-v-vi-iv",
  key="Am"
)
```

**Progresiones disponibles:**
- `"i-v-vi-iv"` - Progresion clasica menor (Am-Em-F-Dm)
- `"i-iv-v"` - Blues menor (Am-Dm-Em)
- `"i-vi-iv-v"` - Progresion de 50s menor (Am-F-Dm-Em)
- `"i-v-i-v"` - Alternancia simple (Am-Em-Am-Em)
- `"i-iv-i-v"` - Variacion (Am-Dm-Am-Em)

#### Paso 3.6: Generar melodia

```
Command: generate_melody_clip(
  track_index=3,
  clip_index=0,
  bars=4,
  scale="minor",
  density="medium"
)
```

**Escalas disponibles:**
- `"minor"` - Escala menor natural
- `"major"` - Escala mayor
- `"harmonic_minor"` - Menor armonica
- `"pentatonic"` - Pentatonica menor

**Densidades:**
- `"sparse"` - Pocas notas, espacio entre ellas
- `"medium"` - Densidad balanceada
- `"dense"` - Muchas notas, linea ocupada

#### Paso 3.7: Humanizar pistas

```
Command: apply_human_feel(track_index=0, intensity=0.3)  // Drums: sutil
Command: apply_human_feel(track_index=3, intensity=0.5)  // Melody: moderado
```

#### Paso 3.8: Aniadir fills de percusion

```
Command: add_percussion_fills(
  track_index=0,
  positions=[7, 15, 23, 31]  // Fills cada 8 compases
)
```

### Opcion C: Generacion desde Configuracion JSON

```
Command: generate_track_from_config(track_config_json='{
  "type": "drums",
  "pattern": "dembow",
  "bars": 8,
  "name": "Drums Main"
}')
```

### Opcion D: Generacion de Secciones

```
Command: generate_section(section_config_json='{
  "type": "verse",
  "bars": 16,
  "elements": ["drums", "bass", "chords"]
}', start_bar=0)
```

---

## Fase 4: Verificacion de Calidad

**Objetivo:** Verificar y corregir problemas de calidad en la produccion.

### Paso 4.1: Verificacion completa

```
Command: full_quality_check()
Expected: {
  "status": "passed" | "issues_found",
  "checks": [
    {"name": "volume_levels", "passed": true},
    {"name": "frequency_balance", "passed": true},
    {"name": "stereo_image", "passed": false, "issue": "..."},
    {"name": "phase_coherence", "passed": true},
    {"name": "dynamic_range", "passed": true},
    ...
  ],
  "issues_count": N,
  "warnings_count": N
}
```

### Paso 4.2: Corregir problemas detectados

```
Command: fix_quality_issues(issues=[])  // [] = arreglar todos
Expected: {
  "issues_fixed": N,
  "details": [...]
}
```

### Paso 4.3: Validacion final

```
Command: validate_project()
Expected: {
  "is_valid": true,
  "issues": [],
  "warnings": [...],
  "passed_checks": [...],
  "score": N
}
```

### Paso 4.4: Obtener sugerencias

```
Command: suggest_improvements()
Expected: {
  "suggestions": [
    {"category": "mixing", "suggestion": "...", "priority": "high"},
    ...
  ],
  "priority": "medium",
  "estimated_impact": "medium"
}
```

---

## Fase 5: Export Final

**Objetivo:** Exportar la produccion en los formatos necesarios.

### Paso 5.1: Renderizar stems individuales

```
Command: render_stems(output_dir="C:\\Users\\ren\\Desktop\\stems\\mi_track\\")
Expected: {
  "output_dir": "C:\\Users\\ren\\Desktop\\stems\\mi_track\\",
  "stems_rendered": [
    "drums.wav",
    "bass.wav",
    "chords.wav",
    "melody.wav",
    "fx.wav"
  ],
  "format": "wav",
  "sample_rate": 44100,
  "bit_depth": 24
}
```

### Paso 5.2: Renderizar mix completo

```
Command: render_full_mix(output_path="C:\\Users\\ren\\Desktop\\mi_track_master.wav")
Expected: {
  "output_path": "C:\\Users\\ren\\Desktop\\mi_track_master.wav",
  "duration": "3:45",
  "format": "wav",
  "sample_rate": 44100,
  "bit_depth": 24
}
```

### Paso 5.3: Crear version instrumental

```
Command: render_instrumental(output_path="C:\\Users\\ren\\Desktop\\mi_track_instrumental.wav")
Expected: {
  "output_path": "C:\\Users\\ren\\Desktop\\mi_track_instrumental.wav",
  ...
}
```

### Paso 5.4: Crear version para radio

```
Command: create_radio_edit(output_path="C:\\Users\\ren\\Desktop\\mi_track_radio.wav")
Expected: {
  "output_path": "C:\\Users\\ren\\Desktop\\mi_track_radio.wav",
  "duration": "3:00",
  "changes": ["intro shortened", "chorus moved earlier"]
}
```

### Paso 5.5: Crear version para DJ

```
Command: create_dj_edit(output_path="C:\\Users\\ren\\Desktop\\mi_track_dj.wav")
Expected: {
  "output_path": "C:\\Users\\ren\\Desktop\\mi_track_dj.wav",
  "duration": "5:30",
  "changes": ["extended intro", "extended outro", "cue points added"]
}
```

### Paso 5.6: Export general del proyecto

```
Command: export_project(
  path="C:\\Users\\ren\\Desktop\\mi_track_export.wav",
  format="wav"
)
```

---

## Ejemplo Completo Paso a Paso

A continuacion se muestra una sesion completa de produccion con comandos reales:

```
# ===== FASE 1: VERIFICACION Y ANALISIS =====

# 1. Verificar estado del sistema
health_check()
→ {"score": "5/5", "status": "HEALTHY", ...}

# 2. Ver estado actual
get_session_info()
→ {"tempo": 120, "num_tracks": 0, "num_scenes": 0, ...}

# 3. Analizar libreria (si no se ha hecho antes)
analyze_library(force_reanalyze=False)
→ {"total_analyzed": 247, "cache_file": "..."}

# 4. Obtener perfil de sonido
get_user_sound_profile()
→ {"preferred_bpm_range": "90-100", "preferred_key": "Am", ...}

# ===== FASE 2: SELECCION DE SAMPLES =====

# 5. Obtener samples recomendados para kick
get_recommended_samples(role="kick", count=5)
→ {"role": "kick", "samples": [...]}

# 6. Navegar libreria para snare
browse_library(role="snare", bpm_min=90, bpm_max=100)
→ {"total": 12, "samples": [...]}

# 7. Seleccion completa
select_samples_for_genre(genre="reggaeton", key="Am", bpm=95)
→ {"genre": "reggaeton", "drums": {"kick": "...", ...}, ...}

# ===== FASE 3: PRODUCCION =====

# 8. Configurar tempo
set_tempo(tempo=95)
→ {"tempo": 95}

# 9. Pipeline completo de produccion
produce_reggaeton(bpm=95, key="Am", style="classic", structure="verse-chorus")
→ {
    "production_type": "reggaeton",
    "bpm": 95,
    "key": "Am",
    "style": "classic",
    "structure": "verse-chorus",
    "tracks_created": ["Drums", "Bass", "Chords", "Melody", "FX"],
    "clips_generated": [...],
    "duration_bars": 64
  }

# 10. Humanizar drums
apply_human_feel(track_index=0, intensity=0.3)
→ {"track_index": 0, "intensity": 0.3, "notes_affected": 64, ...}

# 11. Aniadir fills
add_percussion_fills(track_index=0, positions=[7, 15, 23, 31])
→ {"track_index": 0, "fills_added": 4, ...}

# ===== FASE 4: MEZCLA =====

# 12. Crear bus de drums
create_bus_track(bus_type="Drums")
→ {"bus_type": "Drums", "track_index": N}

# 13. Rutear drums al bus
route_track_to_bus(track_index=0, bus_name="Drums")
→ {"track_index": 0, "bus_name": "Drums"}

# 14. Configurar EQ en drums
configure_eq(track_index=0, preset="kick_boost")
→ {"track_index": 0, "preset": "kick_boost", ...}

# 15. Configurar compresor en bass
configure_compressor(track_index=1, threshold=-20.0, ratio=4.0)
→ {"track_index": 1, "threshold": -20.0, "ratio": 4.0, ...}

# 16. Sidechain: bass duckeado por kick
setup_sidechain(source_track=0, target_track=1, amount=0.5)
→ {"source_track": 0, "target_track": 1, "amount": 0.5}

# 17. Ganancia automatica
auto_gain_staging()
→ {"tracks_adjusted": N, "adjustments": [...], "headroom_ok": true}

# 18. Cadena de mastering
apply_master_chain(preset="reggaeton_streaming")
→ {"preset": "reggaeton_streaming", "devices_added": [...], ...}

# ===== FASE 5: VERIFICACION =====

# 19. Verificacion de calidad
full_quality_check()
→ {"status": "passed", "issues_count": 0, ...}

# 20. Validacion final
validate_project()
→ {"is_valid": true, "score": 92, ...}

# ===== FASE 6: EXPORT =====

# 21. Renderizar stems
render_stems(output_dir="C:\\Users\\ren\\Desktop\\stems\\reggaeton_95bpm_am\\")
→ {"stems_rendered": ["drums.wav", "bass.wav", ...], ...}

# 22. Renderizar mix final
render_full_mix(output_path="C:\\Users\\ren\\Desktop\\reggaeton_95bpm_am_master.wav")
→ {"output_path": "...", "duration": "3:45", ...}

# 23. Version radio
create_radio_edit(output_path="C:\\Users\\ren\\Desktop\\reggaeton_95bpm_am_radio.wav")
→ {"duration": "3:00", ...}

# 24. Version DJ
create_dj_edit(output_path="C:\\Users\\ren\\Desktop\\reggaeton_95bpm_am_dj.wav")
→ {"duration": "5:30", ...}
```

---

## Variantes de Estilo

### Reggaeton Clasico (2000s)
```
produce_reggaeton(bpm=95, key="Am", style="classic", structure="verse-chorus")
```
- BPM: 90-98
- Clave: Am, Dm, Em comunes
- Estructura: verso-estribillo
- Caracteristicas: dembow limpio, bass sub, acordes simples

### Dembow Puro
```
produce_reggaeton(bpm=100, key="Dm", style="dembow", structure="intro-drop")
```
- BPM: 98-105
- Enfocado en el ritmo dembow
- Bass pesado y presente
- Menos elementos melodicos

### Perreo Intenso
```
produce_reggaeton(bpm=92, key="Em", style="perreo", structure="full")
```
- BPM: 88-95 (mas lento, mas pesado)
- Bass distorsionado
- Acordes oscuros
- Estructura completa

### Moombahton
```
produce_reggaeton(bpm=108, key="Gm", style="moombahton", structure="verse-chorus")
```
- BPM: 105-112
- Mas melodico y harmonico
- Influencia de house music
- Acordes mas complejos

---

## Produccion en Lote

Para producir multiples tracks con variaciones automaticas:

```
Command: batch_produce(count=3, style="classic", bpm_range="90-100")
Expected: {
  "batch_size": 3,
  "style": "classic",
  "bpm_range": "90-100",
  "productions": [
    {"index": 1, "bpm": 93, "key": "Am", "tracks": 5},
    {"index": 2, "bpm": 97, "key": "Dm", "tracks": 5},
    {"index": 3, "bpm": 95, "key": "Em", "tracks": 5}
  ]
}
```

**Parametros:**
- `count`: Numero de canciones (1-10)
- `style`: Estilo de produccion
- `bpm_range`: Rango de BPM en formato "min-max"

---

## Produccion desde Referencia

Para producir basado en una pista de referencia existente:

### Paso 1: Verificar que el archivo de referencia existe
```
# Asegurarse de que el archivo existe en la ruta especificada
```

### Paso 2: Generar desde referencia
```
Command: produce_from_reference(
  audio_path="C:\\Users\\ren\\Desktop\\reggaeton_referencia.mp3"
)
Expected: {
  "reference": "C:\\Users\\ren\\Desktop\\reggaeton_referencia.mp3",
  "production_type": "from_reference",
  "matched_samples": [...],
  "similarity_score": 0.85,
  "tracks_created": [...]
}
```

### Paso 3: Generar desde referencia (alternativa con pipeline completo)
```
Command: generate_from_reference(
  reference_audio_path="C:\\Users\\ren\\Desktop\\reggaeton_referencia.mp3"
)
Expected: {
  "reference": "...",
  "tracks": [...],
  "matched_samples": [...],
  "similarity_scores": {...}
}
```

El sistema analiza la referencia, encuentra samples similares en la libreria, y genera una produccion que coincide con las caracteristicas sonicAs de la referencia.

---

## Consejos de Produccion

1. **Siempre empezar con `health_check()`** - Si el sistema no esta sano, nada funcionara correctamente.

2. **Analizar la libreria una sola vez** - Los resultados se cachean. Solo usar `force_reanalyze=True` si se aniadieron samples nuevos.

3. **Usar `produce_reggaeton()` para produccion rapida** - Es el pipeline completo automatico.

4. **Humanizar despues de generar** - Las notas MIDI generadas son perfectas; aplicar `apply_human_feel()` con intensidad 0.2-0.5 para naturalidad.

5. **Sidechain es esencial en reggaeton** - El bass debe duckear con el kick para evitar conflicto de frecuencias graves.

6. **Verificar calidad antes de exportar** - `full_quality_check()` detecta problemas que pueden arruinar el mix final.

7. **Exportar stems para mezcla externa** - Permite ajustes finos en un DAW externo o con un ingeniero de mezcla.
