Strudelify

Kontebonke

Franky Boy

KeyA♭ majorTempo120 bpm
0:00/0:00
// Kontebonke — Franky Boy
// 120 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@8 A B A C A B A@3 B A C A B A@3 C A@4 D E@3 F@2 A B A C A B A@3 C A@4 D E@3 F@2 A B A C A B A@3 C A@4 D E@3 F@2 A B
  A C A B A@3 C A@4 D E@3 F@2 A B A C A B A@2 ~@8 A B A C A B A@3 B A C A B A@2 ~
>`.pickRestart({
  A: "ab1@2 ab2 ~ ab1@2 ab2 ~ ab1@2 ab2 ~ ab1@2 ab2 ~", B: "ab1@2 ab2 ~ ab1@2 ab2 ~ db2@2 db3 ~ eb2@2 eb3 ~",
  C: "ab1@2 ab2 ~ ab1@2 ab2 ~ f1@2 f2 ~ eb1@2 eb2 ~", D: "ab1@2 ab2 ~ ab1@2 ab2 ~ eb1@2 eb2 ~ eb1@2 eb2 ~",
  E: "eb1@2 eb2 ~ eb1@2 eb2 ~ eb1@2 eb2 ~ eb1@2 eb2 ~", F: "eb1@2 eb2 ~ eb1@2 eb2 ~ ab1@2 ab2 ~ ab1@2 ab2 ~",
})).s("gm_synth_bass_2").gain(0.45)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@8 A B A C A B A C A B A C ~@8 A B A C A B A C A B A C ~@8 A
  B A C A B A C A B A C ~@8 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~
>`.pickRestart({
  A: "g2 ab2!3 ~@3 ab2", B: "ab2!2 g2 f2 f2@2 eb2@2", C: "ab2 g2 f2 g2 ab2@2 ~@2",
})).s("gm_lead_2_sawtooth").gain(0.24).pan(0.2)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  A B A C D E D F D E D F D E D F G E G H G E G F D E D F ~@8 G E G H G E G F D E D F ~@8 G E G H G E G F D E D F ~@8 G
  E G H G E G F D E D F ~@8 G E G H G E G F D E D F D E D F D E D F D E D F G E G H G E G F ~
>`.pickRestart({
  A: "g3 ab3!3 ~@3 ab3", B: "ab3!2 g3 f3 f3@2 eb3@2", C: "ab3 g3 f3 g3 ab3@2 ~@2",
  D: "[g3,g4] [ab3,ab4]!3 ~@3 [ab3,ab4]", E: "[ab3,ab4]!2 [g3,g4] [f3,f4] [f3,f4]@2 [eb3,eb4]@2",
  F: "[ab3,ab4] [g3,g4] [f3,f4] [g3,g4] [ab3,ab4]@2 ~@2", G: "[g3,g4] [ab3,ab4]!2 ab4@4 [ab3,ab4], ~@3 ab3 ~@4",
  H: "[ab3,ab4] [g3,g4] [f3,f4] [g3,g4] ab4@4, ~@2 ab3 ~", // Ab G F G
})).s("gm_synth_brass_1").gain(0.32).pan(0.9)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@4 A B A C A B A C A B A C ~@8 A B A C ~@16 A B A C ~@16 A B A C ~@16 A B A C ~@20 A B A C A B A C A B A C ~@9
>`.pickRestart({
  A: "g3 ab3!3 ~@3 [ab3,ab4]", B: "[ab3,ab4]!2 [g3,g4] [f3,f4] [f3,f4]@2 [eb3,eb4]@2",
  C: "[ab3,ab4] [g3,g4] [f3,f4] [g3,g4] [ab3,ab4]@2 ~@2", // Ab G F G Ab
})).s("gm_brass_section").gain(0.36).pan(0.3)

// other · celesta
const celesta = note("<~@28 A ~ B ~ C ~ D ~@13 A ~ B ~ C ~ D ~@13 A ~ B ~ C ~ D ~@13 A ~ B ~ C ~ D ~@34>".pickRestart({
  A: "~@2 ab4 ~ c5 ~ ab4 ~@3 c5 ~ eb5 ~ c5 ~", B: "~@2 ab4 ~ c5 ~ ab4 ~@3 g4 ~ bb4 ~ g4 ~",
  C: "~@2 g4 ~ bb4 ~ g4 ~@3 bb4 ~ db5 ~ bb4 ~", D: "~@2 g4 ~ bb4 ~ g4 ~@3 ab4 ~ c5 ~ ab4 ~",
})).s("gm_celesta").gain(0.35).pan(0.2)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note(`<
  ~@15 A ~@7 A ~@11 A ~@7 A ~@11 A ~@7 B ~@11 B ~@7 A ~@11 B ~@7 B ~@3 A ~@3 A ~@3 A ~@3 A ~@8 C
>`.pickRestart({
  A: "~@12 [ab4,ab5]@3 ~", B: "~@6 [ab4,ab5] ~", C: "[ab4,ab5] ~ [ab4,ab5] ~ [ab4,ab5] ~@3",
})).s("gm_orchestra_hit").gain(0.71).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 A@20 ~@7 B A@12 ~@7 B A@12 ~@7 B A@12 ~@7 B A@32 C>".pickRestart({
  A: "x!4", B: "~@3 x", C: "x!3 ~",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A C A B A B A
  B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A C A B A B A B A B ~@4 A B A C A B A B A B A C A B
  A B A B A B ~
>`.pickRestart({
  A: "x ~ x ~ x ~ x!5 ~ x ~ x!2", B: "x ~ x ~ x ~ x!7 ~ x ~", C: "x!16",
})).gain(0.3)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@4 A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A C A B A B A
  B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A C A B A B A B A B ~@4 A B A C A B A B A B A C A B
  A B A B A B ~
>`.pickRestart({
  A: "~@2 x ~@3 x!2 ~ x!2 ~@3 x!2", B: "~@6 x!2 ~ x!3 ~@2 x ~", C: "~ x ~@2 x ~@4 x!2 ~ x ~@3",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A@7 ~ A@7 ~ A@11 ~ A@7 ~ A@11 ~ A@7 ~ A@11 ~ A@7 ~ A@11 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~@2
>`.pickRestart({
  A: "x!4",
})).gain(0.4)

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

// drums · china
const china = s("cr").struct(`<
  ~@15 A ~@7 A ~@11 A ~@7 A ~@11 A ~@7 A ~@11 A ~@7 A ~@11 A ~@7 A ~@3 A ~@3 A ~@7 A ~@8 B
>`.pickRestart({
  A: "~@3 x", B: "x!3 ~",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A@7 ~ A@19 ~ A@19 ~ A@19 ~ A@19 ~ A@8 ~@8 A@7 ~ A@8 ~>".pickRestart({
  A: "x!16",
})).gain(0.3)

stack(
  bass, lead_2_sawtooth, synth_brass_1, brass_section, celesta, orchestra_hit, kick, snare, snare_soft, hihat, open_hat,
  china, tambourine
)