Strudelify

Cocorito

Renzo Arbore

KeyB minorTempo129 bpm
0:00/0:00
// Cocorito — Renzo Arbore
// 129 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 172 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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 · piano
const piano = note(`<
  ~@3 A B C D A B C D ~@8 E F@2 G E F@2 G ~@16 H I@2 J H I@2 J E F@2 G E F@2 G ~@88 E F@2 G E F@2 G E F@2 G E F@2 G E
  F@2 G E F@2 G K
>`.pickRestart({
  A: "[f#3,b3,d4] ~@13 [b1,b2,f#3,b3,d4]@2, [b1,b2] ~@7", B: "[f#1,f#2,a#3,c#4,f#4] ~@7",
  C: "[f#1,f#2,e3,a#3,c#4]@2 ~@12 [e3,a#3,c#4] ~, ~@7 [f#1,f#2]", D: "[b1,b2,f#3,b3,d4] ~@7",
  E: "[b2,f#4]@15 ~, [b3,d4]@13 ~@3", F: "[f#2,a#3,c#4,e4]@7 ~", G: "[b2,b3,d4,f#4]@15 ~",
  H: "[b2,b3,d4,f#4,b4]@2 ~ [b2,b3,d4,f#4,b4]@2 ~ [b2,b3,d4,f#4,b4]@2 ~@8", // Bm
  I: "[f#1,f#2,c#4,e4,f#4,a#4]@2 ~ [f#1,f#2,c#4,e4,f#4,a#4]@2 ~ [f#1,f#2,c#4,e4,f#4,a#4]@2 ~@8", // F#7
  J: "[b2,b3,d4,f#4,b4]@2 ~ [b2,d4,f#4]@2 ~ [b2,d4,f#4]@2 ~@8, ~@3 [b3,b4] ~@2 [b3,b4] ~@9", K: "[b1,b2,b3,d4,f#4] ~@7",
})).s("gm_piano").gain(0.54)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@3 A B C D E F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E G@4 H@3 ~ E F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2
  E@2 F@2 E@2 F@2 E@2 F@2 E ~@8 G@4 H@3 ~ E F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E ~@24 E F@2 E@2
  F@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 E ~
>`.pickRestart({
  A: "[b3,d4,f#4] ~@6 [b3,d4,f#4]", B: "[a#3,c#4,e4] ~@7", C: "[a#3,c#4,e4] ~@6 [a#3,c#4,e4]", D: "[b3,d4,f#4] ~@7",
  E: "[b3,d4,f#4]", F: "[a#3,c#4,e4]/2", G: "[b3,d4,f#4]/4", H: "[b3,d4,f#4]/3",
})).s("gm_synth_strings_1").gain(0.31)

// bass · electric bass finger
const bass = note(`<
  ~@11 A B C D A B C D A B C D A B C D A B C D A B C D A@7 E ~@8 A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A@7
  E A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@24 A B C D A B C D A B C D A B C D A B C D A B C D
  F
>`.pickRestart({
  A: "b1@3 d2@3 f#2@2 b1@3 d2@3 f#2@2", B: "f#1@3 a#1@3 c#2@2 f#1@2 ~ a#1@3 c#2@2",
  C: "f#1@3 a#1@3 c#2@2 f#1@3 a#1@3 c#2@2", D: "b1@2 ~ d2@3 f#2@2 b1@3 d2@3 f#2@2", E: "b1@3 ~@13", F: "b1 ~@7",
})).s("gm_electric_bass_finger").gain(0.55)

// other · piano
const piano_2 = note(`<
  ~@3 A B@2 C ~@4 D E@2 F D E@2 F ~@8 D E@2 F D E@2 F G H G H G H G H ~@16 D E@2 F D E@2 F D E@2 F D E@2 F ~@8 G H G H G
  H G H ~@8 D E@2 F D E@2 F D E@2 F D E@2 F D E@2 F D E@2 F ~@32 D E@2 F D E@2 F D E@2 F D E@2 F ~
>`.pickRestart({
  A: "[f#4,f#5] ~ [b2,b3] ~ [g4,g5]@2 ~ [f#4,f#5] ~ [b2,b3] ~ [f#4,f#5] [g4,g5] ~ [f#4,f#5] ~", // F# B G F# B F# G F#
  B: "f#4@2 [a#2,a#3] ~ [g4,g5]@2 ~ f#4@2 [a#2,a#3] ~ [f#4,f#5] [g4,g5] ~ [f#4,f#5] ~, f#5 ~@6 f#5 ~@8", // A# G A# F# G F#
  C: "[b3,b4] ~@15", D: "[f#4,f#5] ~ [b3,b4] ~ [g4,g5]@2 ~ [f#4,f#5] ~ [b3,b4] ~ [f#4,f#5] [g4,g5] ~ [f#4,f#5] ~",
  E: "f#4@2 [a#3,a#4] ~ [g4,g5]@2 ~ f#4@2 [a#3,a#4] ~ [f#4,f#5] [g4,g5] ~ [f#4,f#5] ~, f#5 ~@6 f#5 ~@8", // A# G A# F# G F#
  F: "f#4@2 [b3,b4] ~ [g4,g5]@2 ~ [f#4,f#5] ~ [b3,b4] ~ [f#4,f#5] [g4,g5] ~ [f#4,f#5] ~, f#5 ~@15", // B G F# B F# G F#
  G: "[b3,d4,b4] ~@3 [b3,d4,a4] ~@3 [b3,d4,g#4]@2 ~ [b3,d4,a4] ~@3 [b3,d4,b4]", // Bm Bm7 G#dim Bm7 Bm
  H: "[b3,d4,b4] ~@3 [b3,d4,a4] ~@3 [b3,d4,g#4]@2 ~ [b3,d4,a4] ~@4", // Bm Bm7 G#dim Bm7
})).s("gm_piano").gain(0.58).pan(0.7)

// other · flute
const flute = note(`<
  ~@6 A B C D E ~@7 F G H I J K@2 L@2 ~@23 F G H I J K@2 M@2 ~@31 F G H I J K@2 N@2 G H I J K@2 N@2 G H I J K@2 N@2 G H
  I J K@2 N@2 E ~@48
>`.pickRestart({
  A: "~@4 d5 ~ b4 ~ d5 ~ b4 d5 ~ b4 d5@2", B: "b4@3 ~ d5 ~ b4 ~ d5 ~ b4 d5@2 e5 c#5@2",
  C: "~ c#5 ~@2 c#5 ~ a#4 ~ c#5 ~ a#4 c#5 ~ a#4 c#5@2", D: "a#4@2 ~@2 f#4 ~ f#4 ~ c#5 ~ c#5 c#5@2 d5 b4@2", E: "b4 ~@7",
  F: "~@4 d5@2 b4 ~ d5 ~ b4 d5 ~ b4 d5@2", G: "b4@2 ~@2 d5 ~ b4 ~ d5 ~ b4 d5 ~ e5 c#5@2",
  H: "c#5@2 ~@2 c#5 ~ a#4 ~ c#5 ~ a#4 c#5 ~ a#4 c#5@2", I: "a#4 ~@4 f#4 ~ f#4 c#5 ~ c#5!2 ~ d5 ~ b4",
  J: "~ b4@2 ~ d5 ~ b4 ~ d5 ~ b4 d5 ~ b4 d5@2",
  K: "[b4@2 ~@3 d5 ~ b4 d5@2 b4 d5 ~ e5 ~ c#5@2 c#5@2 ~ c#5 ~ a#4 ~ c#5 ~ a#4 c#5 ~ a#4 c#5 ~]/2",
  L: "[a#4 ~@4 f#4@2 f#4 c#5 ~ c#5!2 ~ d5 ~ b4@2 b4@2 ~@13]/2",
  M: "[a#4 ~@3 c#5 ~ c#5 ~ c#5 ~ c#5!2 ~ c#5@2 d5@2 d5@10 ~@5]/2",
  N: "[a#4 ~@3 c#5 ~ c#5 ~ c#5 ~ c#5!2 ~ c#5@2 d5@2 d5@2 ~ d5@2 b4 ~ d5 ~ b4 d5 ~ b4 d5@2]/2",
})).s("gm_flute").gain(0.52)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@27 A@8 B@2 C@2 B@2 D ~@9 A@8 ~@8 A@8 ~@8 B@2 C@2 B@2 D ~@25 A@8 ~@40 A@8 ~
>`.pickRestart({
  A: "[f#6@127 ~]/8", B: "[b5@18 a5@3 g#5@2 ~ a5@2 ~ b5@3 [g#5,a5] g#5]/2", C: "[f#5@23 ~ e5@3 f#5@2 ~ a5@2]/2",
  D: "f#5",
})).s("gm_string_ensemble_1").gain(0.47)

// other · brass section
const brass_section = note("<~@35 A@2 B@2 A@2 C ~@41 A@2 B@2 A@2 C ~@82>".pickRestart({
  A: "[[b4,b5]@18 [a4,a5]@3 [g#4,g#5]@2 ~ [a4,a5]@2 ~ [b4,b5]@3 [g#4,a4,g#5,a5] [g#4,g#5]]/2", // B A G# A B Amaj7 G#
  B: "[[f#4,f#5]@23 ~ [e4,e5]@3 [f#4,f#5]@2 ~ [a4,a5]@2]/2", C: "[f#4,f#5]",
})).s("gm_brass_section").gain(0.48)

// chords · rock organ
const rock_organ = note(`<
  ~@27 A B C D A B C D ~@7 E ~@8 A B C D A B C D A B C D A B C D A B C D A B C D ~@15 E A B C D A B C D A B C D A B C D
  A B C D A B C D A B C D A B C D ~@24 A B C D A B C D A B C D A B C D A B C D A B C D F
>`.pickRestart({
  A: "~@3 [f#5,b5]@3 [f#5,b5] ~@9", B: "[e5,a#5]@2 ~ [e5,a#5] ~@12", C: "[e5,a#5]@3 [e5,a#5] ~@2 [e5,a#5] ~@9",
  D: "[f#5,b5]@2 ~ [f#5,b5] ~@3 [f#5,b5]@3 [f#5,b5] ~@5", // B5
  E: "[f#5,b5]@2 ~ [f#5,b5]!2 ~ [f#5,b5] ~ [f#5,b5]@2 ~ [f#5,b5]@5", F: "[f#5,b5] ~@7",
})).s("gm_rock_organ").gain(0.46).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@3 B C B C B C B C A@31 C A@7 C A@39 C A@48 B C B C B C B C A@24 C>".pickRestart({
  A: "x!4", B: "x ~@6 x", C: "x",
})).gain(0.73)

// drums · snare
const snare = s("sd").struct(`<
  ~@26 A ~@7 B ~@23 A ~@7 B ~@7 B ~@7 C ~@15 B ~@7 B ~@7 B ~@7 B ~@7 C ~@7 C ~@7 C ~@7 B ~@7 B ~@7 B ~
>`.pickRestart({
  A: "~@2 x ~ x ~ x!10", B: "~@8 x ~@2 x!2 ~ x ~", C: "~@9 x!7",
})).gain(0.51)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@26 A ~@31 A ~@23 B ~@47 B ~@7 B ~@7 B ~@25>".pickRestart({
  A: "~@3 x ~ x ~@10", B: "~ x",
})).gain(0.29)

// drums · clap
const clap = s("cp").struct("<A@3 ~@8 A@31 ~@5 A@35 B A@7 ~ A@39 B A@7 B A@7 B A@24 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.65)

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

// drums · open hat
const open_hat = s("oh").struct("<~@11 A@31 ~@5 B@4 A@39 ~ A@55 ~ A@24 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@3 x",
})).gain(0.58)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A B A B A B A B@2 ~@7 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2 B ~@7 B@2 ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3
  B ~@3 B ~@2 B@2 ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B
  ~@3 B ~@3 B ~@3 B
>`.pickRestart({
  A: "x ~@6 x", B: "x",
})).gain(0.58)

// drums · bongos
const bongos = s("bongo:4").struct("<A@3 ~@8 A@31 ~@9 A@39 ~ A@55 ~ A@24 ~>".pickRestart({
  A: "~@7 x ~@7 x",
})).gain(1.53)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<A@3 ~@8 A@31 ~@9 A@39 ~ A@55 B A@24 B>".pickRestart({
  A: "x!2", B: "x",
})).gain(1.53)

// drums · congas
const congas = s("conga:13").struct("<A@3 ~@8 A@31 ~@9 A@39 ~ A@55 ~ A@24 ~>".pickRestart({
  A: "~@3 x ~@3 x",
})).gain(1.86)

// drums · congas
const congas_2 = s("conga:18").struct("<A@3 ~@8 A@31 ~@9 A@39 ~ A@55 ~ A@24 ~>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(1.86)

// drums · ht
const ht = s("ht").struct("<[~ x ~ x]!3 ~@72 [~ x ~ x]!8 ~@40 [~ x ~ x]!23 ~@26>").gain(0.44)

// drums · mt
const mt = s("mt").struct(`<
  [x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~]!3
  ~@72
  [x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~]!8
  ~@40
  [x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~]!23
  x
  ~@25
>`).gain(0.44)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<A@3 ~@8 A@31 ~@9 A@39 ~ A@55 ~ A@24 ~>".pickRestart({
  A: "~ x!2 ~@5",
})).gain(2.32)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<A@3 ~@8 A@31 ~@9 A@39 ~ A@55 ~ A@24 ~>".pickRestart({
  A: "~@9 x ~@2 x ~@3",
})).gain(2.32)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@11 A@8 ~@8 A@15 ~@17 A@16 ~@8 A@7 ~ A@32 ~@24 A@24 ~>".pickRestart({
  A: "x!8",
})).gain(2.21)

// drums · shaker
const shaker = s("sh").struct("<A@3 ~@8 B@8 A@8 B@15 C ~@8 A@8 B@16 A@8 B@7 C B@32 A@23 C B@24 ~>".pickRestart({
  A: "x ~@5 x!3 ~@5 x!2", B: "x!2 ~@3 x!5 ~@3 x!3", C: "x",
})).gain(0.51)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  A B@2 ~@8 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 ~@9 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A
  B@2 C A B@2 C A B@2 C A B@2 C A B@2 ~ A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C
  A B@2 C A B@2 C A B@2 C A B@2 ~ A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C ~
// … 23 more lines

More by Renzo Arbore