Strudelify

Mi manchi

Berte

KeyD majorTempo108 bpm
0:00/0:00
// Mi manchi — Berte
// 108 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/4)

// 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 · fretless bass
const bass = note(`<
  ~@4 A B@2 A C@3 D A B@2 A C@3 D A B@2 A C@3 D A B@2 E F G@2 H C@2 I J F G@2 F C@2 B K F G L B A C D B A C D A B@2 E A
  B@2 A C@3 D A B@2 A C@3 D A B@2 E F G@2 H C@2 I J F G@2 F C@2 B K F G L B A C D B A C D B A C D B A C D B A C M
>`.pickRestart({
  A: "d1@5 ~ d1 ~ d1@8", B: "d1@5 ~ d1 ~ d1@7 ~", C: "g1@5 ~ g1 ~ g1@7 ~", D: "g1@5 ~ g1 ~ g1@4 a1@4",
  E: "d1@5 ~ d1 ~ f#1@2 a1@2 f#1@2 d1@2", F: "c2@5 ~ c2 ~ c2@8", G: "c2@5 ~ c2 ~ c2@7 ~",
  H: "c2@5 ~ c2 ~ c2@4 c2@2 f#1@2", I: "d1@5 ~ d1 ~ d1@4 d2@4", J: "d1@5 ~ d1 ~ b1@2 d2@2 b1@2 g1@2",
  K: "d1@5 ~ d1 ~ d1@4 g1@2 d2@2", L: "c2 ~@2 f#2", M: "g1@5 ~@11",
})).s("gm_fretless_bass").gain(0.64)

// chords · pad poly
const pad_poly = note(`<
  ~@8 A@4 B@16 C@4 D@4 E@2 F@2 D@4 E@2 F@2 G@3 H@4 I@4 C@4 B@16 C@4 D@4 E@2 F@2 D@4 E@2 F@2 G@3 H@4 I@4 H@8 J@4
>`.pickRestart({
  A: "[f#4 e4 f#4 e4, b3@63 ~, g3@31 ~ g3@32]/4",
  B: "[e4@16 d4@16 e4@16 d4@16 f#4@16 e4@16 f#4@16 e4@15 ~, [f#3,a3]@64 b3@63 ~, d3@31 ~ d3@96, ~@64 g3@31 ~ g3@32]/8", // F#m
  C: "[e4 d4 e4 d4, [f#3,a3], d3@31 ~ d3@32]/4", D: "[c4,e4,g4,b4]/4", E: "[a4 g4, [b3,d4]@31 ~]/2", F: "[a3,d4,f#4]/2",
  G: "[d4 ~@5 c4@10 d4@6 c4@10 d4@4 ~@12, g4@3 ~, e4@17 ~@7]/3", H: "[[f#3,a3]@8 [g3,b3]@7 a3, d4@63 ~]/4",
  I: "[[f#3,a3]@8 ~@7 a3, d4, ~ [g3,b3]]/4", J: "[[f#3,a3]@32 [g3,b3]@25 ~@7, d4@47 ~@17]/4",
})).s("gm_pad_poly").gain(0.36).pan(0.4)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@4 A@3 B@2 A B@2 C D@2 E@2 D E@2 C D@2 E@2 D E@2 C D@2 F G H@2 I J K E@2 G H@2 I J K E@2 L K M C D K J E D J@2 N O
  N@2 P O Q R S O T N S T@2 N@2 O N@3 O N@2 G H@2 I J K E@2 G H@2 I J K E@2 L K M N O N@3 O N@3 O U V W X Y N W X Y Z
>`.pickRestart({
  A: "d2 ~ d2@2 ~@2 d2 ~ d2 ~ d2@2 ~@4", B: "d2 ~ d2@2 ~@2 d2 ~ d2 ~ d2@3 ~@3", C: "~@2 d3@2 ~@2 d3 ~ d3 ~ d3@2 ~@4",
  D: "d3 ~ d3@2 ~@2 d3 ~ d3 ~ d3@2 ~@4", E: "d3 ~ d3@2 ~@2 d3 ~ d3 ~ d3@3 ~@3",
  F: "d3 ~ d3@2 ~@2 d3 ~ f#3 ~ a3@3 ~ d3 ~", G: "~@2 c3@2 ~@2 c3 ~ c3 ~ c3@2 ~@4",
  H: "c3 ~ c3@2 ~@2 c3 ~ c3 ~ c3@2 ~@4", I: "c3 ~ c3@2 ~@2 c3 ~ c3 ~ c3@3 ~@3", J: "g3 ~ g3@2 ~@2 g3 ~ g3 ~ g3@3 ~@3",
  K: "g3 ~ g3@2 ~@2 g3 ~ g3 ~ g3@2 ~@4", L: "~@2 g3@2 ~@2 g3 ~ g3 ~ g3@2 ~@4", M: "g3 ~@15",
  N: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,d4] a3 [a3,d4]@2 ~", // D5
  O: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,d4] ~@2 a3 ~", // D5
  P: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~@3 a3 [a3,d4]@2 ~", Q: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 d4 ~@4",
  R: "~@2 [a3,d4] ~@2 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,d4] a3 [a3,d4]@2 ~", // D5
  S: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,d4] ~@4", T: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~@7",
  U: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,d4,f#4] a3 [a3,d4]@2 ~", // D5 D D5
  V: "~@2 [a3,d4] ~ a3 d4@2 a3 [a3,d4] ~ a3 [a3,d4] a3 [a3,d4]@2 ~", // D5
  W: "~@2 [a3,d4] ~ a3 [a3,f#4]@2 a3 [a3,d4] ~ a3 [a3,d4] a3 [a3,d4]@2 ~", // D5 D D5
  X: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,f#4] ~@2 a3 ~", // D5 D
  Y: "~@2 [a3,d4] ~ a3 [a3,d4]@2 a3 [a3,d4] ~ a3 [a3,f#4] a3 [a3,d4]@2 ~", Z: "~@2 [a3,d4] ~ a3 ~@11",
})).s("gm_electric_guitar_muted").gain(0.43).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@32 A@4 B@4 C@4 D@4 E@3 ~@28 F G@2 H A@4 B@4 C@4 D@4 E@3 ~@20>".pickRestart({
  A: "[b5@3 a5 b5 a5 b5 a5 b5@3 a5 b5@3 a5, [c4,e5]]/4", B: "[a5@3 g5@13 a5@16, d5, b3@2 f#4 ~]/4",
  C: "[b5@3 a5 b5 a5 b5 a5 ~@3 a5 b5@3 [a2,a5], e5, c4@9 b2@5 ~@2, ~@8 b5@3 ~@5]/4", // A
  D: "[a5@3 g5@13 a5@16, d5, g2@2 f#4 ~]/4", E: "[e5@3 d5@5 e5@3 d5@7 ~@6, [e4,g4]@3 ~]/3", F: "e4",
  G: "[~@2 [a4,f#5] [e4,a4,g5], d4@3 ~]/2", H: "[d5,a5]@2 [a4,f#5] [a4,a5], d4@15 ~",
})).s("gm_string_ensemble_2").gain(0.31).pan(0.3)

// other · pad halo
const pad_halo = note("<A@8 ~@114>".pickRestart({
  A: "d2/8",
})).s("gm_pad_halo").gain(0.06)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@7 B A@7 B A@7 B A@11 B A@7 B A@2 C A@7 B A@11 B A@7 B A@11 B A@7 B A@2 C A@7 B A@11 D
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x ~@9 x!3 ~@3", D: "x",
})).gain(0.59)

// drums · snare
const snare = s("sd").struct("<~@3 A B@7 C B@38 D B@50 D B@19 E>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "~@2 x ~ x!3 ~", D: "x ~@2 x", E: "~ x ~@2",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@8 B A@6 C A@7 C B A@3 D E@6 F D E@6 F D E G B A@6 C B A@3 B A@6 C A@7 C B A@3 D E@6 F D E@6 F D E G B A@6 C H I
  J K B C A C B C A L
>`.pickRestart({
  A: "x!8", B: "~ x!7", C: "x!7 ~", D: "~ x!4 ~ x!2", E: "x!5 ~ x!2", F: "x!5 ~ x ~", G: "~@3 x",
  H: "~@2 x ~ x ~ x ~ x!3 ~ x ~ x ~", I: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", J: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
  K: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", L: "x!3 ~@5",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@27 B ~@18 C ~@11 B ~@19 B ~@18 C ~@20>".pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@10 x!2 ~@4",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@19 A ~@7 A ~@4 B@7 C B@7 C B@2 ~@20 A ~@7 A ~@4 B@7 C B@7 C B@2 ~@8 A ~@5 A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@5 x ~ x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@27 B ~@30 B ~@19 B ~@39>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@19 A ~@7 A ~@10 A ~@7 A ~@3 A ~@19 A ~@7 A ~@10 A ~@7 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.37)

// drums · high tom
const high_tom = s("ht").struct("<~@31 [~ x] ~@30 [~ x] ~@19 [~ x] ~@39>").gain(0.52)

// drums · tambourine
const tambourine = s("tb").struct("<~@57 [~@3 x!13] [x!8 ~@8] ~@63>").gain(0.22)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@57 [x!3 ~@13] ~@64>").gain(0.07)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@3
  [~@7 x]
  [x!2 ~ x!3 ~ x]!46
  [x ~@4 x ~@2]
  [x!2 ~ x!3 ~ x]!50
  [x ~@4 x ~@2]
  [x!2 ~ x!3 ~ x]!19
  [x!2 ~@6]
>`).gain(0.22)

stack(
  bass, pad_poly, electric_guitar_muted, string_ensemble_2, pad_halo, kick, snare, hihat, low_tom, open_hat, mid_tom,
  crash, high_tom, tambourine, tambourine_soft, shaker
)

More by Berte