Strudelify
Thinking of You cover art

Middle Of Nowhere

Thinking of You

Hanson

KeyD majorTempo115 bpm
0:00/0:00
// Thinking of You — Hanson
// 115 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 6 "guitar1" distortion guitar (copy of ch 8 "guitar2" electric guitar clean)
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 · piano
const piano = note(`<
  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 B C@8 A
  B A B A B A B A B A B A B A B A B A B D E F G H ~@3
>`.pickRestart({
  A: "[d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4 ~", // Dsus2
  B: "[d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4]@2 d4 ~", // Dsus2
  C: "d5 a4 e5 a4 a5 a4 d5 a4 e5 a4 a5 a4 d5 a4 e5 a4",
  D: "[d4,e4,a4]@3 ~ [d4,e4,a4] ~@2 d4 ~ [d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4", // Dsus2
  E: "~ [d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4]@2 d4", // Dsus2
  F: "~ [d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4", // Dsus2
  G: "~@2 [d4,e4,a4]@3 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4] ~ d4 ~ [d4,e4,a4]@2", H: "d4 ~@15",
})).s("gm_piano").gain(0.58).pan(0.1)

// chords · piano
const piano_2 = note(`<
  A B C D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H I J K
  L M J K L E F G H E F G H E F G H E F G H N O C P Q R S T ~@3 U
>`.pickRestart({
  A: "d2@8 ~@6 c2 ~", B: "c2@8 ~@6 g2 ~", C: "g2@8 ~@6 a2 ~", D: "a2@8 ~@4 a2 ~@3", E: "[d2,a2,d3]@8 ~@6 [c2,c3] ~",
  F: "[c2,g2,c3]@8 ~@6 g2 ~", G: "[d2,g2]@8 ~@6 a2 ~", H: "a2@11 ~ [e2,a2]@3 ~, e2 ~",
  I: "[d3,f#3,a3] ~ [d3,f#3,a3] ~ [d3,f#3,a3] ~@11", J: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4] ~@11",
  K: "[d3,g3,b3,d4] ~ [d3,g3,b3,d4] ~ [d3,g3,b3,d4] ~@11", L: "[c#3,e3,a3] ~ [c#3,e3,a3] ~ [c#3,e3,a3] ~@11",
  M: "[d3,f#3,a3,d4] ~ [d3,f#3,a3,d4] ~ [d3,f#3,a3,d4] ~@11", N: "d3@8 ~@6 c3 ~", O: "c3@8 ~@6 g2 ~",
  P: "a2@11 ~ a2@3 ~", Q: "d3 ~", R: "~ c3@8 ~@7", S: "~ g2@8 ~@7", T: "~@2 a2@11 ~@3", U: "~@4 d2@11 ~",
})).s("gm_piano").gain(0.64)

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C D E F G D E F G D E F G D H I J K H I J K E F G D E F G D E F G D H I J K H I J K E F G D E F G D E F G D L M N
  O L M N O H I J K H I J K H I J K H I J K A B C D A P Q R S@2 ~ T
>`.pickRestart({
  A: "d2@11 ~@5", B: "c2@11 ~@5", C: "g1@11 ~@5", D: "a1@11 ~@5", E: "d2@11 ~@2 g1 a1 b1", F: "c2@11 ~@2 e1 f1 f#1",
  G: "g1@11 ~@2 f#1 g1 g#1", H: "d2@10 g1 ~ a1 ~ b1 ~", I: "c2@10 e1 ~ f1 ~ f#1 ~", J: "g1@10 f#1 ~ g1 ~ g#1 ~",
  K: "a1@5 a1@6 a1 a1@4", L: "d2 ~ d2 ~ d2 ~@11", M: "c2 ~ c2 ~ c2 ~@11", N: "g1 ~ g1 ~ g1 ~@11",
  O: "a1 ~ a1 ~ a1 ~@11", P: "~ c2@11 ~@4", Q: "~ g1@11 ~@4", R: "~@2 a1@11 ~@3", S: "[~ d1@14 ~]/2", T: "~@4 d1@11 ~",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · percussive organ · "organ"
const percussive_organ = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D F G H I J
  K L M A B C D A B C D A B C D A B C D ~@12
>`.pickRestart({
  A: "[d5,a5,d6]@8 ~@6 [c5,c6] ~", B: "[c5,g5,c6]@8 ~@6 g5 ~", C: "[d5,g5]@8 ~@6 a5 ~", D: "a5@11 ~ [e5,a5]@3 ~, e5 ~",
  E: "e5@8 d6 c6 b5 a5 g5 f5 e5 d5, a5@11 ~@5",
  F: "[d5,a5,d6,f#6,a6,d7] ~ [d5,a5,d6,f#6,a6,d7] ~ [d5,a5,d6,f#6,a6,d7] ~@11", // D
  G: "[c5,g5,c6,e6,g6,c7,d7] ~ [c5,g5,c6,e6,g6,c7,d7] ~ [c5,g5,c6,e6,g6,c7,d7] ~@11", // C
  H: "[d5,g5,b5,d6,g6,b6,d7] ~ [d5,g5,b5,d6,g6,b6,d7] ~ [d5,g5,b5,d6,g6,b6,d7] ~@11", // G
  I: "[e5,a5,c#6,e6,a6,d7] ~ [e5,a5,c#6,e6,a6,d7] ~ [e5,a5,c#6,e6,a6,d7] ~@11", // A
  J: "d7 ~ d7 ~ d7 ~@11, [d4,f#4,a4,d5]@11 ~@5", K: "[g6,c7,d7] ~ [g6,c7,d7] ~ [g6,c7,d7] ~@11, [c4,e4,g4,c5]@11 ~@5",
  L: "[g6,b6,d7] ~ [g6,b6,d7] ~ [g6,b6,d7] ~@11, [b3,d4,g4,b4]@11 ~@5", // G
  M: "[a6,d7] ~ [a6,d7] ~ [a6,d7] ~@11, [c#4,e4,a4,c#5]@11 ~@5", // D5 A
})).s("gm_percussive_organ").gain(0.64)

// chords · brass section · "brass"
const brass_section = note(`<
  ~@4 A B C D ~@8 A B C D A B C D ~@12 A B C D A B C D ~@12 E F G H E F G H A B C D A B C D ~@20
>`.pickRestart({
  A: "[d4,a4,d5]@8 ~@6 [c4,c5] ~", B: "[c4,g4,c5]@8 ~@6 g4 ~", C: "[d4,g4]@8 ~@6 a4 ~", D: "a4@11 ~ [e4,a4]@3 ~, e4 ~",
  E: "[d3,a3,d4,f#4,a4,d5] ~ [d3,a3,d4,f#4,a4,d5] ~ [d3,a3,d4,f#4,a4,d5] ~@11", // D
  F: "[c3,g3,c4,e4,g4,c5] ~ [c3,g3,c4,e4,g4,c5] ~ [c3,g3,c4,e4,g4,c5] ~@11", // C
  G: "[d3,g3,b3,d4,g4,b4,d5] ~ [d3,g3,b3,d4,g4,b4,d5] ~ [d3,g3,b3,d4,g4,b4,d5] ~@11", // G
  H: "[e3,a3,c#4,e4,a4] ~ [e3,a3,c#4,e4,a4] ~ [e3,a3,c#4,e4,a4] ~@11", // A
})).s("gm_brass_section").gain(0.64)

// chords · electric guitar clean · "guitar2"
const electric_guitar_clean = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D E B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A B C
  D A B C D A B C D A B C D F G H I J@2 K@4 ~@2
>`.pickRestart({
  A: "[d3,a3,d4]@3 [d3,a3]@2 ~ d3@2 [d3,a3,d4]@2 ~@4 [c3,c4] ~, ~@3 d4@5 ~@3 [a3,d4]@5, ~@5 a3@3 ~@2 d3@2 d3@4", // D5 C D5
  B: "[c3,g3,c4]@3 g3 g3@4 [c3,g3,c4]@2 ~@4 g3@2, ~@3 [c3,c4]@5 ~@2 c3@2 c3@4, ~@11 c4@5, ~@11 g3@3 ~@2", // C5 C
  C: "[d3,g3,d4]@2 g3 ~@3 g3@2 [d3,g3,d4]@2 ~@4 [e3,a3,e4]@2, ~ d3@3 ~ d3 d3@2, ~ d4 d4@2 ~@4, ~@3 g3@3 ~@5 [g3,d4]@5", // G5 A5 G5
  D: "[e3,a3,e4]@3 [e3,a3]@3 e3@2 e4 ~ [a3,e4] ~ [e3,a3,e4]@3 ~, ~@3 e4@5 ~@8, ~@3 a3@2 ~@3", // A5
  E: "[d3,a3,d4]@3 [d3,a3]@2 ~ d3@2 [a3,d4]@2 d3 ~ d3 ~ [c3,c4] ~, ~@3 d4@5 ~@8, ~@5 a3@3 ~@3 [a3,d4]@5", // D5 C D5
  F: "~ g4 f#4 g4 a4@8 ~@2 a4 ~, d3, a4 d4@7, ~ a3@15",
  G: "~ g4 f#4 g4 ~@2 [d3,a3,d4]@4 ~@2 [d3,a3,d4,b4]@3 ~, a4@3 ~ a4@8 ~@4, ~ [d3,a3,d4]@3 ~@12", // D5 Bm7 D5
  H: "c5 ~ b4 ~ a4@5 ~@3 g4 ~ f#4 ~, [d3,a3,d4] d3@7, ~ b2@15, ~@3 g3@11 ~@2", // D5
  I: "~ [c#3,e3,a3]@3 ~@2 [c#3,e3,a3]@4 f#4 ~ g4 ~ d4 ~, e4@11 ~ [c#3,e3,a3]@4", // A
  J: "[~@2 d4@15 d3 [d3,a3,d4]@3 ~@2 [d3,a3,d4]@4 ~@2 [d3,a3,d4]@3, d3@17 ~@15, ~ a3@17 ~@14]/2", // D5
  K: "[~@4 g3@11 ~@4 [c#3,e3,a3]@3 ~@2 [c#3,e3,a3]@4 ~@2 [c#3,e3,a3]@4 ~@3 d3@25 ~@2, ~ [d3,a3,d4]@2 d3@15 ~@16 d4@28 ~@2, ~@2 b2@16 ~@17 a3@27 ~@2, ~@18 f#3@13 ~]/4", // A D5
})).s("gm_electric_guitar_clean").gain(0.64).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 B A@15 B A@3 C A@3 D E A F G A@3 H A@3 B A@11 I J@3 K J L M N A@3 B A@3 O A@3 B A@3 B A@3 C P Q@2 R S T U V
>`.pickRestart({
  A: "x ~@4 x ~ x", B: "x ~@4 x!3", C: "x ~@6 x", D: "x ~@8 x ~@2 x!3 ~", E: "x ~@12 x!2 ~", F: "x ~@8 x ~@4 x ~",
  G: "x ~@9 x ~ x!3 ~", H: "x ~@9 x!3 ~ x ~", I: "x ~@8 x!3 ~@2 x ~", J: "~@5 x ~@2", K: "~@4 x!3 ~", L: "~@9 x!2 ~@5",
  M: "~@7 x ~@2 x ~@2 x!2 ~", N: "x!2 ~@6 x ~ x ~ x!3 ~", O: "x ~@5 x!2", P: "x ~@10 x ~@3 x", Q: "~ x ~@9 x ~@3 x",
  R: "~ x ~@4 x ~", S: "x!2 ~@4 x ~", T: "~ x ~ x ~@9 x ~@2", U: "~ x ~ x ~@10 x ~", V: "~ x!2 ~@5",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  A ~@2 B C@3 D C@15 D C@7 E C@3 F C@3 G C@3 H C@3 I J C@6 K L@3 M L N O P C@3 D C@3 Q C@3 D C@3 R C@4 S T@2 U V W X A
>`.pickRestart({
  A: "x", B: "~@6 x!9 ~", C: "~ x ~ x", D: "~@4 x ~@5 x ~ x!2 ~@2", E: "~@4 x ~@5 x ~ x!4",
  F: "~@4 x ~@2 x ~ x!2 ~ x ~@2 x", G: "~@2 x ~@3 x!2", H: "~@4 x ~@5 x!5 ~", I: "~@4 x ~@3 x ~ x ~ x ~ x!2",
  J: "x!2 ~ x", K: "~@4 x ~@2 x!2 ~ x ~ x!4", L: "x!3 ~@3 x ~", M: "x ~ x ~ x ~@3 x ~@3 x!2 ~@2",
  N: "x ~ x ~ x ~@2 x ~@4 x!3 ~", O: "x ~ x ~ x ~@4 x!2 ~ x!2 ~@2", P: "x ~ x ~ x ~ x!2 ~ x!6 ~", Q: "~@4 x ~@4 x!6 ~",
  R: "~@4 x ~@5 x!6", S: "~@4 x ~@8 x ~@2", T: "~@5 x ~@7 x ~@2", U: "~@3 x ~@3 x", V: "~@6 x ~@8 x", W: "~@7 x ~@7 x",
  X: "~ x",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@27 B ~@3 C ~@3 D ~@3 E ~@7 F G@5 H I J G ~ G@3 ~ G K G ~ G@3 ~ G@2 ~@12
>`.pickRestart({
  A: "~@7 x", B: "~@13 x!3", C: "~@12 x ~ x!2", D: "~@13 x ~@2", E: "~@8 x ~@2 x ~@4", F: "~@6 x ~@3 x!4 ~@2", G: "x",
  H: "x ~@12 x ~@2", I: "x ~@6 x ~ x ~@2 x ~@2 x", J: "x ~@7 x ~@6 x", K: "x ~@9 x!2 ~@4",
})).gain(0.56)

// drums · pedal hat
const pedal_hat = s("hh").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@2 C A B@3 A B@3 A@12 ~@8 A B@3 A B@2 D A B@3 A B@3 A B@3 E F G H I J
  K L
>`.pickRestart({
  A: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", B: "x!2 ~ x!2 ~ x ~ x ~ x ~ x ~ x ~", C: "x!2 ~ x!2 ~ x ~ x ~ x ~ x ~@3",
  D: "x!2 ~ x!2 ~ x ~ x ~ x ~@3 x ~", E: "x!3 ~ x ~@2 x ~ x ~ x ~ x ~ x", F: "~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x",
  G: "~ x!2 ~ x!2 ~ x ~ x ~ x ~ x ~ x", H: "~@2 x!2 ~ x!2 ~ x ~ x ~ x ~ x ~", I: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x",
  J: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x", K: "~@3 x ~@2 x ~ x ~ x ~ x ~ x ~", L: "x",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@11 A ~@7 A ~@17 B C ~@4 A ~@3 A ~@3 A ~@3 D ~@12>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@9 x ~@3 x ~@2", D: "~@5 x ~ x",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@89 [~ x ~@14]!2 [~ x!2 ~@5]>").gain(0.56)

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

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@54 B ~@3 C@2 D E F@5 D@2 E F G ~@2 G H ~@12>".pickRestart({
  A: "~@7 x!5 ~@3 x", B: "x", C: "~@7 x", D: "~ x ~@12 x!2", E: "~ x ~@5 x ~@6 x ~", F: "~ x ~@12 x ~", G: "~ x ~@14",
  H: "~@14 x!2",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  A ~@2 B ~@12 C@4 D C@3 A ~@11 C@4 D C@3 A@12 E@3 F E G E@2 D H I J K C@3 D H I J K C D C A ~@11
>`.pickRestart({
  A: "x", B: "~@15 x", C: "x!4", D: "~ x!3", E: "x!3 ~@5", F: "x!3 ~ x ~@2 x", G: "x!3 ~ x!2 ~@2",
  H: "x ~@3 x ~@3 x ~@2 x!2 ~@2 x", I: "x ~@3 x ~@3 x ~ x ~ x ~ x!2", J: "x ~@3 x ~@2 x!2 ~@3 x ~@3",
  K: "~@2 x ~ x!3 ~",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 A@19 B A@2 ~ A@6 C A@6 ~@8 A@2 ~ A@3 ~ A@3 ~ A@3 ~ D A@3 ~@9>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!7", D: "x!2 ~@2 x!2 ~@2",
})).gain(0.56)

// drums · bongos
const bongos = s("bongo:4").struct("<~@60 A ~ B ~ C ~ D E F G C@3 ~ D E A G C@2 ~@12>".pickRestart({
  A: "~@11 x ~@4", B: "~@7 x ~@8", C: "~@7 x", D: "~@3 x", E: "~@11 x!2 ~@3", F: "~@8 x ~@2 x ~@4",
  G: "~@7 x!2 ~@2 x!2 ~@3",
})).gain(1.48)

// drums · congas
const congas = s("conga:13").struct("<~@56 A B C D E F G H I J K@2 L J M I@2 J K N O P Q I ~@12>".pickRestart({
  A: "x!2 ~@6 x ~ x ~@5", B: "x ~@4 x ~@2 x ~@7", C: "~ x ~@6 x ~@6 x", D: "x ~@4 x ~@10", E: "x!2 ~@6 x ~@7",
  F: "x!2 ~@5 x ~@8", G: "x!2 ~@3 x ~@9 x", H: "~ x ~@3 x ~@2 x ~@6 x", I: "x!2 ~@3 x ~@2 x!3 ~@2 x ~@2",
  J: "x!2 ~@3 x ~@2 x ~ x ~@2 x ~ x", K: "x!2 ~@3 x ~@2 x ~ x ~@2 x ~@2", L: "x!2 ~@3 x ~ x!4 ~ x!2 ~@2",
  M: "x!2 ~@3 x ~@2 x ~ x!2 ~ x ~ x", N: "x!2 ~@11 x ~@2", O: "~@5 x ~@2", P: "~@8 x ~ x ~@2 x ~ x", Q: "x!2 ~@13 x",
})).gain(1.8)

// drums · congas
const congas_2 = s("conga:33").struct("<~@56 A@2 B C D C ~ C E F E G E@7 H ~ I J ~@13>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@8 x ~@3", C: "~ x ~@2", D: "~@4 x ~@10 x", E: "~@3 x!2 ~@3 x ~@3 x ~@3",
  F: "~@3 x ~@4 x ~@3 x ~@3", G: "~@3 x!2 ~@3 x ~@3 x ~@2 x", H: "~@15 x", I: "~@2 x!2", J: "~@3 x!2 ~@11",
})).gain(1.8)

stack(
  piano, piano_2, bass, percussive_organ, brass_section, electric_guitar_clean, kick, snare, low_tom, pedal_hat,
  mid_tom, open_hat, crash, high_tom, ride_bell, tambourine, bongos, congas, congas_2
)

More by Hanson