Strudelify

Si Forever

Daniele

KeyC majorTempo72 bpm
0:00/0:00
// Si Forever — Daniele
// 72 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E@2 F G H I J G H I K L M A B C D E@2 F G H I J G H I K L N A B C D E@2 F G H I J G H I K L N L N A O@2
>`.pickRestart({
  A: "[e3,g3,d4,e4]@2 [g3,d4,e4] [e3,g3,d4,e4]!3 [e3,g3,d4,e4]@2 [d4,e4] [e3,g3,d4,e4] [g3,d4,e4] [e3,g3,d4,e4] [e3,g3,d4,e4]@2 [e3,g3,d4,e4]!2, c3@15 ~", // Em7 Dsus2 Em7
  B: "[e3,g3,d4,e4]@2 [g3,d4,e4] [e3,g3,d4,e4]!3 [e3,g3,d4,e4]@2 [d4,e4] [e3,g3,d4,e4] [g3,d4,e4] [e3,g3,d4,e4] [e3,g3,d4,e4]@2 [e3,g3,d4,e4]!2, c3@3 b2", // Em7 Dsus2 Em7
  C: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~ e4 [e3,g3,c4,e4] [e3,g3,c4,e4]@2 [e3,g3,c4,e4]!4 [g3,c4,e4]@2 [g3,c4,e4]!2, a2@3 ~, ~@3 [e3,g3,c4,e4]@2 ~@7 e3@4", // C
  D: "[e3,g3,c4,e4]@2 [e3,g3,c4,e4] ~ e4 [e3,g3,c4,e4] [e3,g3,c4,e4]@2 [e3,g3,c4,e4]!4 [g3,c4,e4]@2 [g3,c4,e4]!2, a2@3 g2, ~@3 [e3,g3,c4,e4]@2 ~@11", // C
  E: "[[f2,c3,f3,a3,c4,e4]@2 [c3,f3,a3,c4,e4] ~ [a3,c4,e4] [f2,c3,f3,a3,c4] [f2,c3,f3,a3,c4,e4]@2 [c3,f3,a3,c4,e4] [c4,e4]!2 [c3,f3,a3,c4,e4] [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4] c3 c3@2 [f3,a3,c4,e4] ~ [a3,c4,e4] [f2,c3,f3,a3,c4] [f2,c3,f3,a3,c4,e4]@2 [c3,f3,a3,c4,e4] [c4,e4]!2 [c3,f3,a3,c4,e4]!2 ~ [c4,e4] [c3,f3,a3,c4,e4], ~@3 [f2,c3,f3,a3,c4,e4]@2 ~@4 [f2,c3,f3,a3]@3 ~@3 [f2,f3,a3,c4,e4]@3 ~ [f2,c3,f3,a3,c4,e4]@2 ~@4 [f2,c3,f3,a3]@3 ~ [c3,f3,a3,c4,e4]@2 ~]/2", // Fmaj7 Am F Fmaj7 C Fmaj7 Am F …
  F: "[f2,c3,f3,g#3,c4,f4]@2 [f3,g#3,c4,f4] [f2,c3,f3,g#3,c4,f4] [c3,f3,g#3,c4,f4] [f3,g#3,c4,f4] [f2,c3,f3,g#3,c4,f4]@2 [f2,c3] ~@2 [f2,c3,f3,g#3,c4] [f2,c3,f3,g#3,c4,f4]@2 [f2,c3,f3,g#3,c4,f4]!2, ~@9 [f2,c3,f3,g#3,c4,f4]@2 ~@5, ~@5 f4 ~@2", // Fm F5 Fm
  G: "[g2,c3,e3,g3,d4,e4]@2 [c3,e3,g3,d4,e4] [g2,c3,e3,g3,d4,e4] [c3,e3,g3,d4,e4] [g2,c3,e3,g3,d4,e4] [g2,c3,e3,g3,d4,e4]@2 [e2,b2,e3,g3,d4,e4]@2 [e3,g3,d4,e4] ~ [g3,d4,e4] [e2,b2,e3,g3,d4,e4] [b2,e3,g3,d4,e4]@2, ~@11 [e2,b2,e3,g3,d4,e4]@2 ~@3", // C Em7
  H: "[g2,c3,e3,g3,c4,e4]@2 e3 [g2,c3,e3,g3,c4,e4]!3 [g2,c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4] [g2,c3,e3,g3,c4,e4] [e3,g3,c4,e4] [g2,c3,e3,g3,c4,e4] [g2,c3,e3,g3,c4,e4]@2", // C
  I: "[a3,c4,e4]@2 [a3,c4,e4]!2 [c4,e4] [f3,a3,c4] [a3,c4]@2 [a3,c4,e4]@2 ~ [c4,e4] [f3,a3,c4] f3 [f2,c3,f3]@2, f2@7 ~, [c3,f3]@5 e4@3 ~@4 e4@4, ~@3 c3@4 ~, ~@6 f3@4 [f3,a3,c4,e4]@2 ~ [a3,c4]@3", // Am C F Am C F F5 Fmaj7 …
  J: "[a2,d3,a3,d4,f4]@2 [d3,a3] ~ [d4,f4] [a2,d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2 [b2,d3,g3,b3,g4]@2 [b2,d3,g3,b3,g4] ~ [b3,g4] [g2,b2,d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]@2, ~@3 [a2,d3,a3,d4,f4]@2 ~@6 [g2,b2,d3,g3,b3,g4]@2 ~@3", // Dm D5 Dm G Em G Dm G
  K: "[e2,b2,e3,g3,d4,e4]@2 e4 ~ e4 [e3,g3,d4,e4] [e3,g3,d4,e4]@3 ~ [d4,e4] [e3,g3,d4,e4] [e3,g3,d4,e4]@2 [b2,e3,g3,d4,e4] [e2,b2,e3,g3,d4,e4], ~@3 [e2,b2,e3,g3,d4,e4]@2 e2@10 ~, ~@5 b2@6 b2@3 ~@2, ~@9 [e3,g3,d4,e4]@2 ~@5", // Em7 Dsus2 Em7
  L: "[c3,f3,a3,c4,f4]@2 [c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4] [c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4] ~@2 [a3,c4,f4] [f2,c3,f3,a3,c4,f4] [c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4]!3 [f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4], ~@3 [c3,f3,a3,c4,f4] ~@4, ~@7 f2@2 ~@7", // F
  M: "[d3,g3,c4,g4]@2 [c4,g4] ~ [c4,g4] [g2,d3,g3,c4,g4] [d3,g3,b3,g4]@2 d3 [g2,b2,d3,g3,b3,g4] [b2,d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]!2 ~ [g3,b3,g4] [b2,d3,g3,b3,g4], ~@3 [g2,d3,g3,c4,g4]@2 ~@8 [g2,b2,d3,g3,b3,g4]@2 ~", // Csus2 C5 Gsus4 G Gsus4 G
  N: "[d3,g3,c4,g4]@2 [c4,g4] ~ [c4,g4] [g2,d3,g3,c4,g4] [d3,g3,b3,g4]@2 d3 [g2,b2,d3,g3,b3,g4] [b2,d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]!2 [g3,b3,g4]!2 [b2,d3,g3,b3,g4], ~@3 [g2,d3,g3,c4,g4]@2 ~@8 [g2,b2,d3]@3", // Csus2 C5 Gsus4 G Gsus4 G
  O: "[[e3,g3,d4,e4]@2 [g3,d4,e4] [e3,g3,d4,e4]!3 [e3,g3,d4,e4]@2 [d4,e4] [e3,g3,d4,e4] [g3,d4,e4] [e3,g3,d4,e4] [e3,g3,d4,e4]@2 [e3,g3,d4,e4] ~@4 [g3,c4,g4]@10 ~@3, c3@12 c3@3 [e3,g3,d4,e4]@3 ~@14, ~@16 c3@11 ~@5]/2", // Em7 Dsus2 Em7 C5 Em7
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.3)

// bass · fretless bass
const bass = note(`<
  ~@7 A B C D E F G H I J K L M N O P Q A B C D E F G H I R K S T N U P Q A B C D E F G H I R I R V@3
>`.pickRestart({
  A: "c2@6 c2@2 b1@7 ~", B: "a1@5 ~ a1 ~ g1@7 ~", C: "f1@4 ~@2 f1 ~ f1@4 e2@4", D: "d2@5 ~ d2@2 g1@8",
  E: "c2@3 c2 b1@4", F: "a1@6 a1@2 g1@7 ~", G: "f1@5 ~ f1@5 ~ c2@2 f2@2", H: "e1@5 ~ e1@4 b1@2 g2@2 e2 ~",
  I: "f2@3 f2@5", J: "e2@5 ~ e2@2 g1@7 ~", K: "c2@5 ~ c2@4 g2@2 e3@2 d3@2", L: "c3@6 c3 g2 c2@4 b1@4",
  M: "a2@6 a1@5 e2 c3@2 b2@2", N: "a2@5 ~ a2 e2 a1@4 g1@4", O: "f2@5 ~ f2@4 f2@2 f2@2 c2@2", P: "f1@6 f2@5 ~ f2@2 c2@2",
  Q: "f2@5 ~ f2 c2 f1@4 f2@2 c2@2", R: "e2@5 ~ e2@2 g1@8", S: "c3@3 c3@3 b1@2", T: "a1@6 a1@5 e2 c3@2 b2@2",
  U: "f2@5 ~ f2@3 ~ f2@2 f2@2 c2@2", V: "[c2@13 ~@3]/3",
})).s("gm_fretless_bass").gain(0.5)

// chords · epiano2
const epiano2 = note("<~@17 A B C D E F G ~@10 H B C D E F G ~@15>".pickRestart({
  A: "[c4,d4,e4,g4]@11 ~ d5@4, ~@11 [e5,g5,c6]@5", B: "[c4,e4,g4]@11 ~ [b3,e4,g4]@4",
  C: "[a3,c4,g4]@3 [a3,c4,e4] ~@2 [a3,c4,g4]@3 e4 ~@2 [a3,c4,g4]@2 e4 ~", D: "[a3,c4,e4]@11 ~ [g3,b3,d4]@4",
  E: "a3@9 ~@4 e4@3, f3, [c4,e4]@3 d4, ~@10 a3@5 ~", F: "[f3,a3]@13 g3 g#3 g3, [c4,e4]",
  G: "[g#3,c4,d#4]@10 ~@3 d#4@3, f3@9 ~ f3@6, ~@11 g#3@5, ~@3 c4", H: "[c4,d4,e4,g4]@7 ~ [e4,g4,c5]@4 [g4,c5,d5]@4",
})).s("gm_epiano2").gain(0.31).pan(0.7)

// chords · pad choir
const pad_choir = note("<~@7 A B C D E F G H I J ~@7 A B C D E F G H I J ~@7 A B C D E F G H I J I J ~@3>".pickRestart({
  A: "[e4,g4,c5] [e4,g4,b4]", B: "[c4,e4,a4] [c4,e4,g4]", C: "[f4,a4,c5]", D: "[d4,f4,c5] [g4,b4,d5]",
  E: "[c4,e4,g4] [b3,e4,g4]", F: "[a3,c4,e4] [g3,c4,e4]", G: "[e4,f4,a4,c5]", H: "[e4,g4,b4,d5]", I: "[a3,c4,f4]",
  J: "c4 b3, [g3,d4,g4]", // G5
})).s("gm_pad_choir").gain(0.1)

// chords · pad warm
const pad_warm = note("<~@17 A B C D E@2 F ~@10 A B C D E@2 F ~@15>".pickRestart({
  A: "[c4,e4,g4]", B: "[c4,e4,g4]@3 [b3,e4,g4]", C: "[a3,c4,e4]", D: "[a3,c4,e4]@3 [g3,b3,d4]", E: "[f3,a3,c4,e4]",
  F: "[f3,g#3,c4,d#4]", // Fm7
})).s("gm_pad_warm").gain(0.25).pan(0.1)

// other · overdriven guitar
const overdriven_guitar = note("<~@34 A B C D ~@4 E@2 ~@12>".pickRestart({
  A: "d3@5 ~ d3@2 c3@2 g2@3 ~ a2 c3", B: "d3@2 d3 d3@2 c3 d3@5 ~ a2@2 c3@2", C: "d3@6 d3@2 c3@2 a2@3 ~ a2 c3",
  D: "d3 ~ d3 d3@2 f3@2 e3@9", E: "[e4@6 d4@6 e4@2 d4@4 c4@11 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.45).pan(0.6)

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

// drums · snare
const snare = s("sd").struct("<~@7 A@20 B A@5 C A@10 B A@8 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x!2 ~@2", C: "~@4 x ~@7 x!2 ~@2",
})).gain(0.64)

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

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

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

// drums · shaker
const shaker = s("sh").struct("<~@7 [x!16]!46 ~@3>").gain(0.43)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@23 [~@7 x] ~@16 [~@7 x] ~@15>").gain(3.41)

stack(
  acoustic_guitar_steel, bass, epiano2, pad_choir, pad_warm, overdriven_guitar, kick, snare, hihat, open_hat, crash,
  shaker, bell_tree
)

More by Daniele