# AbletonMCP-AI API Documentation

## MCP Tools Disponibles

### Generación

#### `generate_song(genre, bpm, key, style, structure)`
Genera un track completo con todas las capas de audio.

**Parámetros:**
- `genre` (str): Género musical (techno, house, trance, etc)
- `bpm` (float): BPM deseado (0 = auto)
- `key` (str): Tonalidad (ej: "F#m", "Am")
- `style` (str): Sub-estilo (industrial, deep, etc)
- `structure` (str): Tipo de estructura (standard, minimal, extended)

**Ejemplo:**
```python
result = generate_song("techno", 138, "F#m", "industrial", "standard")
```

#### `generate_with_human_feel(genre, bpm, key, humanize, groove_style)`
Genera un track con humanización aplicada.

**Parámetros adicionales:**
- `humanize` (bool): Aplicar variaciones de timing/velocity
- `groove_style` (str): Tipo de groove (straight, shuffle, triplet, latin)

**Ejemplo:**
```python
result = generate_with_human_feel("house", 124, "Am", True, "shuffle")
```

### Palette y Samples

#### `set_palette_lock(drums, bass, music)`
Fuerza carpetas ancla específicas para la generación.

**Parámetros:**
- `drums` (str): Path a carpeta de drums
- `bass` (str): Path a carpeta de bass
- `music` (str): Path a carpeta de music/synths

**Ejemplo:**
```python
set_palette_lock(
    drums="librerias/Kick Loops",
    bass="librerias/Bass Loops",
    music="librerias/Synth Loops"
)
```

#### `get_coverage_wheel_report()`
Retorna heatmap de uso de carpetas de samples.

**Retorna:**
- Lista de carpetas ordenadas por uso
- Heat levels (FROZEN, COOL, WARM, HOT)
- Sugerencias de carpetas bajo-usadas

#### `get_sample_fatigue_report()`
Retorna reporte de fatiga de samples.

**Retorna:**
- Top samples más usados
- Factor de fatiga por rol
- Thresholds de penalización

#### `reset_sample_fatigue(role)`
Resetea la fatiga de samples.

**Parámetros:**
- `role` (str, opcional): Si especificado, solo resetea ese rol

### Validación

#### `validate_set(check_routing, check_gain, check_clips)`
Valida el set completo de Ableton.

**Checks:**
- Routing de tracks
- Niveles de gain staging
- Clips vacíos
- Conflictos armónicos

#### `validate_audio_layers()`
Valida específicamente los tracks de audio.

#### `get_generation_manifest()`
Retorna el manifest de la última generación.

### Memory y Diversidad

#### `reset_diversity_memory()`
Limpia la memoria de diversidad entre generaciones.

#### `get_sample_coverage_report()`
Retorna reporte de cobertura de samples usados.

## Engines de Procesamiento

### HumanFeelEngine

Aplica humanización a patrones MIDI.

```python
from human_feel import HumanFeelEngine

engine = HumanFeelEngine(seed=42)
notes = [{'pitch': 60, 'start': 0.0, 'velocity': 100}]

# Aplicar timing variation
result = engine.apply_timing_variation(notes, amount_ms=5.0)

# Aplicar velocity humanize
result = engine.apply_velocity_humanize(result, variance=0.05)

# Aplicar groove
result = engine.apply_groove(result, style='shuffle', amount=0.5)

# Aplicar dinámica por sección
result = engine.apply_section_dynamics(result, section='drop')
```

### DJArrangementEngine

Genera estructuras DJ-friendly.

```python
from audio_arrangement import DJArrangementEngine

engine = DJArrangementEngine(seed=42)

# Generar estructura
structure = engine.generate_structure("standard")

# Verificar si es DJ-friendly
is_friendly = engine.is_dj_friendly(structure)

# Generar curva de energía
automation = engine.generate_energy_automation(structure)
```

### SoundscapeEngine

Gestiona ambientes y texturas.

```python
from audio_soundscape import SoundscapeEngine

engine = SoundscapeEngine()

# Detectar gaps
gaps = engine.detect_ambience_gaps(timeline)

# Llenar con atmos
atmos = engine.fill_with_atmos(gaps, genre="techno", key="F#m")
```

### MasterChain

Configura cadena de mastering.

```python
from audio_mastering import MasterChain, MasteringPreset

# Crear chain
chain = MasterChain()

# Aplicar preset
preset = MasteringPreset.get_preset("club")
chain.set_limiter_ceiling(preset['ceiling'])

# Obtener chain para Ableton
devices = chain.get_ableton_device_chain()
```

### AutoPrompter

Genera configuraciones desde descripciones de vibe.

```python
from self_ai import AutoPrompter

prompter = AutoPrompter()

# Generar desde vibe
params = prompter.generate_from_vibe("dark warehouse techno")
# Retorna: genre, bpm, key, style, structure
```

## Pipeline Completo

```python
from full_integration import generate_complete_track

# Generación completa con todas las fases
track = generate_complete_track("deep house sunset", seed=42)

# El resultado incluye:
# - vibe_params
# - structure
# - transitions
# - atmos_events
# - fx_events
# - master_chain
# - human_feel config
```

## Sistema de Fatiga

El sistema de fatiga evita la repetición de samples:

- 0 usos: factor 1.0 (sin penalización)
- 1-3 usos: factor 0.75
- 4-10 usos: factor 0.50
- 10+ usos: factor 0.20

## Palette Bonus

Sistema de scoring por compatibilidad de carpeta:

- Folder ancla exacto: 1.4x
- Subfolder del ancla: 1.3x
- Folder hermano (mismo padre): 1.2x
- Folder diferente: 0.9x

## Testing

Ejecutar tests:

```bash
cd AbletonMCP_AI/MCP_Server
python -m unittest tests.test_sample_selector tests.test_human_feel tests.test_integration -v
```

## Constantes Importantes

### Energy Profiles
- intro: 30%
- build: 70%
- drop: 100%
- break: 50%
- outro: 20%

### Loudness Targets
- streaming: -14 LUFS
- club: -8 LUFS
- safe: -12 LUFS

### Master Chain
- Utility (gain staging)
- Saturator (drive 1.5)
- Compressor (ratio 2:1)
- Limiter (ceiling -0.3dB)
