Strudelify

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: edit a riff to change every repeat.

// bass · acoustic bass
const bass = note(`<
  A B A C D B E F G B G B A H I J K L M N O I B P G B G B A H I J K L M N O I B P Q R G S G S I T U S V S V S G W G S G
  B A B X Y X B A Z AA R A AB O S AC AD G B G B A H I J K L M N O I B P Q R G S G S I T U S V S V S G W G S G B A B X Y
  X B A Z AA R A AE AF AG V AH V B A B A C D B AI@2
>`.pickRestart({
  A: "g2@9 ~ g2@2", B: "d2@9 ~ d2@2", C: "b1@17 ~@3 b1@4", D: "c2@18 ~@2 c2@3 ~", E: "g2@12 b1@4 c2@3 ~ c#2@4",
  F: "d2@11 ~", G: "g2@17 ~@3 g2@4", H: "d2 e2", I: "a1@9 ~ a1@2", J: "d2@7 ~", K: "b1@9 ~ b1@2", L: "f#2@9 ~ f#2@2",
  M: "e2@9 ~ e2@2", N: "b1@4 ~ b1", O: "c2@9 ~ c2@2", P: "e2@4 f#2@3 ~", Q: "g2@15 ~@5 g2@3 ~", R: "d2@4 ~ d2",
  S: "d2@17 ~@3 d2@4", T: "d2@15 ~@5 d2@4", U: "a1@7 ~@3 a1@2", V: "a1@17 ~@3 a1@4", W: "d2@12 e2@7 ~ f#2@4",
  X: "c2@17 ~@3 c2@4", Y: "g1@17 ~@3 g1@4", Z: "e2@17 ~@3 e2@4", AA: "c2@15 ~@5 c2@3 ~", AB: "g2 ~@11 e2@10 ~@2",
  AC: "g2@9 ~ d2@2", AD: "e2 f#2", AE: "g2@6 d2@5 ~", AF: "a1@15 ~@5 a1@4", AG: "d2@5 ~", AH: "d2@19 ~@5",
  AI: "[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 E D E F E G H I J K L@2 I M N J K@2 E F E G H I J K L@2 I M N J K@2 ~@36 E F E G H I J K L@2 I M N J K@2
  ~@38 A@3 B C D ~@2
>`.pickRestart({
  A: "~@12 [b3,d4,g4] ~@11", B: "~@12 [b3,d4,f#4] ~@11", C: "~@6 [g3,c4,e4] ~@5", D: "~@6 [a3,c4,d4,f#4] ~@5",
  E: "~@6 [b3,d4,g4] ~@5", F: "~@6 [b3,d4,f#4] ~@5", G: "~@4 [b3,d4,f#4] ~@3", H: "~@4 [b3,d4,g4] ~@3",
  I: "~@3 [g3,b3,e4] ~@2", J: "~@4 [a3,c4,e4] ~@3", K: "~@3 [a3,c4,d4,f#4] ~@2", L: "~@4 [b3,d#4,f#4] ~@3",
  M: "~@4 [g3,b3,e4] ~@3", N: "~@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 E B D A@5 F G@2 H@3 I A J K D L G K M A N ~@16 A@6 B C B D B E B D A@5 F G@2 H@3 I A J K D L G O M
  P 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: "[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] ~@3, ~@10 f#5 ~", // D7
  F: "[b4,d5,g5] ~@3 [b4,d5] ~@3 [b4,d5,g5] ~@3 [b4,d5] ~@3 [b4,d5,g5] ~@3 [b4,d5] ~@3, ~@2 g5 ~@3 g5 ~@3 g5 ~", // G Bm G Bm G Bm
  G: "[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
  H: "[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
  I: "[a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5,f#5] ~@3 [a4,c5,d5] ~@3, ~@4 a4 ~@5 f#5 ~", // D7
  J: "[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
  K: "[g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5,e5] ~@3 [g4,c5] ~@3, ~@10 e5 ~", // C C5
  L: "[b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5] ~@3, ~@10 g5 ~", // G Bm
  M: "[a4,c5,d5] ~@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, f#5 ~@11", // D7
  N: "[b4,d5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5,g5] ~@3 [b4,d5] ~@3 [b4,d5,g5] ~@3, g5 ~@7 g5 ~@3", // Bm G Bm G
  O: "[c5,e5] ~@3 [c5,e5] ~@3 [a4,c5,e5] ~@3 [c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5]@2 ~@2, a4@2 ~@2 a4@2 ~@6 a4@2 ~@6 e5 ~@3", // C Am C Am
  P: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [c5,e5] ~@3, ~@10 a4 ~", // Am C
})).s("gm_piano").gain(0.44)

// other · electric guitar jazz
const electric_guitar_jazz = note("<A B C D E F G H ~@122 A B C D E F I@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: "f#4@4 e4 f#4", E: "g4@16 f#4@3 ~ g4@4",
  F: "b4 a4", G: "g4@3 b3 c4 c#4", H: "d4@5 ~", I: "[g4@12 [a#3,d4,g4,a#4]@7 ~ [g3,d4,g4,b4]@22 ~@6]/2",
})).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 S T@2 U@4 V@4 W@2 X Y
  Z@2 AA AB@3 AC@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 S T@2 U@4 V@4 W@2 X Y Z@2 AA AD AE AF M R AE R A@3
  B C D AG ~
>`.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@23 ~]/2", R: "[a3,c4,d4,f#4]@23 ~", S: "[a3,c4,d4,f#4]",
  T: "[[b3,d4,g4]@47 ~]/2", U: "[[b3,d4,g4]@47 ~]/4", V: "[[f3,b3,d4]@47 ~ [c4,e4]@47 ~, g3@95 ~]/4",
  W: "[[g3,e4]@22 ~@2 [a3,d4,f#4]@23 ~, c4@47 ~]/2", X: "[b3,d4,g4]@23 ~", Y: "[g3,b3,e4]@11 ~",
  Z: "[[g3,e4]@22 ~@2 [a3,d4,f#4]@23 ~, c4@23 ~]/2", AA: "[b3,g4], d4@7 ~",
  AB: "[[f3,b3,d4]@12 e4@11 ~ [a3,d4,f#4]@11 ~, g3@47 ~@25, ~@12 c4@23 ~]/3", AC: "[b3,d4,g4]/2", AD: "[f3,g3,b3,d4]",
  AE: "[a3,c4,e4]@11 ~", AF: "[a3,c4,f#4]@11 ~, d4@19 ~@5", AG: "[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 E F@2 G H G I G J K L M@2 N@2 O P Q@2 R S T U V W X@2 V W X@2 ~@16 A B C@2 D E F@2 G H G I G J K L M@2
  N@2 O P Q@2 R S T U V W X@2 Y@2 Z AA AB@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: "f#5@7 ~ g5@8 f#5@3 ~ e5@4",
  F: "[c6@23 ~]/2", G: "d6", H: "b5@12 a5@11 ~", I: "b5 a5", J: "b5@18 a5@5 ~",
  K: "~@5 g6 f#6 f6 e6 d#6 d6 c#6, d6@5 ~", L: "c6 b5 a#5 a5 g#5 g5 f#5 f5 e5 d#5 d5@2",
  M: "[d5@8 e5@12 f#5@12 g5@8 f#5@3 ~ e5@4]/2", N: "[b5@23 ~]/2", O: "d6@8 c6@11 ~ b5@4", P: "b5@5 e6",
  Q: "[d6@8 c6@4 c6@33 ~@3]/2", R: "e6@4 d6 e6", S: "d6@8 c6@15 ~", T: "d6@16 c6@3 ~ b5@4", U: "a5@7 ~ g5@16",
  V: "c6@12 b5@7 ~ c6@4", W: "b5@16 ~@2 d5@5 ~", X: "[g5@47 ~]/2", Y: "[c6@12 b5@7 c6@4 b5@8 a5@15 ~@2]/2",
  Z: "c6@11 b5@7 ~ c6@4 ~", AA: "b5@7 a5@14 ~@3", AB: "[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