Files
AbletonMCP_AI/check_docstrings.py
Administrator 8e6d5cec9f 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
2026-04-12 22:30:27 -03:00

40 lines
1.3 KiB
Python

#!/usr/bin/env python
"""Check for unclosed docstrings in server.py"""
with open(r'C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts\AbletonMCP_AI\mcp_server\server.py', 'r', encoding='utf-8') as f:
lines = f.readlines()
# Check for triple-quote balance
in_docstring = False
docstring_char = None
line_num = 0
for i, line in enumerate(lines, 1):
if not in_docstring:
if '"""' in line:
count = line.count('"""')
if count % 2 == 1:
in_docstring = True
docstring_char = '"""'
line_num = i
if "'''" in line:
count = line.count("'''")
if count % 2 == 1:
in_docstring = True
docstring_char = "'''"
line_num = i
else:
if docstring_char in line:
count = line.count(docstring_char)
if count % 2 == 1:
in_docstring = False
if in_docstring:
print(f'ERROR: Unclosed docstring starting at line {line_num}')
# Show context
print(f'Line {line_num-2}: {repr(lines[line_num-3])}')
print(f'Line {line_num-1}: {repr(lines[line_num-2])}')
print(f'Line {line_num}: {repr(lines[line_num-1])}')
else:
print('All docstrings properly closed')