Strudelify

State of Independence

Donna Summer

KeyB majorTempo82 bpm
0:00/0:00
// State of Independence — Summer Donna
// 82 bpm, 8/8, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@5 A B C D E F C G H G I G C F J K C L M F N F O G I G I F N P I F Q G I F J R S R J K J K T U V ~ W X T W Y Z AA AB
  T AC T AD AE@2 W@2 T W AF@2 AG@2 AH AI AH@2 AJ AI AG AK AH@2 AJ AH@2 AF AG Y AI@2 AJ AH@2 AI AG@2 AF@2 AH@3 AF AG@2
  AI@2 AH@3 AF AL
>`.pickRestart({
  A: "~ b3 [f#4,b4,d#5]@2 ~@2 [f#4,b4,d#5]@2 ~@8", B: "~ b3 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@6 f#3 ~ f#3",
  C: "~ b3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@9", // B
  D: "~ b3 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@2 [b5,b6]!4 [b3,b5,b6] [b5,b6] [b3,b5,b6]", // C#m7 B
  E: "[b5,b6] b3 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@9", F: "~@2 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@9",
  G: "~ b3 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@9", H: "~@2 [b4,d#5] ~@3 [f#4,b4,d#5] ~@9, ~ f#4@2 ~@13",
  I: "~@2 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@9", J: "[a4,d5,f#5] ~@2 [a4,d5,f#5] ~@2 [a4,d5,f#5] ~@9",
  K: "[g4,c5,e5,g5] ~@2 [g4,c5,e5,g5] ~@2 [g4,c5,e5,g5] ~@9", // C
  L: "~@2 [g#4,b4,c#5,e5] ~@3 [g#4,b4,c#5,e5] ~@2 [b5,b6]!7", M: "[b5,b6] ~ [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@9",
  N: "b3 ~ b3 ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~@9", O: "~@2 [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~@9",
  P: "~@2 [g#4,b4,c#5,e5] ~ [g#4,b4,c#5,e5] ~ [g#4,b4,c#5,e5] ~@9", Q: "~@2 [f#4,b4,d#5] ~@3 [f#4,b4,d#5] ~@6 b3 ~ b3",
  R: "[g4,c5,e5] ~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~@9", // C
  S: "[a4,d5,f#5] ~@2 [a4,d5,f#5] ~@2 [d5,g5]@2 [a4,f#5] ~@7, ~@6 b4 ~@9", T: "[f#4,b4,d#5]@5 ~@3",
  U: "[g#4,b4,c#5,e5]@5 ~@3", V: "[a4,c#5,f#5]@15 ~", W: "[f#4,b4,d#5]@11 ~@5", X: "[g#4,c#5,f5]@5 ~@3",
  Y: "[e4,a4,c#5]@11 ~@5", Z: "[b4,c#5,e5]@11 ~@5", AA: "[f#4,b4,d#5]@9 ~@7",
  AB: "[g#4,c#5,f5]@2 ~@5 [f#6,f#7]@7 ~@2, ~ [f4,g#4]@2 [c#7,f7]@4 ~, ~@3 [c#5,f5]@11 ~@2, ~@2 [g#5,c#6]@5 ~, ~@5 [f6,g#6]@9 ~@2", // C# F# Fm C# C#5 Fm
  AC: "[g#4,c#5,f5]@9 ~@7", AD: "[f#4,b4,d#5] ~", AE: "[e4,a4,c#5]@9 ~@7", AF: "[f#4,b4,d#5]@3 ~",
  AG: "[e4,a4,c#5]@3 ~", AH: "[f#4,b4,d#5]@7 ~", AI: "[f#4,b4,d#5]@13 ~@3", AJ: "[f#4,b4,d#5]@15 ~",
  AK: "[e4,a4,c#5]@13 ~@3", AL: "[f#4,b4,d#5] ~@3",
})).s("gm_brass_section").gain(0.56)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~
  [~ f#3 a3 b3 a3 f#3 e3 f#3 ~ f#3 a3 b3 a3 f#3 e3 f#3]!18
  [~ a3 c4 d4 c4 a3 g3 a3 ~ a3 c4 d4 c4 a3 g3 a3]!2
  [~ f#3 a3 b3 a3 f#3 e3 f#3 ~ f#3 a3 b3 a3 f#3 e3 f#3]!20
  [~ a3 c4 d4 c4 a3 g3 a3 ~ a3 c4 d4 c4 a3 g3 a3]!8
  [~ f#3 a3 b3 a3 f#3 e3 f#3 ~ f#3 a3 b3 a3 f#3 e3 f#3]!65
>`).s("gm_acoustic_bass").gain(0.32)

// bass · fretless bass · "FRETLESS"
const bass_2 = note(`<
  A B@5 C B D E F E G E H E I F J K L M N E H B N E N B O P Q B R B S B T U V W X Y Z Y X AA AB AC AD AE AF AG AF AG@2
  AH@2 AI AF AJ AK AL AM AN AO AD AP AQ AR AS AT AU AV AW AS AX AD AG AY AZ AH BA AG AD AG@3 BB BC BD AG AD BE BF BG BH
  BI AD BE AD AF AS AG BJ BK AD BE BD BL AF AG@2
>`.pickRestart({
  A: "~@12 f#3@3 ~", B: "b2@2 ~@5 b2!2 ~@7", C: "b2@2 ~@5 b2!2 ~@4 f#2@3", D: "b2@2 ~@5 b2!2 ~@4 f#2 ~ f#2",
  E: "b2 ~@6 b2!2 ~@7", F: "b2 ~@6 b2!2 ~@4 f#2@3", G: "b2 ~@6 b2!2 ~@4 f#3 ~ f#3", H: "b2 ~@6 b2!2 ~@4 f#3@3",
  I: "b2 ~@6 b2!2 ~@2 b3 ~ b3 f#3 e3", J: "b2 ~@6 b2!2 ~@4 b2 c3 c#3", K: "d3 ~@2 d3 ~@2 c4 d4 d3 ~@5 a2 c3",
  L: "d3 ~@2 d3 ~@3 d3 c4 d4 ~ c4 a3 d3 c3 d3", M: "b2@2 ~ b2 ~@3 b2!2 ~@7", N: "b2 ~@6 b2!2 ~@4 f#2 ~ f#2",
  O: "b2 ~@6 b2!2 ~@4 b3 f#3 e3", P: "b2 ~@6 b2!2 ~@4 f#2@2 ~", Q: "b2 ~@6 b2!2 ~@5 f#2@2",
  R: "b2 ~@6 b2!2 ~ d#3 ~ f#3 g#3 b3@2", S: "b2@2 ~@5 b2!2 ~@3 b3 a3 f#3 e3", T: "b2 ~@6 b2 d#2 ~ e2 ~ e2 f#2 g#2 ~",
  U: "b2@2 ~@5 b2 b2@2 ~@3 f#2@3", V: "b2@2 ~@5 b2!2 ~@5 b2 c3", W: "d3 ~@2 d3 ~ d3 c4 d4 d3 ~@5 a2 c3",
  X: "d3 ~@2 d3 ~@2 d3 c4 d4 d3!2 ~ d3 ~ a2 c3", Y: "d3 ~@2 d3 ~@2 c4 d4 d3 ~@5 a2 e3",
  Z: "d3 ~@2 d3 ~@3 c4 d4 d3!2 ~ d3 ~ a2 c3", AA: "d3 ~@2 d3 ~@2 c4 d4 d3 ~@3 d3 ~ a2 e3",
  AB: "d3 ~@2 d3 ~ e4 d4 a3 c4 a3 b3 ~ a3 ~ g3@2", AC: "b2 ~@2 b2@3 b2!2 ~@5 f#2@3", AD: "b2@3 ~@3 b2!2 ~@5 f#2@3",
  AE: "b2@2 ~@4 b2!2 ~@8", AF: "b2@3 ~@3 b2!2 ~@5 f#2@2 ~", AG: "b2@3 ~@3 b2!2 ~@8", AH: "a2@3 ~@3 a2!2 ~@8",
  AI: "b2@4 ~@2 b2!2 ~@5 f#2 ~ f#2", AJ: "b2@4 ~@2 b2!2 ~@8", AK: "b2@3 ~@3 b2!2 ~ [a3,b3] ~@2 b3@2 ~@2",
  AL: "b2@3 ~@3 b2!2 ~@6 f#2 ~", AM: "b2@2 ~ b2 ~@2 b2 ~@3 a3 a#3 b3 c#4 b3 a#3",
  AN: "a3@2 ~ a3 ~@2 a2 a2@2 ~@5 e2 f#2", AO: "a2@2 ~ a2 ~@2 a2!2 ~@8",
  AP: "b2@3 ~@3 b2!2 ~ f#3 ~@2 [f#3,g#3] g#3 f#3 ~", AQ: "b2@3 ~@3 [a2,b2] b2 ~@5 f#2@3",
  AR: "b2@3 ~@3 b2!2 ~@5 f#2@2 f#2", AS: "b2@3 ~@3 b2!2 ~@5 f#3@3", AT: "b2@3 ~@3 b2!2 ~@6 b2 ~",
  AU: "a2@3 ~@3 a2!2 ~@5 e3@3", AV: "a2@3 ~@3 a2!2 ~@5 a3 a2 ~", AW: "b2@3 ~@3 b2!2 ~@5 f#2 ~@2",
  AX: "b2@3 b2 ~@2 b2!2 ~@8", AY: "b2@3 ~@3 b2!2 ~@2 a3 a#3 b3 c#4 b3 a#3", AZ: "a3@3 a3 ~@2 a2 a2@2 ~@4 e2@3",
  BA: "b2@4 ~@2 b2!2 ~@6 f#2@2", BB: "a2@3 c#3@3 e3@2 a2@3 c#3@3 e3@2", BC: "a2@3 c#3@2 ~ e3@2 a2@3 c#3@2 ~ e3 ~",
  BD: "b2@2 ~@4 b2!2 ~@5 f#2@2 ~", BE: "b2@3 ~@3 b2!2 ~@5 f#3@2 ~", BF: "b2@4 ~@2 b2!2 ~@5 f#2@2 ~",
  BG: "b2@3 ~@3 b2!2 ~@5 c#4 b3 a#3", BH: "a3@3 a3 ~@2 a2!2 ~@5 e2@2 ~", BI: "a2@3 ~@3 a2!2 ~@5 a3 a2@2",
  BJ: "a2@2 ~ c#3@2 ~ e3 ~ a2@2 ~ c#3@2 ~ e3@2", BK: "a2@2 ~ c#3@2 ~ e3@2 a2@3 c#3@2 ~ e3 ~",
  BL: "b2@3 b2 ~@2 b2!2 ~@5 f#3@2 ~",
})).s("gm_fretless_bass").gain(0.39)

// other · trumpet
const trumpet = note("<~@11 A@2 ~@2 A B ~@8 C ~ D ~@2 B ~@2 D ~@3 D B ~@75>".pickRestart({
  A: "~@13 b5 g#5 f#5", B: "~@13 b5 g#5 ~", C: "~@5 b5 g#5 ~@9", D: "~@13 b5 ~@2",
})).s("gm_trumpet").gain(0.16)

// other · trumpet · soft notes
const trumpet_soft = note("<~@16 A ~@8 B ~ C ~@2 A ~@2 C ~@3 C A ~@75>".pickRestart({
  A: "~@15 f#5", B: "~@7 f#5 ~@8", C: "~@14 g#5 f#5",
})).s("gm_trumpet").gain(0.08)

// chords · clavinet
const clavinet = note("<~@8 A B ~@12 A B ~@28 A B ~@60>".pickRestart({
  A: "[e5,f#5,b5] [f#5,a5] f#5 [e5,a5] f#5 [e5,f#5,b5] [f#5,a5] f#5 ~ f#5 [e5,f#5,b5] [f#5,a5] f#5 [e5,a5] f#5 [e5,b5]", // Esus2 F#m A5 Esus2 F#m Esus2 F#m A5 …
  B: "f#5 ~@15",
})).s("gm_clavinet").gain(0.15)

// chords · clavinet · soft notes
const clavinet_soft = note("<~@8 A B ~@12 A B ~@28 A B ~@60>".pickRestart({
  A: "~@15 f#5", B: "a5 ~@15",
})).s("gm_clavinet").gain(0.07)

// drums · kick
const kick = s("bd").struct("<~@5 [x ~@6 x!2 ~@7]!109>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@5 [~@2 x!2 ~@2 x ~]!109>").gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@5 [~ x ~@3 x ~ x]!109>").gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@4
  [~@15 x]
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!108
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3]
>`).gain(1.22)

stack(brass_section, bass, bass_2, trumpet, trumpet_soft, clavinet, clavinet_soft, kick, snare, clap, cabasa)

More by Donna Summer