FASE 3 - Human Feel & Dynamics (10/11 tasks): - apply_clip_fades() - T041: Fade automation per section - write_volume_automation() - T042: Curves (linear, exp, s_curve, punch) - apply_sidechain_pump() - T045: Sidechain by intensity/style - inject_pattern_fills() - T048: Snare rolls, fills by density - humanize_set() - T050: Timing + velocity + groove automation FASE 4 - Key Compatibility & Tonal (9/12 tasks): - audio_key_compatibility.py: Full KEY_COMPATIBILITY_MATRIX - analyze_key_compatibility() - T053: Harmonic compatibility scoring - suggest_key_change() - T054: Circle of fifths modulation - validate_sample_key() - T055: Sample key validation - analyze_spectral_fit() - T057/T062: Spectral role matching FASE 6 - Mastering & QA (8/13 tasks): - calibrate_gain_staging() - T079: Auto gain by bus targets - run_mix_quality_check() - T085: LUFS, peaks, L/R balance - export_stem_mixdown() - T087: 24-bit/44.1kHz stem export New files: - audio_key_compatibility.py (T052) - bus_routing_fix.py (T101-T104) - validation_system_fix.py (T105-T106) Total: 76/110 tasks (69%), 71 MCP tools exposed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
|
|
@mcp.tool()
|
|
def generate_with_human_feel(ctx: Context, genre: str, bpm: float = 0, key: str = "",
|
|
humanize: bool = True, groove_style: str = "shuffle",
|
|
structure: str = "standard") -> str:
|
|
"""
|
|
T040-T050: Genera un track con human feel aplicado.
|
|
|
|
Args:
|
|
genre: Genero musical
|
|
bpm: BPM (0 = auto)
|
|
key: Tonalidad
|
|
humanize: Aplicar humanizacion de timing/velocity
|
|
groove_style: Estilo de groove (straight, shuffle, triplet, latin)
|
|
structure: Estructura de la cancion
|
|
"""
|
|
try:
|
|
logger.info(f"Generando {genre} con human feel (groove={groove_style})")
|
|
|
|
# Get generator
|
|
generator = get_song_generator()
|
|
|
|
# Select palette anchors first
|
|
palette = _select_anchor_folders(genre, key, bpm)
|
|
|
|
# Generate config with palette
|
|
config = generator.generate_config(genre, style="", bpm=bpm, key=key,
|
|
structure=structure, palette=palette)
|
|
|
|
# Initialize human feel engine
|
|
human_engine = HumanFeelEngine(seed=config.get('variant_seed', 42))
|
|
|
|
return json.dumps({
|
|
"status": "success",
|
|
"action": "generate_with_human_feel",
|
|
"config": config,
|
|
"palette": palette,
|
|
"humanize": humanize,
|
|
"groove_style": groove_style,
|
|
"timestamp": time.strftime("%Y-%m-%d %H:%M:%S")
|
|
}, indent=2)
|
|
except Exception as e:
|
|
return json.dumps({"error": str(e)}, indent=2)
|