Strudelify

Io no

Rossi Vasco

KeyF majorTempo79 bpm
0:00/0:00
// Io no — Rossi Vasco
// 79 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 84 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 25.
setcpm(79/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(`<
  ~@2 A@3 B C B D B C B D E F G H B C B D B C B D E F G H E F G H I@2 J K I@2 J K L M N O B C B D B C B D E F G H E F G
  P Q I@2 J K I@2 J K L M N R L M N R L M N R S@2
>`.pickRestart({
  A: "[d1 d1@47]/3", B: "d1@4 ~@7 d1 d2!2 a1 d2", C: "d1@4 ~@7 d1 g1 a1 c2 g1", D: "d1@4 ~@7 d1 c2 d2 g1 a1",
  E: "bb1@6 ~ bb1 d2@8", F: "c2@14 g1 a1", G: "bb1@7 bb1 d2@8", H: "c2@15 ~", I: "f1@2 ~ f1@4 ~",
  J: "db1@5 ~ db1@7 ~ db1 ~", K: "eb1@5 ~ eb1@6 ~ eb1@2 ~", L: "bb1@3 bb1 ~@2 bb1@6 ~ bb1 f1 gb1",
  M: "g1@3 g1 ~@2 g1@6 ~ g1@2 d1", N: "f1@2 ~ f1 ~ f1 f1@6 ~ f1@2 ~", O: "f1@2 ~ f1 ~@2 f1@10", P: "c2@7 c2 c2@7 c2",
  Q: "c2!6 c2@2 ~ c2!5 c2@2", R: "f1@2 ~ f1 ~@2 f1@5 f1!2 c2 f2 f1", S: "[eb2@2 eb2!2 ~@2 bb1@21 ~@5]/2",
})).s("gm_electric_bass_finger").gain(0.42)

// bass · electric bass finger · soft notes
const bass_soft = note("<~@33 A B ~@2 A B ~@3 C D E ~@16 F A B ~@2 A B ~@3 C D E ~ C D E ~ C D E ~@2>".pickRestart({
  A: "~@15 f1", B: "~@5 f1 ~@9 f1", C: "~@5 g1 ~@10", D: "~@15 c1", E: "~@5 f1 ~@10", F: "~@8 c2 ~@7",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · pad warm
const pad_warm = note("<~@5 A@8 B@4 A@8 B@8 C@2 D E C@2 D E F@4 A@8 B@6 G@3 C@2 D E C@2 D E H@12 I@2>".pickRestart({
  A: "[a3@16 bb3@15 ~ [c4,g4]@16 [d4,e4,a4]@16, d4@3 ~, [d2,f4]@32 d2@31 ~]/4", // C5 Dsus2 Dm
  B: "[[bb1,f3,bb3] [d2,a3] ~ e4, d4 [c2,g3,c4], ~ f4@2 ~]/2", C: "[[a3,c4]@15 ~ [bb3,d4]@15 ~, f4@15 ~]/2",
  D: "[bb3,db4,gb4]", E: "[c4,eb4,ab4]", F: "[d4@31 ~@17 a3@8 ~@8, f4@55 ~@9, bb3@3 ~, ~@32 c4@23 ~@9]/4",
  G: "[[bb1,f3,bb3] [d2,a3] [g3,c4]@2 [g3,c4,e4]@2, d4 c2@2, ~ f4@3 ~@2]/3", // Bb5 D5 C5 C
  H: "[d4@31 ~@17 a3@16, f4, bb3@3 ~, ~ c4]/4", I: "[[bb3,eb4,g4]@5 ~ [bb3,c4,f4]@21 ~@5]/2",
})).s("gm_pad_warm").gain(0.15)

// other · alto sax
const alto_sax = note("<~@33 A B C@2 A B C@2 ~@21 A B C@2 A B C@2 ~@6 D ~@3 D ~@3>".pickRestart({
  A: "~@4 f4@2 f4@3 ~ f4@3 ~ f4@2", B: "~@2 f4@3 ~ d4@6 ~@4", C: "[gb4@12 ~ eb4 gb4 eb4@9 ~@2 c4@3 ~ c4@2]/2",
  D: "~@2 g4 f4@2 ~ g4 f4@9",
})).s("gm_alto_sax").gain(0.38)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@2 A B C ~@8 D E D F ~@8 D E D F D E D F G H I J G H I J K@2 L@2 ~@8 D E D F M E M N O G H I J G H I J K@2 P@2 K@2
  P@2 K@2 P@2 ~@2
>`.pickRestart({
  A: "~@13 d3 f3 gb3", B: "d3@2 c3 a2 b2 c3 a2 c3 ~@5 d3 f3 d3", C: "~ d3 ab3 g3@10 ~@3",
  D: "~@3 c4@3 ~ c4@3 f4@6, bb2 ~@3, ~ f3@2 f4@2 ~@3", E: "~@7 f4@2 ~@2 f4@2 e4@3, ~@5 c4@4 e4@4 ~@3, ~@6 g3@4 g3@5 ~",
  F: "~@3 c4 g4 e4 c4 g4!2 e4 ~@6", G: "[f3,c4,f4]@3 [c4,f4] ~ f3 [f3,c4,f4] ~@3 [f3,f4]@4 ~@2, ~@2 f4 ~@5",
  H: "[f3,c4,f4]@2 ~ [f3,c4,f4] [f3,c4]@2 [f3,c4,f4] ~@3 [f3,c4,f4]@4 ~@2", // F5
  I: "[gb3,db4,gb4]@3 [gb3,db4,gb4] ~ gb3 [gb3,db4,gb4] gb4 ~@2 [gb3,db4,gb4]@4 ~ gb3, ~@2 [gb3,db4,gb4] ~@5", // Gb5
  J: "[ab3,eb4,ab4]@3 [eb4,ab4] ~ ab3 [ab3,eb4,ab4] ab4 ~@2 [ab3,eb4,ab4]@5 ~, ~@2 [ab3,ab4] ~@5", // Ab5 Ab
  K: "[~@3 bb3@2 ~ [c4,f4]@9 ~@4 bb3@2 ~ [c4,f4]@6 ~@3 f3, c4@5 ~@11 c4@5 ~@8 c4@3, ~@2 f3@2 ~ f3@9 ~ f3@2 ~ f3@2 ~ f3@7 f3@2 f4@2]/2", // F5
  L: "[~@3 f3@4 ~ bb3@2 ~ f4@2 ~ bb3@2 a3@8 ~@8, bb3@7 ~@3 f3@2 ~ f3@11 ~@8, ~@2 c3@4 ~ c3@2 ~@23]/2",
  M: "~@3 c4@3 ~@4 f4@6, bb2@4 ~@3 c4@9, ~ f3@2 f4@2 ~@3", N: "~@3 c4 g4 e4 c4 g4!2 e4 ~ g4@2 e4@2 ~",
  O: "[g3,c4] g3 [g3,c4] [g3,c4,e4] g3 [g3,c4] [g3,c4,e4] g3 [g3,c4]!2 g3 [g3,c4,e4] [g3,c4]!2 [g3,c4,e4] ~", // C5 C C5 C C5 C C5 C
  P: "[~@3 f3@4 ~ bb3@2 ~ f4@2 ~ bb3@2 ~@6 c4@3 ~@3 f3@4, bb3@7 ~@3 f3@2 ~ f3@6 f3@8 ~@5, ~@2 c3@4 ~ c3@2 ~@7 a3@8 ~ c4@7, ~@22 f4@5 ~@5]/2",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@13 A B A C ~@8 A B A C A B A C D E F G D E F G ~@12 A B A C H B H I ~ D E F G D E F G ~@14
>`.pickRestart({
  A: "~@11 c4@5, ~ bb2@3, ~@3 f3@5", B: "~@9 c4@7", C: "~@7 c4 ~@2 c4 g4@2 ~ c4 ~, ~@13 e4@2 ~",
  D: "~@4 [f3,c4]@2 ~ [c4,f4] ~ f3 c4@4 ~@2", E: "~@4 f4@2 ~ [f3,c4,f4] ~@8", F: "~@7 [gb3,db4] ~ gb3 ~@6",
  G: "~@3 gb3 eb4@2 ~ eb4 ~ ab3 ~@6", H: "~@3 f3@5, ~ bb2@3", I: "~@7 c4 ~@2 c4 ~@3 c4 ~",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note("<~@2 A B C D E@3 D E@3 ~@4 F G@3 F G@3 ~@20 F G@3 F G@3 ~@31>".pickRestart({
  A: "~@13 d3 f3 gb3", B: "d3@2 c3 a2 b2 c3 a2 c3 ~@5 d3 f3 d3", C: "~ d3 ab3 g3@10 d3 e3 f3",
  D: "d3!3 a3 d3 a3 [d3,a3] [g3,a3] ~ [g3,a3]!2 g3 a3 g3 [d3,e3,f3,g3] [c3,g3]", // D5 Gsus2 Em7 C5
  E: "[d3,a3] d3!2 a3 d3 a3 [d3,a3] [g3,a3] ~ [g3,a3]!2 g3 a3 g3 [d3,e3,f3,g3] [c3,g3]", // D5 Gsus2 Em7 C5
  F: "d3!3 a3 d3 a3 [d3,a3] [g3,a3] ~ g3 [g3,a3] g3 a3 g3 [d3,e3,f3,g3] [c3,g3]", // D5 Gsus2 Em7 C5
  G: "[d3,a3] d3!2 a3 d3 a3 [d3,a3] [g3,a3] ~ g3 [g3,a3] g3 a3 g3 [d3,e3,f3,g3] [c3,g3]", // D5 Gsus2 Em7 C5
})).s("gm_overdriven_guitar").gain(0.26)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@5 A B@3 A B@3 ~@4 C D@3 C D@3 ~@20 C D@3 C D@3 ~@31>".pickRestart({
  A: "~@5 d3 ~@10", B: "~ g3 [e3,f3] c3 ~ d3 ~@10", C: "~@5 d3 ~@3 a3 ~@6", D: "~ g3 [e3,f3] c3 ~ d3 ~@3 a3 ~@6",
})).s("gm_overdriven_guitar").gain(0.11)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~ A B@2 C ~@27 D E F G H E F G H I J K L ~@8 M N O P M N O P Q E F G H E F G H R J K S R J K S R J K S T@2
>`.pickRestart({
  A: "~@9 [d1,d2]!7", B: "[d1,d2]!16", C: "[d1,d2]!14 ~@2", D: "~@14 [f2,c3,f3] [f2,c3]",
  E: "[f2,c3,f3]@3 [c3,f3]@2 f2 [f2,c3,f3]@7 ~ [c3,f3] [f2,c3]", // F5
  F: "[f2,c3,f3]@3 [c3,f3]@2 f2 [f2,c3,f3]@7 ~ [f2,c3,f3] f2", // F5
  G: "[gb2,db3,gb3]@4 ~ gb2 [gb2,db3,gb3]@8 [gb2,db3,gb3] gb2", // Gb5
  H: "[ab2,eb3,ab3]@3 [eb3,ab3]@2 ab2 [ab2,eb3,ab3]@5 ab2 [eb3,ab3] ab2 [ab2,eb3,ab3] ~", // Ab5
  I: "[bb2,f3]@3 [f3,bb3] ~ bb2 [bb2,f3,bb3]@8 [f3,bb3] bb2, bb3 ~@7", // Bb5
  J: "[g2,d3,g3]@3 [g2,d3,g3]@2 g2 [g2,d3]@8 [d3,g3] ~, ~@6 g3@7 ~@3", // G5
  K: "[f2,c3,f3]@2 ~ [f2,c3,f3] ~ f2 [f2,c3,f3]@7 ~ [f2,c3,f3] f2", L: "[f2,c3,f3] ~",
  M: "[bb2,f3,bb3]@7 ~ [d3,a3,d4]@7 ~", N: "[c3,g3,c4]@15 ~", O: "[bb2,f3,bb3]@6 [bb2,f3,bb3] [bb2,bb3] [d3,a3,d4]@7 ~",
  P: "[c3,g3,c4]@7 ~", // C5
  Q: "[c3,g3,c4,g4,c5] c3 [c3,g3,c4]!2 [c3,g3,c4,g4]!2 [c3,g3,c4,g4,c5] [c3,g4] [c3,g3] [c3,g3,c4,g4,c5]!5 [c3,g3,c4,g4,c5]@2", // C5
  R: "[f3,bb3]@3 [f3,bb3]@2 bb2 [bb2,f3,bb3]@8 [f3,bb3] bb2, bb2@5 ~@11", // Bb5
  S: "[f2,c3,f3]@3 [f2,c3,f3] ~ f2 [f2,c3,f4]@3 [c3,f3,c4] [f2,c3,f3,c4,f4]!5 [f2,c3,f3,c4], ~@3 [f3,c4] ~@4", // F5
  T: "[[eb3,bb3,eb4]@2 eb3 [eb3,bb3,eb4] ~ eb3 [bb2,f3,bb3]@20 eb3 [ab2,bb2,db3] [db2,eb2,gb2] ~@3]/2", // Eb5 Bb5 Bbm7 Ebm7
})).s("gm_distortion_guitar").gain(0.19)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<A B ~@2 C D ~@55 E ~@21 F>".pickRestart({
  A: "[d1,d2]!16", B: "[d1,d2]!9 ~@7", C: "~@14 [d1,d2]!2", D: "[d1,d2] ~@15", E: "~ g4!2 [g4,c5] c5!2 ~@2 [g4,c5] ~@7",
  F: "~@11 gb3 ~@4",
})).s("gm_distortion_guitar").gain(0.07)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@25 A@2 B@4 C@2 D@3 E D@3 E F G@3 H@2 I@2 J@2 K@2 L@2 C@2 M@2 N@3 D@3 E D@3 E F O@2 P F O@2 P F O@2 P Q@2
>`.pickRestart({
  A: "[[bb3,d4]@8 d4@8 ~@8 e4@7 ~, ~ f4@2 ~, ~@16 c4@15 ~]/2", // Bb
  B: "[[bb3,d4] d4 ~@2 [bb3,d4] d4 ~ [e4,e5], ~@8 f4@16 e4@7 ~@9 [f4,f5]@16 ~@8, ~@16 c4@15 ~@17 c4@15 ~, ~@4 c5@3 d5@3 ~@6]/4", // Bb E F
  C: "[[bb3,d4,d5]@8 d4@8 ~@8 [e4,e5]@7 ~, ~ [f4,f5]@2 ~, ~@16 c4@15 ~]/2", // Bb E F
  D: "[[c5,a5]@15 ~ d5@15 ~ [gb4,db5,gb5]@16, [f4,f5]@2 ~, ~@16 bb5@31 ~]/3", E: "[eb4,c5,eb5,ab5]",
  F: "[f4,f5,bb5,d6]", G: "[c6@3 ~@13 a5@4 ~ [a3,a4] [f4,f5] [e4,e5], [g4,d5,g5]@2 [f4,c5,f5]@3 ~, ~@6 bb5@25 ~@17]/3",
  H: "[[a4,a5] [bb4,bb5], d4]/2", I: "[[e4,g5]@8 [c5,e5]@6 [f4,d5,f5] [g4,e5,g5], g4@27 ~@5, ~ c4]/2",
  J: "[[d4,f4,a4,a5]@16 [d4,f4,bb4,bb5]@15 ~, f5]/2", K: "[[c4,e4,g4,e5,g5]@31 ~]/2",
  L: "[[bb3,d4] d4 ~ [e4,e5], ~ [f4,f5]@2 ~, ~@16 c4@15 ~]/2", // Bb E F
  M: "[[bb3,d4,d6] d4 ~ [e4,e5,e6], ~ [f4,f5,f6]@2 ~, ~@16 c4@15 ~]/2", // Bb E F
  N: "[[bb3,d4,d5]@8 d4@8 c4@15 ~ [c4,e4,e5]@16, d6@16 c6@31 ~, ~ [f4,f5]@3 ~@2]/3", // Bb C F
  O: "[c6@3 ~@5 [f4,c5,f5]@8, [g4,d5,g5] ~, ~@3 bb5@13]/2", P: "[f4,c5,f5,a5]",
  Q: "[[bb3,eb6]@2 g5 [g5,eb6] ~@2 [f3,bb3,c4,f5,c6]@21 ~@5, [g3,eb4] ~@7, g5 ~@2 bb3@2 ~@27]/2", // Eb5 Cm Fsus4 Cm
})).s("gm_string_ensemble_2").gain(0.23).pan(0.4)

// chords · string ensemble 1 · Dm C
const string_ensemble_1 = note("<~@2 [[a3,d4,f4,a4,f6] [g3,c4,e4,g4,e6]@15] ~@81>")
  .s("gm_string_ensemble_1").gain(0.56).pan(0.4)

// chords · epiano2
const epiano2 = note(`<
  ~@2 A ~@13 B ~@16 C D E F C D E F G H I J ~@15 K L C D E F C D E F G H I M G H I M G H I M N@2
>`.pickRestart({
  A: "[a3,d4,f4] [g3,c4,e4]@14 ~", B: "~@2 f4@3 g4@2 ~ [c4,e4]@8, c4 ~, ~ g3@6 g3@8 ~",
  C: "[c4,f4,g4]@5 c4 [c4,f4,a4]@7 ~ f4@2, ~@13 c4@2 ~", D: "[d4,f4,bb4]@5 d4 [d4,f4,bb4]@7 d4 f4 d4",
  E: "[db4,gb4,bb4]@5 db4 [db4,gb4,bb4]@6 ~@2 bb4 ~, ~@12 db4@3 ~, ~@13 gb4@3", // Gb
  F: "[eb4,ab4,c5]@5 eb4 [eb4,ab4,c5]@7 ~ ab4 ~, ~@13 eb4@2 ~", G: "[f3,c4]@3 bb3@2 f3 [bb3,d4,f4]@9 bb3",
  H: "[bb3,d4,f4]@12 bb3 [d4,f4]@2 bb3, ~@13 bb3 ~@2", I: "[bb3,c4,f4]@13 [c4,f4]@2 bb3", J: "[a3,c4,f4] ~",
  K: "[c4,f4,g4]@15 ~", L: "[c4,e4,g4]!7 c4!2 [c4,e4,g4]!6 ~",
  M: "[f4,a4]@2 ~ [f4,a4]@2 c4 [c4,f4,a4]@3 ~ f4 c5@2 ~ a4@2, c4@3 ~@6 c4@2 f4@5, ~@13 c4@3", // F
  N: "[[eb4,g4,bb4]@2 ~ [eb4,bb4] ~@2 [c4,f4,bb4]@22 ~@4, ~@3 g4@2 ~@27]/2", // Eb Eb5 Fsus4
})).s("gm_epiano2").gain(0.33).pan(0.7)

// other · woodblock
const woodblock = note(`<
  ~@2
  [a2 ~@3 a2 ~@3 a2 ~@3 a2 ~@3]!59
  [f5 ~@3 f5 ~@3 f5 ~@3 f5 ~@3]
  [a2 ~@3 a2 ~@3 a2 ~@3 a2 ~@3]!20
  ~@2
>`).s("gm_woodblock").gain(0.47)

// other · synth strings 2
const synth_strings_2 = note("<A@5 ~@79>".pickRestart({
  A: "[d1,d2]/5", // D
})).s("gm_synth_strings_2").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@2 A B C@28 D E@7 F E@3 G E@7 H E@7 I J E@7 F E@3 G E@7 G K L>".pickRestart({
  A: "x!2 ~@14", B: "x ~@2 x ~@4", C: "x ~@5 x ~@4 x ~@4", D: "x ~@5 x ~@4 x!5", E: "x ~@2 x ~@2 x ~@3 x ~@5",
  F: "x ~@2 x ~@2 x ~@4 x ~@4", G: "x ~@2 x ~@2 x!2 ~@3 x ~@4", H: "x ~@2 x ~@3 x ~@2 x!2 ~@4",
  I: "x ~@2 x ~@4 x ~ x ~@5", J: "~@3 x!3 ~@5 x!5", K: "x ~@2 x ~@2 x ~@9", L: "~@3 x",
})).gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A B ~@5 C ~@11 C ~@10 D ~ E ~@3 E ~@3 E ~ E ~ E ~ E C E ~@3 E ~ E ~ E ~ F G ~ E ~@3 E ~@3 E ~ E ~ E ~@3 E ~@2 H ~
>`.pickRestart({
  A: "~@6 x ~@4 x ~@3 x", B: "~@11 x ~@3 x", C: "~@4 x!2 ~@2 x!2 ~ x!2 ~@3", D: "~@9 x!2 ~@5", E: "~@15 x",
  F: "~@7 x ~@8", G: "x!3 ~@6 x!2 ~@5", H: "~@5 x ~@10",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@20 B@7 C B@3 D B@3 E B@3 F B@7 G B@8 H B@3 D B@3 E B@3 F B@3 D B@3 I J K
>`.pickRestart({
  A: "~@3 x ~@8 x ~@3", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@6 x!2 ~@3", E: "~@2 x ~@2 x ~ x",
  F: "~@4 x ~@3 x!2 ~@2 x ~@3", G: "~@4 x ~@3 x!2 ~@2 x!2 ~@2", H: "~ x!6 ~@2 x!6 ~", I: "~@4 x ~@3 x!2 ~@6", J: "x",
  K: "~@11 x ~@4",
})).gain(0.58)

// drums · low tom
const low_tom = s("lt").struct("<~@32 A ~@3 B ~@3 C ~@3 D ~@7 E ~@8 F ~@3 B ~@3 C ~@3 G ~@3 B ~@3 H I ~>".pickRestart({
  A: "~@9 x!7", B: "~@7 x", C: "~@3 x", D: "~@5 x ~ x", E: "~@15 x", F: "x!7 ~@2 x!6 ~", G: "~@10 x ~@2 x!2 ~",
  H: "~@5 x ~@2", I: "~@3 x ~@12",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@3 B@24 C@4 D E F G D E F H D E F G D E@3 D E@2 I J K L K D E@2 F G D E F G D E F H D E F G D E F H D E F H ~@2
>`.pickRestart({
  A: "x!3 ~ x ~ x ~", B: "x!4", C: "x ~@3 x ~@3 x ~@2 x!2 ~@3", D: "~ x!2 ~ x!3 ~ x!3 ~ x!3 ~",
  E: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", F: "x!3 ~ x!7 ~ x!3 ~", G: "x!7 ~@9", H: "x!7 ~ x ~@7", I: "x!3 ~ x!3 ~ x ~@7",
  J: "~ x!10 ~ x!4", K: "x!16", L: "x!11 ~ x!4",
})).gain(0.32)

// drums · hihat · soft notes
// … 53 more lines

More by Rossi Vasco