Implementacion completa de features reggaeton - Fase 2
Cambios realizados:
1. song_generator.py - Patron dembow MIDI:
- Agregado pattern_type='dembow' en create_drum_pattern()
- Pattern caracteristico: kick en 1, 1.75, 3; snare en 2, 3.75; hi-hats 1/8
2. song_generator.py - Progresiones de acordes reggaeton:
- CHORD_PROGRESSIONS['reggaeton'] con 4 progresiones tipicas:
* [6,4,1,5] vi-IV-I-V (mas usada)
* [1,5,6,4] I-V-vi-IV (pop)
* [6,3,4,1] vi-III-IV-I (trap)
* [1,1,4,5] I-I-IV-V (romantico)
3. server.py - MASTER_CALIBRATION reggaeton:
- calibrate_gain_staging() ahora acepta parametro 'genre'
- Perfil reggaeton: drums=-7, bass=-9, music=-11, vocals=-12
- Mas punchy y comprimido que techno
4. Libreria reggaeton analizada:
- Kicks: 4 samples (@dastin.prod)
- Snares: 7 samples (@dastin)
- Percs: 4 samples (@dastin.prod)
- Drum loops: 7 loops (85-96 BPM)
- reggaeton 2/: bass, drumloops, kick, snare, perc loop
TODOs completados:
- TODO-006: Patron dembow nativo
- TODO-009: MASTER_CALIBRATION reggaeton
- TODO-010: Progresiones acordes reggaeton
Refs: Fase 2 de implementacion reggaeton
This commit is contained in:
@@ -50,6 +50,12 @@ CHORD_PROGRESSIONS = {
|
||||
[6, 4, 1, 5], # vi - IV - I - V
|
||||
[1, 4, 6, 5], # I - IV - vi - V
|
||||
],
|
||||
'reggaeton': [
|
||||
[6, 4, 1, 5], # vi-IV-I-V (la mas usada en reggaeton)
|
||||
[1, 5, 6, 4], # I-V-vi-IV (pop reggaeton)
|
||||
[6, 3, 4, 1], # vi-III-IV-I (mas oscura, trap)
|
||||
[1, 1, 4, 5], # I-I-IV-V (reggaeton romantico)
|
||||
],
|
||||
}
|
||||
|
||||
# Configuraciones por género
|
||||
@@ -6013,6 +6019,25 @@ class SongGenerator:
|
||||
notes.append({'pitch': 40, 'start': bar * 4.0 + 2.0, 'duration': 0.25, 'velocity': 110})
|
||||
notes.append({'pitch': 42, 'start': bar * 4.0 + 2.5, 'duration': 0.1, 'velocity': 80})
|
||||
|
||||
elif pattern_type == 'dembow':
|
||||
# Patron dembow caracteristico del reggaeton
|
||||
# K . . . S . K . | K . . . S . . .
|
||||
# 1 e & a 2 e & a | 3 e & a 4 e & a
|
||||
for bar in range(bars):
|
||||
# Kick en 1, 1.75 (el "y" del 2), 3
|
||||
notes.append({'pitch': 36, 'start': bar * 4.0 + 0.0, 'duration': 0.25, 'velocity': 127}) # Beat 1
|
||||
notes.append({'pitch': 36, 'start': bar * 4.0 + 1.75, 'duration': 0.25, 'velocity': 115}) # "Ghost" kick
|
||||
notes.append({'pitch': 36, 'start': bar * 4.0 + 3.0, 'duration': 0.25, 'velocity': 127}) # Beat 3
|
||||
# Snare/Clap en 2 y 4
|
||||
notes.append({'pitch': 40, 'start': bar * 4.0 + 1.0, 'duration': 0.25, 'velocity': 110}) # Beat 2
|
||||
notes.append({'pitch': 40, 'start': bar * 4.0 + 3.75, 'duration': 0.25, 'velocity': 100}) # Anticipo beat 4
|
||||
# Hi-hats cada 1/8 con swing
|
||||
for eighth in range(8):
|
||||
time = bar * 4.0 + eighth * 0.5
|
||||
# Acentos en 1, 2, 3, 4
|
||||
vel = 100 if eighth % 2 == 0 else 80
|
||||
notes.append({'pitch': 42, 'start': time, 'duration': 0.1, 'velocity': vel})
|
||||
|
||||
else: # full
|
||||
notes.extend(self._create_kick_pattern(style, 'standard'))
|
||||
notes.extend(self._create_clap_pattern(style, 'standard'))
|
||||
|
||||
Reference in New Issue
Block a user