Strudelify
Mona cover art

Herzblut

Mona

Roy Black

KeyG majorTempo114 bpm
0:00/0:00
// Mona — Roy Black
// 114 bpm, 6/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 138 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(114/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass
const bass = note(`<
  A B A C D B E F A B A B A G H F C I J K D H B L A B A B A G H F C I J K D H B L A B A B A B H M N B H B H B A O A B A
  B A B D P D B A J Q B A R D B S T A B A B A G H F C I J K D H B L A B A B A B H M N B H B H B A O A B A B A B D P D B
  A J Q B A U V F H F H B A B A C D B W@2
>`.pickRestart({
  A: "g2@17 ~@3 g2@4", B: "d2@9 ~ d2@2", C: "b1@9 ~ b1@2", D: "c2@9 ~ c2@2", E: "g2@12 b1@4 c2@3 ~ c#2@4", F: "d2@7 ~",
  G: "d2 e2", H: "a1@9 ~ a1@2", I: "f#2@9 ~ f#2@2", J: "e2@9 ~ e2@2", K: "b1@4 ~ b1", L: "e2@4 f#2@3 ~", M: "d2@4 ~ d2",
  N: "a1@7 ~@3 a1@2", O: "d2@12 e2@7 ~ f#2@4", P: "g1@17 ~@3 g1@4", Q: "c2@17 ~@3 c2@4", R: "g2 ~@11 e2@10 ~@2",
  S: "g2@9 ~ d2@2", T: "e2 f#2", U: "g2@6 d2@5 ~", V: "a1@17 ~@3 a1@4", W: "[g2@12 d2@7 ~ g1@19 ~@9]/2",
})).s("gm_acoustic_bass").gain(0.54)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A@3 B C D A D A B A B E F G H I@2 F J K G H@2 A B A B E F G H I@2 F J K G H@2 ~@36 A B A B E F G H I@2 F J K G H@2
  ~@38 A@3 B C D ~@2
>`.pickRestart({
  A: "~@6 [b3,d4,g4] ~@5", B: "~@6 [b3,d4,f#4] ~@5", C: "~@6 [g3,c4,e4] ~@5", D: "~@6 [a3,c4,d4,f#4] ~@5",
  E: "~@4 [b3,d4,g4] ~@3", F: "~@3 [g3,b3,e4] ~@2", G: "~@4 [a3,c4,e4] ~@3", H: "~@3 [a3,c4,d4,f#4] ~@2",
  I: "~@4 [b3,d#4,f#4] ~@3", J: "~@4 [g3,b3,e4] ~@3", K: "~@4 [g3,c4,e4] ~@3",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.2)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  A@3 B C D A E A B A B A B F G H@2 I@2 C J E@2 A B A B A B F G H@2 I@2 C J E@2 ~@36 A B A B A B F G H@2 I@2 C J E@2
  ~@38 A@3 B C D K ~
>`.pickRestart({
  A: "g3 ~@3 b3 ~ d4 ~ g4 ~@3 b4 ~@3 g4 ~@3 d4 ~@3", B: "b3 ~@3 d4 ~ f#4 ~ b4 ~@3 d5 ~@3 b4 ~@3 f#4 ~@3",
  C: "c4 ~@3 e4 ~ g4 ~ c5 ~@3 e5 ~@3 c5 ~@3 g4 ~@3", D: "d4 ~@3 f#4 ~ a4 ~ c5 ~@3 f#5 ~@3 d5 ~@3 a4 ~@3",
  E: "d4 ~@3 f#4 ~ a4 ~ c5 ~@3 d5 ~@3 c5 ~@3 a4 ~@3", F: "a3 ~@3 c4 ~ e4 ~ a4 ~@3 c5 ~@3 a4 ~@3 e4 ~@3",
  G: "d4 ~@3 f#4 ~ a4 ~ c5 ~@3 f#5 ~@3 c5 ~@3 a4 ~@3", H: "b3 ~@3 d#4 ~ f#4 ~ b4 ~@3 d#5 ~@3 b4 ~@3 f#4 ~@3",
  I: "e3 ~@3 g3 ~ b3 ~ e4 ~@3 g4 ~@3 e4 ~@3 b3 ~@3", J: "a3 ~@3 c4 ~ e4 ~ g4 ~@3 c5 ~@3 g4 ~@3 e4 ~@3", K: "g3 ~@23",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.8)

// chords · piano
const piano = note(`<
  ~@40 A@6 B C B D B D B D A@6 E@2 F@3 D A G F D A E F D A@2 ~@16 A@6 B C B D B D B D A@6 E@2 F@3 D A G F D A E B D B D
  B D ~@8
>`.pickRestart({
  A: "[b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3", // G
  B: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3", // Am
  C: "[a4,d5,f#5] ~@3 [a4,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5] ~@3, ~@10 f#5 ~", // D D7
  D: "[a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3", // D7
  E: "[f4,g4,b4,d5] ~@3 [f4,g4,b4,d5] ~@3 [f4,g4,b4,d5] ~@3 [f4,g4,b4,d5] ~@3 [f4,g4,b4,d5] ~@3 [f4,g4,b4,d5] ~@3", // G7
  F: "[g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3", // C
  G: "[g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,b4] ~@3, ~@10 e5 ~", // Em G
})).s("gm_piano").gain(0.44)

// other · electric guitar jazz
const electric_guitar_jazz = note("<A B C B C D E F ~@122 A B C B C D G@2>".pickRestart({
  A: "g4@13 ~@3 f#4@4 g4@4", B: "f#4@15 ~ e4@4 f#4@4", C: "g4@4 f#4 g4", D: "b4 a4", E: "g4@3 b3 c4 c#4", F: "d4@5 ~",
  G: "[g4@12 [a#3,d4,g4,a#4]@7 ~ [g3,d4,g4,b4]@22 ~@6]/2", // Gm G
})).s("gm_electric_guitar_jazz").gain(0.6)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@3 B C D E D F G F G F H I@2 J@2 K@2 L M N@2 F G F G F H I@2 J@2 K@2 L M N@2 O@6 P@2 Q@2 M R M R S@2 T@4 U@4 V@2 F W
  X@2 Y Z@3 AA@2 F G F G F H I@2 J@2 K@2 L M N@2 O@6 P@2 Q@2 M R M R S@2 T@4 U@4 V@2 F W X@2 Y AB M AC M R M R A@3 B C D
  AD ~
>`.pickRestart({
  A: "[b3,g4]/3", B: "[b3,f#4]", C: "[g3,e4]@7 ~", D: "[a3,d4]", E: "[b3,g4]", F: "[b3,d4,g4]", G: "[b3,d4,f#4]@23 ~",
  H: "[b3,d4,f#4]@11 ~ [g3,b3,e4]@11 ~", I: "[[c4,e4]@21 ~@3 [c4,d4,f#4]@22 ~@2, a3@15 ~]/2",
  J: "[~ b4, [b3,d#4,f#4]@15 ~]/2", K: "[[g3,b3,e4]@47 ~]/2", L: "[g3,c4,e4]@23 ~", M: "[a3,c4,e4]@23 ~",
  N: "[[a3,c4,d4,f#4]@47 ~]/2", O: "[[b3,d4,g4]@143 ~]/6", P: "[[a3,e4]@23 ~ [a3,d4,f#4]@24, c4@47 ~]/2",
  Q: "[[a3,e4]@23 ~ [a3,d4,f#4]@23 ~, c4@47 ~]/2", R: "[a3,c4,d4,f#4]@23 ~", S: "[[b3,d4,g4]@47 ~]/2",
  T: "[[b3,d4,g4]@47 ~]/4", U: "[[f3,b3,d4]@47 ~ [c4,e4]@47 ~, g3@95 ~]/4",
  V: "[[g3,e4]@11 ~ [a3,d4,f#4]@12, c4@47 ~]/2", W: "[g3,b3,e4]@11 ~",
  X: "[[g3,e4]@22 ~@2 [a3,d4,f#4]@23 ~, c4@47 ~]/2", Y: "[b3,g4], d4@7 ~",
  Z: "[[f3,b3,d4]@24 e4@22 ~@2 [a3,d4,f#4]@23 ~, g3@47 ~@25, ~@12 c4@23 ~]/3", AA: "[b3,d4,g4]/2", AB: "[f3,g3,b3,d4]",
  AC: "[a3,c4,f#4]@11 ~, d4@19 ~@5", AD: "[b3,d4,g4]@5 ~@7",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.6)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@40 A B C@2 D B E@2 F G F G F H I J K@2 C@2 L M N@2 O P Q R S T U@2 S T U@2 ~@16 A B C@2 D B E@2 F G F G F H I J K@2
  C@2 L M N@2 O P Q R S T U@2 V@2 W X Y@3 ~@7
>`.pickRestart({
  A: "d5@2 e5@3 f#5", B: "f#5@2 g5@2 f#5 e5", C: "[b5@47 ~]/2", D: "d5@4 e5@5 f#5@3", E: "[c6@23 ~]/2", F: "d6",
  G: "b5@12 a5@11 ~", H: "b5@18 a5@5 ~", I: "~@5 g6 f#6 f6 e6 d#6 d6 c#6, d6@5 ~",
  J: "c6 b5 a#5 a5 g#5 g5 f#5 f5 e5 d#5 d5@2", K: "[d5@8 e5@12 f#5@12 g5@8 f#5@3 ~ e5@4]/2", L: "d6@8 c6@11 ~ b5@4",
  M: "b5@5 e6", N: "[d6@8 c6@4 c6@33 ~@3]/2", O: "e6@4 d6 e6", P: "d6@8 c6@15 ~", Q: "d6@16 c6@3 ~ b5@4",
  R: "a5@7 ~ g5@16", S: "c6@12 b5@7 ~ c6@4", T: "b5@16 ~@2 d5@5 ~", U: "[g5@47 ~]/2",
  V: "[c6@12 b5@7 c6@4 b5@8 a5@15 ~@2]/2", W: "c6@11 b5@7 ~ c6@4 ~", X: "b5@7 a5@14 ~@3",
  Y: "[c6@11 b5@7 ~ c6@4 d6@12 ~ d5@8 g5@28]/3",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B@2 ~
>`.pickRestart({
  A: "x ~@4 x", B: "x",
})).gain(0.54)

// drums · snare
const snare = s("sd").struct("<[~ x]!136 ~@2>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@71 [~@4 x!2] ~@51 [~@4 x!2] ~@14>").gain(0.54)

// drums · hihat
const hihat = s("hh").struct("<[x!6]!40 ~@36 [x!6]!16 ~@38 [x!6]!6 x ~>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@15 B ~@15 B ~@15 B ~@15 C ~@19 B ~@15 B ~@15 C ~@14>".pickRestart({
  A: "~@4 x!2", B: "~@3 x!3", C: "~@2 x!2 ~@2",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@5 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@15 B ~@15 B ~@15 B ~@15 C ~@19 B ~@15 B ~@15 C ~@14>".pickRestart({
  A: "~@2 x!3 ~ x ~@5", B: "~@2 x!3 ~@7", C: "~@2 x!2 ~@8",
})).gain(0.54)

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

// drums · ride
const ride = s("rd").struct("<~@40 [x!6]!36 ~@16 [x!6]!38 ~@6 [~ x] ~>").gain(0.54)

stack(
  bass, electric_guitar_clean, electric_guitar_muted, piano, electric_guitar_jazz, string_ensemble_1,
  string_ensemble_1_2, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)

More by Roy Black