Strudelify

Once I Loved

Astrud Gilberto

KeyF♯ minorTempo80 bpm
0:00/0:00
// Once I Loved — Astrud Gilberto
// 80 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 48 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V A B C D E F G H I J K L M N O P Q R S T U V S W U X
>`.pickRestart({
  A: "b2@2 ~ f#2 f#2@2 ~ b2 e2@2 ~ b2!2 ~@2 e2", B: "a2@2 ~ e2!2 ~@2 a2 a#2@2 ~ f2!2 ~@2 a#2",
  C: "b2@2 ~ f#2!2 ~@2 b2 c3@2 ~ g2 c3 ~ c3 ~", D: "c#3@3 g#2 c#3 ~@2 c#3 c#3@2 ~ g#2 c#3 ~@2 g#2",
  E: "a2@2 ~ a2!2 ~@2 a2 d2@2 ~ d2!2 ~@2 d2", F: "g2@2 ~ g2!2 ~@2 d2 g2@2 ~ g2 g2@2 ~ g2",
  G: "g#2@2 ~ g#2 g#2@2 ~ g#2 c#2@2 ~ c#2!2 ~@2 c#2", H: "f#2@2 ~ f#2!2 ~@2 c#2 f#2@2 ~ f#2!2 ~@3",
  I: "b2@3 f#2 f#2@2 b2 f#2 e2@2 ~ b2!2 ~ e2@2", J: "a2@2 ~ e2!2 ~ e2 a2 a#2@2 ~ a#2!2 ~ f2 a#2",
  K: "b2@2 ~ b2 b2@2 f#2 b2 c3@2 ~ c3 c3@2 g2 c3, a#2 ~@15", L: "c#3@2 ~ g#2 g#2@2 ~ c#3 c#3@2 ~ g#2!2 ~ c#3 g#2",
  M: "a2@2 ~ a2!2 ~ e2 ~ d2@2 ~ a2 a2@2 d2 f#2", N: "g2@2 ~ d2 d2@2 ~ g2 g2@2 ~ d2!2 ~ d2 g2",
  O: "g#2@2 ~ g#2!2 ~ g#2 ~ c#2@2 ~ c#2!2 ~ c#2 ~", P: "f#2@2 ~ f#2!2 ~ f#2 ~ b2@2 ~ b2 b2@2 b2 f#2",
  Q: "e2@2 ~ b2 b2@3 e2 a2@2 ~ e2 e2@2 ~ a2", R: "d2@3 a2 a2@2 a2 d2 a2@2 ~ d2!2 ~ a2@2",
  S: "d#2@2 ~ d#2!2 ~ d#2@2 d2@2 ~ d2!2 ~ d2 ~", T: "f#2@2 ~ f#2 f#2@2 c#2 f#2 c2@2 ~ c2!2 ~ c2 ~",
  U: "b2@2 ~ b2!2 ~ b2 ~ b2@2 ~ b2 c#3@2 ~ c#3", V: "f#2@2 ~ a2 c#3@2 ~ c#3 f#2@2 ~ c#3!2 ~@3",
  W: "f#2@2 ~ f#2 f#2@2 ~ f#2 c2@2 ~ c2!2 ~ c2 ~", X: "f#2@2 ~ a2 c#3@2 ~ c#3 f#2@4 ~@4",
})).s("gm_acoustic_bass").gain(0.5)

// chords · acoustic guitar nylon · "NYLON STR"
const acoustic_guitar_nylon = note(`<
  A B C D E F G H I J K L M N O P Q R S T U@2 A B C D E F G H I J K L M N O P Q R S T U@2 S T V@2
>`.pickRestart({
  A: "[d3,f#3,a3] ~ [d3,a3] ~ [d3,f#3,a3] [f#3,a3] ~ [e3,g#3,c4] ~ [e3,c4] ~ [e3,g#3,c4]@3 [e3,g#3,c4] ~", // D D5 D F#m Eaug C Eaug
  B: "[e3,g#3,c#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] [g#3,c#4] ~ [a#3,c#4,e4] ~ [c#4,e4] ~ [a#3,c#4,e4]@3 [a#3,c#4,e4] ~", // C#m C#5 A#dim C#m A#dim
  C: "[d3,f#3,a3] ~ a3 ~ [d3,a3] [d3,f#3,a3] ~ [d#3,f#3,a3] ~ [f#3,a3] ~ [d#3,f#3,a3]@3 [f#3,a3] ~", // D D5 D D#dim F#m D#dim F#m
  D: "[e3,g#3,c#4] ~ c#4 ~ [e3,c#4] [g#3,c#4] ~@3 [e3,g#3,c#4] ~ [e3,g#3,c#4]@2 ~ [e3,g#3,c#4] ~", // C#m C#5 C#m
  E: "[g3,c4,e4] ~ [g3,c4,e4] ~ [g3,c4,e4] [c4,e4] ~ [f#3,a#3] ~@3 [d3,a#3]@3 [f#3,a#3] ~", // C F# Gm F#
  F: "~ d4 ~@2 [b3,d4]!2 ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [b3,d4]@2 ~ [g3,b3,d4] ~", // Bm G Bm G
  G: "~@2 d4 ~ d4 [g#3,b3,d4,f#4] ~ [f3,g#3,b3,c#4] ~ [f3,b3,c#4] ~ [g#3,b3,c#4]@3 [f3,g#3,b3,c#4] ~", // G#m7b5 C#7
  H: "[f#3,c#4] ~ [a#3,c#4,f4] ~ [f#3,a#3,c#4,f4] [a#3,c#4] ~ e4 ~ [f#3,a#3,c#4,e4] ~ [f#3,a#3,c#4,e4]@2 ~ [f#3,a#3,c#4,e4] ~", // F#5 A#m F#maj7 A#m F#7
  I: "[d3,f#3,a3] ~@2 f#3 ~ [d3,f#3,a3] ~ [e3,g#3,c4] ~ [e3,g#3,c4] ~ [g#3,c4] [g#3,c4]@2 [e3,g#3,c4] ~, ~@2 [d3,f#3,a3]@2 ~@7 e3@3 ~@2", // D Eaug G# Eaug D
  J: "[e3,g#3,c#4] ~ [e3,g#3,c#4]!2 ~ [e3,g#3,c#4] ~ [a#3,c#4,e4] ~ [a#3,c#4,e4] ~ [a#3,c#4,e4] [a#3,c#4] ~ [a#3,c#4,e4] ~", // C#m A#dim A#m A#dim
  K: "[d3,f#3,a3] ~ [d3,f#3,a3]!2 ~ [d3,f#3,a3] ~ [d#3,f#3,a3] ~ [d#3,f#3,a3] ~ [d#3,f#3,a3]!2 ~ [d#3,f#3,a3] ~", // D D#dim
  L: "[e3,g#3,c#4] ~ [e3,g#3,c#4]!2 ~ [e3,g#3,c#4] ~ [e3,g#3,b3,c#4] ~ [e3,g#3,b3,c#4] ~ [e3,g#3,b3,c#4] [g#3,b3,c#4]@2 [e3,g#3,b3,c#4] ~", // C#m C#m7 C#7 C#m7
  M: "[a3,c4,e4,g4] ~ [a3,c4,e4,g4]!2 ~ [a3,c4,e4,g4] ~ [c4,f#4,a#4] ~ [c4,f#4,a#4] ~ [c4,f#4,a#4] [c4,f#4,a#4]@2 [c4,f#4,a#4] ~", // Am7 Cm7b5
  N: "[b3,d4,f#4] ~ [b3,d4,f#4] [d4,f#4] ~ [b3,d4,f#4] ~ [g3,b3,d4,f#4] ~ [g3,b3,d4,f#4] ~ [g3,b3,d4,f#4]!2 ~ [g3,b3,d4,f#4] ~", // Bm D Bm Gmaj7
  O: "[g#3,b3,d4,f#4] ~ [g#3,b3,d4,f#4]!2 ~ [g#3,b3,d4,f#4] ~ [f3,g#3,b3,c#4] ~ [f3,g#3,b3,c#4] ~ [g#3,b3,c#4] [g#3,b3,c#4]@2 [f3,g#3,b3,c#4] ~, ~@11 f3@3 ~@2", // G#m7b5 C#7
  P: "[f#3,a#3,c#4,f4] ~ [f#3,a#3,c#4,f4] [f#3,a#3,c#4] ~ [f#3,a#3,c#4,f4] ~ [f#3,a3,d#4] ~ [f#3,a3,d#4] ~ [f#3,a3,d#4]!2 ~ [f#3,a3,d#4] ~", // F#maj7 F# F#maj7 D#dim
  Q: "[e3,g#3,d#4] ~ [e3,g#3,d#4] [g#3,d#4] ~ [e3,g#3,d#4] ~ [e3,g#3,c#4] ~ [e3,g#3,c#4] ~@2 g#3 ~ [e3,g#3,c#4] ~, ~@11 [e3,g#3,c#4]@2 ~@3", // Emaj7 G#5 Emaj7 C#m
  R: "[d3,f#3,c#4] ~ [d3,f#3,c#4] [f#3,c#4] ~ [d3,f#3,c#4] ~ [d3,f#3,c#4] ~ [d3,f#3,c#4] ~ [d3,f#3,c#4] [d3,f#3,c#4]@2 [d3,f#3,c#4] ~", // Dmaj7 F#5 Dmaj7
  S: "[d#4,f#4,a4] ~ [d#4,f#4,a4]!2 ~ [d#4,f#4,a4] ~ [d4,f4,a4,b4] ~ [d4,f4,a4,b4] ~@2 f4 ~ [d4,f4,a4,b4] ~, ~@11 [d4,f4,a4,b4]@2 ~@3", // D#dim Bm7b5
  T: "[c#4,e4,f#4] ~ [c#4,e4,f#4]!2 ~ [c#4,e4,f#4] ~@3 [g3,a#3,d4,f#4] ~ [g3,a#3,d4,f#4] [g3,a#3,d4,f#4]@2 [g3,a#3,d4,f#4] ~", // F#7 Gm
  U: "[[f#3,a3,c#4] ~ [f#3,a3,c#4]!2 ~ [f#3,a3,c#4] ~ [d3,f#3,a3] ~ [d3,f#3,a3] ~ [c#3,f3,b3] ~ [c#3,f3,b3] ~ [a2,c#3,f#3]@6 ~@3 [f#3,a3,c#4] c#4 ~@6]/2", // F#m D C#7 F#m
  V: "[[f#3,a3,c#4] ~ [f#3,a3,c#4]!2 ~ [f#3,a3,c#4] ~ [d3,f#3,a3] ~ [d3,f#3,a3] ~ [c#3,f3,b3] ~ [c#3,f3,b3] ~ [a2,c#3,f#3]@6 ~@3 [a2,c#3,f#3]@4 ~@4]/2", // F#m D C#7 F#m
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.6)

// chords · acoustic guitar nylon · "NYLON STR" · soft notes
const acoustic_guitar_nylon_2 = note("<A B C D E F G H ~@14 A B C D E F G H ~@18>".pickRestart({
  A: "~@2 f#3 ~@6 g#3 ~@6", B: "~@5 e3 ~@3 a#3 ~@6", C: "~@2 [d3,f#3] ~ f#3 ~@4 d#3 ~@4 d#3 ~",
  D: "~@2 [e3,g#3] ~ g#3 e3 ~@10", E: "~@5 g3 ~ d3 ~ [d3,f#3,a#3] ~ f#3@3 d3 ~",
  F: "~ [g3,b3,f#4] ~ g3 [g3,f#4] f#4 ~ f#4 ~ f#4 ~ [g3,f#4]@2 ~ f#4 ~", // Gmaj7
  G: "[g#3,b3,d4,f#4] ~ [g#3,b3,f#4] ~ [g#3,b3,f#4] ~@4 g#3 ~ f3@3 ~@2", // G#m7b5 G#m7
  H: "[a#3,f4] ~ f#3 ~@2 f#3 ~ [f#3,a#3,c#4] ~@8", // A#5 F#
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.6)

// other · vibraphone
const vibraphone = note(`<
  ~@5 A B ~ C D E F G H I J K L M N O P ~@5 A B ~ C D E F G H I J K L M N O P M N O P
>`.pickRestart({
  A: "~@4 b4 ~@11", B: "~@7 b4@2 ~@7", C: "a4 ~ f#4 a4 f#4 d4 ~ e4 ~ g#4 ~ c5 ~ g#4 e4 ~",
  D: "c#5 ~ g#4 c#5 g#4 e4 ~ a#4 ~ c#5 ~ e5 ~ c#5 a#4 ~", E: "f#5 ~ d5 f#5 d5 b4 ~@2 c5 d#5 f#5 a5 f#5 d#5 c5 ~",
  F: "~@2 e4 g#4 [b4,c#5] b4 g#4 e4 g#4 b4 c#5 b4 ~ g#4 e4 ~", G: "a4 ~ a4 c5 e5 g5 e5 ~@2 d5 f#5 a#5 ~ f#5 d5 ~",
  H: "~ f#6 d6 b5 f#5 ~ b4 g4 b4 d5 f#5 d5 f#5 d5 b4 g4", I: "g#4 b4 d5 f#5 ~ d5 b4 g#4 ~ f4 g#4 b4 c#5 b4 g#4 f4",
  J: "f#4 ~ a#4 c#5 f5 c#5 ~@2 d#5 a4 ~ b4 ~ a4 f#4 ~", K: "e4 ~ g#4 d#5 ~ e4 g#4 d#5 c#5 e4 ~ g#4 c#5 g#4 e4 g#4",
  L: "d4 ~ f#4 c#5 ~ d4 f#4 c#5 a4 d4 ~ f#4 ~ a4 f#4 d4", M: "d#4 ~ f#4 a4 ~ d#4 f#4 d#4 d4 f4 ~ a4 ~ g4 f4 d4",
  N: "f#4 ~ f#4 a#4 f#4 e4 f#4 e4 g4 a#4 d5 f#5 d5 a#4 g4 ~", O: "c#5 a4 f#4!2 ~ c#5 a4 f#4 b4 f#4 d4 c#4@2 f4 ~ g#4",
  P: "f#4 ~@3",
})).s("gm_vibraphone").gain(0.4).pan(0.2)

// other · vibraphone · soft notes
const vibraphone_soft = note("<A@2 B C D E@2 F ~@14 A@2 B C D E@2 F ~@18>".pickRestart({
  A: "[[d4,f#4,a4]@6 ~@2 [g#4,c5]@6 ~@2 [g#4,c#5]@6 ~ [e4,g4,a#4]@7 ~@2, ~@7 e4@6 ~@2 e4@7 ~@10]/2", // D G# C#5 Edim
  B: "[d4,f#4,a4]@7 ~ c4 d#4 f#4 a4@3 ~@2", C: "c#4 e4 g#4 b4@4 ~ e4 g#4 b4 c#5 ~ e5 ~@2",
  D: "~ g5 ~ e5 c5 a4 ~ a#4@5 f#4 d4 f#4 ~",
  E: "[f#4 b3 d4 f#4 ~ d5 f#5 b5 ~ f#5 ~ d5 ~ b4 a4 g#4@5 ~ g#4 ~@3 c#5 ~ b4 g#4 f4 ~@2]/2",
  F: "f#4@5 f5 ~ f#4 e5 c#5 ~ a#4 f#4 ~@3",
})).s("gm_vibraphone").gain(0.15).pan(0.2)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!47 [x ~@2 x!2 ~@2 x ~@8]>").gain(0.45)

// drums · rim
const rim = s("rim").struct("<[x ~@2 x ~@2 x ~@3 x ~@2 x ~@2]!47 [x ~@2 x ~@2 x ~@9]>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!8 [~ x ~ x ~ x ~@2]!14 [x!16]!8 [~ x ~ x ~ x ~@2]!17 [~ x ~ x ~@4]>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~@7 x]!14 ~@8 [~@7 x]!17 ~>").gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@8 [x!16]!14 ~@8 [x!16]!17 [x!8 ~@8]>").gain(0.45)

stack(
  bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, vibraphone, vibraphone_soft, kick, rim, hihat, open_hat, ride
)

More by Astrud Gilberto