Strudelify

Bamboo Boogaloo

Rainbowdragoneyes

KeyA majorTempo180 bpm
0:00/0:00
// Bamboo Boogaloo — Rainbowdragoneyes
// 180 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5671163; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 152 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(180/4)

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

// other · piano
const piano = note(`<
  ~@4 A ~@3 B ~@6 C D ~@2 E F ~@3 G H I J K L M N G H O J K L M N G H I J K L M N ~@16 P Q P R P Q S ~@9 B ~@6 C D ~@2 E
  F ~@3 G H I J K L M N G H O J K L M N G H I J K L M N ~@16 P Q P R P Q S ~@9
>`.pickRestart({
  A: "~ f#6!3 f#6@11 ~", B: "f#6 ~", C: "~@12 f#5 g#5 b5 c6", D: "c#6!8 ~@8", E: "~@8 c#6!4 b5!4", F: "a5!8 ~@8",
  G: "f#5 c#6 f#6 f#5 c#6 f#6 c#6 e6 f#6 f#5 c#6 f#6 f#5 c#6 f#6 f#5",
  H: "e5 g#5 e5 g#5 a5 g#5 e5 f5 f#5 c#6 f#6 f#5 c#6 f#6 f#5 c#6",
  I: "f#5 c#6 f#6 f#5 c#6 f#6 f#5 a5 b5 c#6 d6 d5 a5 d6 b5 c#6",
  J: "d6 a5 d6 a5 e6 b5 e6 b5 f#5 c#6 f#6 f#5 c#6 f#6 f#5 c#6", K: "d5 a5 d6 d5 a5 d6 a5 c#6 d6 d5 a5 d6 d5 a5 d6 a5",
  L: "e6 c#6 a5 e5 e6 c#6 a5 e5 f#5 c#6 f#6 c#6 f#5 c#6 f#6 c#6",
  M: "d5 d6 f#6 d6 d5 d6 f#6 d6 e5 e6 g#6 e6 e5 e6 g#6 e6",
  N: "d5 d6 f#6 d6 e5 e6 g#6 e6 f#5 f#6 a6 g#6 f#6 g#6 a6 f#6",
  O: "f#5 c#6 f#6 f#5 c#6 f#6 f#5 a5 d5 a5 d6 d5 a5 d6 b5 c#6", P: "~ c#4 ~@2 c#4@2 ~ c#4, f#5@3 f#5@3 f#5@2",
  Q: "~ c#4 ~@2 c#4 ~ f#5@2, f#5@3 f#5@3 ~@2", R: "~@9 e5!7, ~@3 f#5", S: "f#5@3 f#5@3 f#5@2",
})).s("gm_piano").gain(0.3)

// other · piano · soft notes
const piano_soft = note("<~@4 A ~@7 B C ~@34 D E ~@17 F ~@3 G ~@12 B C ~@34 D E ~@17 F ~@3 G ~@8>".pickRestart({
  A: "f#6 ~@15", B: "f#6 ~ f#6 ~ f#6 ~ f#6 ~ f#6 ~ f#6 ~ f#6 ~ f#6 ~", C: "e6 ~ e6 ~ e6 ~ e6 ~ f#6 ~ f#6 ~ f#6 ~@3",
  D: "f#4!2 g#4!2 a4!2 b4!2 c5!2 c#5!2 d5 d#5 e5!2", E: "f#5 ~@15", F: "d5!8 e5 ~@7, f#5@3 f#5@3 ~@2",
  G: "d5!8 e5!8, f#5@3 f#5@3 f#5@2",
})).s("gm_piano").gain(0.2)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  A B C D E F G H A B C D E F G H A B C D E F G H I J K L M N O P Q R S T U V W T I J M X E Y Z AA ~@16 AB@3 AC AB@3 AC
  AB@2 AD@2 AE@2 AF AG A B C D E F G H A B C D E F G H I J K L M N O P Q R S T U V W T I J M X E Y Z AA ~@16 AB@3 AC
  AB@3 AC AB@2 AD@2 AE@2 AF AG
>`.pickRestart({
  A: "f#1 f#2 f#1!2 f#2 f#1!2 f#2", B: "f#1 e2 f#1 e2 f#1 f#2 f#1!2", C: "f#1 f#2 f#1 f#2 e2 f#1!2 e2",
  D: "d2 f#1 e2 f#1!2 f#2!2 f#1", E: "d1 d2 d1!2 d2 d1!2 d2", F: "e2 e1 e2 e1 c#2 c#1 c#2 c#1",
  G: "d1 d2 d1 d2 d1 e2 d1 e2", H: "d1 d2 d#1 e2 f#1 f#2!2 f#1", I: "f#1@2 f#2!2 f#1@2 f#2@2 f#1@2 f#2!2 f#1@2 f#2@2",
  J: "e1@2 e2!2 e1@2 e2@2 f#1@2 f#2!2 f#1@2 f#2@2", K: "f#1@2 f#2!2 f#1@2 f#2@2 e1@2 e2!2 e1@2 e2@2",
  L: "d1@2 d2!2 e1@2 e2@2 f#1@2 f#2!2 f#1@2 f#2@2", M: "d1@2 d2!2 d1@2 d2@2 d1@2 d2!2 d1@2 d2@2",
  N: "e1@2 e2!2 e1@2 e2@2 c#1@2 c#2!2 c#1@2 c#2@2", O: "d1@2 d2!2 d1@2 d2@2 e1@2 e2!2 e1@2 e2@2",
  P: "d1@2 d2!2 e1@2 e2@2 f#1@2 a1@2 g#1@2 e1@2", Q: "f#1!2 f#2 f#1!3 f#2 f#1", R: "e1!2 e2 e1 f#1!2 f#2 f#1",
  S: "f#1!2 f#2 f#1 e1!2 e2 e1", T: "d1!2 d2 d1 f#1!2 f#2 f#1", U: "d1!2 d2 d1!3 d2 d1", V: "e1!2 e2 e1 c#1!2 c#2 c#1",
  W: "d1!2 d2 d1 e1!2 e2 e1", X: "e1@2 e2!2 e1@2 e2@2 g1@2 g2!2 g1@2 g2@2", Y: "e2 e1!2 e2 f#2 e1 a2 f#2",
  Z: "g1 g2 g1!2 g2 g1!2 g2", AA: "e2 e1!7", AB: "f#1!8", AC: "d1!4 e1!4", AD: "d1!8", AE: "a1!8", AF: "e1!8",
  AG: "e1!4 ~@4",
})).s("gm_electric_bass_pick").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B C D E F G H I H I H I H I H I H I H I H J H I H I H I H I@2 H I H I H I H I H I H I H I K L ~@15 H M H N H M H N
  H M H N H M H O H I H I H I H I H I H I H I H J H I H I H I H I@2 H I H I H I H I H I H I H I K L ~@15 H M H N H M H N
  H M H N H M H O
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x!4", C: "x ~ x ~ x!2 ~@2", D: "x ~@4 x ~ x", E: "x ~@5 x ~@3 x ~@3 x!2", F: "x ~@4 x ~@2",
  G: "x ~@7 x!3 ~@3 x ~", H: "x ~@3 x!2 ~@2", I: "x ~@2 x ~ x ~ x", J: "x ~@2 x!3 ~@2", K: "x ~@7 x!4 ~@4",
  L: "~@6 x!2", M: "~ x ~@2 x!2 ~ x", N: "x!2 ~ x ~ x ~@2", O: "~@4 x ~ x!2",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@3 [~@3 x] [~ x ~ x]!3 [~ x ~@2] ~@144>").gain(0.3)

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

// drums · hihat
const hihat = s("hh").struct("<~@48 [x!4 ~@4] ~@71 [x!4 ~@4] ~@31>").gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@23 A B ~@23 C ~@46 A B ~@23 C ~@31>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~@7 x",
})).gain(0.45)

stack(piano, piano_soft, bass, kick, rim, snare, hihat, crash)

More by Rainbowdragoneyes