Strudelify

Tora! Tora! Tora!

Depeche Mode

KeyD majorTempo118 bpm
0:00/0:00
// Tora! Tora! Tora! — Depeche Mode
// 118 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/16 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 2 "Bass 1a" named as a bass, played on electric bass finger (its pad poly patch is not one)
// note: Full arrangement: all 137 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · pad warm · "Intro"
const pad_warm = note(`<
  ~@4 A@8 B@2 ~@32 C D E@2 C D E@2 ~@24 C D E@2 C D E@2 ~@9 F@6 G ~ F@2 G ~ F@2 G ~ F@2 G ~ F@2 G ~ F@2 G ~ F@2 G ~ F@2
  ~@8
>`.pickRestart({
  A: "[~@14 [d#4,a4,c#5]@7 ~@11]/2", B: "[~@14 [d#4,a4,c#5]@9 ~@9]/2", C: "d4", D: "f4@3 d5", E: "[d#5@7 d5@9]/2",
  F: "[~@5 [c#5,f#5]@4 ~@7]/2", G: "~@5 [c#5,f#5]@3",
})).s("gm_pad_warm").gain(0.14).pan(0.8)

// chords · pad warm · "Intro" · soft notes
const pad_warm_soft = note("<A@4 ~@125 B ~ C@2 B ~ C@2>".pickRestart({
  A: "[~@14 [d#4,a4,c#5]@7 ~@11]/2", B: "~@5 [c#5,f#5]@3", C: "[~@5 [c#5,f#5]@4 ~@7]/2",
})).s("gm_pad_warm").gain(0.06).pan(0.8)

// bass · electric bass finger · "Bass 1a"
const bass = note("<~@14 A B A B A B A B A B A B A B A B ~@24 A B A B A B A B ~@24 A B A B A B A B ~@43>".pickRestart({
  A: "a2@9 ~ a2@2 d3@4", B: "a#2@9 ~ a#2@2 d3@4",
})).s("gm_electric_bass_finger").gain(0.12)

// bass · lead 8 bass lead · "Bass 1b"
const bass_2 = note(`<
  ~@14 A B A B A B A B A B A B A B A B ~@24 A B A B A B A B ~@24 A B A B A B A B ~@43
>`.pickRestart({
  A: "[a1,a2]@9 ~ [a1,a2]@2 [d2,d3]@4", B: "[a#1,a#2]@9 ~ [a#1,a#2]@2 [d2,d3]@4",
})).s("gm_lead_8_bass_lead").gain(0.1)

// other · lead 2 sawtooth · "Lead 1"
const lead_2_sawtooth = note(`<
  ~@22 A B A B A B A B C D E F C D E G H ~@15 A B A B A B A B C D E F C D E G H ~@15 A B A B A B A B C D E F C D E F C D
  E F C D E F C D E F C D E F C D E F C D E F C I ~@9
>`.pickRestart({
  A: "a4 a5 e5 g5 f#5@2 d5@2", B: "g#5 f5 d#5 d5@2 a#4@3", C: "f#4@14 e4 f#4", D: "e4@14 c#4 e4", E: "c#4@14 b3 c#4",
  F: "b3", G: "b3@7 b4", H: "f#4@11 ~@5", I: "e4@14 c#4 ~",
})).s("gm_lead_2_sawtooth").gain(0.12)

// other · lead 2 sawtooth · "Lead 1" · soft notes
const lead_2_sawtooth_soft = note("<~@37 A ~@31 A ~@57 B C D E F C D E F G>".pickRestart({
  A: "~@7 b5", B: "~@15 e4", C: "c#4@14 b3 c#4", D: "b3", E: "f#4@14 e4 f#4", F: "e4@14 c#4 e4", G: "c#4 ~@7",
})).s("gm_lead_2_sawtooth").gain(0.04)

// bass · acoustic bass · "Bass 2a"
const bass_3 = note(`<
  ~@30 A B A B A B A B ~@8 C D E F C D E F G H G H G H G H A B A B A B A B ~@8 C D E F C D E I ~@4 G H G H 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 ~@9
>`.pickRestart({
  A: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 a1@2 ~ a1 a1@2", B: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 c#1@2 ~ c#1 e1@2",
  C: "d1@2 ~@2 d1@2 d1@2 ~@2 d1@2 ~ d1 a1@2, ~@3 d2@2 ~@11", D: "a#1@2 ~ a#2 a#1@2 a#1@2 ~@2 a#1@2 ~ a#1 d2@2",
  E: "d#2@2 ~@2 d#2@2 d#2@2 ~@2 d#2@2 ~ d#2 d#2@2, ~@3 d#3@2 ~@11", F: "d2@2 ~ d3 d2@2 d2@2 ~@2 d2@2 ~ d2 d2@2",
  G: "a1@2 ~ a1@2 ~ a1@2 ~@2 a1@2 ~ a1 d2@2", H: "a#1@2 ~ a#1@2 ~ a#1@2 ~@2 a#1@2 ~ a#1 d2@2",
  I: "d2@2 ~@2 d2@2 d2@2 ~@2 d2@2 ~ d2 d2@2, ~@3 d3@2 ~@11",
})).s("gm_acoustic_bass").gain(0.2)

// bass · acoustic bass · "Bass 2a" · soft notes
const bass_soft = note("<~@128 A B A B A B A B C>".pickRestart({
  A: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 a1@2 ~ a1 a1@2", B: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 c#1@2 ~ c#1 e1@2", C: "f#1 ~@7",
})).s("gm_acoustic_bass").gain(0.06)

// bass · synth bass 1 · "Bass 2b"
const bass_4 = note(`<
  ~@30 A B A B A B A B ~@16 C D C D C D C D A B A B A B A B ~@20 C D C D 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 ~@9
>`.pickRestart({
  A: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 a1@2 ~ a1 a1@2", B: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 c#1@2 ~ c#1 e1@2",
  C: "a1@2 ~ a1@2 ~ a1@2 ~@2 a1@2 ~ a1 d2@2", D: "a#1@2 ~ a#1@2 ~ a#1@2 ~@2 a#1@2 ~ a#1 d2@2",
})).s("gm_synth_bass_1").gain(0.27)

// bass · synth bass 1 · "Bass 2b" · soft notes
const bass_soft_2 = note("<~@128 A B A B A B A B C>".pickRestart({
  A: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 a1@2 ~ a1 a1@2", B: "f#1@2 ~ f#1@2 ~ f#1@2 ~@2 c#1@2 ~ c#1 e1@2", C: "f#1 ~@7",
})).s("gm_synth_bass_1").gain(0.08)

// other · lead 8 bass lead · "Harmony 2"
const lead_8_bass_lead = note("<~@46 A B C D A B C D ~@24 A B C D A B C D ~@51>".pickRestart({
  A: "d3@2 d3@2 d3@2 d3@2 d3@2 d3@2 d3!2 a2@2", B: "a#2@2 a#2@2 a#2@2 a#2@2 a#2@2 a#2@2 a#2!2 d3@2",
  C: "d#3@2 d#3@2 d#3@2 d#3@2 d#3@2 d#3@2 d#3!2 d#3@2", D: "d3@2 d3@2 d3@2 d3@2 d3@2 d3@2 d3!2 d3@2",
})).s("gm_lead_8_bass_lead").gain(0.12)

// other · ocarina · "Harmony 3"
const ocarina = note("<~@46 A B C@2 A B C@2 ~@24 A B C@2 A B C@2 ~@51>".pickRestart({
  A: "d4", B: "f4@3 d5", C: "[d#5@7 d5@9]/2",
})).s("gm_ocarina").gain(0.1).pan(0.8)

// other · orchestral harp · "Lead 2"
const orchestral_harp = note(`<
  ~@61 A B C B C B C B C B C B C B C B C D E F G D E F G ~@8 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 ~@9
>`.pickRestart({
  A: "~@5 d4 f#4@2", B: "f#4@2 c#5 f#4 g#4 a4 c#5@2", C: "f#4@2 c#5 f#4 b4 a4 g#4 f4", D: "[d4,d5]@3 ~@11 [a4,a5]@2",
  E: "[a#4,a#5]@3 ~@11 [d5,d6]@2", F: "[d#5,d#6]@3 ~@13", G: "[d5,d6]@3 ~@13",
})).s("gm_orchestral_harp").gain(0.2).pan(0.2)

// other · orchestral harp · "Lead 2" · soft notes
const orchestral_harp_soft = note("<~@128 A B A B A B A B C>".pickRestart({
  A: "f#4@2 c#5 f#4 g#4 a4 c#5@2", B: "f#4@2 c#5 f#4 b4 a4 g#4 f4", C: "f#4 ~@7",
})).s("gm_orchestral_harp").gain(0.06).pan(0.2)

// other · lead 1 square · "Ending"
const lead_1_square = note("<~@108 A B A B A B A B A B A B A B A B A B A B A ~@8>".pickRestart({
  A: "b6 ~ a#6 ~ f#6 ~ g6@3 ~ f#6@3 ~ e6@2", B: "~@2 f#6@3 ~ d6@3 ~ a#5@3 ~ f#5@2",
})).s("gm_lead_1_square").gain(0.12)

// other · lead 1 square · "Ending" · soft notes
const lead_1_square_soft = note("<~@129 A B A B A B A C>".pickRestart({
  A: "~@2 f#6@3 ~ d6@3 ~ a#5@3 ~ f#5@2", B: "b6 ~ a#6 ~ f#6 ~ g6@3 ~ f#6@3 ~ e6@2", C: "b6 ~@15",
})).s("gm_lead_1_square").gain(0.04)

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

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

// drums · snare
const snare = s("sd").struct("<~@38 A@65 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 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@128 A B A B A B A B ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.16)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@5
  [~@5 x ~@10]!41
  [~@3 x ~@4]!8
  [~@5 x ~@10]!24
  [~@3 x ~@4]!8
  [~@5 x ~@10]!42
  ~@9
>`).gain(0.32)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~ [~@5 x ~@10]!4 ~@123 [~@5 x ~@10]!9>").gain(0.08)

// drums · splash
const splash = s("cr").struct("<~@37 [~@7 x] ~@31 [~@7 x] ~@67>").gain(0.4)

// drums · congas
const congas = s("conga:18").struct("<~@22 [~@7 x ~@8]!24 ~@8 [~@7 x ~@8]!24 ~@8 [~@7 x ~@8]!42 ~@9>").gain(1.28)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@128 [~@7 x ~@8]!8 ~>").gain(0.51)

// drums · congas
const congas_2 = s("conga:33").struct("<~@21 A B@24 ~@8 B@24 ~@8 B@41 C D ~@8>".pickRestart({
  A: "~@7 x", B: "x ~@2 x!2 ~@3 x ~ x ~ x!3 ~", C: "x ~@2 x!2 ~@3 x ~ x ~ x ~ x ~", D: "~@3 x!2 ~@11",
})).gain(1.28)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct(`<
  ~@127
  [~@13 x ~@2]
  [x ~@7 x ~ x ~ x!3 ~]
  [x ~@2 x!2 ~@3 x ~ x ~ x!3 ~]!7
  x
>`).gain(0.51)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [~@7 x]!123 ~@10>").gain(1.22)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[~@7 x]!4 ~@123 [~@7 x]!9 ~>").gain(0.41)

// drums · shaker
const shaker = s("sh").struct("<~@4 A B@2 C@39 D@8 C@24 D@8 C@40 B E ~@9>".pickRestart({
  A: "~@13 x ~@2", B: "x ~ x ~@10 x ~@2", C: "x ~ x ~@2 x ~@7 x ~@2", D: "~ x ~ x ~@2 x!2 ~@2 x!2 ~ x ~@2",
  E: "x!2 ~@6",
})).gain(0.4)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<A B@3 C D@5 ~@115 D@2 E B@8 C>".pickRestart({
  A: "~@13 x ~@2", B: "x ~ x ~@2 x ~@7 x ~@2", C: "x ~ x ~@2 x ~@10", D: "~@5 x ~@10", E: "~@5 x ~@7 x ~@2",
})).gain(0.16)

// drums · guiro
const guiro = s("guiro:0").struct(`<
// … 26 more lines

More by Depeche Mode