Strudelify

Be Young, Be Foolish, Be Happy

Sonia

KeyB♭ majorTempo139 bpm
0:00/0:00
// Be Young, Be Foolish, Be Happy — Sonia
// 139 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(139/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 · synth bass 2
const bass = note(`<
  ~ A B C D A E C F A B C D A E C F G H I J G H I J K L M N O A B C D A E C F G H I J G H I J K L M N O A B C D A E C F
  P Q R S T U V W G H I J G H I J K L M N X Y Z AA AB Y AC AA AD Y Z AA AB Y AC AA AE AF@2
>`.pickRestart({
  A: "eb1@2 ~@4 eb1@2 ~@4 eb1@2 ~@4 eb1 ~ bb1 ~ eb1@2", B: "g1 ~@2 g1 ~@2 g1 ~@2 g1 bb1 g1",
  C: "f1@2 ~@4 f1@2 ~@4 f1@2 ~@4 f1 ~@3 f1@2", D: "bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1 ~ bb1",
  E: "g1@3 ~@3 g1@2 ~@4 g1@2 ~@4 g1@2 bb1@2 g1@2", F: "bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1 ~@2",
  G: "eb1@2 ~@3 eb1@3 bb1 eb1@2 bb1", H: "g1@3 ~@7 g1@6 bb1@2 g1@3 ~ bb1@2", I: "f1 ~ f1 ~ f1 ~ f1@2",
  J: "bb1 ~ bb1 ~ bb1 ~ bb1 ~", K: "f1@7 ~@3 f1@3 ~@3 f1 ~ f1 ~@3 f1@2", L: "g1@7 ~@3 g1@3 ~@3 g1 ~ g1 ~@3 g1 ~",
  M: "f1@7 ~@3 f1@3 ~@3 f1 ~ f1@4 ~@2", N: "bb1@3 ~@3 bb1@2 ~@4 bb1@2 ~@4 bb1@2 ~@4",
  O: "bb1@2 ~@4 bb1@2 ~@4 bb1@2 ~@4 bb1@3 ~@3", P: "gb2@6 ~@4 gb2 ~ gb2@9 ~@3", Q: "gb2@7 ~@3 gb2 ~ gb2@8 ~@4",
  R: "ab2@3 ~ eb2@2 ab2@4 bb2@11 ~@3", S: "ab2@4 eb2@2 ab2@4 bb2@11 ~@3", T: "gb2@7 ~@3 gb2 ~ gb2@10 ~@2",
  U: "gb2@5 ~@5 gb2 ~ gb2@8 ~@4", V: "ab2@3 ~ eb2@2 ab2@2 ~@2 bb2@11 ~@3", W: "bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  X: "c2@2 ~@4 c2@2 ~@4 c2@2 ~@4 c2@3 ~@3", Y: "f1@2 ~@4 f1@2 ~@4 f1@2 ~@4 f1 ~ c2 ~ f1@2",
  Z: "a1 ~@2 a1 ~@2 a1 ~@2 a1 c2 a1", AA: "g1@2 ~@4 g1@2 ~@4 g1@2 ~@4 g1 ~@3 g1@2", AB: "c2 ~@2 c2 ~@2 c2 ~@2 c2 ~ c2",
  AC: "a1@3 ~@3 a1@2 ~@4 a1@2 ~@4 a1@2 c2@2 a1@2", AD: "c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2",
  AE: "c2@2 ~@4 c2@2 ~@5 c2@2 ~@5 c2@3 ~", AF: "[~@4 f1@31 ~@13]/2",
})).s("gm_synth_bass_2").gain(0.49)

// chords · epiano2
const epiano2 = note(`<
  ~ A B C ~ A B C ~ A B C ~ A B C ~ D E F G D E F G H I J K@2 A B C L A B C L D E F G D E F G H I J K@2 A B C ~ A B C
  ~@8 M A B C L A B C L H I J K J N O B ~ N O B ~ N O B ~ N O B ~@3
>`.pickRestart({
  A: "[eb4,g4] ~@7", B: "[d4,g4] ~@7", C: "[c4,f4] ~@7", D: "[eb4,g4]@3 ~@7 [eb4,g4]@3 ~@11",
  E: "[d4,g4]@3 ~@7 [d4,g4]@3 ~@11", F: "[c4,f4]@3 ~@7 [c4,f4]@3 ~@11", G: "[bb3,f4]@3 ~@7 [bb3,f4]@3 ~@11",
  H: "[f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~ [f4,ab4] ~", I: "[g4,bb4] ~ [g4,bb4] ~ [g4,bb4] ~ [g4,bb4] ~",
  J: "[f4,c5] ~ [f4,c5] ~ [f4,c5] ~ [f4,c5] ~", K: "[f4,bb4] ~ [f4,bb4] ~ [f4,bb4] ~ [f4,bb4] ~", L: "[bb3,f4] ~@7",
  M: "[bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~ [bb3,f4] ~", N: "[f4,a4] ~@7", O: "[e4,a4] ~@7",
})).s("gm_epiano2").gain(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C@2 A B C@2 A B C@2 A B C@2 A B C D A B C D E F G H@2 A B C@2 A B C@2 A B C D A B C D E F G H@2 A B C@2 A B C@2
  ~@8 A B C@2 A B C@2 E F G H I J K B@2 J K B@2 J K B@2 J K B L ~@2
>`.pickRestart({
  A: "~@6 [eb4,g4,bb4] ~@11 [eb4,g4,bb4] ~@5", B: "~@6 [d4,g4,bb4] ~@11 [d4,g4,bb4] ~@5",
  C: "~@6 [c4,f4,ab4] ~@11 [c4,f4,ab4] ~@5", D: "~@6 [d4,f4,bb4] ~@11 [d4,f4,bb4] ~@5",
  E: "~@6 [f4,ab4,c5] ~@11 [f4,ab4,c5] ~@5", F: "~@6 [g4,bb4,d5] ~@11 [g4,bb4,d5] ~@5",
  G: "~@6 [ab4,c5,eb5] ~@11 [ab4,c5,eb5] ~@5", H: "[bb4,d5,f5] ~@5 [bb4,d5,f5] ~@5 [bb4,d5,f5] ~@5 [bb4,d5,f5] ~@5",
  I: "[c5,e5,g5] ~@5 [c5,e5,g5] ~@5 [c5,e5,g5] ~@5 [c5,e5,g5] ~@5", J: "~@6 [f4,a4,c5] ~@11 [f4,a4,c5] ~@5",
  K: "~@6 [e4,a4,c5] ~@11 [e4,a4,c5] ~@5", L: "~@3 [d4,g4,bb4] ~@6 [d4,g4,bb4] ~",
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 C D E F@2 A@2 B@2 A@2 B@2 ~ G H ~@2 G H ~ C D E F@2 A@2 B@2 A@2 B@2 ~@7 I A@2
  B@2 A@2 B@2 C D E F J K@2 L@2 K@2 L@2 K@2 L@2 K@2 M@4
>`.pickRestart({
  A: "[[eb4,eb5] [d4,d5], [bb4,bb5]]/2", B: "[[c4,ab4,c5,ab5]@6 [eb4,g4,eb5,g5] [f4,ab4,f5,ab5]]/2", C: "[c4,f4,c5,f5]",
  D: "[d4,g4,d5,g5]", E: "[eb4,ab4,eb5,ab5]@7 ~",
  F: "[bb3,bb4,bb5] ~@2 [bb3,bb4,bb5] ~@2 [bb3,bb4,bb5] ~@2 [bb3,bb4,bb5] ~@2", G: "~ [c4,c5] [bb3,bb4] [g3,g4]",
  H: "[f3,f4]", I: "[bb3,bb4,bb5]@3 ~@3 [bb3,bb4,bb5]@3 ~@3 [bb3,bb4,bb5]@3 ~@3 [bb3,bb4,bb5]@2 ~@4",
  J: "[c4,c5,c6] ~@2 [c4,c5,c6] ~@2 [c4,c5,c6] ~@2 [c4,c5,c6] ~@2", K: "[[f4,f5] [e4,e5], [c5,c6]]/2",
  L: "[[d4,bb4,d5,bb5]@6 [f4,a4,f5,a5] [g4,bb4,g5,bb5]]/2", // Gm F Gm
  M: "[[d4,bb4,d5,bb5]@37 [f4,a4,f5,a5]@7 [g4,bb4,g5,bb5]@7 ~ [f4,f5,f6]@31 ~@13]/4", // Gm F Gm F
})).s("gm_string_ensemble_1").gain(0.4).pan(0.3)

// other · pizzicato strings
const pizzicato_strings = note("<~@20 A B ~@2 A C ~@15 A B ~@2 A C ~@51>".pickRestart({
  A: "~@14 bb4 ~ c5 ~ db5 ~ eb5 ~ f5 ~", B: "eb5 ~@23", C: "c5 ~@23",
})).s("gm_pizzicato_strings").gain(0.4)

// chords · drawbar organ
const drawbar_organ = note("<~@59 A@2 B@2 A@2 C ~@32>".pickRestart({
  A: "[bb4,db5,f5]/2", B: "[bb4,eb5,gb5]/2", C: "[bb4,eb5,gb5]",
})).s("gm_drawbar_organ").gain(0.35)

// other · alto sax
const alto_sax = note("<~@66 A@2 B C@2 D E F@2 ~@23>".pickRestart({
  A: "[~@18 d4 [c4,e4] g4 f4 [a4,bb4] c5@7 bb4@4 g4 ~ bb4@5 ~ g4@3 ~@3]/2", B: "~@4 c5@2 bb4@4 g4@2 bb4@6 g4@3 ~@3",
  C: "[g4@6 ab4@2 g4 ~ ab4@2 bb4@6 g4@4 eb4@18 g4@2 bb4@3 ~ g4 ~]/2", D: "eb5@2 ~@2 eb5@13 ~@4 bb4 g4 ~",
  E: "bb4@4 c5@3 ~@11 g4@2 ab4@2 bb4@2", F: "[g4@2 ab4@2 bb4@2 g4@2 ab4@2 bb4@2 g4@2 ab4@2 bb4@2 d5@3 eb5@12 eb6@15]/2",
})).s("gm_alto_sax").gain(0.7)

// other · clarinet
const clarinet = note(`<
  ~@8 A@3 B C@3 D ~ E F G@2 H I J@2 K L M N O@3 B C@3 D ~ E F G@2 H I J@2 K L M N O@3 B C@3 D ~ P Q R ~ S T U ~@8 V K L
  M N W@3 X Y@3 Z AA@3 X AB AC@2 Z ~@3
>`.pickRestart({
  A: "[~@18 f4 ~@3 g4@9 ~@11 f4 ~@3 g4@4 ~@2 g4 ~@11 f4 ~ g4 ~@3 g4@2]/3", B: "~@4 f4@3 ~@3 eb4 ~ f4@7 ~@5",
  C: "[~@18 f4@3 ~ g4@7 ~@13 f4 ~@3 g4@4 ~@2 g4 ~@11 f4 ~ g4 ~@3 g4@2]/3", D: "~@4 f4@3 ~@3 eb4 ~ f4@12",
  E: "g4@3 ~ bb4@2 g4@3 ~ bb4@5 ~ g4 ~@7", F: "g4@3 ~ bb4@2 ~@4 bb4@7 ~ g4 ~@3 f4 ~",
  G: "[f4@2 ~@2 g4@4 ~@2 f4@4 ~@2 eb4 ~ c4@8 ~@22]/2", H: "g4@2 bb4 ~@2 bb4@6 ~",
  I: "g4@3 ~ bb4@3 ~@3 bb4@8 g4@3 ~ f4 ~", J: "[f4 ~@3 g4@4 ~@2 f4@5 ~ eb4@2 c4@9 ~@13 g4 ~ g4 ~@3 g4@2]/2",
  K: "f4@2 ~@2 f4@3 ~@3 f4@4 ~@2 f4@3 ~@3 f4 ~", L: "g4 ~@3 g4 ~ g4 ~@3 g4@10 ~@2 g4 ~",
  M: "f4 ~@3 f4@3 ~@3 f4@7 ~@5 f4 ~", N: "g4@3 ~ bb4@3 ~@3 bb4@4 ~@2 bb4@8",
  O: "[~@6 c5@4 bb4@8 f4 ~@3 g4@9 ~@11 f4 ~@3 g4@4 ~@2 g4 ~@11 f4 ~ g4 ~@3 g4@2]/3", P: "f4@5 ~ f4@5 ~",
  Q: "f4@10 ~@2 f4@5 eb4@4 db4@3", R: "eb4@2 ~", S: "f4@10 ~@2 f4@9 ~@3", T: "f4@9 ~@3 f4@5 eb4@3 ~ db4@3",
  U: "eb4@7 ~@5", V: "~@16 g4 ~ g4 ~@3 g4@2",
  W: "[~@6 d5@4 c5@8 g4 ~@3 a4@9 ~@11 g4 ~@3 a4@4 ~@2 a4 ~@11 g4 ~ a4 ~@3 a4@2]/3", X: "~@4 g4@3 ~@3 f4 ~ g4@7 ~@5",
  Y: "[~@18 g4@3 ~ a4@7 ~@13 g4 ~@3 a4@4 ~@2 a4 ~@11 g4 ~ a4 ~@3 a4@2]/3", Z: "~@4 g4@3 ~@3 f4 ~ g4@12",
  AA: "[~@18 g4 ~@3 a4@9 ~@11 g4 ~@3 a4@4 ~@2 a4 ~@11 g4 ~ a4 ~@3 a4@2]/3", AB: "~@18 g4@3 ~ a4@2",
  AC: "[~@18 g4 ~@3 a4@4 ~@2 a4 ~@11 g4 ~ a4 ~@3 a4@2]/2",
})).s("gm_clarinet").gain(0.54)

// drums · kick
const kick = s("bd").struct("<~ A@58 B@2 C@2 B@2 C A@29 D E ~>".pickRestart({
  A: "x!2", B: "x ~@4 x!2 ~@5", C: "x ~@4 x ~@6", D: "x ~@12 x ~@10", E: "~ x ~@4",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!65 [x!4] [~ x ~ x]!28 [~@3 x ~@6 x ~] ~@2>").gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<A ~@3 A ~@3 B ~@7 A ~@20 B ~@12 A ~@23 B ~@8 B ~@11 C D ~>".pickRestart({
  A: "~@10 x!2", B: "~@9 x!3", C: "~@20 x ~@2 x", D: "~ x ~@22",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A ~ C B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B D E ~
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~@2", C: "~@11 x", D: "x ~@3 x ~ x ~@4 x ~ x ~@4 x ~ x ~@3",
  E: "~ x ~@2 x ~@19",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@3 A ~@3 B ~@7 A ~@20 B ~@12 A ~@23 B ~@8 B ~@11 A ~@2>".pickRestart({
  A: "~@8 x!2 ~@2", B: "~@7 x!2 ~@3",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@11 x",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<A ~@3 A ~@3 B ~@7 A ~@20 B ~@12 A ~@23 B ~@8 B ~@11 C ~@2>".pickRestart({
  A: "~@6 x!2 ~@4", B: "~ x", C: "~@13 x ~@10",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@2 B@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B@2 A ~@3 A ~@3 A ~@15 A ~@4 A ~@3 A ~@3 A ~@3
  A ~@3 C ~
>`.pickRestart({
  A: "x", B: "x!4", C: "~ x ~@4",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!65 [x!4] [~ x ~ x]!28 [~@3 x ~@6 x ~] ~@2>").gain(0.45)

stack(
  bass, epiano2, electric_guitar_clean, string_ensemble_1, pizzicato_strings, drawbar_organ, alto_sax, clarinet, kick,
  snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine
)

More by Sonia