Strudelify

Nattoppet

Detektivbyrån

KeyC majorTempo120 bpm
0:00/0:00
// Nattoppet — Detektivbyrån
// 120 bpm, 6/8, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5137865; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// 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 · piano
const piano = note(`<
  A B C D E F G H I B J K L M N O P Q R S T U V W P Q X Y Z AA AB AC A B C D E F G H I B J K L M N O AD@2 AE@2 AF AG
  AH@2 AI AJ AK@2 AF AG AL@2 ~ AM AN AO AP@2 AQ AR AS@2 AT AU AV@2 AT AW AX@2 AY AZ BA BB BC BD
>`.pickRestart({
  A: "c4 e4 ~ g4 b4 g4 ~ e4 c4 e4 ~ g4 b4 g4 ~ e4, e5 g5", B: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ a3, a5 c6",
  C: "c4 e4 ~ g4 b4 g4 ~ e4 c4 e4 ~ g4 b4 g4 ~ e4, g5@15 ~",
  D: "c4 e4 ~ g4 b4 g4 ~ e4 c4 e4 ~ g4 b4 g4 ~ [e4,g5], ~@8 g5@5 ~@3", // Em
  E: "g3 b3 ~ d4 f4 d4 ~ b3 g3 b3 ~ d4 f4 d4 ~ b3, b5 c6", F: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ [a3,g5], a5 ~",
  G: "a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ c4, e5 ~", H: "a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ c4",
  I: "a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ c4, e5 g5", J: "c4 e4 ~ g4 b4 g4 ~ e4 c4 e4 ~ g4 b4 g4 ~ e4, e6 ~",
  K: "c4 e4 ~ g4 b4 g4 ~ e4 c4 e4 ~ g4 b4 g4 ~ [e4,e6]", L: "e4 g4 ~ b4 d5 b4 ~ g4 e4 g4 ~ b4 d5 b4 ~ [g4,g6], g6 ~",
  M: "e4 g4 ~ b4 d5 b4 ~ g4 e4 g4 ~ b4 d5 b4 ~ [g4,g6], e6 ~", N: "e4 g4 ~ b4 d5 b4 ~ g4 e4 g4 ~ b4 d5 b4 ~ g4, e6 ~",
  O: "e4 g4 ~ b4 d5 b4 ~ g4 e4 g4 ~ b4 d5 b4 ~ g4, ~@11 d6@4 ~",
  P: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ a3, c6@6 ~ b5@5 f5@4",
  Q: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ a3, ~@11 d6@4 ~",
  R: "d3 f3 ~ a3 c4 a3 ~ f3 d3 f3 ~ a3 c4 a3 ~ f3, c6@6 ~ b5@5 f5@4",
  S: "d3 f3 ~ a3 c4 a3 ~ f3 d3 f3 ~ [a3,d6] c4 a3 ~ f3", // D5
  T: "a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ c4, c6@6 ~ b5@5 e5@4",
  U: "a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ c4, ~@11 d6@4 ~",
  V: "e3 g3 ~ b3 d4 b3 ~ g3 e3 g3 ~ b3 d4 b3 ~ g3, c6@6 ~ b5@5 e5@4",
  W: "e3 g3 ~ b3 d4 b3 ~ g3 e3 g3 ~ b3 d4 b3 ~ g3, ~@11 d6@4 ~",
  X: "d4 f4 ~ a4 c5 a4 ~ f4 d4 f4 ~ a4 c5 a4 ~ f4, c6@6 ~ b5@5 f5@4",
  Y: "d4 f4 ~ a4 c5 a4 ~ f4 d4 f4 ~ a4 c5 a4 ~ f4, ~@11 d6@4 ~",
  Z: "a4 c5 ~ e5 g5 e5 ~ c5 a4 c5 ~ e5 [e5,g5] e5@2 c5, c6@6 ~ b5@5 ~@4", // Em
  AA: "a4 c5 ~ e5 g5 e5 ~ c5 a4 c5 ~ e5 g5 e5 ~ c5, ~@11 d6@4 ~",
  AB: "g4 b4 ~ d5 f5 d5 ~ b4 g4 b4 ~ d5 f5 d5 ~ b4, c6@6 ~ b5@5 e5@4",
  AC: "g4 b4 ~ d5 f5 d5 ~ b4 g4 b4 ~ d5 f5 d5 ~ b4",
  AD: "[f3@7 ~@9 f3@8 ~@3 d6@4 ~, c6@6 ~ b5@5 ~ f5@9 ~@10, ~ [a3,c4] ~ [a3,c4]]/2", // Am
  AE: "[d3@7 ~@6 f5@11 ~@3 d6@4 ~, c6@6 ~ b5@5 ~@20, ~@8 [f3,a3]@23 ~]/2", // F
  AF: "a3@7 ~@6 e5@3, c6@6 ~ b5@5 ~@4, ~ [c4,e4]", AG: "a3@8 ~@3 d6@4 ~, ~ [c4,e4]",
  AH: "[e3@7 ~@6 e5@11 ~@3 d6@4 ~, c6@6 ~ b5@5 ~@20, ~@8 [g3,b3]@23 ~]/2", // G
  AI: "f3@7 ~@6 f5@3, c6@6 ~ b5@5 ~@4, ~ [a3,c4]", AJ: "f3@8 ~@3 d6@4 ~, ~ [a3,c4]",
  AK: "[d3@7 ~@6 f5@4 ~@10 d6@4 ~, c6@6 ~ b5@5 ~@20, ~@8 [f3,a3]@23 ~]/2", // F
  AL: "[g3@7 ~@6 e5@4 ~@15, c6@6 ~ b5@5 ~@20, ~@8 [b3,d4]@23 ~]/2", // Bm
  AM: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ [a3,a5], ~@4 b5@4 c6@3 b5@4 ~", // A
  AN: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ a3, g5@4 a5@3 e6@8 ~",
  AO: "d3 f3 ~ a3 c4 a3 ~ f3 d3 f3 ~ a3 c4 a3 ~ [f3,a5], ~@4 b5@4 c6@3 b5@4 ~", // F
  AP: "[d3 f3 ~ a3 c4 a3 ~ f3 d3 f3 ~ a3 c4 a3 ~ f3 a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ [c4,a5], g5@4 a5@3 e5@4 f5@4 a5@3 ~@2 b5@4 c6@3 b5@4 ~]/2", // F
  AQ: "a3 c4 ~ e4 g4 e4 ~ c4 a3 c4 ~ e4 g4 e4 ~ c4, g5@4 a5@3 e6@8 ~",
  AR: "e3 g3 ~ b3 d4 b3 ~ g3 e3 g3 ~ b3 d4 b3 ~ [g3,a5], ~@4 b5@4 c6@3 b5@4 ~", // Gsus2
  AS: "[e3 g3 ~ b3 d4 b3 ~ g3 e3 g3 ~ b3 d4 b3 ~ g3 f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ [a3,a5], g5@4 a5@3 e5@4 [f5,d6]@4 a5@3 ~@2 b5@3 b5@4 b5@4 ~, ~@16 c6@6 ~@2 c6@3 ~ f5@4]/2", // A Dm
  AT: "f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ a3, g5@4 a5@3 e6@8 ~, ~@11 d6@4 ~",
  AU: "d3 f3 ~ a3 c4 a3 ~ f3 d3 f3 ~ a3 c4 f5@2 [f3,a5], c6@6 ~@2 c6@3 ~@2 a3 ~@2, ~@4 b5@4 ~@3 b5@4 ~", // F
  AV: "[d3 f3 ~ a3 c4 a3 ~ f3 d3 f3 ~ a3 c4 a3 ~ f3 f3 a3 ~ c4 e4 c4 ~ a3 f3 a3 ~ c4 e4 c4 ~ [a3,a5], g5@4 a5@3 e5@4 [f5,d6]@4 a5@3 ~@2 b5@3 b5@4 b5@4 ~, ~@16 c6@6 ~@2 c6@3 ~ f5@4]/2", // A Dm
  AW: "d4 f4 ~ a4 c5 a4 ~ f4 d4 f4 ~ a4 c5 a4 ~ [f4,a5], c6@6 ~@2 c6@3 ~ f5@3 ~, ~@4 b5@4 ~@3 b5@4 ~", // F
  AX: "[d4 f4 ~ a4 c5 a4 ~ f4 d4 f4 ~ a4 c5 a4 ~ f4 a4 c5 ~ e5 g5 e5 ~ c5 a4 c5 ~ e5 g5 e5@2 [c5,a5], g5@4 a5@3 e5@4 [f5,d6]@4 a5@3 ~@2 b5@4 ~@3 b5@4 ~, ~@16 c6@6 ~@2 c6@3 ~@5]/2", // F Dm
  AY: "a4 c5 ~ e5 g5 e5 ~ c5 a4 c5 ~ e5 g5 e5 ~ c5, g5@4 a5@3 e6@8 ~, ~@11 d6@4 ~",
  AZ: "g4 b4 ~ d5 f5 d5 ~ b4 g4 b4 ~ d5 f5 d5 ~ [b4,a5], c6@6 ~@2 c6@3 ~@5, ~@4 b5@3 b5@4 b5@4 ~", // B7
  BA: "g4 b4 ~ d5 f5 d5 ~ b4 g4 b4 ~ [d5,f5] ~ d5 ~ b4, g5@4 a5@3 e5@4 ~ f5@2 ~@2", BB: "e5 g5", BC: "a5 c6",
  BD: "e6@15 ~",
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@16 [x!2]!15 x ~@41 [x!2]!12 ~@3>").gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@16 [~ x ~ x]!15 [~ x ~@2] ~@41 [~ x ~ x]!12 ~@3>").gain(0.3)

stack(piano, kick, rim)