Strudelify

Jong voor altijd

Gordon

KeyA majorTempo182 bpm
0:00/0:00
// Jong voor altijd — Gordon
// 182 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(182/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · vibraphone
const vibraphone = note(`<
  ~@2 A B C@2 ~@4 A D C@2 E F G ~@17 A D H@2 E F I ~ A D J@2 E K J@2 ~@18 A D L ~ E K M ~ A D N ~@33 A D H@2 E F I ~ A D
  J@2 E K J@2 A D H@2 E F I ~ A D J@2 E K J@2 ~
>`.pickRestart({
  A: "~ a5", B: "b5@8 c#6@7 ~", C: "e6/2", D: "b5 c#6", E: "e6 d6", F: "c#6 b5", G: "e6", H: "[e6@5 ~@3]/2", I: "c#6",
  J: "[e6@19 ~@13]/2", K: "c#6@7 ~ b5@8", L: "e6@11 ~@5", M: "c#6@7 ~", N: "e6 ~",
})).s("gm_vibraphone").gain(0.48)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A@2 B@2 C@2 D A E F G H I J K L M N O P Q@2 R S T@2 U@2 V@2 W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL@3 AM M
  AN O P Q@2 R S T@2 U@2 V@2 W@2 X Y Z AA AB AC AD AO AF AG AH AI AP AQ AR AS AT AU ~@2 AV@2 B@2 AW@2 AX AY M AN O P Q@2
  R S T@2 U@2 V@2 W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AZ@3 Y Z AA AB AC AD AE AF AG AH AI AJ AK BA@2 ~
>`.pickRestart({
  A: "a1", B: "c#2/2", C: "d2", D: "e2", E: "a1@3 ~ a1 ~@3 a1@4 ~@3 a1", F: "~@3 a1 ~@3 a1 a1@6 ~@2",
  G: "c#2 ~@3 c#2 ~@3 c#2@6 ~ c#2", H: "~@3 c#2 ~@3 c#2 c#2@7 ~", I: "d2 ~@3 d2 ~@3 d2@5 ~@2 d2",
  J: "~@3 d2 ~@3 d2 d2@7 ~", K: "e2 ~@3 e2@2 ~@2 e2@6 ~ e1", L: "~@3 e2@3 ~ e1 b1@2 ~@2 b1@2 ~@2, ~@11 e2@2 ~@3",
  M: "f#1 ~@3 f#1@2 ~@2 f#1@5 ~@2 f#1", N: "~@3 f#1 ~@3 f#1 f#1@3 ~ e2@4", O: "d2@2 ~@2 d2@2 ~@2 d2@7 c#2",
  P: "~@3 c#2 ~@3 c#2 c#2@3 ~ c#2@4", Q: "[f#1 ~@3 f#1@2 ~@2 f#1@5 ~@2 f#1@2 ~@2 f#1 ~@3 f#1 f#1@4 e2@4]/2",
  R: "d2@2 ~@2 d2@2 ~@2 d2@3 a1 a#1 b1 ~ c2", S: "c#2!2",
  T: "[b1@2 ~@2 b1@2 ~@2 b1@5 ~@2 b1@2 ~@2 b1@2 ~@2 b1 b1@4 b1 ~@3]/2",
  U: "[g#1@2 ~@2 g#1@2 ~@2 g#1@5 ~@2 c#2@2 ~@2 c#2 ~@3 c#2 c#2@3 ~ c#2@2 ~@2]/2",
  V: "[d2@2 ~@2 d2@2 ~@2 d2@5 ~@2 d2@2 ~@2 d2@2 ~@2 d2 a1@2 ~@2 a1@4]/2",
  W: "[g#1@2 ~@2 g#1@2 ~@2 g#1@6 ~ c#2@2 ~@2 c#2@2 ~@2 c#2 e2@3 ~ e2@3 ~]/2", X: "a1 ~@3 a1 ~@3 a1@5 ~@2 a1",
  Y: "~@3 a1 ~@3 a1 a1@3 ~ a1 ~@3", Z: "c#2@2 ~@2 c#2 ~@3 c#2@5 ~@2 c#2", AA: "~@3 c#2 ~@3 c#2 c#2@3 ~ c#2@2 ~@2",
  AB: "d2@2 ~@2 d2 ~@3 d2@5 ~@2 d2", AC: "~@3 d2 ~@3 d2 d2@2 ~@2 d2 ~@3", AD: "e2 ~@3 e2 ~@3 e2@5 ~@2 e1",
  AE: "~@3 e1 ~@4 f#1@3 ~ e1@4, ~@7 e1@2 ~@7", AF: "a1@2 ~@2 a1 ~@3 a1@4 ~@3 a1", AG: "~@3 a1 ~@3 a1 a1@2 ~@2 a1@2 ~@2",
  AH: "c#2 ~@3 c#2 ~@3 c#2@4 ~@3 c#2", AI: "~@3 c#2 ~@3 c#2 c#2@2 ~@2 c#2@2 ~@2", AJ: "d2@2 ~@2 d2@2 ~@2 d2@5 ~@2 d2",
  AK: "~@3 d2 ~@3 d2 d2@2 ~@2 d2@2 ~@2",
  AL: "[e2 ~@3 e2 ~@3 e1@4 ~@3 e1@2 ~@2 e1@2 ~@2 e1 b1@2 ~ e2 b1 ~@3 e2 ~@6 e3@6 ~@2 e3, ~@31 e1@2 ~@15]/3",
  AM: "e2 ~@6 e3@6 ~@2 e3", AN: "~@3 f#1 ~@3 f#1 f#1@4 e2@4", AO: "~@3 e1 ~@3 e1 f#1@2 ~@2 e1@4", AP: "d2@2 ~@5 d2@8 ~",
  AQ: "d2 ~@6 d2@8 ~", AR: "e2 ~@6 e2@8 ~", AS: "e2 ~@6 e2@7 ~@2", AT: "e3 ~@6 e2@8 ~", AU: "e3 ~@6 e2@7 ~@2",
  AV: "b1/2", AW: "d2/2", AX: "e1@4 e2@4 e1 ~@2 e1 e2@3 e1", AY: "~@4 e2 ~@2 e1 e1@5 ~@3",
  AZ: "[e2 ~@3 e2 ~@3 e1@4 ~@3 e1@2 ~@2 e1@2 ~@2 e1 b1@2 ~ e2 b1 ~@3 a1 ~@3 a1 ~@3 a1@5 ~@2 a1, ~@31 e1@2 ~@15]/3",
  BA: "[e2 ~@3 e2 ~@3 e1@4 ~@3 e1@2 ~@2 e1@2 ~@2 e1 b1@2 ~ e2 b1 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@2 A@2 B@2 C D E F G@2 H@2 I J E K L@2 M N O P M Q R@2 S T U@2 V W G@2 X@2 I D E Y G@2 X@2 I Z E AA AB@2 L@2 M N O P
  M Q R@2 S T U@2 V W G@2 X@2 I D E Y G@2 X@2 I Z E AA AB@2 ~@3 AC@2 AD AE AF AG ~ AH@2 AI AJ AK AL AI N R@2 S T U@2 V W
  G@2 X@2 I D E Y G@2 X@2 I Z E AA G@2 X@2 I D E Y G@2 X@2 I Z E AA ~
>`.pickRestart({
  A: "[c#4 b3, [e3,a3]]/2", B: "[e4@4 ~@3 e4, b3@3 b3, g#3@19 ~ g#3@12, ~@4 e4@3 ~]/2", C: "[b3,e4,g4] [a3,d4,f#4]",
  D: "[a3,c#4,e4] [a3,b3,d4]", E: "[a3,c#4,e4]", F: "[d4,e4,a4]", G: "[c#4@3 b3, [e3,a3]]/2",
  H: "[[g#3,c#4,e4]@3 [g#3,c#4,e4]]/2", I: "[b3,d4,g4] [a3,d4,f#4]", J: "[c#4,e4] [b3,d4], a3", K: "[a3,b3,d4,f#4]",
  L: "[[a3,c#4,e4,g#4]@3 [c#4,f#4,a4,c#5]]/2", M: "[a3,c#4,f#4]@15 ~", N: "[b3,d4,f4,g#4]@15 ~",
  O: "[c#4,f#4,a4,c#5]@15 ~", P: "[e4,e5]@2 c#5 [c#4,a4]", Q: "[d4,f4,g#4,b4]@15 ~",
  R: "[[a3,d4,f#4,b4]@23 ~ [a3,d4,f#4,b4]@7 ~]/2", S: "[g#3,b3,d4,f#4,b4]@13 ~@3", T: "[b3,c#4,f4,g#4,b4], g#3@7 ~",
  U: "[[a3,d4,f#4,b4]@31 ~]/2", V: "[d4,f#4,b4,d5]", W: "[f4,g#4,b4,c#5]@7 ~ [e4,f#4,g#4,b4,d5]@7 ~",
  X: "[[g#3,b3,e4]@31 ~]/2", Y: "[a3,b3,d4,e4]@15 ~", Z: "[a3,d4,e4] [a3,b3,d4]", AA: "[a3,b3,d4,f#4]@7 ~",
  AB: "[d4,f#4,a4,b4] ~@6 [d4,f#4,a4,b4]@7 ~@2", AC: "[[d4,a4]@8 e5@23 ~]/2", AD: "b4 c#5", AE: "f#4", AF: "[f#5,a5]",
  AG: "[b4,d5,f#5,a5]", AH: "[[a3,c#4,e4,g#4]@3 [c#4,f#4,a4]]/2", AI: "[a3,c#4,f#4]", AJ: "[b3,d4,f4,g#4]",
  AK: "[c#4,f#4,a4]", AL: "e5@2 c#5 f#4",
})).s("gm_epiano2").gain(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@6 A B C@2 D E F@2 G H I@3 ~@8 J@2 K L M N O D E P@2 G H Q R D E P@2 S@2 F@2 T U V W@2 X Y@4 Z J@2 K L M N O D E P@2
  G H Q R D E P@2 AA AB F@2 T U ~@10 AC ~ AD ~ AD AE AF@3 J@2 K L M N O D E P@2 G H Q R D E P@2 S@2 F@2 D E P@2 G H Q R
  D E P@2 S@2 F@2 ~
>`.pickRestart({
  A: "[g4,g5] [f#4,f#5]", B: "[e4,e5] [d4,d5]", C: "[e4,e5]/2", D: "~ [a4,a5]", E: "[b4,b5] [c#5,c#6]", F: "[e5,e6]/2",
  G: "[e5,e6] [d5,d6]", H: "[c#5,c#6] [b4,b5]",
  I: "[[e5,e6]@25 [e5,e6] ~ [c#5,c#6] ~ [f#4,f#5] ~ [c#4,c#5]@2 ~@15, ~@14 [a4,a5] [e4,e5] ~@8]/3", // E C# F# C# A E
  J: "[[e4,e5] [d4,d5]@3]/2", K: "[c#4,c#5]", L: "[b3,b4] [c#4,c#5]", M: "[d4,d5]@7 ~ e5@8, ~@7 e4@8 ~",
  N: "[d4,d5] [f#4,f#5]", O: "[g#4,g#5] [b4,b5]", P: "[[e5,e6]@31 ~]/2", Q: "[c#5,c#6]", R: "[b4,b5]",
  S: "[[e5,e6]@8 [d5,d6]@7 ~ c#6@8 [b4,b5]@8, ~@15 c#5@8 ~@9]/2", T: "[e5,e6] ~@5 [e5,e6]@7 ~@3",
  U: "[e5,e6]@3 [f#5,f#6] ~ [e5,e6]@6 ~@5, ~@2 [c#5,c#6] ~@5", V: "[g#3,g#4]@2 [f#3,f#4] [g#3,g#4]",
  W: "[[a3,a4]@7 [c#4,c#5]@8 [f#3,f#4]@17]/2", X: "[g#3,g#4]",
  Y: "[[f#3,f#4]@11 [g#3,g#4]@4 [a3,a4]@8 ~ [c#4,c#5]@7 ~ b4@24 [c#4,c#5]@8, ~@31 b3@24 ~@9]/4", Z: "[d4,d5]",
  AA: "[e5,e6]@3 [d5,d6]@5", AB: "[c#5,c#6]@3 [b4,b5]@5", AC: "[f#5,f#6] ~@6 [g#5,g#6] ~@4 [a5,a6] ~@3",
  AD: "[f#5,f#6]@2 ~@5 [g#5,g#6]@2 ~@3 [a5,a6]@2 ~@2", AE: "~@10 [f#5,f#6] ~ [g#5,g#6]@4",
  AF: "[[a5,a6]@8 [b5,b6]@7 [c#6,c#7]@8 ~ [g#5,g#6] ~@2 [b4,b5] ~ [g#4,g#5] ~ [d4,d5]@2 ~@15, ~@25 [f5,f6]@2 ~@21, ~@13 [c#5,c#6] ~ [f#4,f#5] ~@8]/3", // A B C# G# B G# D F …
})).s("gm_string_ensemble_1").gain(0.35)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@10 A B@2 C D E F@2 ~@14 G H I B@2 J D E K L A B@2 C D E F@2 M ~@15 G H I B@2 J D E K L A B@2 N O P Q R M ~@12 S ~@12
  G H I B@2 J D E K L A B@2 C D E F@2 I B@2 J D E K L A B@2 C D E F@2 ~
>`.pickRestart({
  A: "~@4 [a3,a4]@2 ~@6 [a4,a5]@2 [a4,a5] ~", B: "[~@12 [c#4,c#5]@2 [e4,e5]@6 [c#4,c#5] ~@11]/2",
  C: "~@10 [b3,b4] ~ c#5@4, ~@11 c#4@4 ~", D: "[e4,e5] [d4,d5]", E: "[c#4,c#5] [b3,b4]", F: "[e4,e5]/2", G: "d5 f#5",
  H: "[g#4,g#5]@4 [f#4,g#4,d5,b5]@3 ~", I: "~@2 [a3,a4] ~@5", J: "~@3 [c#4,c#5]", K: "[c#4,c#5]", L: "[b3,b4]",
  M: "~@12 [f#4,a4,b4] ~@3", N: "~@3 c#5", O: "[b4,e5,g5]@5 ~@2 [a4,d5,f#5]@8 ~",
  P: "[a4,c#5,e5]@5 ~@2 [f#4,a4,b4,d5]@7 ~@2", Q: "[e4,a4,c#5]@15 ~", R: "[a4,d5,f#5]@7 ~",
  S: "~@2 [c#5,f#5,a5,c#6]@2 [b4,e5,g#5,b5]@2 [a4,c#5,f#5,a5] ~ [b4,e5,g#5,b5]@2 [a4,c#5,f#5,a5] ~ [f#4,a4,c#5,f#5] ~@3", // F#m E F#m E F#m
})).s("gm_brass_section").gain(0.5).pan(0.8)

// other · brass section · "BRASS 1" · soft notes
const brass_section_soft = note("<~@30 A B ~@18 C D ~@12 A B ~@18 C D ~@22 A B ~@35>".pickRestart({
  A: "b4 c#5", B: "d5 e5", C: "~@12 e5 ~@3", D: "~@12 [f#4,a4,b4,e5] ~@3",
})).s("gm_brass_section").gain(0.3).pan(0.8)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note("<A@2 ~@28 B C D E ~@30 B C D E ~@40 B C D E ~@33>".pickRestart({
  A: "[a3,e4,a4,c#5,a5]/2", B: "d4 c#4", C: "d4 e4", D: "~ f#4, d4", E: "~@8 b4@7 ~, g#4@15 ~",
})).s("gm_pad_sweep").gain(0.3)

// other · pad bowed · "BOWEDGLASS"
const pad_bowed = note("<~@88 A@2 B@2 C ~@52>".pickRestart({
  A: "[c#6@7 d6@5 a6@19 ~]/2", B: "[b5@7 c#6@5 e6@16 ~@4]/2", C: "c#6@7 d6@5 a6@4",
})).s("gm_pad_bowed").gain(0.35)

// chords · pad new age · "FANTASIA"
const pad_new_age = note("<~@88 A@2 B@2 C@2 D@2 ~@49>".pickRestart({
  A: "[[d4,f#4,a4]@31 ~]/2", B: "[c#4,e4,b4]/2", C: "[c#4,f#4,a4]/2", D: "[[e4,b4,d5,f#5]@29 ~@3]/2",
})).s("gm_pad_new_age").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@6 B C B D B D B D B E B D B F B D B F B D B F B D B E B D B F B D B E B D B F B D B E G H B D B F B D B E B D B
  F B D B E B D B F B D B E B D B F G@3 H G H A@2 B F B F B F B E B D B F B D B I B D B F B D B E B D B F B D B I B D B
  F B D B E B D B F B D B E B D B F B D B F ~
>`.pickRestart({
  A: "x", B: "x ~@7 x ~@6 x", C: "~@3 x ~@3 x ~@3 x ~@3 x", D: "~@3 x ~@3 x!2 ~@7", E: "~@3 x ~@4 x ~@6 x",
  F: "~@3 x ~@4 x ~@7", G: "x ~@6 x ~@8", H: "x ~@6 x ~@7 x", I: "~@3 x ~@3 x!2 ~@6 x",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@17 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@9 A ~ A ~ A ~@5 A
  ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@7 x ~@8",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A B@7 C B@7 C B@7 C B@7 C B@7 C D C B@7 C B@7 C B@7 C B@7 C D C ~ E F@7 C B@7 C B@7 C B@7 C B@7 C B@7 C B@7 C ~
>`.pickRestart({
  A: "~@8 x!2 ~@6", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "~@4 x ~@6 x!2 ~@3", E: "~@7 x!3 ~ x!3 ~ x", F: "~ x ~@2",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@2 [~@3 x]!8 [~ x ~ x]!76 [~@3 x]!2 [~ x ~ x]!56 ~>").gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@9 [~@13 x ~@2] ~@135>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@8 B A@6 C B A@6 D B A@6 E B A@6 E B A@6 E F@2 B A@6 E B A@6 E B A@6 E B A@3 G@2 H E F I B A B A@6 E B A@6 J B
  A@6 E B A@6 E B A@6 E B A@6 E B A@6 E ~
>`.pickRestart({
  A: "x!4", B: "~ x!3", C: "~@4 x ~@6 x ~@4", D: "~@4 x ~@2 x ~@3 x ~@4", E: "~@3 x!2 ~@2 x ~@3 x ~@4",
  F: "~@3 x!2 ~@11", G: "~@4 x ~@6 x!2 ~@3", H: "~@4 x ~@2 x ~@3 x!2 ~@3", I: "~@3 x!2 ~@6 x ~@4",
  J: "x ~@2 x!2 ~@2 x ~@3 x ~@4",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@17 [~ x] ~@65 [~ x] ~@61>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@9 [~@3 x] ~@135>").gain(0.35)

// drums · china
const china = s("cr").struct(`<
  ~@2 A ~@5 A@3 ~@6 A@2 ~@6 B A ~@6 B A ~@6 B A ~@6 B C@2 A ~@6 B A ~@6 B A ~@6 B A ~@3 C@3 A C@2 A ~ A ~@6 B A ~@6 B A
  ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B ~
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@6 x ~@8",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@16 ~@16 A@16 ~@18 A@16 ~@2 A@10 ~@16 A@31 B ~>".pickRestart({
  A: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x", B: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3",
})).gain(0.15)

stack(
  vibraphone, bass, epiano2, string_ensemble_1, brass_section, brass_section_soft, pad_sweep, pad_bowed, pad_new_age,
  kick, kick_soft, snare, clap, low_tom, hihat, open_hat, high_tom, china, tambourine
)

More by Gordon