Strudelify

The Lion Sleeps Tonight

Tokens

KeyF majorTempo140 bpm
0:00/0:00
// The Lion Sleeps Tonight — Tokens
// 140 bpm, 2/2, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · celesta · "part two"
const celesta = note(`<
  A B C@2 A B C@2 D E D F D E D G H I J K L I J K M N M O P Q R S H I J K L I J K M N M T P Q R S A U C@2 A U C@2
>`.pickRestart({
  A: "a3", B: "g4", C: "[c4@2 a3 a3@2 a3 a3@10]/2",
  D: "[c4,f4]@3 [c4,f4] [c4,f4]@3 [c4,f4] [c4,f4]@3 [c4,f4] [c4,f4]@3 [c4,f4]", // F5
  E: "[d4,f4]@3 [d4,f4] [d4,f4]@3 [d4,f4] [d4,f4]@3 [d4,f4] [d4,f4]@3 [d4,f4]", // Dm
  F: "[bb3,e4]@3 [bb3,e4] [bb3,e4]@3 [bb3,e4] [bb3,e4]@3 [bb3,e4] [bb3,e4]@3 [bb3,e4]", // Bbdim
  G: "[bb3,e4]@3 [bb3,e4] [bb3,e4]@3 [bb3,e4] [bb3,e4]@3 [bb3,e4] [bb3,e4]@4", // Bbdim
  H: "[a3,c4]@4 [bb3,d4]@4 [c4,f4]@3 [bb3,d4]@2 [c4,f4]@3", I: "[d4,f4]@4 [c4,f4]@4 [bb3,d4]@3 [bb3,d4]@2 [bb3,d4]@3",
  J: "[c4,f4] [bb3,d4] [a3,c4] [c4,f4]", K: "[bb3,e4]", L: "[f4,a4]@4 [c4,f4]@4 [bb3,d4]@3 [c4,f4]@2 [e4,a4]@3",
  M: "[c4,f4,a4]@3 [c4,f4,a4] [c4,f4,a4]@3 [c4,f4,a4] [c4,f4,a4]@3 [c4,f4,a4] [c4,f4,a4]@3 [c4,f4,a4]", // F
  N: "[d4,f4,bb4]@3 [d4,f4,bb4] [d4,f4,bb4]@3 [d4,f4,bb4] [d4,f4,bb4]@3 [d4,f4,bb4] [d4,f4,bb4]@3 [d4,f4,bb4]", // Bb
  O: "[bb3,e4,g4]@3 [bb3,e4,g4] [bb3,e4,g4]@3 [bb3,e4,g4] [bb3,e4,g4]@3 [bb3,e4,g4] [bb3,e4,g4]@3 [bb3,e4,g4]", // Edim
  P: "~@2 a5 g5 f5 e5 d5 c5", Q: "[d4,bb4]", R: "~@2 a5 g5 f5 e5 d5 db5", S: "[e4,bb4,c5]",
  T: "[bb3,e4,g4]@3 [bb3,e4,g4] [bb3,e4,g4]@3 [bb3,e4,g4] [bb3,e4,g4]@3 [bb3,e4,g4] [bb3,e4,g4]@4", U: "d4",
})).s("gm_celesta").gain(0.32)

// bass · choir aahs · "first bass"
const bass = note(`<
  A B A C A B A C D E D F D E D G H I H C H I H C D E D G H J H K H I H C H I H C D E D G H J H K A B A C ~@4
>`.pickRestart({
  A: "[f2,c3]", B: "[bb2,f3]", C: "c2@2 c3 c3@2 c3 c3@2", D: "f2@2 ~@2 f2@2 ~ f2", E: "bb1@2 ~@2 bb1@2 ~ bb1",
  F: "c2@2 ~@2 c2@2 ~ c2", G: "c2 ~ c2 ~", H: "f2 ~ f2 ~", I: "bb1 ~ bb1 ~", J: "bb2@2 f3 f3@2 f3 f3@2",
  K: "g2@2 c3 c3@2 c3 c3@2",
})).s("gm_synth_bass_1").gain(0.4)

// bass · choir aahs · "first bass" · soft notes · F5 Bb5 F5
const bass_soft = note("<~@52 [[f2,c3]] [[bb2,f3]] [[f2,c3]] [c2@2 c3 f2@2 f2 f2@2]>").s("gm_synth_bass_1").gain(0.16)

// other · woodblock · "percussion"
const woodblock = note(`<
  [bb4 ~@7 bb4 ~@7]!23
  [~@2 e5 ~@3 e5 ~@3 e5 ~@5]
  [bb4 ~@7 bb4 ~@7]!15
  [~@2 e5 ~@3 e5 ~@3 e5 ~@5]
  [bb4 ~@7 bb4 ~@7]!12
  ~@4
>`).s("gm_woodblock").gain(0.48)

// other · woodblock · "percussion" · soft notes
const woodblock_soft = note("<~@52 [bb4 ~@7 bb4 ~@7]!4>").s("gm_woodblock").gain(0.16)

stack(celesta, bass, bass_soft, woodblock, woodblock_soft)