Strudelify

Sereno e

Drupi

KeyD majorTempo82 bpm
0:00/0:00
// Sereno e — Drupi
// 82 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 76 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 26.
setcpm(82/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H E F I H I H J D A B C D A B J D J D J D A B C D A B J D J D J D A B C D A B J D J D J D A B C D A B J
  D J D J D A B C D A B J K L M ~@2
>`.pickRestart({
  A: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]!2 [a3,d4] d4 [f#3,a3,c#4]@2 [f#3,a3,c#4,f#4]@2 c#4 [c#4,f#4] [a3,f#4] f#4, d3@7 ~ c#3@4 [c#3,f#3,a3]@3 ~, ~@8 f#4 ~@7", // D D5 F#m F#5 D F#m
  B: "[g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4] [g3,b3,d4,g4] [b3,d4,g4] [b3,g4] [e3,c#4,e4,a4]@2 [a3,c#4,a4]@2 ~ [e4,a4] [a3,c#4,a4] c#4, d3@4 ~@6 e4 ~ [a3,c#4,e4,a4]@2 ~@2", // G Em A A5 A
  C: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] [d4,f#4]!2 a3 [c#4,f#4]@2 [c#4,f#4]@2 [a3,c#4,f#4] [c#4,f#4] c#4 f#4, d3@8 [c#3,f#3,a3]@4 f#3@3 ~, ~@13 a3@3", // D F#5 F#m F#5 F#m
  D: "[g3,b3,d4,g4]@2 [b3,d4,g4]@2 ~ g4 [b3,d4,g4] g4 [a3,c#4,e4,a4]@2 [c#4,e4]@2 [e4,a4]!3 [a3,e4], d3@7 ~ e3@6 ~@2, ~@2 g3@4 ~@6 [a3,c#4]@3 ~, ~@2 [b3,d4,g4] ~@5", // G A C#m A5 A G
  E: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]!2 d4!2 [f#3,a3,c#4]@2 [f#3,a3,c#4,f#4]@2 c#4 [c#4,f#4] [a3,f#4] f#4, d3@7 ~ c#3@4 [c#3,f#3,a3]@3 ~, ~@8 f#4 ~@7", // D F#m F#5 D F#m
  F: "[g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [d3,g3,b3,d4] [g3,b3,d4,g4] [b3,d4] [b3,g4] [e3,c#4,e4,a4]@2 [a3,c#4,a4]@2 ~ [e4,a4] [a3,c#4,a4] c#4, d3@4 ~@6 e4 ~ [a3,c#4,e4,a4]@2 ~@2", // G Bm Em A A5 A
  G: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] [d4,f#4]!2 a3 [c#4,f#4]@2 [c#4,f#4]@2 [a3,c#4,f#4] [c#4,f#4] c#4 f#4, ~@8 [f#3,a3]@4 f#3@3 ~, ~@13 a3@3", // D F#5 F#m F#5 F#m
  H: "[g3,b3,d4,g4]@2 [b3,d4,g4]@2 ~ g4 [b3,d4,g4] g4 [a3,c#4,e4,a4]@2 [c#4,e4]@2 [e4,a4]!3 [a3,e4], d3@7 ~@9, ~@2 g3@4 ~@6 [a3,c#4]@3 ~, ~@2 [b3,d4,g4] ~@5", // G A C#m A5 A G
  I: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] [d4,f#4]!2 a3 [f#3,b3,d4,f#4]@2 [b3,d4]@2 ~ f#4 [b3,d4,f#4] [f#3,b3,d4], ~@4 b2@3 ~, ~@10 f#3@5 ~, ~@6 [b3,d4,f#4] ~", // D Bm
  J: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] [d4,f#4]!2 a3 [f#3,b3,d4,f#4]@2 [b3,d4]@2 ~ f#4 [b3,d4,f#4] [f#3,b3,d4,f#4], d3@4 b2@3 ~, ~@10 f#3@5 ~, ~@6 [b3,d4,f#4] ~", // D Bm
  K: "[g3,b3,d4,g4]@2 [b3,d4,g4]@2 ~ g4 [g3,b3,d4,g4] [d3,g3,d4,g4] [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [e4,a4]!2 [e3,e4,a4] [a3,e4,a4], d3@7 ~ e3@6 ~@2, ~@2 g3@4 ~@6 [a3,c#4]@3 ~, ~@2 [b3,d4,g4] ~@5", // G G5 A A5 A G
  L: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] [d4,f#4]!2 [a3,d4,f#4] [f#3,b3,d4,f#4]@2 [b3,d4,f#4]@2 ~ f#4 [b2,b3,d4,f#4] [f#3,b3,d4,f#4], d3@4 b2@3 ~, ~@10 f#3@5 ~, ~@6 [b3,d4,f#4] ~", // D Bm
  M: "[g3,b3,d4] ~@7, d3@7 ~@9", // G
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.4)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  A B C D E F G H E F I H I H J D A B C D A B J D J D J D A B C D A B J D J D J D A B C D A B J D J D J D A B C D A B J
  D J D J D A B C D A B J ~@2 K L M
>`.pickRestart({
  A: "~@7 a3 ~@4 f#4 ~@2 [f#3,a3]", B: "~@5 d3!2 d4 ~@2 e3@4 e3 [e3,a4]", C: "~@7 [d4,f#4] ~@6 [c#3,f#4] c#3",
  D: "~@6 g3 [d3,g3,d4] ~@2 [a3,a4]@2 ~@2 e3 a4", E: "~@6 a3!2 ~@4 f#4 ~@2 [f#3,a3]",
  F: "~@4 g4 d3 [d3,g4] d4 ~@2 e3@4 e3 [e3,a4]", G: "d3@7 [d4,f#4] c#3@5 ~ [c#3,f#4] c#3",
  H: "~@6 g3 [d3,g3,d4] ~@2 [a3,a4]@2 ~@2 e3 a4, ~@4 e3@3 ~", I: "d3@7 [d4,f#4] ~@2 f#4@2 ~@2 b2 f#4",
  J: "~@7 [d4,f#4] ~@2 f#4@2 ~@2 b2 ~", // D
  K: "g4@2 [b3,d4,g4]@2 ~ g4 [g3,b3,d4,g4] [d3,g3,d4,g4] [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [e4,a4]!2 [e3,e4,a4] [a3,e4,a4], ~ g3@2 ~ e3@3 ~, ~@4 [b3,d4,g4]@2 ~@6 [a3,c#4]@3 ~", // G G5 A A5 G A
  L: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] [d4,f#4]!2 [a3,d4,f#4] [f#3,b3,d4,f#4]@2 [b3,d4,f#4]@2 ~ f#4 [b2,b3,d4,f#4] [f#3,b3,d4,f#4], d3@4 b2@3 ~, ~@10 f#3@5 ~, ~@6 [b3,d4,f#4] ~", // D Bm
  M: "[g3,b3,d4,g4]@2 [b3,d4,g4]@2 ~ g4 [g3,b3,d4,g4] [d3,g3,d4,g4] [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [e4,a4]!2 [e3,e4,a4] [a3,e4,a4], d3@7 ~ e3@6 ~@2, ~@2 g3@4 ~@6 [a3,c#4]@3 ~, ~@2 [b3,d4,g4] ~@5", // G G5 A A5 A G
})).s("gm_acoustic_guitar_steel").gain(0.16).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  A B A B A B A B A B C B C B C B A B A B A B C B C B C B A B A B A B C B C B C B A B A B A B C B C B C B A B A B A B C
  B C B C B A B A B A B C D ~@4
>`.pickRestart({
  A: "d2@3 d2 f#1@3 f#1", B: "g1@3 g1 a1@3 a1", C: "d2@3 d2 b1@3 b1", D: "g1@3 g1 ~@4",
})).s("gm_electric_bass_finger").gain(0.52)

// bass · electric bass finger · soft notes
const bass_soft = note("<~@71 [~@4 a1@3 a1] [d2@3 d2 b1@3 b1] [g1@3 g1 a1@3 a1] [d2@3 d2 b1@3 b1] [g1@3 g1 a1@3 a1]>")
  .s("gm_electric_bass_finger").gain(0.17)

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

// chords · synth strings 1 · soft notes
const synth_strings_1_soft = note(`<
  ~ A ~@3 A B C ~ A ~@7 A ~@3 A ~@7 A ~@3 A ~@7 A B C ~ A ~@7 A ~@3 A ~@7 A ~@3 A ~@2 D@2 E F
>`.pickRestart({
  A: "~ e4", B: "a3@15 ~", C: "b3@7 ~@9", D: "[~@2 g4 [c#4,e4,a4], ~ b3@2 ~]/2", E: "a3 b3, [d4,f#4]",
  F: "[b3,d4,g4] [c#4,e4,a4]", // G A
})).s("gm_synth_strings_1").gain(0.13)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B A B ~@24 A B A B A B C B C B C B ~@12 A B A B A B C B C B C B A B A B A B C B D ~@3
>`.pickRestart({
  A: "d5 c#5, f#5", B: "[b4,d5] [c#5,e5]", C: "d5@2 c#5 b4, f#5", D: "f#5, d5 ~",
})).s("gm_string_ensemble_1").gain(0.29)

// chords · string ensemble 1 · soft notes · Bm C#m Bm C#m
const string_ensemble_1_soft = note("<~@72 [~@2 c#5 b4] [[b4,d5] [c#5,e5]] [d5@2 c#5 b4, f#5] [[b4,d5] [c#5,e5]]>")
  .s("gm_string_ensemble_1").gain(0.12)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@31 A ~@3 A ~ A ~ B ~@36>".pickRestart({
  A: "~@6 b3 ~", B: "~@6 a4 b4 ~@8",
})).s("gm_electric_guitar_jazz").gain(0.45)

// chords · epiano1
const epiano1 = note("<~@39 A@2 B@2 C D@2 E@3 F@2 G ~@24>".pickRestart({
  A: "[~@16 [d4,f#4]@7 ~ [a3,c#4,f#4]@7 ~, ~@15 a3@8 ~@9]/2", // D F#m
  B: "[[b3,d4,g4]@7 ~ [e4,a4]@7 ~ d4@8 c#4@7 ~, ~@7 c#4@7 ~ a3@16 ~, ~ f#4]/2", C: "[b3,d4,g4]@6 ~@2 [c#4,e4,a4]@7 ~",
  D: "[[a3,d4,f#4]@7 ~ [a3,c#4,f#4]@7 ~ [d4,g4]@6 ~@2 [c#4,e4,a4]@8, ~@15 b3@7 ~@10]/2", // D F#m G5 A
  E: "[[d4,f#4,a4]@7 ~ [f#4,b4]@7 ~ [g4,b4]@7 ~ [a4,c#5]@7 ~ [f#4,a4]@7 ~ [d4,f#4,b4]@7 ~, ~@7 d4@7 ~ d4@8 e4@8 d4@7 ~@10]/3", // D B5 G A F#m Bm
  F: "[[d4,g4,b4]@7 ~ [a4,c#5]@7 ~ [a4,d5]@7 ~ [b4,d5]@7 ~, ~@7 e4@7 ~ f#4@8 f#4@8 ~]/2", // G A D5 Bm
  G: "[g4,b4,d5]@7 ~ [a4,c#5,e5]@7 ~", // G A
})).s("gm_epiano1").gain(0.3).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C
  B A B C B A B C B A B C@2 A ~@3
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x ~@3 x!2 ~@2", C: "x ~@6 x!2 ~ x ~@5",
})).gain(0.49)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@6 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 B ~@3 B ~@3 B ~@3 A ~@3 A ~@3 A ~@3 B ~@3 B ~@3 B ~@3 B ~@3 A ~ C D E F
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "~@7 x", C: "~@6 x!2 ~ x!2 ~@3 x!2", D: "~ x!2 ~@3 x!2 ~ x!2 ~@2 x!3",
  E: "~ x!2 ~@2 x!6 ~@2 x!3", F: "~ x!2 ~@2 x!3 ~ x!2 ~@2 x!3",
})).gain(0.21)

// drums · clap
const clap = s("cp").struct("<A@4 B A@3 B A@3 B A@2 C A@24 B A@3 B A@3 B A@2 D A@16 B A@2 E ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@4 x ~@8 x!2 ~", D: "~@4 x ~@4 x ~@2 x!3 ~", E: "~ x ~@2",
})).gain(0.56)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@4 A ~@3 A ~@3 A ~@2 B ~@24 A ~@3 A ~@3 A ~@19 A ~@2 B C@4>".pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~ x ~ x",
})).gain(0.35)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A B@3 A B@3 A B@3 A B@3 A B@7 A B@3 A B@3 A B@3 A B@3 A B@3 A B@7 A B@3 A B@3 A B@3 A B@3 A B@7
>`.pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.42)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@28 [~ x ~ x]!12 ~@12 [~ x ~ x]!19 ~@5>").gain(0.49)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@71 [~ x ~ x]!5>").gain(0.21)

// drums · ride
const ride = s("rd").struct("<~@28 A B@3 C B@6 D ~@12 A B@3 C B@6 D A B@3 C B@3 E ~@3>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!3 ~ x!4", D: "x!7 ~", E: "x!5 ~@3",
})).gain(0.28)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@32 A ~@23 A ~@11 A ~@3 B C@2 D>".pickRestart({
  A: "~@3 x ~@4", B: "~@5 x!3", C: "x!8", D: "x!7 ~",
})).gain(0.07)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, bass_soft, synth_strings_1, synth_strings_1_soft,
  string_ensemble_1, string_ensemble_1_soft, electric_guitar_jazz, epiano1, kick, kick_soft, snare, snare_soft, clap,
  clap_soft, pedal_hat, crash, tambourine, tambourine_soft, ride, ride_soft
)

More by Drupi