Strudelify

Bidi bidi bom bom

Selena

KeyA majorTempo92 bpm
0:00/0:00
// Bidi bidi bom bom — Selena
// 92 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): GMIDI #32 Harmonics.
setcpm(92/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 · acoustic bass · "GMIDI #33 A. Bass"
const bass = note(`<
  ~ A@2 B ~ C D C D C E F G H I J K L M N O P O Q M H E F G H I J K L M N O P O Q M H E F G H I J K L R N O P O Q M H E
  F G S R ~ K L M N O P O Q M H E F R
>`.pickRestart({
  A: "[~@16 a1@6 ~@9 e1, ~@15 [e1,f1]@2 ~@15, ~@8 g1 ~@7, ~@16 g#1 ~@15]/2", B: "f#1 e1@7",
  C: "b1@3 ~ e2@3 ~ d2@4 e2 ~ b1 d#1", D: "a1@3 ~ e2@3 ~ a1@4 e2 ~ b1 ~",
  E: "~ a1!2 ~ c#2@2 e2 ~@3 d2 ~ f#2@2 a2 ~, ~@3 a1@3 ~@5 d2@2 ~@3", F: "~ e2!3 g#2@2 b2 ~@2 d2!3 f#2@2 a2 ~",
  G: "~ a1!2 ~ c#2@2 e2 ~@3 d2 ~ f#2@2 a2 ~, ~@3 a1@2 ~@6 d2@2 ~@3",
  H: "~ e2!2 ~ g#2@2 b2 ~@2 d2!3 f#2@2 a2 ~, ~@3 e2@2 ~@11", I: "~ a1!3 c#2@2 e2 ~@2 d2!3 f#2@2 a2 ~",
  J: "~ e2!3 g#2@2 b2 ~@2 d2!3 f#2@2 e2 ~", K: "~ a1!2 ~ c#2@2 e2 ~@3 d2!2 f#2@2 a2 ~, ~@3 a1@2 ~@11",
  L: "~@2 e2 ~ g#2@2 b2 ~@2 d2!3 f#2@2 e2 ~, ~@3 e2@2 ~@11", M: "~@2 a1 ~ c#2@2 e2 ~@2 d2!3 f#2@2 a2 ~, ~@3 a1@2 ~@11",
  N: "~ e2!2 ~ g#2@2 b2 ~@2 d2!2 ~ f#2@2 a2 ~, ~@3 e2@2 ~@6 d2@2 ~@3",
  O: "~ a1!2 ~ c#2@2 e2 ~@2 d2!3 f#2@2 a2 ~, ~@3 a1@2 ~@11", P: "~ e2!2 ~ g#2@2 b2 ~@2 d2!3 f#2@2 e2 ~, ~@3 e2@2 ~@11",
  Q: "~@2 e2 ~ g#2@2 b2 ~@3 d2@2 f#2@2 a2 ~, ~@3 e2@2 ~@11", R: "a1@3 ~@13",
  S: "~ e2!2 ~ g#2@2 b2 ~@2 d2!3 f#2@2 a2@2, ~@3 e2@2 ~@11",
})).s("gm_acoustic_bass").gain(0.5)

// chords · drawbar organ · "GMIDI #17 Hammond Organ"
const drawbar_organ = note(`<
  ~@2 A B C D E@2 F ~ G@2 H D I@4 G@6 J K L M N O ~@2 H D ~ P I@2 G@6 ~@2 L M N O ~ Q R@2 S@2 T U V W X@2 Y ~ L M N O ~
  Q R@2 ~@5
>`.pickRestart({
  A: "~@4 [a3,d4,f#4]@3 ~, ~ f#5", B: "[b3,e4]@3 ~ [a3,d4,f#4]@3 ~, g#5 f#5",
  C: "a5@3 ~ [a3,d4,f#4]@3 ~, [e4,e5]@5 ~@3, a3 ~ f#5@2", D: "[b3,e4,g#4]@3 ~ [a3,d4,f#4]@3 ~, g#5 f#5",
  E: "[[a3,e4]@3 ~ [a3,d4,f#4]@3 ~ [b3,e4,g#4]@3 ~ [a3,d4,f#4]@3 ~, e5, ~ f#5 g#5 f#5]/2", F: "f#5 ~@15",
  G: "[[a3,e4]@5 ~@3 [a3,d4,f#4]@6 ~@2 [b3,e4]@6 ~@2 [a3,d4,f#4]@6 ~@2, e5@15 ~, ~ f#5 g#5 f#5]/2", // A5 D E5 D
  H: "[a3,e4]@3 ~ [a3,d4,f#4]@3 ~, e5 f#5", // A5 D
  I: "[[a3,e4]@3 ~ [a3,d4,f#4]@3 ~ [b3,e4,g#4]@3 ~ [a3,d4,f#4]@3 ~, e5@29 ~@3, ~ f#5 g#5 f#5]/2", // A5 D E D
  J: "[a4,a5]@2 ~ a4 [d5,f#5]@3 a4", K: "~@3 e4 ~@4, [e5,g#5]@3 ~", L: "[e5,a5]@3 a4 [d5,f#5]@3 a4",
  M: "[e5,g#5]@3 a4 [d5,f#5]@3 ~", N: "a4 ~ [a4,e5,a5] ~@3 [a4,e5] ~@3 [a4,a5] ~@3 a4 ~", O: "[e5,g#5] [d5,f#5]",
  P: "[b3,e4,g#4]@3 ~ [a3,d4,f#4]@3 ~, e5@13 ~@3, g#5 f#5", Q: "[b3,e4]@6 ~@2 [a3,d4]@5 ~@3, e5 f#5, ~@8 d5 ~@7",
  R: "[[e3,a3,c#4]@3 ~ [d3,a3,d4]@3 ~ [e3,b3,e4]@3 ~ [d3,a3,d4]@3 ~, a5 d5@3, ~ f#5 g#5 f#5]/2", // A D5 E5 D5
  S: "[[e3,a3,c#4,e5]@3 ~ [d3,a3,d4]@3 ~ [e3,b3,e4]@3 ~ [d3,a3,d4]@3 ~, d#5 ~@7 d5@24, ~ f#5 g#5 f#5]/2", // A D5 E5 D5
  T: "[e3,a3,c#4]@3 ~ [f#3,a3,d4]@3 ~, e5 f#5", U: "g#5@4 [a3,d4]@3 ~, ~ f#5",
  V: "[e3,a3,c#4,e5]@7 ~ [f#3,a3,d4]@6 ~@2, ~ [d5,f#5]", W: "[e4,e5]@4 [d3,a3,d4]@3 ~, [e3,b3]@3 ~ d5@4",
  X: "[[e3,a3,c#4,e5]@5 ~ [e3,a3,c#4,e5] ~ [f#3,a3,d4]@6 ~@2 [g#3,b3,e4]@6 ~@2 [f#3,a3,d4]@6 ~@2, d#5 ~@7 d5@24, ~ f#5 g#5 f#5]/2", // A D E D
  Y: "d#5 ~@15",
})).s("gm_drawbar_organ").gain(0.21).pan(0.3)

// chords · drawbar organ · "GMIDI #17 Hammond Organ" · soft notes
const drawbar_organ_soft = note("<~@3 A ~@7 A ~@7 A ~ A ~ A ~@4 B ~@10 A ~ A ~ A ~@4 B ~@17 B ~@10>".pickRestart({
  A: "g#4@3 ~@5", B: "[e5,a5] ~@5 a5 ~@3 e5 ~@3 [e5,a5] ~",
})).s("gm_drawbar_organ").gain(0.1).pan(0.3)

// chords · electric guitar muted · "GMIDI #29 Mute E.Guitar"
const electric_guitar_muted = note(`<
  ~@2 A B C B D E D E D E D E D E D E D E D E D E D E F G H I J K J K D E D E D E D E D E D E F G H I L M L M L N L O L
  M L N ~@2 F G H I L M L M L M P K Q
>`.pickRestart({
  A: "~@4 c#4 ~ c#4@2 ~@4 d4 d4@2 ~, ~@3 a3@4 ~@4 a3@4 ~", B: "~@4 e4 e4@2 ~@5 d4 d4@2 ~, ~@3 b3@4 ~@4 a3@4 ~",
  C: "~@4 c#4 ~ c#4@2 ~@4 d4 d4@2 ~, ~@3 a3@5 ~@3 a3@4 ~",
  D: "~@2 [a3,c#4]!2 a3@2 [a3,c#4] ~@3 [a3,d4] d4 a3@2 [a3,d4] ~", // A D5
  E: "~@2 [b3,e4] e4 b3@2 [b3,e4] ~@3 [a3,d4] d4 a3@2 [a3,d4] ~", // E5 D5
  F: "~@2 [a3,c#4] ~@3 [a3,c#4] ~@3 [a3,d4] ~ a3 ~ [a3,d4] ~", // A D5
  G: "~@2 [b3,e4] ~@3 [b3,e4] ~@3 [a3,d4] ~ a3 ~ [a3,d4] ~", H: "~@2 [a3,c#4] ~@3 [a3,c#4] ~@3 [a3,d4] ~@3 [a3,d4] ~",
  I: "~@2 [b3,e4] ~@3 [b3,e4] ~@3 [a3,d4] ~@3 [a3,d4] ~", J: "~@2 a3 ~ c#4 ~ e4 ~@2 f#4 ~ f#4 d4 ~ a3 ~",
  K: "~ b3@2 ~ e4 ~ g#4 ~@2 f#4 ~ f#4 d4 ~ a3 ~", L: "~@2 [a3,c#4] ~ a3 ~ [a3,c#4] ~ a3 ~ [a3,d4] d4 a3 ~ [a3,d4] ~",
  M: "~@2 [b3,e4] ~@3 [b3,e4] ~@2 a3 [a3,d4] d4 a3 ~ [a3,c4,d4] ~", // E5 D5 D7
  N: "~@2 [b3,e4] e4 b3 ~ [b3,e4] ~@2 a3 [a3,d4] d4 a3 ~ [a3,d4] ~", // E5 D5
  O: "~@2 [b3,e4] e4 b3 ~ [b3,e4] ~@2 a3 [a3,d4] d4 a3 ~ [a3,c4,d4] ~", P: "~@2 a3 ~ c#4 ~ e4 ~@3 d4 ~ a3 ~@3",
  Q: "a3 ~@15",
})).s("gm_electric_guitar_muted").gain(0.32).pan(0.9)

// other · brass section · "GMIDI #62 Brass Section"
const brass_section = note(`<
  ~@2 A B C D E ~@11 F ~@3 F ~@5 G ~@9 F ~@3 F ~@5 H ~ I ~@2 D E ~@8 J K ~ L ~@3 L ~@3 L ~@2
>`.pickRestart({
  A: "[e4,f4,g4,g#4,e6,f6,g6,g#6] [b3,c4,d#4,c6,d#6] ~@14, [a4,a5,a6]@3 ~@13", B: "~@15 [e3,e4,e5]",
  C: "~ [a3,a5] ~@6, [f#3,f#4,f#5]@2 [g#3,g#5] ~@13, ~ a4@2 ~@13", // A F# G#
  D: "~@10 [c#4,c#5,c#6]@2 [b3,b4,b5] ~ [a3,a4]@2, ~@14 a5 ~", E: "[b3,b4,b5] [a3,a4,a5]@2 ~@13",
  F: "~@7 [c#4,c#5] [e4,e5]!2 ~ [f#4,f#5] ~ [e4,e5]@2 ~", G: "~@10 [e5,e6] ~ [e4,e5]@2 ~@2",
  H: "~@10 [e4,e5] ~ [e3,e4]@2 ~@2", I: "[a4,a5] ~@15", J: "~@15 [g#4,g#5]", K: "[a4,a5] ~@7",
  L: "~@10 [e5,a5] ~ [e3,e4]@2 ~@2", // A5 E
})).s("gm_brass_section").gain(0.41).pan(0.7)

// other · distortion guitar · "GMIDI #31 DistortGuitar"
const distortion_guitar = note("<~@54 A@2 B C D E@3 F ~@11 G H I>".pickRestart({
  A: "[e4@3 e4!2 ~ f#4 e4@7 a4 e4@7 c#4@2 d4 c#4 b3 c#4@2 e4 c#4 e4]/2", B: "a4@6 b4@2 c#5@5 ~ c#5@2, ~@13 d5@2 ~",
  C: "b4@5 a4 ~ a4@7 e4@2, ~@3 c#5 ~@4",
  D: "d5 [a4,c#5] e4 [a4,c#5] d5 [a4,c#5] e4 [a4,c#5] d5 [a4,c#5] e4 [a4,c#5] d5 [a4,c#5] c#5 [e4,a4]", // A A5
  E: "[a4 e4@2 c#4 d4 [b3,c#4] c#4 [a3,b3] b3 c#4 [d4,e4] [f#4,g#4] a4 ~ c#5 ~ e5 e5@2 e5@3 f#5 e5@4 e5@2 e5 a5 e5@3 ~ e5 ~ e5 ~@6 e4!2 [e4,f#5] [f#5,g#5], ~@13 b4@2 e4@18 ~@5 b5@2 ~@8, ~@39 e5@7 ~@2]/3", // Bsus2 Asus2 Dsus2 F#sus2 Esus2 F#sus2
  F: "[c#5,c#6]@5 ~@11", G: "~@2 a2 ~ c#3 ~ e3 ~@3 f#3 ~ d3 ~@3", H: "~ b2 ~@2 e3 ~ g#3 ~@2 f#3 ~ f#3 d3 ~ a2 ~",
  I: "a3 ~@15",
})).s("gm_distortion_guitar").gain(0.53)

// other · distortion guitar · "GMIDI #31 DistortGuitar" · soft notes
const distortion_guitar_soft = note(`<
  ~@30
  [~@2 a3 ~ c#4 ~ e4 ~@2 f#4 ~ f#4 d4 ~ a3 ~]
  [~ b3@2 ~ e4 ~ g#4 ~@2 f#4 ~ f#4 d4 ~ a3 ~]
  [~@2 a3 ~ c#4 ~ e4 ~@2 f#4 ~ f#4 d4 ~ a3 ~]
  [~ b3@2 ~ e4 ~ g#4 ~@2 f#4 ~ f#4 d4 ~ a3 ~]
  ~@43
>`).s("gm_distortion_guitar").gain(0.24)

// other · guitar harmonics · "GMIDI #32 Harmonics"
const guitar_harmonics = note("<~@54 [~ e4!2 ~@2 e4 ~@10] ~@22>").s("gm_guitar_harmonics").gain(0.25).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B ~@2 C@3 ~ A@2 D ~ C@3 ~ A@7 ~ A B A ~ A@3 B A@3 ~ A@3 B A@7 ~ A E A ~ A@3 B A ~ A B A B A@3 ~ A E A ~ A B A@2
  E
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x ~@2 x!2 ~ x ~ x ~@2 x!2 ~ x ~", D: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", E: "x",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@31 [x ~@2 x ~@2 x ~ x ~@7] ~@13 [x ~@2 x ~@2 x ~@9] ~@31>").gain(0.49)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@6 A@3 ~ A@3 ~ A@3 ~@9 A ~ A ~ A ~ A ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A ~ A ~ A ~ A@3 ~ A@3 ~@3 A@2 ~
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.49)

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

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@5 A ~@31 A ~@15 A ~@17 A ~@5>".pickRestart({
  A: "~ x ~@2",
})).gain(0.35)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A B C ~@22 D B ~@3 D ~@3 C ~@7 E ~@3 B ~ F ~ C ~@3 D ~@3 G ~ H ~@3 B ~ F ~ C ~@5
>`.pickRestart({
  A: "~@11 x ~ x ~@2", B: "~@5 x!2 ~ x ~@7", C: "~@5 x ~ x ~@3 x ~@4", D: "~@5 x ~@2", E: "~@3 x ~@2 x!2",
  F: "~@9 x ~@3 x ~@2", G: "~@13 x ~@2", H: "x",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~@3 B C ~ A D B ~@2 B C ~@2 B E ~@5 C B D ~@2 B ~ B F G A ~ D@2 B@2 A D ~@6 C ~@3 D@2 ~ B ~@2 C B C B ~@4 C ~@4
  B ~ D ~
>`.pickRestart({
  A: "~@11 x ~@2 x ~", B: "~@3 x ~@4", C: "~@11 x ~@4", D: "~@7 x", E: "~@15 x", F: "~@3 x ~@3 x",
  G: "~@6 x ~@4 x ~@2 x ~",
})).gain(0.49)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A B C ~@11 D ~@7 D ~@3 B ~@3 E ~@3 C ~@7 F ~@3 B ~ G ~ C ~@3 E ~ D ~ A H ~@4 B ~ G ~ C ~@5
>`.pickRestart({
  A: "~@3 x", B: "~@4 x!2 ~@3 x!4 ~@3", C: "~@5 x!3 ~@2 x ~@3 x!2", D: "~@8 x!5 ~@3", E: "~@8 x!2 ~@6", F: "~ x ~@2",
  G: "~@8 x!2 ~@2 x ~@3", H: "~@13 x ~ x",
})).gain(0.56)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@4 A ~@24 A ~@19 A ~@17 A ~@9>".pickRestart({
  A: "~ x",
})).gain(0.28)

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

// drums · tambourine
// … 52 more lines

More by Selena