Strudelify

Bambina

Daniele

KeyE♭ majorTempo111 bpm
0:00/0:00
// Bambina — Daniele
// 111 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 13 marimba (copy of ch 12 marimba)
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(111/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.

// other · marimba
const marimba = note(`<
  ~ A B C D E F G ~@41 H I ~ J ~@2 K L ~@2 M N ~@24 O B C D E F G ~@2 P ~ Q R S ~ Q ~@26
>`.pickRestart({
  A: "[bb2,bb3] ~@2 [eb3,eb4] ~@2 f3@3 ~@7, ~@6 f4 ~@9", B: "~@6 bb3 ~, ~@12 bb4 ~@3",
  C: "[g3,g4] ~@2 [f3,f4] ~@2 c4@6 ~@4, ~@6 c3@3 ~@7", D: "~@14 [d3,d4] [c3,c4]",
  E: "bb3@2 ~ eb4@2 ~ [f3,f4]@3 ~@7, bb2 ~@2 eb3 ~@12", F: "~@6 [bb3,bb4] ~",
  G: "g4@2 ~ [f3,f4] ~@2 c4@9 ~, g3 ~@5 c3@6 ~@4", H: "~@15 [bb3,bb4]",
  I: "[d4,d5] ~ [eb4,eb5] [d4,d5] ~ [eb4,eb5] ~ [d4,d5] ~ [bb3,bb4] ~@6", // D Eb D Eb D Bb
  J: "[eb4,eb5] ~ [f4,f5] [eb4,eb5] ~ [f4,f5] ~ [eb4,eb5] ~@8", // Eb F Eb F Eb
  K: "~@8 [bb3,bb4] [g3,g4] [ab3,ab4] [bb3,bb4] [c4,c5] [eb4,eb5] [d4,d5] [c4,c5]", // Bb G Ab Bb C Eb D C
  L: "[bb3,bb4] [ab3,ab4] [g3,g4] [bb3,bb4] [gb3,g3,gb4] g4 [eb3,eb4] ~ f4@2 ~@6, ~@8 f3 ~@7", // Bb Ab G Bb Gmaj7 Eb
  M: "~@8 [g4,g5] [bb4,bb5] ~ [bb4,bb5]@3 [c5,c6] ~", // G Bb C
  N: "[g4,g5] [bb4,bb5] ~ bb5@2 ~ [c5,c6] [g4,g5] [bb4,bb5] ~ [g4,g5] [f4,f5] [eb4,eb5] [bb3,bb4] ~@2, ~@3 bb4 ~@12", // G Bb C G Bb G F Eb …
  O: "[bb3,bb4] ~@2 [eb3,eb4] ~@2 f3@3 ~@7, ~@6 f4 ~@9", P: "[f4,d5] ~ [g4,eb5] [f4,d5] ~ [g4,eb5] ~ [f4,d5] ~@8",
  Q: "[g4,eb5] ~ [ab4,f5] [g4,eb5] ~ [ab4,f5] ~ [g4,eb5] ~@8", R: "~@15 bb4",
  S: "[f4,d5] ~ [g4,eb5] [f4,d5] ~ [g4,eb5] ~ [f4,d5] ~@4 bb4@3 ~", // Dm Cm Dm Cm Dm
})).s("gm_marimba").gain(0.6)

// bass · electric bass finger
const bass = note(`<
  ~@9 A@2 B C A@2 B D A@2 B C A@2 B D A@2 B C A@2 B D E@2 F G E@2 H I E@2 F G E@2 H J A@2 B D A@2 B C A@2 B D A@2 B C
  A@2 B D E@2 F G E@2 H I E@2 F G E@2 H J ~@8 A@2 B C A@2 B D A@2 B C A@2 B D A@2 B C A@2 B D A@2 B C A@2 B D ~@2
>`.pickRestart({
  A: "eb1@3 g2 ~ g2 ~ g2 f2@2 eb2@2 bb1@2 c2@2", B: "f1@3 g2 ~ g2 ~ g2 f2@2 eb2@2 bb1@2 c2@2",
  C: "f1@3 g2 ~ g2 ~ g2 f2@2 eb2 ~ bb1@2 c2@2", D: "f1@3 g2 ~ g2 ~ g2 ~ f1 eb2@2 bb1@2 c2 ~, ~@4 f2 ~@3",
  E: "[g1@3 ab2 ~ ab2 ~ ab2 ab2@2 g2@2 f2@2 eb2@5 c2 ~ c2 ~ c2 g1@4 bb1@4]/2",
  F: "ab1@3 ab1 ~ ab1 ~ ab1!2 ~ ab1@2 eb2@2 ab1@2", G: "a1@2 ~ a1 ~ a1 ~ a1!2 ~ a1@2 e2@2 a1@2",
  H: "ab1@3 ab1 ~ ab1 ~ ab1 ab1@2 ab1@2 eb2@2 ab1@2", I: "a1@3 a1 ~ a1 ~ a1!2 ~ a1@2 e2@2 a1@2",
  J: "a1@3 a1 ~ a1 ~ a1 bb1@2 f1@2 bb0@2 f1@2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · vibraphone
const vibraphone = note(`<
  ~@8 A@2 B C D@2 E F G@2 B C D@2 E F G@2 B C D@2 E F H I J K L M N O P I J K L M N O A@2 E F G@2 B C D@2 E F G@2 B C
  D@2 E F H I J K L M N O P I J K L M N O A@2 ~@4 Q@2 R ~ B C D@2 E F G@2 B C D@2 E F G@2 B C D@2 E F G@2 B C D@2 E F
  G@2 ~
>`.pickRestart({
  A: "[~@12 [f4,ab4,c5,eb5]@2 ~ [eb4,g4,bb4,d5]@15 ~@2]/2", B: "[bb3,eb4,g4,bb4]@15 ~", C: "[c4,eb4,ab4]@15 ~",
  D: "[[ab4,c5]@10 ~@2 [f4,ab4,c5,eb5]@3 [d4,g4,bb4,d5]@14 ~@3]/2", // Ab Fm7 Gm
  E: "[bb3,eb4,g4,bb4]@8 ~@2 [bb3,eb4,g4,bb4] ~@2 [a3,d4,gb4,a4]@2 ~", F: "[c4,f4,ab4]",
  G: "[[f4,ab4,c5]@12 [f4,ab4,c5,eb5]@2 ~ [eb4,g4,bb4,d5]@15 ~@2]/2", H: "[f4,ab4,c5]@3 ~",
  I: "[bb3,d4,g4,bb4,d5]@15 ~", J: "[c4,eb4,g4,c5]@15 ~", K: "[eb4,ab4,c5]@7 ~", L: "~@2 c5 f5, ~ a4@2 ~",
  M: "[g4,bb4]@13 ~@3, d5", N: "[eb4,g4,c5]@15 ~", O: "[eb4,ab4,c5]@13 ~@3", P: "~@3 f5, g4, ~@4 a4@11 ~, ~ c5",
  Q: "[bb3@3 ~@3 f4@15 ~@9 bb4 ~, ~@3 eb4@10 ~@19]/2", R: "g4@2 ~ f4@3 c4@6 ~@4",
})).s("gm_vibraphone").gain(0.25)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D ~@16 A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "[bb3,d4,g4]!2 [d4,g4] [bb3,d4,g4] ~@6 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2", // Gm G5 Gm
  B: "~@8 [bb3,d4,g4]!2 [d4,g4] [bb3,d4,g4] ~@4", // Gm G5 Gm
  C: "[c4,f4]!3 [g3,c4,f4] ~@6 [g3,c4,f4] ~@2 [g3,c4,f4] ~@2, g3@3 ~@13", D: "~@8 [g3,c4,f4]!4 ~@4",
})).s("gm_electric_guitar_muted").gain(0.24).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@33 A@3 ~ B@3 ~ A@3 ~ B@3 ~@21 A@3 ~ B@3 ~ A@3 ~ B@3 ~@43>".pickRestart({
  A: "[~@8 [ab3,c4,ab4]@2 [g3,bb3,g4]@2 [f3,ab3,f4]@2 [eb3,g3,eb4]@4 [f3,ab3,f4]@2 [g3,bb3,g4] ~ [g3,bb3,g4]@4 [f3,ab3,f4]@2 [eb3,g3,eb4]@2 [bb3,g4]@6 [ab3,c4,ab4]@2 [ab3,f4]@10, ~@22 [f3,ab3,f4] ~@7 [g3,f4] ~@7 f3@8 ~@2]/3", // Ab Gm Fm Eb Fm Gm Fm Eb …
  B: "[~@8 [ab3,c4,ab4]@2 [g3,bb3,g4]@2 [f3,ab3,f4]@2 [eb3,g3,eb4]@4 [f3,ab3,f4]@2 [g3,bb3,g4] ~ [g3,bb3,g4]@4 [f3,ab3,f4]@2 [eb3,g3,eb4]@2 [bb3,g4]@6 ~@4 f3@8, ~@22 f3 ~@7 g3 ~@5 [ab3,f4]@11 ~]/3", // Ab Gm Fm Eb Fm Gm Fm Eb …
})).s("gm_acoustic_guitar_nylon").gain(0.48).pan(0.7)

// chords · taiko drum
const taiko_drum = note("<A B C ~ D ~ C ~ D ~@77 C ~ D ~ C ~ D ~@34>".pickRestart({
  A: "~@14 [a3,bb3,c4] [f3,g3]", B: "f3 ~@7", C: "[eb3,bb3] ~ [eb3,bb3]@2 bb6 ~@11",
  D: "[eb3,bb3] ~ [eb3,bb3] ~ bb6 ~@11", // Eb5
})).s("gm_taiko_drum").gain(0.71)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@33 A@2 B C D@2 B E A@2 B C D@2 B E ~@20 A@2 B C D@2 B E A@2 B C D@2 B E ~@42
>`.pickRestart({
  A: "[[g4,bb4,d5]@15 [eb4,g4,c5]@16 ~]/2", B: "[eb4,ab4,c5]", C: "[eb4,gb4,a4,c5]",
  D: "[[f4,bb4,d5]@7 [eb4,g4,c5]@9]/2", E: "[gb4,a4,c5,eb5]",
})).s("gm_string_ensemble_2").gain(0.2)

// other · xylophone
const xylophone = note("<~ A B C D E F G ~@41 H I ~ J ~@32 A B C D E F G ~@35>".pickRestart({
  A: "[bb3,bb4] ~@2 [eb4,eb5] ~@2 f4@3 ~@7, ~@6 f5 ~@9", B: "~@6 bb4 ~, ~@12 bb5 ~@3",
  C: "[g4,g5] ~@2 [f4,f5] ~@2 c5@6 ~@4, ~@6 c4@3 ~@7", D: "~@14 [d4,d5] [c4,c5]",
  E: "bb4@2 ~ eb5@2 ~ [f4,f5]@3 ~@7, bb3 ~@2 eb4 ~@12", F: "~@6 [bb4,bb5] ~",
  G: "g5@2 ~ [f4,f5] ~@2 c5@9 ~, g4 ~@5 c4@6 ~@4", H: "~@15 [bb4,bb5]",
  I: "[d5,d6] ~ [eb5,eb6] [d5,d6] ~ [eb5,eb6] ~ [d5,d6] ~ [bb4,bb5] ~@6", // D Eb D Eb D Bb
  J: "[eb5,eb6] ~ [f5,f6] [eb5,eb6] ~ [f5,f6] ~ [eb5,eb6] ~@8", // Eb F Eb F Eb
})).s("gm_xylophone").gain(0.16)

// other · marimba
const marimba_2 = note("<~@101 A B C D E@2 F G H@2 I J K L M N O P@2 Q R S T U V ~>".pickRestart({
  A: "f4 g4 ~@5 bb3 [d4,f4] ~ [eb4,g4] ~@4 bb3", B: "f4 ~ g4 ~@4 bb3 [d4,f4] [eb4,g4] ~ [eb4,g4] ~ bb3 g4 ~",
  C: "[c4,eb4,g4] ~ [c4,f4,ab4] ~@5 [eb4,g4] ~ [f4,ab4] ~ [f4,ab4,c5]!2 ~ [f4,ab4,c5]", D: "~@12 eb5 d5 eb5 d5",
  E: "[~@4 bb4@4 g4@4 f4 g4 ~@3 d4 ~@2 d4 f4 g4@2 bb4 ~ g4 f4 eb4 c4 bb3 g3, ~@7 d5@2 ~@7, ~@16 f5@3 ~@13]/2",
  F: "~@3 g3 ab3 c4 eb4 g4 ~ f4 ab4 c5 ~ [ab4,g5] ~@2, ~@6 eb5 ~", G: "~@15 bb5",
  H: "f5!2 ~ bb5 g5!2 ~ bb5 f5!2 ~ bb5 g5!2 ~ bb5", I: "ab5 ~@6 g5 bb5 g5 ab5 ~ eb6 ~ c6 ab5",
  J: "g5 bb5 a5 ab5 g5 gb5 f5 ab5 f5 eb5 c5 bb4 ~@2 f5 eb5", K: "d5 ~@3 d5 c5 bb4 eb4 f4 ~ f4 ~@4 f4",
  L: "~@3 bb4 f4 ~ f4 ~ f4 ~@2 c4 f4 c4 f4 g4, f5 ~@3, ~ eb5@3 ~@12, ~ d5 ~@6", M: "~@7 bb3 c4 eb4 ~@2 eb4 bb3 c4 ~",
  N: "f4 c4 eb4 bb3 c4 ~ f4 c4 eb4 ~@4 bb3 f4 ~", O: "d4 c4 bb3 ~@4 d4 ~ bb3 ~ [eb4,g4] ~ [f4,bb4] ~ [g4,c5]",
  P: "[~ [bb4,eb5] ~ [c5,f5,bb5] ~ [bb4,eb5,g5] ~ [g4,c5,f5] ~ [f4,ab4,eb5] ~ [eb4,f4,c5] ~ [c4,eb4,bb4] ~ [f4,eb5] f4 ~@15, ~@15 c5@6 ~@11]/2", // Eb5 Fsus4 Eb Csus4 Fm7 F7 Cm7 F7
  Q: "~@3 [bb3,bb4] [c4,c5] ~ [eb4,eb5] ~ [eb4,eb5] ~@3 f5 [f5,g5] [eb5,f5] c5", R: "d5 ~@6 bb4@2 ~@6 bb4",
  S: "c5 ~ f5 c5 eb5 bb4 c5 ~ f5 c5 eb5 bb4 c5 eb5 f5 ~",
  T: "eb5 bb4 ~@2 f5 c5 eb5 bb4 ~ eb5 f5 ~ eb5 ~ c5@2, ~@4 c5 ~@3", U: "f5 ~@3 eb5 ~@2 bb4 c5 eb5 f5 ~ [bb4,bb5] ~@3",
  V: "~@4 [f4,d5] ~ [g4,eb5] ~ [f4,d5] ~ [g4,eb5] [f4,d5] ~ [eb4,bb4] ~ g4", // Dm Cm Dm Cm Dm Eb5
})).s("gm_marimba").gain(0.64).pan(0.1)

// other · marimba · soft notes
const marimba_soft = note("<~@105 A B ~@8 C D ~@2 E F ~ G H ~@3>".pickRestart({
  A: "~@15 f4", B: "~@7 d4 ~ d4 ~@6", C: "~@15 eb4", D: "~@5 eb4 ~@10", E: "~ eb5 [f4,eb5]!2 f4 eb5 ~@10",
  F: "~@5 [bb3,bb4] ~@5 c5 ~@4", G: "~ eb5 ~@5 eb5 ~@7 c5", H: "~@3 eb5 ~@7 c5 ~ bb4 ~ eb5, ~ c5 ~@6",
})).s("gm_marimba").gain(0.36).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@8 A B@24 C@16 B@20 C@16 B@3 D B@3 E B@32 ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "x!2 ~@3 x ~@2", C: "x!4", D: "x ~ x ~@6 x!2 ~@5", E: "x ~ x ~@10 x ~@2",
})).gain(0.6)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@8 A B ~ C D ~ B ~ C B ~ C@2 ~ B ~ C B ~ C@2 ~ B ~ C B ~ C@2 ~ B ~@2 B ~ C@2 ~ B ~@3 B ~ C B ~ C@2 ~ B ~ C B ~ C@2 ~
  B ~ C B ~ C@2 ~ B ~@2 B ~ C@2 ~ B ~@2 B ~ C ~@2 B ~ A B ~ C D ~ B ~ C B ~ C D ~ B ~ C B ~ C@2 ~ B ~ C B ~ C D ~ B ~ C
  ~@2
>`.pickRestart({
  A: "~@9 x!2 ~@5", B: "~@15 x", C: "~@9 x ~@6", D: "~@9 x ~@5 x",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@2 A B A ~ A ~ A ~@83 A ~@34>".pickRestart({
  A: "x!2 ~@6", B: "~@15 x",
})).gain(0.6)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B C D A B C D E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ H I J ~ E F G@2 H I
  J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E F G@2 H I J ~ E
  F G@2 H I J ~@3
>`.pickRestart({
  A: "~@5 x ~ x ~ x ~ x ~@3 x", B: "~@2 x ~@2 x ~ x ~@3 x ~@4", C: "~@5 x!3 ~@2 x ~@4 x", D: "~@3 x ~@4",
  E: "~@2 x ~@4 x ~@8", F: "~@9 x ~@6", G: "~@3 x ~@3 x", H: "~ x ~ x ~ x ~ x", I: "~ x ~ x ~@3 x", J: "~ x ~@5 x",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@7 A ~@15 B ~@11 A ~@7 A ~@47 A ~@10>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.6)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~ A ~@3 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
  B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B
  ~ B ~ B ~ B ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@7 x ~@8",
})).gain(0.6)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~ A ~@33 B ~@7 B ~@27 B ~@7 B ~@47>".pickRestart({
  A: "~ x ~@6", B: "~@13 x ~@2",
})).gain(0.36)

// … 27 more lines

More by Daniele