Strudelify

peter gunn theme

Acerbis Cristiano

KeyF majorTempo120 bpm
0:00/0:00
// peter gunn theme — Acerbis Cristiano
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5981110; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 92 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 · [...]/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.

// other · trombone
const trombone = note(`<
  ~@8 A@2 B C D E F ~ G ~@7 H I J K L ~ M@3 F ~ N@2 O P D E Q@2 R S T U R V W X Y Z AA@2 AB Z AC@2 AD AE AF AG ~@16 AH I
  J K L ~ M@3 AI AJ AK@2
>`.pickRestart({
  A: "[d4@7 b3@3 ~@6]/2", B: "d4", C: "b4@3 f4@4 ~@9", D: "~@2 b3@2 d4@2 e4@2 f4@3 f4@2 f4@3",
  E: "f4@3 e4@2 d4@3 b3@3 a3@2 b3@3", F: "g3 ab3@2 ~@5", G: "d3@7 ~", H: "~@2 e3!2", I: "e4@5 e4 d4 b3",
  J: "e4!2 d4 b3@2 b3!3", K: "e4@2 d4 b3 e4@2 d4 b3", L: "e4!2 d4 b3@5", M: "g3 ab3 ~@5 e3", N: "[d3@7 b2@3 ~@6]/2",
  O: "d3", P: "b3@3 f3@4 ~@9", Q: "[g3@2 ab3@2 ~@10 g3@8 e3@2 g3@2 e3@2 b3!2 a3 g3]/2", R: "e3 e3@5 d3 b2",
  S: "e3@4 ~@5 e3@3 g3 a3 b3@2", T: "b3 b3@7", U: "b3@4 b3@4 b3@2 b3@2 a3!2 g3@2", V: "g3 ~@2 f3", W: "e3 e3@7",
  X: "g3@3 gb3@2 e3@3 g3@2 e3@2 d3@2 b2@2", Y: "g3 e3@5 d3 b2", Z: "e3@2 ~@3 e3 g3 a3",
  AA: "[b3@6 b3@6 b3@6 b3@6 b3 b3@3 b3!2 a3 g3]/2", AB: "e3@2 e3@6 ~@2 e4 d4 b3 a3 g3 ab3",
  AC: "[b3 d4@6 b3@3 ab3 e3@5]/2", AD: "d4@2 db4@2 d4@2 db4 d4!3 db4@2 b3@2 g3@2", AE: "e3 ~@3", AF: "g3 ab3 ~@6",
  AG: "d4@7 ~", AH: "~@4 e3!4", AI: "g3@2 ab3@2 ~@6 eb3 e3@2 ab3 b3@2", AJ: "d4!4", AK: "[d4@2 d4@2 d4@2 d4 e4@9]/2",
})).s("gm_trombone").gain(0.4)

// other · trombone · soft notes
const trombone_soft = note("<~@16 A@2 B C D E F G H ~@37 I@2 J K D E L ~ M@2 B C D E N O P Q ~@12>".pickRestart({
  A: "[~@7 b2@3 ~@6]/2", B: "d3", C: "b3@3 f3@4 ~@9", D: "~@2 b3@2 d4@2 e4@2 f4@3 f4@2 f4@3",
  E: "f4@3 e4@2 d4@3 b3@3 a3@2 b3@3", F: "c4@2 f4@2 eb4 f4 eb4 bb3 c4@2 ~@6",
  G: "c4@2 f4@2 eb4 f4 eb4 c4 ab3@2 f3@2 ab3@2 bb3@2", H: "e3!2 ~@2", I: "[~@7 b3@3 ~@6]/2", J: "d4",
  K: "b4@3 f4@4 ~@9", L: "g3 ab3@2 ~@5", M: "[d3@7 b2@3 ~@6]/2", N: "g3 ab3@2 ~@4 e3", O: "~@4 b2!2 ~@2", P: "e3!8",
  Q: "e3!4 ~@4",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_2 = note(`<
  ~@8 A@2 B C D E F ~ G ~@7 H I J K L ~ M@3 N ~ O@2 P C D E Q@2 R S T U R V W X Y Z AA@2 AB Z AC@2 AD AE AF AG ~@16 AH I
  J AI L ~ M@3 AJ AK AL@2
>`.pickRestart({
  A: "[d4@7 b3@3 ~@6]/2", B: "d4", C: "b3@3 f3@4 ~@9", D: "~@2 b2@2 d3@2 e3@2 f3@3 f3@2 f3@3",
  E: "f3@3 e3@2 d3@3 b2@3 a2@2 b2@3", F: "g2 ab2@2 ~@5", G: "d3@7 ~", H: "~@2 e3!2", I: "e4@5 e4 d4 b3",
  J: "e4!2 d4 b3@2 b3!3", K: "e4@2 d4 b3 e4@2 d4 b3", L: "e3!2 d3 b2@5", M: "g3 ab3 ~@5 e3", N: "g3 ab3@2 ~@5",
  O: "[d3@7 b2@3 ~@6]/2", P: "d3", Q: "[g3@2 ab3@2 ~@10 g3@8 e3@2 g3@2 e3@2 b3!2 a3 g3]/2", R: "e3 e3@5 d3 b2",
  S: "e3@4 ~@5 e3@3 g3 a3 b3@2", T: "b3 b3@7", U: "b3@4 b3@4 b3@2 b3@2 a3!2 g3@2", V: "g2 ~@2 f2", W: "e3 e3@7",
  X: "g3@3 gb3@2 e3@3 g3@2 e3@2 d3@2 b2@2", Y: "g2 e3@5 d3 b2", Z: "e3@2 ~@3 e3 g3 a3",
  AA: "[b3@6 b3@6 b3@6 b3@6 b3 b3@3 b3!2 a3 g3]/2", AB: "e3@2 e3@6 ~@2 e3 d3 b2 a2 g2 ab2",
  AC: "[b3 d4@6 b3@3 ab3 e3@5]/2", AD: "d4@2 db4@2 d4@2 db4 d4!3 db4@2 b3@2 g3@2", AE: "e3 ~@3", AF: "g3 ab3 ~@6",
  AG: "d4@7 ~", AH: "~@4 e3!4", AI: "e3@2 d3 b2 e3@2 d3 b2", AJ: "g3@2 ab3@2 ~@6 eb3 e3@2 ab3 b3@2", AK: "d4!4",
  AL: "[d4@2 d4@2 d4@2 d4 e4@9]/2",
})).s("gm_trombone").gain(0.4)

// other · trombone · soft notes
const trombone_soft_2 = note("<~@16 A@2 B C D E F G H ~@37 I@2 B C D E J ~ K@2 B C D E F L M N ~@12>".pickRestart({
  A: "[~@7 b2@3 ~@6]/2", B: "d3", C: "b3@3 f3@4 ~@9", D: "~@2 b2@2 d3@2 e3@2 f3@3 f3@2 f3@3",
  E: "f3@3 e3@2 d3@3 b2@3 a2@2 b2@3", F: "g3 ab3@2 ~@4 e3", G: "~@4 b2!2 ~ b2", H: "e3!2 ~@2", I: "[~@7 b3@3 ~@6]/2",
  J: "g3 ab3@2 ~@5", K: "[d3@7 b2@3 ~@6]/2", L: "~@4 b2!2 ~@2", M: "e3!8", N: "e3!4 ~@4",
})).s("gm_trombone").gain(0.2)

// bass · trombone
const bass = note("<A@3 B C D@17 E F G D@51 E H I J D@9 K L@2>".pickRestart({
  A: "e2@5 ~@11", B: "e2@5 ~@7 [eb3,e3] [c3,db3,d3] [a2,bb2,b2] [gb2,g2,ab2]",
  C: "e2@2 e2@2 gb2@2 e2@2 g2 ab2 e2@2 a2@2 ab2@2, f2 ~@15", D: "e2@2 e2@2 gb2@2 e2@2 g2 ab2 e2@2 a2@2 ab2@2",
  E: "g2 ab2@2 ~@4 e2", F: "~@4 b2!2 ~ b2", G: "ab2@2 ab2@2 ab2!4", H: "~@4 b2!2 ~@2",
  I: "f2@3 f3@3 ab3@4 a3@2 ab3@2 f3@2", J: "e2!8", K: "g2!4", L: "[g2@2 g2@2 g2@2 g2 a2@9]/2",
})).s("gm_trombone").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@7 A B@7 C B@6 ~@2 D B@3 C B@40 C B@6 ~@3 B@10 ~@3>".pickRestart({
  A: "~ x!3", B: "~ x ~ x", C: "~@4 x ~@5 x!6", D: "x!8",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@3 x ~@4] ~@16 [x!8] ~@67>").gain(0.25)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!8 ~@84>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~@5 x ~@2] ~@84>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@8 A@7 B A@6 ~@3 A@3 B A@40 B A@6 ~@3 A@10 ~@3>".pickRestart({
  A: "x!8", B: "x!5 ~@3",
})).gain(0.4)

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

stack(
  trombone, trombone_soft, trombone_2, trombone_soft_2, bass, kick, snare, low_tom, pedal_hat, mid_tom, ride, splash
)