Strudelify

the girl from ipanema

Noah Zahm

KeyF majorTempo160 bpm
0:00/0:00
// the girl from ipanema — Noah Zahm
// 160 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3293196; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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.

// other · trumpet
const trumpet = note("<~@8 A@6 B@2 A@6 B@2 ~@16 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 E@6 F G F G H>".pickRestart({
  A: "[g4@2 e4@2 e4@2 d4 g4@2 g4 e4 e4@2 e4 d4 g4@3 e4@2 e4@2 d4 g4@2 g4 e4 e4@2 e4 d4 f4@2 d4@2 d4@2 d4 c4 e4@2 c4@2 c4@2 c4 bb3@2]/6",
  B: "[~ c4@7]/2", C: "[f4,a4,c5,e5]", D: "[g4,b4,d5,f5]",
  E: "[g4@4 e4@4 e4@4 d4@2 g4@4 g4@2 e4@2 e4@4 e4@2 d4@2 g4@6 e4@4 e4@4 d4@2 g4@4 g4@2 e4@2 e4@4 e4@2 d4@2 a4@8 f4@2 f4@2 f4@2 d4@2 c5@8 e4@2 e4@3 e4@2 d4@3]/6",
  F: "e4", G: "~@6 e4@2 e4@3 e4@2 d4@3", H: "~ f4@3",
})).s("gm_trumpet").gain(0.3)

// chords · alto sax
const alto_sax = note("<~@24 A B C@2 D@2 E@2 F@2 G@2 H I J K L@2 M@2 L@2 M@2 L@2 M@2 L@2 M@2 ~@10 N>".pickRestart({
  A: "f4", B: "f4@3 gb4@2 f4@3 eb4@3 f4@2 eb4@3", C: "[db4@3 eb4@11 ~@2]/2",
  D: "[ab4@19 a4@2 ab4@3 gb4@3 ab4@2 gb4@3]/2", E: "[e4@3 gb4@11 ~@2]/2", F: "[a4@19 bb4@2 a4@3 g4@3 a4@2 g4@3]/2",
  G: "[f4@6 g4@18 ~@3 a4@2 bb4@3]/2", H: "c5@3 c4@2 d4@3 e4@3 f4@2 g4@3", I: "ab4@5 a4@3",
  J: "bb4@3 bb3@2 c4@3 d4@3 e4@2 f4@3", K: "g4", L: "[f4,a4,c5,e5]", M: "[g4,b4,d5,f5]", N: "~ c4@3",
})).s("gm_alto_sax").gain(0.3)

// chords · tenor sax
const tenor_sax = note("<~@8 A@6 B@2 A@6 B@2 ~@16 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 ~@10 E>".pickRestart({
  A: "[g3@2 e3@2 e3@2 d3 g3@2 g3 e3 e3@2 e3 d3 g3@3 e3@2 e3@2 d3 g3@2 g3 e3 e3@2 e3 d3 f3@2 d3@2 d3@2 d3 c3 e3@2 c3@2 c3@2 c3 bb2@2]/6",
  B: "[~ c3@7]/2", C: "[f3,a3,c4,e4]", D: "[g3,b3,d4,f4]", E: "~ a3@3",
})).s("gm_tenor_sax").gain(0.3)

// chords · trombone
const trombone = note(`<
  ~@2 A@2 ~@2 B@2 ~@16 C D E@2 F@2 G@2 H@2 I@2 J K L M N@2 O@2 N@2 O@2 N@2 O@2 N@2 O@2 ~@10 P
>`.pickRestart({
  A: "[g4@7 e4@2 d4@3 ~@2 a3@18]/2", B: "[f4@7 d4@2 c4@3 ~@2 g3@18]/2", C: "f3", D: "f3@3 gb3@2 f3@3 eb3@3 f3@2 eb3@3",
  E: "[db3@3 b2@11 ~@2]/2", F: "[gb3@19 a3@2 ab3@3 gb3@3 ab3@2 gb3@3]/2", G: "[e3@3 db3@11 ~@2]/2",
  H: "[a3@19 bb3@2 a3@3 g3@3 a3@2 g3@3]/2", I: "[f3@6 eb3@18 ~@3 a3@2 bb3@3]/2", J: "c4@3 c3@2 d3@3 e3@3 f3@2 g3@3",
  K: "ab3@5 a3@3", L: "bb3@3 bb2@2 c3@3 d3@3 e3@2 f3@3", M: "g3", N: "[f3,a3,c4,e4]", O: "[g3,b3,d4,f4]", P: "~ f3@3",
})).s("gm_trombone").gain(0.3)

// chords · piano
const piano = note(`<
  A@4 B@4 A@2 C@2 D E F@2 A@2 C@2 D E F@2 G@2 H@2 I@2 J@2 K@2 L@2 M N O P A@2 C@2 A@2 C@2 A@2 C@2 A@2 C@2 Q@2 R@2 S T U
  V W V X
>`.pickRestart({
  A: "[~ c5@23 ~ [c3,g4,c5]@7, [f2,c3,e4,a4]@3 [e2,e4]]/2", B: "[~ d5@23 [g2,d3,d4,f4,d5]@8, [g2,d3,d4,f4]@3 ~]/2",
  C: "[~ d5@23 ~ [d3,f4,d5]@7, [g2,d3,d4,f4]@3 [g2,d4]]/2", D: "~ [d3,f4,bb4]@11 [g2,d3,d4,f4,bb4]@4, [g2,d4]@3 ~",
  E: "~ [bb2,db3,gb4,bb4]@15, [gb2,db4]", F: "[~@5 [f3,a4]@27, ~@4 [f2,c3,c4,f4]@27 ~]/2",
  G: "[~ [f3,db5]@23 ~ [db3,f3,bb4,db5]@7, [gb2,db3,f4,bb4]@3 [gb2,f4]]/2", // Db Bbm Gbmaj7
  H: "[~ [eb3,eb5]@23 ~ [b2,eb3,bb4,eb5]@7, [gb2,b2,gb4,bb4]@3 [gb2,gb4]]/2", // Eb Bmaj7 Gb
  I: "[~ [f3,db5]@23 ~ [bb2,f3,bb4,db5]@7, [gb2,bb2,gb4,bb4]@3 [gb2,gb4]]/2", // Db Bbm Gb
  J: "[~ gb3@23 [gb2,d3,gb3,a4,d5]@8, [gb2,d3,a4,d5]@3 ~]/2", // D
  K: "[[g2,bb2,f3,g4,bb4,d5]@23 ~ [g2,bb2,f3,g4,bb4,d5]@8]/2", L: "[[g2,bb2,eb3,f4,bb4]@15 ~]/2",
  M: "[g2,c3,eb3] [g2,c3,f3], [a4,c5]@15 ~", N: "[a2,d3,gb3,ab4,d5]@15 ~", O: "[bb2,d3,g3]!2, [g4,d5]@15 ~",
  P: "[c3,e3,g3,g4,c5]@15 ~", Q: "[[f2,c3,e4,a4]@15 ~]/2", R: "[[g2,d3,f4,b4]@15 ~]/2", S: "[g2,d3,f4,bb4]@15 ~",
  T: "[gb2,db3,f4,a4]@15 ~", U: "[f2,c3,e4,a4]@15 ~", V: "[g2,d3,e4,b4]@11 ~ [g2,d3,e4,b4]@4",
  W: "[f2,c3,e4,a4]@11 ~ [f2,c3,e4,a4]@4", X: "~@4 [f2,c3,f3,c4,f4,a4]@11 ~",
})).s("gm_piano").gain(0.25)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A B A B C D C D A B C D C E F@2 A B C D C E F@2 G E H I J E K L M N O I P Q R S A B C D A B C D A B C D A B C D A B C
  D C ~ T@4 U
>`.pickRestart({
  A: "c2@3 f2 f2@4", B: "~ f2 ~ f2!2 ~@2 f2", C: "d2@3 g2 g2@4", D: "~ g2 ~ g2!2 ~@2 g2", E: "~ gb2 ~ gb2!2 ~@2 gb2",
  F: "[~@2 f2@12 ~ f2]/2", G: "db2@3 gb2 gb2@4", H: "b1@3 eb2 eb2@4", I: "~ eb2 ~ eb2!2 ~@2 eb2", J: "d2@3 gb2 gb2@4",
  K: "d2@3 a2 a2@4", L: "~ a2 ~ a2!2 ~@2 a2", M: "g2@3 d2 d2@4", N: "~ d2 ~ d2!2 ~@2 d2", O: "bb1@3 eb2 eb2@4",
  P: "e2@3 a2 a2@3 g2", Q: "d2@3 a2 a2@3 bb2", R: "g2@3 g2 g2@3 e2", S: "c2", T: "c2@3 c2", U: "~ f1@3",
})).s("gm_acoustic_bass").gain(0.3)

// drums · kick
const kick = s("bd").struct("<[x!2]!39 ~ [x!2]!23 [x ~@2 x]!2 ~@2>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@39 [x!16] ~@27>").gain(0.3)

// drums · claves
const claves = s("clave:2").struct(`<
  [x ~@2 x ~@2 x ~]!15
  [x ~@2 x ~@2 x!2]
  [x ~@2 x ~@2 x ~]!7
  [x ~@2 x ~@2 x!2]
  [x ~@2 x!2 ~@2 x]!16
  ~@16
  [x ~@2 x!2 ~@2 x]!7
  ~@4
>`).gain(1.46)

stack(trumpet, alto_sax, tenor_sax, trombone, piano, bass, kick, ride, claves)