Strudelify

Pigeons and Crumbs

Natalie Imbruglia

KeyD majorTempo100 bpm
0:00/0:00
// Pigeons and Crumbs — Natalie Imbruglia
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Lead 8 (brass + lead)" named as a brass, played on brass section (its lead 8 bass lead patch is not one)
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · percussive organ
const percussive_organ = note("<A@2 B@2 A@2 B@2 ~@125>".pickRestart({
  A: "[[f#5,a5,d6]@23 ~ [f#5,a5,d6]@7 ~]/2", B: "[[d5,g5,b5]@31 ~]/2",
})).s("gm_percussive_organ").gain(0.72)

// other · brass section · "Lead 8 (brass + lead)"
const brass_section = note("<~@4 A@2 B C ~@125>".pickRestart({
  A: "[a4@3 ~ d4@2 e4@4 a3@21 ~]/2", B: "a4@3 ~ d4@2 e4@4 a3@5 ~", C: "a4@15 ~",
})).s("gm_brass_section").gain(0.72)

// bass · contrabass
const bass = note(`<
  ~@8 A B C D A B C D A B C D A B C D E@2 F@2 E@2 G H A B C D A B C D A B A B C D A B C D A B C D A B C D E@2 F@2 E@2 G
  H A B C D A B C D A B C D A B C D I J A K I@2 C L 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
  ~@9
>`.pickRestart({
  A: "d2@10 d2@3 d2@3", B: "d2@10 d2@3 a2@3", C: "g2@10 g2@3 g2@3", D: "a2@10 a2@3 a2@3", E: "a2@10 a2@2 a2@3 ~",
  F: "g2@10 g2@2 g2@3 ~", G: "a2@5 a2!3", H: "g2@10 g2@2 g2 a2@3", I: "f2@10 f2@3 f2@3", J: "f2@10 c2@5 ~",
  K: "d2@10 a2@3 d2@3", L: "g2@7 ~ b2@3 ~ b2@3 ~",
})).s("gm_contrabass").gain(0.72)

// bass · contrabass · soft notes
const bass_soft = note(`<
  ~@124
  [g2@10 g2@3 g2@3]
  [a2@10 a2@3 a2@3]
  [d2@10 d2@3 d2@3]
  [d2@10 d2@3 a2@3]
  [g2@10 g2@3 g2@3]
  [a2@10 a2@3 a2@3]!4
>`).s("gm_contrabass").gain(0.32)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@8 A@2 ~ B A@2 ~ B A@2 ~ B A@2 ~ B C@2 ~@2 C@2 ~ D E F E B E F E B E F A@2 ~ B A@2 ~ B A@2 ~ B A@2 ~ B C@2 ~@2 C@2 ~
  D E F E B E F E B E F E B E F E B G@2 F@2 G@2 H@2 I@2 J K I@2 ~@2 E F E B E F E B E F E B E F E B E F E B E F E B E F
  ~@9
>`.pickRestart({
  A: "[f#4@31 ~]/2", B: "e4@15 ~", C: "[e4@5 ~ f#4@5 ~ e4@19 ~]/2", D: "~@8 g4@3 ~ e4@3 ~", E: "a4@3 ~@3 e4@5 ~@5",
  F: "f#4@15 ~", G: "f4@15 ~", H: "g4@15 ~", I: "[f#4@9 ~@7]/2", J: "~@12 d5@3 ~", K: "[e4,a4]@11 ~ a4@3 ~",
})).s("gm_distortion_guitar").gain(0.72)

// other · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@124 A B A C A B A B@2>".pickRestart({
  A: "a4@3 ~@3 e4@5 ~@5", B: "e4@15 ~", C: "f#4@15 ~",
})).s("gm_distortion_guitar").gain(0.32)

// chords · electric guitar muted · "Electric Guitar (muted)"
const electric_guitar_muted = note(`<
  ~@8 A@2 B C A@2 B C A@2 B C A@2 B C D@2 E@2 D@2 F@2 G H G I G H G I G H A@2 B C A@2 B C A@2 B C A@2 B C D@2 E@2 D@2
  F@2 G H G I G H G I G H G I G H G I J@2 H@2 J@2 K@2 L@2 M N L@2 M C G H G I G H G I G H G I G H G I G H G I G H G I G
  H ~@9
>`.pickRestart({
  A: "[[a3,d4]@31 ~]/2", B: "[g3,b3,d4]@15 ~", C: "[a3,c#4]@15 ~", D: "[[a3,c#4]@5 ~ [a3,d4]@5 ~ [a3,c#4]@19 ~]/2",
  E: "[[g3,b3,d4]@5 ~ [g3,a3,c#4]@5 ~ [g3,b3,d4]@19 ~]/2", // G A7 G
  F: "[[g3,b3,d4]@5 ~ [g3,a3,c#4]@5 ~ [g3,b3,d4]@11 ~ [g3,b3,d4]@3 ~ [a3,c#4]@3 ~]/2", G: "a3@3 ~ d4@3 ~@3 a3@5 ~",
  H: "[a3,d4]@15 ~", I: "c#4@5 ~ a3@9 ~", J: "[a3,c4]@15 ~", K: "[b3,d4]@15 ~", L: "[[a3,d4]@13 d4 ~@2]/2",
  M: "[g3,b3]@5 ~ d4@5 ~@5", N: "c#4@15 ~",
})).s("gm_electric_guitar_muted").gain(0.72)

// chords · electric guitar muted · "Electric Guitar (muted)" · soft notes
const electric_guitar_muted_2 = note("<~@124 A B A C A B A B A>".pickRestart({
  A: "a3@3 ~ d4@3 ~@3 a3@5 ~", B: "c#4@5 ~ a3@9 ~", C: "[a3,d4]@15 ~",
})).s("gm_electric_guitar_muted").gain(0.32)

// other · string ensemble 1
const string_ensemble_1 = note("<~@82 A B C D A@2 E F C G E H C G E H ~@35>".pickRestart({
  A: "f2@10 f2@3 f2@3", B: "f2@10 c2@5 ~", C: "d2@10 d2@3 d2@3", D: "d2@10 a2@3 d2@3", E: "g2@10 g2@3 g2@3",
  F: "g2@7 ~ b2@3 ~ b2@3 ~", G: "d2@10 d2@3 a2@3", H: "a2@10 a2@3 a2@3",
})).s("gm_string_ensemble_1").gain(0.72)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@82 A@2 B@2 A@2 C@2 D@2 E F D@2 ~@37>".pickRestart({
  A: "f4@15 ~", B: "f#4@15 ~", C: "g4@15 ~", D: "[f#4@9 ~@7]/2", E: "~@12 d5@3 ~", F: "[e4,a4]@11 ~ a4@3 ~",
})).s("gm_string_ensemble_1").gain(0.46)

// chords · string ensemble 1
const string_ensemble_1_3 = note("<~@82 A@2 B@2 A@2 C@2 D@2 E F D@2 E G ~@35>".pickRestart({
  A: "[a3,c4]@15 ~", B: "[a3,d4]@15 ~", C: "[b3,d4]@15 ~", D: "[[a3,d4]@13 d4 ~@2]/2", E: "[g3,b3]@5 ~ d4@5 ~@5",
  F: "c#4@15 ~", G: "[a3,c#4]@15 ~",
})).s("gm_string_ensemble_1").gain(0.46)

// drums · kick
const kick = s("bd").struct("<~ [x ~@3 x!3 ~ x ~@3 x!3 ~]!7 ~@125>").gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@16 B@7 C A@26 B@32 D B@26 ~ B@10 ~@5>".pickRestart({
  A: "~@4 x ~@2 x ~@8", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "x ~ x ~ x ~ x!3 ~ x ~ x!3 ~",
  D: "x ~@3 x ~ x!3 ~ x ~ x ~ x ~",
})).gain(0.36)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@117 [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~] ~@10 [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]!5>")
  .gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A@16 ~@8 A@50 ~@8 A@27 ~ A@10 ~@5>".pickRestart({
  A: "x ~@3 x!5 ~ x ~ x ~@3",
})).gain(0.36)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@117 [x ~@3 x!5 ~ x ~ x ~@3] ~@10 [x ~@3 x!5 ~ x ~ x ~@3]!5>").gain(0.2)

// drums · splash
const splash = s("cr").struct("<~@32 x ~@33 x ~@23 x ~@42>").gain(0.36)

// drums · bongos
const bongos = s("bongo:18").struct("<~@2 x ~ x ~ x ~@126>").gain(0.94)

// drums · congas
const congas = s("conga:33").struct("<~ [x ~@2 x!2 ~ x!2]!7 [x ~@2 x]!125>").gain(1.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!2 ~ x!4 ~]!7 ~@125>").gain(1.82)

stack(
  percussive_organ, brass_section, bass, bass_soft, distortion_guitar, distortion_guitar_soft, electric_guitar_muted,
  electric_guitar_muted_2, string_ensemble_1, string_ensemble_1_2, string_ensemble_1_3, kick, hihat, hihat_soft,
  mid_tom, mid_tom_soft, splash, bongos, congas, cabasa
)

More by Natalie Imbruglia