Strudelify

How Can I Fall

Breathe

KeyF majorTempo80 bpm
0:00/0:00
// How Can I Fall — Breathe
// 80 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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.

// bass · acoustic bass · "BASS 1"
const bass = note(`<
  A B C D E A B C D F G A D H I G J K L G J K L G@2 D M N O G P D@2 Q A B C D E A B C D F G A D H I G J K L G J K L G@2
  D M N O G P D@2 Q A ~
>`.pickRestart({
  A: "f2@5 ~ f2@2 f2@5 ~ f2@2", B: "d3@5 ~ d3@2 d3@5 ~ d3@2", C: "c3@5 ~ c3@2 c3@5 ~ c3@2",
  D: "bb2@5 ~ bb2@2 a2@5 ~ a2@2", E: "g2@5 ~ g2@2 g2@5 ~ g2@2", F: "g2@5 ~ g2@2 c3@5 ~ c3@2",
  G: "f2@5 ~ f2@2 c3@5 ~ c3@2", H: "bb2@5 ~ bb2@2 a2@3 ~ ab2@3 ~", I: "g2@5 ~ g2@2 d3@5 ~ d3@2",
  J: "d3@5 ~ d3@2 a2@5 ~ a2@2", K: "a2@5 ~ a2@2 bb2@3 ~ bb2@3 ~", L: "a2@5 ~ a2@2 bb2@5 ~ bb2@2",
  M: "bb2@5 ~ bb2@2 a2@3 ~ a2@3 ~", N: "bb2@5 ~ bb2@2 c3@5 ~ c3@2", O: "c3@5 ~ c3@2 g3@5 ~ g3@2",
  P: "f2@5 ~ f2@2 g2@3 ~ a2@3 ~", Q: "g2@5 ~ g2@2 f2@5 ~ f2@2",
})).s("gm_acoustic_bass").gain(0.5)

// bass · synth bass 2 · "BASS 2"
const bass_2 = note(`<
  A B C D E F G C H I F@2 H@2 J F G K@2 F G K@2 F@2 H@2 L M F@2 H@2 N A B C D E F G C H I F@2 H@2 J F G K@2 F G K@2 F@2
  H@2 L M F@2 H@2 N O ~
>`.pickRestart({
  A: "f2!2", B: "d2!2", C: "c3!2", D: "bb2 a2", E: "g2!2", F: "f2@3 f2 f2@4", G: "d2@3 d2 d2@4", H: "bb2@3 bb2 a2@4",
  I: "g2@3 g2 c2@4", J: "g2@3 g2 g2@4", K: "a2@3 a2 bb2@4", L: "g2@3 g2 c3@4", M: "c3 c2", N: "g2@3 g2 f2@4", O: "f2",
})).s("gm_synth_bass_2").gain(0.44)

// chords · piano · "A.PIANO"
const piano = note(`<
  A B C D E F G H I J K@2 L D M N B O@2 A G P Q K@2 R S T U V A D S W A B C D E F G H I J K@2 L D M N B O@2 A G P Q K@2
  R S T U V A D S W X ~
>`.pickRestart({
  A: "~@2 [a3,c4,f4]@3 ~ f3 ~ [a3,c4,f4]@7 ~", B: "[a3,d4,f4]@15 ~", C: "[g3,c4,e4]@8 ~@4 [g3,c4,e4]@3 ~",
  D: "[bb3,d4,f4]@7 ~ [a3,c4,e4]@7 ~", E: "[g3,bb3,d4]@8 ~@2 g3 ~ [g3,bb3,d4]@3 ~", F: "[a3,c4,f4]@15 ~",
  G: "[a3,d4,f4]@8 ~@2 d3 ~ [a3,d4,f4]@3 ~", H: "[g3,c4,e4]@8 ~@2 [g3,c4,e4]@3 ~ bb2 ~",
  I: "bb2 ~ [bb3,d4,f4]@5 ~@3 [a3,c4,e4]@5 ~", J: "[g3,bb3,d4]@7 ~ [g3,c4,e4]@7 ~",
  K: "[~@4 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]@9]/2", L: "bb2 ~ [bb3,d4,f4]@5 ~ [a3,c4,e4]@7 ~",
  M: "[g3,bb3,d4]@8 ~@2 [g3,bb3,d4]@3 ~@3", N: "[a3,c4,f4]@8 ~@2 [a3,c4,f4]@3 ~ d4 ~",
  O: "[a3,c4,e4]@7 ~ [bb3,d4,f4]@7 ~", P: "[a3,c4,e4]@7 ~@3 [bb3,d4,f4]@5 ~", Q: "~@2 [a3,c4,e4]@5 ~ [f3,bb3,d4]@7 ~",
  R: "[f3,bb3,d4]@7 ~ [a3,c4,e4]@7 ~", S: "[bb3,d4,f4]@7 ~@3 [a3,c4,e4]@5 ~", T: "[bb3,d4,f4]@7 ~ [bb3,c4,e4,g4]@7 ~",
  U: "[bb3,c4,e4,g4]@8 ~@2 c3 ~ [bb3,c4,e4,g4]@3 ~", V: "[a3,c4,f4]@8 ~@2 [a3,c4,f4]@3 ~@3",
  W: "g3 ~ [g3,bb3,d4]@5 ~ [a3,c4,f4]@7 ~", X: "f3 ~ [a3,c4,f4]@3 ~ f3 ~ [a3,c4,f4]@7 ~",
})).s("gm_piano").gain(0.48)

// chords · percussive organ · "ORGAN"
const percussive_organ = note(`<
  A B C D E A B C D F A@2 D@2 E A B G@2 A B G@2 A@2 D@2 H I A@2 D@2 J A B C D E A B C D F A@2 D@2 E A B G@2 A B G@2 A@2
  D@2 H I A@2 D@2 J A ~
>`.pickRestart({
  A: "[a3,c4,f4]", B: "[a3,d4,f4]", C: "[g3,c4,e4]", D: "[bb3,d4,f4] [a3,c4,e4]", E: "[g3,bb3,d4]",
  F: "[g3,bb3,d4] [g3,c4,e4]", G: "[a3,c4,e4] [bb3,d4,f4]", H: "[g3,bb3,d4] [bb3,c4,e4]", I: "[bb3,c4,e4]",
  J: "[g3,bb3,d4] [a3,c4,f4]", // Gm F
})).s("gm_percussive_organ").gain(0.29)

// other · flute
const flute = note("<~@34 A B@2 C D E B@2 C F G@2 H I J@2 K@2 L M N O P@3 H Q R@2 G@2 H I S@2 ~>".pickRestart({
  A: "~@2 g4 f4 g4 a4 f4 c4", B: "[c5@2 bb4@2 a4@2 f4@2 g4@2 a4@2 g4@8 ~ c4 d4 f4!2 c4 d4 f4!2 c4 d4 c4]/2",
  C: "c5@4 g4 c4 d4 f4", D: "f4", E: "~ g4@2 f4 g4 a4 a4@2", F: "c5",
  G: "[~ a4@2 a4 bb4 a4 f4@3 a4@2 a4 bb4 a4 f4!2]/2", H: "c5 bb4 a4 f4 g4 a4@2 f4", I: "c5 bb4 a4 f4 g4 f4@2 f4",
  J: "[g4@2 f4@11 a4 g4 a4]/2", K: "[g4@2 a4@8 a4@2 g4@2 a4@6 g4@8 ~ c4 d4 c4]/2", L: "d4 f4 g4 f4 bb4@2 a4 f4",
  M: "f4@5 a4 g4 a4", N: "g4 a4@4 a4 g4 a4", O: "g4@12 ~ c4 d4 c4",
  P: "[d4 f4 g4 f4 bb4@2 a4 f4@2 a4@2 a4 bb4 a4 f4@3 a4!3 bb4 a4 f4!2]/3", Q: "c5 bb4 a4 f4 g4 f4@2 g4",
  R: "[f4@4 c5@5 c4 d4 e4 f4 g4 a4 bb4]/2", S: "[g4 f4@3 [a4,c5,f5]@12]/2",
})).s("gm_flute").gain(0.46)

// other · epiano2 · "E.PIANO 2"
const epiano2 = note("<A B@2 C D E B@2 C F G@2 H I J@2 K@2 L M N O P@3 H Q R@2 G@2 H I S@2 ~@35>".pickRestart({
  A: "~@2 g4 f4 g4 a4 f4 c4", B: "[c5@2 bb4@2 a4@2 f4@2 g4@2 a4@2 g4@8 ~ c4 d4 f4!2 c4 d4 f4!2 c4 d4 c4]/2",
  C: "c5@4 g4 c4 d4 f4", D: "f4", E: "~ g4@2 f4 g4 a4 a4@2", F: "c5",
  G: "[~ a4@2 a4 bb4 a4 f4@3 a4@2 a4 bb4 a4 f4!2]/2", H: "c5 bb4 a4 f4 g4 a4@2 f4", I: "c5 bb4 a4 f4 g4 f4@2 f4",
  J: "[g4@2 f4@11 a4 g4 a4]/2", K: "[g4@2 a4@8 a4@2 g4@2 a4@6 g4@8 ~ c4 d4 c4]/2", L: "d4 f4 g4 f4 bb4@2 a4 f4",
  M: "f4@5 a4 g4 a4", N: "g4 a4@4 a4 g4 a4", O: "g4@12 ~ c4 d4 c4",
  P: "[d4 f4 g4 f4 bb4@2 a4 f4@2 a4@2 a4 bb4 a4 f4@3 a4!3 bb4 a4 f4!2]/3", Q: "c5 bb4 a4 f4 g4 f4@2 g4",
  R: "[f4@4 c5@5 c4 d4 e4 f4 g4 a4 bb4]/2", S: "[g4 f4@2 f4 g4@2 a4@4 ~@6]/2",
})).s("gm_epiano2").gain(0.54)

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

// drums · snare
const snare = s("sd").struct("<A@4 B A@4 B A@12 B A@15 B A@4 B A@12 B A@11 C ~>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x!4 ~@4", C: "~@2 x!3 ~@11",
})).gain(0.43)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@4 B ~@4 B ~@3 A ~@8 B ~@3 A ~@6 A ~@4 B ~@4 B ~@3 A ~@8 B ~@3 A ~@3 C ~
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~@3 x ~@2", C: "~@7 x",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  A@4 B C A D B@2 C A@2 E A@8 B C A@2 B A@11 B C A D B@2 C A@2 E A@8 B C A@2 B A@7 E ~
>`.pickRestart({
  A: "x!5 ~ x!2", B: "x!8", C: "~ x!4 ~ x!2", D: "x!5 ~ x ~", E: "x!7 ~",
})).gain(0.43)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@4 A ~@12 A ~@15 A ~@4 A ~@12 A ~@11 B ~>".pickRestart({
  A: "~@12 x!4", B: "~@3 x ~ x!2 ~",
})).gain(0.43)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A ~@5 A ~@27 A ~@5 A ~@20 A ~>".pickRestart({
  A: "~@7 x",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@68 [~ x] ~>").gain(0.43)

// drums · crash
const crash = s("cr").struct("<~@5 A ~@4 A ~@12 A ~@15 A ~@4 A ~@12 A ~@12>".pickRestart({
  A: "x",
})).gain(0.43)

stack(
  bass, bass_2, piano, percussive_organ, flute, epiano2, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash
)