Strudelify

Doki Doki Literature Club! Trailer Theme

Dan Salvato

KeyC majorTempo120 bpm
0:00/0:00
// Doki Doki Literature Club! Trailer Theme — Dan Salvato
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5008021; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 20 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · piccolo
const piccolo = note("<~ A B C D E F G H I J K ~ L ~ M ~@2 N O>".pickRestart({
  A: "~@15 a6", B: "c7@4 g6 ~ g6 ~ g6@4 ~@2 g6 f6, b6 ~@15", C: "e6@3 f6 g6@2 e6@2 d6@4 c6@2 d6@2",
  D: "d#6 e6 c6@2 g5@2 ~@10", E: "a5 b5 ~ g5 ~@12", F: "~@4 g6 ~ a6 ~ g6@4 ~@2 e6 f6",
  G: "g6@2 f6 e6 d6@2 a5@2 g5 ~@3 f5@2 a5@2", H: "g5 e6 c6 ~@5", I: "~@14 c7!2", J: "c7!2 c7@2 b6 a6 g6@2",
  K: "c7 ~ e7@4 g7@6 ~@4, ~@2 d7 ~@13", L: "~@2 a6@2 c7@2 d7@2 d#7@2 d7@2 c7 a6@2 c7",
  M: "~@4 c6 ~ e6@4 g6@4 ~@2, ~@6 d6 ~@9", N: "c6 ~ c6 ~ e5 ~ e5 ~ f5 ~ f5 ~ g5 ~ g5 ~",
  O: "c6 ~ c6 ~ [e5,e6] ~ [e5,e6] ~ [f5,f6] ~ [f5,f6] ~ [g5,g6]!2 ~ [c6,c7]", // E F G C
})).s("gm_piccolo").gain(0.4)

// other · flute
const flute = note("<A B C D E F G H I J K L ~ M ~ N ~ O@2 P>".pickRestart({
  A: "[c4,c5] [c4,c5]@5 [e4,e5] [e4,e5]@5 [f4,f5] [f4,f5]@3", B: "[g4,g5]@15 ~", C: "c5@4 g6 ~ g6 ~ g6@4 ~@2 g6 f6",
  D: "e6@3 f6 g6@2 e6@2 d6@4 c6@2 d6@2", E: "d#6 e6 c6@2 g5@2 ~@10", F: "a4 b4 ~ g4 ~@12",
  G: "~@4 g6 ~ a6 ~ g6@4 ~@2 e6 f6", H: "g6@2 f6 e6 d6@2 a5@2 g5 ~@3 f5@2 a5@2", I: "g5 e6 c6 ~@5", J: "~@14 c6!2",
  K: "c6!2 c6@2 b5 a5 g5@2", L: "c6 ~ e6@4 g6@6 ~@4, ~@2 d6 ~@13", M: "~@2 a5@2 c6@2 d6@2 d#6@2 d6@2 c6 a5@2 c6",
  N: "~@4 c5 ~ e5@4 g5@4 ~@2, ~@6 d5 ~@9", O: "c4 ~ c4 ~ e4 ~ e4 ~ f4 ~ f4 ~ g4 ~ g4 ~",
  P: "c5 ~ c5 ~ [e4,e5] ~ [e4,e5] ~ [f4,f5] ~ [f4,f5] ~ [g4,g5]!2 ~ [c5,c6]", // E F G C
})).s("gm_flute").gain(0.4)

// other · french horn · "Horn in F"
const french_horn = note("<A B C ~ D E ~@2 F ~@3 G H ~@2 I J@2 K>".pickRestart({
  A: "c4 c4@5 e4 e4@5 f4 f4@3", B: "g4@15 [a3,a4]", C: "[c4,c5] ~@3, [b3,b4] ~@15", D: "~ [e4,c5]@3",
  E: "~@12 e5 ~ d5 ~", F: "~@4 [e4,c5,e5]@6 ~@2 [e4,c5,e5]!2 ~ [e4,c5,e5]",
  G: "~@2 [a4,f5]@2 [g4,e5] [e4,c5,e5]@2 [d4,b4,d5]@2 ~@5 [g3,g4] [a3,a4]", // Dm C G A
  H: "[c4,c5]@2 ~@10 [c4,c5] [a3,a4]@2 [c4,c5]", I: "~@2 [a4,f5]@2 [g4,e5] [e4,c5,e5]@2 [d4,b4,d5]@6 ~ g3 a3",
  J: "c4 ~ c4 ~ e4 ~ e4 ~ f4 ~ f4 ~ g4 ~ g4 ~", K: "c4 ~ c4 ~ e4 ~ e4 ~ f4 ~ f4 ~ g4!2 ~ c5",
})).s("gm_french_horn").gain(0.45)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@9 [~@6 c4 ~ e4 ~ f4 ~ e4 ~ d4 ~] ~@10>").s("gm_french_horn").gain(0.25)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<A B C ~ D E ~@2 F G ~@2 H I ~@2 J K@2 L>".pickRestart({
  A: "[c4,c5] [c4,c5]@5 [e4,e5] [e4,e5]@5 [f4,f5] [f4,f5]@3", B: "[g4,g5]@15 a4", C: "c5 ~@3, b4 ~@15",
  D: "~ [e4,c5,e5]@3", E: "~@12 e5 ~ d5 ~", F: "~@4 [e4,c5,e5]@6 ~@2 [e4,c5,e5]!2 ~ [e4,c5,e5]",
  G: "~@6 c4 ~ e4 ~ f4 ~ e4 ~ d4 ~", H: "~@2 [a4,f5,a5]@2 [g4,e5,g5] [e4,c5,e5]@2 [d4,b4,d5]@2 ~@5 [g3,g4] [a3,a4]",
  I: "[c4,c5]@2 ~@10 [c4,c5] [a3,a4]@2 [c4,c5]", // C A C
  J: "~@2 [a4,f5,a5]@2 [g4,e5,g5] [e4,c5,e5]@2 [d4,b4,d5]@6 ~ [g3,g4] [a3,a4]", // Dm C G A
  K: "[c4,c5] ~ [c4,c5] ~ [e4,e5] ~ [e4,e5] ~ [f4,f5] ~ [f4,f5] ~ [g4,g5] ~ [g4,g5] ~", // C E F G
  L: "[c4,c5] ~ [c4,c5] ~ [e4,e5] ~ [e4,e5] ~ [f4,f5] ~ [f4,f5] ~ [g4,g5]!2 ~ [c5,c6]", // C E F G C
})).s("gm_trumpet").gain(0.45)

// other · trombone
const trombone = note("<A B C D E F C D E F C D E G C D E H I J>".pickRestart({
  A: "~@3 e3 e3@4 ~ f3 f3@2 f3!2 f3@2", B: "g3@15 ~", C: "c3@2 ~@2 c3@2 ~@2 e3@2 ~@2 e3@2 c3 ~",
  D: "f3@2 ~@2 f3@2 a3 ~ g3@2 ~@2 g3@2 e3@2", E: "c3 ~@2 c3 g2 ~@2 g2 c3 ~@2 c3 g2 ~@2 g2",
  F: "c3 ~@2 c3 g2@2 ~@2 f2 ~ e2 ~ f2 ~ g2 ~", G: "f3 ~@2 f3 e3 ~@2 e3 d#3 ~ d3 ~ c3 ~ d3 ~", H: "c3 ~ e3 ~ f3 ~ g3 ~",
  I: "c3@2 ~@2 e3@2 ~@2 f3@2 ~@2 g3 ~@2 g3", J: "c3 ~@2 c3 e3@2 ~@2 d3 ~ c3 ~ b2 c3 ~ c3",
})).s("gm_trombone").gain(0.25)

// bass · electric bass pick · "Bass Guitar"
const bass = note("<A B C D E F C D E F C D E G C D E H I J>".pickRestart({
  A: "~@3 e2 e2@4 ~ f2 f2@2 f2!2 f2@2", B: "g2@15 ~", C: "c2@2 ~@2 c2@2 ~@2 e2@2 ~@2 e2@2 c2 ~",
  D: "f2@2 ~@2 f2@2 a2 ~ g2@2 ~@2 g2@2 e2@2", E: "c2 ~@2 c2 g1 ~@2 g1 c2 ~@2 c2 g1 ~@2 g1",
  F: "c2 ~@2 c2 g1@2 ~@2 f1 ~ e1 ~ f1 ~ g1 ~", G: "f2 ~@2 f2 e2 ~@2 e2 d#2 ~ d2 ~ c2 ~ d2 ~", H: "c2 ~ e2 ~ f2 ~ g2 ~",
  I: "c2@2 ~@2 e2@2 ~@2 f2@2 ~@2 g2 ~@2 g2", J: "c2 ~@2 c2 e2@2 ~@2 d2 ~ c2 ~ b1 c2 ~ c2",
})).s("gm_electric_bass_pick").gain(0.25)

// chords · violin
const violin = note("<~ A ~@7 B C D ~@2 E F ~@4>".pickRestart({
  A: "[g4,g5]@15 ~", B: "~@14 g4!2", C: "g4!2 g4@2 f4 e4 c4@2", D: "c4 ~ e4@4 g4@6 ~@4, ~@2 d4 ~@13",
  E: "~@2 [g4,c5] [g4,c5]@3 [g4,c5]@2 [g4,c5]@4 [f4,b4]@2 [e4,a4]@2", // C5 Fdim A5
  F: "[c4,g4]@4 e4@2 d5 f4@3 [g4,g5]@4 ~@2, ~@4 c5 ~ e5@4 ~@6", // C5 G
})).s("gm_violin").gain(0.4)

// chords · cello · "Violoncello"
const cello = note("<~ A ~@7 B C D ~@2 E F ~@4>".pickRestart({
  A: "g2@15 ~", B: "~@14 g3!2", C: "g3!2 g3@2 f3 e3 c3@2", D: "c3 ~ e3@4 g3@6 ~@4, ~@2 d3 ~@13",
  E: "~@2 [g3,c4] [g3,c4]@3 [g3,c4]@2 [g3,c4]@4 [f3,b3]@2 [e3,a3]@2", // C5 Fdim A5
  F: "[c3,g3]@4 e3@2 d4 f3@3 [g3,g4]@4 ~@2, ~@4 c4 ~ e4@4 ~@6", // C5 G
})).s("gm_cello").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  [~@3 x!2 ~@4 x!2 ~@5]
  ~
  [x ~@3 x ~@2 x]!3
  [~@4 x!4]
  [x ~@3 x ~@2 x]!3
  [x ~@3 x!4]
  [x ~@3 x ~@2 x]!10
>`).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@2 [~ x ~ x]!18>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<[x!2 ~@4 x!2 ~@4 x!3 ~] ~@8 [~@10 x!2 ~@4] ~@3 [~@11 x ~@4] ~@6>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B A C A B A C A B A C A B A D@2 A>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~@3 x!2", C: "~ x ~ x ~ x ~@2", D: "~@2 x!2 ~@2 x ~@3 x ~@3 x ~",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@5 [~@7 x] ~@3 [~@7 x] ~@3 [~@7 x] ~@6>").gain(0.4)

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

// drums · ride
const ride = s("rd").struct("<~@19 [~@15 x]>").gain(0.4)

stack(
  piccolo, flute, french_horn, french_horn_soft, trumpet, trombone, bass, violin, cello, kick, rim, snare, hihat,
  open_hat, crash, ride
)

More by Dan Salvato