Strudelify

Rewind

Rossi Vasco

KeyG majorTempo127 bpm
0:00/0:00
// Rewind — Rossi Vasco
// 127 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(127/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.

// bass · electric bass finger
const bass = note(`<
  ~@36 A@4 B C A@6 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 ~@16 B C A@2 B C A@2 D@2 E A D@2 E A B C A@2
  B C A@2 B C A@2 B C A@2 F@2
>`.pickRestart({
  A: "g1!8", B: "c2!8", C: "d2!5 e1 f1 f#1", D: "[e2@2 f#2@3 ~ g2@4 b2@4 a2@8 d2@2 a2@2 d2@2 a2@3 ~]/2", E: "g2 g1!7",
  F: "g1/2",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · pad warm
const pad_warm = note(`<
  ~@4 A@5 B C@2 A@5 B C@2 D B C@2 D B C@2 D B C@2 D B E@2 ~@40 A@5 B C@2 D B C@2 D B E@2 ~@34
>`.pickRestart({
  A: "[~@4 [c3,c4], g3]/5", B: "[d3,a3,d4]", C: "[g3@31 ~]/2", D: "[c3,c4]", E: "[~@3 g2, g3@31 ~, ~@16 g1@15 ~]/2",
})).s("gm_pad_warm").gain(0.22)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@36 A@4 B C D@2 A@4 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 ~@16 B C D@2 B C D@2 B C D@2 B C D@2 B C
  D@2 B C D@2 B C D@2 B C D@2 E@2
>`.pickRestart({
  A: "[g2!16 g2!16, [d3,g3]]/2", B: "g2!16, [c3,g3]@15 ~", C: "a2!16, [d3,g3]", D: "[g2!16 g2!16, [d3,g3]@31 ~]/2",
  E: "[[g2,d3]@30 [b2,c3] [b1,c2,d2,e2,f2,a2]]/2", // G5 Cmaj7 Bm7b5
})).s("gm_distortion_guitar").gain(0.23).pan(0.3)

// chords · distortion guitar · C F
const distortion_guitar_2 = note("<~@125 [~@13 [c4,e4] [f3,g3,a3] g2]>").s("gm_distortion_guitar").gain(0.14).pan(0.8)

// other · distortion guitar
const distortion_guitar_3 = note(`<
  ~@36 A@4 ~ B@3 A@4 ~ B@3 ~ B@3 ~ B@3 C@2 D@2 C@2 D@2 ~ B@3 ~ B@3 ~@16 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 ~ B@3 ~ B@3 ~
  B@3 ~ B@3 E@2
>`.pickRestart({
  A: "[~ g3, d4]/4", B: "[d4@47 ~]/3", C: "[e3@2 f#3@3 ~ g3@4 b3@4 a3@8 d3@2 a3@2 d3@2 a3@4]/2", D: "[g3@31 ~]/2",
  E: "[g3,g4]/2", // G
})).s("gm_distortion_guitar").gain(0.32)

// other · distortion guitar
const distortion_guitar_4 = note("<~@35 [g3!16]!41 ~@15 [g3!16]!35>").s("gm_distortion_guitar").gain(0.1)

// chords · rock organ
const rock_organ = note(`<
  ~@4 A@5 B C@2 D@5 B E@2 F B E@2 F B E@2 F B E@2 F B E@2 ~@40 D@5 B E@2 F B E@2 F B E@2 ~@32 G@2
>`.pickRestart({
  A: "[~@4 [c5,e5], g4@79 ~]/5", B: "[f#4,a4,d5]", C: "g4/2",
  D: "[b5@6 a5@10 c6@6 b5@9 ~ b5@6 a5@10 c6@6 b5@9 ~ [c5,e5]@16, g4@79 ~, g5@63 ~@17]/5", // C
  E: "[b5@6 a5@10 c6@6 b5@9 ~, [g4,g5]]/2", F: "[c5,e5]", G: "[g4,a4,d5]/2",
})).s("gm_rock_organ").gain(0.12)

// other · pad bowed
const pad_bowed = note(`<
  ~@4 A B A C D E A B A B A C D E A B D E A B D E A B D E A B D E A B A B A C D E A B A B A C D E A B D E A B D E A B D
  E A B D E A B D E A B D E A B A B A C D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B
  D E A B F@2
>`.pickRestart({
  A: "b4@3 a4@5", B: "c5@6 b4@9 ~", C: "c5@3 b4@5", D: "g4", E: "a4", F: "[~@15 g5@17, ~@5 d5@11]/2",
})).s("gm_pad_bowed").gain(0.12)

// other · orchestra hit
const orchestra_hit = note("<~@4 [g4!3 ~@13]!120 ~@2>").s("gm_orchestra_hit").gain(0.24)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<A ~ A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 A ~ A ~@5 A ~ A ~@31 A ~@7 A ~@35>".pickRestart({
  A: "~@4 g3!3 d4!4 g3!5",
})).s("gm_lead_2_sawtooth").gain(0.18).pan(0.8)

// bass · synth bass 2
const bass_2 = note("g2!16").s("gm_synth_bass_2").gain(0.27).pan(0.7)

// bass · synth bass 1
const bass_3 = note("<A@4 B@120 C D>".pickRestart({
  A: "[[g1,g2]@63 ~]/4", B: "g2!3 ~@3 g2!5 ~@5", C: "g2!3 ~@3 g2!10", D: "g2!16",
})).s("gm_synth_bass_1").gain(0.09).pan(0.2)

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

// drums · snare
const snare = s("sd").struct("<~@31 A B@4 C@7 D C@7 D C@23 D ~@11 A B@4 C@32 ~ E>".pickRestart({
  A: "~@5 x!11", B: "x!16", C: "~ x ~ x", D: "~@4 x ~@5 x!6", E: "~@15 x",
})).gain(0.44)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@28 [x!16]!3 [x!5 ~@11] ~@52 [x!16]!3 [x!5 ~@11] ~@38>").gain(0.22)

// drums · hihat
const hihat = s("hh").struct("<[x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!124 ~@2>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x]!124 ~@2>").gain(0.37)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A ~@7 A ~@3
  A ~@3 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ B C
>`.pickRestart({
  A: "x", B: "x!2 ~@14", C: "~ x",
})).gain(0.44)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@124 [~@2 x!14] [x!8 ~@8]>").gain(0.15)

// drums · tambourine
const tambourine = s("tb").struct("<[x!16]!124 ~@2>").gain(0.22)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!124 ~@2>").gain(0.22)

stack(
  bass, pad_warm, distortion_guitar, distortion_guitar_2, distortion_guitar_3, distortion_guitar_4, rock_organ,
  pad_bowed, orchestra_hit, lead_2_sawtooth, bass_2, bass_3, kick, snare, snare_soft, hihat, open_hat, crash,
  crash_soft, tambourine, shaker
)

More by Rossi Vasco