Strudelify

I Try

Macy Gray

KeyG minorTempo76 bpm
0:00/0:00
// I Try — Macy Gray
// 76.3 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 tremolo strings (copy of ch 8 string ensemble 1)
// note: Full arrangement: all 83 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76.3/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 · piano
const piano = note(`<
  ~@2 A B C ~ A B D E F G H I J K L M N O L M P Q R@2 P Q S T U V W X Y O L M N O L M ~@6 Z AA AB AC AD AE AF AG AH AI
  AJ AG AH AI AJ AG AH AI AJ AG AH AI AJ ~@12
>`.pickRestart({
  A: "[d4,gb4]", B: "[db4,e4]", C: "[b3,e4,g4]@3 ~", D: "[e4,g4]", E: "~@4 e6 d6 b5 a5, [e4,g4]", F: "[g2,g3,d4,g4]",
  G: "[db3,a3,gb4]@3 [e3,db4,a4]", H: "[g3,d4,g4]", I: "a2 a2@5 [a2,a3,d5] [e3,e4,e5], [a3,e4,a4]@3 ~",
  J: "[gb4,d5,gb5]", K: "[a4,a5]@8 ~@2 [e4,a4,d5]@5 ~", L: "~ [d4,g4]@27 ~@3 [e4,a4,d5]@15 ~@2",
  M: "~ [d4,g4,b4]@21 ~@3 [e4,g4,a4,b4]@21 ~@2", N: "~ [gb4,d5,gb5]@47", O: "~ [a4,a5]@24 ~@6 [e4,a4,d5]@15 ~@2",
  P: "~ [d4,gb4]@47", Q: "~ [db4,e4]@47", R: "[~ [b3,e4,g4]@36 ~@6 [b3,e4,g4]@36 ~@17]/2", S: "~ [e4,g4]@47",
  T: "~@25 e6@6 d6@6 b5@6 a5@5, ~ [e4,g4]@47", U: "~ [g2,g3,d4,g4]@47", V: "~ [db3,a3,gb4]@36 [e3,db4,a4]@11",
  W: "~ [g3,d4,g4]@47", X: "~ a2@6 a2@30 [a2,a3,d5]@6 [e3,e4,e5]@5, ~ [a3,e4,a4]@36 ~@11", Y: "~ [d3,d4,gb4,d5,gb5]@47",
  Z: "~@8 [e4,e5]@3 [e4,e5]@9 ~@24 [e3,e4]@4", AA: "~@2 [e3,e4]@24 [e3,e4]@6 [e3,e4]@6 [e3,e4]@3 [e3,e4]@6 ~",
  AB: "~ [g2,g3,d4,g4]@23", AC: "~ [db3,a3,gb4]@18 [e3,db4,a4]@5", AD: "~ [g3,d4,g4]@23",
  AE: "~@2 a2@6 a2@18 [bb2,bb3]@9 ~@3 d5@6 [f3,f4,e5]@4, ~ [a3,e4,a4]@12 bb4@11, ~@19 [bb2,bb3]@5", // Bb Fmaj7 A5 Bb
  AF: "~ [eb3,eb4,g4,eb5,g5]@23", AG: "~@2 [bb4,bb5]@24 ~@6 [f4,bb4,eb5]@15 ~",
  AH: "~@2 [eb4,ab4]@27 ~@3 [f4,bb4,eb5]@15 ~", AI: "~@2 [eb4,ab4,c5]@21 ~@3 [f4,ab4,bb4,c5]@21 ~",
  AJ: "~ [g4,eb5,g5]@23", // Cm
})).s("gm_piano").gain(0.61)

// chords · piano · soft notes
const piano_soft = note("<~@71 A B C D A B C D E F G ~>".pickRestart({
  A: "~@2 [bb4,bb5]@24 ~@6 [f4,bb4,eb5]@15 ~", B: "~@2 [eb4,ab4]@27 ~@3 [f4,bb4,eb5]@15 ~",
  C: "~@2 [eb4,ab4,c5]@21 ~@3 [f4,ab4,bb4,c5]@21 ~", D: "~ [g4,eb5,g5]@23", E: "~@2 [bb4,bb5]@24 ~@7 [f4,bb4,eb5]@15",
  F: "~ [eb4,ab4]@9 ~ [f4,bb4,eb5]@5", G: "~ [eb4,ab4,c5]@7 ~ [f4,ab4,bb4,c5]@7",
})).s("gm_piano").gain(0.18)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C D E B F G H I J K L M N O P Q R S T U V W X U Y Z AA AB AC AD AE AF N O P Q R S AG AH AI AJ AK AL AM AN AO
  AP AQ AR AS AT AU AV AS AT AU AV AS AT AU AV AS AT AU AV AS ~@12
>`.pickRestart({
  A: "d2@5 d2@2 b1", B: "a1", C: "e1@5 a1 b1 d2", D: "e2 ~@15", E: "d2", F: "e1", G: "e2@4 e2 d2 b1 a1, e1",
  H: "g1@4 d2 d2@2 g1", I: "gb1@4 db2 db2@2 gb1", J: "e1@2 e1@11 ~ e1@2", K: "a1@11 ~ a1@4", L: "d2@7 ~ d2@2 d2@4 b1@2",
  M: "a1@8 ~ a1@2 a1@3 g1@2", N: "~ e1@21 ~@3 e1@6 e1@12 a1@5", O: "~ g1@21 ~@3 a1@6 a1@15 ~@2",
  P: "~ d2@18 ~@3 d2@3 gb2@6 d2@6 gb2@6 g2@5", Q: "~ a2@24 e2@3 a2@3 e2@3 a1@9 gb2@5",
  R: "~ e2@21 a1@3 e2@6 e2@12 g2@5", S: "~ a2@12 e2@12 a1@12 e2@11", T: "~ d2@30 d2@12 b1@5", U: "~ a1@47",
  V: "~ e1@30 a1@6 b1@6 d2@5", W: "~ e2@3 ~@44", X: "~ d2@47", Y: "~ e1@47", Z: "~ e2@24 e2@6 d2@6 b1@6 a1@5, ~ e1@47",
  AA: "~ g1@24 d2@6 d2@12 g1@5", AB: "~ gb1@24 db2@6 db2@12 gb1@5", AC: "~ e1@6 e1@33 ~@3 e1@5",
  AD: "~ a1@33 ~@3 a1@11", AE: "~ d2@21 ~@3 d2@6 d2@12 b1@5", AF: "~ a1@24 ~@3 a1@6 a1@9 g1@5",
  AG: "~ f2@24 c2@3 ~@3 c2@12 a2@5", AH: "~ a1@24 e2@3 ~@3 e2@9 ~@3 e2@5", AI: "~ f2@24 c2@3 ~@3 c2@12 f2@5",
  AJ: "~ e2@36 ~@6 b1@5", AK: "~ c2@24 g2@3 ~@3 g2@12 c2@5", AL: "~ b1@24 gb2@3 ~@3 gb2@17",
  AM: "~@2 e2@21 ~@3 e2@3 ~@15 b1@4, ~@2 e2", AN: "~@2 [e1,e2]@21 ~@3 [e1,e2]@6 [e1,e2]@6 [e1,e2]@6 [e1,e2]@4",
  AO: "~ g1@12 d2@3 d2@6 g1@2", AP: "~ gb1@12 db2@3 db2@6 gb1@2", AQ: "~@2 e1@6 e1@33 ~@3 e1@4", AR: "~ a1@12 bb1@11",
  AS: "~@2 eb2@21 ~@3 g2@6 ab2@6 a2@6 bb2@4", AT: "~@2 [bb1,bb2]@24 ~@3 f2@6 bb2@6 f2@3 bb1@4",
  AU: "~@2 f2@21 ~@3 c2@6 f1@12 bb1@4", AV: "~@2 ab1@21 ~@3 bb1@6 bb1@15 ~",
})).s("gm_acoustic_bass").gain(0.64)

// bass · acoustic bass · soft notes
const bass_soft = note("<~@71 A B C D A B C D E@3 ~>".pickRestart({
  A: "~@2 [bb1,bb2]@24 ~@3 f2@6 bb2@6 f2@3 bb1@4", B: "~@2 f2@21 ~@3 c2@6 f1@12 bb1@4",
  C: "~@2 ab1@21 ~@3 bb1@6 bb1@15 ~", D: "~@2 eb2@21 ~@3 g2@6 ab2@6 a2@6 bb2@4",
  E: "[~@2 [bb1,bb2]@24 ~@4 f2@6 bb2@6 f2@3 bb1@6 f2@21 ~@3 c2@6 f1@12 bb1@6 ab1@21 ~@3 bb1@6 bb1@15]/3", // Bb
})).s("gm_acoustic_bass").gain(0.19)

// other · electric guitar muted
const electric_guitar_muted = note("<A@2 B C@2 D B C E F ~@12 G H@2 I G H J K ~@12 L ~@40>".pickRestart({
  A: "[~@24 [db3,e3]@2 [db3,e3] [db3,e3]@53 ~@16]/2", B: "d3!3 ~ d3!2 ~ d3", C: "e3!3 ~@2 e3 ~ d3", D: "db3 ~@15",
  E: "e3!3 ~@2 e3 ~@2", F: "e3@2 e3@2 e3@2 ~@2 e3@7 ~", G: "~ d3@6 d3@6 d3@6 ~@6 d3@6 d3@6 ~@6 d3@5",
  H: "~ e3@6 e3@6 e3@6 ~@12 e3@6 ~@6 d3@5", I: "~ db3@3 ~@44", J: "~ e3@6 e3@6 e3@6 ~@12 e3@6 ~@11",
  K: "~ e3@6 e3@6 e3@6 ~@6 e3@21 ~@2", L: "~@7 e4@3 ~@38",
})).s("gm_electric_guitar_muted").gain(0.35)

// chords · vibraphone
const vibraphone = note("<~@11 A B ~@18 C D ~@18 E F ~@30>".pickRestart({
  A: "~ db6 ~@3 db6 ~@2", B: "~@4 [d5,e5] ~@3", C: "~@7 db6@6 ~@18 db6@6 ~@11", D: "~@25 [d5,e5]@6 ~@17",
  E: "~@4 db6@3 ~@9 db6@3 ~@5", F: "~@13 [d5,e5]@3 ~@8",
})).s("gm_vibraphone").gain(0.2)

// other · rock organ
const rock_organ = note(`<
  ~@14 A B C D E F C D G H I ~ G H J@2 K L K M E F C D E F C D N O P Q R S T U V W V X Y Z AA AB Y Z AA AB Y Z AA AB Y
  AC AA AB AD@2 ~@11
>`.pickRestart({
  A: "[gb5,d6], a6 ~", B: "[a5,a6]@7 [b5,b6]", C: "~ [d6,d7]@18 [f5,f6]@3 [a5,a6]@3 [b5,b6]@3 ~@3 [a5,a6]@17",
  D: "~ [d5,d6]@47", E: "~ [gb5,d6]@47, ~ a6@24 ~@23", F: "~ [a5,a6]@42 [b5,b6]@5", G: "~ [d5,gb5]@47",
  H: "~ [db5,e5]@47", I: "~ [e5,d6]@47", J: "[~ d6@78 gb6@12 ~@5, ~ e5@90 ~@5]/2", K: "~ [g5,b5]@47",
  L: "~ [gb5,a5]@47", M: "~ [a5,db6]@47", N: "~ e5@47", O: "~ e5@36 c5@11", P: "~ e5@3 ~@3 e5@12 c5@12 f4@6 a4@6 e5@5",
  Q: "~ d5@18 b4@6 g4@6 e4@6 g4@11", R: "~ e4@39 ~@3 e4@3 ~@2", S: "~ b4@39 ~@4 b4@3 ~", T: "~@2 e4@39 ~@3 e4@3 ~",
  U: "~@2 [e4,e5]@24 g5@6 gb5@3 f5@3 e5@3 eb5@3 d5@3 ~", V: "~ [g5,b5]@23", W: "~ [gb5,a5]@23",
  X: "~ [a5,db6]@12 bb5@11", Y: "~ [g5,eb6]@23, ~ bb6@12 ~@11", Z: "~ [bb5,bb6]@21 [c6,c7]@2",
  AA: "~@2 [eb6,eb7]@18 [gb5,gb6]@3 [bb5,bb6]@3 [c6,c7]@3 ~@3 [bb5,bb6]@16", AB: "~ [eb5,eb6]@23",
  AC: "~ eb6@6 d6@6 c6@6 ~@3 [c6,c7]@2, ~ [bb5,bb6]@21 ~@2", AD: "[~ eb6@27 d6@6 c6@6 ~@8, ~ g5@24 ~@23]/2",
})).s("gm_rock_organ").gain(0.27).pan(0.7)

// other · rock organ · soft notes
const rock_organ_soft = note("<~@70 A B C D E@2 C D F@3 G ~>".pickRestart({
  A: "~ bb6@12 ~@11", B: "~ [bb5,bb6]@21 [c6,c7]@2",
  C: "~@2 [eb6,eb7]@18 [gb5,gb6]@3 [bb5,bb6]@3 [c6,c7]@3 ~@3 [bb5,bb6]@16", D: "~ [eb5,eb6]@23",
  E: "[~ g5@24 ~@3 d6@6 c6@6 ~@6 [c6,c7]@2, ~ eb6@27 ~@20, ~ bb6@12 ~@12 [bb5,bb6]@21 ~@2]/2", // C Bb
  F: "[~@2 g5@48 ~@6 d6@12 c6@12 ~@13 [c6,c7]@6 [eb6,eb7]@18 [gb5,gb6]@3 [bb5,bb6]@3 [c6,c7]@3 ~@3 [bb5,bb6]@15, ~ eb6@27 ~@44, ~ bb6@12 ~@12 [bb5,bb6]@21 ~@26]/3", // C Eb Gb Bb C Bb
  G: "~ [eb5,eb6]@15", // Eb
})).s("gm_rock_organ").gain(0.08).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@42 A B C D E F G H ~@33>".pickRestart({
  A: "~ e6@36 a5@11, ~ [a4,e5]@47", B: "~ [g5,c6]@36 ~@11, ~ c5@47", C: "~ [e5,e6]@30 [a4,a5]@12 [e5,e6]@5",
  D: "~ [d5,d6]@24 [b4,b5]@6 [g4,g5]@6 [e4,e5]@11", E: "~ b5@36 g5@11, ~ [d5,d6]@47", F: "~ gb5@12 a5@35, ~ d5@47",
  G: "~ [e5,g5]@23", H: "~@2 [e5,a5]@45 ~",
})).s("gm_string_ensemble_2").gain(0.2)

// chords · string ensemble 1 · Ab5 D7 Dbm F5
const string_ensemble_1 = note(`<
  [e2@6 ~@18 db5@11 ~ e5@2 ~ [eb2,ab5]@2 ~ [d2,c6]@2 ~ [db2,e6]@3, ~@4 e2@9 ~@3, ~@35 d5@3 gb5@3 b5@3 eb6@3 ~]
  [[c2,f6]@3 ~]
  ~@81
>`).s("gm_string_ensemble_1").gain(0.17).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A C A B A D A B A D A B E F E G E H E G E I E G E F E G E F E G E F E G E H E G E F E G J K J L J K J L J M J
  L J M J L J M J L J M ~@13
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@4 x ~@2", C: "x", D: "x ~@3 x!2 ~ x", E: "~ x ~@23 x ~@5 x ~@16",
  F: "~ x ~@23 x ~@5 x ~@11 x ~@4", G: "~ x ~@29 x ~@16", H: "~ x ~@23 x ~@22", I: "~ x ~@46",
  J: "~ x ~@11 x ~@2 x ~@7", K: "~ x ~@11 x ~@10", L: "~ x ~@14 x ~@7", M: "~ x ~@11 x ~@2 x ~@5 x ~",
})).gain(0.39)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@70 A B A C A B A C A D E F ~>".pickRestart({
  A: "~ x ~@11 x ~@2 x ~@7", B: "~ x ~@14 x ~@7", C: "~ x ~@11 x ~@2 x ~@5 x ~", D: "~@2 x ~@30 x ~@14",
  E: "~ x ~@7 x ~ x ~@4", F: "~ x ~@7 x ~ x ~@3 x",
})).gain(0.05)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@3 ~ A@3 B A@3 B A@2 C D C@3 E C@3 ~ C@3 D C@3 D C@3 D C@3 E C@3 D C F G H I@2 J H I@2 J K I@2 J K I@2 J K I@2 J
  K L@2 M ~@10
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@13 x ~@23 x ~@10", D: "~@13 x ~@23 x ~@2 x ~@7", E: "~@13 x ~@34",
  F: "~@13 x ~@24 x ~@9", G: "~@7 x ~@11 x ~@4", H: "~@14 x ~@5 x ~@2 x ~@2 x ~@5 x ~@5 x ~@2 x ~@2 x ~@2 x",
  I: "~@2 x ~@11 x ~@5 x ~@2 x ~@14 x ~@5 x ~@3", J: "~@2 x ~@11 x ~@5 x ~@2 x ~@14 x ~@5 x ~@2 x",
  K: "~@2 x ~@11 x ~@5 x ~@2 x ~@14 x ~@2 x ~@2 x ~@3", L: "~@2 x ~@17 x ~@2 x ~@20 x ~@3",
  M: "~@2 x ~@17 x ~@2 x ~@20 x ~@2 x",
})).gain(0.39)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@70 A@3 B C@2 D B C E F G ~>".pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~@2 x ~@11 x ~@5 x ~@2 x ~@14 x ~@2 x ~@2 x ~@3",
  C: "~@2 x ~@11 x ~@5 x ~@2 x ~@14 x ~@5 x ~@3", D: "~@2 x ~@11 x ~@5 x ~@2 x ~@14 x ~@5 x ~@2 x",
  E: "~@2 x ~@11 x ~@5 x ~@2 x ~@15 x ~@5 x ~@2", F: "~ x ~@3 x ~ x!2 ~@4 x ~ x", G: "x!2 ~@3 x ~ x!2 ~@4 x!3",
})).gain(0.1)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 A@3 ~ A@10 B@5 C B@3 ~ B@15 C B@6 D E D@3 E D@16 ~@13>".pickRestart({
  A: "~ x!5 ~@2", B: "~@7 x ~@5 x ~@5 x ~@5 x ~@5 x ~@16", C: "~@7 x ~@5 x ~@5 x ~@5 x ~@22",
  D: "~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@7", E: "~@4 x ~@2 x ~@2 x ~@2 x ~@10",
})).gain(0.39)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct(`<
  ~@70
  [~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@7]!9
  [~@8 x ~@5 x ~@5 x ~@6 x ~@5 x ~@14]
  [~@3 x ~ x ~ x ~ x ~ x ~@4]!2
  ~
>`).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A@3 ~ A@10 B@9 ~ B@21 C D@22 ~@13>".pickRestart({
  A: "x ~@5 x!2", B: "~ x ~@35 x ~@5 x ~@4", C: "~ x ~@36 x ~@5 x ~@3", D: "~ x ~@17 x ~@2 x ~",
})).gain(0.39)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@70 [~ x ~@17 x ~@2 x ~]!9 [~@2 x ~@36 x ~@5 x ~@2] [~ x ~@11 x ~ x]!2 ~>")
  .gain(0.1)

// drums · crash
const crash = s("cr").struct("<~@49 A B ~@2 C B ~@3 B ~@3 B ~@3 B ~@3 B ~@12>".pickRestart({
  A: "~ x ~@11 x ~@2 x ~@7", B: "~ x ~@22", C: "~@13 x ~@2 x ~@7",
})).gain(0.49)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@74 [~ x ~@22] ~@3 [~ x ~@22] ~@4>").gain(0.19)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@10 A ~@3 A ~@3 B ~@11 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@4
>`.pickRestart({
  A: "x", B: "~ x ~@46", C: "~ x ~@22",
})).gain(0.39)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3
  C ~@4
>`.pickRestart({
  A: "x", B: "~ x ~@46", C: "~ x ~@22",
})).gain(0.39)

// … 32 more lines