feat: Triple fix - Variedad + Humanizer + Coherencia

MÓDULO 1: Variedad de Samples (usa más de la librería)
- Fix _find_sample_for_section(): rotación round-robin por sección
  * Intro: samples 0-2 (suaves)
  * Verse: samples 3-6 (rotación)
  * Chorus: samples 7-10 (energía)
  * Bridge: samples 11-14 (diferentes)
  * Outro: últimos samples
- Nueva función _pick_variety() distribuye 12 samples entre secciones
- generate_intelligent_track(): múltiples samples por rol (no 1 solo)
- load_samples_for_genre(): hasta 3 bass tracks, 3 FX tracks (eliminados breaks)

MÓDULO 2: Humanización Real (suena musical, no robótico)
- Fix bug de escala: intensity 0.0-1.0 → timing 0-15ms audible
- Perfiles por instrumento:
  * Kick: timing×5ms (sutil)
  * Snare: timing×10ms (medio)
  * HiHat: timing×15ms (expressivo)
  * Bass: timing×8ms
  * Melody: timing×12ms
- Soporte Arrangement View: procesa arrangement_clips
- Humanización de audio clips: gain variation + micro-timing
- BPM-aware timing en HumanFeel (lee tempo real del proyecto)

MÓDULO 3: Sistema de Coherencia (calidad profesional)
- Fix validate_coherence: import roto CoherenceValidator → RealCoherenceValidator
- Fix select_coherent_kit: mismo fix de import
- Detección de frequency masking: identifica kick+bass colisión en sub-bass
- Phase correlation real: calculado desde onsets coincidentes
- Unificación _calculate_coherence(): usa RealCoherenceValidator como default

Resultado:
- Antes: 7-12 samples de 511 (6-12%)
- Ahora: 20-40+ samples por producción (rotación automática)
- Humanización: audible y por instrumento
- Coherencia: detecta problemas kick/bass, phase issues

Refs: Módulos 1, 2, 3 del plan de desarrollo
This commit is contained in:
Administrator
2026-04-12 22:30:27 -03:00
parent 186458d971
commit 8e6d5cec9f
24 changed files with 940 additions and 75 deletions

8
mcp_call_debug2.txt Normal file
View File

@@ -0,0 +1,8 @@
get_session_info: before init
get_session_info: after init
get_session_info: after call
meta=None content=[TextContent(type='text', text='{\n "status": "success",\n "result": {\n "tempo": 95.0,\n "num_tracks": 4,\n "num_scenes": 8,\n "is_playing": false,\n "current_song_time": 0.0,\n "metronome": false,\n "master_volume": 0.8500000238418579\n }\n}', annotations=None, meta=None)] structuredContent={'result': '{\n "status": "success",\n "result": {\n "tempo": 95.0,\n "num_tracks": 4,\n "num_scenes": 8,\n "is_playing": false,\n "current_song_time": 0.0,\n "metronome": false,\n "master_volume": 0.8500000238418579\n }\n}'} isError=False
set_tempo: before init
set_tempo: after init
set_tempo: after call
meta=None content=[TextContent(type='text', text='{\n "status": "success",\n "result": {\n "status": "success",\n "result": {\n "tempo": 95.0\n }\n }\n}', annotations=None, meta=None)] structuredContent={'result': '{\n "status": "success",\n "result": {\n "status": "success",\n "result": {\n "tempo": 95.0\n }\n }\n}'} isError=False