Strudelify
Don't Dream It's Over cover art

Don't Dream It's Over

Crowded House

KeyE♭ majorTempo82 bpm
0:00/0:00
// Don't Dream It's Over — Crowded House
// 82 bpm, 4/4, key D# 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: duplicate parts dropped: ch 8 "STEEL GTR" acoustic guitar steel (copy of ch 1 "JAZZ GTR" electric guitar jazz)
// note: Full arrangement: all 78 bars on a 48-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 · [...]/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 · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  A B C@2 D E F G D E F G H I@2 J K L M N D E F G D E F G H I@2 J K L M N D E F G D E F G ~@5 D E F G D E F G H I@2 J K
  L M N H I@2 J K L H I@2 J K O ~
>`.pickRestart({
  A: "eb4@9 ~ f4 ~ [eb4,f4,bb4]@3 ~@3 [eb3,bb3,eb4]@3 ~@3 eb4@9 [f4,bb4]@2 ~ [f4,bb4]@4 ~@2 eb4@3 ~@3, [eb3,bb3]@15 ~@9 [eb3,bb3]@16 ~ [eb3,bb3]@3 ~@4, ~@9 bb4@2 ~@25 eb4 ~@11", // Ebsus2 Eb5 Bb5 Eb5
  B: "db4@8 ~ f4 ~@2 [db4,f4,bb4]@3 ~@3 [bb3,db4]@3 ~@2 [eb3,bb3,db4]@9 f4@2 ~@2 [eb3,bb3]@9 ~@3, [eb3,bb3]@15 ~@2 eb3@3 ~@28, ~@8 [db4,bb4]@2 ~@13 bb4@2 ~@10 [db4,ab4]@8 ~@5", // Bbm Eb7 Eb5 Gb Db5
  C: "[eb4@8 bb4@2 f4 ~ [eb4,f4,bb4]@3 ~@3 [eb3,bb3,eb4]@3 ~@12 f4@2 ~ eb4@2 ~@4 f4 ~@5 db4@8 bb4@2 ~@2 [db4,f4,bb4]@3 ~@3 [bb3,db4]@3 ~@2 bb4 f4 ~@7 f4@2 ~@2 [eb3,bb3,db4,ab4]@8 ~@4, [eb3,bb3]@15 ~@8 eb3@15 ~@3 [eb3,bb3,eb4]@3 ~@3 [eb3,bb3]@15 ~@3 eb3@3 ~@3 [eb3,bb3,db4]@12 ~@13, ~@23 eb4@9 bb4@2 ~ [f4,bb4]@3 ~@46 f4@5 ~@7, ~@8 bb3@5 ~@19]/2", // Ebsus2 Eb5 Bbm Ebsus4 Eb5 Eb7 Bb5
  D: "[eb3,bb3]@9 [f4,bb4]@2 ~ [f4,bb4]@3 ~@3 [eb3,bb3,eb4]@3 ~@12 [f4,bb4]@2 ~@2 f4@4 ~ eb4@2 ~@4, eb4@2 ~ [eb3,bb3,eb4]@2 ~, ~@9 bb4 ~@2", // Eb5 Bb5 Eb5 Bb5 Eb5
  E: "~@10 [eb4,g4]@2 ~ [eb4,g4]@4 ~@2 [c3,g3,c4]@3 ~@11 [eb4,g4]@2 ~@2 [eb4,g4]@5 ~@6, [g3,c4]@16 ~@8 c4@17 ~@7, ~ c3@14 ~@10 [c3,g3]@13 ~@10", // Eb C5 Eb C5
  F: "ab3 ~@9 c4@2 ~ [c4,eb4,ab4]@5 ab3 [eb3,ab3]@3 ~@2 ab3 ~@9 [c4,eb4,ab4]@2 ~ [c4,eb4,ab4]@4 ~ ab3@3 ~@3, ~ [eb3,ab3]@13 ~@11 [eb3,ab3]@14 ~@9, ~@9 [eb4,ab4]@2 ~@37", // Ab Ab5 Ab Ab5
  G: "~@10 g4 ~@2 [b3,d4,g4]@5 g3 [d3,g3]@3 ~@2 g3 ~@8 [b3,d4,g4]@2 ~@2 [b3,d4,g4]@5 ~@6, [d3,g3]@14 ~@11 [d3,g3]@13 ~@10, ~@9 [b3,d4]@2 ~@37", // G G5 G G5 Bm
  H: "~@6 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]@2 ~ [c4,eb4,ab4]@5 ~@14 [d4,f4,bb4]@2 ~ [d4,f4,bb4] ~@2 [d4,f4,bb4]@5 ~@6, ab3@17 ~@8 bb3@18 ~@5", // Ab Bb
  I: "[~@6 [eb4,f4,bb4] ~@2 [eb4,f4]@2 ~@2 f4@5 ~@12 [c4,eb4,g4] ~@2 [c4,eb4,g4]@2 ~ [c4,eb4,g4]@6 ~@15 [c4,eb4,ab4]@2 ~ [c4,eb4,ab4]@5 ~@16 [d4,f4,bb4]@2 ~ [d4,f4,bb4]@5 ~@7, [eb3,bb3]@3 ~ [c3,g3]@3 ~@9, ~@12 [eb4,bb4]@5 ~@30 ab3@17 ~@8 bb3@17 ~@7]/2", // Ebsus2 Cm Ab Bb Eb5 C5 Eb5
  J: "~@9 [eb4,f4,bb4]@2 ~ [eb4,f4,bb4]@5 ~@16 [c4,eb4,g4]@2 ~ [c4,eb4,g4]@5 ~@7, [eb3,bb3]@19 ~@5 [c3,g3]@18 ~@6", // Ebsus2 Cm Eb5 C5
  K: "~@10 c4@2 ~ [c4,eb4,ab4]@4 ~@16 [d4,f4,bb4]@2 ~@2 [d4,f4,bb4]@4 ~@7, ab3@17 ~@7 bb3@17 ~@7, ~@9 [eb4,ab4]@2 ~@37", // Ab Bb Ab5
  L: "~@9 [eb4,f4,bb4]@2 ~@2 [eb4,f4,bb4]@5 ~@16 [c4,eb4,g4]@2 ~ [c4,eb4,g4]@5 ~@6, [eb3,bb3]@19 ~@5 [c3,g3]@19 ~@5", // Ebsus2 Cm Eb5 C5
  M: "~@9 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]@4 ~@17 [c4,ab4]@2 ~ [c4,eb4,ab4]@4 ~@8, [eb3,ab3]@17 ~@15 eb4@2 ~@14", // Ab Fm Ab Ab5
  N: "~@10 [c4,eb4,ab4]@2 ~ [c4,eb4,ab4]@4 ~@31, [eb3,ab3]@17 ~@31", // Ab Ab5
  O: "~@9 [eb4,f4,bb4]@2 ~@2 [eb4,f4,bb4]@5 ~@30, [eb3,bb3]@19 ~@29", // Ebsus2 Eb5
})).s("gm_electric_guitar_jazz").gain(0.15).pan(0.6)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@3 A B C D E F G H I J K L K M K H N O P D Q O C H R J K L K J S T U O G D Q V C W X Y Z AA AB AC AD C H Q O C H R AE
  K J K J K AF AG J S J AH M AI J K J K J AJ ~
>`.pickRestart({
  A: "~@17 bb2@4 c3@2 eb3@3 ~@3 eb3@4 c3@3 ~@2 c3@4 eb3@4 ~@2, ~@27 f3@4 ~@5 bb2@4 ~@8",
  B: "~@7 bb2@3 c3@3 eb3@3 c3@2 ~ eb3@12 ~@11 bb1@6, eb2@7 ~", C: "c2@7 g1", D: "ab1@14 ab1 f1", E: "g1@14 b1 d2",
  F: "~@6 bb2@3 c3@3 ~ eb3@2 c3 ~@2 eb3@11 ~@13 bb1@6, eb2@7 ~", G: "c2@14 f1 g1", H: "ab1@7 f1",
  I: "~@31 g3 ~@5 g3@5 g1@6, g1@7 ~", J: "ab1@3 ab1 bb1@3 d2", K: "eb2@3 bb1 c2@3 g1", L: "ab1@6 f1 ab1 bb1@6 d2@2",
  M: "ab1@6 ab1@2 bb1@6 c2 d2", N: "~@30 bb2@2 ~@4 bb2@5 ~ c2@6, ab1@7 ~", O: "eb2@7 bb1", P: "c2@14 c2 g1",
  Q: "g1@7 d2", R: "g1@7 g1", S: "eb2@6 bb1@2 c2@6 f1 g1", T: "~@13 ab2@5 ~@2 ab2@2 bb2@3 ab2@17 ab1@3 f1@3, ab1@7 ~",
  U: "~@19 bb2@2 c3@3 eb3@6 c3@6 bb2@4 ~@2 c2@6, ab1@7 ~",
  V: "~@7 bb2@3 c3@2 ~ eb3@3 c3@2 ~ eb3@10 ~@13 bb1@6, eb2@7 ~", W: "ab1@14 c2 ab1", X: "g1@14 e1 g1",
  Y: "ab1@6 bb1 c2 eb2@6 g1@2", Z: "ab1@6 c2@2 eb2@6 f1 g1", AA: "ab1@3 c2 eb2@3 c2", AB: "db2@7 bb1",
  AC: "~@9 ab2@3 db3@2 ~ eb3@3 f3@3 [db2,eb3]@3, db2@7 ~", // Dbsus2
  AD: "~@6 bb2@3 c3@3 eb3@2 ~ c3@2 ~ eb3@8 ~@16 bb1@6, eb2@7 ~", AE: "~ f2@12 ~@5 f2@3 ~@3 g2@14 ~@4 g2@2 ~@4",
  AF: "~@18 ab2@3 bb2@4 ab2@6 f2@6 eb2@5 f1@6, ab1@7 ~", AG: "~@18 eb2@3 ab2@2 ~ bb2@6 ab2@5 ~@2 f2@5 f1@6, ab1@7 ~",
  AH: "eb2@6 g1 bb1 c2@6 g1@2",
  AI: "~@7 bb2@4 ~@2 eb3@4 ~ bb2@3 c3@2 ~ eb3@2 ~ f3@3 eb3@2 ~ c3@2 ~ bb2 ~@3 g2@3 f2@2 ~ eb2@2", AJ: "eb2@3 bb1 ~@4",
})).s("gm_fretless_bass").gain(0.58)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz_2 = note("<~@7 A@2 ~@35 B C D E F@3 ~ G@2 ~@2 H ~@21>".pickRestart({
  A: "[~@30 [c4,d4]@3 ~@3 [c4,d4]@5 b3@12 ~@43]/2", // Csus2
  B: "~ [g3,bb3]@2 [ab3,c4]@3 [bb3,eb4]@2 ~@2 f4@4 ~ ab4@6 c4@3 ~@6 eb4@6 g4@12, ~@9 bb4@6 eb4@14 ~@19, ~@24 bb3@13 ~@11", // Gm Ab Eb5
  C: "[g3,bb3]@3 [ab3,c4]@3 eb4@3 ~ f4@5 ab4@6 c4@3 ~@6 g4@6 f4@3 eb4@4 c4@4 ~, ~@6 bb3@2 ~ bb4@6 eb4@9 bb3@10 ~@14", // Gm Ab
  D: "~ [g3,bb3]@2 ~ ab3@2 eb4@3 ~ f4@5 ~@6 c4@3 ~@6 eb4@6 g4@7 ~@5, ~@3 c4@3 bb3@2 ~ bb4@6 ab4@8 ~ bb3@11 ~@13, ~@16 eb4@9 ~@23", // Gm
  E: "~ ab3@4 ~ ab3@4 b3@6 ab3@3 ~@6 f4@5 ab4@6 f4@6 b3@6, ~@11 eb4@3 ~@10",
  F: "[~@6 eb4@3 f4@2 ~ ab4@3 ~@3 ab4@3 bb4@2 ~ c5@6 bb4@6 c5@6 bb4@5 bb4@26 ~@23 c4@28 ~@20, bb3@11 ~@84 [eb4,g4]@28 ~@21]/3", // Eb
  G: "[~@8 d5@7 ~@4 [eb4,f4,bb4]@6 ~@7, ~@45 [eb4,f4,bb4]@5 ~@46, ~@24 [eb3,bb3]@7 ~@17]/2", // Ebsus2 Eb5
  H: "~@17 eb5@3 ab5@2 eb5@2 ~ ab5@13 g5@9 ~",
})).s("gm_electric_guitar_jazz").gain(0.39)

// other · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@36 A B@2 C D E@2 F ~@21 G H G H G H G H G H G H ~>".pickRestart({
  A: "g5@23 f5@12 bb5@13", B: "[eb5@24 d5@12 g5@11 c5@19 d5@6 eb5@12 f5@12]/2", C: "~ d5@16 c5@6 b4@19 ~@6",
  D: "g5@24 f5@11 bb5@13", E: "[g5@12 c6@23 d6@12 eb6@49]/2", F: "d6@41 ~@7", G: "c6 bb5 ab5 g5 f5@2 eb5@2",
  H: "bb5@6 ab5@6 g5@6 f5@6 eb5@13 d5@5 eb5@6",
})).s("gm_percussive_organ").gain(0.52)

// other · percussive organ · "ORGAN 2"
const percussive_organ_2 = note("<~@37 A B@2 ~@2 C D ~@21 E@2 F G F G F G H I J ~@2>".pickRestart({
  A: "bb5@18 g5@5 ~", B: "[g5@31 ~@17]/2", C: "eb6@5 d6@6 c6@7 bb5@6 ab5@22 ~@2",
  D: "d6@5 c6@6 ~ b5@5 a5@6 ~ g5@19 ~@5", E: "[~@49 bb5@47, ~ c6@95]/2", F: "~ c6@47", G: "~ bb5@47", H: "~ c6@40 ~@7",
  I: "~ bb5@11 g5@6 bb5@6 c6@12 d6@12", J: "~ eb6@43 ~@4",
})).s("gm_percussive_organ").gain(0.41)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@4 A B C D A B C D E F E F E F C@2 A B C D A B C D E F E F E G H C A B C D I B C D J K J L@2 I B C D A B C D E F E F
  E F C@2 E F E G E F E F E F E M ~
>`.pickRestart({
  A: "eb3", B: "c4", C: "ab3", D: "g3", E: "ab3 bb3", F: "eb4 c4", G: "eb3 c4", H: "ab3 ~", I: "eb4", J: "ab3 eb4",
  K: "ab3 eb3", L: "db4", M: "eb4 ~",
})).s("gm_synth_strings_1").gain(0.32).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B A B A B A@3 B A B A B A B A C A B A B A B D C A B A B A B D B A B A B A@3 B A B A@3 B A B A B D B A@3
  B A B A B A B A C A B D ~
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~ x ~@2", D: "x",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@4 A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 B ~@7 B ~ A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ B ~ A ~ A ~@5 A ~ A ~ A ~
  A ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~ x ~@2",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@4 [~ x ~ x]!40 ~@34>").gain(0.72)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@12 x ~ x!2] ~@15 [~@6 x!2] ~@36 [~@7 x] ~@21>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@5 B A B A@10 C A C A C A@19 D A D A D A D A@12 ~@13>".pickRestart({
  A: "x!8", B: "x!4 ~ x!3", C: "x!3 ~ x!4", D: "x!7 ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@5 x ~@2] ~@36 [~@5 x!2 ~] ~@21>").gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A ~ A ~@10 B ~ B ~ B C ~@18 D ~ D ~ D ~ D ~@25>".pickRestart({
  A: "~ x", B: "~@3 x ~@4", C: "~@37 x ~@10", D: "~@7 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@15 A ~@14 B ~@8 C ~@2 C ~ A ~@7 C ~@13 A ~@6>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@46",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@65 [x!8]!11 [x!4 ~@4] ~>").gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@13 A B@4 ~@10 B C B@2 C B C ~@43>".pickRestart({
  A: "~@13 x ~@34", B: "~@37 x ~@10", C: "~@3 x",
})).gain(2.3)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@13 A B C@2 D ~@3 E ~ E ~ F ~ F B@2 C D B@3 ~@2 F ~ E ~ F ~ F ~@34
>`.pickRestart({
  A: "~@7 x ~@2 x ~@37", B: "~@10 x!2 ~@4", C: "~@31 x ~ x ~@14", D: "~@31 x ~@2 x ~@13", E: "~@13 x ~@34",
  F: "~ x ~@2",
})).gain(2.3)

// drums · congas
const congas_3 = s("conga:33").struct("<~@21 A ~ B ~ C ~ B ~@9 B ~ D ~ B ~ E ~@34>".pickRestart({
  A: "~@7 x ~ x ~@38", B: "~@7 x ~ x ~@9 x ~@28", C: "~@6 x ~@2 x ~@9 x ~@28", D: "~@7 x ~@2 x ~@8 x ~@28",
  E: "~@2 x!2 ~@2 x ~@9",
})).gain(2.3)

stack(
  electric_guitar_jazz, bass, electric_guitar_jazz_2, percussive_organ, percussive_organ_2, synth_strings_1, kick,
  kick_soft, rim, snare, low_tom, hihat, mid_tom, open_hat, crash, ride, congas, congas_2, congas_3
)

More by Crowded House