Strudelify

Chic Cheer

Chic

KeyA minorTempo118 bpm
0:00/0:00
// Chic Cheer — Chic
// 118 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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.

// other · trumpet
const trumpet = note("<~@6 A@2 ~@69 B C ~@2 D ~@34>".pickRestart({
  A: "[[d4,a4]@15 ~]/2", B: "~@5 f3 g3 [a3,b3] c4 [d4,e4] f4 [g4,a4] b4 [c5,d5] e5 [f5,g5]", C: "[a4,a5] ~@7",
  D: "~@3 e5",
})).s("gm_trumpet").gain(0.8)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@6 A ~@3 B C B C B C B C ~@12 B C B C B C B C ~@12 B C B C B C B C ~@8 B C B C B C B C ~@3 D E F G H B C B C ~@12 B C
  B C B C B C B C B C B C B C ~ I
>`.pickRestart({
  A: "a4 ~@7, d4 ~@15", B: "~@4 e5@2 ~ d5 ~@8", C: "~@4 f5@2 ~ e5 ~@8",
  D: "~@5 f3 g3 [a3,b3] c4 [d4,e4] f4 [g4,a4] b4 [c5,d5] e5 [f5,g5]", // Asus2 Dsus2 Gsus2 Csus2 Fsus2
  E: "[a4,a5]@2 [c5,e5] ~@2 [c5,e5]@3 [b4,d5] ~@2 [b4,d5] ~@2 [d5,f5] ~", // A C Bm Dm
  F: "~@2 [d5,f5] ~@2 [d5,f5]@3 [c5,e5] ~@2 [c5,e5] ~@2 [b4,d5] ~", // Dm C Bm
  G: "~@2 [c5,e5] ~@2 [c5,e5]@3 [b4,d5] ~@2 [b4,d5] ~@2 [d5,f5] ~", // C Bm Dm
  H: "~@2 [d5,f5] ~@2 [d5,f5]@3 [c5,e5] ~@2 [c5,e5] ~@2 [c5,e5] ~, ~@3 e4", I: "[a3,a4,e5,a5] ~@7",
})).s("gm_brass_section").gain(0.64).pan(0)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@10 A B A B A B A B ~@8 C D E F A B A B A B A B ~@8 C D E F A B A B A B A B ~@3 G@8 B A B A B ~@8 A B A B ~@8 H@2 I
  J@8 B A B A B A B A B K ~
>`.pickRestart({
  A: "~@4 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@8", B: "~@4 [d4,f4,a4,f5]@2 ~ [c4,e4,e5] ~@8",
  C: "c5 ~@2 a4 ~@2 c5 ~@2 a4 ~@2 c5 ~ a4 ~", D: "d5 ~@2 a4 ~@2 d5 ~@2 a4 ~@2 d5 ~ a4 ~",
  E: "f5 ~@2 d5 ~@2 f5 ~@2 d5 ~@2 d5 ~ d#5@2", F: "e5 ~@15",
  G: "[~@7 e4 g4@2 e4@2 g4@2 e4 ~ [c4,a4] ~@45 [d4,b4]@2 [g#3,e4] ~@19 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@12 [d4,f4,a4,f5]@2 ~ [c4,e4,e5] ~@12 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@8, ~@7 c5@57]/8", // F G C#m Am Bm Dm C Am …
  H: "[[c4,e4,e5] [b3,d4,b4,d5] [d4,f4,d5,f5] [c4,e4,c5,e5], c5@3 ~]/2", I: "[c4,e4,e5] [b3,d4,b4,d5], c5",
  J: "[[d4,f4,d5,f5]@8 [c4,e4,e5]@8 ~@4 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@12 [d4,f4,a4,f5]@2 ~ [c4,e4,e5] ~@12 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@12 [d4,f4,a4,f5]@2 ~ [c4,e4,e5] ~@12 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@12 [d4,f4,a4,f5]@2 ~ [c4,e4,e5] ~@12 [a3,c4,e4,e5]@2 ~ [b3,d4,d5] ~@8, ~ c5@15]/8", // Dm C Am Bm Dm C Am Bm …
  K: "[a1,a2]", // A
})).s("gm_string_ensemble_1").gain(0.45).pan(1)

// chords · tremolo strings · "Trem Stri"
const tremolo_strings = note("<~@7 A B ~@49 C D E F G H I J ~@8 K@4 ~@38>".pickRestart({
  A: "~@11 [e4,f#4] [g#4,a4] [b4,c5] [d5,e5] [f#5,g#5]", B: "[a5,a6] ~@15",
  C: "[e4,f4,a4,c5] ~@3 [e4,f4,a4,c5] ~@2 [e4,f4,a4,c5] ~@2 [e4,f4,a4,c5] ~@5", // Fmaj7
  D: "[d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~@2 [d4,f4,a4,c5] ~@2 [d4,f4,a4,c5] ~@5", // Dm7
  E: "[e4,g4,b4,d5] ~@3 [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~@5", // Em7
  F: "[e4,g4,a4,c5] ~@3 [e4,g4,a4,c5] ~@11", // Am7
  G: "[c4,e4,f4,a4] ~@3 [c4,e4,f4,a4] ~@2 [c4,e4,f4,a4] ~@2 [c4,e4,f4,a4] ~@3 [c4,e4,f4,a4] ~", // Fmaj7
  H: "[c4,d4,f4,a4] ~@3 [c4,d4,f4,a4] ~@2 [c4,d4,f4,a4] ~@2 [c4,d4,f4,a4] ~@5", // Dm7
  I: "[d4,f4,a4,b4] ~@3 [d4,f4,a4,b4] ~@2 [d4,f4,a4,b4] ~@2 [d4,f4,a4,b4] ~@3 [d4,f4,a4,b4] ~", // Bm7b5
  J: "[b3,d4,e4] ~@3 [b3,d4,e4] ~@4 [d4,e4,g#4] e4 ~ g4 ~ g#4 ~", K: "[[a3,a4]@63 ~]/4",
})).s("gm_tremolo_strings").gain(0.56).pan(0.7)

// chords · epiano2 · "Elec Pian"
const epiano2 = note("<~@26 A B C D ~@16 A B C D ~@8 E F G H I J K L ~@50>".pickRestart({
  A: "~@2 e4@9 ~@5, f3@9 ~@7, ~ [a3,c4]@9 ~@6", B: "~@2 c4@9 ~@5, d3@9 ~@7, ~ [f3,a3]@9 ~@6",
  C: "~@2 f4@9 ~@5, a3@9 ~@7, ~ [b3,d4]@9 ~@6", D: "~@2 e4@9 ~@5, e3@9 ~@7, ~ [g#3,b3]@9 ~@6", E: "[c4,e4,f4,a4]",
  F: "[c4,d4,f4,a4]", G: "[b3,d4,e4,g4]", H: "[c4,e4,a4]", I: "[a3,c4,e4,f4]", J: "[a3,c4,d4,f4]", K: "[a3,b3,d4,f4]",
  L: "[a3,b3,e4]@7 ~ [g#3,b3,e4]@7 ~", // Asus2 E
})).s("gm_epiano2").gain(0.5).pan(0.6)

// chords · electric guitar clean · "Rhythm Gt"
const electric_guitar_clean = note(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B ~@4 A B A B A B A B ~@8 A B A B A
  B A B ~@4 C D C D A B A B ~@4 C D C D C D C D A B A B A B A B A B A B A B A B ~@2
>`.pickRestart({
  A: "[a3,c4,e4] ~ [a3,c4,e4]!2 ~ [a3,c4,e4]!2 ~@3 [a3,b3,d4] ~@3 [a3,b3,d4] ~", // Am Bm7
  B: "[d4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4]!2 ~@2 [d4,f4,a4] [a3,c4,e4] ~@2 [a3,c4,e4] ~@2", // Dm Am
  C: "[a3,c4,e4]@2 [a3,c4,e4]!2 ~ [a3,c4,e4]!2 ~@3 [a3,b3,d4]@2 ~@2 [a3,b3,d4]@2", // Am Bm7
  D: "[d4,f4,a4] ~ [d4,f4,a4]!2 ~ [d4,f4,a4]!2 ~@2 [d4,f4,a4] [a3,c4,e4]@2 ~ [a3,c4,e4] ~@2", // Dm Am
})).s("gm_electric_guitar_clean").gain(0.44).pan(0.2)

// bass · slap bass 1 · "Bass"
const bass = note(`<
  ~@7 A B C B C B C B C B C B C B C B C B C D E F G B C B C B C B C B C B C B C B C D E F G B C B C B C B C H I J K L M
  N O B C B C B C B C P Q@2 R B C B C B C B C S T S T S T S T S T S T B C B C B C B C B C B C B C B C U ~
>`.pickRestart({
  A: "~@5 e1 g1 g#1", B: "a1@2 ~@2 a1@2 ~ g1@2 e1 g1@2 g#1@2 a1@2", C: "d2@2 ~@2 d2@2 a1 c2@2 c2 a1@2 c#2 d2@2 g1",
  D: "f1@2 ~ f1@2 ~ f1@2 ~ f1@2 ~ f1@2 a1@2", E: "d2@2 ~ d2@2 ~ d2@2 ~ d2@2 ~ d2@2 c2@2",
  F: "b1@2 ~ b1@2 ~ b1@3 ~ b1 a#1 b1@2 d#2@2", G: "e2@2 ~ e2 d#2@2 e2@2 ~ b1 e1@2 g1@2 g#1@2",
  H: "f1@2 ~@2 f1@2 ~ f1@2 f1 f1@2 f1@2 e1@2", I: "d1@2 ~@2 d1@2 ~ d1@2 d1 d1@2 d1@2 d#1@2",
  J: "e1@2 ~@2 e1@2 ~ e1@2 e1 e1@2 g1@2 g#1@2", K: "a1@2 ~@2 a1@2 a1 g1@2 g1!2 ~ f#1@2 f#1@2",
  L: "f1@2 ~@2 f1@2 ~ f1@2 f1 f1@2 f1@2 a1@2", M: "d2@2 ~@2 d2@2 ~ d2@2 d2 d2@2 d2@2 c2@2",
  N: "b1@2 ~@2 b1@2 ~ b1@2 b1 b1@2 b1@2 f1@2", O: "e1@2 ~@2 e1!2 d#1 e1@2 e1 d#1@2 e1@2 g#1@2",
  P: "a2@3 ~ a2@3 ~ a1@3 ~ a1@2 e2@2", Q: "a2@3 ~ a2@2 ~ e2 a1@3 ~ a1@2 e2@2",
  R: "a2@3 ~ a2@2 e2@2 e1@2 ~ e1 g1 e1 g#1@2", S: "a1 ~@3 a1@2 ~ g1@2 e1 e1@2 g1@2 a1@2",
  T: "d2 ~@3 d2@2 a1 c2@2 c2 a1@2 c#2@2 d2@2", U: "a1@3 ~@13",
})).s("gm_slap_bass_1").gain(0.8)

// drums · kick
const kick = s("bd").struct("<[x!4]!114 ~@2>").gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@114 [x!2 ~ x ~@12] ~>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@29 A ~@19 A ~@47 B ~@16 C ~>".pickRestart({
  A: "~ x!4 ~@4 x ~ x ~ x!2 ~", B: "~@7 x", C: "~@4 x ~ x!2 ~ x ~ x!3 ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<A@29 B A@19 B A@11 B A@3 B A@11 B A@36 C ~>".pickRestart({
  A: "~ x ~ x", B: "~ x!3", C: "~ x ~ x ~@3 x ~ x ~ x!5",
})).gain(0.56)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@9 x ~@6",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~ A ~ A ~ A ~ A ~@9 A ~@3 A ~ A ~ A ~ A ~@9 A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~ A ~ A ~@5 A ~@3 A ~ A ~ A
  ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A
>`.pickRestart({
  A: "x",
})).gain(0.48)

// drums · ride bell
const ride_bell = s("rd").struct("<~@114 x ~>").gain(0.8)

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

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@90 x ~@25>").gain(6.58)

// drums · congas
const congas = s("conga:13").struct("<~@19 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~ A ~@19 B ~@13 A ~ A ~@34>".pickRestart({
  A: "~@7 x", B: "~@12 x!2 ~@2",
})).gain(1.54)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  [x ~ x ~ x ~ x!2 ~ x!2 ~ x ~ x ~]
  [x ~ x ~ x ~ x!2 ~ x ~@2 x ~ x ~]!73
  ~@4
  [x ~ x ~ x ~ x!2 ~ x ~@2 x ~ x ~]!36
  ~@2
>`).gain(1.54)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~ [~@5 x ~@2]!73 ~@4 [~@5 x ~@2]!36 ~@2>").gain(0.77)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@114 [x ~ x ~@4 x ~ x ~ x ~@4] ~>").gain(4.08)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@114 [~@4 x ~ x ~@5 x ~ x!2] ~>").gain(4.08)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!16]!62 [x ~ x!14] [x!16]!11 ~@4 [x!16]!36 ~@2>").gain(3.24)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@114 x ~>").gain(0.94)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<~@114 [~@7 x] ~>").gain(0.94)

// drums · claves
const claves = s("clave:2").struct("<~@27 A ~ A ~@17 A ~ A ~@9 A ~ A ~ A ~ A ~@9 A ~ A ~@38>".pickRestart({
  A: "~@7 x",
})).gain(3.14)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@65 [~@9 x ~ x ~@4] ~@50>").gain(1.04)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@65 [~@7 x] ~@50>").gain(1.04)

stack(
  trumpet, brass_section, string_ensemble_1, tremolo_strings, epiano2, electric_guitar_clean, bass, kick, snare,
  low_tom, mid_tom, high_tom, high_tom_soft, crash, ride_bell, tambourine, vibraslap, congas, congas_2, congas_soft,
  agogo_bells, agogo_bells_2, cabasa, whistle, whistle_2, claves, woodblocks, woodblocks_2
)

More by Chic