Strudelify

Baby Shark

Otus

KeyF majorTempo200 bpm
0:00/0:00
// Baby Shark — Otus
// 200 bpm, 2/2, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/2 at bar 1, 2/2 at bar 2, 1/2 at bar 34) are rendered on a constant 2/2 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6308302; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 34 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(200/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.

// chords · epiano1 · "Grand Piano"
const epiano1 = note("<~ A ~ B C D@2 E F G@2 H I J K L M N O P Q R S T U V@2 H W X@2 Y Z@2>".pickRestart({
  A: "~@2 [f2,c3,a3,f4]@5 ~ [g2,bb3,f4]@4 [ab2,b3,f4]@2 [a2,c4,f4]@2", // F Gm7 Fdim F
  B: "~@2 [a2,c4,f4]@5 ~ [ab2,b3,f4]@4 [g2,bb3,f4]@2 [f2,a3,f4]@2", C: "~@6 [f2,eb3,a3,d4,g4]@5 ~ [f2,eb3,a3,d4,f4]@4",
  D: "[~@2 [bb2,f3,d4,bb4]@5 ~ [c3,eb4,bb4]@4 [db3,e4,bb4]@2 [f4,bb4]@2 ~@2 d2@5 ~ [eb2,bb2,f3,d4,f4,a4,c5]@8, ~@7 d3@2 ~@7]/2", // Bb Cm7 Bbdim Bb5 Dm7
  E: "[e2,b2,g3,b3,d4,gb4,a4] [bb2,g3,bb3,db4,gb4,a4]", F: "[a2,g3,b3,db4,f4,a4] [eb2,bb2,g3,db4,f4,a4]",
  G: "[~@6 [d2,a2,e3,f3,a3,c4,d4]@8 [eb2,bb2,f3,g3,bb3,db4,f4]@9 ~@9]/2", // Dm7 Eb7
  H: "[d2,a2,f3,a3,c4,d4,f4] [ab2,gb3,ab3,c4,d4,f4]", I: "[g2,f3,a3,b3,d4,f4]@4 ~@3 d2",
  J: "~ [a3,bb3,d4,f4] a2@2 bb2@2 b2@2, g2 ~ [a3,bb3,d4,f4]@2", // Bbmaj7
  K: "~ [bb3,d4,gb4,a4] c2@2 c3@2 gb2@2, c3 ~ [bb3,d4,gb4,a4]@2", // D
  L: "~ [a3,c4,d4,f4] a2@2 c3@2 d3@2, f2 ~ [a3,c4,d4,f4]@2", M: "~ [a3,d4,f4] d3@2 [c3,a3,d4,g4]@2 [a2,f4]@2, eb3 ~@3",
  N: "ab4 g4 f4 d4 [f3,f4]@2 ab4 g4, bb2 d3 ~ g3", O: "f4 d4 [g3,f4]@2 [f3,g4]@2 [bb2,f4]@2, ab3 ~@3",
  P: "d4 [a3,c4,d4] a2@2 c3@2 d3@2, f2 ~ [a3,c4,d4,f4]@2", // D7 Dm7
  Q: "[eb3,a3,c4,d4,f4]@2 ~ [a3,c4,d4,f4] c3@2 [f2,a3,c4,d4,f4] gb2, ~ d3 ~@2", // Dm7
  R: "ab4 g4 f4 d4 [d3,f4]@2 ab4 g4, g2 b2 ~ e3", // Dm
  S: "f4@2 d4@2 [d3,f4]@4 [b2,a4]@3 ~@2 b4@3, f3@4 ~@7 bb4@3 ~@2, ~@3 g2", // Dm B7
  T: "c5@3 [c2,c3,e3,c4]@2 [c2,c3,e3,c4]@3 [c2,c3,e3,c4]@3 [d2,f3,c4]@2 [eb2,gb3,c4]@3", // C Dm7 Cdim
  U: "[e2,g3,db4] [a1,a2,g3,bb3,db4,e4]", V: "[~@6 [d2,a2,d3,f3,a3,c4,d4]@8 [db2,ab2,eb3,f3,ab3,c4,eb4]@9 ~@9]/2",
  W: "[g2,f3,a3,b3,d4,f4] ~", // G7
  X: "[f4@2 f4@2 f4@2 f4 [c2,c3,f4]@2 [a2,a4] [bb2,bb4] [b2,b4] [c3,c5] [c2,c4] [bb2,bb4] [ab2,a4]]/2", // F5 A Bb B C Bb Amaj7
  Y: "[f2,f4] ~@3 [f2,c3,a3,f4] ~@3", // F
  Z: "[[g2,bb3,f4] ~@2 [ab2,b3,f4] ~ [a2,c4,f4] ~ [f4,a4,c5,f5]@2 ~ [f1,f2]@2 ~@4]/2", // Gm7 Fdim F
})).s("gm_epiano1").gain(0.27)

// bass · fretless bass · "Acoustic Bass"
const bass = note("<~ A B C D E@2 F G H@2 I J K L M N O P Q R S T U V W@2 X Y Z@2 AA AB AC>".pickRestart({
  A: "~ f2@3 g2@2 ab2 a2", B: "~@3 c3@3 c2@2", C: "~ a2@3 ab2@2 g2 f2", D: "~@3 f2@3 f1@2",
  E: "[~ bb1@3 c2@2 db2 d2@2 d2@3 eb2@2 g2@2]/2", F: "a2 e2", G: "db2 a1", H: "[~@3 d2@4 eb2@5 ~@4]/2",
  I: "~@3 d2 ab1@4", J: "g1@4 ~@3 d2", K: "g2 a2 bb2 b2", L: "c3 c2 c3 gb2", M: "f2 a2 c3 d3", N: "eb3 d3 c3 a1",
  O: "bb1 d2 f2 g2", P: "ab2 g2 f2 bb1", Q: "f1 a1 c2 d2", R: "eb2@2 d2@2 c2@2 f1 gb1", S: "g1 b1 d2 e2",
  T: "f2 d2 b1 g1", U: "~ c2 d2 eb2", V: "e2@4 a1 db2@3", W: "[~@3 d2@4 db2@5 ~@4]/2", X: "c2 ab1", Y: "g1 ~",
  Z: "[~@7 c2@2 a1 bb1 b1 c2 c3 bb2 ab2]/2", AA: "f2 ~@3 f1 ~@3", AB: "g2 ~@2 ab2 ~ a2 ~ f2", AC: "~ f1 ~@2",
})).s("gm_fretless_bass").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~ A@11 B C@3 D C@6 ~ E F C@3 G H A@2 I>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@2 x!2 ~@2 x!2", D: "~@2 x!2 ~@2 x ~", E: "~@2 x ~ x ~ x!2",
  F: "~@3 x ~@2 x!2", G: "~@2 x!2 ~@4", H: "x ~@2 x", I: "~ x ~@2",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@13 A@4 B A@5 ~@2 B A@3 C ~@3 D>".pickRestart({
  A: "x!2", B: "~ x", C: "x ~@3 x ~ x!2", D: "x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@17 [~ x ~ x]!6 [~ x ~@2] ~@6 [~@5 x ~@2] ~@3>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@17 A ~@5 A ~ B C@4 D ~@3>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~ x", D: "x ~@2 x!2 ~ x!2",
})).gain(0.3)

// drums · china
const china = s("cr").struct("<~@16 A ~@6 B C D ~@5 C ~@2>".pickRestart({
  A: "~@7 x", B: "~@8 x ~@2 x ~ x!3", C: "x", D: "~ x ~@2",
})).gain(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@31 [~ x] ~@2>").gain(1.51)

// drums · shaker
const shaker = s("sh").struct("<~@14 [~ x ~ x] [~@3 x] ~@14 [~ x ~ x] ~ x ~>").gain(0.3)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@32 [~@3 x ~@4] ~>").gain(0.39)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<A ~ A ~ A ~@3 A ~ A ~ A ~ B ~ C ~@7 A ~ A ~ A ~ B ~ B ~>".pickRestart({
  A: "~ x", B: "~@5 x ~@2", C: "~ x ~@6",
})).gain(0.39)

// drums · guiro
const guiro = s("guiro:4").struct("<A ~ A ~ A ~@3 A ~ A ~ A ~@4 B@2 ~@5 C ~ A ~ A ~@5>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@5 x ~@2",
})).gain(6.29)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@7 x ~@8 [~ x ~@2] ~@17>").gain(0.43)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct(`<
  ~ A B A B A C ~@2 A B A B A ~ D E ~@2 F ~@5 G B A B A ~ D H ~
>`.pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "~ x!2 ~@5", C: "~ x!2 ~@3 x ~", D: "x", E: "x ~@2 x ~@4", F: "x!2 ~@2",
  G: "~ x!2 ~ x ~ x!2", H: "~@7 x",
})).gain(0.43)

// drums · triangle
const triangle = s("triangles:30").struct("<~@14 [~@7 x]!2 ~@18>").gain(2.59)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@14 [~ x ~@6] ~@6 [~ x ~ x]!2 ~@7 [~ x ~@5 x] ~@3>").gain(2.59)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@14 [~@3 x ~@4] [~@3 x ~ x ~@2] ~@14 [~@3 x ~@4] ~@3>").gain(1.29)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@14 A@2 ~@3 B A ~@2 C ~@6 A ~@3>".pickRestart({
  A: "~ x", B: "~@2 x!2", C: "~@3 x ~ x ~@2 x ~@7",
})).gain(1.77)

// drums · lt
const lt = s("lt").struct("<~@20 [x!2 ~@2] [~ x ~ x]!2 [~@11 x ~ x ~@2] ~@10>").gain(0.3)

stack(
  epiano1, bass, hihat, open_hat, high_tom, ride, china, cabasa, shaker, whistle, whistle_2, guiro, woodblocks,
  woodblocks_2, triangle, triangle_2, jingle_bells, bell_tree, lt
)