Strudelify

The Brazilian

Genesis

KeyB minorTempo133 bpm
0:00/0:00
// The Brazilian — Genesis
// 133 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · lead 8 bass lead · "bass clef"
const bass = note(`<
  A B C D E A F C A G D H C A I A B C D E J K L M J K J M N O P Q N R P Q S T U V W X Y Z W AA Y AB AC AD AE AF AG AH AE
  AF AG AH AI AH AJ AK@3 U@2 S AL AM AN AO U@3 S U@2 AP S U@2 S T AE AF AG AH AE AF AG AH AI AH AJ AQ ~@9 AE AF AG AH AE
  AF AG AH AI AH AJ AE AF AG AH AE AF AG AH AE AR AE AR AE AR AE AR AS AT AU AV AS AT AU AV AS AT AU AV AS AT AU AW
>`.pickRestart({
  A: "~ b2 d2 ~ b2@3 ~ d2 b2 ~@3 b2@2 ~", B: "b2 ~ b1@2 ~ b2@2 ~@2 b2 d2@2 b2@3 ~",
  C: "d2 b2 ~@3 b2@2 ~ b2 ~ b1@2 ~ b2@2 ~", D: "~ b2 d2@2 b2@3 ~ d2 b2 ~@3 b2@2 ~",
  E: "b2@2 ~ b1 ~ b2@2 ~@2 b2 b1@2 b2@3 ~", F: "b2@2 b1@2 ~ b2@2 ~@2 b2 d2 ~ b2@3 ~",
  G: "b2@2 ~ b1@2 b2@2 ~@2 b2 b1 ~ b2@3 ~", H: "b2 ~ b1@2 ~ b2@2 ~@2 b2 d2 ~ b2@3 ~",
  I: "b2@2 ~ b1 ~ b2@2 ~@2 b2 b1 ~ b2@3 ~", J: "~@2 b1 ~ b1@3 ~ b1@3 ~ b2@3 ~", K: "~@2 b1@2 b1 ~ b1 ~ b1@3 ~ b2@3 ~",
  L: "~@2 b1@2 b1@3 ~ b1@3 ~ b2@3 ~", M: "~@2 b1 ~ b1 ~ b1 ~ b1@3 ~ b2@3 ~", N: "b2 ~ b1@3 ~ b1 ~ b1@3 ~@5",
  O: "b2@2 b1@3 ~ b1 ~ b1@3 ~@5", P: "b2 ~ b1@3 ~ b1@2 b1@3 ~ b1@3 ~", Q: "b2 ~ b1@3 ~ b1 ~ b1@3 ~ b1@3 ~",
  R: "b2@2 b1@3 ~ b1@2 b1@3 ~@5", S: "b1@2 b2@2 b1 b2 b1 b2 b1@3 ~@5", T: "b1 ~ b2@2 b1 b2 b1 b2 b1@3 ~@5",
  U: "b1 ~ b2 ~ b1 b2 b1 b2 b1@3 ~@5", V: "b1 ~ b2 ~ b1 b2 b1 b2 g1@3 ~ g2@3 ~", W: "g1@2 g2@2 g1 g2 g1 g2 g1@3 ~@5",
  X: "g1 ~ g2 ~ g1 g2 g1 g2 g1@3 ~ a1@3 ~", Y: "a1 ~ a2 ~ a1 a2 a1 a2 a1@3 ~@5", Z: "a1 ~ a2 ~ a1 a2 a1 a2 g1@3 ~@5",
  AA: "g1 ~ g2 ~ g1 g2 g1 g2 a1@3 ~ a1@3 ~", AB: "a1@2 a2 ~ a1 a2 a1 a2 e2@3 ~ e2@3 ~",
  AC: "~@2 e2@2 e2@2 e2@2 e3@3 ~@5", AD: "~@2 e2 ~ e2 ~ e2@2 d3@3 ~ e2@3 ~", AE: "[b2,d#3,f#3]", AF: "[f#2,a2,c#3]",
  AG: "[d3,f#3,a3]", AH: "[g2,b2,d3]", AI: "[a2,c#3,e3]", AJ: "a1", AK: "[b1@47 ~]/3", AL: "b1 ~ b2@2 b1 b2 c2 c3 c2@8",
  AM: "a1 ~ a2 ~ a1 a2 a1 ~ a1@8, ~@7 a2@8 ~", AN: "b1 ~ b2 ~ b1 b2 b1 b2 d2@3 ~@5",
  AO: "b1@2 b2@2 b1 b2 b1 b2 b1@3 ~ b1@3 ~", AP: "b1@2 b2 ~ b1 b2 b1 b2 b1@3 ~@5", AQ: "[b1,b2]",
  AR: "[g2,b2] [a2,c#3]", AS: "b1 b2", AT: "f#2 f#3", AU: "d2 d3", AV: "g2@8 g3@7 ~", AW: "g2 g3",
})).s("gm_lead_8_bass_lead").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  [x ~ x ~ x!4 ~ x ~ x!4 ~]!6
  ~@3
  [x ~ x ~ x!4 ~ x ~ x!4 ~]!84
  ~@3
  [x!8]!4
  [x ~ x ~ x!4 ~ x ~ x!4 ~]!39
  [x ~ x ~ x!4 ~ x ~ x!3 ~@2]
  ~@7
>`).gain(0.41)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@139 [~@7 x] [x ~ x ~ x!4 ~ x ~ x!4 ~]!7>").gain(0.15)

// drums · rim
const rim = s("rim").struct("~ x").gain(0.41)

// drums · clap
const clap = s("cp").struct("~ x ~@3 x ~@2").gain(0.41)

// drums · hihat
const hihat = s("hh").struct("x!4").gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("~ x ~ x ~ x ~ x").gain(0.41)

// drums · china
const china = s("cr").struct("<[x!2]!6 [x ~@7 x!8] [x!16]!2 [x!2]!92 [x ~@7 x!8] [x!16]!2 [x!2]!43>").gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct("x ~@2 x ~@3 x").gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("~ x ~ x").gain(0.41)

// drums · cowbell
const cowbell = s("cb").struct("~ x ~@3 x ~@2").gain(0.41)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("~ x").gain(4.81)

// drums · bongos
const bongos = s("bongo:18").struct("<~@10 [~ x ~ x ~@3 x] ~@136>").gain(1.08)

// drums · congas
const congas = s("conga:18").struct("<A@6 B ~@2 C A@10 D A@72 ~@7 A@39 E ~@7>".pickRestart({
  A: "~@3 x!3 ~ x!3 ~ x!3 ~ x", B: "x", C: "~@2 x!8 ~ x!5", D: "x ~@2 x!3 ~ x!3 ~ x!3 ~ x",
  E: "~@3 x!3 ~ x!3 ~ x!3 ~@2",
})).gain(1.31)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@139 [~@15 x] [~@3 x!3 ~ x!3 ~ x!3 ~ x]!7>").gain(0.49)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  [x!3 ~@3 x ~@3 x ~@3 x ~]!6
  ~@3
  [x!3 ~@3 x ~@3 x ~@3 x ~]!84
  ~@7
  [x!3 ~@3 x ~@3 x ~@3 x ~]!39
  [x!3 ~@3 x ~@3 x ~@5]
  ~@7
>`).gain(1.31)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct("<~@139 [~@7 x] [x!3 ~@3 x ~@3 x ~@3 x ~]!7>").gain(0.49)

// drums · ht
const ht = s("ht").struct("<[~@4 x ~@2 x]!139 [~ x] ~@7>").gain(0.41)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@139 [~@7 x] [~@4 x ~@2 x]!7>").gain(0.15)

// drums · mt
const mt = s("mt").struct("<[~@3 x ~@2 x ~]!9 [~@3 x ~ x!2 ~]!2 [~@3 x ~@2 x ~]!136>").gain(0.41)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("~@2 x ~@2 x ~@2").gain(2.61)

// drums · shaker
const shaker = s("sh").struct("~ x ~ x ~ x ~ x").gain(0.41)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("x!4").gain(0.59)

// drums · triangle
const triangle = s("triangles:30").struct("~ x ~ x ~ x ~ x").gain(3.57)

// drums · triangle
const triangle_2 = s("triangles:35").struct("x!4").gain(3.57)

stack(
  bass, kick, kick_soft, rim, clap, hihat, open_hat, china, ride_bell, tambourine, cowbell, vibraslap, bongos, congas,
  congas_soft, congas_2, congas_soft_2, ht, ht_soft, mt, agogo_bells, shaker, woodblocks, triangle, triangle_2
)

More by Genesis