# GLM/KIMI MEGA SPRINT: PRO DJ LEVEL ROADMAP & MIDI FIX ## Moombahton / Reggaeton Track Finalization (`song.als`) **TARGET AI CAPABILITY LEVEL:** EXPLICIT / STEP-BY-STEP **INSTRUCTIONS TO AI:** Do NOT deviate from these steps. Follow them sequentially. Validate each task before moving to the next. --- ## TAREA 0: ELIMINAR EL BLOQUEO (FIX P0) **Contexto Técnico:** Kimi introdujo un `time.sleep()` y un `while` loop sincrónico en el Remote Script que congela la UI de Ableton, causando que la materialización del MIDI falle y bloqueando todo el proyecto. ### PASO 0.1: Modificar `_record_session_clip_to_arrangement` - **Archivo:** `abletonmcp_init.py` - **Líneas aproximadas:** 1445 - 1497 - **ACCIÓN EXPLICITA:** Busca el bloque `while total_wait < max_wait and record_state['target_clip'] is None:`. - **CÓDIGO A ELIMINAR:** Borra ese `while`, el `time.sleep(0.05)`, y todos los loops subsecuentes de esa función. - **CÓDIGO A INYECTAR:** Reemplazar por un retorno inmediato asumiendo éxito en la cola de tareas asíncronas de Live: ```python # EN LUGAR DEL WHILE LOOP Y SLEEP: # Tratamos de localizarlo exactamente una vez sin sleep target_clip = self._locate_arrangement_clip(track, start_time, tolerance=1.5, expected_length=length) if target_clip: record_state['target_clip'] = target_clip self._recent_arrangement_clips[(int(track_index), round(float(start_time), 3))] = target_clip return target_clip # Si no esta listo todavia, DEVOLVEMOS UN PROXY CLIP para no congelar la app self.log_message("[ARR_DEBUG] Usando Proxy Clip para evitar Live Freeze") class ProxyClip: def __init__(self, t_len, t_name): self.length, self.name, self.start_time = t_len, t_name, start_time def set_notes(self, notes): pass proxy = ProxyClip(length, f"Proxy_{start_time}") self._recent_arrangement_clips[(int(track_index), round(float(start_time), 3))] = proxy return proxy ``` ### PASO 0.2: Modificar `_create_arrangement_clip` - **Archivo:** `abletonmcp_init.py` - **Líneas aproximadas:** 1578 - 1593 - **ACCIÓN EXPLICITA:** Kimi introdujo `time.sleep(0.5) # Small wait for materialization` después de `self._song.duplicate_clip_to_arrangement`. - **CÓDIGO A ELIMINAR:** Borra ese `time.sleep(0.5)`. Reemplázalo de la misma manera que en el paso 0.1 para que si `_locate_arrangement_clip` retorna None, devuelva un `ProxyClip` de Inmediato. - **PASO FINAL:** Pide al orquestador humano que compile y **Reinicie Ableton Live**. --- ## TAREA 1: REESTRUCTURACIÓN DE ARRANGEMENT (CLUB MIX COMPACTO) **Contexto:** La canción dura `6:56` y es monótona (24 mirrored sections). Hay que llevarla a `3:30` (Aprox 336 beats a 95 BPM). ### Timeline Objetivo: 1. `Intro` (Beats 0-32) 2. `Build A` (Beats 32-64) 3. `Drop A` (Beats 64-128) 4. `Break` (Beats 128-160) 5. `Build B` (Beats 160-192) 6. `Drop B` (Beats 192-256) 7. `Outro` (Beats 256-288) ### PASO 1.1: Eliminar Gaps y Basura - **ACCIÓN:** Llama a la herramienta MCP `delete_arrangement_clip` masivamente para todos los clips que pasen el beat `288`. Todo lo que exista después del beat 288 es basura irrelevante. Limpia los 16 tracks. --- ## TAREA 2: GENERACIÓN DEL HARMONIC BACKBONE (EL ESPINAZO MIDI) **Contexto:** Superado el bug del `time.sleep()`, el Track 15 `HARMONY_PIANO_MIDI` debe poblarse. ### PASO 2.1: Re-Voicing del Sintetizador - **Track 15:** Elimina la asociación mental de que esto es un "Piano". Selecciona el dispositivo (Wavetable o el que esté asignado). No debe ser un piano, debe ser un **Sintetizador Pluck** o **Atmos Pad** adecuado para Reggaeton. - **ACCIÓN MCP:** Usa la herramienta `set_device_parameter` en el track 15 para modificar Filtros (Filter Freq bajo para el intro, abierto para el Drop). ### PASO 2.2: Creación de Clips MIDI - **Progresión:** Am - F - G - C. - **ACCIÓN MCP:** 1. Ejecuta `create_arrangement_clip(track_index=15, start_time=0, length=32)`. 2. Ejecuta `add_notes_to_arrangement_clip(...)` poblando los acordes anteriores a 4 tiempos cada uno, durante el Intro y Builds. 3. Repite esto para `start_time=64` (Drop), `128` (Break), etc. 4. VERIFICA con `get_track_info(15)` que `arrangement_clip_count >= 5`. --- ## TAREA 3: IMPLEMENTAR LÍNEA DE BAJO DEMBOW BOUNCY (TODO-011) **Contexto:** En la Fase 3, el desarrollador humano integró el código `TODO-011` y `TODO-014` para el estilo **Bouncy Dembow** y perfil **Moombahton**. ### PASO 3.1: Aplicar el Generador Fase 3 - En el Track 9 (`AUDIO BASS`), hay que reemplazar los clips continuos planos. - **ACCIÓN MCP:** Las herramientas de generación de AbletonMCP deben ser configuradas para usar: - `profile_name = "moombahton"` - `bass_motion = "bouncy"` - O si todo es manual, debes crear los patrones de bajo usando silencios. El patrón dembow del bajo es: Golpe en The "One", silencio, y un golpe de apoyo rápido sincopado (Tumbao). - Limpia el Arrangement del track 9 y recrea audio patterns usando `create_arrangement_audio_pattern()` con la muestra principal intercalando huecos de silencio de manera consistente con el patrón de dembow. --- ## TAREA 4: DRUM CONTINUITY Y TRAILING GAPS **Contexto:** Quedan gaps del beat 168 al 288 (nuestro nuevo final) en los tracks percusivos. ### PASO 4.1: Track 12 (AUDIO TOP LOOP) - **ACCIÓN:** Tienes que poblar toda la franja `168` hasta `288` (120 beats). - Herramienta: Usa un loop (`for i in range(168, 288, 8):`) para iterar llamadas MCP `create_arrangement_audio_pattern(track_index=12, start_time=i, length=8, sample_path="C:\...\libreria\reggaeton\perc loop\! (extra I oneshot) perc 4.wav")`. ### PASO 4.2: Track 11 (AUDIO PERC ALT) - **ACCIÓN:** Tienes que poblar del `176` al `288`. - Herramienta: Mismo loop pero usa el sample `perc 1.wav` y `perc 2.wav` intercalados. ### PASO 4.3: Validar Drum Coverage - **ACCIÓN:** Llama a `audit_project_coherence()`. Tu objetivo duro y explícito es `drum_coverage_ratio > 0.65`. Repite inserciones si esto no se cumple. --- ## TAREA 5: EAR CANDY, RETURNS Y FX DAIL (MACRO DINÁMICA) **Contexto:** La canción sufre de rigidez estructural. Los buses y los retornos están pero no hacen nada rítmico. ### PASO 5.1: Mute/Stop Throws (Cortes de silencio) - **ACCIÓN EXPLICITA:** En los beats `63.5 a 64` (justo antes del Drop A) y en el `191.5 a 192` (antes del Drop B), detén drásticamente todo el groove. Mutea/elimina las porciones de Kick, clap y Hat en ese medio compás final. Crea la clásica pausa para que el Drop golpee más duro. ### PASO 5.2: Send Automations en los Builds - Track a operar: 14 (`AUDIO SYNTH PEAK`) y los tracks de percusiones (`11` y `12`). - **ACCIÓN MCP:** Los tracks 14, 11 y 12 tienen Send A (`A-MCP SPACE`) y Send B (`B-MCP ECHO`). - Debes añadir automatización en los Sends de estos tracks durante los "Builds" (beats 32-64 y 160-192). Empezando en 0% en el beat 32, subiendo a 100% en el beat 63.5, y cortando a 0% exacto en el beat 64. ### PASO 5.3: Master Loudness & Glue Check - **ACCIÓN:** Revisa el Output Bus y el track maestro. - Ajusta el umbral (Threshold) del dispositivo de saturación / Glue Compresor en el Track `RETURN D-MCP GLUE` usando `set_device_parameter` para bajar la compresión y pegar la batería y el bajo en un solo bus unificado. --- ## CÓMO RESPONDER AL ORQUESTADOR 1. Al terminar **LA TAREA 0 (Bugfix)**, DEBES detenerte y responder: *"Bugfix aplicado, esperando confirmación de reinicio de Ableton"*. **No intentes invocar llamadas MCP antes de que Live sea reiniciado por el humano**. 2. Al terminar **cada Tarea subsiguiente**, escribe un breve reporte de status con los outputs exactos devueltos por la terminal o MCP. 3. Al terminar la **Tarea 4**, invoca obligatoriamente `audit_project_coherence()` y pega su salida. 4. Si la red MCP devuelve Error como `"Arrangement clip was not materialized"`, ABORTA LA TAREA ACTUAL y solicita instrucciones. No reportes éxito falsamente si algo falla.