Strudelify

Le ragazze

Carboni

KeyG majorTempo130 bpm
0:00/0:00
// Le ragazze — Carboni
// 130 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(130/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.

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@6 A B C B C B C B C B C B C B C D A B C B C B C B C B ~@2 A B C E A B C B C B C B C B C B C B F@2 G@3 F@2 G@3 F@2
  G@3 ~ A B C E A B C B C B C B C B C B C B C E A B C B C B C B C B C B C B F@2 G@3 F@2 G@3 F@2 H@4 I@2 J@3 I@2 J@3 I@2
  J@3 ~ I@2 J@3 I@2 J@3 I@2 K@4 ~
>`.pickRestart({
  A: "[g3,b3]@5 ~@7 [g3,c4]@4", B: "[a3,d4]@5 ~@7 [g3,c4]@4", C: "b3@5 ~@7 [g3,c4]@4, g3 ~@15", D: "[a3,d4]@5 ~@11",
  E: "[a3,d4] ~@15", F: "[d4@16 e4@15 ~, [g4,b4]@31 ~]/2", G: "[[d4,a4] d4 [e4,g4], f#4@2 ~, ~@16 b3@31 ~]/3",
  H: "[[d4,a4] d4 [e4,g4]@2, f#4 ~, ~ b3@3]/4", I: "[e4@16 f#4@15 ~, [a4,c#5]@31 ~]/2",
  J: "[[e4,b4] e4 [f#4,a4], g#4@2 ~, ~@16 c#4@31 ~]/3", K: "[[e4,b4] e4 [f#4,a4]@2, g#4 ~, ~@16 c#4@31 ~@17]/4",
})).s("gm_synth_strings_1").gain(0.42).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@32 B ~@15 C D
>`.pickRestart({
  A: "d3 ~ d3 ~@5", B: "f#3@15 ~", C: "[f#3,f#4]@7 ~", D: "[f#3,c#4,f#4] ~@7",
})).s("gm_distortion_guitar").gain(0.51)

// chords · marimba
const marimba = note(`<
  ~@28 A B C ~@13 A B D E F ~@3 G H I J K G H I J K G H I J K L ~@10 A B C ~@13 A B D E F ~@3 G H I J K G H I J K G H I
  J K L M N O P Q M N O P Q M N O P Q R M N O P Q M N O P Q M N O P Q R ~
>`.pickRestart({
  A: "g5 [b4,g5]!10 b4 ~@4", B: "~@2 [d5,f#5] ~@2 [d5,f#5] ~@2 [d5,f#5] ~@2 [d5,f#5] ~@2 [c5,e5] ~",
  C: "[b4,d5]!13 ~@3", D: "b4 [b4,d5]!12 d5 ~@2", E: "~@2 [a4,d5] ~@2 [a4,d5] ~@2 [a4,d5] ~@2 [a4,d5] ~@2 [g4,c5] ~",
  F: "[b4,g5] b4 g5 [b4,g5] b4 [b4,g5] ~@10", // Em
  G: "[g4,b4] ~ [g4,b4] ~ d4 ~ [g4,b4] ~ [g4,b4] ~ d4 ~ [g4,b4] ~ [g4,b4]@2", // G
  H: "~@2 [g4,b4] ~ e4 ~ [g4,b4] ~ [g4,b4] ~ e4 ~ [g4,b4] ~ [g4,b4] ~", // G
  I: "[f#4,a4] ~ [f#4,a4] ~ d4 ~ [f#4,a4] ~ [f#4,a4] ~ d4 ~ [f#4,a4] ~ d4 ~", // F#m
  J: "[f#4,a4] ~ [f#4,a4] ~ d4 ~ [f#4,a4] ~ [d4,f#4] ~ b3 ~ [d4,f#4] ~ b3 ~", // F#m D
  K: "[e4,g4] ~ [e4,g4] ~ b3 ~ [e4,g4] ~ [e4,g4] ~ b3 ~ [e4,g4] ~ b3 ~", // Em
  L: "~@2 [e4,g4] ~ [e4,g4] ~ b3 ~ [e4,g4] ~ b3 ~ [e4,g4] ~ [e4,g4] ~", // Em
  M: "[a4,c#5] ~ [a4,c#5] ~ e4 ~ [a4,c#5] ~ [a4,c#5] ~ e4 ~ [a4,c#5] ~ [a4,c#5]@2", // A
  N: "~@2 [a4,c#5] ~ f#4 ~ [a4,c#5] ~ [a4,c#5] ~ f#4 ~ [a4,c#5] ~ [a4,c#5] ~", // A
  O: "[g#4,b4] ~ [g#4,b4] ~ e4 ~ [g#4,b4] ~ [g#4,b4] ~ e4 ~ [g#4,b4] ~ e4 ~", // G#m
  P: "[g#4,b4] ~ [g#4,b4] ~ e4 ~ [g#4,b4] ~ [e4,g#4] ~ c#4 ~ [e4,g#4] ~ c#4 ~", // G#m E
  Q: "[f#4,a4] ~ [f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4] ~ c#4 ~ [f#4,a4] ~ c#4 ~", // F#m
  R: "~@2 [f#4,a4] ~ [f#4,a4] ~ c#4 ~ [f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4] ~", // F#m
})).s("gm_marimba").gain(0.47).pan(0.6)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A B A C A B A ~ A B A ~ A B A ~ A B A C A B A ~ A B A ~ A B A ~ A B A C A B A ~ A B A ~ A B A ~ A B D E F G H D E
  F G H D E F G H@2 A B A C A B A ~ A B A ~ A B A ~ A B A C A B A ~ A B A ~ A B A ~ A B D E F G H D E F G H D E F G H@2
  I J K L M I J K L M I J K L M N I J K L M I J K L M I J K L M N ~
>`.pickRestart({
  A: "[g2,g3,g4] [g2,d3,g3,d4] [g2,g3,g4] ~@5", B: "[a2,d3,a3,d4]!3 ~@5", C: "[a2,d3,a3,d4] ~@7", D: "d4, g3@7 ~",
  E: "[c4,g4]@15 ~", F: "[a3,f#4]@15 ~", G: "[b3,f#4]@15 ~", H: "[e3,b3]@15 ~", I: "e4, a3@7 ~", J: "[d4,a4]@15 ~",
  K: "[b3,g#4]@15 ~", L: "[c#4,g#4]@15 ~", M: "[f#3,c#4]@15 ~", N: "c#4@7 ~",
})).s("gm_overdriven_guitar").gain(0.42).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  ~@3 A B ~ C D E F G ~ E H G ~ E H G ~ I J K L M N O P Q R O P Q R S T S U O P Q R O P Q R O P Q R O P V W X Y Z V W X
  Y Z V W X Y AA@2 AB AC AD ~ K L M N O P Q R O P Q R S T S U O P Q R O P Q R O P Q R O AE V W X Y Z V W X Y Z V W X Y
  AA@2 AF AG AH AI AJ AF AG AH AI AJ AF AG AH AI AK@2 AF AG AH AI AJ AF AG AH AI AJ AF AG AH AI AK@2 AL
>`.pickRestart({
  A: "~@3 [c2,c3]@5", B: "~@3 [g1,g2]", C: "[g1,g2]@7 ~@9", D: "[d1,d2] ~ [d1,d2] ~ [d1,d2]@2 ~@10", E: "[g1,g2]!3 ~@5",
  F: "[d1,d2] ~ [d1,d2] ~ [d1,d2] ~ [d1,d2] ~@3 [c1,c2]@5 ~", G: "[g1,g2]@7 ~ [g1,g2] ~@7",
  H: "[d1,d2] ~ [d1,d2] ~ [d1,d2] ~ [d1,d2]@2 ~@2 [c1,c2]@5 ~", // D C
  I: "[g1,g2]@2 [g1,g2] ~ [g1,g2]@2 [d1,d2] [g1,g2] ~ [g1,g2] [d1,d2] ~ [g1,g2]@4", J: "[e1,e2] ~@7",
  K: "[g2,g3]@3 ~@3 [c2,c3] [g1,g2]", L: "[d1,d2]!3 ~@5", M: "[g1,g2]@6 ~@6 [c2,c3]@3 ~", N: "[d2,d3]@3 ~@5",
  O: "[g2,g3]@7 [g2,g3] ~@4 [c2,c3]@2 [g1,g2]@2", P: "[d2,d3] ~ [d2,d3] ~ [d2,d3]@2 ~@6 [c2,c3] ~ [c2,c3]@2",
  Q: "[g1,g2] ~ [g1,g2] ~ [g1,g2]@2 ~@6 [c2,c3]@2 [g1,g2]@2", // G C G
  R: "[d1,d2] ~ [d1,d2] ~ [d1,d2]@4 ~@4 [c2,c3] ~ [c2,c3]@2", S: "[g1,g2] ~ [g1,g2] ~ [g1,g2] ~@7 [c2,c3]@3 ~",
  T: "[d2,d3] ~ [d2,d3] ~ [d2,d3] ~@5 [c2,c3] ~ [c2,c3]@2 [b1,b2]@2", U: "[d2,d3] ~@7",
  V: "[g1,g2] ~ [g1,g2] ~@3 [g1,g2]@9 ~", W: "[c2,c3] ~ [c2,c3] ~@3 [c2,c3]@10", X: "[d2,d3] ~ [d2,d3] ~@3 [d2,d3]@9 ~",
  Y: "[b1,b2] ~ [b1,b2] ~@3 [b1,b2]@9 ~", Z: "[e1,e2]@2 [e1,e2] ~ [e1,e2] ~ [e1,e2]@6 [e2,e3]@4",
  AA: "[[e1,e2]@6 [f#1,f#2]@6 [g1,g2]@6 [a1,a2] ~ [a1,a2]@2 [a#1,a#2]@2 [b1,b2]@2 [d2,d3]@2 [d#2,d#3]@2 [e2,e3]@2]/2", // E F# G A A# B D D# …
  AB: "[g1,g2] ~@3", AC: "~@6 [a2,a3] [a2,a#2,a3,a#3] [g2,g3]@2 [e2,e3]@2 [d2,d3]@2 [b1,b2] ~",
  AD: "~@2 [g1,g2] ~ [g1,g2] ~ [g1,g2] ~ [g1,g2]@3 ~ [d2,d3]@4", AE: "[d2,d3] ~ [d2,d3] ~ [d2,d3]@2 [d2,d3]@10",
  AF: "[a1,a2] ~ [a1,a2] ~@3 [a1,a2]@9 ~", AG: "[d2,d3] ~ [d2,d3] ~@3 [d2,d3]@10",
  AH: "[e2,e3] ~ [e2,e3] ~@3 [e2,e3]@9 ~", AI: "[c#2,c#3] ~ [c#2,c#3] ~@3 [c#2,c#3]@9 ~",
  AJ: "[f#1,f#2]@2 [f#1,f#2] ~ [f#1,f#2] ~ [f#1,f#2]@6 [f#2,f#3]@4", // F#
  AK: "[[f#1,f#2]@6 [g#1,g#2]@6 [a1,a2]@6 [b1,b2] ~ [b1,b2]@2 [c2,c3]@2 [c#2,c#3]@2 [e2,e3]@2 [f2,f3]@2 [f#2,f#3]@2]/2", // F# G# A B C C# E F …
  AL: "[f#1,f#2]@3 ~@5", // F#
})).s("gm_electric_bass_finger").gain(0.68)

// chords · bagpipe
const bagpipe = note("<~@38 A B ~@2 C ~@3 C ~@41 A B ~@2 C ~@3 C ~@54>".pickRestart({
  A: "[g4,b4]@5 [e4,a4] [d4,g4]@2", B: "a3 ~@3, d4 ~@15", C: "[b4,d5]@10 [g4,b4]@2 [e4,a4]@3 ~",
})).s("gm_bagpipe").gain(0.32).pan(0.7)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@6 A ~@15 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~ A ~@19 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~ A ~@15 B ~@15 B ~@4 B ~@10 C
>`.pickRestart({
  A: "[g4,b4,d5]@3 [a4,c5] e4 [c4,d4] b3 ~@9, ~@3 g4@2 ~@11, ~@2 f4 ~@5", // G Am Csus2
  B: "[a4,c#5,e5]@3 [b4,d5] f#4 [d4,e4] c#4 ~@9, ~@3 a4@2 ~@11, ~@2 g4 ~@5", // A Bm Dsus2
  C: "[f#4,c#5,f#5]@3 [d5,f5] d#4 [c#4,d4] f#3 ~@9, ~@3 c5@2 ~@11, ~@2 e4 ~@5", // F#5 Dm Dmaj7
})).s("gm_synth_brass_1").gain(0.37)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@9 A ~@3 A ~@7 B ~@3 A ~@3 A ~@3 A ~@3 B ~@3 A ~@3 A ~@3 A ~@21 B ~@3 A ~@3 A ~@3 A ~@3 B ~@3 A ~@3 A ~@3 A ~@51
>`.pickRestart({
  A: "[d3,f#3,a3,d4]!3 ~@5", B: "[d3,f#3,a3,d4] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.38).pan(0.4)

// other · string ensemble 2
const string_ensemble_2 = note("<~@118 A B C D B A B C D B A B C D B E F G H I G F G H I G F G H I J@3>".pickRestart({
  A: "e4@3 g#4@3 a4@2", B: "f#4@3 g#4@3 a4@2", C: "b4@3 a4@3 g#4@2", D: "e4@3 f#4@3 g#4@2", E: "~@2 b4@6 c#5@4 e5@3 ~",
  F: "e5@3 g#5@3 a5@2", G: "f#5@3 g#5@3 a5@2", H: "b5@3 a5@3 g#5@2", I: "e5@3 f#5@3 g#5@2", J: "[f#5@17 ~@7]/3",
})).s("gm_string_ensemble_2").gain(0.57).pan(0.4)

// other · pad new age
const pad_new_age = note(`<
  ~@57 A B C ~@2 A B C ~@42 A B C ~@2 A B C ~@8 D E F ~@2 D E F ~@8 D E F ~@2 D E F ~@4
>`.pickRestart({
  A: "~@8 d6@3 ~ c6@3 ~", B: "b5@12 g5@3 ~", C: "a5@13 ~@3", D: "~@8 e6@3 ~ d6@3 ~", E: "c#6@12 a5@3 ~", F: "b5@13 ~@3",
})).s("gm_pad_new_age").gain(0.63).pan(0.3)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@6 A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A ~ A ~ A ~@2 A ~ A ~@2 A ~ A ~@7 A@3 ~ A@3 ~
  A@3 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@3 A ~ A ~@2 A ~ A ~@2 A ~ A ~@3 A ~ A ~@2 A ~ A ~@2 A ~ A ~@3 A ~ A ~@2 A ~ A ~@2 A ~ A
  ~@4
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.38)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@6 A@15 ~ A@15 ~ A@14 B@4 A B@4 A B@5 A ~@4 A@15 ~ A@14 B@4 A B@4 A B@5 A B@4 A B@4 A B@5 A B@4 A B@4 A B@4 A ~@2
>`.pickRestart({
  A: "~@9 x ~@6", B: "~@7 x ~ x ~@6",
})).gain(0.3)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@52 A@2 B A B A@2 C D B@2 A@4 B ~@34 A@2 B A@4 B A C E A B A D A@5 D A@5 B A@5 B A B A@2 B A@3 C A@4 D B ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~@2 x ~@3 x ~@3 x ~@4 x", C: "~@2 x ~@3 x ~@8 x", D: "~ x ~ x ~@4", E: "~ x ~ x ~@2 x ~",
})).gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@117 [~@7 x] ~@31 [~@7 x] ~>").gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct("<~@117 [~@3 x] ~@15 [~@7 x] ~@17>").gain(0.53)

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

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

// drums · ride
const ride = s("rd").struct("<~@52 [x!4]!16 ~@34 [x!4]!48 ~>").gain(0.68)

// drums · tambourine
const tambourine = s("tb").struct("<~@68 [x!16]!3 ~ [x!16]!15 ~ [x!16]!62 ~>").gain(0.3)
// … 6 more lines

More by Carboni