Strudelify

The Roost/Café

Kazumi Totaka

KeyC majorTempo100 bpm
0:00/0:00
// The Roost/Café — Kazumi Totaka
// 100 bpm, 12/8, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (12/8 at bar 1, 3/4 at bar 19) are rendered on a constant 12/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5984713; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 35 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/6)

// 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@4 H I J K L M N O P Q R S T U V W X ~@4 Y Z AA AB>".pickRestart({
  A: "~@17 [e4,c5]@7", B: "~@2 [g4,e5]@9 ~ [b4,g5]@11 ~",
  C: "~@5 e3 ~@5 [e3,c5,g5], [c3,d5,b5]@4 g3@2 ~ c4 g3 c4@3, ~ e3 g3 c4@3 e4@6, ~ c6@5, ~ e5@4 [g3,g4,e5]", // C G C
  D: "~@5 e3 ~@5 [e3,c5,a5], [a2,d5,b5]@3 ~ a3 [a3,d5,b5], ~ e3@3 a3@2 ~ c4@2 c4@3, ~ [e5,c6]@5, ~@2 a3 c4@3 e4@6", // Am Bm7 C
  E: "~@5 e2 ~@5 g2, e2 [b4,g5]@2, g5@2 [b2,g4,e5]@2 g2@2 ~ e3@2 e3@3, e5 g2@2 e3@3 g3@6, ~ b5@11 ~@4 b2@4 b2@4", // Em
  F: "~@5 [a#2,a5] ~@5 g2, g2@3 ~ a#2 [a#2,a#4,g5], ~ a#2@4 ~@2 c#3@2 c#3@3, ~ d3 [d3,g5] a5 [c5,a5]@2, ~ g3 [f3,c#5,a#5]@2", // A#maj7 D# G5 F A#m
  G: "[~@5 [a2,g4,e5] ~@6 g2 c3 e3 g3 e3 c3 ~@7 a2 d3 f#3 d3 a2 ~@7 e2 g2 c3 g2 e2 ~@5 e2, [f2,c5,a5]@6 [f2,g#4,c5]@5 g#2@2 ~@7 e3@2 e3@2 [f#5,a5]@6 f5@2 [d3,b5] f3@3 [c5,e5]@10 g2@2, ~ a2@4 ~@2 g#2@3 c3@3 ~@6 g3@2 [g3,e5,c6]@3 f#2 ~@5 [f2,c6]@6 c2 ~@6 c3 g2 c3@3, ~@4 [d3,f4,d5]@4 [d3,f4,d5]@4 ~@4 c3@2 f3@8 ~@10 [c4,c5,g5]@13 d6@11 ~@4 g5@6 [g#2,b5]@3 [g5,c6]@23, ~@6 f3@6 ~ f5@13 ~@4 [g4,e5]@6 ~@10 c3@4 ~@12 g#2@6 [d3,f5,a5]@6 ~@10 e3@12]/4", // A7 F Fm F#m G C F5 Dm …
  H: "~@6 [g3,e4]@3 [b3,g4] ~@2, c2@2 ~, ~@3 [e3,c4]@5 ~@4", // C Em C
  I: "c3 e3 g3 c4 g3 e3 ~ c4 g3 c4 [g3,e4] [e3,g4], [d4,b4]@4 c5@15 ~@5, ~@4 e4@8 e4@7 ~@5", // C Em G
  J: "a2 e3 a3 c4 a3 e3 ~ c4 a3 c4 [a3,b4] [e3,a4], [d4,b4]@4 c5@15 ~@5, ~@4 e4@8 e4@7 ~@5", // Asus2 A5 G
  K: "~ g2 b2 e3 g2 e2 g3 e3 b2 e3 b2 g2, [e4,g4]@4 e4@4 g4@15 ~, e2 ~@11, ~ b4@3 ~@20", // Em
  L: "g2 a#2 d3 g3 [d3,g4] [a#2,a4] [f3,a#4] c#3 a#2 c#3 a#2 g2, ~@12 a4 ~@3 a4@4 g4@4", // G5 A#maj7 A#5
  M: "f2 a2 d3 f3 [d3,d4] [a2,e4] ~ g#2 c3 f3 c3 g#2, a4 d4 ~ [g#3,c4] ~@2, ~@6 f2 ~@5, ~@13 f4@3 ~@8", // D A5 G#
  N: "g2@2 c3@2 e3@2 g3@2 e3@2 c3@2 c4@2 g3@2 e3@2 [g3,g4,c5] ~ [g3,g4,c5] ~ [g3,g4,c5] ~, ~ [c4,e4] [e4,g4] ~", // C5 C Em
  O: "~ a2 d3 f#3 d3 a2 f2 g#2 d3 f3 [d3,a4] [g#2,b4], [f#4,a4]@3 [f4,c5] ~@2, f#2 ~@11, ~ d5@11 ~@4 b4@4 ~@4", // D5 G#m F#m F5
  P: "~ e2 g2 c3 g2 e2 e3 ~@4 g2, [e4,g4]@2 ~, c2 ~@11, ~ c5@15 ~@8", // Em
  Q: "c2@4 [g2,c3,e3] ~@3 [g2,c3,e3] ~@3 g1@4 [g2,c3,e3] ~@3 [g2,c3,e3] ~@3", // C
  R: "a1@4 [a2,c3,e3] ~@3 [a2,c3,e3] ~@3 c2@4 [a2,c3,e3] ~@3 [a2,c3,e3] ~@3, ~@4 d2 d#2", // Am
  S: "e2@4 [b2,d3,e3] ~@3 [b2,d3,e3] ~@3 b1@4 [b2,d3,e3] ~@3 [b2,d3,e3] ~@3, ~@5 a#1", // E7
  T: "a1@4 [a2,c#3,e3] ~@3 [a2,c#3,e3] ~@3 c#2@4 [c#3,e3,g3] ~@3 [a2,c#3,e3] ~@3", // A C#dim A
  U: "d2@4 [a2,d3,f3] ~@3 [a2,d3,f3] ~@3 f2@4 [f3,g#3,c4] ~@3 [f3,g#3,c4] ~@3", // Dm Fm
  V: "g2@4 [c3,e3,g3] ~@3 [c3,e3,g3] ~@3 g1@4 [c3,e3,g3] ~@3 [c3,e3,g3] ~@3", // C
  W: "f#2@4 [d3,f#3,a3] ~@3 [d3,f#3,a3] ~@3 f2@4 [d3,f3,g#3] ~@3 [d3,f3,g#3] ~@3, ~@4 e2 d2", // D Ddim
  X: "[e3,g3,c4] ~@3 [c3,e3,g3] ~@3 [g2,c3,e3] ~@3 [c2,g2,c3]@12, c2@2 g2 ~ g1@2 ~@6", // C C5
  Y: "[c4,e4]@2 ~ g3 [c4,e4]@2 [d4,f4]@2 ~@2 [g3,f4]@2", Z: "[c4,e4,g4]@11 ~@2 a4@3 g4@4 [c4,e4]@4, ~@3 [c4,e4] ~@2",
  AA: "[f#3,a3,c4]@4 a3@4 [f#3,a3,c4]@4 [f3,a3,d4]@4 [f3,a3,d#4]@3 ~ [f3,a3,d4]@4, ~@16 d4 ~@7", AB: "[e3,g3,c4]@23 ~",
})).s("gm_piano").gain(0.44)

// chords · whistle · "Square Synthesizer"
const whistle = note("<~@10 A B C D E F G H I J K L@2 M@2 N O P Q R@2 S T U V>".pickRestart({
  A: "~ [e3,c4] [g3,e4] [b3,g4]", B: "[d4,b4]@2 [e4,c5]@6 ~@2 e4 g4", C: "[d4,b4]@2 [e4,c5]@6 ~@2 b4 a4",
  D: "~ b4@3 e4@4 g4@12 ~@4, [e4,g4] ~@5", E: "~@4 g4 a4 [c#4,a#4]@2 [c4,a4]@2 [a#3,g4]@2, ~@12 a4 ~@11",
  F: "[c4,a4]@4 d4@4 d4@2 e4@2 ~ f4@11, ~ [g#3,c4]", G: "~@6 [c4,e4]@6 [e4,g4]@6 [g4,c5] ~ [g4,c5] ~ [g4,c5] ~",
  H: "~ d5@11 c5@4 b4@4 a4@2 b4@2, [f#4,a4]@3 f4@2 ~", I: "~ c5@15 c4@4 e4@2 g4@2, [e4,g4]@2 ~", J: "b4 c5@3 e4 g4",
  K: "b4 c5@3 b4 a4", L: "[b4@2 e4@2 g4@10 ~@2 g4 a4 a#4@2 a4@2 g4@2, ~@36 a4 ~@11]/2",
  M: "[a4@4 d4@4 d4@2 e4@2 ~ [d4,f4]@15 ~@8 e4@4 g4@4 c5@4, ~@3 [g#3,c4]@4 ~@5]/2", N: "d5@6 c5@2 b4@2 a4 b4",
  O: "c5@8 c4@2 e4 g4", P: "[d4,b4] [e4,c5]@3 e4 g4", Q: "[d4,b4] [e4,c5]@3 b4 a4",
  R: "[b4@2 e4@2 [b3,g4]@10 ~@2 g4 a4 [e4,a#4]@2 a4@2 g4@2, ~@36 a4 ~@11]/2", // Em Edim
  S: "[f4,a4]@4 d4@4 d4@2 e4@2 ~ [d4,f4]@11, ~ [g#3,c4]", T: "~@3 e4 g4 c5", U: "[f#4,d5]@6 c5@2 b4@2 a4 b4, ~ f4",
  V: "[e4,c5]", // C
})).s("gm_whistle").gain(0.38)

// chords · lead 2 sawtooth · "Saw Synthesizer"
const lead_2_sawtooth = note("<~@11 A B C D E F G H ~@8 I J K L M N O P>".pickRestart({
  A: "g5 e5 c5 g4 e5 c5 g4 e4 g4 e4 c4 g3 c4 g3 e3 g3 c4 e4 g4 c5 e5 g5 c6 g5",
  B: "a5 e5 c5 a4 c5 a4 e4 c4 a3 c4 e4 a4 c5 a4 e4 a4 c5 e5 c5 a4 c5 e5 a5 c6",
  C: "e5 b4 g4 b4 ~ b4 e4 ~ e5 ~ e5 ~@2 b4 g4 b4 ~ b4 e4 ~ e5 ~ e5 ~",
  D: "g5 d5 a#4 d5 ~ d5 g4 ~ g5 ~ g5 ~@2 c#5 a#4 c#5 ~ c#5 g4 ~ g5 ~ g5 ~",
  E: "f5 d5 a4 d5 a4 d4 f4 a4 d5 a4 f5 a5 f5 c5 g#4 c5 g#4 c4 f4 g#4 c5 g#4 f5 g#5",
  F: "g5 ~@2 g5 ~ g5 g4 ~ g4 ~ g4 ~ g5 ~ g4 g5 g4 g5 g4 ~ g4 ~ g4 ~",
  G: "f#5 d5 a4 f#4 a4 d5 f#5 d5 a4 f#4 a4 d5 f5 c5 g#4 f4 g#4 c5 f5 c5 g#4 f4 g#4 d5", H: "c5 ~@5",
  I: "~@4 [g3,c4,e4] ~@3 [g3,c4,e4] ~@7 [g3,c4,e4] ~@3 [g3,c4,e4] ~@3", // C
  J: "~@4 [a3,c4,e4] ~@3 [a3,c4,e4] ~@7 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3", // Am
  K: "~@4 [b3,d4,e4,g4] ~@3 [b3,d4,e4,g4] ~@7 [b3,d4,e4,g4] ~@3 [b3,d4,e4,a#4] ~@3", // Em7 E7
  L: "~@4 [a3,c#4,e4,a4] ~@3 [a3,c#4,e4,a4] ~@7 [c#4,e4,g4,c#5] ~@3 [a3,c#4,e4,a4] ~@3", // A C#dim A
  M: "~@4 [a3,d4,f4,d5] ~@3 [a3,d4,f4,a4] ~@7 [f4,g#4,c5,f5] ~@3 [f4,g#4,c5,f5] ~@3", // Dm Fm
  N: "~@4 [c4,e4,g4,e5] ~@3 [c4,e4,g4,e5] ~@7 [c4,e4,g4,e5] ~@3 [c4,e4,g4,e5] ~@3", // C
  O: "~@4 [d4,f#4,a4,d5] ~@3 [d4,f#4,a4,d5] ~@7 [d4,f4,g#4,c5,d5] ~@3 [d4,f4,g#4,c5,d5] ~@3", // D Dm7b5
  P: "~ c5 ~@2 [c4,e4,g4] ~@3 [g3,c4,e4] ~@3 [g3,c4]@12, [e4,g4] ~@11", // C C5 Em
})).s("gm_lead_2_sawtooth").gain(0.48)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@18 A B C B C B C B D ~@8>".pickRestart({
  A: "~@7 x!5", B: "x ~ x ~ x ~ x ~@2 x ~@2", C: "x ~ x ~ x ~ x ~@2 x ~ x", D: "x!4 ~@2",
})).gain(0.24)

// drums · snare
const snare = s("sd").struct(`<
  ~@11
  [~@3 x!3 ~@3 x!3]!4
  [~@6 x ~@3 x!2 ~@6 x!6]
  [~@6 x ~ x ~ x!2 ~@6 x ~ x ~ x ~]
  [~@3 x!3 ~@3 x!3]
  ~@9
  [~ x!2 ~ x!2]!7
  [~ x!2 ~@3]
>`).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@11 [~ x!11]!7 ~@9 [~ x!2 ~ x!2]!7 [~ x!2 ~@3]>").gain(0.64)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@19 [~ x!2 ~ x!2]!7 [~ x!2 ~@3] ~@8>").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@18 x [x!2]!8 ~@7 [~ x]>").gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@11 x!7 ~@9 x!3 ~ x ~ x!2>").gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@27 [~ x]!3 [x!2] [~ x] [x!2] [~ x] ~>").gain(0.64)

stack(piano, whistle, lead_2_sawtooth, kick, kick_soft, snare, hihat, hihat_soft, open_hat, crash, ride)

More by Kazumi Totaka