Strudelify

How About Us

Champaign

KeyB♭ minorTempo73 bpm
0:00/0:00
// How About Us — Champaign
// 73 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(73/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 · epiano1 · "E.Piano"
const epiano1 = note(`<
  A B A B A B A B A B A C@2 D E F A D E F A B A B A B A B A B A B D E F A D E F A B A B G H I J K L M N K L M N K L M N
  K L M N K L M N K L M N K L M N K L M N K L M N
>`.pickRestart({
  A: "[bb2,f3,bb3,d4,f4,bb4]@15 ~", B: "[bb2,gb3,bb3,eb4,gb4,c5]@15 ~", C: "[bb2,gb3,bb3,eb4,gb4,c5]/2",
  D: "[bb2,f3,bb3,d4,f4,bb4,d5]@15 ~", E: "[bb2,g3,c4,eb4,g4,c5]@15 ~", F: "[bb2,gb3,eb4,gb4,bb4,c5]@15 ~",
  G: "~@13 [a3,f4]@3, [g3,d7,f7]@4 bb5 g5@10 ~, ~ [g6,bb6]@15, ~ [d6,f6]@7, ~@3 c6@13", H: "[d3,a3,d4,c5,d5,f5,a5]",
  I: "~@4 ab4@11 ~, [f3,eb6,f6]@15 ~, ~ [ab5,c6]@14 ~, ~ [eb5,f5]@7, ~@3 c5@12 ~", J: "[ab3,db4,eb4,gb4,bb4,db5]",
  K: "[db3,ab3,db4,f4,ab4,db5,f5]@15 ~", L: "[db3,bb3,eb4,gb4,bb4,eb5]@15 ~", M: "[db3,a3,gb4,a4,db5,eb5]@15 ~",
  N: "[db3,ab3,db4,f4,ab4,db5]@15 ~", // Db
})).s("gm_epiano1").gain(0.48)

// bass · electric bass finger · "Fing.Bass"
const bass = note(`<
  A@12 B A@18 B A@6 B A@3 C D E F G H@2 I J H@2 I H@3 K L H@2 K H@3 K H@3 K M N H K O H@2 K P N H K H
>`.pickRestart({
  A: "bb1@4 ~@2 bb1!2 ~@8", B: "bb2@3 [g2,ab2,a2] [f2,gb2] ~ bb1!2 ~@8", C: "bb1@4 ~@2 bb1!2 ~@5 bb1 ~@2",
  D: "g2@4 ~@2 g2!2 ~@5 g2 ~@2", E: "d2@4 ~@2 d2!2 ~@5 bb1 ~ g1", F: "f1@4 ~@2 f1!2 ~@5 f1 ~@2",
  G: "ab1@4 ~@3 ab1!2 ~ db3 eb3 db3 eb3 f3@2", H: "db2@4 ~@2 db2!2 ~@8", I: "db3@3 [bb2,b2,c3] [ab2,a2] ~ db2!2 ~@8",
  J: "db2@4 ~@2 db2!2 ~@6 ab1 bb1", K: "db3@3 [bb2,b2,c3] [ab2,a2] ~ db2!2 ~@7 ab1",
  L: "db2@4 ~@2 db2!2 ~ ab1 bb1@2 ab1 ~@3", M: "db2@4 ~@2 db2!2 ~ db2 bb1 ab1!2 bb1 db2@2", N: "db2@2 ~@4 db2!2 ~@8",
  O: "db2@4 ~@2 db2!2 ~@4 bb1 ab1 bb1@2", P: "db2@4 ~@2 db2!2 ~@4 ab1 bb1 db2@2",
})).s("gm_electric_bass_finger").gain(0.3)

// bass · electric bass finger · "Fing.Bass" · soft notes
const bass_soft = note("<~@12 A ~@18 A ~@6 A ~@10 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~>".pickRestart({
  A: "~@4 [eb2,e2] [c2,db2,d2] ~@10", B: "~@4 [gb2,g2] [eb2,e2,f2] ~@10",
})).s("gm_electric_bass_finger").gain(0.15)

// chords · string ensemble 2 · "Sl.Violin"
const string_ensemble_2 = note(`<
  A B A C D ~@8 E@4 F@3 A B A C G ~@4 H I ~ E@4 F@3 A B A B J K L M N O@2 P Q@4 R@4 S@4 T@8 R@4 Q@4 U@4
>`.pickRestart({
  A: "[f4,bb4,d5,f6]", B: "[gb4,c5,eb5,gb6]", C: "eb6@13 ~ bb5 c6, [gb4,c5,eb5]", D: "[f4,bb4,d5,d6]@3 ~",
  E: "[[f4,d5]@4 g4@4 ~@3 c6 [f4,d5,d6]@4, bb4, bb5@11 ~@5, ~ [c5,eb5]@2 ~, ~@2 gb4 ~]/4", // Dm Cm
  F: "[[f4,d5,f6]@4 g4@4 ~ gb6@3, bb4, ~ [c5,eb5]@2, ~@4 eb6@5 ~@3, ~@2 gb4]/3", G: "[f4,bb4,d5,d6] ~",
  H: "~@14 [bb4,bb5] [c5,c6]", I: "[f4,bb4,d5,d6]@15 ~", J: "[g4,g5,g6]@13 [f4,f5,f6]@3, [f4,bb4] ~", K: "[d4,d5,d6]",
  L: "[c4,c5,c6]@5 [d4,d5,d6]@3 [eb4,eb5,eb6]@4 [f4,f5,f6]@4", // C D Eb F
  M: "[gb4,gb5,gb6] [ab4,ab5,ab6] [bb4,bb5,bb6] [db5,db6,db7]", N: "[ab4,f5,ab5,ab6], db5 ~@3",
  O: "[[bb4,bb5,bb6] [a4,a5,a6], [eb5,gb5]]/2", P: "[ab4,f5,ab5,ab6]",
  Q: "[[ab4,f5,ab5,f6] [bb4,bb5] [a4,a5] [ab4,f5,ab5,db6], db5, ~ [eb5,gb5,eb6]@2 ~]/4", // Db Bb A Db Ebm
  R: "[[ab4,f5,ab5,f6] [bb4,bb5,gb6] [a4,a5,a6] [ab4,f5,ab5,ab6], db5, ~ [eb5,gb5]@2 ~]/4", // Db Ebm A Db Ebm
  S: "[[ab4,f5,ab5,f6]@4 [bb4,bb5]@4 [a4,a5]@4 [ab4,f5,ab5,db6]@3 ~, db5@15 ~, ~ [eb5,gb5,eb6]@2 ~]/4", // Db Bb A Db Ebm
  T: "[[ab4,f5,ab5,f6]@16 eb6@12 gb6@4 [a4,a5,a6]@16 [ab4,ab5]@16 [ab4,ab5]@16 [bb4,bb5]@16 [a4,a5]@16 [ab4,f5,ab5,db6]@13 ~@3, db5@16 db5@15 ~, ~ [eb5,gb5]@2 [f5,ab6]@2 [eb5,gb5,eb6]@2 ~, ~ [bb4,bb5] ~@6]/8", // Db A Ab Bb A Db Ebm Fm …
  U: "[[ab4,f5,ab5,f6]@4 eb6@3 gb6 [a4,a5,a6]@4 [ab4,f5,ab5,ab6]@4, db5, ~ [eb5,gb5]@2 ~, ~ [bb4,bb5] ~@2]/4", // Db A Db Ebm Bb
})).s("gm_string_ensemble_2").gain(0.24).pan(0.3)

// chords · brass section · "Brass Sec"
const brass_section = note(`<
  ~@15 A ~@3 A ~@14 A ~@3 A ~@5 B C D E F G H ~@10 G ~ E F G I E F G ~@3 G H ~@4 E F J ~
>`.pickRestart({
  A: "~@2 [bb3,c4,gb4,bb4,eb5] ~@2 [bb3,c4,gb4,bb4,eb5] ~@2 [bb3,c4,gb4,bb4,c5] ~@7", // Cm7b5
  B: "~@9 [a3,f4,c5] [a3,f4,d5] ~@5", // F Dm
  C: "~@2 [ab3,c4,eb4,f4,ab4,c5] ~@2 [ab3,c4,eb4,f4,ab4,c5] ~@2 [ab3,c4,eb4,f4,ab4,c5] ~@7", // Fm7
  D: "~@2 [ab3,eb4,gb4,bb4,db5] ~@2 [ab3,eb4,gb4,bb4,db5] ~@2 [ab3,eb4,gb4,bb4,db5] ~@3 [ab3,eb4,gb4,bb4,db5,f5]@4", // Ebm7
  E: "[ab4,db5,f5]", F: "[gb4,bb4,eb5]",
  G: "~@2 [db4,eb4,a4,db5,gb5] ~@2 [db4,eb4,a4,db5,gb5] ~@2 [db4,eb4,a4,db5,eb5] ~@7", // Ebm7b5
  H: "~@3 [bb3,bb4] [db4,db5] ab4 [bb3,bb4] [ab3,ab4] [db4,db5] ~@7", // Bb Db Bb Ab Db
  I: "~@3 [bb3,bb4] [db4,db5] ab4 [bb3,bb4] [ab3,ab4] ~@5 ab4 [bb3,bb4] ab4", // Bb Db Bb Ab Bb
  J: "~@2 [db4,db5,db6] ~@2 [a3,a4,a5] ~@2 [gb3,gb4,gb5] ~@7", // Db A Gb
})).s("gm_brass_section").gain(0.56).pan(0.6)

// chords · brass section · "Brass Sec" · soft notes
const brass_section_soft = note("<~@47 A ~@2 B ~@12 A ~@2 C A ~@6 B ~@4 A ~@3>".pickRestart({
  A: "~@15 [b4,c5]", B: "~@2 [ab3,ab4] ~@2 ab3 ~@10", C: "~@2 [ab3,ab4] ~@2 ab3 ~@7 ab3 ~ ab3",
})).s("gm_brass_section").gain(0.24).pan(0.6)

// chords · electric guitar jazz · "Jazz Gtr."
const electric_guitar_jazz = note(`<
  ~@11 A@2 B@3 C B@3 ~@11 D E@3 F G@3 ~@4 H ~@2 I J@3 K@4 L@4 M@3 N M@3 O P@3 O P@3 O P@3 O P@3 O Q
>`.pickRestart({
  A: "[~@7 [gb4,bb4,d5]@16 ~@2 f3 g3 [ab3,a3,c4] bb3 c3 d3 [eb3,e3,g3]]/2", // Gbaug Ab Eb
  B: "[f3@8 ~@4 [bb3,d4] [c4,eb4] [d4,f4] [eb4,g4]@8 ~@5 [bb3,d4] [c4,eb4] [d4,f4] [eb4,gb4]@8 ~@9]/3", // Bb Cm Dm Eb Bb Cm Dm Ebm
  C: "~@9 f3 g3 [ab3,a3,c4] bb3 c3 d3 [eb3,e3,g3]", D: "[gb4,bb4,d5]@8 ~@5 f3 [g3,ab3] [a3,c4]",
  E: "[[f3,bb3]@8 ~@4 [bb3,d4] [c4,eb4] [d4,f4] [eb4,g4]@8 ~@5 [bb3,d4] [c4,eb4] [d4,f4] [eb4,gb4]@8 ~@9]/3", // Bb5 Bb Cm Dm Eb Bb Cm Dm …
  F: "~@9 c4 d4 [eb4,e4,g4] f4 f3 g3 [ab3,a3,c4]", // Eb Ab
  G: "[bb3@8 ~@4 [bb3,d4] [c4,eb4] [d4,f4] [eb4,g4]@8 ~@5 [bb3,d4] [c4,eb4] [d4,f4] [eb4,gb4]@8 ~@9]/3", // Bb Cm Dm Eb Bb Cm Dm Ebm
  H: "[bb4,d5] [ab4,a4,c5,db5] [g4,b4] [d4,g4] [c4,f4]@8 ~@4", I: "~@9 ab3 bb3 [b3,c4,eb4] db4 eb3 f3 [gb3,g3,bb3]",
  J: "[ab3@8 ~@4 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,bb4]@8 ~@5 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,a4]@8 ~@5 [eb4,gb4]@4]/3", // Db Ebm Fm Gb Db Ebm Fm Gbm …
  K: "[[db4,f4]@8 ~@4 [db4,f4] [eb4,gb4] [f4,ab4]@10 ~@4 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,bb4]@8 ~@5 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,a4]@8 ~@5 [eb4,gb4]@4]/4", // Db Ebm Fm Db Ebm Fm Gb Db …
  L: "[[db4,f4]@8 ~@4 [db4,f4] [eb4,gb4] ~@2 db5@8 ~@4 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,bb4]@8 ~@5 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,a4]@8 ~@5 [eb4,gb4]@4, ~@7 [f4,ab4]@5 ~@20]/4", // Db Ebm Db Ebm Fm Gb Db Ebm …
  M: "[[db4,f4]@8 ~@4 [db4,f4] [eb4,gb4] [f4,ab4]@10 ~@4 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,bb4]@8 ~@5 [db4,f4] [eb4,gb4] [f4,ab4]@2]/3", // Db Ebm Fm Db Ebm Fm Gb Db …
  N: "[gb4,a4]@2 ~ [eb4,gb4]", O: "[gb4,a4]@2 ~ [gb4,a4]",
  P: "[[f4,ab4]@8 ~@4 [db4,f4] [eb4,gb4] [f4,ab4]@10 ~@4 [db4,f4] [eb4,gb4] [f4,ab4] [gb4,bb4]@8 ~@5 [db4,f4] [eb4,gb4] [f4,ab4]@2]/3", // Fm Db Ebm Fm Db Ebm Fm Gb …
  Q: "[f4,ab4] ~", // Fm
})).s("gm_electric_guitar_jazz").gain(0.4)

// chords · electric guitar clean · "Clean Gtr"
const electric_guitar_clean = note(`<
  A B A C A D A D A D A D E A F D A@2 F D A D A D A D A D A D A D A F D A@2 F D A D A D G H I J K L M K@2 L M K@2 L M
  K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K
>`.pickRestart({
  A: "~@2 [f3,bb3] ~@2 [f3,bb3] bb3 ~ [f3,bb3] ~@7", B: "~@2 [gb3,bb3] ~@2 [gb3,bb3] bb3 ~ [gb3,bb3] ~@7",
  C: "~@2 [gb3,bb3,eb4] ~@2 [gb3,bb3,eb4] [bb3,eb4] ~ [gb3,bb3,eb4] ~@7", // Ebm Eb5 Ebm
  D: "~@2 [gb3,bb3,eb4] ~@2 [gb3,bb3,eb4] bb3 ~ [gb3,bb3,eb4] ~@7", E: "~@2 [gb3,bb3,eb4] ~@2 [gb3,bb3,eb4] ~@10",
  F: "~@2 [g3,c4,eb4] ~@2 [g3,c4,eb4] c4 ~ [g3,c4,eb4] ~@7", G: "~@2 [d4,g4] ~@2 [d4,g4] g4 ~ [d4,g4] ~@7",
  H: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] d4 ~ [a3,d4,f4] ~@7", I: "~@2 [ab3,c4,g4] ~@2 [ab3,c4,g4] c4 ~ [ab3,c4,g4] ~@7",
  J: "~@2 [bb3,db4,gb4] ~@2 [bb3,db4,gb4] db4 ~ [bb3,db4,gb4] ~@7", // Gb
  K: "~@2 [ab3,db4] ~@2 [ab3,db4] db4 ~ [ab3,db4] ~@7", // Db5
  L: "~@2 [bb3,eb4,gb4] ~@2 [bb3,eb4,gb4] eb4 ~ [bb3,eb4,gb4] ~@7", // Ebm
  M: "~@2 [a3,db4,gb4] ~@2 [a3,db4,gb4] db4 ~ [a3,db4,gb4] ~@7", // Gbm
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.8)

// bass · slap bass 2 · "Slap Bass"
const bass_2 = note("<~@3 A ~@12 B ~@17 A ~@11 C ~@7 D ~@16 E ~@4 E ~@6>".pickRestart({
  A: "~@5 bb2 ~@10", B: "~@13 db3 d3@2", C: "~@5 ab2 ~@10", D: "~@13 eb3 f3@2", E: "~@5 db3 ~@10",
})).s("gm_slap_bass_2").gain(0.4)

// other · synth drum · "Synth.Dru"
const synth_drum = note("<~@5 A ~ A ~ A ~ B ~@11 A ~ A ~ A ~ A ~ C ~@11 D ~@39>".pickRestart({
  A: "~@15 g4", B: "~@7 a5@5 ~@4", C: "a5@5 ~@11", D: "~@8 a5@5 ~@3",
})).s("gm_synth_drum").gain(0.56)

// other · string ensemble 1 · "Violins"
const string_ensemble_1 = note("<~@25 [~@2 bb2!3 ~@11] ~@57>").s("gm_string_ensemble_1").gain(0.56).pan(0.3)

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

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B C B C B C B C B C B D C B C B C B C@2 B C B C B C B C B C B E B C B C B C@2 B C F E B C G E B C H E B C H E B C H
  E B C H E B C H E B C H E B C H E B C G E B C H
>`.pickRestart({
  A: "~@3 x ~ x ~ x ~ x ~ x ~@3 x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~@3 x", C: "~ x ~ x ~ x ~@3 x ~ x ~@3 x",
  D: "~ x ~ x ~ x ~@3 x ~ x ~@4", E: "~@3 x ~ x ~@3 x ~ x ~@3 x", F: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
  G: "~ x ~ x ~ x ~ x ~@8", H: "~ x ~ x ~ x ~ x ~ x ~@6",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@12 [~@3 x] ~@30 x ~@39>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@46 A ~@7 B ~@3 B ~@3 B ~@7 C ~@7 D ~@3 B>".pickRestart({
  A: "~@10 x!5 ~", B: "~@13 x!2 ~", C: "~@13 x!3", D: "~@12 x!3 ~",
})).gain(0.4)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@47 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@9 x ~@6",
})).gain(0.56)

// drums · claves
const claves = s("clave:2").struct("<~@47 x!36>").gain(2.74)

stack(
  epiano1, bass, bass_soft, string_ensemble_2, brass_section, brass_section_soft, electric_guitar_jazz,
  electric_guitar_clean, bass_2, synth_drum, string_ensemble_1, kick, snare, hihat, hihat_soft, open_hat, high_tom,
  crash, tambourine, claves
)