Strudelify

Ritmo vitale

Ambra

KeyC minorTempo123 bpm
0:00/0:00
// Ritmo vitale — Ambra
// 123 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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(`<
  ~@10 A B A C A B A C A B A B A C A B A B A C D E A F D E G H A B A C A B A C ~@2 I@3 F I@3 F I@3 F D E A F D E A F D E
  G H A B A C A B A C D J A C D J K@2 L@4 M@2 N@2 D J A C D J O@2 ~@8 D J A C D J A C ~
>`.pickRestart({
  A: "c2@3 ~ c2@2 ~ c2 eb2 ~ eb2 ~ eb2@2 f2@2", B: "c2@3 ~ c2@3 c2 eb2 ~ eb2 ~ eb2@2 f2@2",
  C: "c2@3 ~ c2@3 c2 c3@2 b2@2 bb2@2 eb2@2", D: "g1@3 ~ g1@2 ~ g1!2 ~ g1 ~ g1@2 bb1@2",
  E: "f1@3 ~ f1@2 ~ f1!2 ~ f1 ~ f1@2 f1@2", F: "c2@3 ~ c2@2 ~ c2 c3@2 b2@2 bb2@2 eb2@2", G: "eb1@15 ~",
  H: "eb1 eb2 eb1 eb2", I: "c2@3 ~ c2@2 ~ c2!2 ~ c2 ~ c2@2 bb1@2", J: "f1@3 ~ f1@3 f1!2 ~ f1 ~ f1@2 bb1@2",
  K: "[eb1@18 bb2 c3 eb3@4 eb2 d2 c2 ~ eb1@4, ~@27 bb1@2 ~@3]/2", L: "[g1@63 ~]/4", M: "[g1@31 ~]/2",
  N: "[eb1@27 eb1 eb2 bb1 eb1@2]/2", O: "[eb1@3 ~]/2",
})).s("gm_fretless_bass").gain(0.64)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@10 A@2 B@2 A@2 B@2 ~@4 A@2 ~@4 B@2 C D E@2 F D G@2 H@8 ~@4 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 ~@8 H@8 I@4 J@2 K@2 L@3 ~ M@2
  N@2 O@4 J@2 P@2 Q@4 R@3 S T@8 ~
>`.pickRestart({
  A: "[bb2@2 c3@2 eb3@2 c3 ~ eb3@5 ~ bb2@4 c3@2 eb3@2 c3 ~ f3@4 f3@2 ~@2]/2",
  B: "[bb2@2 c3@2 eb3@2 c3 ~ eb3@5 ~ bb2@4 c3@2 eb3@2 c3 ~ eb3@4 eb3@2 ~@2]/2", C: "~ [g4,d5]@15", D: "~ f4@15",
  E: "[~ c5@3 ~@3 g4@25, ~ e4@31, ~ c5@7]/2", F: "~ g4@15", G: "[~@7 g4@25, ~ eb4@31, ~ bb4@7]/2",
  H: "[[c4,bb4,eb5]@14 ~@2 [bb4,d5]@14 ~@2 [a4,c5]@15 ~ [a4,c5]@16, ~@15 c4@14 ~@2 c4@15 ~ c4@17]/4", // Cm7 Bb Am
  I: "[[g3,bb4,d5]@7 ~ [a4,c5]@7 ~ [a4,c5]@16, ~@15 f3@14 ~@2 c4@32 ~]/4", // Gm Am
  J: "[[g3,bb4,d5]@7 ~ [a4,c5]@7 ~, ~@15 f3@14 ~@3]/2", K: "[eb4,bb4,eb5]/2", L: "[~ d5@45 ~@2, [g3,bb4]@15 ~]/3",
  M: "[~@2 c5@2 bb4@4 ~@8 [f4,a4]@15 ~, g3@31 ~, bb4 ~@15, ~ d5@29 ~@2]/2", N: "[[eb3,bb3]@31 ~]/2",
  O: "[[g3,bb4,d5]@7 ~ [a4,c5]@7 ~ [e4,c5]@16, ~@15 f3@14 ~@2 c4@32 ~]/4", P: "[[eb4,bb4,eb5]@31 ~]/2",
  Q: "[~ c5@63, [c4,g4]@63 ~]/4", R: "[~ c5@46 ~, [c4,g4]@47 ~]/3", S: "~ c5@15, [g4,bb4]",
  T: "[[g3,bb4,d5]@7 ~ [a4,c5]@7 ~ a4@8 g4@8, ~@15 f3@14 ~@2 c4@32 ~, ~@32 c5@31 ~]/4", // Gm Am
})).s("gm_overdriven_guitar").gain(0.48).pan(0.7)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@30 A B C ~ D B E ~@55 F ~@28>".pickRestart({
  A: "bb4", B: "~ c5@15, a4", C: "g4@3 ~@5", D: "~ d5@15, bb4", E: "~ bb4@3 ~@12, g4@3 ~@5", F: "~@4 bb4 c5 bb4 c5",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.7)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@10 A B C@2 A B C@2 ~@4 A B ~@4 A B ~@8 D@8 ~@14 E F G@2 E F G@2 E F H@2 D@8 I@4 J@2 K@2 L M N@2 L M O@2 P@4 J@2 Q@2
  ~@8 R@8 ~
>`.pickRestart({
  A: "eb5", B: "d5", C: "c5/2", D: "[eb5 d5 c5@2, [c4,g4]]/4", E: "[g3,bb4,d5]", F: "[f3,a4,c5]", G: "[g3,c4,c5]/2",
  H: "[[eb3,bb4,eb5]@7 ~]/2", I: "[[d4,d5] c5 [a4,c5]@2, g4 ~, ~@16 c4@47 ~]/4", J: "[[d4,d5] [c4,c5], g4]/2",
  K: "[eb3,bb4,eb5]/2", L: "[d4,g4,bb4,d5]", M: "[c4,f4,a4,c5]", N: "[c4,e4,g4,c5]/2", O: "[eb2,bb3,g4,d5]/2",
  P: "[[d4,d5] c5 [g4,c5]@2, g4 ~, ~@16 c4@47 ~]/4", Q: "[[eb3,bb4,eb5]@31 ~]/2",
  R: "[[d4,d5] c5 a4 g4, g4 c5, ~@16 c4@47 ~]/4", // D
})).s("gm_string_ensemble_1").gain(0.48)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@18 A B C@2 ~@2 A B C@2 ~@20 A B C@2 A B C@2 A B C@2 ~@61>".pickRestart({
  A: "eb5", B: "d5", C: "c5/2",
})).s("gm_string_ensemble_1").gain(0.16)

// other · pad sweep
const pad_sweep = note(`<
  ~@104
  [c4@2 eb4@2 bb4@2 c4@2 eb4@2 bb4@2 eb4@2 c4 ~]
  [c4@2 eb4@2 bb4@2 c4@2 eb4@2 bb4@2 eb4 ~ c4 ~]
  [c4@2 eb4@2 a4@2 c4@2 eb4@2 a4@2 eb4@2 c4 ~]!2
  [c4@2 eb4@2 bb4@2 c4@2 eb4@2 bb4@2 eb4@2 c4 ~]
  [c4@2 eb4@2 bb4@2 c4@2 eb4@2 bb4@2 eb4 ~ c4 ~]
  [c4@2 eb4@2 a4@2 c4@2 eb4@2 a4@2 eb4@2 c4 ~]!2
  ~@9
>`).s("gm_pad_sweep").gain(0.4)

// chords · percussive organ
const percussive_organ = note("<~@10 A@8 ~@4 A@2 ~@4 A@2 B C D@2 B C E@2 ~@22 B C D@2 ~@4 B C E@2 ~@49>".pickRestart({
  A: "[bb2@2 c3@2 [g4,c5]@2 c3 ~ g4@4 f4@2 bb2@4 c3@2 [g4,c5]@2 c3 ~ [g4,c5]@4 ~@4, ~@4 c5@3 ~@9]/2", B: "[g5,bb5]",
  C: "[f5,a5]@15 ~", D: "[g5,c6]/2", E: "[eb5,bb5]/2",
})).s("gm_percussive_organ").gain(0.48)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<~@104 A@2 B@2 A@2 B@2 ~@9>".pickRestart({
  A: "[c4,eb4,bb4]/2", B: "[c4,eb4,a4]/2",
})).s("gm_percussive_organ").gain(0.16)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@10 A@2 B@2 A@2 B@2 ~@4 A@2 ~@4 B@2 C D E@2 C D F@2 G H G H G H G H ~@4 A@2 ~@2 B@2 ~@2 A@2 ~@2 B@2 I@2 J@2 C D K@2 G
  H G H G H G H L M G H L M N@2 ~ O P Q R S T U S@2 V@2 S@2 W@2 ~@8 L M G H L M G H ~
>`.pickRestart({
  A: "[bb2@2 c3@2 eb3@2 c3 ~ eb3@5 ~ bb2@4 c3@2 eb3@2 c3 ~ f3@4 f3@2 ~@2]/2",
  B: "[bb2@2 c3@2 eb3@2 c3 ~ eb3@5 ~ bb2@4 c3@2 eb3@2 c3 ~ eb3@4 eb3@2 ~@2]/2", C: "[bb4,d5,g5]@15 ~",
  D: "[a4,c5,f5]@15 ~", E: "[c5@3 ~@3 g4@25 ~, e5@31 ~, g4@3 ~@13, ~@3 c5@28 ~]/2",
  F: "[bb4@3 ~@3 g4@25 ~, eb5@31 ~, g4@3 ~@13, ~@3 bb4@28 ~]/2",
  G: "[g4,c5] ~@2 [g4,c5] ~ [g4,c5] c4 ~ [g4,c5]@2 ~ [g4,c5] ~@4", // C5
  H: "[g4,c5] ~@2 [g4,c5] ~ g4 c4 ~ [g4,c5]@2 ~ [g4,c5] ~@4", // C5
  I: "[[d4,g4,bb4]@15 ~ [f4,a4]@3 [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a4]!2 ~@2 [c4,f4,a4]@6, ~@15 c4@3 ~@14]/2", // Gm F
  J: "[~ c5@31, [c4,a4]]/2", K: "[bb4@3 ~@3 g4@22 ~@4, eb5@7 ~, g4@3 ~@13, ~@3 bb4@26 ~@3]/2",
  L: "[g4,d5] ~@2 [g4,d5] ~ [g4,d5] d4 ~ [g4,d5]@2 ~ [g4,d5] ~@4", // G5
  M: "[f4,c5] ~@2 [f4,c5] ~ f4 c4 ~ [f4,c5]@2 ~ [f4,c5] ~@4", N: "[eb3,bb3]/2", O: "~ d4", P: "d4", Q: "~ c5", R: "bb4",
  S: "a4@15 ~", T: "c5@4 eb5 c5@3", U: "eb5@2 c5@5 ~ f5@8", V: "[a4@31 ~]/2", W: "[[bb4,eb5]@31 ~]/2",
})).s("gm_distortion_guitar").gain(0.56).pan(0.3)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@91 A ~@12 B C D@2 B C D@2 ~@9>".pickRestart({
  A: "d4 ~", B: "[eb4,bb4]@2 c4!2 [eb4,bb4]@2 c4!2 [eb4,bb4] ~ c4!2 [eb4,bb4]@2 c4!2",
  C: "[eb4,bb4]@2 c4!2 [eb4,bb4]@2 c4!2 [eb4,bb4]@2 c4!2 [eb4,bb4] ~ c4!2", // Eb5
  D: "[eb4,a4]@2 c4!2 [eb4,a4]@2 c4!2 [eb4,a4]@2 c4!2 [eb4,a4]@2 c4!2", // Ebdim
})).s("gm_distortion_guitar").gain(0.32).pan(0.3)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@10 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@3 A B@3 ~@2 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@3 A B@3 A B@3 A B@3 ~@7 C A B@3 A B@3 ~@7 D A B@3 A B@3 ~
>`.pickRestart({
  A: "~@7 x ~@8", B: "~@7 x ~@7 x", C: "~@7 x ~@5 x ~@2", D: "~@10 x!2 ~@2 x!2",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<A B A B A B A B A B A@110 ~>".pickRestart({
  A: "~@6 x ~@2 x ~@6", B: "~@6 x ~@2 x ~ x ~ x ~@2",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@10 B A@3 B A@3 B A@3 B A B A@3 B A B A B A B A B A B A@3 B A@5 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@3
  B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 ~
>`.pickRestart({
  A: "x ~ x ~ x ~@2 x ~@2 x ~ x ~ x ~", B: "~@2 x ~ x ~@2 x ~@2 x ~ x ~ x ~",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@38 A B@3 A B@3 ~@26 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 ~
>`.pickRestart({
  A: "~ x!15", B: "x!16",
})).gain(0.48)

// drums · splash
const splash = s("cr").struct(`<
  ~@10 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct("<~@10 [~@3 x ~@7 x ~@4]!28 ~@8 [~ x ~ x]!2 [~@3 x ~@7 x ~@4]!24 ~@16 [x!4]!8 ~@25>")
  .gain(1.26)

// drums · congas
const congas = s("conga:13").struct("<~@38 A@8 B@2 ~@24 A@16 C@8 A@8 ~@8 A@8 D>".pickRestart({
  A: "~@3 x!2 ~@11", B: "~ x ~@2", C: "x ~@2 x ~@12", D: "x ~ x ~@8 x!2 ~@3",
})).gain(1.54)

// drums · congas
const congas_2 = s("conga:18").struct("<~@38 A@8 B@2 ~@24 A@16 C@8 A@8 ~@8 A@8 D>".pickRestart({
  A: "~@9 x!3 ~@4", B: "x!4 ~@8 x ~@3", C: "~@4 x ~@3 x!4 ~@4", D: "~@3 x!2 ~ x ~@7 x ~",
})).gain(1.54)

// drums · congas
const congas_3 = s("conga:33").struct("<~@38 A@8 B@2 ~@24 A@16 C@8 A@8 ~@8 A@8 D>".pickRestart({
  A: "~@6 x!2 ~@4 x!4", B: "~@7 x ~ x ~ x ~@4", C: "~@12 x!4", D: "~@7 x!4 ~@5",
})).gain(1.54)

// drums · shaker
const shaker = s("sh").struct("<~@10 [x!8]!28 ~@10 [x!8]!24 ~@49>").gain(0.8)

// drums · triangle
const triangle = s("triangles:30").struct("<~@3 [~@9 x!3 ~@4] ~@117>").gain(4.88)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@3 [~@2 x!2] ~@117>").gain(4.88)

stack(
  bass, overdriven_guitar, overdriven_guitar_soft, string_ensemble_1, string_ensemble_1_soft, pad_sweep,
  percussive_organ, percussive_organ_soft, distortion_guitar, distortion_guitar_soft, kick, snare, snare_soft, hihat,
  open_hat, tambourine, splash, bongos, congas, congas_2, congas_3, shaker, triangle, triangle_2
)

More by Ambra