Strudelify

Around The World

East 17

KeyC majorTempo87 bpm
0:00/0:00
// Around The World — East 17
// 87 bpm, 4/4, key C 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: Full arrangement: all 97 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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 2
const bass = note(`<
  ~@4 A B C B C B C B C D E F A B C B C B C B C G H@2 I B C B C B C B C D E F A B C B C B C B C G H@2 I B C B C B C B C
  D E F A J K J L B C B C B C B C B C B C B C B C B C B C B C B C B C B M
>`.pickRestart({
  A: "c1", B: "c2@3 ~@3 c2@3 ~@2 g1 c2 ~ g1 c2@2 ~ g1@2 ~ g1@2 ~", C: "f1@4 ~@2 f1@4 ~ c1 f1 ~ c1 f1@2 ~ g1@3 g1@2 ~",
  D: "d#1@23 ~", E: "f1", F: "a#1", G: "a1@4 ~@2 a1@4 ~ e1 a1 ~ e1 a1@3 b1@3 c2@3",
  H: "a1@4 ~@2 a1@4 ~ e1 a1@2 e1 a1@3 b1@3 c2@3", I: "g1@10 ~ d1 g1@2 d1 g1@3 a1@3 b1@3",
  J: "c2@3 ~@3 c2@2 ~@3 c2 d#2 ~ c2 d#2@2 ~ f2@3 g2@3", K: "c2@3 ~@3 c2@2 ~@3 c2 d#2@2 c2 d#2@2 ~ f2@3 g2@3",
  L: "g1@4 ~@2 g1@3 ~@2 g1 b1 ~ g1 b1@2 ~ c2@3 d2@3", M: "f1@4 ~@2 f1@4 ~ c1 f1 ~ c1 ~@9",
})).s("gm_synth_bass_2").gain(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@4 ~ B@4 C@4 D E F G ~@12 B@4 H@4 I J@2 K ~@12 B@4 H@4 I J@2 K ~@3 L M@2 N O P@2 Q R M@2 N O P@2 Q R M@2 N O P@2 Q R
  M@2 N O
>`.pickRestart({
  A: "[[c4,e4] b3 a#3 a3 g#3 [g3,e4] [f3,g#3,d4] [e3,g3,c4], g4@3 f4@2 ~@3, ~ d4@2 c4@4 ~]/4", // C Ddim C
  B: "[[g4,e5] [a4,f5] [g4,e5] [a4,f5], c5@95 ~]/4", C: "[[g4,e5] [a4,f5] e5 f5, c5]/4", D: "[d4,f4]", E: "[a3,c4]",
  F: "d#4 [a#3,d4]", G: "[g3,c4]", H: "[[g4,e5] [a4,f5] [g4,e5] [a4,f5], c5]/4", I: "[a#3,d4,f4]",
  J: "[[a3,c4]@2 [g#3,d#4] [a#3,d4], f3]/2", K: "[e3,g3,c4]",
  L: "[d3,d4] [f3,f4] [a3,a4] [b3,b4] [d4,d5] [e4,e5] [f4,f5] [a4,a5], g2@23 ~", // D F A B D E F A
  M: "[[g3,e4]@22 ~@6 e5@2 ~ e5 ~ c5@9 d5@6, c4@23 ~, g5@27 f5@2 ~ f5@2 ~@16, ~ f4, ~@12 a3@11 ~]/2", // C
  N: "e5@3 g5, [c4,e4], g3@11 ~", O: "[f4,a5], [a3,c4]@11 ~",
  P: "[g5@15 ~ e5 ~@2 e5@2 ~@15 c5@6 d5@6, [g3,c4,e4]@11 ~ [a3,c4,f4]@11 ~, ~@15 f5@2 ~ f5@2 ~ c5@15 ~@12]/2", // C F
  Q: "e5@3 g5, [g3,c4,e4]@11 ~", R: "a5@5 c5@2 d5, [a3,c4,f4]@11 ~",
})).s("gm_string_ensemble_1").gain(0.07).pan(1)

// chords · piano
const piano = note(`<
  A B C D E@2 F G F G F G H I J K L M N O P Q P R S T U V W X F G F G F G H I J K L M N O P Q P R S T U V W X F G F G F
  G H I J K L Y Z@2 AA X F G F G F G AB X F G F G F G AB X F G F G F G AB X F G AC
>`.pickRestart({
  A: "~@3 c4 ~@3 b3, [e4,g4]!2 [d4,g4]!2, ~ c4@2 ~@2 b3@2 ~", // Em G5
  B: "~@3 a#3 ~@3 a3, [d4,g4]!2 [c4,f4]!2, ~ a#3@2 ~@2 a3@2 ~", // G5 F5
  C: "~@3 g#3 ~@3 g3, [c4,f4]!2 [c4,e4]!2, ~ g#3@2 ~@2 g3@2 ~", // F5 C
  D: "~@3 f3 ~@3 e3, [g#3,c4,d4]!2 [g3,c4]!2, ~ f3@2 ~@2 e3@2 ~", // Dm7b5 C5
  E: "[c2@8 [e4,g4] c4 [e4,g4] c4 [e4,g4] c4 [e4,g4] c4, c1@47 ~, f1 ~@23 c3@24, ~@7 b4]/2", // Em
  F: "[f4,a4] c4 [f4,a4] c4 [f4,a4] c4 [f4,a4] c4, f3", G: "[e4,g4] c4 [e4,g4] c4 [e4,g4] c4 [e4,g4,b4] c4, c3",
  H: "[f4,a4]@3 c4@3 [f4,a4]@3 c4@3 [f4,a4]@3 c4@3 [f4,a4]@3 c4 ~@2, f3@23 ~", I: "d4@11 ~ a#3@11 ~, [f1,f2]@23 ~",
  J: "[f2,a3]@11 ~, f1", K: "[a#1,a#2,c4] [a#1,a#2,a#3]", L: "[c2,g3]", M: "[g3,c4,d4,e4]@17 ~ [g3,c4,d4,e4]@5 ~",
  N: "[f3,a3,c4,e4]@17 ~ [f3,a3,c4,e4]@4 ~@2", O: "e4@17 ~ e4@4 ~@2, [g3,b3,c4]@23 ~",
  P: "[f3,a3,c4,e4]@17 ~ [g3,b3,d4]@5 ~", Q: "[c4,e4]@17 ~ [c4,e4]@5 ~, g3, b3@11 ~",
  R: "[g3,b3,c4,e4]@17 ~ [g3,b3,c4,e4]@5 ~", S: "[f3,a3,c4,e4]@6 [f3,a3,c4,e4] ~", T: "[a3,c4,e4] ~",
  U: "[a3,c4,f#4] ~", V: "[a3,c4,d4,f4]@13 ~@11", W: "[g3,b3,d4]@7 ~",
  X: "[e4,g4] c4 [e4,g4] c4 [e4,g4] c4 [e4,g4] c4, c3, ~@3 b4", Y: "c1@23 ~", Z: "[c1@47 ~]/2",
  AA: "~@13 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~, g1",
  AB: "[f4,a4]@3 c4@3 [f4,a4]@3 c4@3 [f4,a4]@3 c4@3 [f4,a4]@3 c4@2 ~, f3@23 ~", // F
  AC: "[f4,a4] c4 [f4,a4] c4 [f4,a4] ~@3, f3", // F
})).s("gm_piano").gain(0.18).pan(0.9)

// other · piano
const piano_2 = note(`<
  ~@8 A B ~@2 A C D E F ~@11 A G ~@2 A B ~@2 A C D E F ~@15 A B ~@2 A H I J K ~@7 L M ~@2 N M ~@2 L M ~@2 N M ~@2 L M
  ~@2 N M ~@3
>`.pickRestart({
  A: "~@15 a5 b5 ~ c6@3 d6@3", B: "g5@5 ~@3", C: "f6 d6", D: "c6@5 ~", E: "d#6@6 d6@5 ~", F: "c6@3 ~", G: "g5@7 ~@5",
  H: "[f5,f6] [d5,d6]", I: "~@11 g3@4 a3@3 c4@3 d4@2 ~, c6@5 ~, c5@3 ~", J: "[d#5,d#6] d5, ~@6 d6@5 ~",
  K: "c5@7 ~, c6@3 ~", L: "~@16 b5 ~ c6@3 d6@3, ~@15 a5@2 ~@7", M: "g5@5 ~@7", N: "~@15 a5 b5 ~ c6@3 d6@2 ~",
})).s("gm_piano").gain(0.26)

// other · glockenspiel
const glockenspiel = note("<A B C D ~@9 E F G F ~@20 E F G F ~@20 E F G F ~@32>".pickRestart({
  A: "~@6 c7 ~@11 b6 ~@5", B: "~@6 a#6 ~@11 a6 ~@5", C: "~@6 g#6 ~@11 g6 ~@5", D: "~@6 f6 ~@11 e6 ~@5",
  E: "[f5,f6] ~@11 [d5,d6] ~@11", F: "[c5,c6] ~@23", G: "[d#5,d#6] ~@11 [d5,d6] ~@11",
})).s("gm_glockenspiel").gain(0.11).pan(0.2)

// other · piccolo
const piccolo = note("<~@14 A ~@23 A ~@23 A ~@5 B C ~@27>".pickRestart({
  A: "~ e5 ~@2 d5@2 ~ e5 ~@2 d5@2 ~ e5 ~ f5@2 ~@7, ~@3 f5@2 ~ c5@2 ~ f5@2 ~@13", B: "~@18 f5@5 ~",
  C: "f5@5 ~ f5@5 ~ f5@5 ~@7",
})).s("gm_piccolo").gain(0.14)

// other · piccolo · soft notes
const piccolo_soft = note(`<
  ~@14
  [~@12 c5 ~@3 d5@2 c5@2 ~@4]
  ~@23
  [~@12 c5 ~@3 d5@2 c5@2 ~@4]
  ~@23
  [~@12 c5 ~@3 d5@2 c5@2 ~@4]
  ~@34
>`).s("gm_piccolo").gain(0.09)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@72 A ~@2 B C ~@3 A ~@2 B C ~@3 A ~@2 B C ~@4>".pickRestart({
  A: "~@9 g3!2 ~ g#3 g3 ~ g3@2 ~@4 g3 ~@2", B: "~@3 e3 c3@2 ~ c3 ~ d3 g2@2 ~ g2@2 ~@9",
  C: "~@9 g3!2 ~ g#3 ~@2 g3@2 ~@4 g3@2 ~",
})).s("gm_electric_guitar_jazz").gain(0.35)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@18
  [e4 ~@2 e4 ~@2 e4 ~ e4!2 ~ e4 ~@2 e4 ~@2 e4!2 ~ e4!2 ~ e4]!3
  ~
  [g4 ~@2 g4 ~@2 g4 ~ g4!2 ~ g4 ~@2 g4 ~@2 g4!2 ~ g4!2 ~ g4]!3
  ~@72
>`).s("gm_synth_brass_1").gain(0.12)

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

// drums · clap
const clap = s("cp").struct("<~@61 [~ x ~ x]!4 ~@4 [~ x ~ x]!27 [~ x ~@2]>").gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A@3 B A B A B A B A B A B A B A B A B A B A B A@3 B A B A B A B A B ~@4
  C@3 A@2 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 D
>`.pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@11 x ~@4 x", C: "~@6 x ~@2 x!2 ~@7 x ~@5", D: "~ x ~@2",
})).gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct("<~@6 A ~ A@5 ~@7 A ~@3 A ~@3 A@9 ~@5 A ~ A ~ A ~ A ~@3 A@44 ~>".pickRestart({
  A: "~@7 x",
})).gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A@8 ~@16 A@8 ~@4 A@8 ~@4 A@12 ~@4 A@27 B>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@9",
})).gain(0.3)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@5 A@8 ~@16 A@8 ~@4 A@8 ~@4 A@12 ~@4 A@27 B>".pickRestart({
  A: "x!8", B: "x!5 ~@3",
})).gain(0.15)

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

// drums · congas
const congas = s("conga:33").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A@3 ~@9 A@5 ~ A ~ A ~ A ~ A@3 ~@9 A@5 ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(1.11)

// drums · mt
const mt = s("mt").struct("<~@4 A ~@7 B ~@11 B ~@3 A ~@7 B ~@11 B ~@3 A ~@7 B ~@3 C ~@3 C ~@28>".pickRestart({
  A: "~@11 x!2 ~ x ~ x ~ x ~@5", B: "~@17 x!2 ~ x!2 ~@2", C: "~@11 x!2 ~ x ~ x ~ x ~@2 x ~@2",
})).gain(0.35)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@29
  [~@3 x ~@4 x ~@15]!9
  ~
  [~@3 x ~@4 x ~@15]
  ~@13
  [~@3 x ~@4 x ~@15]!8
  ~@8
  [~@3 x ~@4 x ~@15]!28
>`).gain(2.22)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@5
  [x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2]!56
  [x!8]!8
  [x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2]!27
  [x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@9]
>`).gain(1.51)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@5
  [~ x ~ x ~@4]!20
  [~@3 x ~ x!2 ~@2 x ~@14]!4
  [~ x ~ x ~@4]!20
  [~@3 x ~ x!2 ~@2 x ~@14]!4
// … 16 more lines

More by East 17