Strudelify

mas que nada

Jorge Ben

KeyA♭ majorTempo94 bpm
0:00/0:00
// mas que nada — Jorge Ben
// 94 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5959716; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(94/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 · piano
const piano = note("<A B C D E F G F@2 H@2 F I@2 J K L M N O@2 F G F@2 H@2 F I@2 J K L M N O@2 P@3 Q>".pickRestart({
  A: "~@15 [c3,eb3,ab3]", B: "~ [d3,f3,bb3]@3 ~@2 [c3,eb3,ab3]@2 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~@4",
  C: "[c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~ [c3,eb3,ab3]@2 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~@4", // Ab Bb Ab Bb
  D: "~ [c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~ [c3,eb3,ab3]@2 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~@3", // Ab Bb Ab Bb
  E: "~ [c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~@2 [c3,eb3,ab3]@2 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~@2", // Ab Bb Ab Bb
  F: "~@2 [c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~ [c3,eb3,ab3]@2 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~@2", // Ab Bb Ab Bb
  G: "[bb2,f3,ab3]@3 [bb2,f3,ab3] ~@4 [db3,f3,bb3]@3 [db3,f3,bb3] ~@4", // Bb7 Bbm
  H: "[~@2 [c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~ [c3,f3] [f3,ab3,c4]@2 [d3,f3,bb3]@2 [d3,f3,ab3]@2 [bb2,f3,ab3]@4 [bb2,f3,ab3] ~@4 [db3,f3,bb3]@3 [db3,f3,bb3] ~@4]/2", // Ab Bb F5 Fm Bb Ddim Bb7 Bbm
  I: "[~@2 [c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~@3 [e2,bb2,eb3]@4 [e2,bb2,db3] [eb2,ab2,c3]@4 [eb2,ab2,c3] ~@4 [eb2,bb2,eb3]@3 [e2,bb2,eb3] ~@2 [e2,bb2,db3]@2]/2", // Ab Bb Eb Bbdim Ab Eb5 Eb Bbdim
  J: "[eb2,ab2,c3]@3 [eb2,ab2,c3] ~@4 [e2,bb2,eb3]@3 [e2,bb2,eb3] ~@2 [e2,bb2,db3]@2", // Ab Eb Bbdim
  K: "[eb2,ab2,c3]@3 [eb2,ab2,c3] ~@4 [e2,bb2,d3]@4 [e2,bb2,db3]@4", // Ab Em7b5 Bbdim
  L: "[c3,eb3,ab3]@4 [e3,g3,bb3]@3 c3 [c3,eb3,ab3]@3 [c3,eb3,ab3,c4] ~ [c3,eb3,ab3,c4] ~@2", // Ab Edim Ab
  M: "[bb2,db3,ab3]@3 [bb2,db3,ab3] ~@4 [db2,f2,g2,bb2,db3]@4 [e2,g2,bb2,db3]@4", // Bbm7 Gm7b5 Edim
  N: "[eb3,ab3,c4]@3 [eb3,ab3,c4] ~@2 [d3,g3,b3]@2 [eb3,ab3,c4]@3 [c3,eb3,ab3] ~@4", // Ab G Ab
  O: "[[bb2,db3,ab3]@3 [bb2,db3,ab3] ~@4 [eb2,bb2,eb3]@4 [e2,g2,bb2,db3]@3 [eb3,ab3,c4]@4 [eb3,ab3,c4] ~@2 [db3,f3,ab3]@2 [c3,e3,g3]@2 [e3,bb3,eb4]@6]/2", // Bbm7 Eb5 Edim Ab Db C Eb
  P: "f3@2 [c3,eb3,ab3] ~ [d3,f3,bb3]@3 ~ [c3,eb3,ab3]@2 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~ ab3", // Ab Bb Ab Bb
  Q: "~ [c4,eb4]@15, [f3,ab3]", // Cm Fm
})).s("gm_piano").gain(0.25)

// bass · acoustic bass
const bass = note("<A B C@3 D E D@3 E D F G@3 H I J K@2 D E D@3 E D F G@3 H I J K@2 D@3 L>".pickRestart({
  A: "~@13 f2@3", B: "f2 bb2@3 f2 ~ f2@3 bb2 bb2@2 ab2@2 f2@2",
  C: "[~ f2 bb2@3 f2 f2@3 bb2 bb2@2 ab2@2 ~ f2@3 f2 bb2@3 f2 f2@3 bb2 bb2@2 ab2@2 f2@3 f2 bb2@3 ~ f2 f2@3 bb2 bb2@2 ab2@2]/3",
  D: "f2@3 f2 bb2@3 f2 f2@3 bb2 bb2@2 ab2@2", E: "bb2@3 f2 f2@3 db3 eb3@3 bb2 bb2@3 f2",
  F: "f2@3 f2 bb2@3 f2 c2@2 c3@3 ~@3", G: "f2@3 f2 ~ bb1 c2 eb2 c2@3 c2 ~ c2 eb2 e2",
  H: "f2@3 f2 c2@4 f2@3 f2 ~ f2 ~@2", I: "bb2@3 f2 f2@3 db3 eb3@3 bb2 ab2@3 f2", J: "f2@3 f2 ~@2 e2@2 f2@8",
  K: "[bb2@3 f2 f2@3 db3 c2@4 eb2@3 f2@4 f2 ~@2 d2@2 c2@2 c2@6]/2", L: "f2",
})).s("gm_acoustic_bass").gain(0.44)

// chords · string ensemble 1 · "Violins"
const string_ensemble_1 = note("<~@13 A@2 B C D E F G ~@8 A@2 B C D E F G ~@4>".pickRestart({
  A: "[f4,ab4,c5,eb5]@4 [c4,eb4,g4,bb4,eb5]@3 [c4,e4,g4,bb4,db5]", // Fm7 Cm7 C7
  B: "[f4,ab4,c5,eb5]@2 [c4,e4,g4,bb4,d5] [c4,e4,g4,bb4,db5]", C: "[f4,ab4,c5,eb5] [c4,e4,g4,bb4] [f4,ab4,c5,eb5]@2",
  D: "[db4,f4,ab4,bb4]@2 [eb4,g4,bb4,db5,f5] [e4,g4,bb4,db5]", // Bbm7 Eb7 Edim
  E: "[f4,ab4,c5,eb5]@6 [e4,g4,b4,d5]@2 [f4,ab4,c5,eb5]@3 [ab4,c5,eb5,f5]@5", // Fm7 Em7 Fm7
  F: "[db4,f4,ab4,bb4]@8 [c4,eb4,g4,bb4,eb5]@4 [e4,g4,bb4,db5]@3 [f4,ab4,c5,eb5]", // Bbm7 Cm7 Edim Fm7
  G: "[f4,ab4,c5,eb5]@3 [d4,gb4,a4] [c4,e4,g4] [c4,eb4,g4,bb4,eb5]@3", // Fm7 D C Cm7
})).s("gm_string_ensemble_1").gain(0.2)

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

// drums · clap
const clap = s("cp").struct(`<
  [~@15 x]
  [~@2 x ~@5 x ~@2 x ~@4]
  [x ~@2 x ~@4 x ~@2 x ~@4]
  [~ x ~@2 x ~@4 x ~@2 x ~@3]
  [~ x ~@3 x ~@4 x ~@2 x ~@2]
  [~@2 x ~@2 x ~@4 x ~@2 x ~@2]!35
  ~
>`).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<[~@13 x!3] [x!5 ~ x!10] [x!13 ~ x!2] [x!16] [x!4 ~ x!11] [x!16]!35 x>").gain(0.25)

// drums · crash
const crash = s("cr").struct("<A ~@4 B ~@6 C B ~@3 B ~@2 C B ~@6 C B ~@3 B ~@2 C B ~@3>".pickRestart({
  A: "~@13 x ~@2", B: "x", C: "~@5 x ~@2",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B C D E F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F H
>`.pickRestart({
  A: "~@13 x!2 ~", B: "x!5 ~ x!10", C: "x!13 ~ x!2", D: "x ~ x!14", E: "x!4 ~ x!11", F: "x!2 ~ x!13", G: "x!16", H: "x",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct("<~@17 A@2 B C ~@12 A@2 B C ~@4>".pickRestart({
  A: "~@2 x ~@3 x ~ x ~@2 x ~@2 x ~", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", C: "~@2 x ~@2 x ~@10",
})).gain(0.25)

// drums · congas
const congas = s("conga:13").struct(`<
  [~@15 x]
  [x ~@7 x!2 ~@6]
  [x!2 ~@6 x!2 ~@6]
  [~ x!2 ~@6 x!2 ~@5]
  [~ x!2 ~@7 x!2 ~@4]
  [~@2 x!2 ~@6 x!2 ~@4]!35
  ~
>`).gain(0.95)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~
  [~@3 x!2 ~@7 x!2 ~@2]
  [~@4 x!2 ~@6 x ~ x ~]
  [~@5 x!2 ~@6 x!2 ~]
  [~@6 x!2 ~@6 x!2]!36
  ~
>`).gain(0.95)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  [~@13 x ~@2]
  [~ x ~@2 x ~ x ~@3 x!2 ~ x!2 ~]
  [~@2 x ~@2 x!2 ~@3 x!2 ~@2 x!2]
  [~@3 x ~@2 x!2 ~@3 x!2 ~ x!2]
  [~@3 x ~@3 x!2 ~@3 x!2 ~ x]
  [x ~@3 x ~@2 x!2 ~@3 x!2 ~ x]!35
  x
>`).gain(0.95)

// drums · ht
const ht = s("ht").struct("<~@12 A ~@3 B ~@3 C ~@7 A ~@3 B ~@3 C ~@4>".pickRestart({
  A: "~@7 x!2 ~@7", B: "~@11 x!2 ~@3", C: "~ x",
})).gain(0.3)

// drums · mt
const mt = s("mt").struct("<~@16 A ~@3 B ~@11 A ~@3 B ~@4>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.35)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@3 [x ~@8 x ~ x ~@4] [x ~@9 x ~ x ~@2 x] ~@34 [~ x ~@8 x ~ x ~@3] ~>")
  .gain(1.58)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct(`<
  ~@3
  [~@2 x!2 ~ x ~ x ~@6 x ~]
  [~@2 x!2 ~@2 x ~ x!2 ~@5 x]
  ~@34
  [~@3 x!2 ~ x ~ x ~@6 x]
  ~
>`).gain(1.58)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@17 [~ x ~ x ~ x ~ x]!4 ~@12 [~ x ~ x ~ x ~ x]!4 ~@4>").gain(1.51)

// drums · shaker
const shaker = s("sh").struct(`<
  [~@13 x!3]
  [x!2 ~ x!2 ~ x!10]
  [x!3 ~ x!9 ~ x!2]
  [x!4 ~ x!11]
  [x!4 ~@2 x!10]
  [x!5 ~ x!10]!35
  x
>`).gain(0.2)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  A B C D E F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F H
>`.pickRestart({
  A: "~@13 x ~ x", B: "~@2 x ~ x ~@2 x ~ x!2 ~ x ~ x ~", C: "x ~@2 x ~ x ~ x ~ x ~ x ~@2 x!2",
  D: "~ x ~@2 x ~ x ~ x ~ x!2 ~ x ~ x", E: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", F: "x ~ x ~@2 x ~ x ~ x ~ x!2 ~ x ~",
  G: "x ~ x ~@2 x ~ x ~ x ~ x ~ x ~ x", H: "x",
})).gain(0.29)

// drums · lt
const lt = s("lt").struct(`<
  [~@13 x ~@2]
  [~ x ~@2 x ~ x ~@3 x!2 ~ x!2 ~]
  [~@2 x ~@2 x!2 ~@3 x!2 ~@2 x!2]
  [~@3 x ~@2 x!2 ~@3 x!2 ~ x!2]
  [~@3 x ~@3 x!2 ~@3 x!2 ~ x]
  [x ~@3 x ~@2 x!2 ~@3 x!2 ~ x]!35
  x
>`).gain(0.25)

stack(
  piano, bass, string_ensemble_1, kick, clap, hihat, crash, tambourine, ride, congas, congas_2, congas_3, ht, mt,
  agogo_bells, agogo_bells_2, cabasa, shaker, woodblocks, lt
)