Strudelify
Into the Groove cover art

1987 · You Can Dance

Into the Groove

Madonna

KeyE♭ majorTempo116 bpm
0:00/0:00
// Into the Groove — Madonna
// 116 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · synth bass 1 · "Bass"
const bass = note(`<
  ~@8 A B C D A B C D E F G H E F G H E F G H E F G H A B C D A B C D E F G H E F G H E F G H E F G H A B C D A B C D I
  J I J I J I J A B C D A B C D E F G H E F G H I J I J I J I J A B C D A B C D A B C D A B C D A B C D A ~@11
>`.pickRestart({
  A: "c2 ~ c2 ~ c2!2 ~ c2!2 ~ c2 ~ c2 d2 eb2 ~", B: "ab1 ~ ab1 ~ ab1 ~ ab1 ~ f1 f2 gb1 gb2 g1 g2 eb2 ~",
  C: "c2 ~ c2 ~ c2!2 ~ c2!6 ~ d2 eb2", D: "ab1 ~ ab1 ~ ab1!2 ~ ab1 bb1!5 ~ bb1!2",
  E: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ g1 ~ g1 f1", F: "~@2 f1 ~ f1 ~ f1 eb1 f1 ~ f1 ~ g1 ~ g1 ~",
  G: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ bb1 ~ bb1 ~ g1 f1", H: "~@2 f1 ~ f1 ~ f1 c1 f1 ~ f1 ~ g1 ~ g1 ~",
  I: "bb1 c2 eb2 bb1 ~@2 bb1 ~ bb1 ~ bb1 ~ bb1 c2 eb2 ~", J: "bb1 c2 eb2 ab1 ~ ab1 ab2 ~ ab1 ~ ab2!2 bb1 c2 eb2 ~",
})).s("gm_synth_bass_1").gain(0.39)

// chords · synth brass 1 · "Synth Brass"
const synth_brass_1 = note(`<
  A B C B A B C B A B C B A B C B D@2 E@2 D@2 E@2 D@2 E@2 F@2 E@2 A B C B A B C B F@2 E@2 D@2 E@2 D@2 E@2 D@2 E@2 A B C
  B A B C B G H I J I H I K A B C B A B C B D@2 E@2 D@2 E@2 G H I J I H I K A B C B A B C B A B C B A B C B A B C B A
  ~@11
>`.pickRestart({
  A: "[g3,eb4,eb5,g5,bb5]@3 ~ [f3,d4,d5,f5,bb5]@8 [g3,eb4,eb5,g5,bb5]@4", B: "[ab3,eb4,c5,eb5,g5]@3 ~@13",
  C: "[g3,eb4,eb5,g5,bb5]@3 ~ [f3,d4,d5,f5,bb5]@7 ~ [g3,eb4,eb5,g5,bb5]@3 ~", // Eb Bb Eb
  D: "[[bb3,eb4,bb4,eb5,g5]@11 ~ [bb3,d4,bb4,d5,f5]@2 ~ [ab3,c4,ab4,c5,eb5]@7 ~@2 [ab3,c4,ab4,c5,eb5]@2 ~@2 [d4,bb4,d5,f5]@2 ~@2, ~@28 bb3 ~@3]/2", // Eb Bb Ab Bb
  E: "[[bb3,eb4,bb4,eb5,g5]@11 ~ [bb3,d4,bb4,f5]@3 [ab3,c4,ab4,c5,eb5]@8 [c4,ab4,c5,eb5] ~ [ab3,c4,ab4,c5,eb5]@3 [bb3,d4,bb4,d5,f5]@3 ~, ~@12 d5 ~@19]/2", // Eb Bb Ab Bb
  F: "[[bb3,eb4,bb4,eb5,g5]@11 ~ [bb3,d4,bb4,f5]@2 ~ [ab3,c4,ab4,c5,eb5]@7 ~@2 [ab3,c4,ab4,c5,eb5]@2 ~@2 [d4,bb4,d5,f5]@2 ~@2, ~@12 d5 ~@15 bb3 ~@3]/2", // Eb Bb Ab Bb
  G: "[bb4,f5], d5@7 ~", H: "[ab4,c5,eb5]", I: "[bb4,d5,f5]", J: "[c5,eb5], ab4@7 ~", K: "[ab4,c5,eb5]@15 ~",
})).s("gm_synth_brass_1").gain(0.17)

// other · pad new age · "New Age"
const pad_new_age = note(`<
  ~@7 A@2 ~@2 A@2 ~@2 A@2 ~@14 A@2 ~@2 A@2 ~@2 A@2 ~@18 A@2 ~@2 A@2 ~@10 A@2 ~@2 A@2 ~@14 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2
  ~@2 A@2 ~@2 A@2 ~@11
>`.pickRestart({
  A: "[[c5,c6]@2 ~@2 [eb5,eb6]@2 ~@2 [f5,f6]@2 ~@2 [g5,g6]@2 ~ [c5,c6]@2 ~@15]/2", // C Eb F G C
})).s("gm_pad_new_age").gain(0.3)

// other · sitar
const sitar = note("<~@64 A B@2 C A B@2 C ~@16 A B@2 C A B@2 C ~@32>".pickRestart({
  A: "~@6 [bb4,bb5] ~", B: "[bb4,bb5] ~ [bb4,bb5] ~ [bb4,bb5] ~ [bb4,bb5] ~", C: "[bb4,bb5] ~ [bb4,bb5] ~@5",
})).s("gm_sitar").gain(0.13)

// other · pad sweep · "Sweep"
const pad_sweep = note("<~@12 A@4 ~@20 A@4 ~@20 A@4 ~@12 A@4 ~@19 A@4 ~ A@16 ~@8>".pickRestart({
  A: "[~ bb4@7]/4",
})).s("gm_pad_sweep").gain(0.22)

// chords · piano
const piano = note("<~@72 A B C D E F G@2 H I J K L M N O ~@40>".pickRestart({
  A: "~@2 [gb4,g4,bb4] ~ [f4,bb4] ~@3 eb4 f4 ~ [gb4,g4,bb4] ~ f4 eb4 ~, ~@8 bb4@2 ~@3 bb4@2 ~", // Gb Bb5 Gb
  B: "[c4,bb4] ~ [c4,bb4] ~@2 [c4,bb4] ~ [eb4,bb4] ~ [f4,bb4] ~ [gb4,g4,bb4] ~ [f4,bb4] eb4 ~", // C7 Eb5 Bb5 Gb Bb5
  C: "c4 ~ c4 ~@6 c5 [a4,bb4] g4 gb4 f4 eb4 c4", D: "~ c4 ~@3 c5 bb4 [g4,a4] gb4 f4 eb4 c4 ~ c4 ~ c4",
  E: "c4 ~@8 f5 gb5 g5 bb5 c6!2 ~",
  F: "c6 ~ bb5 c6 ~ bb5 ~ c6 ~@2 [g5,ab5] gb5 [gb5,g5,bb5] ~ [f5,bb5] ~, ~@9 bb5@2 ~@5", // Abmaj7 Gb Bb5
  G: "[[eb5,bb5] c5 ~ c5 ~@3 gb4 g4 ~ [f4,c5] ~ [eb4,db5] ~@2 [f4,gb4] ~ g4 f4@2 ~ [f4,gb4] g4@2 [f4,c5] ~ [eb4,c5] ~ db5 eb4 ~@2, ~@7 [bb4,c5]@3 ~@5 c5@2 ~ c5 ~@2 c5@2 ~@5 [f4,c5]@2 ~@2]/2", // Eb5 F5 Eb7 Gbmaj7 F5 Cm Bbsus2 F5
  H: "~@2 [g4,c5] ~ [gb4,bb4] ~ eb4 c4 ~ c4 ~ c4 [gb4,bb4,b4] ~ bb4 ~, ~@2 f4 ~@3 g4 ~", // C5 Gb Bmaj7
  I: "gb4 ~ eb4 c4 ~ c4 ~ c4 ~ c4 eb4 [e4,f4] gb4 g4 bb4 c5, bb4 ~@7, ~ f4@2 ~@13", // Fmaj7
  J: "eb5 ~ c5 ~ c5 ~ bb4 c5 ~ eb5 c5 ~ bb4 ~ g4 bb4",
  K: "~ g4 gb4 f4 gb4 f4 eb4 ~ eb4 c4 bb3 eb4 c4!2 bb3 c4, ~@7 f4@2 ~@7",
  L: "~ c4 [eb4,c5] ~ [eb4,c5] ~ [f4,c5] ~ [gb4,g4] ~@2 [f4,c5] ~ eb4 c4@2, ~@4 c5 ~@3", // Cm F5 Gmaj7 F5
  M: "[gb4,c5] g4 ~ f4@2 ~ c5@2 ~ [f4,c5]@2 c4 [f4,c5] ~ [f4,c5] ~, bb4@2 ~ c5 ~@2 eb4 ~@9", // Gbdim F5
  N: "[g4,bb4]@2 ~ [f4,a4,c5]@2 ~ [eb4,g4,c5]@2 ~ [a4,c5] ~@2 [gb4,c5] g4 [f4,c5] ~, [gb4,c5] ~@8 f4@2 ~ bb4@2 ~@2", // Gm F Cm Am Gbdim F5 Gbdim
  O: "eb4 c4 ~ eb4 ~ f4 gb4 f4 eb4 c4 bb3 g3 c4 bb3 g3 ~",
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 [x!2]!109 ~@11>").gain(0.33)

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

// drums · hihat
const hihat = s("hh").struct("<~@8 A@23 B A@23 B A@15 B A@15 B A@7 B A@7 B A@7 B A@4 C ~@11>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!6", B: "x ~ x!3 ~ x!3 ~@7", C: "x ~ x!3 ~ x!3 ~ x!5 ~",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@7 A ~@3 A ~@51 A ~@7 A ~@31>".pickRestart({
  A: "x",
})).gain(0.33)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  ~@32 A ~@3 A ~@35 A ~@15 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11
>`.pickRestart({
  A: "x",
})).gain(4.5)

// drums · congas
const congas = s("conga:13").struct("<~@12 A@4 ~@32 A@8 ~@24 A@8 ~@12 A@17 ~@11>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(0.7)

// drums · congas
const congas_2 = s("conga:18").struct("<~@12 A@4 ~@32 A@8 ~@24 A@8 ~@12 A@17 ~@11>".pickRestart({
  A: "~ x ~@3 x ~@3 x ~@3 x ~@2",
})).gain(0.7)

// drums · congas
const congas_3 = s("conga:33").struct("<~@12 A@4 ~@32 A@8 ~@24 A@8 ~@12 A@16 B ~@11>".pickRestart({
  A: "~@6 x!2 ~@6 x!2", B: "~@6 x!2 ~@6 x ~",
})).gain(0.7)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@4 A@12 ~@20 A@20 ~@24 A@16 ~@4 A@17 ~@11>".pickRestart({
  A: "~@2 x ~ x!2 ~@7 x!2 ~",
})).gain(1.74)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@4 A@12 ~@20 A@20 ~@24 A@16 ~@4 A@17 ~@11>".pickRestart({
  A: "x ~@7 x ~ x!3 ~@3",
})).gain(1.74)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@4 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 A B@3 A
  B@3 ~@8 A B@3 A B@3 A B@3 A B@3 A B@3 C ~@11
>`.pickRestart({
  A: "~@7 x ~ x ~@3 x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~@3 x ~ x", C: "~@7 x ~ x ~@3 x ~@2",
})).gain(0.22)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A
  ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11
>`.pickRestart({
  A: "~ x ~ x ~ x ~@10",
})).gain(0.11)

stack(
  bass, synth_brass_1, pad_new_age, sitar, pad_sweep, piano, kick, snare, hihat, crash, vibraslap, congas, congas_2,
  congas_3, agogo_bells, agogo_bells_2, shaker, shaker_soft
)

More by Madonna