Strudelify
The Girl From Ipanema (Garota de Ipanema) cover art

Getz/Gilberto

The Girl From Ipanema (Garota de Ipanema)

Stan Getz

KeyA♭ majorTempo132 bpm
0:00/0:00
// The Girl From Ipanema (Garota de Ipanema) — Stan Getz
// 132 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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(`<
  ~@5 A B C D E F G B H B I J K L M A N@2 O P Q R S T U V W X Y Z AA AB A B C D E F G B H B I J K L M A H B I J K L M A
  N@2 O P Q R S T U V W X Y Z AA AB H B I J K L AC@2 AD@2 AE@2 AF@2 AG@2
>`.pickRestart({
  A: "db2@5 ~@3 ab1@5 ~@3", B: "db2@5 ~@3 ab1@4 ~@4", C: "eb2 ~ bb1 ~", D: "eb2@5 ~@3 bb1@4 ~@4",
  E: "ab2@6 ~@2 eb2@7 ~", F: "ab1@10 ab2@2 ab1@3 ~", G: "db2@4 ~@4 ab1@7 ~", H: "db2@6 ~@2 ab1@5 ~@3",
  I: "eb2@5 ~@3 bb1@5 ~@3", J: "eb2@3 ~ bb1@2 ~@2", K: "ab2@5 ~@3 eb2@6 ~@2", L: "ab1@6 ~@2 ab1@5 ~@3",
  M: "db2@2 ~@2 ab1@3 ~", N: "[d2@4 ~@2 d2@2 a1@5 ~ d2@6 ~@2 d2@2 a1@4 d2@3 ~]/2", O: "g2@2 ~ g2 d2@3 ~",
  P: "g2@5 ~ g2@2 d2@4 g2@3 ~", Q: "d2@5 ~ d2@2 a1@6 ~@2", R: "d2@5 ~ d2@2 a1@5 ~@3", S: "bb1@5 ~ bb1@2 f1@7 ~",
  T: "bb1@2 ~ bb1 f1@2 bb1 ~", U: "eb2@3 ~ bb1@3 ~", V: "eb2@6 bb1@5 ~ eb2@3 ~", W: "b1@5 ~@3 gb1@7 ~",
  X: "b1@7 ~ gb1@4 b1 ~@3", Y: "f2@7 ~ f2@7 ~", Z: "b1@7 ~ b1@7 ~", AA: "eb2@7 ~ eb2@7 ~", AB: "ab1@7 ~ ab1@6 ~@2",
  AC: "[db2@4 ~@4 ab1@4 ~@2 ab1@6 ~@2 ab1 ~ ab1@5 ~ ab1 ~]/2",
  AD: "[db2@5 ~ db2 ~ db2@4 ~@2 ab1@6 ~@2 ab1 ~ ab1@4 ~@2 ab1@2]/2",
  AE: "[db2@4 ~@2 db2 ~ db2@5 ~ ab1@6 ~@2 ab1 ~ ab1@5 ~ ab1@2]/2",
  AF: "[db2@5 ~ db2 ~ db2@4 ~@2 ab1@7 ~ ab1 ~ ab1@5 ~ ab1@2]/2", AG: "[db2@13 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.53)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A@2 B@2 ~@8 C@2 D ~@5 E@2 ~ F G ~@2 H@2 ~ I@2 ~@12 J K L@2 M@2 N@2 J K L@2 M@2 N@2 E@2 ~ F G ~@2 H@2 ~ I@2 ~@18 O@2
>`.pickRestart({
  A: "[eb3@4 ~@2 c3 ~ c3@3 ~ bb2 ~ eb3@6 ~@2 c3 ~@3 c3 ~@3 bb2@2]/2",
  B: "[eb3@4 ~@2 c3 ~ c3 ~ c3 ~ bb2 ~ eb3@6 c3 ~ c3 ~@3 c3 ~@5]/2", C: "[[db2,db3]@11 ~@5]/2", D: "[eb5,bb5,eb6]@15 ~",
  E: "[[d3,gb3,a3,db4]@23 ~@9]/2", F: "~@2 f5@3 e5@3 d5@3 a4@5", G: "c5@9 ~@7",
  H: "[~@2 g5@3 gb5@3 f5@3 c5@3 bb4@10 ~@8]/2", I: "[~@6 b4 a4@5 ~@4, ~@11 eb4@13 ~@8, ~@3 gb4@3 ~@2]/2",
  J: "[f5,ab5,bb5,eb6] ~@5 [db5,eb5,f5,ab5,c6] ~ [db5,eb5,f5,ab5,c6] ~@5 bb5 ~", // Fm7 Dbmaj7
  K: "[f5,ab5,bb5]@2 ~@4 [db5,eb5,f5,ab5,c6] ~@3 [db5,eb5,f5,ab5,c6] ~@3 bb5 ~, eb6 ~@3", // Bb7 Dbmaj7
  L: "[[db5,eb5,g5,bb5,eb6] ~@5 c6 ~ c6 ~@3 [db5,eb5,g5,bb5,eb6]@9 ~ c6 ~@3 c6@2 ~@2 bb5 ~]/2", // Eb7
  M: "[[db5,eb5,gb5,bb5] ~@5 bb5 ~ bb5 ~ bb5 ~ ab5 ~ [c5,eb5,gb5,c6]@9 ~ ab5 ~@2 ab5@2 ~ gb5@2, db6 ~@15]/2", // Ebm7 Cdim
  N: "[ab5@3 ~]/2", O: "[[f3,ab3,c4,eb4]@31 ~]/2",
})).s("gm_piano").gain(0.64)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~ A@2 B@2 C@2 D@2 E F G@2 C@2 D@2 E F G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 C@2 D@2 E F G@2 C@2 D@2 E F G@2 C@2 D@2 E F
  G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 C@2 D@2 E F P Q R S T U V W X@2
>`.pickRestart({
  A: "[[f3,bb3,eb4]@4 [f3,bb3,eb4]@2 [ab2,eb3]@2 [f3,bb3,eb4] ~@3 [ab2,eb3]@2 [f3,bb3,eb4]@4 [f3,bb3,eb4]@2 [ab2,eb3] ~ [f3,bb3,eb4]@4 ~@4 [f3,bb3,eb4]@2, [ab2,eb3]@3 ~@2 [f3,bb3,eb4]@2 [ab2,eb3]@3 ~@3 [f3,bb3,eb4]@2 ~, ~@7 [ab2,eb3]]/2", // Ebsus2 Ab5 Ebsus2 Ab5 Ebsus2 Ab5 Ebsus2 Ab5 …
  B: "[[ab2,eb3,f3,bb3,eb4]@4 [f3,bb3,eb4]@2 ~@2 [f3,bb3,eb4] ~ [ab2,eb3,f3,bb3,eb4] ~@3 [f3,bb3,eb4]@4 ~@4 [f3,bb3,eb4]@4 [ab2,eb3,f3,bb3,eb4]@5 ~, ~@2 [ab2,eb3]@2 ~@3 [ab2,eb3]@3 [ab2,eb3]@3 ~@3, ~@9 [f3,bb3,eb4]@2 ~@5]/2", // Absus2 Ebsus2 Absus2 Ebsus2 Absus2 Ab5 Ebsus2
  C: "[[ab2,eb3,f3,bb3,eb4]@3 ~ [f3,bb3,eb4]@2 [ab2,eb3]@2 [f3,bb3,eb4] ~ [f3,bb3,eb4]@2 [ab2,eb3] ~ [ab2,eb3,f3,bb3,eb4]@4 [f3,bb3,eb4] ~ [ab2,eb3] ~ [f3,bb3,eb4]@2 ~@2 [f3,bb3,eb4]@2 [ab2,eb3] ~ [f3,bb3,eb4] ~]/2", // Absus2 Ebsus2 Ab5 Ebsus2 Ab5 Absus2 Ebsus2 Ab5 …
  D: "[[bb2,g3,bb3,db4]@2 ~@4 bb2@2 [g3,bb3,db4] ~ [g3,bb3,db4] ~ bb2 ~ [g3,bb3,db4]@3 ~ [g3,bb3,db4]@2 bb2 ~ [bb2,g3,bb3,db4]@3 ~ [g3,bb3,db4]@2 bb2@2 ~@2, ~@2 [g3,bb3,db4]@2 ~@3 bb2@3 ~@6]/2", // Gdim
  E: "[gb3,bb3,db4,f4]@3 ~ [gb3,bb3,db4,f4] ~ gb2 ~ [gb3,bb3,db4,f4] ~ [gb3,bb3,db4,f4]@2 gb2 ~ [gb3,ab3,c4]@2, gb2 ~@3", // Gbmaj7 Ab7
  F: "~@2 [gb3,ab3,c4] ~@3 [gb3,ab3,c4]@3 ~ [gb3,ab3,c4] ~@3 [gb3,ab3,c4] ~", // Ab7
  G: "[[f3,ab3,c4]@3 ~ [f3,ab3,c4]@2 db3 ~ [f3,ab3,c4] ~ [f3,ab3,c4]@2 ~@2 [f3,ab3,c4]@4 [f3,ab3,c4]@2 db3 ~@5 db3@2 [f3,ab3,c4] ~@3, db3@3 ~@4 db3@3 ~ [f3,ab3,c4]@3 ~@2]/2", // Fm
  H: "[[a3,db4,gb4]@4 [a3,db4,gb4]@2 [d3,gb3] ~ [a3,db4,gb4] ~@5 [a3,db4,gb4]@6 ~@2 [d3,gb3]@2 [a3,db4,gb4] ~@3 [d3,gb3]@2 ~@2, [d3,gb3]@3 ~@2 [a3,db4,gb4]@2 ~@3 [a3,db4,gb4]@2 ~ [a3,db4,gb4]@2 ~, ~@6 [d3,gb3]@5 ~@5]/2", // Gbm D Gbm D Gbm D Gbm D
  I: "[[g3,b3,d4,f4]@3 ~ [g3,b3,d4,f4] ~@5 [g3,b3,d4,f4] ~@3 [g3,b3,d4,f4]@5 ~ [g3,b3,d4,f4] ~@3 [a3,d4,f4] ~ [g3,a3,b3,d4,f4] ~ d4 ~@3]/2", // G7 Dm G7
  J: "[[a3,c4,e4]@4 [a3,c4,e4]@2 f3 ~@3 [f3,a3,c4,e4]@2 ~@2 [a3,c4,e4]@6 ~@4 [a3,c4,e4]@2 [f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4] ~, f3@3 ~@4 f3@4 f3@2 ~@3, ~@5 [a3,c4,e4] ~@2]/2", // Am Fmaj7 Am Fmaj7 Am
  K: "[[ab3,d4,f4]@6 [ab3,d4,f4] ~@3 [ab3,d4,f4]@4 [ab3,d4,f4]@4 [ab3,d4,f4] ~@3 [ab3,d4,f4]@2 [ab3,d4,f4]@2 [ab3,d4,f4]@2 ~@4]/2", // Ddim
  L: "[[gb3,bb3,db4,f4,ab4]@6 [gb3,bb3,db4,f4,ab4] ~@3 [gb3,bb3,db4,f4,ab4] ~@3 [db4,f4,ab4]@4 [db4,f4,ab4]@2 [gb3,bb3] ~ [db4,f4,ab4] ~@5 [db4,f4,ab4]@2 ~@2, ~@7 [gb3,bb3]@3 ~@2 [db4,f4,ab4]@2 ~@2, ~@26 [gb3,bb3]@5 ~]/2", // Gbmaj7 Db Gb Db Gb Db Gb
  M: "[[a3,eb4,gb4]@4 [a3,eb4,gb4]@2 a3 ~ [a3,eb4,gb4]@2 [a3,eb4,gb4] ~@3 [a3,eb4,gb4]@4 [a3,eb4,gb4]@2 ~@6 a3@2 [eb4,gb4] ~@3, ~@11 a3@2 ~@3, ~@6 [eb4,gb4] ~]/2", // Ebdim Ebm
  N: "[eb4@4 eb4@2 [c4,f4,ab4] ~@3 [c4,eb4,f4,ab4]@4 [ab3,b3,d4]@6 [ab3,b3,d4] ~@3 [ab3,b3,d4]@2 [ab3,b3,d4]@2 ~@2 [ab3,b3,d4] ~, [c4,f4,ab4]@3 ~@13]/2", // Fm Fm7 Abdim Fm
  O: "[[bb3,db4,eb4,gb4]@6 [bb3,db4,eb4,gb4] ~@3 [bb3,db4,eb4,gb4]@3 ~ [gb3,a3,c4,d4]@6 [gb3,a3,c4,d4] ~@3 [gb3,a3,c4,d4]@2 [gb3,a3,c4,d4] ~@3 [gb3,a3,c4,d4] ~]/2", // Ebm7 D7
  P: "[f3,ab3,c4]@3 ~ [f3,ab3,c4]@2 db3 ~ [f3,ab3,c4] ~ [f3,ab3,c4]@2 ~@2 [db3,f3,gb3,ab3,a3,c4,eb4]@2, db3@3 ~@5", // Fm Dbmaj7
  Q: "~@2 [gb3,a3,c4,eb4]@2 ~@2 [gb3,a3,c4,eb4]@3 ~ [gb3,a3,c4,eb4]@2 [gb3,a3,c4,eb4] ~@3", // Gbdim
  R: "[f3,ab3,c4]@4 [f3,ab3,c4]@3 ~ [f3,ab3,c4,eb4] ~ [f3,ab3,c4,eb4]@4 [gb3,a3,c4,eb4]@2, eb4@7 ~@9", // Fm Fm7 Gbdim
  S: "~@2 [gb3,a3,c4,eb4]@4 [gb3,a3,c4,eb4]@3 ~ [gb3,a3,c4,eb4]@2 [gb3,a3,c4,eb4]@2 [gb3,a3,c4,eb4]@2", // Gbdim
  T: "[f3,ab3,c4,eb4]@3 ~ [f3,ab3,c4,eb4]@2 ~@2 [f3,ab3,c4,eb4]@2 [f3,ab3,c4,eb4]@2 ~@2 [gb3,a3,c4,eb4]@2", // Fm7 Gbdim
  U: "~@2 [gb3,a3,c4,eb4]@2 ~@2 [gb3,a3,c4,eb4]@2 ~@2 [gb3,a3,c4,eb4] ~ [gb3,a3,c4,eb4]@2 [gb3,a3,c4,eb4]@2", // Gbdim
  V: "[f3,ab3,c4,eb4]@3 ~ [f3,ab3,c4,eb4]@2 f3@2 [ab3,c4,eb4] ~ [f3,ab3,c4,eb4] ~@3 [gb3,a3,c4,eb4]@2", // Fm7 Ab Fm7 Gbdim
  W: "~@2 [gb3,a3,c4,eb4]@2 ~@2 [a3,eb4]@4 gb3@2 [gb3,a3] ~ [f3,c4]@2, ~@6 [gb3,c4]@3 ~@3 eb4@4, ~@6 c4 ~", // Gbdim Adim Gbm F5 Gbdim
  X: "[[f3,ab3,c4,eb4]@31 ~]/2", // Fm7
})).s("gm_acoustic_guitar_nylon").gain(0.36)

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

// drums · rim
const rim = s("rim").struct("<~@21 A@15 B C@36 A@3 B A@6 C@7 D ~@2>".pickRestart({
  A: "~ x ~@2", B: "~@2 x ~@2 x!3", C: "~ x ~ x", D: "~@2 x ~@3 x!2",
})).gain(0.28)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@5 A@28 B C B C A@36 B C B C A@13 C ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@3 x", C: "~ x ~ x ~@4",
})).gain(0.12)

// drums · open hat
const open_hat = s("oh").struct("<A ~@32 B C B C ~@36 B C B C ~@13 D E ~>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@5 x ~ x", D: "~@5 x!3", E: "x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 B C@8 ~@28 A@3 B A ~ A ~ A ~@9 A ~
>`.pickRestart({
  A: "x", B: "x ~@4 x ~@2", C: "x!4",
})).gain(0.35)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@2 x!2] [x!4] [x ~ x ~ x ~ x!2] [x!4] [x ~ x ~ x ~ x!2] [x!4]!86 ~@2>")
  .gain(1.79)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  [~@5 x ~ x]
  [~ x ~ x ~ x ~ x]
  [~@2 x ~@3 x ~@3 x ~@2 x ~ x]
  [~ x ~ x ~ x ~ x]
  [~@2 x ~@3 x ~@3 x ~@2 x ~ x]
  [~ x ~ x ~ x ~ x]!86
  ~@2
>`).gain(0.6)

stack(bass, piano, acoustic_guitar_nylon, kick, rim, hihat, hihat_soft, open_hat, ride, cabasa, cabasa_soft)

More by Stan Getz