141 lines
3.9 KiB
Markdown
141 lines
3.9 KiB
Markdown
# Micro Stems Approach
|
|
|
|
Ultima revision: 2026-03-30
|
|
|
|
## Objetivo
|
|
|
|
Dejar de tratar la referencia como un bloque largo y pasar a leerla como una secuencia de gestos cortos.
|
|
|
|
La idea es:
|
|
|
|
1. partir `ejemplo.mp3` en ventanas chicas
|
|
2. inferir que rol cumple cada fragmento
|
|
3. comparar cada fragmento contra la libreria local
|
|
4. extraer familias y tokens dominantes
|
|
5. usar ese resumen para sesgar la seleccion global y dejar de mezclar material "correcto" pero sin identidad
|
|
|
|
## Lo que ya quedo implementado
|
|
|
|
Archivo principal:
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\AbletonMCP_AI\MCP_Server\reference_listener.py`
|
|
|
|
Cambios reales:
|
|
|
|
- existe `_build_micro_stem_plan(...)`
|
|
- existe `_apply_micro_stem_bias(...)`
|
|
- `build_arrangement_plan(...)` ahora agrega:
|
|
- `micro_stems`
|
|
- `micro_stem_summary`
|
|
- el rerank global de `matches` ahora puede recibir sesgo desde micro-fragmentos antes de elegir palette y layers
|
|
|
|
## Como funciona hoy
|
|
|
|
### Segmentacion
|
|
|
|
- usa el banco de segmentos ya existente de `reference_listener.py`
|
|
- trabaja con ventanas de hasta `4.0s`
|
|
- calcula importancia por:
|
|
- energia
|
|
- densidad de onsets
|
|
- balance armonico/percusivo
|
|
- tamaño de ventana
|
|
|
|
### Inferencia de roles
|
|
|
|
Cada micro-fragmento intenta inferir roles como:
|
|
|
|
- `kick`
|
|
- `snare`
|
|
- `hat`
|
|
- `bass_loop`
|
|
- `perc_loop`
|
|
- `top_loop`
|
|
- `synth_loop`
|
|
- `vocal_loop`
|
|
- `vocal_shot`
|
|
- `fill_fx`
|
|
- `snare_roll`
|
|
- `atmos_fx`
|
|
|
|
La inferencia se apoya en:
|
|
|
|
- `harmonic_ratio`
|
|
- `percussive_ratio`
|
|
- `spectral_centroid`
|
|
- `rms_mean`
|
|
- `onset_mean`
|
|
- `section kind`
|
|
|
|
### Matching
|
|
|
|
Para cada fragmento:
|
|
|
|
- toma candidatos top por rol desde `match_assets(...)`
|
|
- compara vector del fragmento contra bancos de segmentos de cada candidato
|
|
- combina:
|
|
- similitud de segmento
|
|
- tempo
|
|
- key
|
|
|
|
### Resumen que produce
|
|
|
|
`micro_stem_summary` expone:
|
|
|
|
- `dominant_families`
|
|
- `dominant_tokens`
|
|
- `role_focus`
|
|
- cantidad de segmentos considerados y elegidos
|
|
|
|
## Lo que SI hace
|
|
|
|
- detecta familias repetidas reales dentro de la libreria
|
|
- encuentra mejor DNA ritmico que el scoring global promedio
|
|
- evita parte del ruido de "un sample bueno pero fuera de mundo"
|
|
- ayuda a que `reference_listener` prefiera material mas coherente con la referencia
|
|
|
|
## Lo que TODAVIA NO hace
|
|
|
|
- no reconstruye frase por frase en Arrangement
|
|
- no materializa literalmente micro-fragmentos de la referencia
|
|
- no usa aun `MIDI` ni presets `.fst` como parte del matching
|
|
- no decide instrumentos armonicos reales cuando esos activos existen solo en MIDI/presets
|
|
|
|
## Limitacion critica actual
|
|
|
|
La libreria del usuario tiene bastante material armonico importante en:
|
|
|
|
- `sounds presets`
|
|
- `MIDI PACK`
|
|
- subcarpetas `MIDI` dentro de sample packs
|
|
|
|
El matching micro actual es audio-first.
|
|
|
|
Eso significa:
|
|
|
|
- si el piano del estilo esta representado solo como `MIDI` o preset y no como loop de audio
|
|
- el sistema no lo va a seleccionar como `synth_loop`
|
|
- por eso el usuario sigue sintiendo que faltan pianos/keys aunque el analisis audio ya haya mejorado
|
|
|
|
## Bugs reales corregidos mientras se hacia esto
|
|
|
|
- `detect_reference_sections()` ya no rompe al convertir `librosa.feature.tempo(...)` a float
|
|
- `synth_loop` ya no acepta archivos vocales disfrazados
|
|
- `sample_selector.record_section_selection()` ya acepta dicts y no solo objetos con `.name`
|
|
- `_extract_pack()` ya no trata carpetas genericas como `20 One Shots` como si fueran un pack dominante
|
|
|
|
## Evidencia runtime local
|
|
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\temp\ejemplo_micro_stems_report.json`
|
|
- `C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\temp\ejemplo_arrangement_plan_validation.json`
|
|
|
|
## Siguiente paso correcto
|
|
|
|
No es "sumar mas audio loops".
|
|
|
|
Es esto:
|
|
|
|
1. indexar `MIDI` y presets del mismo universo familiar
|
|
2. mapear familias de audio a siblings armonicos (`Piano`, `Keys`, `Rhode`, `Guitar`, `Pad`, `Pluck`)
|
|
3. materializar el remake desde una `phrase plan`, no solo desde loops globales
|