Strudelify

lemon tree

Teddy

KeyA♭ majorTempo144 bpm
0:00/0:00
// lemon tree — Teddy
// 144 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "B♭ Trumpet 1" named as a brass, played on trumpet (its slap bass 1 patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/6185028; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 113 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 · trumpet · "B♭ Trumpet 2, 3"
const trumpet = note(`<
  ~@20 A B C D E F@2 G H I J K L M N O@3 P ~ Q R S T ~@3 U V W X W Y Z ~@14 AA AB ~@2 AC AD ~ AE AF AG@2 AH AI AJ AK K L
  M N O@3 P ~ Q R S T ~@2 AL@2 Q R S T ~@9
>`.pickRestart({
  A: "c5", B: "eb5", C: "f5", D: "g5", E: "ab5", F: "[g5 f5@3]/2", G: "eb5 c5", H: "db5", I: "c5 eb5", J: "f5@3 ~",
  K: "~@11 ab4", L: "c5@3 db5@2 eb5@4 ~@2 c5", M: "eb5@2 f5@3 bb4@4 ~@3", N: "ab4@2 ab4 ab4@2 ab4 ab4@2 ab4 ab4@2 bb4",
  O: "[c5@2 eb5@3 c5@4 c5@2 bb4@4 ab4@2 ab4@3 f4@3 bb4@4 ~@2 bb4 bb4@2 bb4 bb4@2 bb4]/3", P: "bb4@2 c5@3 c5@6 ~",
  Q: "[c5,eb5]", R: "[bb4,eb5] [ab4,f5]", S: "[f4,c5]", T: "[g4,c5]@3 ~", U: "~@2 c5", V: "c5 ~@5",
  W: "~@2 c5 db5@2 eb5@3 db5@3 c5", X: "c5@2 f5@3 c5 ~@6", Y: "f5@2 c5@3 bb4 ~@6", Z: "~@3 c5@3 bb4@2 ab4 f4@2 f4",
  AA: "~ f5@2 f5", AB: "f5@5 e5@4 ~@3", AC: "~ eb5@2 eb5", AD: "eb5@5 eb5@4 ~@3", AE: "~@11 c5",
  AF: "c5@2 c5 c5@2 f5@3 f5@3 f5", AG: "[bb4@2 bb4 bb4@2 eb5@4 ~@2 c5@3 c5 c5@2 c5 c5@2 c5 bb4@2 ab4]/2",
  AH: "bb4@3 ab4@2 c5@3 eb5@4", AI: "bb4@2 bb4 bb4@2 ab4 bb4@2 c5 ~@3", AJ: "~@8 bb4 c5@3", AK: "bb4@3 ab4@2 f4@3 ~@4",
  AL: "[~@8 eb5 eb5@2 f5@3 eb5@3 f5@3 eb5@3 ~]/2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet 2, 3" · soft notes
const trumpet_soft = note("<~@43 A B@2 ~@49 A B@2 ~@5 A C@4 D@2 E@3>".pickRestart({
  A: "~@3 [bb4,g5]", B: "[[ab4,f5]@3 [ab4,f5]@2 [ab4,f5]@4 [bb4,db5]@2 [g4,eb5]@4 ~@9]/2",
  C: "[[ab4,f5]@3 [ab4,f5]@2 [ab4,f5]@4 [bb4,db5]@2 [g4,eb5]@3 ~@7 [bb4,g5]@3]/2", // Db Bbm Cm Eb
  D: "[[ab4,f5]@3 [ab4,f5]@2 [ab4,f5]@4 [bb4,db5]@2 [g4,eb5]@4 ~@2 db5 db5@2 db5 db5@2 db5]/2", // Db Bbm Cm
  E: "[db5@2 c5@3 c5@25 ~@6]/3",
})).s("gm_trumpet").gain(0.2)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@76 A B A C D E F G ~@29>".pickRestart({
  A: "f3@3 ~@3 [c4,f4,ab4] ~@5 f3@3 ~@3 [c4,f4,ab4] ~@5", B: "c3@3 ~@3 [c4,eb4,g4] ~@5 c3@3 ~@3 [c4,eb4,g4] ~@5",
  C: "c3@3 ~@3 [c4,eb4,g4] ~@5 c3@6 [b3,eb4,g4] ~@5", D: "bb2 ~ [db4,ab4,bb4] ~ bb2 ~ [db4,ab4,bb4] ~",
  E: "c3@3 ~@3 [eb4,bb4,c5] ~@5 c3@3 ~@3 [eb4,bb4,c5]@6", F: "f3@3 ~@3 [f4,ab4,c5] ~@5 c3@6 [eb3,eb4,g4,c5]@3 ~@3",
  G: "[f3,ab4,c5,f5] ~@7", // Fm
})).s("gm_acoustic_guitar_nylon").gain(0.25)

// chords · electric guitar muted · "Keyboard"
const electric_guitar_muted = note(`<
  A B A C D B E F G B A B A B A H I J K L G B A B A B A H I J K L ~@16 A B A H I J K L G B A B A B A C I J K M ~@45
>`.pickRestart({
  A: "f3@3 ~@3 [c4,f4,ab4] ~@5 f3@3 ~@3 [c4,f4,ab4] ~@5", B: "c3@3 ~@3 [c4,eb4,g4] ~@5 c3@3 ~@3 [c4,eb4,g4] ~@5",
  C: "c3@3 ~@3 [c4,eb4,g4] ~@5 c3@6 [b3,eb4,g4] ~@5, ~@6 b2 ~", // Cm Baug
  D: "bb2@3 ~@3 [bb3,db4,ab4] ~@5 bb2@3 ~@3 [bb3,db4,ab4] ~@5", // Bbm7
  E: "f3@3 ~@3 [c4,f4,ab4] ~@5 c3@6 [c4,eb4,g4] ~@5, ~@6 eb3 ~", F: "[f3,c4,f4,ab4] ~@7",
  G: "f3@3 ~@3 [f4,ab4,c5] ~@5 f3@3 ~@3 [f4,ab4,c5] ~@5", H: "c3@3 ~@3 [c4,eb4,g4] ~@5 c3@6 [b3,eb4,g4] ~@5",
  I: "bb2 ~ [db4,ab4,bb4] ~ bb2 ~ [db4,ab4,bb4] ~", J: "c3@3 ~@3 [eb4,bb4,c5] ~@5 c3@3 ~@3 [eb4,bb4,c5]@6",
  K: "f3@3 ~@3 [f4,ab4,c5] ~@5 c3@6 [eb3,eb4,g4,c5]@3 ~@3", L: "[f3,ab4,c5,f5] ~@7", M: "[f3,ab4,c5,f5] ~@23",
})).s("gm_electric_guitar_muted").gain(0.3)

// chords · string ensemble 1 · Fm Db Fm Gm7 Fm Eb Fm7 Eb
const string_ensemble_1 = note(`<
  ~@68
  [~@3 [f4,ab4,c5]@3 [f4,ab4,db5]@3 [f4,ab4,c5]@2 ~]!2
  [~@3 [f4,ab4,c5]@3 [f4,g4,bb4]@3 [f4,ab4,c5]@2 ~]!2
  [~@3 [eb4,g4,bb4]@3 [eb4,f4,ab4]@3 [eb4,g4,bb4]@2 ~]!2
  ~
  [c5@3 bb4@2 ab4 g4@6]
  ~@37
>`).s("gm_string_ensemble_1").gain(0.25)

// bass · electric bass finger · "Bandoneon"
const bass = note(`<
  A B A C D B E F A B A B A B A G D B E F A B A B A B A G D B E F H I J K L M N O P Q R S T Q U@2 V B A G D B E F A B A
  B A B A G D B E W X Y Z AA AB AC AD AE A B A G D B E F H I J K L M N O P Q R S T Q U@2 P Q R S T AF T AF T AG ~ AH@2
>`.pickRestart({
  A: "f2 ~@3 f2 ~@3", B: "c2 ~@3 c2 ~@3", C: "c2 ~@3 c2@2 b1 ~", D: "bb1 ~@3 bb1 ~@3", E: "f2 ~@3 c2@2 eb2 ~",
  F: "f2 ~@7", G: "c2 ~@3 c2@2 ~@2", H: "ab2 ~ ab2 ~, ab5", I: "g5 eb5, eb2 ~ eb2 ~", J: "f2 ~ f2 ab5, f5@3 ~",
  K: "g5 eb5, c2 ~ c2 ~", L: "db2 ~ db2 ~, db5", M: "eb2 ~ eb2 ~, eb5", N: "ab2 ~ ab2 ~, eb5", O: "eb2 db2 c2 bb1",
  P: "ab2 ~ ab2 ~", Q: "eb2 ~ eb2 ~", R: "f2 ~ f2 ~", S: "c2 ~ c2 ~", T: "db2 ~ db2 ~",
  U: "[ab2@3 ~@3 ab2@3 ~@5 ab5 g5@2 f5 eb5@2 db5 c5@2 bb4, ~@11 bb5@3 ~@10, ~@4 eb2 db2 c2 bb1]/2",
  V: "[f2,c5]@4 ~@8 f2@3 ~@9", W: "f2 ~@2 g2@3 ab2@3 bb2@3 db3@3 c3@3 bb2@3 b2@3",
  X: "c3@3 ~@2 c3 g2@2 ~@4, [f4,ab4,c5] ~", Y: "c3@3 ~@2 c3 g2@3 e2@3, [f4,ab4,c5] ~",
  Z: "f2@3 ~@2 f2 c2@2 ~@3 c2, [f4,ab4,c5] ~", AA: "f2@3 ~@2 f2 g2@3 f2@3, [f4,ab4,c5] ~",
  AB: "eb2@3 ~@2 eb2 bb1@2 ~@4, [eb4,g4,bb4] ~", AC: "eb2@3 ~@2 eb2 g2@3 eb2@3, [eb4,g4,bb4] ~", AD: "ab2 ~@3",
  AE: "c3 e2, g4", AF: "eb2@2 ~ [eb2,bb4]@2 ~ [eb2,bb4]@2 ~@4", AG: "eb2", AH: "[ab1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.2)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  ~@32 A B C D E B A F A B C D E B A G ~@20 H ~ I ~ J ~ K L ~@7 M A B C D E B A F A B C D E B A G A B C D E N E N E O
  P@3
>`.pickRestart({
  A: "ab3 [c4,eb4,ab4] ab3 [c4,eb4,ab4]", B: "eb3 [bb3,eb4,g4] eb3 [bb3,eb4,g4]", C: "f3 [ab3,c4,f4] f3 [ab3,c4,f4]",
  D: "c3 [g3,c4,eb4] c3 [g3,c4,eb4]", E: "db3 [ab3,db4,f4] db3 [ab3,db4,f4]", F: "eb3 [bb3,db4,g4] eb3 [bb3,db4,g4]",
  G: "eb3 [bb3,db4,g4] eb3 [bb3,eb4,g4]", H: "~ f4@7, f3, ~ ab3@23, ~ c4@11", I: "[f3,ab3,c4,f4]",
  J: "~ eb4@7, eb3, ~ g3@23, ~ bb3@11", K: "[eb3,ab3,c4] ~@3", L: "~ [ab3,b3,c4,e4]", M: "[f3,ab3,c4,f4]!4",
  N: "eb3@2 ~ g4@2 ~ g4@2 ~ [g3,c4,eb4]@3", O: "eb3", P: "[[eb3,ab3,c4,eb4]@5 ~]/3",
})).s("gm_acoustic_guitar_steel").gain(0.3)

// bass · tuba
const bass_2 = note(`<
  ~@8 A B A B A B A C D E F G A B A B A B A C D E F G ~@16 A B A C D E F G A B A B A B A C D E F H I J K L M N O P A B A
  C D E F Q ~@29
>`.pickRestart({
  A: "f2@3 ~@9 c2@10 f2@2", B: "c2@3 ~@9 c2@10 eb2@2", C: "c2@3 ~@9 c2@10 b1@2", D: "bb1@3 ~@9 f2@10 eb2@2",
  E: "c2@3 ~@9 g2@10 eb2@2", F: "f2 ~@3 c2@2 eb2 ~", G: "f2 ~@7", H: "f2 ~@2 g2@3 ab2@3 bb2@3 db3@3 c3@3 bb2@3 b2@3",
  I: "c3@3 ~@2 c3 g2@2 ~@4", J: "c3@3 ~@2 c3 g2@3 e2@3", K: "f2@3 ~@2 f2 c2@2 ~@3 c2", L: "f2@3 ~@2 f2 g2@3 f2@3",
  M: "eb2@3 ~@2 eb2 bb1@2 ~@4", N: "eb2@3 ~@2 eb2 g2@3 eb2@3", O: "ab2 ~@3", P: "c2 e2", Q: "f2 ~@3",
})).s("gm_tuba").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@32 A B A B A B A@3 B A B A B A@3 B A B A B@2 ~ A B A B A B A B A@2 C ~ A B A B A B ~ D A B A B A B A E A B A B A B
  A@3 B A B A B A@3 B A B A F A F A F ~@3
>`.pickRestart({
  A: "x ~@5 x ~@4 x", B: "x!2", C: "x ~ x!2", D: "x!4", E: "x ~@2 x", F: "x",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@32 A@7 B A@7 B A@7 ~ A@10 C ~ A@6 ~@2 A@7 ~ A@7 B A@7 B A@5 D A D A ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@5 x ~ x", C: "~ x!3", D: "~@9 x ~ x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@32 A@23 ~ B@11 ~ B@6 ~@2 B@7 ~ A@21 C A C A ~@4>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "~@3 x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@83 [~@9 x ~ x] ~@29>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@7 A ~@24 B ~@7 B ~@7 B ~@6 B@2 ~@10 B@2 ~@7 B ~@7 B ~@7 B ~@7 B ~@12>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@31 A B@23 ~@29 B@21 C B C B ~@4>".pickRestart({
  A: "~@18 x!6", B: "x!4", C: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<A@7 ~ A@11 ~ A@11 ~@52 B ~@25 C D ~@2>".pickRestart({
  A: "~ x ~ x", B: "x ~@2 x ~@2 x ~@4 x", C: "x!12", D: "x",
})).gain(0.2)

// drums · triangle
const triangle = s("triangles:35").struct("<~@55 [~ x] ~@57>").gain(2.59)

stack(
  trumpet, trumpet_soft, acoustic_guitar_nylon, electric_guitar_muted, string_ensemble_1, bass, acoustic_guitar_steel,
  bass_2, kick, snare, hihat, mid_tom, crash, ride, tambourine, triangle
)