Commit 14331d16 by PLN (Algolia)

feat(copycat): melodic rework — demucs onset analysis, controller mapping

NTO La Clé des Champs algoraoke:
- Bass: dropped to Bb1/F2 (demucs confirmed 58-87Hz range)
- Bass answer: V chord tones A2→C2→F2 (onset analysis, not Eb Db C)
- Answer timing: quarter notes over 2 bars (was 83ms triplets, now 500ms)
- Arp: simplified to <[bf4 f4]*8!6 [ef4 gf4]*8!2> (no note-flip)
- Cello d7: reworked as sustained counter-melody (5ths/3rds), not bass double
- Drums: added sometimesBy knob control (^30 clap flam, ^32 hat roll, ^52 legato)
- d8 breaks: full treatment (^92 ply, ^60 chop mode, ^36/^56 break switch)
- Header: rewritten with demucs spectral evidence and onset analysis data
- SC: s.volume=2 + StageLimiter.activate for output levels
parent bc7af939
......@@ -11,72 +11,81 @@
-- Key: Bb minor (harmonic minor dominant) | Camelot 3A
-- Genre: Deep house / melodic house
--
-- HARMONIC ANALYSIS
-- =================
-- HARMONIC ANALYSIS (chordu.com + demucs htdemucs_6s spectral)
-- =============================================================
-- Key: Bb natural minor (Bb C Db Eb F Gb Ab)
-- with harmonic minor dominant (F major, not Fm → raised 7th = A natural)
-- with harmonic minor dominant (F major → raised 7th = A natural)
--
-- Main chords:
-- Bbm (i) = Bb Db F — tonic, home base
-- F (V) = F A C — dominant (harmonic minor), drives V→i cadences
-- Db (III) = Db F Ab — relative major, appears in extended sections
-- Ebm (iv) = Eb Gb Bb — subdominant minor, tension before resolution
-- Gb (VI) = brief appearances
-- Chords (Bb harmonic minor):
-- i Bbm = Bb Db F — tonic, home base
-- V F = F A C — dominant (harmonic minor), V→i cadence engine
-- III Db = Db F Ab — relative major, extended sections
-- iv Ebm = Eb Gb Bb — subdominant, tension before resolution
-- VI Gb — brief appearances
--
-- Primary vamp: Bbm | F alternating (4 bars each, ~8 seconds)
-- Extended sections introduce Db and Ebm for variation/tension
-- The V→i cadence (F → Bbm) is the main harmonic engine
-- Primary vamp: Bbm | F alternating (2 bars each)
-- Extended: Bbm | F | Bbm | F | Bbm | F | Db | Ebm (16-bar cycle)
--
-- (source: chordu.com chord detection with timestamps)
-- DEMUCS SPECTRAL EVIDENCE (htdemucs_6s, 15s/5s overlap segments)
-- ================================================================
-- Source: ~/Downloads/N'to - La Clé Des Champs [qd_8mm906GA].mp4
--
-- ARRANGEMENT (approx for 6:56 track)
-- ====================================
-- 0:00-1:30 INTRO Filtered pad, atmosphere, gradual reveal
-- 1:30-2:30 BUILD Kick enters (4otf), bass creeps in, hat opens
-- 2:30-3:30 GROOVE Full drums, arpeggio enters, bass locked
-- 3:30-4:30 MAIN All elements, lead melody interplay
-- 4:30-5:30 BREAK Kick drops, pad swells, filter sweep tension
-- 5:30-6:30 CLIMAX Everything returns, peak energy
-- 6:30-6:56 OUTRO Elements strip away, reverb tails
-- BASS stem: 86Hz (F2) dominant across all segments
-- Bb1=58Hz (sub band), F2=87Hz (low band), C2=65Hz (passing tone at 120s)
-- Sub/low ratio shift reveals root movement: high sub% = Bb1, low sub% = F2
-- → Bass sits in Bb1-F2 range, NOT Bb2-F2 (deeper than initially coded)
-- → C2 passing tone at breakdown (seg_0120) = scale degree 2
--
-- ARPEGGIO (from MIDI: Nto- la cle des champs .mid)
-- ==================================================
-- Two-note 16th oscillation — dead simple, magic is in timbre:
-- Bbm: Bf4 ↔ F4 (root + 5th, Bb on downbeats)
-- F: F4 ↔ Bf4 (SAME notes, ORDER FLIPS — F on downbeats)
-- Ebm: Ef4 ↔ Gf4 (root + minor 3rd)
-- Before ~4:30 breakdown: synth widens/brightens (more harmonics,
-- phaser-like) then drops back → fm1/detune/cutoff on faders
-- PIANO stem: enters ~40-50s, peaks ~90-100s
-- 237Hz (Bb3) dominant, 53% low + 47% mid
-- → Rhodes-style chord stabs in Bb3-F4 range (low-mid, not high)
--
-- GUITAR stem (= arp synth, demucs mislabel):
-- 172Hz (F3) dominant, peaks at 100-120s and 250s
-- → Mid-range synth arp, NOT the bass register
--
-- OTHER stem (= pad/atmosphere):
-- 226Hz (~Bb3) dominant early, shifts to 345-560Hz later
-- → Pad evolves: low-mid warmth → brighter harmonics over time
--
-- MIDI TRANSCRIPTION (Nto- la cle des champs .mid)
-- =================================================
-- Arp: Bb4↔F4 16th alternation (Bb on downbeats), same notes over both
-- Bbm and F chords (context changes beneath). Eb4↔Gb4 for Ebm.
-- Note order does NOT flip between chords — Bb stays on top.
-- Kick: Offbeat syncopated pattern (NOT straight 4otf throughout)
--
-- ARRANGEMENT (demucs segment timeline)
-- ======================================
-- 0-10s: Pad only (other stem: Bb3, rms=0.07)
-- 10-30s: Bass enters (86Hz/F2, rms=0.19-0.26), pad continues
-- 30-50s: Arp synth fades in (guitar stem: 172-183Hz), piano first stabs
-- 50-60s: Build (all melodic voices growing)
-- 60-90s: Drums enter big (kick 54Hz/93% sub at 65Hz), full groove
-- 90-120s: Piano peaks (237Hz, rms=0.05), all voices at full
-- 120s: Breakdown — bass drops to C2 (65Hz), arp peaks, drums thin
-- 150s: Piano reprise, mid-frequency evolution
-- 200s+: Climax sections, pad shifts bright (560Hz), full energy
--
-- SOUND DESIGN
-- ============
-- KICK: 808bd sub + clubkick body, 4otf
-- BASS: MiOmi sub (Moog-like FM), melodic through chord tones
-- ARPEGGIO: MiOmi 2-note 16th oscillation, FM/detune/cutoff on faders
-- PAD: MiOmi detuned, generous reverb, slow filter
-- KICK: 54Hz/93% sub (demucs). Deep techno sub-kick, NOT a bright 808
-- BASS: Bb1-F2 sub (58-87Hz). Moog-like, melodic root movement + answer
-- ARPEGGIO: 2-note 16th Bb4↔F4, FM synth. Magic = timbre not notes
-- PIANO: Rhodes stabs, Bb3/F4 area, enters ~40s, peaks at 90s
-- PAD: ~Bb3 warm bed, evolves brighter. Generous reverb, slow filter
-- HATS: h2o velocity-layered, sparse offbeat + flourish
-- CLAP: h2o natural handclap, reverbed
--
-- NTO'S KNOWN GEAR:
-- Moog Subsequent 37, Arturia MicroFreak, Akai APC40 MKII,
-- Novation Impulse 49, DJ Tech Tools MIDI Fighter Twister,
-- Akai MPD218
-- Novation Impulse 49, DJ Tech Tools MIDI Fighter Twister
--
-- PRODUCTION STYLE (from interviews):
-- "I love the 'human side' of electronic music. When the
-- different elements sound autonomous and organic."
-- Process is "really random" — may start from a concept
-- (track, film, photo, emotion) or just experiment.
-- Influences: Stephan Bodzin, James Holden, Paul Kalkbrenner
-- "I love the 'human side' of electronic music."
-- "Deep basses and lysergic harmonies"
-- Often asks real musicians to replay his software melodies
-- for organic feel (e.g. Worakls on keys/guitar)
--
-- SOURCES:
-- chordu.com, tunebat.com, musicstax.com, songbpm.com
-- equipboard.com/pros/n-to
-- deephouseamsterdam.com/interview-nto
-- nexus.radio/news/10-questions-with-dj-and-producer-nto
-- Often asks real musicians to replay software melodies for organic feel
-- Influences: Stephan Bodzin, James Holden, Paul Kalkbrenner
-- ============================================================
do
......@@ -93,8 +102,9 @@ let gM = gMask . gMute
let gM2 = gMask . gMute2
let gM3 = gMask . gMute3
-- Harmonic foundation: 16-bar cycle (each chord = 2 bars)
-- Main Bbm/F vamp with Db/Ebm variation at the end
let rt = slow 2 "<bf3 f3 bf3 f3 bf3 f3 df3 ef3>"
-- Main Bbm/F vamp with Db/Ebm variation
-- Demucs evidence: bass at Bb1(58Hz)/F2(87Hz), C2(65Hz) passing tone at breakdown
let rt = slow 2 "<bf2 f2 bf2 f2 bf2 f2 df2 ef2>" -- root sequence (for d6 piano, pad, etc)
d1 $ gF1 $ gMute2 -- KICK: Deep 4otf house kick
$ midiOn "^42" (<| "k k k <k k*2 k [~ k]>")
$ midiOff "^42" (<| "k")
......@@ -102,41 +112,55 @@ d1 $ gF1 $ gMute2 -- KICK: Deep 4otf house kick
$ "[techno:0,808bd:2,kick:4]"
# gain 1.3
d2 $ gF1 $ gM -- CLAP: h2o natural handclap, reverbed
$ midiOn "^43" (<| "~ cp ~ [cp <~ cp>]")
$ midiOff "^43" (<| "~ cp ~ <~ cp*<1 2>>")
$ midiOn "^43" (<| "~ cp ~ [cp <~ cp>]") -- busy: ghost claps
$ midiOff "^43" (<| "~ cp ~ <~ cp*<1 2>>") -- sparse: classic backbeat
$ sometimesBy "^30" ( -- ^30 mid knob: flam probability
superimpose (("e" <~) . (|* gain 0.7))
)
$ "h2ogmcp"
# room (slow 32 $ range 0.3 0.6 saw)
# sz (slow 32 $ range 0.1 0.45 cosine)
# dry 1
# gain 1.1
# pan 0.55
d3 $ gF1 $ gM -- HATS: h2o sparse offbeat + light flourish
$ midiOn "^76" (ply 2) -- double time on button
$ midiOff "^44" (mask "t(3,8)")
$ midiOn "^76" (stut 3 0.6 "s") -- double time on push button
$ midiOn "^44" (<| "h(4,8,1)") -- state ON: four-on-floor hats
$ midiOff "^44" (mask "t(3,8)") -- state OFF: sparse euclidean
$ sometimesBy "^32" ( -- ^32 mid knob: roll probability
ply "<2!3 [2 4]>"
)
-- n: 0-4 closed Hard→Soft, 5-9 open, 15-19 semi-open
$ "~ h ~ h ~ h ~ <h!3 h*2>"
# "h2ogmhh"
# legato (range 0.1 0.8 "^52") -- ^52 bot knob: hat tightness
# pan 0.42
# n "~ 3 ~ 2 ~ 4 ~ <3!3 [3 6]>" -- occasional open hat flourish
# gain (1.5 * "~ 0.7 ~ 0.8 ~ 0.65 ~ <0.7!3 [0.7 0.5]>")
d4 $ gF2 $ gM3 -- BASS: Sub drone, one root per bar
$ midiOn "^57" (
# gain (1.9 * "~ 0.8 ~ [0.75|0.85] ~ 0.8 ~ <0.9!3 [0.9 0.5]>")
d4 $ gF2 $ gM3 -- BASS: Deep sub Bb1/F2 (demucs: 58-87Hz)
$ midiOn "^57" ( -- state: octave ghost echo
off "e" ((|+ note 12) . (|* gain 0.65) . (# legato 0.3))
) -- octave ghost echo
$ midiOn "^89" (struct "t <t(3,8) t*[2 <2 4>]>") -- Bass goes wild
$ note (rt - 12)
)
$ midiOn "^89" (struct "[t, [~ t t ~. <t(3,8) t*[2 <2 4>]>]]") -- push: wild mode
$ note ( -- V chord answer (A2 C2 F2) at quarter notes — onset analysis confirmed
-- root held 5/8 of 2 bars, then A→C→F (harmonic minor V tones)
-- answer crosses barline: F2 lands on "the one" of next chord
slow 2 $ "<[bf2@5 a2 c2 f2] [f2@5 a2 c2 f2] [bf2@5 a2 c2 f2] [f2@5 f2 c2 c2] [bf2@5 a2 c2 f2] [f2@5 a2 c2 f2] [df2@5 af2 f2 df2] [ef2@5 gf2 ef2 bf1]>"
)
# "bassWarsaw"
# dec 0.3 # sus 0.8
# lpfbus 41 (range 300 900 "^53")
# crushbus 42 (range 16 3 "^33")
# room 0.15
# gain 1.3
d5 $ gF3 $ gM3 -- ARPEGGIO: 2-note 16th oscillation (from MIDI)
d5 $ gF3 $ gM3 -- ARPEGGIO: 2-note 16th oscillation (MIDI confirmed)
$ midiOn "^90" (stut 4 0.5 "e")
$ midiOn "^58" (superimpose ( -- bloom: octave shimmer + pan spread
(|+ note 12) . (|* gain 0.55) . (|+ pan 0.2) . (# room 0.5)
))
$ mask "<t(11,16) t(13,16) t(14,16) t(15,16)>" -- breathes: sparse → full over 4 bars
$ note (
"<[bf4 f4]*8!2 [f4 bf4]*8!2 [bf4 f4]*8!2 [ef4 gf4]*8!2>"
$ sometimesBy (1 - "^18") (mask "<t(11,16) t(13,16) t(14,16) t(15,16)>") -- breathes: sparse → full over 4 bars
$ note ( -- Bb stays on top over both Bbm AND F chords (MIDI evidence)
"<[bf4 f4]*8!6 [ef4 gf4]*8!2>"
)
# "FMRhodes1"
# modIndex (range 0.5 8 "^34")
......@@ -161,30 +185,32 @@ d9 $ gF2 $ gM3 -- PAD: Warm evolving harmonic bed
# pan 0.4
# cut 7
# gain 0.95
zd7 $ gF3 $ gMute3 -- CELLO: Bowed answer phrase + sustained note
$ midiOn "^91" (ply 2) -- doubles for urgency
$ midiOn "^59" (# "[cpluck:6,cpluck:7]") -- pizzicato mode
$ note ( -- held note then descending answer at end of bar (4→3→2)
"<[bf5@5 ~ [ef5 df5 c5] ~] [f5@5 ~ [bf5 af5 gf5] ~] [bf5@5 ~ [ef5 df5 c5] ~] [ef5@5 ~ [af5 gf5 f5] ~]>"
d7 $ gF3 $ gMute3 -- CELLO: Counter-melody, sustained bowed (second melodic voice)
$ midiOn "^91" (ply 2) -- push: doubles for urgency
$ midiOn "^59" ((|* gain 1.2) . (# "[cpluck:6,cpluck:7]")) -- state ON: pizzicato
$ midiOff "^59" (slow 2) -- state OFF: slow bowed, 2-bar phrases
$ note ( -- long tones: 5th/3rd of each chord, counter to arp's 16ths
slow 2 $ "<f3 [a3@7 f3] f3 [c3@7 a3] f3 [a3@7 f3] [af3@7 f3] [gf3@7 ef3]>"
)
# "cbow:2" -- C4 bowed long vibrato
# crushbus 71 (range 16 2.5 "^55") -- ^55 bot knob: grit
# room 0.4 # sz 0.6
# legato 1.2
# legato 2
# pan 0.8
# cut 7
# gain 1.0
d8 $ gF1 $ gM1
$ midiOff "^60" (mask "t(4,8,1)")
$ midiOn "^36" (# "jungle_breaks:74")
$ midiOn "^56" (# "jungle_breaks:19")
d8 $ gF1 $ gM1 -- BREAKS: Full jungle break treatment
$ midiOn "^92" (ply "1 <2!3 4>") -- push: fill/ply
$ midiOff "^60" (mask "t(4,8,1)") -- state OFF: sparse techno mask
$ midiOn "^36" (loopAt 1 . (# "jungle_breaks:74")) -- mid knob: alt break A
$ midiOn "^56" (loopAt 1 . (# "jungle_breaks:19")) -- mid knob: alt break B
$ chop 16
$ loopAt 2
$ "jungle_breaks:42"
# cut 8
# gain 1.5
# room (slow 8 $ range 0 0.3 perlin)
# room (slow 8 $ range 0 0.3 perlin)
# sz 0.05
# octersub 0.5
# delay "[0 0.5]*2"
# pan 0.74
d10 -- RISER: Transition sweeps
$ struct "<~!14 t ~>"
$ "risers:8" # speed 0.25
......
......@@ -174,6 +174,7 @@ s.waitForBoot {
};
};
s.volume = 1;
s.volume = 2; // +6dB — SuperDirt defaults are conservative
StageLimiter.activate; // BatLib safety limiter on master out
s.latency = 0.3; // increase this if you get "late" messages
);
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment