Strudelify

Shambala

Three Dog Night

KeyA majorTempo130 bpm
0:00/0:00
// Shambala — Three Dog Night
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 6 "12 String" named as a guitar, played on acoustic guitar steel (its piano patch is not one); ch 8 "Brass R" named as a brass, played on brass section (its piano patch is not one)
// note: duplicate parts dropped: ch 8 "Brass R" brass section (copy of ch 7 "Brass l" brass section)
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · "Wurlitzer"
const piano = note(`<
  A B C D@2 B E F@2 B C D@2 B E F@2 B C D@2 B E F@2 B C D@2 B E F@2 B C D@2 B E G@2 H I J K L I J K B C D@2 B C D@2 B E
  F@2 B C D@2 B E G@2 H I J K L I J K H I J K L I J K B C D@2 B E G@2 B C D@2 B E G@2 B C D@2 B E M@2 ~
>`.pickRestart({
  A: "~@5 c#3 d3 d#3", B: "~ [b3,e4,g#4] ~ [a3,d4,f#4], e3 d3", C: "c#3 d3 e3 a2@2 c#3 d3 d#3, ~@4 [a3,c#4,e4]@7 ~@5",
  D: "[~@4 [b3,e4,g#4]@4 ~@4 [a3,d4,f#4] ~ a2@12 c#3@2 d3@2 d#3@2, e3@4 d3@3 [a3,c#4,e4]@7 ~@2]/2", // E D A
  E: "c#3 d3 e3 a2@2 c#3 d3 d#3, ~ [a3,c#4,e4]@2 ~", // A
  F: "[~@4 [b3,e4,g#4]@4 ~@4 [a3,d4,f#4] ~ [a3,c#4,e4]@12 c#3@2 d3@2 d#3@2, e3@4 d3@3 a2@5 ~@4]/2", // E D A
  G: "[~@4 [b3,e4,g#4]@4 ~@4 [a3,d4,f#4] ~ [a3,c#4,e4]@12 ~@2 [a2,a3,c#4,e4,a4]@3 ~, e3@4 d3@3 a2@5 ~@4]/2", // E D A
  H: "[a2,a3,c#4,e4,a4] ~@3 [a2,a3,c#4,e4,a4]@4 ~@4 [a2,a3,c#4,e4,a4]@4", // A
  I: "~@4 [a2,a3,c#4,e4,a4]@4 ~@4 [a2,a3,c#4,e4,a4]@3 ~", J: "~@4 [d2,d3,d4,f#4,a4]@3 ~@5 [d2,d3,d4,f#4,a4]@4",
  K: "~@4 [c#4,e4,a4] ~@3 [a2,a3,c#4,e4,a4]@4 ~@4, ~@2 [a2,a3] ~@5", L: "~ [a2,a3,c#4,e4,a4] ~ [a2,a3,c#4,e4,a4]",
  M: "[~@4 [b3,e4,g#4]@4 ~@4 [a3,d4,f#4] ~ [a2,a3,e4,a4,c#5]@18, e3@4 d3@3 ~@9]/2", // E D A
})).s("gm_piano").gain(0.51).pan(0.7)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~ A B C@2 D E F@2 A B G H D E F@2 A B G H D E F@2 A B G H D E F@2 A B G H D E F@2 I J K L M J K L A B N@2 A B G H D E
  F@2 A B G H D E F@2 I J K L M J K L I J K L M J K L A B G H D E F@2 A B G H D E F@2 A B G H D E O@2 ~
>`.pickRestart({
  A: "e2@8 d2@7 ~", B: "c#2 d2 e2 a1@4 ~", C: "[e2@7 ~ d2@5 ~ a1@13 ~@5]/2", D: "e2@5 ~ e2@2 d2@5 ~ d2@2",
  E: "c#2@2 d2@2 e2 ~ a1@2 ~@2 a1@4 ~@2", F: "[e2@5 ~ e2@2 d2@5 ~ a1@6 ~@2 a1@2 ~@2 a1@2 ~@4]/2",
  G: "e2@7 ~ d2@5 ~ a1@2", H: "a1 ~ a1 ~@3 a1@3 ~ c#2@2 d2@2 d#2@2", I: "a1 ~ a1@2 ~@2 a1@2", J: "~@4 a1@5 ~@3 a1@4",
  K: "~ d2 ~ d2", L: "~@4 a1 ~@3 a1@4 ~@4", M: "~ a1 ~ a1", N: "[e2@7 ~ d2@5 ~ a1@12 c#2@2 d2@2 d#2@2]/2",
  O: "[e2@5 ~ e2@2 d2@5 ~ a1@18]/2",
})).s("gm_electric_bass_pick").gain(0.53)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@8 A@2 B@2 A@2 B@2 C@2 D@2 A@2 B@2
  C@2 D@2 E@16 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~
>`.pickRestart({
  A: "[[b4,e5,g#5]@8 [d5,f#5]@7 ~@3 d5@2 e5@2 c#5@9 ~, ~@8 a4@23 ~, ~@4 c#5 ~@3]/2", // E D
  B: "[[b4,e5,g#5]@7 ~ [d5,f#5]@6 [c#5,e5]@17 ~, ~@8 a4@23 ~]/2", // E D C#m
  C: "[[b4,e5,g#5]@7 ~ [d5,f#5]@7 ~@3 d5@2 e5@2 c#5@9 ~, ~@8 a4@23 ~, ~@4 c#5 ~@3]/2", // E D
  D: "[[b4,e5,g#5]@7 ~ [d5,f#5]@6 [c#5,e5]@16 ~@2, ~@4 a4@11 ~]/2", // E D C#m
  E: "[[e5,c#6]@32 [f#5,d6]@16 [e5,c#6]@48 [f#5,d6]@16 [e5,c#6]@15 ~, a5@127 ~]/8", // C#m D C#m D C#m
})).s("gm_rock_organ").gain(0.19).pan(0.2)

// chords · acoustic guitar steel · "6 String"
const acoustic_guitar_steel = note(`<
  ~ A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D E F G D E F H A B C@2 A B C@2 A B
  C@2 A B C@2 A B C@2 D E F G D E F H D E F G D E F H A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B I@2 ~
>`.pickRestart({
  A: "~@6 b3@2 ~@4 e4@2 d4 ~, e3@6 ~@2 d3@7 ~, ~@2 g#3@6 ~@2 f#3@5 ~, ~@4 e4@5 ~@7",
  B: "[c#3,c#4,e4]@2 [d3,a3]@2 [e3,c#4,e4] ~ [a2,c#4,e4]@4 [c#3,a3]@2 [d3,c#4,e4]@2 [d#3,a3] ~", // C#m D5 C#m A F#m C#m D#dim
  C: "[~@2 g#3@2 ~@2 g#3@2 ~@2 f#3@2 d4 ~@7 a3@2 [c#4,e4]@4 a3@2 ~@4, e3@7 ~ d3@6 a2@6 ~@12, ~@2 [b3,e4]@2 ~@5 c#3@5 ~@2]/2", // C#m E5
  D: "~@4 [a2,a3,c#4,e4]@4 ~@4 [a2,a3,c#4,e4]@3 ~", E: "~@4 [a2,a3,c#4,e4]@3 ~@5 [a2,a3,c#4,e4]@3 ~",
  F: "~@4 [d3,a3,d4,f#4]@2 ~@6 [d3,a3,d4,f#4]@3 ~", G: "~@4 [a2,a3,c#4,e4] ~@3 [a2,a3,c#4,e4]@7 ~",
  H: "~@4 [a2,a3,c#4,e4] ~@3 [a3,c#4,e4]@3 ~ a3@2 [c#4,e4] ~, ~@8 a2@7 ~", // A C#m
  I: "[~@2 g#3@2 ~@2 g#3@2 ~@2 f#3@2 d4 ~ a2@6 ~@12, e3@7 ~ d3@6 ~@18, ~ [b3,e4] ~@6]/2", // E5
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0)

// chords · acoustic guitar steel · "12 String"
const acoustic_guitar_steel_2 = note(`<
  ~ A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D E F G E H I G A B C@2 A B C@2 A B
  C@2 A B C@2 A B C@2 D E F G E H I G D E F G E H I G A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B J@2 ~
>`.pickRestart({
  A: "~@6 b3@2 ~@4 e4@2 d4 ~, e3@8 d3@7 ~, ~ g#3@3 ~ f#3@2 ~, ~@4 e4@5 ~@7",
  B: "[c#4,e4]@2 a3@2 [c#4,e4] ~ [a3,c#4,e4]@4 a3@2 [c#4,e4]@2 a3 ~, a2@5 ~@11", // C#m A C#m
  C: "[~@2 b3@2 ~@2 b3@2 ~@2 a3@2 [d4,f#4] ~ [a3,c#4,e4]@4 a3@2 [c#4,e4] ~ [a3,c#4,e4]@5 ~@5, e3@7 ~ d3@5 ~ a2@10 ~@8, ~ [e4,g#4] ~@6]/2", // D A C#m A E
  D: "[c#4,e4,a4] ~@3 [c#4,e4,a4]@4 ~@4 [c#4,e4,a4]@4, ~@12 g#4 ~@3", E: "~@4 [c#4,e4,a4]@4 ~@4 [c#4,e4,a4]@3 ~",
  F: "~@4 [d4,f#4,a4]@3 ~@5 [d4,f#4,a4]@3 ~", G: "~@2 [c#4,e4,a4] ~ [c#4,e4,a4]@2 ~@2",
  H: "~@4 [c#4,e4,a4]@3 ~@5 [c#4,e4,a4]@3 ~", I: "~@4 [d4,f#4,a4]@3 ~@5 [d4,f#4,a4]@4",
  J: "[~@2 b3@2 ~@2 b3@2 ~@2 a3@2 [d4,f#4] ~ [a3,c#4,e4]@4 ~@14, e3@7 ~ d3@5 ~ a2@10 ~@8, ~ [e4,g#4] ~@6]/2", // D A E
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(1)

// chords · brass section · "Brass l"
const brass_section = note(`<
  ~@41 A@2 ~ B C@2 ~ D ~@20 A@2 ~ B C@2 ~ D A@2 ~ B C@2 ~ D ~@8 E F G@2 H F I@2 E F G@2 H F J@2 ~
>`.pickRestart({
  A: "[[a4,e5,a5] ~@3 [a4,e5,a5]@26 ~@2]/2", B: "~@2 [a4,e5,a5] ~ [a4,e5,a5]@4",
  C: "[~@4 [a4,e5,a5]@27 ~, ~@4 b4 ~@27]/2", D: "~@4 [a4,e5,a5]@2 ~@2 [a4,e5,a5]@5 ~@3",
  E: "~@4 [b4,e5,b5]@4 ~@2 [a4,d5,a5] ~@5", F: "~@4 [a4,e5,a5] ~ [a4,e5,a5]@8 ~@2",
  G: "[[b4,e5,b5] ~@3 [b4,e5,b5]@2 ~@2 [a4,d5,a5] ~ [a4,a5] ~@3 [a4,e5,a5]@10 ~@8, ~@5 d5 ~@10]/2", // E5 D5 A A5
  H: "~@4 [b4,e5,b5]@3 ~ [a4,d5,a5] ~ [a4,d5,a5] ~@5", // E5 D5
  I: "[[e5,b5] ~@3 [b4,e5,b5]@2 ~@2 [a4,d5,a5] ~ [a4,d5,a5] ~@3 [a4,e5,a5]@10 ~@8, b4 ~@15]/2", // E5 D5 A5
  J: "[[e5,b5] ~@3 [b4,e5,b5]@2 ~@2 [a4,d5,a5] ~ [a4,d5,a5] ~@3 [a3,a4,e5,a5]@18, b4@2 ~@12 f#5 ~@17]/2", // E5 D5 A5
})).s("gm_brass_section").gain(0.36).pan(0)

// chords · string ensemble 1 · "String Pad"
const string_ensemble_1 = note(`<
  ~@33 A B C@2 D B E@2 F@8 ~@12 A B C@2 D B E@2 F@16 A B C@2 D B E@2 A B C@2 D B E@2 A B C@2 D B E@2 ~
>`.pickRestart({
  A: "[e4,g#4,b4]@7 ~ [d4,f#4,a4]@8", B: "[e4,a4,c#5]@15 ~", C: "[[e4,g#4,b4]@7 ~ [d4,f#4,a4]@5 ~ [e4,a4,c#5]@17 ~]/2",
  D: "[e4,g#4,b4]@7 ~ [d4,f#4,a4]@7 ~", E: "[[e4,g#4,b4]@7 ~ [d4,f#4,a4]@5 ~ [e4,a4,c#5]@14 ~@4]/2",
  F: "[[c#5,e5]@32 [f#4,d5]@16 [c#5,e5]@48 [f#4,d5]@16 [c#5,e5]@15 ~, a4@127 ~]/8", // C#m D C#m D C#m
})).s("gm_string_ensemble_1").gain(0.19)

// other · overdriven guitar · "Gtr Solo"
const overdriven_guitar = note("<~@4 A B C D@2 ~@39 E@3 F G ~@57>".pickRestart({
  A: "~@5 c#4 d4 d#4", B: "e4 d4", C: "c#4 d4 e4 a3@2 c#4 d4 d#4", D: "[e4@8 d4@6 a3@13 ~@5, ~@14 b3 ~@17]/2",
  E: "[~@10 a4@2 f#4@2 e4@10 ~@2 c#4@2 b3@2 a3@8 ~@4 c#4@2 b3@2 a3 ~]/3", F: "b3@2 e4 ~ e4 ~ e4 ~ e4@4 c#4@2 b3 ~",
  G: "a4@4 f#4@2 a4@9 ~",
})).s("gm_overdriven_guitar").gain(0.63).pan(0.4)

// chords · piano · "Harmonies"
const piano_2 = note(`<
  ~@35 A@2 ~@2 B@2 C@2 D@2 E F G@2 ~@14 A@2 ~@2 B@2 C@2 D@2 E F G@2 C@2 D@2 E F G@2 ~@2 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@2
  A@2 ~@2 B@2 ~
>`.pickRestart({
  A: "[[g#4,b4,e5]@3 ~ [g#4,b4,e5]@3 ~ [f#4,a4,a#4,d5] ~ [f#4,a4,d5]@3 ~ [e4,a4,c#5]@13 ~@5]/2", // E D A
  B: "[[g#4,b4,e5]@3 ~ [g#4,b4,e5]@3 ~ [f#4,a4,d5] ~ [f#4,a4,d5]@3 ~ [e4,a4,c#5]@11 ~@7]/2", // E D A
  C: "[~@4 [a4,c#5,e5]@6 [f#4,b4,d5]@2 [a4,c#5] ~ [f#4,b4,d5]@4 [e4,a4,c#5]@7 ~@5 [d4,f#4,a4]@2, ~@6 e4 ~@9]/2", // A Bm A Bm A D
  D: "[~@2 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~ [d4,f#4,b4]@3 ~ [e4,a4]@14 ~@4, ~@14 c#5@11 ~@7]/2", // D Bm A5
  E: "~@4 [a4,c#5,e5]@6 [b4,d5] ~ [a4,c#5] ~ [f#4,b4,d5]@2, ~@5 f#4 e4 ~", // A Bm A Bm
  F: "~ [e4,a4]@4 ~@2 [d4,f#4,a4], ~ c#5@3 ~@4", // A5 D
  G: "[~@2 [d4,f#4,a4]@3 ~ [f#4,a4,c#5]@3 ~ [d4,f#4,b4]@3 ~ [c#4,e4,a4]@14 ~@4]/2", // D F#m Bm A
})).s("gm_piano").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B C D C E C D C E A B A B A B A B F@3 G F@3 H C D C E C D C E C D C E A B A
  B A B A B I J@2 K J@3 L I J@2 K J@3 L A B A B A B A B A B A B A B A B A B A B A B M ~ N
>`.pickRestart({
  A: "x!2", B: "x!2 ~@2 x ~@3", C: "x ~@3 x!2 ~@2", D: "x ~@2 x ~ x ~@2", E: "x ~@2 x ~ x ~ x", F: "~ x ~ x",
  G: "~ x!2 ~", H: "~@2 x ~ x ~@2 x", I: "~@2 x ~@2 x!2 ~", J: "~ x!2 ~@2 x!2 ~", K: "~ x!2 ~ x ~@3",
  L: "~ x!2 ~ x ~@2 x", M: "x ~@3 x ~@2 x", N: "x",
})).gain(0.71)

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~ x]!20 ~@85>").gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@17 A@8 ~@8 A@8 ~@20 A@8 ~@16 A@23 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.71)

// drums · snare
const snare = s("sd").struct(`<
  ~@24 A B@15 C D ~@2 E D ~@3 B@19 C F B@2 G F B@2 C F B@2 G F B@2 C B@7 C B@7 C B@6 H ~@2
>`.pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@4 x ~@3 x!8", D: "x", E: "~@12 x!4", F: "x!2 ~ x", G: "~@4 x ~@7 x!4",
  H: "~@4 x ~@5 x!3 ~@3",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@109 x>").gain(0.71)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@108 [~@15 x] ~>").gain(0.71)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@3 A ~@3 A ~ A ~ A ~@3 B ~ A ~ A ~@3 B ~ A ~ A ~@3 B ~@9 A ~ A ~ A ~ A ~@3 B ~ A ~ A ~@3 B ~@17 A ~ A ~@3 B ~ A
  ~ A ~@3 B ~ A ~ A ~@5
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x",
})).gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<~@108 [~@15 x] ~>").gain(0.71)

// drums · crash
const crash = s("cr").struct(`<
  ~@25 A ~@7 A ~@3 A ~@3 B ~@2 C B ~@2 C A ~@3 A ~@7 A ~@3 A ~@3 B ~@2 C B ~@2 C B ~@2 C B ~@2 C A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~ D ~@2
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~ x!2 ~", D: "~@7 x",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct("<~@41 [x!16]!8 ~@20 [x!16]!16 ~@25>").gain(0.57)

// drums · cowbell
const cowbell = s("cb").struct("<~@17 [x!4]!24 ~@8 [x!4]!20 ~@16 [x!4]!23 ~@2>").gain(0.71)

stack(
  piano, bass, rock_organ, acoustic_guitar_steel, acoustic_guitar_steel_2, brass_section, string_ensemble_1,
  overdriven_guitar, piano_2, kick, rim, clap, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine,
  cowbell
)

More by Three Dog Night