Strudelify
Joana Francesa cover art

1993 · Lochness Vol. 1 & 2

Joana Francesa

Mina

KeyD minorTempo100 bpm
0:00/0:00
// Joana Francesa — Mina
// 100 bpm, 3/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/3)

// 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(`<
  A@2 B C D E D F G@6 ~ H I ~ J@2 ~@2 K@8 ~ H I ~ J@2 ~@2 L@3 ~@13 G@6 ~ H I ~ J@2 ~@2 L@3 ~@13 G@6 ~ H I ~ J@2 ~@2 M@3
  N O@3 ~
>`.pickRestart({
  A: "[~@8 [f3,bb3]@19 ~@5 [a3,eb4]@16]/2", B: "~ [f3,bb3]@2", C: "~ [a3,eb4]@2", D: "~@7 [f3,bb3]@17",
  E: "~@7 [a3,eb4]@17", F: "~@7 [a3,eb4]@16 ~",
  G: "[~@15 d5@16 ~@8 db5@13 ~@8 bb4@4 d5@16 ~@8 db5@13 ~@2 [a3,d4]@21 ~@20, ~@7 bb3@18 ~@6 [a3,db4]@19 ~@30 [a3,db4]@19 ~@45, ~@8 g3@17 ~@31 [g3,bb3]@18 ~@70, ~@12 bb4@5 ~@127]/6", // D5 A Gm
  H: "~@8 [g3,b3]@7 ~ [a3,c4]@7 ~", I: "[b3,d4]@5 ~@2 [c4,eb4]@15 ~@2", J: "[~@16 f5@7 c6@7 ~ b5@15 ~@2]/2",
  K: "[~@12 d5@4 a5@14 ~@6 d5@4 a5@11 ~@12 d5@16 ~@8 db5@13 ~@8 bb4@4 d5@16 ~@8 db5@13 ~@2 [a3,d4]@21 ~@20, ~@55 bb3@18 ~@6 [a3,db4]@19 ~@30 [a3,db4]@19 ~@45, ~@56 g3@17 ~@31 [g3,bb3]@18 ~@70, ~@60 bb4@5 ~@127]/8", // D5 A Gm
  L: "[~@12 d5@4 a5@14 ~@6 d5@4 a5@11 ~@21]/3", M: "[~@12 d5@4 a5@14 ~@6 d5@4 a5@11 ~@9 d5@4 a5@8]/3", N: "~@3 d5 a5@2",
  O: "[~@12 d5@4 a5@11 ~@9 d5@4 a5@11 ~@21]/3",
})).s("gm_piano").gain(0.3).pan(0.3)

// bass · fretless bass · "Bass"
const bass = note(`<
  A B C@2 D E@2 B F@4 G@4 H I J@7 K@3 L M N@2 O P Q R S T C@2 U V@4 W@4 X@3 Y@6 L M N@2 O P Q R S T C@2 U V@4 W@4 X@3
  Y@6 L M N@2 O P Q R S T C@2 Z@4 AA@2
>`.pickRestart({
  A: "~@8 bb1@7 ~@9", B: "~@2 bb1 ~ f1@8", C: "[~@4 f1@2 ~@2 bb1@19 ~ bb1@2 ~@2 f1@16]/2", D: "~@4 f1@3 ~ bb1@16",
  E: "[~@4 bb1@2 ~@2 f1@19 ~ f1@3 ~ bb1@16]/2",
  F: "[~@4 f1@3 ~ e2@19 ~ e2@2 ~@2 a1@19 ~ a1@3 ~ e2@19 ~ e2@3 ~ a1@16]/4",
  G: "[~@4 a1@3 ~ bb1@20 bb1@2 ~@2 a1@20 a1@3 ~ ab1@20 ab1@2 ~@2 g1@7 ~ a1@7 ~]/4", H: "b1@8 c2@15 ~",
  I: "d2@3 ~ eb2@8",
  J: "[eb2@6 ~@2 ab1@20 ab1@2 ~@2 g1@20 g1@2 ~@2 c2@20 c2@3 ~ f1@20 f1@2 ~@2 bb1@20 bb1@2 ~@2 f1@20 f1@3 ~ e2@16]/7",
  K: "[~@4 e2@2 ~@2 a1@19 ~ a1@3 ~ e2@19 ~ e2@3 ~ a1@16]/3", L: "~@4 a1@3 ~ bb1@16", M: "~@2 bb1 ~ a1@8",
  N: "[~@4 a1@3 ~ ab1@19 ~ ab1@2 ~@2 g1@7 ~ a1@7 ~]/2", O: "b1@3 ~ c2@7 ~", P: "d2@6 ~@2 eb2@15 ~", Q: "eb2@3 ~ ab1@8",
  R: "~@2 ab1 ~ g1@8", S: "~@2 g1 ~ c2@8", T: "~@2 c2 ~ f1@8", U: "~@4 f1@3 ~ gb1@16",
  V: "[~@4 gb1 ~@3 f1@19 ~ f1 ~@3 bb1@19 ~ bb1@2 ~@2 ab1@19 ~ ab1 ~@3 gb1@16]/4",
  W: "[~@4 gb1 ~@3 f1@20 f1 ~@3 bb1@20 bb1 ~@3 ab1@19 ~ ab1 ~@3 gb1@16]/4",
  X: "[~@2 gb1 ~ f1@10 f1 ~ ab1@10 ab1 ~ gb1@8]/3",
  Y: "[~@4 gb1 ~@3 f1@19 ~ f1 ~@3 f1@19 ~ f1@2 ~@2 e2@19 ~ e2@2 ~@2 a1@19 ~ a1@3 ~ e2@19 ~ e2@3 ~ a1@16]/6",
  Z: "[~@4 f1@3 ~ bb1@19 ~ bb1@2 ~@2 f1@16]/2", AA: "[~@4 f1@3 ~ bb1@19 ~@21]/2",
})).s("gm_fretless_bass").gain(0.36).pan(0.4)

// chords · electric guitar jazz · "Jazz Guitar 1"
const electric_guitar_jazz = note(`<
  A@4 B@8 C@8 D@8 C@8 E@5 F G H I J K H I F L M N O P@8 Q@4 E@5 F G H I J K H I F L M N O P@8 Q@4 R@7 S@3
>`.pickRestart({
  A: "[~@16 d4@16 ~@7 [a3,c4]@17 ~@8 [a3,d4]@15 eb3@4 f3@4 [gb3,a3]@4 a3@4 d4, ~@15 a3@17 ~@55 c4@9]/4", // Am D5 Gbm
  B: "[~@3 gb4@4 ~@8 [a3,d4]@16 ~@16 gb4@3 f4@2 eb4@3 d4@8 [a3,d4]@16 d4@5 bb3@3 g3@4 gb3@4 f3@2 e3@2 eb3@3 ~@10 d4@14 ~@9 f4@7 ~ e4@7 ~@10 [bb3,d4]@14 ~@9 [db4,f4]@8 e4, ~@7 f4@27 ~@5 a3@15 ~@33 [a3,c4]@15 ~ d3@16 ~@73, ~@40 c4@16 ~@55 bb3@16 ~@8 db4@15 ~@42]/8", // D5 Bb Db Am
  C: "[~@16 [a3,d4]@14 ~@9 [f3,d4]@22 ~@4 d4@12 ~@3 [f3,b3]@7 ~ [g3,c4]@6 ~ [a3,d4]@5 ~@3 [bb3,eb4]@9 ~@7 [c4,f4]@6 ~@2 [d4,g4]@20 ~@20 eb4@7 ~@2 g4@4 f4@4 b3@4 b3@4, ~@64 f3@12 ~@83 c4@11 ~@14 [d4,eb4]@7 ~, ~@80 f4@7 ~@9]/8", // D5 Dm Fdim C5 D5 Eb5 F5 G5 …
  D: "[g3@4 f3@2 e3@2 ~@8 [bb3,eb4]@16 ~@8 [a3,eb4]@16 ~@8 [a3,d4]@15 ~@9 [a3,eb4]@14 ~@10 d4@14 ~@9 f4@7 ~ e4@7 ~@10 [bb3,d4]@14 ~@9 [db4,f4]@8 e4, d4@7 ~ eb3@13 ~@66 gb3@15 ~@9 bb3@16 ~@8 db4@15 ~@42]/8", // Eb5 Adim D5 Adim Bb Db
  E: "[g3@4 f3@2 e3@2 ~@8 [bb3,eb4]@16 ~@8 [a3,eb4]@16 ~@8 [a3,d4]@15 ~@9 [a3,eb4]@14 ~@6 [f3,bb3,db4] ~@11, d4@7 ~ eb3@13 ~@66 gb3@15 ~@18]/5", // Eb5 Adim D5 Adim Bbm
  F: "[f3,bb3,db4]@4 ~@2 [a3,db4] ~@5", G: "[a3,db4]@8 ~@4 [ab3,db4] ~@11", H: "[ab3,db4]@9 ~@3 [ab3,db4] ~@11",
  I: "[ab3,db4]@4 ~@2 [f3,bb3,db4] ~@5", J: "[f3,bb3,db4]@9 ~@3 [a3,db4]@2 ~@10", K: "[a3,db4]@9 ~@3 [ab3,db4]@2 ~@10",
  L: "[a3,db4]@6 ~@6 [gb3,bb3,db4] ~@11", M: "[gb3,bb3,db4]@7 ~@5 [ab3,c4,eb4]@2 ~@10",
  N: "[ab3,c4,eb4]@9 ~@3 [ab3,b3,eb4]@2 ~@10", O: "[ab3,b3,eb4]@5 ~ [ab3,b3,f4] ~@5",
  P: "[[ab3,b3,f4]@5 ~@11 d4@14 ~@9 f4@7 ~ e4@7 ~@10 [bb3,d4]@14 ~@9 f4@7 ~ e4@6 ~@11 [a3,d4]@14 ~@9 [f3,d4]@22 ~@4 d4@12 ~@3 [f3,b3]@7 ~ [g3,c4]@6 ~ [a3,d4], ~@15 bb3@16 ~@8 db4@15 ~@33 db4@15 ~@58 f3@12 ~@20]/8", // Fdim Bb D5 Dm Fdim C5 D5
  Q: "[~@7 [bb3,eb4]@9 ~@7 [c4,f4]@6 ~@2 [d4,g4]@20 ~@20 eb4@7 ~@2 g4@4 f4@4 b3@4 b3@4, ~@63 c4@11 ~@14 [d4,eb4]@7 ~, ~@32 f4@7 ~@9]/4", // Eb5 F5 G5 Ebmaj7
  R: "[g3@4 f3@2 e3@2 ~@8 [bb3,eb4]@16 ~@8 [a3,eb4]@16 ~@8 [a3,d4]@15 ~@9 [a3,eb4]@14 ~@10 [a3,d4]@15 ~@9 [a3,eb4]@14 ~@10 [a3,d4]@8, d4@7 ~ eb3@13 ~@66 gb3@15 ~@33 gb3@15 ~@18]/7", // Eb5 Adim D5 Adim D5 Adim D5
  S: "[~@16 [a3,eb4]@14 ~@10 [a3,d4]@15 ~@17, ~@5 gb3@5 ~@14]/3", // Adim D5
})).s("gm_electric_guitar_jazz").gain(0.3)

// other · soprano sax · "Sax Soprano"
const soprano_sax = note("<A B C@6 ~@32 D@5 E@4 F@6 ~@15 D@5 E@4 F@6 ~@21>".pickRestart({
  A: "~@3 bb4 a4 bb4", B: "a4 g4 gb4 g4 gb4 d4",
  C: "[a3@4 gb3@4 f3@46 ~@5 bb4@4 a4@4 bb4@4 a4@3 g4@4 gb4@4 g4@4 gb4@4 d4@5 a3@4 gb3@4 f3@25 ~@16]/6",
  D: "[~@8 bb4@12 ab4@2 ~ ab4@5 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 ~ gb4@4 f4@2 ~ f4@40 ~ bb4@12 ab4@3 ~]/5",
  E: "[ab4@4 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 gb4@4 ~ f4@3 ~ f4@40 bb4@12 ab4@2 ~@2]/4",
  F: "[ab4@4 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 f4@5 e4@3 eb4@24 f4@4 ~ eb4@3 f4@5 gb4@2 ~ bb4@8 ab4@38 ~@19]/6",
})).s("gm_soprano_sax").gain(0.22)

// other · bandoneon · "1st Bandoneon"
const bandoneon = note(`<
  A B@3 C@4 D@7 E@6 F@2 G H@5 I@2 J@2 K L@2 M N@2 O P@5 Q@4 R@3 S@7 T@2 E@6 F@2 G U@5 Q@4 V@7 W@3 T@2 E@6 F@2 G X G Y
  Z@3
>`.pickRestart({
  A: "~@3 bb4 a4 bb4",
  B: "[a4@4 g4@4 gb4@4 ~@3 gb4@4 d4@4 a3@4 gb3@4 f3@25 eb3@3 f3@4 gb3@4 a3@4 d4, ~@12 g4@5 ~@55]/3",
  C: "[~@3 gb4@3 ~@5 bb4@3 a4@4 ~ bb4@4 a4@3 g4@5 gb4@4 g4@4 gb4@4 d4@4 a3@3 gb3@4 ~ f3@22 ~@2 eb4@4 ~@3 gb4@5 a4@4 d5, ~@6 f4@34 ~@43 f4@12 ~]/4",
  D: "[~@3 gb5@4 g5 ~@12 a4@4 f4@4 g4@3 ~@5 f5@3 e5@4 f5@4 g5@4 [a3,a5]@4 g4@13 a4@4 f4@4 g4@4 ~@5 a5@2 g5@4 a5@4 f5@4 bb5@2 a5@2 ~ f4@12 g4@4 a4@3 bb4@4 c5@13 a4@3 f4@4 d4@4 f4@13 g4@4, ~@7 g4@13 ~@11 e4@20 ~@29 e4@25 ~@63, ~@8 g5@28 ~@19 a5@22 ~@7 bb5@2 ~@17 d5@20 ~@45]/7", // A
  E: "[eb4@4 f4@4 b4@7 c5@8 d5@8 ~ eb4@12 f4@3 ~ g4@4 ~@3 bb4@12 ~ g4@4 f4@4 eb4@3 ~ eb4@23 ~ g5@4 f5@4 d5@4 b4@4 g4@4 f4@2 e4@2 c4@4 d4@4 c4@4 d4@4, ~@8 d4@23 eb5@16 f5@5 a4@4 ~@47 d4@24 ~ eb4@13 ~@3, ~@9 g5@4 ~@11]/6",
  F: "[c4 d4 f4 d4 c4@3 bb4 a4 bb4 a4 bb4]/2", G: "a4 bb4 a4 bb4 a4 bb4",
  H: "[a4@3 bb4@4 ~@13 a5@4 f5@4 g5@3 ~@4 f4@4 e4@4 f4@4 g4@4 a4@4 g5@13 a5@4 f5@4 g5@4 ~@3 bb4@2 a4@2 g4@4 a4@4 f4@4 bb4@2 a4@2 ~ f5@12 g5@4, ~@7 g5@13 ~@11 e5@20 ~@29 e5@25 ~@15, ~@8 g4@28 ~@19 a4@22 ~@27 d4@16]/5",
  I: "[a5@3 bb5@4 c6@13 a5@3 f5@4 d5@4 f5@13 g5@4]/2",
  J: "[eb5@4 f5@4 b3@7 c4@8 d4@7 ~@2 eb5@12 f5@4, ~@8 d5@23 eb4@15 ~@2]/2",
  K: "[f4,g5]@4 a5@3 bb5@12 ~ g5@4, ~@7 g4@17", L: "[f5@4 eb5@3 ~ eb5@23 ~ g5@4 f5@4 d5@4 b4@4, ~@31 d5@9 ~@8]/2",
  M: "g4@2 f4 e4 c5@2 d5@2 c5@2 d5@2, ~@8 eb4@13 ~@3", N: "[c5 d5 f5 d5 c5@3 bb5 a5 bb5 a5 bb5]/2",
  O: "a5 bb5 a5 bb5 a5 bb5",
  P: "[a5@3 bb5@4 ~ bb4@12 ab4@2 ~ ab4@5 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 ~ gb4@4 f4@2 ~ f4@40 ~ bb4@12 ab4@3 ~]/5",
  Q: "[ab4@4 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 gb4@4 ~ f4@3 ~ f4@40 bb4@12 ab4@2 ~@2]/4",
  R: "[ab4@4 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 f4@5 e4@3 eb4@24 f4@4 ~ eb4@3 f4]/3",
  S: "[~@4 gb4@2 ~ bb4@8 ab4@38 ~@15 a4@4 f4@4 g4@3 ~@5 f5@3 e5@4 f5@4 g5@4 [a3,a5]@4 g4@13 a4@4 f4@4 g4@4 ~@5 a5@2 g5@4 a5@4 f5@4 bb5@2 a5@2 ~ f4@12 g4@4, ~@55 g4@13 ~@11 e4@20 ~@29 e4@25 ~@15, ~@56 g5@28 ~@19 a5@22 ~@7 bb5@2 ~@17 d5@17]/7", // A
  T: "[a4@3 bb4@4 c5@13 a4@3 f4@4 d4@4 f4@13 g4@4]/2",
  U: "[a4@3 bb4@4 ~ bb4@12 ab4@2 ~ ab4@5 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 ~ gb4@4 f4@2 ~ f4@40 ~ bb4@12 ab4@3 ~]/5",
  V: "[ab4@4 gb4@2 ~ gb4@12 ~ c4@3 db4@5 eb4@3 f4@5 e4@3 eb4@24 f4@4 ~ eb4@3 f4@5 gb4@2 ~ bb4@8 ab4@38 ~@2 g4@13 a4@4 f4@4 g4@3 ~@5 f5@3 e5@4 f5@5, ~@127 g5@28 ~@13, ~@151 e4@17]/7",
  W: "[g5@3 ~ a5@3 ~@13 a4@4 f4@4 g4@4 ~@4 g5@4 f5@4 g5@4 e5@4 f5@4 f4@12 g4@4, ~@3 a3@4 g4@14 ~@11 e4@25 ~@15, ~@2 a5@7 ~@5 d5@4]/3",
  X: "a4@3 bb4@4 a4@4 ~ bb4@3 a4@5 bb4@4", Y: "a4@4 bb4@3 a4@4 bb4@5 a4@3 bb4@5",
  Z: "[a4@3 bb4@4 ~ c4@4 [d4,bb4]@4 [eb4,a4]@3 [f4,bb4]@4 [gb4,a4]@4 [a4,bb4]@4 [c5,f5]@23 ~@18, ~@7 a4@5 ~@60]/3", // Gm Ebdim Bb5 Gbm Bbmaj7 F5
})).s("gm_bandoneon").gain(0.48).pan(0.3)

stack(piano, bass, electric_guitar_jazz, soprano_sax, bandoneon)

More by Mina