Strudelify

T'appartengo

Ambra

KeyB♭ majorTempo87 bpm
0:00/0:00
// T'appartengo — Ambra
// 87 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 73 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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 · electric bass finger
const bass = note(`<
  A@4 B C D E F G B C D E ~@3 H I J K L M N O P Q R S T U V W V W V W V W V W ~@3 H I J K L M N O P Q R S ~@4 H I J K L
  M N O P Q R S ~
>`.pickRestart({
  A: "[[g1,g2] ~ [g1,g2] ~@6 [g1,g2] ~ [g1,g2]@10 [d1,d2]@2 ~ [f1,f2] ~ [f1,f2] ~@6 [f1,f2] ~ [f1,f2]@10 [d1,d2]@2 [f1,f2], ~@23 [g1,g2]@2 ~@23]/2", // G D F D F G
  B: "[g1,g2] ~ [g1,g2] ~@6 [g1,g2] ~ [g1,g2]@9 ~ [eb1,eb2] [f1,f2] [g1,g2]", // G Eb F G
  C: "[f1,f2] ~ [f1,f2] ~@6 [f1,f2] ~ [f1,f2]@10 [c1,c2] [d1,d2] [f1,f2]", // F C D F
  D: "[g1,g2] ~ [g1,g2] ~@6 [g1,g2] ~ [g1,g2]@10 [eb1,eb2] [f1,f2] [g1,g2]", // G Eb F G
  E: "[f1,f2]@2 [f1,f2] ~@6 [f1,f2] ~ [f1,f2]@10 [c1,c2] [d1,d2] [f1,f2]", // F C D F
  F: "[g1,g2] ~ [g1,g2] ~@2 [g1,g2] [g1,g2]@2 ~ [g1,g2] ~ [g1,g2]@2 ~ [g1,g2] [eb1,eb2]@3 [f1,f2]@3 [g1,g2]@3", // G Eb F G
  G: "[f1,f2] ~ [f1,f2] ~@2 [f1,f2] [f1,f2]@2 ~ [f1,f2] ~ [f1,f2]@2 ~ [f1,f2] [c1,c2]@3 [d1,d2]@3 [f1,f2]@2 ~", // F C D F
  H: "bb1 ~@2 bb1 ~@2 bb1 ~@2 eb2@3 ~@2 eb2 eb1@2 ~ eb1 ~ eb2 eb1@2 ~",
  I: "g2 ~@2 g2 ~@2 g2 ~@2 f2@4 ~ f2 f1@2 ~ f1 ~ f2 f1@2 ~",
  J: "d2 ~@2 d2 ~@2 d2 ~@2 eb2@4 ~ eb2 eb1@2 ~ eb1 ~ eb2 eb1@2 ~",
  K: "f2 ~@2 f2 ~@2 f2 ~@2 f2@4 ~ f2 f1@2 ~ f1 ~ f2 f1@2 ~",
  L: "g2 ~@2 g2@2 ~ g2@2 ~ eb2@4 ~ eb2 eb1@2 ~ eb1@2 eb2 eb1@3", M: "f2 ~@2 f2@2 ~ f2 ~@2 f2@4 ~ f2 f1@3 f1@2 f2 eb2@3",
  N: "d2 ~@2 d2 ~@2 d2 ~@2 eb2@4 ~ eb2 eb1@3 eb1@2 eb2 eb1@3", O: "f2@2 ~ f2@2 ~ f2 ~@2 f2@4 ~ f2 f1@2 ~ f1@2 f2 eb2@3",
  P: "g2@2 ~ g2@2 ~ g2 ~@2 eb2@5 eb3 eb2@2 ~ eb2@2 eb3 eb2@2 ~",
  Q: "[bb0,bb1]@2 ~ [bb0,bb1]@2 ~ [bb0,bb1]@2 ~ f2@5 f3 f2@2 ~ f2@2 f3 f2@3", // Bb
  R: "g2 ~@2 g2 ~@2 g2@2 ~ eb2@5 eb3 eb2@2 ~ eb2@2 eb3 eb2@3",
  S: "[bb0,bb1]@2 ~ [bb0,bb1]@2 ~ [bb0,bb1]@2 ~ f2@5 f3 f2@2 ~ f2@2 f3 f2@2 ~", // Bb
  T: "[g1,g2]@2 [g2,g3]@3 g2 [g2,g3]@3 [g1,g2]@2 [g2,g3]@3 [g2,g3] [eb1,eb2]@2 ~ [f1,f2]@2 ~ [g1,g2]@2 ~, ~@5 g1@2 ~@17", // G Eb F G
  U: "[f1,f2]@2 [f2,f3]@3 [f1,f2] [f2,f3]@3 [f1,f2]@2 [f2,f3]@3 [c1,c2,f2,f3] [c2,c3]@2 ~ [d2,d3]@2 ~ [f2,f3]@2 ~", // F F5 C D F
  V: "[g1,g2]@2 [g2,g3]@3 [g1,g2] [g2,g3]@3 [g1,g2]@2 [g2,g3]@2 ~ [g2,g3] [eb1,eb2]@2 ~ [f1,f2]@2 ~ [g1,g2]@2 ~", // G Eb F G
  W: "[f1,f2]@2 [f2,f3]@3 [f1,f2] [f2,f3]@3 [f1,f2]@2 [f2,f3]@2 ~ [c1,c2] [c2,c3]@2 ~ [d2,d3]@2 ~ [f2,f3]@2 ~", // F C D F
})).s("gm_electric_bass_finger").gain(0.32)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A B A B C D C E A B C D C E ~@3 F G H I J K J L F G H M A B C D C E A B A B A B ~@3 F G H I J K J L F G H M N O N P F
  G H M J K J Q F G H M ~
>`.pickRestart({
  A: "[g3,bb3,d4]@11 ~ [g3,bb3,eb4]@11 ~", B: "[f3,a3,c4]@11 ~ [f3,a3,eb4]@11 ~", C: "[g3,bb3,d4]",
  D: "c4 eb4, [f3,a3]", E: "c4@12 eb4@11 ~, [f3,a3]@23 ~", F: "[f3,d4]@8 ~ [g3,eb4]@13 ~@2, bb3@23 ~",
  G: "d4@9 [a3,c4]@14 ~, f4@23 ~, bb3@7 ~@17", H: "[f3,d4]@8 ~ [g3,eb4]@13 ~@2, bb3@23 ~, g3 ~@23",
  I: "[bb3,f4]@7 ~@2 [a3,c4,f4]@12 ~@3, d4@3 ~@5", J: "[bb3,d4,f4]@3 [bb3,eb4,g4]@5", K: "[bb3,d4,f4]@3 [a3,c4,f4]@5",
  L: "[bb3,d4,f4]@9 [a3,c4,f4]@14 ~", M: "[bb3,f4]@7 ~@2 [a3,c4,f4]@12 ~@3, d4@3 ~@5, g4 ~@23",
  N: "[bb3,d4,bb4], g3@11 ~", O: "a4 g4 f4 ~@3 c5@2, a3, f3@11 ~, c4@9 c4@14 ~",
  P: "a4@3 g4@3 f4@3 c5@14 ~, [f3,a3,c4]@23 ~", Q: "[bb3,d4]@8 ~ [a3,c4]@13 ~@2, f4@23 ~",
})).s("gm_synth_strings_1").gain(0.18)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@17 A B A B A B A B A B A B ~@15 A B A B A B A B A B A B ~@17>".pickRestart({
  A: "[bb4,d5] ~ d5!2 ~ d5 [bb4,d5] ~ [bb4,d5] [bb4,eb5] ~ eb5!2 ~ eb5!2 ~ [bb4,eb5] [bb4,eb5]@2 eb5!2 ~ eb5", // Bb Eb5
  B: "[bb4,d5] ~ d5!2 ~ [bb4,d5]!2 ~ d5 [a4,c5] ~ c5 [a4,c5] ~ c5 [a4,c5] ~ [a4,c5]!2 ~ c5 [a4,c5] ~ c5", // Bb Am
})).s("gm_electric_guitar_clean").gain(0.13)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@17 A B A B A B A B A B A B ~@15 A B A B A B A B A B A B ~@17>".pickRestart({
  A: "~@2 bb4!2 ~ bb4 ~@5 bb4!2 ~ bb4!2 ~@5 bb4 ~ bb4", B: "~@3 bb4 ~@4 bb4 ~@2 a4 ~@2 a4 ~@5 a4 ~@3",
})).s("gm_electric_guitar_clean").gain(0.06)

// other · lead 5 charang
const lead_5_charang = note("<~@59 A B C D E F G H I J K L M ~>".pickRestart({
  A: "~@20 f4 bb4@2 c5", B: "d5@6 d5 c5 bb4 eb5@6 bb4@5 ~ bb4@2 c5",
  C: "d5@6 ~ c5 bb4 c5@6 f4@4 ~ f4 bb4@2 c5, ~@3 d5 ~@8", D: "d5@5 ~ d5 c5 bb4 eb5@6 bb4@5 ~ bb4@2 ~",
  E: "f5@6 eb5@2 d5 c5@12 d5@2 f5", F: "f5@3 d5 f5 f5@2 d5 ~ g5@5 f5 eb5@4 ~@2 bb5 ~ bb5",
  G: "bb5 ~ bb5!2 ~ bb5!2 ~ bb5 a5@5 g5 f5@3 ~@2 g5 bb5@2 g5",
  H: "bb5@2 g5 bb5@2 g5 bb5@2 g5 bb5@5 g5 f5@3 ~@3 bb5@2 ~", I: "d6@5 ~ d6 c6 bb5 c6@9 bb4@2 ~@4",
  J: "f5@9 bb4@8 ~ g5@6", K: "f5@3 eb5@3 d5 [d5,eb5] c5@9 ~ bb4@4 ~@2", L: "f5@9 bb4@8 ~ c5@6",
  M: "d5@3 eb5@3 d5@2 eb5 c5@5 ~ bb4@3 a4@6, ~@9 d5 ~@14",
})).s("gm_lead_5_charang").gain(0.25)

// other · synth brass 2
const synth_brass_2 = note("<~@29 A B A C A D A C A D A C ~@32>".pickRestart({
  A: "bb3", B: "a3@3 g3@3 f3@3 c3@14 ~", C: "a3 g3 f3 c3@3 c4@2", D: "a3@3 g3@3 f3@3 c3@9 c4@5 ~",
})).s("gm_synth_brass_2").gain(0.17)

// chords · piano
const piano = note("<~@4 A B A B ~@2 A B A B ~@59>".pickRestart({
  A: "[bb4,d5] ~@3", B: "[a4,c5] ~ eb5 ~",
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct("<[x ~@8 x ~ x ~@3 x ~@8]!56 ~@4 [x ~@8 x ~ x ~@3 x ~@8]!12 ~>").gain(0.61)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~@2 x ~@2 x ~@18]!56 ~@4 [~@2 x ~@2 x ~@18]!12 ~>").gain(0.34)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!56 [~@3 x]!4 [~ x ~ x]!12 ~>").gain(0.2)

// drums · snare
const snare = s("sd").struct("<A@16 B A@26 B A@12 ~@3 C A@12 ~>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@11 x ~ x!4", C: "~@21 x!3",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@14 [x ~@10 x ~@12]!3 ~@24 [x ~@10 x ~@12]!3 ~@28 x>").gain(0.27)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@14 [~@5 x ~@2]!3 ~@24 [~@5 x ~@2]!3 ~@29>").gain(0.14)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~@3 x]!56 ~@4 [~ x ~ x ~@3 x]!12 ~>").gain(0.54)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~@3 x]!56 ~@4 [~@3 x]!12 ~>").gain(0.07)

// drums · open hat
const open_hat = s("oh").struct("<[~@5 x ~@2]!56 ~@4 [~@5 x ~@2]!12 ~>").gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@26 A ~@12 A ~@2 A ~@3 A ~@3 A ~@4>".pickRestart({
  A: "x",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct(`<
  [x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x]!56
  ~@3
  [x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x]!13
  ~
>`).gain(0.34)

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

// drums · bongos
const bongos = s("bongo:4").struct("<[~ x ~@5 x ~ x ~@2]!56 ~@3 [~ x ~@5 x ~ x ~@2]!13 ~>").gain(0.54)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@14
  [~@6 x!2 ~@4]!2
  [~@7 x ~ x ~@2]
  ~@24
  [~@6 x!2 ~@4]!2
  [~@7 x ~ x ~@2]
  ~@29
>`).gain(1.3)

// drums · shaker
const shaker = s("sh").struct("<~@58 [x!8]!2 ~@13>").gain(0.41)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@58 [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!2 ~@13>").gain(0.2)

stack(
  bass, synth_strings_1, electric_guitar_clean, electric_guitar_clean_2, lead_5_charang, synth_brass_2, piano, kick,
  kick_soft, clap, snare, low_tom, low_tom_soft, hihat, hihat_soft, open_hat, crash, tambourine, tambourine_soft,
  bongos, agogo_bells, shaker, shaker_soft
)

More by Ambra