Strudelify

again

Yui

KeyG majorTempo130 bpm
0:00/0:00
// again — Yui
// 130 bpm, 12/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/8 at bar 1, 12/8 at bar 1) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6144388; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · epiano1 · "Piano"
const epiano1 = note(`<
  A B C D E F G H I J@2 K@4 L@2 M N O@2 P N Q@2 R S T@2 U V W@2 X Y X Z AA@3 AB AC AD AE AF AG AH AI AJ AK AL AM AF AN
  AO AP AQ@2
>`.pickRestart({
  A: "~@5 e4", B: "~ [e4,b4]@5 e4@4 e4@5 d4@7 d4@2, [e3,g3,b3]@23 ~, c4 ~@3",
  C: "~ [f#4,b4]@5 e4@4 e4@5 f#4@7 f#4@2, [f#3,a3,b3]@23 ~, d4 ~@3", // B5 B7
  D: "f#4@2 g4 f#4@2 g4 f#4@2 b3 b3@3, [f#3,g3]@23 ~, b3@2 ~", // Gmaj7
  E: "~ [e4,b4] a#4@2 a4@2 g4@2 e4@2 [g4,c5]@2 e4@2 [b4,d5]@8 e4@2, [d3,e3,g3]@23 ~, b3 ~@11", // E5 C5 Bm Em7
  F: "[c4,e4,g4]@2 e4@3 e4@3 d4@3 d4, [e3,g3,b3]@23 ~", // C Em
  G: "[d4,f#4,a4]@4 a4@6 a4@2 g4@2 a#4 b4@3 a#4 b4@5, [f#3,a3,b3]@23 ~", // D B7
  H: "g#4 a4 g4@2 e4@2 g#5 a5 g5@2 e5@2 a4@2 g4@2 e4@2 a3@2 g3@2 e3@2, [f#3,b3]@23 ~, g3@5 ~", // B5
  I: "[g2,b2,d3,e3]@9 ~ [d#3,g3,b3]@13 ~", // Em7 D#aug
  J: "[[e4,b4]@4 ~@2 g4@4 f#5 g5@5 [g4,f#5]@6 [e3,f#3,a3,f#4,d5]@25 ~, [f#3,g3,b3]@7 ~@9, ~@2 d5@3 ~@19]/2", // E5 Gmaj7 D Gmaj7
  K: "[[e4,b4]@4 ~@2 g4@4 f#5 g5@5 [g4,f#5]@6 g#5 a5@5 g5@2 [a4,f#5]@4 g5@2 [a4,f#5]@2 e5@2 d5@2 d4@2 [d#3,f#4,b4]@4 [e4,b4]@4 ~@2 g4@4 f#5 g5@5 [g4,f#5]@6 [e3,f#3,a3,f#4,d5]@25 ~, [e3,g3,b3]@21 ~ f#3@46 ~@28, ~@4 d5@6 ~@12 a3@25 ~ [g3,b3]@21 ~@27, ~@22 e3@21 ~@9 d5@6 ~@38]/4", // E5 Gmaj7 D B E5 Gmaj7 D Em …
  L: "[[e4,b4]@4 ~@2 g4@4 f#5 g5@5 [g4,f#5]@6 d5 d#5@5 e5@2 d#5@4 e5@2 d#5@2 e5@2 d#5@2 e5@2 d#5@2 e5@2, [e3,g3,b3]@21 ~ [d#3,f#3,a3]@25 ~, ~@2 d5@3 ~@19]/2", // E5 Gmaj7 Em D#dim
  M: "~ e5@15 e4@2 f#4@4 g4@2, [f#3,g3,b3]@23 ~, [g4,b4]@2 ~", N: "f#4@4 g4@6 f#4@11 ~ f#4@2, [e3,f#3,a3]@23 ~",
  O: "[g4@4 f#4@2 g4@4 g4@6 f#4@6 ~@6 c4@2 b3@4 c4@2 b3@11 ~, [e3,g3,b3]@11 b3@3 ~@10, ~@24 [b2,e3,g3]@23 ~]/2", // Em
  P: "~ f#5@15 e4@2 f#4@2 g4@4, [f#3,g3,b3]@23 ~, [g4,b4]@2 ~", // Gmaj7 G
  Q: "[g4@2 f#4@4 g4@4 b4@6 e4@6 ~@6 f#4@2 f#4@2 g4@4 f#4@11 ~, [e3,g3,b3]@11 e4@3 ~@10, ~@24 [e3,g3,b3]@23 ~]/2", // Em
  R: "~@4 a4@2 a#4 b4@3 a4@2 [e4,b4]@4 [e4,b4]@6 a4@2, [b2,g3]@23 ~, ~@10 f#3@13 ~", // E5 Em
  S: "c#5 d5@3 d4@2 [a4,e5]@4 [b4,d5]@6 [f#4,b4]@6 a4@2, a3@23 ~, d3@9 ~ [d3,f#3]@13 ~", // A5 Bm B5 D
  T: "[c#5 d5@3 e4@2 [a4,e5]@4 [b4,f#5]@6 b4@2 c5@4 ~@8 b4@4 ~ g5@3 f#5@4 [c4,d5]@6, [g3,b3]@22 b4@8 ~@4 d5@7 ~@7, ~@10 e3@13 ~ [e3,g3,d4,g4]@9 ~ [d3,f#3,a4]@13 ~, ~@18 e4@6 b3@17 ~@7]/2", // A5 B5 Csus2 G Em7 D
  U: "~@4 a4@2 a#4 b4@3 a4@2 [g4,b4]@4 [e4,b4]@6 a4@2, [b2,g3]@23 ~, ~@10 f#3@13 ~", // G E5 Em
  V: "c#5 d5 a4@2 d4@2 [a4,e5]@2 d4@2 [b4,d5]@6 [f#4,b4]@6 a4@2, a3@23 ~, d3@9 ~ [d3,f#3]@13 ~", // A5 Bm B5 D
  W: "[c#5 d5 b4@2 e4@2 [a4,e5]@2 e4@2 [b4,f#5]@6 [g4,b4]@2 c5@4 ~@6 b4@6 ~ g5@3 f#5@4 [c4,f#4,d5]@6, [g3,b3]@22 b4@6 ~@7 d5@7 ~@6, ~@10 e3@13 ~ [e3,g3,d4,g4]@9 ~ [d3,f#3,a4]@13 ~, ~@18 e4@6 b3@17 ~@7, ~@35 f#5 ~@12]/2", // A5 B5 G D7 G Em7 D
  X: "~ e5 b4 ~@3 e5!3 g5@2 [d4,e5], [e3,g3,b3]@4 b3@17 ~@3, ~@4 g3@11 ~@9, ~@4 e3@6 e4@13 ~, ~@3 e5@3 ~@2 g4@4", // Dsus2 Em
  Y: "~ e5 b4 ~@3 e5!3 b5@2 [e3,g3,g5], [e3,g3,b3]@4 d4@11 ~ b3@8, ~@4 [g3,b3]@6 [e4,g4]@11 ~@3, ~ e5 ~@2", // Em G Em
  Z: "e5@2 e5@3 g5@3 f#5 e5@2 d5, [e3,g3,b3]@9 ~ [f#3,a3]@13 ~, ~@5 c4@4 d4@3", // Em F#m
  AA: "[~@2 e5@2 b4@2 [g4,e5]@4 b4@2 d#5 e5 e5@2 e5@2 g5@2 b4@2 d4@2 ~@2 e5@2 b4@2 e5@2 ~@4 d#5 e5 e5@2 e5@2 a#5 b5 b4@2 [e3,g3]@2 ~@2 e5@2 b4@2 e5@4 b4@2 d#5 e5 e5@2 e5@2 g5@4 [d4,e5]@2, [e3,g3,b3]@4 b3@17 ~ [b4,e5]@4 ~@6 b4@4 ~@10 [e5,g5]@4 ~@2 e3@6 e4@13 ~, ~@4 g3@11 ~ g4@8 ~@4 d4@11 ~ b3@8 [e3,g3,b3]@4 g3@11 ~ g4@8, ~@4 e3@6 e4@13 ~ [e3,g3,b3]@4 [g3,b3]@6 [e4,g4]@11 ~@7 b3@17 ~@3]/3", // C Em Dsus2 Em E5 Em G Em
  AB: "b5@2 e5@2 b4@2 b5@2 e5@2 [g5,d6]@6 a#5 b5 [b4,d#5,a5]@4 g5@2, [e3,g3,b3]@9 ~ a3@13 ~, ~@5 [f#3,c4]@4 [f#3,d#4]@3", // G5 B7 Em F#dim D#m
  AC: "~ [e5,b5]@5 e5@4 e5@6 d5@6 d5@2, [e3,g3,b3]@9 ~ [d3,g3,b3]@13 ~, c5@6 ~@4 g4@11 ~@3", // E5 Em G
  AD: "~ [f#5,b5]@5 e5@4 e5@5 f#5@7 f#5@2, [f#3,a3,b3]@9 ~ [f#3,a3,c4]@13 ~, d5@6 ~@4 a4@11 ~@3", // B5 B7 F#dim
  AE: "f#5@2 g5 f#5@2 g5 f#5@2 b4 b4@3, [f#3,g3,b3]@9 ~ [f#3,g3,d4]@13 ~", // Gmaj7
  AF: "~ [e5,b5] a#5@2 a5@2 g5@2 e5@2 [d4,f#4,c5]@2 ~@2 [b4,d5]@8 e5@2, [c3,e3,g3]@9 ~ [e3,g3]@13 ~, b4@2 ~@10 d4@11 ~", // E5 D7 Bm C Em
  AG: "[c5,e5,g5]@2 e5@3 e5@3 d5@3 d5, [e3,g3,b3]@9 ~ [d3,g3,b3]@13 ~", // C Em G
  AH: "[d5,f#5,a5]@4 a5@6 a5@2 g5@2 a#5 b5@3 a#5 b5@5, [f#3,a3]@23 ~, b3@9 ~ c4@13 ~", // D F#m
  AI: "a5 g5 ~@3 [f#3,g3,d4]@6 e5, [f#3,g3,b3]@3 ~@5, ~@4 e5@17 ~@3", // Gmaj7
  AJ: "b5@2 g5@2 e5@2 b5@2 e5@2 [g5,d6]@6 a#5 b5 [b4,d#5,a5]@4 g5@2, [e3,g3,b3]@9 ~ a3@13 ~, ~@5 [f#3,c4]@4 [g3,d#4]@3", // G5 B7 Em F#dim Cm
  AK: "~ [e5,b5]@5 e5@4 e5@6 d5@6 d5@2, [e3,g3,b3]@9 ~ [d3,g3,b3]@13 ~, c5@6 ~@4 [g4,b4]@11 ~@3", // E5 Em G
  AL: "~ [f#5,b5]@5 e5@4 e5@4 f#5@8 f#5@2, [f#3,a3,b3]@9 ~ [f#3,a3,c4]@13 ~, d5@6 ~@4 [f#4,a4]@11 ~@3", // B5 B7 F#dim F#m
  AM: "f#5@2 g5 f#5@2 g5 f#5@2 b4 [d4,g4,b4]@3, g4@5 d4@4 ~@3, [f#3,g3,b3,b4]@9 ~ [f#3,g3]@13 ~, ~@5 d5@3 ~@4", // G Gmaj7
  AN: "[c5,e5,g5]@2 [c5,e5]@3 e5@3 d5@3 d5, [e3,g3,b3]@9 ~ [d3,g3,b3]@13 ~, ~@4 g4@17 ~@3, ~@10 b4@11 ~@3", // C Em G
  AO: "[d5,f#5,a5]@4 g5@2 a5@2 g5@2 a5@2 g5@2 a#5 b5@3 a#5 b5@5, [f#3,a3]@23 ~, b3@9 ~ c4@13 ~", // D F#m
  AP: "g#5 a5 g5@2 e5@2 a4@2 g4@2 e4@2 a3@2 g3@2 e3@2 a2@2 g2@2 e2@2",
  AQ: "[~ [g3,b3,b4,e5]@46 ~, [b2,d3,f#4,g4]@47 ~]/2", // Em Gmaj7
})).s("gm_epiano1").gain(0.3)

// bass · electric bass pick · "Contrabaixo"
const bass = note(`<
  ~ A B C D A B E F G@2 H@2 G@2 I@2 J K L@2 J K L@2 M K N O M K N O P@3 Q P@3 Q R S T U R S V Q R S T U R W E X@2
>`.pickRestart({
  A: "c2", B: "d2", C: "e1", D: "e2@3 g1", E: "e2", F: "e1@5 b1@7",
  G: "[e2@3 ~@2 b1 e2@2 e2@3 d2@4 ~@2 a1 f#2@2 e2@2 d2@2]/2",
  H: "[c2@3 ~@2 g1 c2@2 c2@3 d2@4 ~@2 a1 f#2 a1 e2@2 b1@2]/2",
  I: "[c2@3 ~@2 g1 c2@2 c2@3 b1@4 ~@2 b1 b1@2 c#2@2 d#2@2]/2", J: "e2@5 e1@6 e2", K: "d2@5 a1@6 d2", L: "c2@5 g1@6 d2",
  M: "e2@5 b1@6 e2", N: "e2@5 b1@6 d2", O: "e2@5 b1@4 d2@3", P: "e1@2 e1 ~@9", Q: "c2@5 d2@4 b1@3",
  R: "c2@5 g1@4 c2 g1 c2", S: "d2@5 a1@4 d2 a1 d2", T: "e2@5 e1@4 e2 b1 g1", U: "a1@5 b1@4 b1 f#1 b1",
  V: "e2@5 e1@4 e1 g1 b1", W: "d2@5 a1@4 d2@3", X: "e1/2",
})).s("gm_electric_bass_pick").gain(0.3)

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

// drums · rim
const rim = s("rim").struct("<~@9 A@3 B A@3 B A@11 C A@3 D ~@25>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x ~@4 x ~@3", D: "~@3 x ~@4 x ~@2 x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@8 A ~@3 B ~@3 B ~@16 C@3 D C@3 D@4 E D@3 F D@3 E D E ~@3>".pickRestart({
  A: "~@3 x", B: "~ x", C: "x", D: "~ x ~ x", E: "~ x ~@2", F: "x!2 ~ x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@9 A B A C A B A C B D@3 B D@11 ~@3 E ~@3 E ~@3 F ~@3 G ~@3 H ~@5>".pickRestart({
  A: "~@2 x!2 ~ x!2 ~ x!2 ~@2", B: "~@2 x!2 ~ x!2 ~ x!2 ~ x", C: "~@2 x!2 ~ x ~@3 x ~@2", D: "x ~ x!2 ~ x!2 ~ x!2 ~ x",
  E: "~ x ~@2 x ~", F: "~@2 x!2 ~@2 x ~@5", G: "~@2 x", H: "~ x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@3 B ~@3 B ~@16 C@3 A C@3 A ~@3 D ~@3 E ~@3 F ~ G ~@3>".pickRestart({
  A: "~@11 x", B: "~@4 x!2", C: "~ x ~@4", D: "~ x ~", E: "~@2 x ~@7 x!2", F: "~ x!2 ~@3", G: "~@3 x",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A ~ A ~ A ~ A ~ B ~@3 B ~@22 B ~@7 B ~@5>".pickRestart({
  A: "x ~@10 x", B: "x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@3 B ~@20 C@3 A C@3 A ~@7 D ~@3 E ~ F ~@3>".pickRestart({
  A: "~@5 x", B: "~@7 x ~@4", C: "~ x ~@4", D: "~ x ~@2 x ~@7", E: "~ x ~@10", F: "~@5 x ~@6",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@33 A@3 ~ A@3 ~ B@3 C B@3 ~ D E B C B F ~@3>".pickRestart({
  A: "~@5 x ~@2 x ~@2 x", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x", C: "~@9 x ~ x", D: "~@2 x!2 ~ x!2 ~ x!2 ~ x",
  E: "x ~ x!2 ~ x!3 ~ x ~ x", F: "~ x ~@4",
})).gain(0.3)

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

stack(epiano1, bass, kick, rim, snare, hihat, mid_tom, open_hat, high_tom, ride, china)