Strudelify

Flight of the Bumblebee

Orignal by Nikolai Rimsky-Korsakov

KeyA majorTempo150 bpm
0:00/0:00
// Flight of the Bumblebee — Orignal by Nikolai Rimsky-Korsakov
// 150 bpm, 2/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5735314; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/2)

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

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  A@2 B C D E F@2 G H G H F I F J K L K L M N M O P Q R S T@2 U@2 V W X Y Z@2 AA@2 AB AC AD AE D AF AG@2 AH AI AJ AK AL
  AM AN AM AO AP AQ AR AS@2 AT AS D AU D AV AW AX AW AX AY AZ BA BB AT AS AT AS BC AD AQ AG BC AD AQ BD BE AD AQ BF AY
  BG AY BG BH BI BJ BK BL AQ BM AV BN BO BP
>`.pickRestart({
  A: "f4 ~@3", B: "e4 d#4 d4 c#4 d4 c#4 c4 b3", C: "c4 b3 a#3 a3 g#3 g3 f#3 f3", D: "e3 d#3 d3 c#3 d3 c#3 c3 b2",
  E: "c3 b2 a#2 a2 g#2 g2 f#2 f2", F: "e2 d#2 d2 c#2 d2 c#2 c2 b1", G: "e2 d#2 d2 c#2 c2 f2 e2 d#2",
  H: "e2 d#2 d2 c#2 c2 c#2 d2 d#2", I: "c2 c#2 d2 d#2 e2 f2 e2 d#2", J: "c2 c#2 d2 d#2 e2 f#2 g2 g#2",
  K: "a2 g#2 g2 f#2 f2 a#2 a2 g#2", L: "a2 g#2 g2 f#2 f2!2 g2 g#2", M: "a2 g#2 g2 f#2 g2 f#2 f2 e2",
  N: "f2 f#2 g2 g#2 a2 a#2 a2 g#2", O: "f2 f#2 g2 g#2 a2 a#2 a2 g2", P: "a2!4 ~@2 a2@2", Q: "a#2", R: "a2 ~ a1@2 a2@4",
  S: "a#2 c3", T: "a2 a#2 a2 g#2 a2 a#2 a2 g#2", U: "a2 a#2 b2 c3 c#3 c3 b2 a#2", V: "a2!2 ~ d2",
  W: "d#2@2 d#3@2 d#2!2 d#3@2 d#2@2 d#3@2 d#2!2 d#3@2", X: "d3 ~ d2@2 d3@4", Y: "d#3 d3",
  Z: "d3 d#3 d3 c#3 d3 d#3 d3 c#3", AA: "d3 d#3 e3 f3 f#3 f3 e3 d#3", AB: "d3 c#3 c3 b2 a#2 d#3 d3 c#3",
  AC: "d3 c#3 c3 b2 a#2 b2 c3 c#3", AD: "d3 c#3 c3 b2 c3 b2 a#2 a2", AE: "a#2 b2 c3 c#3 c3 c#3 d3 d#3",
  AF: "c3 b2 a#2 a2 g#2 g3 f#3 f3", AG: "e3 f3 e3 d#3 e3 f3 e3 d#3", AH: "e3 f3 e3 d#3 ~ f2 e2 d#2",
  AI: "e2 f2 e2 d#2 e2 f2 e2 d#2", AJ: "~ d#2 d2 c#2 d2 c#2 c2 b1", AK: "c2 b1 a#1 a1 g#1 g1 f#1 f1",
  AL: "~@4 e3!2 c3 ~", AM: "a2 ~ f2 ~ a2 ~ c3 ~", AN: "e3@4 e3!2 c3 ~", AO: "e1 f1 f#1 g1 g#1 a1 a#1 b1",
  AP: "c2 c#2 d2 d#2 e2 f2 f#2 g2", AQ: "g#2 a2 a#2 b2 c3 c#3 d3 d#3", AR: "e3 f3 e3 d#3 e3@4",
  AS: "e3 d#3 d3 c#3 c3 c#3 d3 d#3", AT: "e3 d#3 d3 c#3 c3 f3 e3 d#3", AU: "c3 c#3 d3 d#3 e3 f3 e3 d#3",
  AV: "c3 c#3 d3 d#3 e3 f#3 g3 g#3", AW: "a3 g#3 g3 f#3 f3 a#3 a3 g#3", AX: "a3 g#3 g3 f#3 f3!2 g3 g#3",
  AY: "a3 g#3 g3 f#3 g3 f#3 f3 e3", AZ: "f3 f#3 g3 g#3 a3 a#3 a3 g#3", BA: "a3 g#3 g3 f#3 f3 f#3 g3 g#2",
  BB: "a2 b2 c3 d3 e3 f3 e3 d#3", BC: "e3 ~ g#2 a2 a#2 b2 c3 c#3", BD: "e3 f3 e3 d#3 e3 f3 e3 d3",
  BE: "e3 ~ g#2 a2 a#2 c3!2 c#3", BF: "e3 f3 e3 d#3 e3 f#3 g3 g#3", BG: "f3 e3 d#3 d3 c#3 c3 b2 a#2",
  BH: "a2 a#2 a2 g#2@5", BI: "a2!2 b2 a2 c3 a2 d3 a2", BJ: "e3 f3 e3 d#3@5", BK: "e3!2 f#3 e3 g3 e3 g#3 e3",
  BL: "a1 b1 c2 d2 e2 f2 f#2 g2", BM: "e2 f2 f#2 g2 g#2 a2 a#2 b2", BN: "a3 ~@7", BO: "a2 ~@3", BP: "a1 ~@3",
})).s("gm_electric_bass_finger").gain(0.29)

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

// drums · rim
const rim = s("rim").struct("<~@16 A@7 B ~@12 A@16 ~@4 A@4 ~@16 A@20 ~ A ~ A@5 ~@3>".pickRestart({
  A: "~ x", B: "~@4 x!4",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~ A B C ~@4 D C E F ~@37 G ~ G ~@9 E ~ H ~@28 G ~ G ~@8>".pickRestart({
  A: "~@7 x", B: "x!4", C: "x", D: "~@2 x!3 ~ x ~", E: "~ x ~ x", F: "x!4 ~@2 x ~", G: "~ x ~@2", H: "~ x!2 ~",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@16 A B@3 A B@2 C ~@12 A B@23 ~@16 A B@19 ~ B ~ B@5 ~@3>".pickRestart({
  A: "~ x", B: "x!2", C: "x",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A B A B ~ C D E D C ~ D F@2 ~@36 G H G H ~@4 D E D C D F D ~@29 I ~ I ~@8
>`.pickRestart({
  A: "x!8", B: "x!4 ~ x!2 ~", C: "~ x!2 ~", D: "~@3 x ~@2 x ~", E: "~ x!3", F: "~ x", G: "~@3 x", H: "x ~ x!2",
  I: "x!2 ~ x ~@4",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@68 [~ x] [x!2]!3 [~ x] [x!2]!3 ~@31>").gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~ A ~ B C ~ C ~@2 C ~@38 A ~ D ~@5 C ~ C ~ C ~ C ~@40>".pickRestart({
  A: "~ x", B: "~@3 x", C: "x", D: "x!2",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<A@3 ~ A ~@11 A ~@3 A ~@3 A@3 B A@3 B A@3 B A ~@31 A ~@3 A ~@3 A ~@27 A@3>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.2)

stack(bass, kick, rim, low_tom, hihat, mid_tom, open_hat, high_tom, crash)