# Skill: Reinicio Correcto de Ableton Live + Inyección Senior de Audio

## Descripción
Procedimiento correcto para reiniciar Ableton Live y sistema profesional de inyección de audio en Arrangement View con 5 métodos de fallback automáticos.

## Cuándo Usar Reinicio
- Después de modificar `AbletonMCP_AI/__init__.py`
- Cuando los cambios no se reflejan en el comportamiento
- Cuando Ableton muestra comportamiento inconsistente
- Después de errores que requieren recarga completa del Remote Script

## Proceso de Reinicio (3 Pasos Obligatorios)

### Paso 1: Matar Todos los Procesos de Ableton
```powershell
Get-Process | Where-Object { $_.ProcessName -like "*Ableton*" } | ForEach-Object { 
    Write-Host "Killing $($_.ProcessName) ($($_.Id))"
    Stop-Process -Id $_.Id -Force 
}
```
Procesos a verificar:
- `Ableton Live 12 Suite` (principal)
- `Ableton Index` (indexador de archivos)
- `AbletonPushCpl` (controlador Push si está conectado)

### Paso 2: Eliminar Archivos de Recovery/Crash (CRÍTICO - PASO COMPLETO)

**⚠️ IMPORTANTE:** El archivo `CrashRecoveryInfo.cfg` está en **`AppData\Roaming`** (NO en `AppData\Local`).

**Ubicación PRINCIPAL (más común):**
```
C:\Users\[USERNAME]\AppData\Roaming\Ableton\Live 12.0.15\Preferences\CrashRecoveryInfo.cfg
```

**Ubicación ALTERNATIVA (según versión/install):**
```
C:\Users\[USERNAME]\AppData\Local\Ableton\Live 12 Suite\CrashRecoveryInfo.cfg
```

**⚠️ Si Ableton muestra popup de recuperación al iniciar → los archivos NO se eliminaron correctamente.**

Usar este script completo que busca en AMBAS ubicaciones:

```powershell
# BUSCAR Y ELIMINAR CrashRecoveryInfo.cfg EN TODOS LOS USUARIOS
Get-ChildItem -Path "C:\Users" -Directory | ForEach-Object { 
    $userPath = $_.FullName
    $recoveryPaths = @(
        "$userPath\AppData\Roaming\Ableton\*\Preferences\CrashRecoveryInfo.cfg",
        "$userPath\AppData\Local\Ableton\*\CrashRecoveryInfo.cfg",
        "$userPath\AppData\Roaming\Ableton\*\CrashRecoveryInfo.cfg"
    )
    foreach($rp in $recoveryPaths) {
        Get-ChildItem -Path $rp -ErrorAction SilentlyContinue | ForEach-Object {
            Write-Host "🗑️ ELIMINANDO: $($_.FullName)"
            Remove-Item $_.FullName -Force
        }
    }
}

# ELIMINAR ARCHIVOS ESPECÍFICOS CONOCIDOS (adaptar nombre de usuario según corresponda)
# Ejemplo para usuario Administrator:
Remove-Item "C:\Users\Administrator\AppData\Roaming\Ableton\Live 12.0.15\Preferences\CrashRecoveryInfo.cfg" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Users\Administrator\AppData\Roaming\Ableton\Live 12.0.15\Preferences\CrashDetection.cfg" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Users\Administrator\AppData\Roaming\Ableton\Live 12.0.15\Preferences\Undo.cfg" -Force -ErrorAction SilentlyContinue

# También buscar en carpetas alternativas
Remove-Item "C:\Users\Administrator\AppData\Local\Ableton\Live 12 Suite\CrashRecoveryInfo.cfg" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Users\Administrator\AppData\Local\Ableton\Live 12 Suite\Undo.cfg" -Force -ErrorAction SilentlyContinue
```

**✅ VERIFICACIÓN:** Si no hay popup al iniciar Ableton, los archivos se eliminaron correctamente.

**🔍 VERIFICACIÓN MANUAL (si sigue apareciendo popup):**
```powershell
# Buscar archivos de recovery que aún existen
Get-ChildItem -Path "C:\Users" -Recurse -Force -ErrorAction SilentlyContinue | 
    Where-Object { $_.Name -match "CrashRecoveryInfo\.cfg|CrashDetection\.cfg" } | 
    Select-Object FullName, LastWriteTime
```

**⚠️ CRÍTICO:** Sin este paso, Ableton mostrará popups de recuperación que bloquean el TCP server y el sistema MCP no funcionará.

**💡 NOTA:** En algunos sistemas los archivos están en `AppData\Roaming`, en otros en `AppData\Local`. El script arriba busca en AMBAS ubicaciones.

### Paso 3: Iniciar Ableton y Verificar
```powershell
# Iniciar Ableton
Start-Process "C:\ProgramData\Ableton\Live 12 Suite\Program\Ableton Live 12 Suite.exe"

# Esperar a que el servidor TCP esté listo (máximo 30 segundos)
$waited = 0
while ($waited -lt 30) {
    Start-Sleep 2
    $waited += 2
    if (netstat -an | findstr 9877) { 
        Write-Host "✓ TCP server ready on port 9877"
        break
    }
}

# Verificar salud
ableton-live-mcp_health_check
```

**Resultado esperado:** `score: "5/5"`, `status: "HEALTHY"`

---

## Inyección Senior de Audio en Arrangement View

### Arquitectura de Fallback Automático (5 Métodos)

La implementación senior intenta automáticamente 5 métodos en orden de preferencia:

```
┌─────────────────────────────────────────────────────────────┐
│  MÉTODO 1: track.insert_arrangement_clip()                  │
│  ├─ Disponibilidad: Live 12+                                │
│  ├─ Tipo: Directo a Arrangement View                        │
│  └─ Éxito → Fin del proceso                                 │
├─────────────────────────────────────────────────────────────┤
│  MÉTODO 2: track.create_audio_clip()                       │
│  ├─ Disponibilidad: Live 11.0+                              │
│  ├─ Tipo: Directo a Arrangement View                        │
│  └─ Éxito → Fin del proceso                                 │
├─────────────────────────────────────────────────────────────┤
│  MÉTODO 3: arrangement_clips.add_new_clip()               │
│  ├─ Disponibilidad: Live 12+                                │
│  ├─ Tipo: API de Arrangement                                │
│  └─ Éxito → Fin del proceso                                 │
├─────────────────────────────────────────────────────────────┤
│  MÉTODO 4: Session + duplicate_clip_to_arrangement         │
│  ├─ Disponibilidad: Live 10+ (varía por versión)            │
│  ├─ Tipo: Session → Arrangement                             │
│  └─ Éxito → Fin del proceso                                 │
├─────────────────────────────────────────────────────────────┤
│  MÉTODO 5: Session + Recording Fallback                    │
│  ├─ Disponibilidad: Todas las versiones                     │
│  ├─ Tipo: Grabación desde Session                           │
│  └─ Último recurso                                         │
└─────────────────────────────────────────────────────────────┘
```

### Uso Automático (Zero Configuración Manual)

```python
# Crear clips de audio en posiciones exactas
ableton-live-mcp_create_arrangement_audio_pattern(
    track_index=3,
    file_path="C:\\...\\libreria\\reggaeton\\kick\\kick 1.wav",
    positions=[0, 4, 8, 12],  # Beats exactos
    name="KickPattern"
)
```

**Respuesta esperada:**
```json
{
  "track_index": 3,
  "file_path": "...",
  "created_count": 4,
  "positions": [0.0, 4.0, 8.0, 12.0],
  "name": "KickPattern"
}
```

### Verificación de Clips en Arrangement

```python
ableton-live-mcp_get_arrangement_status
```

**Resultado exitoso:**
```json
{
  "view": "Arrangement",
  "total_clips": 4,
  "clips": [
    {
      "track_index": 3,
      "name": "KickPattern 1",
      "start_time": 0.0,
      "is_midi": false
    },
    {
      "track_index": 3,
      "name": "KickPattern 2", 
      "start_time": 4.0,
      "is_midi": false
    }
  ]
}
```

---

## Anti-Patrones (Qué NO Hacer)

❌ **NO** usar `File > Quit` (deja procesos colgados)  
❌ **NO** omitir el Paso 2 de eliminación de archivos crash  
❌ **NO** usar `duplicate_clip_to_arrangement` directamente (puede no estar disponible)  
❌ **NO** cargar samples manualmente en Session View antes de inyectar  
❌ **NO** usar métodos de grabación manual cuando existe la inyección automática  

---

## Solución de Problemas

### Problema: "created_count: 0"
**Causa:** Ningún método de los 5 funcionó  
**Solución:** Verificar que el archivo existe y es un audio válido (WAV, AIFF, MP3)

### Problema: Clips en posiciones incorrectas
**Causa:** Método de grabación (Método 5) activado como último recurso  
**Solución:** Normal, el Método 5 tiene tolerancia de ±1 beat. Verificar logs con `[MCP-AUDIO]`.

### Problema: Cambios no se reflejan después de reinicio
**Causa:** Archivos crash no fueron eliminados  
**Solución:** Repetir Proceso de Reinicio completo (3 pasos)

---

## Referencia Técnica

### Archivos Modificados
- `AbletonMCP_AI/__init__.py` - Métodos `_cmd_create_arrangement_audio_pattern` y `_cmd_duplicate_clip_to_arrangement`

### Métodos del Live Object Model Utilizados
- `track.insert_arrangement_clip(path, start_beat, end_beat)` - Live 12+ direct
- `track.create_audio_clip(path, position)` - Live 11.0+ direct  
- `arrangement_clips.add_new_clip(start, end)` - Live 12+ arrangement API
- `song.duplicate_clip_to_arrangement(track, slot, pos)` - Legacy workflow
- `clip_slot.create_audio_clip(path)` + grabación - Universal fallback

### Logs de Debug
Buscar en `C:\Users\Administrator\AppData\Roaming\Ableton\Live 12.0.15\Preferences\Log.txt`:
- `[MCP-AUDIO] Using Method X` - Método que se intentó
- `[MCP-AUDIO] Method X SUCCESS` - Método que funcionó
- `[MCP-AUDIO] Method X FAILED` - Método que falló

---

## Historial
- **v1.0** (2026-04-12): Documento inicial con proceso de reinicio
- **v2.0** (2026-04-12): Agregada inyección senior de audio con 5 métodos de fallback
- **v2.1** (2026-04-12): **CORRECCIÓN CRÍTICA** - Actualizado Paso 2 con búsqueda recursiva de CrashRecoveryInfo.cfg en todos los usuarios. El archivo puede estar en diferentes rutas según el nombre de usuario.
- **Autor:** AbletonMCP_AI Senior Architecture

---

## Ejemplo de Workflow Completo

```powershell
# 1. REINICIO CORRECTO (3 pasos completos)
# Paso 1: Matar procesos
Get-Process 'Ableton Live 12 Suite' -ErrorAction SilentlyContinue | Stop-Process -Force
Get-Process 'AbletonPushCpl' -ErrorAction SilentlyContinue | Stop-Process -Force
Get-Process 'Ableton Index' -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 3

# Paso 2: Buscar y eliminar CrashRecoveryInfo.cfg en TODOS los usuarios
Get-ChildItem -Path "C:\Users" -Directory | ForEach-Object { 
    $recoveryFile = "$($_.FullName)\AppData\Roaming\Ableton\Live 12.0.15\Preferences\CrashRecoveryInfo.cfg"
    if (Test-Path $recoveryFile) {
        Remove-Item -LiteralPath $recoveryFile -Force
        Write-Host "✅ Eliminado: $recoveryFile"
    }
}

# Paso 3: Iniciar Ableton limpio
Start-Process "C:\ProgramData\Ableton\Live 12 Suite\Program\Ableton Live 12 Suite.exe"
Start-Sleep 45  # Esperar carga completa
```

**Resultado:** Audio clips en Arrangement View en posiciones exactas, sin intervención manual.
