Strudelify

Di doo dah

Birkin

KeyF majorTempo90 bpm
0:00/0:00
// Di doo dah — Birkin
// 90 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 16 acoustic bass (copy of ch 9 electric bass finger); ch 7 piano (copy of ch 8 synth brass 2)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · piano
const piano = note(`<
  A B A B C@3 D E@3 F C@3 D E@3 A B A B C@3 D E@3 F C@3 D E@3 A B A B ~@17 C@3 D E@3 F C@3 D E@3 A B A B A B A B
>`.pickRestart({
  A: "d4@2 f4@2 a4@2 c4 a4@5 b3@4", B: "~@4 d4 a4 c4 a4@5 ~@4",
  C: "[a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [b3,d4,f4,g4] ~ [b3,d4,f4,g4] ~ [b3,d4,f4,g4] ~ [b3,d4,f4,g4] ~", // Dm G7
  D: "[c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C
  E: "[c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,f4,a4] ~ [c4,eb4,f4,a4] ~ [c4,eb4,f4,a4] ~ [c4,eb4,f4,a4] ~", // Cm F7
  F: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
})).s("gm_piano").gain(0.31)

// bass · electric bass finger
const bass = note(`<
  ~@4 A@3 B C@2 D E F@3 G C@2 D H I H I A@3 B C@2 D E F@3 G C@2 D H I H I A@3 B C@2 D E F@3 G C@2 D ~@2 A@3 B C@2 D E
  F@3 G C@2 D H I H I H I H I
>`.pickRestart({
  A: "d3 ~ d3 ~ g2 ~ g2 ~", B: "c3@3 ~ g2@3 ~ c3@3 ~ g2@3 ~", C: "c3@3 ~ c3@3 ~ f2@3 ~ f2@3 ~",
  D: "c3@3 ~ c3@3 ~ f2@3 ~ f2@4", E: "bb2@3 ~ f2@4 bb2@3 ~ bb2 ~ c3@2", F: "d3@3 ~ d3@3 ~ g2@3 ~ g2@3 ~",
  G: "c3@3 ~ g2@3 ~ c3@4 g2@3 ~", H: "d3 ~@3 d3 ~@3 g2 ~@3 g2 ~@3", I: "d3@2 ~@2 d3 ~@3 g2@2 ~@2 g2@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.31).pan(0.1)

// other · piccolo
const piccolo = note("<~@23 A B C@2 D E F@2 A B C@2 D E G ~@21 A B C@2 D E F@2 A B C@2 D E G ~@8>".pickRestart({
  A: "f4 ~ f4 ~ f4 ~ f4 d4@5 ~@4", B: "~@2 f4 ~ f4@2 ~ f4 e4@2 d4@2 d4@2 ~@2",
  C: "[f4 ~ f4 ~ f4 ~ f4@2 e4@2 d4 ~ d4@2 c4 e4@5 ~@9 g3 a3 c4]/2", D: "eb4 ~ eb4 ~ eb4 ~ eb4 c4@5 ~@4",
  E: "~@2 eb4 ~ eb4@2 ~ eb4 d4@2 c4@2 c4@2 ~@2", F: "[eb4 ~ eb4 ~ eb4 ~ eb4@2 d4@2 c4 ~ c4@2 bb3 d4@5 ~@9 d4 eb4 e4]/2",
  G: "eb4 ~ eb4 ~ eb4 ~ eb4@2 d4@2 c4 ~ c4@2 bb3 d4",
})).s("gm_piccolo").gain(0.31)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@26 A B ~@2 C D ~@2 A B ~@46>".pickRestart({
  A: "~@4 c5@2 ~@7 g3 a3 c4, c4@3 ~@5, ~ e4@5 ~@10, ~ g4@2 ~@5", B: "eb4@3 ~@13",
  C: "~@4 bb4@2 ~@7 d4 eb4 e4, bb3@3 ~@5, ~ d4@5 ~@10, ~ f4@2 ~@5", D: "f4 ~@7",
})).s("gm_lead_2_sawtooth").gain(0.2)

// chords · synth brass 2
const synth_brass_2 = note("<~@42 A B C D E F G H I J K L@2 M N ~@25>".pickRestart({
  A: "~ a3 d4 a3@3 f4 d4 a3 g4 ~@2 g4@2 d4@2, f4 ~@4 b3@2 ~",
  B: "f4 a3 d4 ~ a3 d4 ~ d4 ~@2 b3 d4@2 ~ d4 b3, ~@3 f4@3 a3@2 g4@4 ~ g4@3",
  C: "f4@2 ~ d4@2 f4 a3@2 g4@2 ~ d4@2 g4@2 e4, ~@2 a3@3 ~@5 b3@3 ~@3",
  D: "g4@2 e4 c4@2 ~ e4 c4 g4@2 e4 ~@2 g4 e4 c4, ~@5 g4@2 ~@4 c4@4 ~",
  E: "eb4@2 g3 c4@2 eb4 c4 g3 ~@2 a3 eb4@2 a3 f4 a3, ~@2 f4 ~",
  F: "eb4@2 g3 c4@2 eb4 c4@2 ~@2 a3 eb4@2 a3 eb4 a3, ~@8 f4@7 ~",
  G: "eb4@2 g3 c4@2 eb4 ~ g3 ~@2 a3 eb4@2 a3 eb4 a3, ~@3 c4 f4@3 ~",
  H: "[bb3,d4,f4]@3 [bb3,d4,f4]@2 [bb3,d4]@2 bb3 [bb3,d4,f4]@2 ~ [bb3,d4,f4]@3 c4@2", // Bb
  I: "f4@2 a3 d4@2 a3 ~ a3 ~@2 b3 d4@2 b3 d4 b3, ~@3 f4 g4@3 ~",
  J: "f4@2 a3 d4@2 a3 ~ a3 g4@2 ~ b3@2 d4 b3 f4, ~@3 d4 ~ f4@2 ~",
  K: "f4@2 a3 d4@2 a3 d4 a3 g3@2 b3 d4@2 ~ g3@2, ~@13 b3@2 ~",
  L: "[[g3,c4,e4]@3 ~ [g3,c4,e4] ~ g3 [g3,c4,e4] [g3,c4,e4]@3 ~ [c4,e4]@2 ~ eb4@3 ~ c4@2 eb4 c4 g3 ~@2 a3 eb4@2 a3 eb4 a3, ~@12 g3 ~ g3@2 ~@2 g3@5 ~ f4@8]/2", // C
  M: "eb4@2 ~ c4@3 eb4@2 ~@2 a3 eb4@2 a3 eb4 a3, ~ g3@3 f4@3 ~",
  N: "eb4@2 ~ c4@3 eb4@2 ~@2 a3 eb4@2 a3 eb4 c4, ~ g3@3 f4@3 ~",
})).s("gm_synth_brass_2").gain(0.2).pan(0.6)

// drums · kick
const kick = s("bd").struct("<A@4 ~@15 A@4 ~@15 A@4 ~@15 A@2 ~@15 A@4 ~@4>".pickRestart({
  A: "x ~@2 x!2 ~@3",
})).gain(0.51)

// drums · rim
const rim = s("rim").struct("<~@4 A@15 ~@4 A@15 ~@4 A@15 ~@2 A@15 ~@8>".pickRestart({
  A: "x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<A B A B A@16 B A B A@16 B A B A@16 B A@16 B A B ~@4>".pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.51)

stack(piano, bass, piccolo, lead_2_sawtooth, synth_brass_2, kick, rim, hihat)

More by Birkin