- Reverse-engineer drum patterns from 2 real reggaeton tracks with librosa - Create patterns.py with extracted frequency data (kick/snare/hihat positions) - Rewrite rhythm.py with pattern-bank generators (dembow, dense, trapico, offbeat) - Rewrite melodic.py with section-aware generators and humanization - Add weighted random sample selection in SampleSelector (top-5 pool) - Add generate_structure() with randomized templates and energy variance - Fix RPP structure: TEMPO arity (3→4 args), string quoting for empty strings - Rewrite quick_drumloop_test.py with correct REAPER ground truth format - Add scripts/analyze_examples.py for reverse engineering audio tracks - Add --seed argument for reproducible generation - 72 tests passing
189 lines
6.9 KiB
JSON
189 lines
6.9 KiB
JSON
{
|
|
"genre": "reggaeton",
|
|
"era": "2009",
|
|
"display_name": "Reggaeton 2009 (Era de Oro)",
|
|
"description": "Reggaeton comercial 2006-2010. Daddy Yankee, Wisin y Yandel, Don Omar, Tito El Bambino, Hector El Father. Beat dembow con 808, piano stabs, brass hits. AGGRESSIVE groove, dense drum loops, GAP/BREAK section technique.",
|
|
"bpm": {
|
|
"min": 88,
|
|
"max": 102,
|
|
"default": 99
|
|
},
|
|
"keys": ["Am", "Dm", "Gm", "Cm", "Em", "Fm", "Bbm"],
|
|
"time_signature": [4, 4],
|
|
"ppq": 96,
|
|
"structure": {
|
|
"template": "extracted_real_tracks",
|
|
"templates": {
|
|
"extracted_real_tracks": [
|
|
{"name": "build", "bars": 16, "energy": 0.6},
|
|
{"name": "verse", "bars": 2, "energy": 0.35},
|
|
{"name": "build", "bars": 47, "energy": 0.65},
|
|
{"name": "verse", "bars": 1, "energy": 0.35},
|
|
{"name": "gap", "bars": 1, "energy": 0.05},
|
|
{"name": "drop", "bars": 2, "energy": 1.0},
|
|
{"name": "build", "bars": 5, "energy": 0.7},
|
|
{"name": "break", "bars": 2, "energy": 0.05},
|
|
{"name": "drop", "bars": 1, "energy": 0.95},
|
|
{"name": "build", "bars": 12, "energy": 0.65},
|
|
{"name": "verse", "bars": 2, "energy": 0.35},
|
|
{"name": "build", "bars": 8, "energy": 0.6}
|
|
],
|
|
"standard": [
|
|
{"name": "intro", "bars": 4, "energy": 0.3},
|
|
{"name": "verse", "bars": 8, "energy": 0.35},
|
|
{"name": "chorus", "bars": 8, "energy": 0.95},
|
|
{"name": "verse", "bars": 8, "energy": 0.35},
|
|
{"name": "chorus", "bars": 8, "energy": 0.95},
|
|
{"name": "bridge", "bars": 8, "energy": 0.4},
|
|
{"name": "chorus", "bars": 8, "energy": 0.95},
|
|
{"name": "outro", "bars": 8, "energy": 0.35}
|
|
]
|
|
},
|
|
"gap_break_energy_contrast": 50.0,
|
|
"dembow_positions": [0, 4, 8, 11, 12],
|
|
"note": "GAP/BREAK technique: 1-2 bars near-silence (-50dB) followed by loud DROP (+6dB) creates massive contrast. Real tracks use this extensively."
|
|
},
|
|
"pattern_banks": {
|
|
"dembow_classico": "extracted from 99.4 BPM track (Ejemplo 1)",
|
|
"perreo": "aggressive variant with extra kicks at beat 1.5& and 2",
|
|
"trapico": "half-time feel, kicks at beats 1 and 3 only",
|
|
"dense": "full drum loop density, highest hit frequency positions"
|
|
},
|
|
"roles": {
|
|
"drums": {
|
|
"description": "DENSE drum loop (NOT sparse kick-snare). Kicks at positions 4, 11, 8, 12, 9 — the dembow IS there but buried in a full loop. Pattern bank: kick_pattern_bank_notes",
|
|
"pattern_type": "drum_loop",
|
|
"preferred_plugins": ["FPC", "Fruity DrumSynth Live", "DirectWave", "Kontakt 7"],
|
|
"midi_channel": 0,
|
|
"mixer_slot": 0,
|
|
"notes_template": "drum_loop_dembow",
|
|
"bank": "dembow_classico"
|
|
},
|
|
"bass": {
|
|
"description": "808 sub bass. Section-aware: follows section energy. Tresillo grouping in drop/chorus, sparse in break/gap.",
|
|
"pattern_type": "808_follow_kick",
|
|
"preferred_plugins": ["Serum 2", "Transistor Bass", "Sytrus", "3x Osc", "ravity(S)"],
|
|
"midi_channel": 1,
|
|
"mixer_slot": 1,
|
|
"octave": 2,
|
|
"notes_template": "bass_tresillo_section_aware"
|
|
},
|
|
"harmony": {
|
|
"description": "Piano stabs in offbeats. Closed triads. Section-aware velocity.",
|
|
"pattern_type": "piano_stabs",
|
|
"preferred_plugins": ["FL Keys", "Nexus2", "Kontakt 7", "Sakura", "Pigments"],
|
|
"midi_channel": 2,
|
|
"mixer_slot": 2,
|
|
"notes_template": "piano_stabs_section_aware"
|
|
},
|
|
"lead": {
|
|
"description": "Brass hit o melodia sintetizada. Hook syncopation on dembow positions (4, 11, 12). Section-aware density.",
|
|
"pattern_type": "brass_hook",
|
|
"preferred_plugins": ["Serum 2", "Omnisphere", "Harmor", "Electra", "ravity(S)"],
|
|
"midi_channel": 3,
|
|
"mixer_slot": 3,
|
|
"notes_template": "lead_hook_section_aware"
|
|
},
|
|
"pad": {
|
|
"description": "Pad atmosferico sutil para llenar el fondo. Sustained chord tones.",
|
|
"pattern_type": "sustained_pad",
|
|
"preferred_plugins": ["Harmor", "Serum 2", "Omnisphere", "FLEX", "Pigments"],
|
|
"midi_channel": 4,
|
|
"mixer_slot": 4,
|
|
"notes_template": "pad_sustained"
|
|
},
|
|
"perc": {
|
|
"description": "Percusion adicional: shaker, congas, timbales.",
|
|
"pattern_type": "latin_perc",
|
|
"preferred_plugins": ["FPC", "Fruity DrumSynth Live", "DirectWave"],
|
|
"midi_channel": 5,
|
|
"mixer_slot": 5,
|
|
"notes_template": "latin_perc"
|
|
}
|
|
},
|
|
"chord_progressions": [
|
|
{
|
|
"name": "clasica_menor",
|
|
"chords": ["Am", "G", "F", "G"],
|
|
"beats_per_chord": 4,
|
|
"popularity": 0.9
|
|
},
|
|
{
|
|
"name": "tension",
|
|
"chords": ["Am", "F", "C", "G"],
|
|
"beats_per_chord": 4,
|
|
"popularity": 0.7
|
|
},
|
|
{
|
|
"name": "oscura",
|
|
"chords": ["Dm", "C", "Bb", "C"],
|
|
"beats_per_chord": 4,
|
|
"popularity": 0.6
|
|
},
|
|
{
|
|
"name": "romantica",
|
|
"chords": ["Am", "Dm", "G", "C"],
|
|
"beats_per_chord": 4,
|
|
"popularity": 0.75
|
|
},
|
|
{
|
|
"name": "nocturna",
|
|
"chords": ["Em", "Am", "Dm", "G"],
|
|
"beats_per_chord": 4,
|
|
"popularity": 0.5
|
|
}
|
|
],
|
|
"mix": {
|
|
"bass_heavy": true,
|
|
"sidechain_bass_to_kick": true,
|
|
"reverb_on_snare": true,
|
|
"reverb_on_lead": true,
|
|
"typical_lufs": -8,
|
|
"master_chain": ["Pro-Q 3", "Pro-C 2", "Pro-L 2"],
|
|
"per_role": {
|
|
"drums": {
|
|
"effects": ["Fruity Parametric EQ 2", "Fruity Compressor"],
|
|
"volume_db": -3,
|
|
"stereo": 0
|
|
},
|
|
"bass": {
|
|
"effects": ["Fruity Parametric EQ 2", "Saturn 2"],
|
|
"volume_db": -2,
|
|
"stereo": 0,
|
|
"hp_filter_hz": 20,
|
|
"lp_filter_hz": 200
|
|
},
|
|
"harmony": {
|
|
"effects": ["Pro-Q 3", "Pro-C 2"],
|
|
"volume_db": -6,
|
|
"stereo": -10
|
|
},
|
|
"lead": {
|
|
"effects": ["Pro-Q 3", "Pro-R 2", "Saturn 2"],
|
|
"volume_db": -5,
|
|
"stereo": 15
|
|
},
|
|
"pad": {
|
|
"effects": ["Pro-Q 3", "Pro-R 2"],
|
|
"volume_db": -10,
|
|
"stereo": 30
|
|
}
|
|
}
|
|
},
|
|
"reference_tracks": [
|
|
"Gasolina - Daddy Yankee",
|
|
"Rakata - Wisin y Yandel",
|
|
"Danza Kuduro - Don Omar",
|
|
"El Amor - Tito El Bambino",
|
|
"Rumor de Guerra - Hector El Father",
|
|
"Pose - Daddy Yankee",
|
|
"Llamé Pa Verte - Wisin y Yandel"
|
|
],
|
|
"analysis_notes": {
|
|
"key_finding": "The dembow IS present (positions 0, 4, 8, 11, 12 high across all instruments) but it's buried in a DENSE drum loop, NOT the textbook sparse kick-snare pattern.",
|
|
"kick_insight": "Position 4 (beat 2) is the DENSEST kick hit — not beat 1. Real tracks have kicks on almost EVERY 16th note position.",
|
|
"gap_break_technique": "1-2 bars near-silence (-50dB) followed by loud DROP (+6dB over baseline) creates massive contrast. This is a signature reggaetón technique.",
|
|
"filter_sweeps": "Spectral centroid drops detected in breakdowns, confirming HPF filtering in intro/filtered sections."
|
|
}
|
|
}
|