Strudelify

Why

3T

KeyF♯ majorTempo75 bpm
0:00/0:00
// Why — 3T
// 75 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/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.

// bass · electric bass finger
const bass = note(`<
  ~ A B C D B E A F G H I J K L M N G H I J K O P Q A B C D B E A R A B C D B E A F G H I J K O P Q A B C D B E A F S T
  U V S T W X A B C D B E A F A Y H Z@2 ~@2
>`.pickRestart({
  A: "f#1@3 f#1 f#1@4", B: "g#1@3 g#1 g#1@4", C: "a#1@5 ~ a#1@2 a#1@6 c#2@2", D: "d#2@7 c#2 d#2 a#1 d#1@6",
  E: "g1@3 g1 g1@4", F: "c#2@6 c#2@2 c#1 ~@7", G: "c#2@3 c#2 c#2@4", H: "f#1@5 ~ f#1@2 f#1@8", I: "c#2@6 c#2 ~ c#2@8",
  J: "f#1@6 f#1@2 f#1@5 g#1 f#1@2", K: "b1@3 b1 b1@4", L: "e2@3 e2 e2@4", M: "a#1@3 a#1 a1@4",
  N: "g#1@3 g#1 c#2@2 c#1@2", O: "e2@6 e2@2 e2@6 a#1 d#2", P: "g#1@2 ~@4 a#1 ~@9", Q: "c#2@2 c#1@2 c#2 ~@3",
  R: "c#2@3 c#2 c#1@4", S: "b1@3 b2@3 b1@2", T: "a#1@3 a#2@3 a#1@2", U: "d2@3 d1@3 d2@2", V: "d#2@5 ~ d#2@6 d#2 a#1@3",
  W: "g#1@6 g#1@5 ~ g#1@4", X: "c#2@4 c#2@2 ~ c#2!2 ~@3 c#1@4", Y: "f#1@6 f#1@2 f#1@7 ~", Z: "f#1/2",
})).s("gm_electric_bass_finger").gain(0.66)

// chords · epiano2
const epiano2 = note(`<
  ~ A B C D E F A G H I H I J K L M N I H I J K O P A B C D E F A Q A B C D E F A G H I H I J K O P A B C D E F A G R S
  T U V W X Y A B C D E F A G Z AA AB AC@3 ~
>`.pickRestart({
  A: "[f#3,g#3,a#3,c#4]@10 [f#3,g#3,a#3,c#4]@5 ~", B: "[f#3,g#3,b3,d4]@5 [f#3,g#3,b3,d4]@3",
  C: "[g#3,a#3,c#4,d#4]@5 [g#3,a#3,c#4,d#4]@3", D: "[g#3,a#3,c#4,e4]@8 [g3,a#3,d#4]@7 ~",
  E: "[g#3,a#3,b3,d#4]@9 ~ [g#3,a#3,b3,d#4]@6", F: "[g3,a3,b3,d4]@5 [g3,a3,b3,d4]@3",
  G: "[f#3,b3,c#4]@4 [b3,d#4,f#4] ~@3", H: "[g#3,b3,e4]", I: "[f#3,g#3,a#3,c#4]", J: "[a#3,d#4,f#4]",
  K: "[b3,d4,f#4]@15 ~", L: "g#3@8 g3@7 ~, c#4@15 ~", M: "[f#3,g#3,b3,c#4] [g#3,b3,d#4]", N: "e4",
  O: "[f#3,b3] ~@5 [g#3,c#4,f4]@2 ~@8, d#4 ~@7", P: "d#4@2 d#4@2 [b3,d#4,f#4] ~@3, [b3,f#4] ~",
  Q: "[f#3,b3,c#4] [b3,d#4,f#4]", R: "[f#3,b3,d#4] [g#3,c#4,f4]", S: "f4 f#4, [g#3,c#4]", T: "[b3,d4,g#4] [b3,f4,g#4]",
  U: "[a#3,c#4,f#4]@7 ~ [a#3,c#4,f#4]@8", V: "[f#3,b3,d#4]@8 [g#3,c#4,f4]@7 ~", W: "[a#3,c#4,f4] [a#3,c#4,f#4]",
  X: "[c4,d#4,f#4]@15 ~", Y: "[b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@2 [b3,f#4] ~@7, ~@4 d#4 ~@3", Z: "[f#3,g#3,a#3,c#4]@7 ~",
  AA: "[f#3,g#3,a#3]@13 ~@3", AB: "[f#3,a#3,c#4]@3 ~", AC: "[[a#3,c#4,f#4]@11 ~@5]/3",
})).s("gm_epiano2").gain(0.41)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A@2 B@2 C@2 D@2 E F E F G@2 H I E J K L@3 M N A@2 B@2 C@2 O@2 P@6 D@2 E J K L@3 M N P@6 Q@2 R@3 S T@2 U@2 P@6 V@4
  W@4 ~
>`.pickRestart({
  A: "[[a#3,c#4]@8 ~@5 f#4@3, [f#3,g#3], ~ [b3,d4]]/2", B: "[d#4@16 e4@8 [g3,a#3,d#4]@7 ~, [g#3,a#3,c#4]@3 ~]/2",
  C: "[[g#3,d#4,a#4]@4 ~@3 d5, b3, ~ [g3,d4,a4]]/2", // G#sus2 Gsus2
  D: "[~@6 g#5@2 [b3,f#4,f#5]@4 f#5 ~@3, [c#4,c#5]@25 ~@7, [f#3,a#3,g#4] ~]/2", E: "[b3,e4]", F: "[g#3,a#3,c#4]",
  G: "[d#4 d4, f#4]/2", H: "g#3 g3, c#4", I: "[g#3,c#4]@6 [g#3,c#4,d#4]@9 ~", J: "[g#3,a#3,c#4,f#4]", K: "[b3,e4,g#4]",
  L: "[[g#3,a#3,c#4] d#4 d4, a#4@2 ~, ~ f#4@2]/3", M: "[f#3,b3] ~@5 [g#3,c#4,f4]@2 ~@8, d#4 ~@7",
  N: "[d#4,f#4]@2 ~@2 f#4 ~@3, [c#3,b3]@5 ~@3, ~@4 [c#2,d#4]@7 ~@5", // D#m C#7 C#sus2
  O: "[~@6 g#5@2 ~@5 a#4 b4 d#5, c#4, c#5@25 ~@7, [f#3,a#3,g#4] [b3,f#4,f#5]]/2", // F# B5
  P: "[[a#3,c#4]@16 ~@10 f#4@6 ~@8 d#5@8 [e4,e5]@8 [g3,a#3,d#4]@7 ~@13 a#5@4 a5@9 ~@3 d5@4, c#5@5 ~@2 d#5@3 ~@2, [f#3,g#3]@4 [g#3,a#3,c#4]@3 ~ b3@4, ~ [b3,d4,b4] d#4 ~ [g#3,d#4,a#4] [g3,d4,a4]]/6", // A#m E D# F#sus2 A#m7 Bm G#sus2 Gsus2
  Q: "[~@6 g#5@2 [b3,f#4,f#5]@4 f#5 [g#3,g#4] [a#3,a#4] [c#4,c#5], [c#4,c#5]@25 ~@7, [f#3,a#3,g#4] ~]/2", // B5 G# A# C# F#
  R: "[~@4 d#4@2 ~@3 f#4@2 ~@6 f#4 f4 f#4 f4 f#4 f4 f#4, [b2,b3] [a#2,a#3] [d3,b3], [f#4,b4,d#5]@8 ~@4 f4@7 ~@29, ~@2 c#4@6 ~@3 c#4@6 ~@7]/3", // B A# G B
  S: "[d#3,a#3,d#4]", // D#5
  T: "[~@8 d#4@4 ~@14 c#5@3 [f#4,f#5]@3, [b2,b3] [a#2,g#3], ~@4 c#4@21 ~ c#4@6, ~@6 f4@5 f#4@3 ~@2]/2", // F# B A#7
  U: "[[d#4,f4,f5]@6 d#5@10 [b3,c#4,f#4,a#4,c#5]@9 ~@7, [g#3,c4] ~, ~@6 d#4@19 ~@7]/2", // D#sus2 F# G#
  V: "[~@12 g#5@4 [b3,f#4,f#5]@8 a#5@5 ~@3 [c#5,c#6]@8 [c4,c5]@8 g#4@8 a#3@8, [c#4,c#5]@25 ~@7 [f#2,c#4]@32, [f#3,a#3,g#4]@2 ~ a#4@5, ~@32 a#3@23 ~@9, ~@32 g#3@15 ~ g#3@16]/4", // B5 C# C C# F#5 F#
  W: "[c#5 [c4,c5] [g#3,g#4,c#5]@6, [f#2,a#3,c#4], g#3@15 ~@49]/4", // C C#5 F#
})).s("gm_synth_strings_1").gain(0.33)

// other · piccolo
const piccolo = note("<~@40 A B C B D E F ~@33>".pickRestart({
  A: "~@2 c#4 d#4", B: "e4@5 d#4 c#4 b3", C: "c#4@11 ~ c#4@2 d#4@2", D: "c#4@11 ~@3 a#3@2", E: "d#4@6 ~ b3",
  F: "d4@3 ~",
})).s("gm_piccolo").gain(0.58)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!75 x ~@3>").gain(0.8)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!75 ~@4>").gain(0.8)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A B@2 ~ A B C ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B@2 ~ A B C ~ A B@2 ~ A B@2 ~ A B@2 ~ A B C ~ A
  B@2 ~ A B C ~ A B@2 ~ A B C ~ A B ~@4
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~@3 x ~@6", C: "~@5 x ~@10",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B@2 C A B@2 D B@16 A B@2 C A B@2 D A B@2 C A B@2 D B@8 A B@2 C A B@2 D A B@2 C A B@2 D A B@2 C A B@2 D A B@2 ~@4
>`.pickRestart({
  A: "~@2 x ~@11 x!2", B: "~ x ~@6", C: "~ x ~@5 x", D: "~ x ~@4 x ~",
})).gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@4 A ~@23 A ~@7 A ~@15 A ~@7 A ~@7 A ~@11>".pickRestart({
  A: "~@15 x",
})).gain(0.16)

// drums · crash
const crash = s("cr").struct("<~ A ~@23 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@2 A ~@3>".pickRestart({
  A: "x",
})).gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@7 B A@31 B A@15 B A@7 B A@7 B A@3 ~@4>".pickRestart({
  A: "~@9 x!4 ~@3", B: "~@3 x",
})).gain(0.4)

// drums · bongos
const bongos = s("bongo:18").struct("<~ A@7 B A@7 B A@7 B A@15 B A@7 B A@7 B A@7 B A@7 B A@3 ~@4>".pickRestart({
  A: "~@7 x ~@2 x ~@5", B: "~@7 x ~@8",
})).gain(1.05)

// drums · congas
const congas = s("conga:18").struct(`<
  A ~ B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~ B ~ B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3
  B ~ B ~ B ~@3 B ~@5
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@12 x!2 ~@2",
})).gain(1.54)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  A ~ B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~ B ~ B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3
  B ~ B ~ B ~@3 B ~@5
>`.pickRestart({
  A: "~@7 x", B: "~@11 x ~@2 x ~",
})).gain(1.54)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~
  [~@3 x ~ x ~@10]!8
  [~@3 x ~ x!2 ~@8 x]!16
  [~@3 x ~ x ~@10]!16
  [~@3 x ~ x!2 ~@8 x]!8
  [~@3 x ~ x ~@10]!27
  ~@4
>`).gain(3.48)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~ [~ x ~ x]!75 ~@4>").gain(3.48)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<A ~@23 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@2 A ~@4>".pickRestart({
  A: "~@5 x ~@2",
})).gain(1.91)

stack(
  bass, epiano2, synth_strings_1, piccolo, kick, rim, hihat, hihat_soft, open_hat, open_hat_soft, crash, tambourine,
  bongos, congas, congas_2, triangle, triangle_2, bell_tree
)

More by 3T