Strudelify

Amarok

Mike Oldfield

KeyF♯ minorTempo133 bpm
0:00/0:00
// Amarok — Mike Oldfield
// 133 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 176 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 25.
setcpm(133/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("<~ A@27 ~@32 A B C D A B C D A B C D A B C D ~@100>".pickRestart({
  A: "f#1 ~@3 f#1 ~@3", B: "f#1 ~@5 f#1 ~@5", C: "f#1 ~@3 f#1 ~ a1 ~", D: "f#1@3 ~@9 f#2@4 ~@8",
})).s("gm_synth_bass_2").gain(0.36).pan(0.7)

// other · electric guitar muted
const electric_guitar_muted = note("<~@45 [a#2@2 a#2!4 a#2@2 a#2!4]!15 ~@116>")
  .s("gm_electric_guitar_muted").gain(0.36).pan(0.6)

// other · drawbar organ
const drawbar_organ = note(`<
  ~@116 A@2 B C D E F@2 G@2 H I@2 J K L@2 H M@2 N@8 O P ~@2 Q@2 R S T U V@2 W X V@2 W X V@2 W X V@2 W X V@2 Y@2 ~@2
>`.pickRestart({
  A: "[c#4@15 d#4@5 c#4@2 d#4 e4]/2", B: "f#4@10 d#4 f#4", C: "g#4 b4", D: "c#4@2 b4 ~ c#4@8 c#4@8 d#4@2 e4@2",
  E: "f#4@11 ~ a4@12", F: "[b4, d#4 ~]/2", G: "[~ d#4, g4]/2", H: "c#2", I: "[f#2@35 ~ d#2@11 ~]/2",
  J: "f#2@6 f2@6 d#2@6 c#2@5 ~", K: "c#2@23 ~", L: "[f#2@35 ~ b1@11 ~]/2", M: "[c#2@12 d#2@11 f#2@22 ~@3]/2",
  N: "[f#2@95 ~]/4", O: "c#2@6 d#2@5 ~", P: "f#2@7 ~", Q: "[f#2@15 ~]/2", R: "b1@10 ~@2 d2@9 ~@3", S: "g1", T: "a#1",
  U: "c2", V: "d2/2", W: "g2", X: "a2@5 ~", Y: "f2/2",
})).s("gm_drawbar_organ").gain(0.46).pan(0.6)

// other · electric guitar clean · "Mike"
const electric_guitar_clean = note("<~@136 A B ~@2 A C ~@2 D E ~@2 F@2 ~@26>".pickRestart({
  A: "c#4@2 ~ g#4@2 ~ f4@2 ~@4", B: "f#4@4 ~@2 d#4@3 f4@3 f#4@2 ~@10", C: "f#4@3 ~@3 d#4@2 ~ f4 ~@2 f#4@2 ~@10",
  D: "c#5@10 ~@2 d#5@9 ~@3", E: "f#5@7 ~@2 f5@2 ~@2 d#5@4 ~@2 c#5@4 ~",
  F: "[~@22 f#5@7 ~ f#5@4 ~@2 f5@2 d#5@2 c#5@2 d#5@5 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.51)

// other · lead 1 square · "Mike"
const lead_1_square = note("<~@172 A@4>".pickRestart({
  A: "[f6@6 f#6 g6@19 ~@6]/4",
})).s("gm_lead_1_square").gain(0.51)

// other · piano
const piano = note("<~@67 A B C D E B C D F ~@100>".pickRestart({
  A: "~@10 c#5 e5", B: "f#5@8 c#6@3 a5", C: "~@6 e5@3 ~ a5 b5, g#5@5 ~", D: "e5@4 ~@6 f#5 g#5", E: "f#5@3 c#5@7 c#5 e5",
  F: "f#5 ~ [e4,g#4,b4]@2, ~@3 c#5@7 ~@2", // E
})).s("gm_piano").gain(0.46).pan(0.6)

// other · electric guitar clean
const electric_guitar_clean_2 = note("<~@39 [~@12 f#4@5 ~ f4@6] [d4@21 e4 f#4 ~] [e4 b3] [c#4@3 ~] ~@133>")
  .s("gm_electric_guitar_clean").gain(0.46).pan(0.6)

// chords · orchestra hit
const orchestra_hit = note("<~@85 A ~ B C D E ~@2 F ~ G H I J ~@2 K ~ L M N O ~@69>".pickRestart({
  A: "~@12 [g4,a4,g5,a5]!2 ~ [g4,a4,g5,a5]@3 [g4,a4,g5,a5]@3 ~@3", // Gsus2
  B: "~ [g4,a4,g5,a5] ~ [g4,a4,g5,a5] [g4,a4,g5,a5]@3 ~@17", C: "~@9 [g4,a4,g5,a5] ~ [g4,a4,g5,a5]",
  D: "~ [g4,a4,g5,a5]@5 ~@18", E: "~ [g4,a4]@2 ~@3 [g4,a4,g5,a5]@3 ~@15, ~ [g5,a5] ~@22",
  F: "~@12 [a4,b4,a5,b5]!2 ~ [a4,b4,a5,b5]@3 [a4,b4,a5,b5]@3 ~@3", // Asus2
  G: "~ [a4,b4,a5,b5] ~ [a4,b4,a5,b5] [a4,b4,a5,b5]@3 ~@17", H: "~@9 [a4,b4,a5,b5] ~ [a4,b4,a5,b5]",
  I: "~ [a4,b4,a5,b5]@5 ~@18", J: "~ [a4,b4]@2 ~@3 [a4,b4,a5,b5]@3 ~@15, ~ [a5,b5] ~@22",
  K: "~@12 [b4,c#5,b5,c#6]!2 ~ [b4,c#5,b5,c#6]@3 [b4,c#5,b5,c#6]@3 ~@3", // Bsus2
  L: "~ [b4,c#5,b5,c#6] ~ [b4,c#5,b5,c#6] [b4,c#5,b5,c#6]@3 ~@17", M: "~@9 [b4,c#5,b5,c#6] ~ [b4,c#5,b5,c#6]",
  N: "~ [b4,c#5,b5,c#6]@5 ~@18", O: "~ [b4,c#5]@2 ~@3 [b4,c#5,b5,c#6]@3 ~@15, ~ [b5,c#6] ~@22",
})).s("gm_orchestra_hit").gain(0.31).pan(0.6)

// other · pad new age
const pad_new_age = note(`<
  ~@134
  [c#5@3 ~@6 c#5 ~ d#5@4 ~@6 d#5 ~@2]
  [f#5@3 ~@3 f5@4 ~@2 d#5@3 ~@3 c#5@3 ~@3]
  ~@8
  [c#4@9 ~@3 d#4@7 ~@5]
  [~ f#4@6 ~@2 f4@2 ~ d#4 ~@5 c#4@4 ~@2]
  ~@30
>`).s("gm_pad_new_age").gain(0.41).pan(0.6)

// chords · music box
const music_box = note("<~@12 A B C D A B C D A B C D A B C D ~@148>".pickRestart({
  A: "[a#4,d#5,a#5] ~@2 [d#5,f#5,a#5,c#6] ~@5 [d#5,f#5,a#5,c#6] ~@2, f#5 ~@23", // D#5 D#m7
  B: "[c#5,f5,g#5,c#6] ~@2 [c#5,f5,g#5,c#6] ~@8", C: "~@6 [c#5,f5,g#5,c#6] ~",
  D: "[b4,d#5,f#5,b5]@2 ~@4 [b4,d#5,f#5] ~@5 [b4,d#5,f#5,b5]@6 ~@6, ~@3 b5 ~@8", // B
})).s("gm_music_box").gain(0.2).pan(0.6)

// other · pad new age
const pad_new_age_2 = note("<~@134 [~ c#5@3 ~@6 c#5 ~@2 d#5@4 ~@6 d#5] [f#5@3 ~@3 f5@4 ~@3 d#5@3 ~@3 c#5@3 ~@2] ~@40>")
  .s("gm_pad_new_age").gain(0.41)

// bass · electric bass pick
const bass_2 = note("<~@146 [~@22 f2 ~] [f#2@2 ~@2 f#2@2 ~@2 f2 ~ d#2 ~ c#2 ~@3 d#2 ~@3 f2 ~ f#2 ~] [d3 ~@23] ~@27>")
  .s("gm_electric_bass_pick").gain(0.51)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@154 A@5 ~@13 B C ~@2>".pickRestart({
  A: "[~ [a2,d3,a3]@3 ~ d4@2 d4@2 d4@2 d4@2 d4@4 d4 ~@5 a2@2 [a2,d3,a3]@3 ~ d4@2 d4@2 d4@2 d4@2 d4@4 d4 ~@5 a2@2 [a#2,d3,a#3]@3 ~ [a#3,g4]@2 [a#3,g4]@2 [a#3,g4]@2 [a#3,g4]@2 [a#3,g4]@4 [a#3,g4]@2 g4@2 g4 ~ a#2@2 [e3,a3,c4,e4]@4 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [c4,e4]@4 [c4,e4]@2 [c4,e4]@2 [c4,e4]@2 [e3,c4,e4]@2 ~@23]/5", // D5 A# D# Am C
  B: "[d2,a2,d3,a3,d4]@3 ~ [d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]@4 [d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]@2 ~@2 [d2,a2,d3,a3,d4]@2, ~@10 [d2,a2,d3,a3,d4] ~, ~@21 f4@2 ~", // D5
  C: "[d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]!4 [d2,a2,d3,a3,d4]@2 [d2,a2,d3,a3,d4]!4", // D5
})).s("gm_acoustic_guitar_steel").gain(0.41).pan(0.9)

// bass · electric bass pick
const bass_3 = note("<~@28 A B C D A B C D ~@140>".pickRestart({
  A: "a#1@4 b1@3 ~@9 f#1@2 b1@2 c#2@2 d#2 ~", B: "f2@2 a#1@2 ~@4 f1 a#1 b1 c#2",
  C: "f1@4 f#1@4 ~@8 f#1@2 a#1@2 b1 ~ c#2@2", D: "d#2@3 ~ c#2@4 ~@2 b1@4 a#1@2 f#1@2 f1@2 f#1@2 a#1@2",
})).s("gm_electric_bass_pick").gain(0.41)

// bass · bagpipe
const bass_4 = note("<~@45 A B C@2 ~@4 D@4 ~@119>".pickRestart({
  A: "~ e1@2 ~", B: "~@3 e1@2 ~", C: "[~@7 d#1@11 ~@6]/2", D: "[e1@14 ~ e1@11 ~@4 d#1@18]/4",
})).s("gm_electric_bass_finger").gain(0.51).pan(0.6)

// other · overdriven guitar
const overdriven_guitar = note("<~@115 A@3 ~@58>".pickRestart({
  A: "[~@21 f#3@29 ~@22]/3",
})).s("gm_overdriven_guitar").gain(0.51)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note("<~@136 A@14 B C D E F@2 G H F@2 G H F@2 G H F@2 G H F I J K L ~>".pickRestart({
  A: "[f#2,c#3,f#3,c#4,f#4,a#4]@2 [f#2,c#3,f#3,c#4,f#4,a#4]!4 [f#2,c#3,f#3,c#4,f#4,a#4]@2 [f#2,c#3,f#3,c#4,f#4,a#4]!4", // F#
  B: "[f#2,b2,f#3,b3,d#4]@2 [f#2,b2,f#3,b3,d#4]!4 [d2,a2,d3,a3,d4,f#4]@2 [d2,a2,d3,a3,d4,f#4]!4", // B D
  C: "[g2,d3,g3,b3,d4,g4,b4]@2 [g2,d3,g3,b3,d4,g4,b4]!4 [g2,d3,g3,b3,d4,g4,b4]@2 [g2,d3,g3,b3,d4,g4,b4]!4", // G
  D: "[a#2,f3,a#3,c4,f4]@2 [a#2,f3,a#3,c4,f4]!4 [a#2,f3,a#3,c4,f4]@2 [a#2,f3,a#3,c4,f4]!4", // A#sus2
  E: "[f3,d4,f4,a4,d5]@2 [f3,d4,f4,a4,d5] ~ [f3,d4,d5] [f3,d4,f4,a4,d5] [f3,d4,f4,a4,d5]@2 [f3,d4,f4,a4,d5] ~ [f3,d4,d5] [f3,d4,f4,a4,d5], ~@3 [f3,d4,f4,a4,d5] ~@5 [f3,d4,f4,a4,d5] ~@2, ~@7 [f4,a4]@2 ~@10 [f4,a4]@2 ~@3", // Dm F
  F: "[d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]!4 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]!4", // Dm
  G: "[g2,a#2,d3,g3,a#3,g4]@2 [g2,a#2,d3,g3,a#3,g4]!4 [g2,a#2,d3,g3,a#3,g4]@2 [g2,a#2,d3,g3,a#3,g4]!4", // Gm
  H: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!4 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!4", // Am
  I: "[d2,a2,d3,a3,d4,f4]@4 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]@4 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4]@2 [d2,a2,d3,a3,d4,f4] ~", // Dm
  J: "[f2,c3,f3,c4,f4,g#4]@3 ~ [f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]@4 [f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]@2 ~@2 [f2,c3,f3,c4,f4]@2, ~@10 [f2,c3,f3,c4,f4,g#4] ~, ~@21 g#4@2 ~", // Fm F5 Fm
  K: "[f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]!4 [f2,c3,f3,c4,f4,g#4]@2 [f2,c3,f3,c4,f4,g#4]!4", // Fm
  L: "[f2,c3,f3,c4,f4,g#4] ~@5", // Fm
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.1)

// other · synth strings 2 · "Rene."
const synth_strings_2 = note(`<
  ~@116 A@2 B C D E F@2 ~@2 G H@2 I@2 J@2 K ~@20 L M N O L M N P L M N O Q R S O T U V W ~@2
>`.pickRestart({
  A: "[[c#4,g#4]@11 ~ [e4,g#4]@11 ~, [c#3,g#3]]/2", B: "[f#3,b3,d#4]", C: "[g#3,b3,e4]", D: "[e3,a3,e4]",
  E: "[f#3,a3,d4]", F: "[a3,c4,d#4]/2", G: "c#5", H: "[f#5@18 d#5@5 ~]/2",
  I: "[f#5@4 ~@2 f5@4 ~@2 d#5@4 ~@2 c#5@29 ~]/2", J: "[f#5@36 d#5@11 ~]/2", K: "f#5", L: "f3 a#3", M: "c4 d4",
  N: "g3 a#3", O: "c4@7 ~", P: "f3@7 ~", Q: "d3 f3", R: "a3 d4", S: "a#3", T: "a#3 c4", U: "d4 e4", V: "f4",
  W: "f4@7 ~",
})).s("gm_synth_strings_2").gain(0.41).pan(0.8)

// chords · synth strings 1
const synth_strings_1 = note("<~@56 A@2 ~@118>".pickRestart({
  A: "[~ [d#5,f5]@4 [c5,f5]@3]/2", // D#sus2 F5
})).s("gm_synth_strings_1").gain(0.1)

// other · taiko drum · F#
const taiko_drum = note("<~@76 [[f#4,f#5] ~@7] ~@99>").s("gm_taiko_drum").gain(0.51)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@137 A B C ~ A D ~@2 E ~@2 F ~@2 G H I J K L M N K O P Q R O S T R U V W X Y@3 ~
>`.pickRestart({
  A: "~@2 c#5 ~", B: "c#4@3 ~@3 g#3@2 ~ f#3@5 ~@4 f#4@4 ~ c#5", C: "f#4 ~@3", D: "c#3@2 ~ c#3@3 f#3@3 c#4@3 f#3@6 ~@6",
  E: "f#5@8 ~ f5@3 d#5@4 ~@2 c#5@5 ~", F: "~@6 d#4@3 f4@4 ~@2 d#4@3 f#4@4 ~@2", G: "a4@2 ~ b4@6 ~@15",
  H: "b4@2 ~ c5@6 ~@15", I: "c5@2 ~ d5@7 ~@14", J: "d5@5 ~ f5@6 ~@4 d6@6 a#5 ~", K: "~ c6 ~@2 d6@10 ~@4 d6@6",
  L: "g5@5 ~ a#5@8 ~@4 a#5@4 ~@2", M: "f6@9 ~ e6@2 d6@12, ~@9 d6@2 ~@13", N: "d5@5 ~ f5@6 ~@4 c6@6 a#5 ~",
  O: "g5@5 ~ a#5@8 ~@4 g5@4 ~@2", P: "a#5@7 a#5 ~ g5 a#5 ~ a#5@10 ~@2", Q: "d5@6 f5@6 ~@4 c6@6 a#5 ~",
  R: "~ c6 ~@2 d6@13 ~ d6@6", S: "g6@7 g6 ~ e6 g6 ~ d#6@12", T: "d5@6 f5@6 a5@4 c6@6 a#5 ~",
  U: "a#5@5 ~ g5@9 ~@3 c6@2 d6@2 c6@2", V: "a#5@5 ~ g5@10 ~@2 g5@6", W: "d#6@23 ~", X: "d6@2 d6 e6", Y: "f6/3",
})).s("gm_distortion_guitar").gain(0.51)

// drums · kick
const kick = s("bd").struct("<[x!2]!76 ~@16 [x!2]!82 x ~>").gain(0.46)

// drums · low tom
const low_tom = s("lt").struct(`<
  A@4 B C B D E B@4 C B D E B@4 C B D E B@4 C B D E B@4 C B D E B@4 F B D E B@4 F B D E B@4 F B D E B@4 F B D E B@6 G E
  B@6 G E B@6 D E B@6 D E B@6 D E B@6 D E B@6 D E B@6 D E B@6 D E B@6 D E B@6 D E B@6 D E B@5 H ~
>`.pickRestart({
  A: "~@3 x ~ x ~@3 x ~ x", B: "x ~ x!5 ~ x!4", C: "x ~@3 x ~ x ~ x ~ x ~@2 x ~@3 x!2 ~ x ~ x ~",
  D: "x ~@3 x ~ x ~ x ~ x ~ x ~@3 x ~ x!2 ~ x!3", E: "~ x ~@2 x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x ~ x ~",
  F: "x ~@3 x ~ x ~ x ~ x ~ x ~@4 x!2 ~ x ~ x ~", G: "x ~@3 x ~ x ~ x ~ x ~ x ~@3 x ~@2 x ~ x ~ x", H: "x",
})).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 C@16 ~@16 C@82 D ~
>`.pickRestart({
  A: "x!4 ~ x", B: "x!2 ~ x!2 ~", C: "x!6", D: "x",
})).gain(0.31)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct(`<
  A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~@116
>`.pickRestart({
  A: "~@2 x", B: "~@2 x ~@2 x",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@60 x ~@93 x ~@7 [x!2 ~@2] ~@13>").gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@60 [x!2 ~@2] ~@115>").gain(0.51)

// drums · bongos
const bongos = s("bongo:18").struct("<[x!4]!76 ~@16 [x!4]!82 ~@2>").gain(0.81)

// drums · congas
// … 11 more lines

More by Mike Oldfield