Strudelify

Walk Right In

The Rooftop Singers

KeyG majorTempo128 bpm
0:00/0:00
// Walk Right In — The Rooftop Singers
// 128 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 13 "MELODY" acoustic guitar steel (copy of ch 2 "MELODY" acoustic guitar nylon); ch 13 "MELODY" choir aahs (copy of ch 2 "MELODY" choir aahs); ch 4 "GTR" acoustic guitar nylon (copy of ch 3 "GTR" acoustic guitar steel); ch 6 "BASS" acoustic bass (copy of ch 5 "BASS" acoustic bass); ch 8 "GTR" acoustic guitar nylon (copy of ch 7 "GTR" acoustic guitar steel)
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/4)

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

// chords · acoustic guitar steel · "GTR"
const acoustic_guitar_steel = note(`<
  A B C D E F C G H I J K L B C D E B C D E F C G H I J K L B C D E B C D E F C G H I J K L B C D E B C D E F C G H I J
  K L B C D M N O
>`.pickRestart({
  A: "~@10 d4 ~ e4 ~ f#4 ~", B: "[b3,d4]@3 ~ [b3,d4]@3 ~@5 [g3,b3]@3 ~", C: "[b3,d4]@4 ~@2 [g#3,d4]@4 ~@2 [g#3,d4]@3 ~",
  D: "c#4@5 ~@3 c#4@3 ~ c4@3 ~", E: "[b3,d4]@3 ~ [b3,e4] ~ [b3,e4] ~ [b3,d4] ~ d4 ~ e4 ~ f#4 ~",
  F: "[b3,d4]@3 ~ b3@3 ~@5 [g3,b3]@3 ~", G: "[c#4,e4]@5 ~@3 [c#4,g4]@5 ~@3",
  H: "~@4 [c4,f#4] ~ [c4,f#4] ~ [c4,f#4]@3 ~ [c4,f#4] ~ [c4,f#4] ~", // Cdim
  I: "[b3,g4] ~ [b3,g4] ~ [b3,e4] ~ [b3,e4] ~ [b3,d4] ~ [b3,d4] ~ [b3,e4] ~ [b3,d4] ~", // Em E5 Bm E5 Bm
  J: "[b3,d4]@3 ~@9 [g3,b3] ~ [g3,b3] ~", K: "d4@5 ~@3 d4@5 ~@3",
  L: "[a#3,d4]@3 ~ [a#3,d4] ~ [a#3,d4] ~ [a#3,d4] ~ d4 ~ e4 ~ f#4 ~", // A#
  M: "g4 ~ g4 ~ f#4 ~ f4 ~ [g#3,d4]@3 ~ [g#3,d4] ~ [g#3,d4] ~", N: "c#4@5 ~@3 c4@3 ~ [c4,f#4]@3 ~",
  O: "[b3,d4]@3 ~ [b3,e4] ~ [b3,e4] ~ [b3,d4]@8", // Bm E5 Bm
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.4)

// bass · acoustic bass · "BASS"
const bass = note(`<
  A B C D E B C F G H I J K B C D L B C D E B C F G H I J K B C D E B C D E B C F G H I J K B C D L B C D E B C F G H I
  J K B C D M N O
>`.pickRestart({
  A: "~@10 d2 ~ e2 ~ f#2 ~", B: "g2@3 ~@5 d2@3 ~ d3@3 ~", C: "g2@4 ~@2 b2@4 ~@2 e2@3 ~",
  D: "[a2,g3]@5 ~@3 [a2,e3]@3 ~ [d2,f#3]@3 ~", E: "g2@8 ~@2 d2 ~ e2 ~ f#2 ~", F: "[a2,g3]@5 ~@3 e3@3 ~ a2@3 ~",
  G: "d2@3 ~ a2 ~ a2 ~ d3@3 ~ d2@3 ~",
  H: "[g2,d3] ~ [g2,d3] ~ [g2,e3] ~ [g2,e3] ~ [g2,d3] ~ [g2,d3] ~ [g2,e3] ~ [g2,d3] ~", // G5 C G5 C G5
  I: "[g2,g3]@3 ~ e3 ~ b2 ~ d3 ~ [g2,e3]@4 ~@2", J: "[c3,e3]@5 ~@3 [c3,e3]@3 ~ c2@3 ~",
  K: "[c3,e3]@3 ~ [c3,e3] ~ [c3,e3] ~ [c3,e3] ~ d2 ~ e2 ~ f#2 ~", L: "d3@3 ~ e3 ~ e3 ~ d3 ~ d2 ~ e2 ~ f#2 ~",
  M: "g2 ~ g3 ~ f#3 ~ f3 ~ e3@3 ~ b2 ~ a#2 ~", N: "g3@5 ~@3 f#3@3 ~@5", O: "g2@3 ~ [g2,d3] ~ [g2,d3] ~ [g2,e3]@8",
})).s("gm_acoustic_bass").gain(0.13).pan(0.2)

// chords · acoustic guitar steel · "GTR"
const acoustic_guitar_steel_2 = note(`<
  ~ A B C A@2 B D E A@2 F G A B C A@2 B C A@2 B D E A@2 F G A B C A@2 B C A@2 B D E A@2 F G A B C A@2 B C A@2 B D E A@2
  F G A B C B H I
>`.pickRestart({
  A: "[d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3] [d3,g3,b3]@2 [d3,g3,b3]!3", // G
  B: "[d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [g3,b3,d4,g#4]@2 [b3,d4,g#4] [b3,d4,g#4]@2 [b3,d4,g#4]!3", // G G#dim
  C: "[e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]!2 [a3,c4,f#4]!4", // C#dim F#dim
  D: "[e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4] [e3,g3,c#4]@2 [e3,g3,c#4]!3", // C#dim
  E: "[a3,c4,f#4]@2 [a3,c4,f#4]@2 [a3,c4,f#4]@2 [a3,c4,f#4]@2 [a3,c4,f#4]@2 [a3,c4,f#4] [a3,c4,f#4]@2 [a3,c4,f#4]!3", // F#dim
  F: "[g3,d4,e4]@2 [g3,d4,e4]@2 [g3,d4,e4]@2 [g3,d4,e4]@2 [g3,d4,e4]@2 [g3,d4,e4] [g3,d4,e4]@2 [g3,d4,e4]!3", // Em7
  G: "[g3,d4,e4]@2 [g3,d4,e4]@2 [g3,d4,e4]@2 [g3,d4,e4]@2 [a3,c4,d4,f#4]@2 [a3,c4,f#4] [a3,c4,f#4]@2 [a3,c4,f#4]!3", // Em7 D7 F#dim
  H: "[e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [e3,g3,c#4]@2 [g3,a3,c4,f#4]@2 [a3,c4,f#4] [a3,c4,f#4]@2 [a3,c4,f#4]!3", // C#dim F#dim
  I: "[d3,g3,b3]!4 [d3,g3,b3]@4", // G
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.7)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x]!59 [~@8 x ~@3 x!2 ~@2] [~ x]!5 ~>").gain(0.38)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~
  [x ~@2 x!2 ~@2 x ~@3 x!2 ~@2 x]!59
  [x ~@2 x!2 ~@2 x ~@3 x ~@3 x]
  [x ~@2 x!2 ~@2 x ~@3 x!2 ~@2 x]!5
  ~
>`).gain(0.38)

stack(acoustic_guitar_steel, bass, acoustic_guitar_steel_2, congas, congas_2)