Strudelify

Prinzessin De Bahia Tropical

Die Doofen

KeyC majorTempo115 bpm
0:00/0:00
// Prinzessin De Bahia Tropical — Die Doofen
// 115 bpm, 4/4, key C 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: duplicate parts dropped: ch 5 "CLEAN GTR" electric guitar clean (copy of ch 3 "JAZZ GTR" electric guitar jazz)
// note: Full arrangement: all 88 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): STEEL GTR.
setcpm(115/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(`<
  ~@7 A@4 B C D E A@4 B C F G H I J K L M N O H I J K P Q R S R T A@4 B C F G H I J K U V W X A@4 B C F G H I Y K L Z N
  O H AA Y K L Z R S R AB R AB R AC AD
>`.pickRestart({
  A: "c2@4 ~@2 g1@4 ~@2 a1@4 ~@2 e1@3 ~@3", B: "f1@4 ~@2 c2@4 ~@2 f1@5 ~ c2@4 ~@2", C: "c2@2 ~ g1@2 ~ c2@2 ~ g1@2 ~",
  D: "f1@2 ~ c2@2 ~ f1@2 ~ c2@2 ~", E: "b1@2 ~ g1@2 ~ a1@2 ~ a#1 ~@2 b1@2 c2@2 ~ c#2 ~@2 d2@2 ~@2",
  F: "a#1@2 ~ f1@2 ~ a#1@2 ~ f1@2 ~", G: "b1@2 ~ g1@2 ~ a1@2 ~ a#1 ~@2 b1@2 ~@10", H: "c2@5 ~@4 c2@12 ~@3",
  I: "d2@4 ~@2 a1@5 ~ g1@5 ~ b1@2 ~ c2@2 ~", J: "d2@4 ~@2 a1@5 ~ g1@4 ~@2 b1@2 ~ g1@3",
  K: "c2@4 ~@2 g1@4 ~@2 c2@4 ~@2 g1@3 ~@3", L: "f1@5 ~ c2@5 ~ f1@5 ~ c2@4 ~@2",
  M: "c2@5 ~ g1@2 ~ g#1@3 a1@4 ~@2 c#2@4 ~@2", N: "d2@5 ~ a1@4 ~@2 d2@4 ~@2 a1@3 ~@3",
  O: "g1@4 ~@2 d2@5 ~ g1@4 ~@2 d2@3 ~@3", P: "f1@3 ~@3 c2@5 ~ f1@5 ~ c2@4 ~@2", Q: "c2@5 ~ g1@3 c2@3 c2@4 ~@2 g1@4 ~@2",
  R: "d2@5 ~ a1@4 ~@2 g1@4 ~@2 b1@3 ~@3", S: "c2@4 ~@2 g1@5 ~ c2@4 ~@2 g1@3 ~@3", T: "c2@4 ~@2 g1@5 ~ c2@4 ~@8",
  U: "f1@3 ~@3 c2@3 ~@3 f1@4 ~@2 c2@3 ~@3", V: "c2 ~ g1 ~ c2 ~ g1 ~", W: "d2@3 ~@3 a1@3 ~@3 d2@2 ~@4 a1@3 ~@3",
  X: "g1 ~ d2 ~ g1 ~@3", Y: "d2@4 ~@2 a1@5 ~ g1@4 ~@2 b1@4 ~@2", Z: "c2@5 ~ g1@4 ~@2 c2@4 ~@2 g1@4 ~@2",
  AA: "d2@4 ~@2 a1@5 ~ g1@5 ~ d2@3 ~@3", AB: "c2@4 ~@2 g1@5 ~ a1@4 ~@2 e2@3 ~@3",
  AC: "g#1@4 ~@2 d#2@5 ~ a#1@4 ~@2 d2@3 ~@3", AD: "c2@3 ~@2 c2@2 ~ c2 ~@2 c2!2 ~@11",
})).s("gm_acoustic_bass").gain(0.34).pan(0.6)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@56 A@2 B C D E F G H ~@23>".pickRestart({
  A: "[~@14 g3@2 ~ b3 c4@2 ~ e4 ~@2 e4@9 ~@6 a3@2 b3 c4@2 ~@2 f4@2, ~@16 a3@2 ~@2 d4@2 ~ f4@2 ~@13 g3@2 ~@4 d4@2 ~@2, ~@45 e4@2 ~]/2",
  B: "~ g4 f4 ~@2 e4@2 ~ e4 ~@3 e4@9 ~@3, ~@7 f4@2 ~@2 c4@2 ~@11",
  C: "~@3 e4@2 ~ c4 ~ b3 ~@2 c4 ~ e4@2 c4 ~ b3 ~ c4@2 b3 ~ g3, ~ a4 ~@10", D: "b3@2 ~ c4 ~ g3@8 ~@5 d4 ~ c4 ~@2 g3",
  E: "~ g3@3 c4@2 ~@3 b3 ~@4 b3 c4 d4 e4 f4 g4 a4 b4 a4 g4",
  F: "a4 g4 f4 e4 d4 c4 b3 a3 g3 a3 b3 c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5 a5",
  G: "a#5 c6 d6 c6 a#5 a5 g5 f5 d#5 g5 f5 d#5 d5 c5 a#4 a4 g4 f4 d#4 d4 c4 b3 a3 g3",
  H: "g3@3 ~@2 d4@2 ~ d4@2 c4 ~ c4@2 ~@10, ~@4 c4@2 ~ e4@2 ~@2 a3@2 ~@11",
})).s("gm_electric_guitar_jazz").gain(0.46)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A@4 B@2 C D E F@2 G H I J F@4 G H K L M N O P Q R S J M N O P Q R T H T U F@2 V F G H K L M N O P Q R S W F@4 G H K L
  M N O P Q R S J M N O P Q R T H T F T F T X Y
>`.pickRestart({
  A: "[~@7 e2@23 ~@4 g#3@2 e3 ~ g#3 ~ g#3@2 e3 ~@3 e4@14 ~@3 e4@14 ~ [c4,e4]@4 ~ [c4,e4]@3 ~ [c4,e4]@3 [c4,e4]@2 ~ [c4,e4]@2 ~, ~@3 e4@27 ~@3 b3@2 ~@4 b3@2 ~@4 c4@15 ~@36, ~@4 b3@25 ~@3 g#3@2 ~@10 a3@15 ~@3 [a3,c4]@16 ~@18, ~@5 g#3@24 ~@2 e3@2 ~@63, ~@6 e3@23 ~ b2@2 ~@5 [b2,e3]@2 ~@4 b2@16 ~@37]/4", // C Am E5
  B: "[[c4,e4]@2 ~@5 [e2,e3]@41, ~@3 e4@44 ~, ~@4 b3@43 ~, ~@5 g#3@42 ~]/2", // C E
  C: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~@11", // C
  D: "[c3,e3,g3,c4]@2 [c3,e3] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [a2,c3,e3,a3]@2 [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3]", // C Am
  E: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [a2,c3,e3,a3]@2 [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3]", // C Am A5 Am
  F: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [a2,c3,e3,a3] ~ [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3]!2 ~ [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3]", // C Am
  G: "[c3,f3,a3,c4] ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]!2 ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]!2 ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,e3,a3,c4] [c3,f3,a3,c4] ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]", // F Am F
  H: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]", // C
  I: "[c3,f3,a3,c4] ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]!2 ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]!2 ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]!2 ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]", // F
  J: "[b2,d3,g3,b3] ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]", // G
  K: "[a#2,d3,f3,a#3] ~ [a#2,d3,f3,a#3] [a#2,d3,f3,a#3]@2 [a#2,d3,f3,a#3]!2 ~ [a#2,d3,f3,a#3] [a#2,d3,f3,a#3]@2 [a#2,d3,f3,a#3]!2 ~ [a#2,d3,f3,a#3] [a#2,d3,f3,a#3]@2 [a#2,d3,f3,a#3]!2 ~ [a#2,d3,f3,a#3] [a#2,d3,f3,a#3]@2 [a#2,d3,f3,a#3]", // A#
  L: "[b2,d3,g3,b3]@2 [g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3] [b2,d3,g3,b3]@2 ~@10", // G
  M: "[c3,e3,g3,c4]@3 [c3,e3,g3,c4]@5", // C
  N: "[a2,d3,f3,a3]@2 [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2 ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3] [g2,b2,d3,g3] ~ [g2,b2,d3,g3] [g2,b2,d3,g3]@2 [g2,b2,d3,g3]!2 ~ [g2,b2,d3,g3] [g2,b2,d3,g3]@2 [g2,b2,d3,g3]", // Dm G
  O: "[a2,d3,f3,a3] ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2 ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3] [g2,b2,d3,g3] ~ [g2,b2,d3,g3] [g2,b2,d3,g3]@2 [g2,b2,d3,g3]!2 ~ [g2,b2,d3,g3] [g2,b2,d3,g3]@2 [g2,b2,d3,g3]", // Dm G
  P: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [e3,g3,c4]", // C
  Q: "[c3,f3,a3,c4] ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4]!2 ~ [c3,f3,a3,c4] [c3,f3,a3,c4]@2 [c3,f3,a3,c4] [c3,f3,g#3,c4] ~ [c3,f3,g#3,c4] [c3,f3,g#3,c4]@2 [c3,e3,g#3,c4] [c3,f3,g#3,c4] ~ [c3,f3,g#3,c4] [c3,f3,g#3,c4]@2 [c3,f3,g#3,c4]", // F Fm Caug Fm
  R: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [a2,c#3,e3,a3] ~ [a2,c#3,e3,a3] [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]!2 ~ [a2,c#3,e3,a3] [a2,c#3,e3,a3]@2 [a2,c#3,e3,a3]", // C A
  S: "[a2,d3,f3,a3] ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2 ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2 ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2 ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]", // Dm
  T: "[a2,d3,f3,a3] ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2 ~ [a2,d3,f3,a3] [a2,d3,f3,a3]@2 [a2,d3,f3,a3] [b2,d3,g3,b3] ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]", // Dm G
  U: "[c3,e3,g3,c4] ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [c3,e3,g3,c4]@6 ~@6", // C
  V: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 ~ [c3,e3,g3,c4] [c3,e3,g3,c4]@2 [c3,e3,g3,c4] [a2,c3,e3,a3] ~ [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3]!2 ~ [a2,c3,e3,a3] [a2,c3,e3,a3]@2 [a2,c3,e3,a3]", // C Am
  W: "[b2,d3,g3,b3] ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~ [b2,d3,g3,b3] [b2,d3,g3,b3]@2 [b2,d3,g3,b3]!2 ~@11", // G
  X: "[c3,d#3,g#3,c4] ~ [c3,d#3,g#3,c4] [c3,d#3,g#3,c4]@2 [c3,d#3,g#3,c4]!2 ~ [c3,d#3,g#3,c4] [c3,d#3,g#3,c4]@2 [c3,d#3,g#3,c4] [a#2,d3,f3,a#3] ~ [a#2,d3,f3,a#3] [a#2,d3,f3,a#3]@2 [a#2,d3,f3,a#3]!2 ~ [a#2,d3,f3,a#3] [a#2,d3,f3,a#3]@2 [a#2,d3,f3,a#3]", // G# A#
  Y: "[c3,e3,g3,c4]!4 [c3,e3,g3,c4]@3 [c3,e3,g3,c4]@3 [c3,e3,g3,c4] ~ [c3,e3,g3,c4]@3 ~@9", // C
})).s("gm_acoustic_guitar_nylon").gain(0.14).pan(0.6)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@3 A ~@5 B C ~@6 B C ~@24 B C ~@14 B C ~@26 D>".pickRestart({
  A: "~@21 d4@2 ~", B: "~ c4 ~@2 c4 ~@2 [c3,e3,g3,c4] ~@2 c3 ~@2 [e3,a3] ~@2 a3 ~@2 [a2,c3,e3,a3] ~@2 a2 ~",
  C: "~ c4 ~@2 c4 ~@2 [c3,e3,g3,c4] ~@2 c4 ~@2 [c3,e3,a3] ~@2 a3 ~@2 [e3,a3] ~@2 a2 ~, ~@13 a2@3 ~@3 c3@3 ~@2", // C Am A5
  D: "~@5 [c3,e3,c4]@3 [c3,e3]@3 [c3,e3,g3] ~@12", // C
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@7 A@15 B C A@7 C A@8 D A@7 B C A@6 E A@7 E C A@7 C A@13 F>".pickRestart({
  A: "x!4", B: "x ~@4 x ~@6 x ~@11", C: "x ~@2 x ~@4", D: "x!3 ~", E: "x!2 ~ x ~@2", F: "x ~@4 x ~@2 x ~@2 x!2 ~@11",
})).gain(0.36)

// drums · clap
const clap = s("cp").struct("<~@24 A@7 ~ A@8 B ~@9 A@6 C A@7 C ~ A@7 ~ A@13 B>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@11",
  C: "x ~ x!2 ~ x!2 ~ x!2 ~ x!3 ~@10",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<~@7 A@15 B ~ C@7 ~ C@8 B A@6 D B ~ C@6 B C@7 B ~ C@7 ~ C@13 B>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", B: "~ x ~@2 x ~@7", C: "~ x ~@2 x ~@2 x ~@2 x ~",
  D: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.41)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@22 A ~ B@7 ~ B@8 C ~@6 D A ~ B@6 E B@7 E ~ B@7 ~ B@13 A>".pickRestart({
  A: "~@5 x ~@5 x ~@2 x ~@9", B: "~@5 x ~@5 x ~@5 x ~@5 x", C: "~@5 x ~@5 x ~@12", D: "~@23 x", E: "~@6 x ~@4 x ~@12",
})).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A@15 B C A@7 C A@8 D A@7 B C A@6 E A@7 E C A@7 C A@13 E>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x ~@4 x ~@6 x ~@11", C: "x ~@2 x ~@4", D: "~ x ~ x ~@4", E: "~ x ~ x!2 ~@3",
})).gain(0.31)

// drums · bongos
const bongos = s("bongo:18").struct("<~@6 [~@15 x!3 ~@6] ~@49 [~@11 x!3 ~@10] ~@7 [~@11 x!3 ~@10] ~@23>").gain(1.22)

// drums · congas
const congas = s("conga:13").struct("<~@6 [~@3 x] ~@81>").gain(1.65)

stack(
  bass, electric_guitar_jazz, acoustic_guitar_nylon, acoustic_guitar_steel, kick, clap, hihat, hihat_soft, open_hat,
  bongos, congas
)