Strudelify

Cafe del Mar

Energy 52

KeyB♭ minorTempo137 bpm
0:00/0:00
// Cafe del Mar — Energy 52
// 137 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "P4-Acoust" acoustic bass (copy of ch 3 "SYNTHBASS1" synth bass 1)
// note: Full arrangement: all 252 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(137/4)

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

// bass · synth bass 2 · "SYNTHBASS2"
const bass = note(`<
  ~@8 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A ~@8 B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@84
>`.pickRestart({
  A: "ab2 ~ f2 ~ ab2 ~ f2 ~ ab2 ~ f2 ~ ab2 ~ f2 ~", B: "ab2 ~ f2 ~ ab2 ~ f2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~",
  C: "bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~", D: "f2 ~ db2 ~ f2 ~ db2 ~ f2 ~ db2 ~ f2 ~ db2 ~",
})).s("gm_synth_bass_2").gain(0.7)

// bass · synth bass 2 · "SYNTHBASS2" · soft notes
const bass_soft = note("<~@101 A B C D A B C D ~@143>".pickRestart({
  A: "ab2 ~ f2 ~ ab2 ~ f2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~", B: "bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ bb2 ~ g2 ~",
  C: "f2 ~ db2 ~ f2 ~ db2 ~ f2 ~ db2 ~ f2 ~ db2 ~", D: "ab2 ~ f2 ~ ab2 ~ f2 ~ ab2 ~ f2 ~ ab2 ~ f2 ~",
})).s("gm_synth_bass_2").gain(0.35)

// bass · synth bass 1 · "SYNTHBASS1"
const bass_2 = note(`<
  ~@8 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@84
>`.pickRestart({
  A: "[c2,ab4] c3 [c2,f4] c3 [c2,ab4] c3 [c2,f4] c3 [c2,ab4] c3 [c2,f4] c3 [c2,ab4] c3 [c2,f4] c3", // Fm F5 Fm F5 Fm F5 Fm F5
  B: "[db2,ab4] db3 [db2,f4] db3 [db2,ab4] db3 [db2,f4] db3 [eb2,bb4] eb3 [eb2,g4] eb3 [eb2,bb4] eb3 [eb2,g4] eb3", // Db5 Db Db5 Db Eb5 Eb Eb5 Eb
  C: "[bb1,bb4] bb2 [bb1,g4] bb2 [bb1,bb4] bb2 [bb1,g4] bb2 [bb1,bb4] bb2 [bb1,g4] bb2 [bb1,bb4] bb2 [bb1,g4] bb2", // Bb Eb Bb Eb Bb Eb Bb Eb
  D: "[bb1,f4] bb2 [bb1,db4] bb2 [bb1,f4] bb2 [bb1,db4] bb2 [bb1,f4] bb2 [bb1,db4] bb2 [bb1,f4] bb2 [bb1,db4] bb2", // Bb5 Bbm Bb5 Bbm Bb5 Bbm Bb5 Bbm
})).s("gm_synth_bass_1").gain(0.48).pan(0.6)

// other · piano · "P5-Brite"
const piano = note(`<
  ~@16 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2
  ~@48 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 ~@84
>`.pickRestart({
  A: "~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6", B: "~ db6 ~ db6 ~ db6 ~ db6 ~ eb6 ~ eb6 ~ eb6 ~ eb6",
  C: "~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5 ~ bb5",
})).s("gm_piano").gain(0.54).pan(0.4)

// bass · electric bass finger · "P6-Finger"
const bass_3 = note(`<
  ~@80 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D ~@41 E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H
  ~@11
>`.pickRestart({
  A: "c1!3 ~ c1!3 ~ c1!3 ~ c1!3 ~", B: "db1!3 ~ db1!3 ~ eb1!3 ~ eb1!3 ~", C: "eb1!3 ~ eb1!3 ~ eb1!3 ~ eb1!3 ~",
  D: "bb0!3 ~ bb0!3 ~ bb0!3 ~ bb0!3 ~", E: "f1!3 ~ f1!3 ~ f1!3 ~ f1!3 ~", F: "f1!3 ~ f1!3 ~ bb0!3 ~ bb0!3 ~",
  G: "bb1!3 ~ bb1!3 ~ bb1!3 ~ bb1!3 ~", H: "bb1!3 ~ bb1!3 ~ ab1!3 ~ ab1!3 ~",
})).s("gm_electric_bass_finger").gain(0.7).pan(0.4)

// other · harpsichord · "P9-Harpsi"
const harpsichord = note("<~@112 A B C D A B C D ~@132>".pickRestart({
  A: "ab6!2 f6!2 ab6!2 f6!2 ab6!2 f6!2 ab6!2 f6!2", B: "ab6!2 f6!2 ab6!2 f6!2 bb6!2 g6!2 bb6!2 g6!2",
  C: "bb6!2 g6!2 bb6!2 g6!2 bb6!2 g6!2 bb6!2 g6!2", D: "f6!2 db6!2 f6!2 db6!2 f6!2 db6!2 f6!2 db6!2",
})).s("gm_harpsichord").gain(0.39).pan(0.6)

// chords · marimba · "P11-Marim"
const marimba = note(`<
  ~@169 A B C D A B C D A B C D A B C D A B C D A B C D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H
  E F G H E F G H E F G H E F G H ~@11
>`.pickRestart({
  A: "ab5 [f5,ab5] [c5,f5,ab5]!5 ab5!2 [f5,ab5] [c5,f5,ab5]!5 ab5", // Fm
  B: "ab5 [f5,ab5] [c5,f5,ab5]!5 ab5 bb5 [g5,bb5] [eb5,g5,bb5]!5 bb5", // Fm Gm Eb
  C: "ab5 [f5,ab5] [bb4,f5,ab5]!5 ab5!2 [f5,ab5] [bb4,f5,ab5]!5 ab5", // Fm Bb7 Fm Bb7
  D: "ab5 [f5,ab5] [bb4,f5,ab5]!5 ab5 bb5 [g5,bb5] [eb5,g5,bb5]!5 bb5", // Fm Bb7 Gm Eb
  E: "ab5 [f5,ab5] [c5,f5,ab5]!5 [f5,ab5] ab5 [f5,ab5] [c5,f5,ab5]!5 [f5,ab5]", // Fm
  F: "ab5 [f5,ab5] [c5,f5,ab5]!5 [f5,ab5] bb5 [g5,bb5] [eb5,g5,bb5]!5 [g5,bb5]", // Fm Gm Eb Gm
  G: "ab5 [f5,ab5] [bb4,f5,ab5]!5 [f5,ab5] ab5 [f5,ab5] [bb4,f5,ab5]!5 [f5,ab5]", // Fm Bb7 Fm Bb7 Fm
  H: "ab5 [f5,ab5] [bb4,f5,ab5]!5 [f5,ab5] bb5 [g5,bb5] [eb5,g5,bb5]!5 [g5,bb5]", // Fm Bb7 Fm Gm Eb Gm
})).s("gm_marimba").gain(0.32).pan(0.6)

// chords · marimba · "P11-Marim" · soft notes
const marimba_soft = note(`<
  ~@169 A B C D A B C D A B C D A B C D A B C D A B C D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H
  E F G H E F G H E F G H E F G H ~@11
>`.pickRestart({
  A: "~@7 [c5,f5] ~@7 [c5,f5]", B: "~@7 [c5,f5] [f5,ab5] ab5 ~@5 [eb5,g5]", C: "~@7 [bb4,f5] ~@7 [bb4,f5]",
  D: "~@7 [bb4,f5] [f5,ab5] ab5 ~@5 [eb5,g5]", E: "~@7 c5 ~@7 c5", F: "~@7 c5 [f5,ab5] ab5 ~@5 eb5",
  G: "~@7 bb4 ~@7 bb4", H: "~@7 bb4 [f5,ab5] ab5 ~@5 eb5",
})).s("gm_marimba").gain(0.16).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@40 [x!4]!128 ~@33 [x!4]!40 ~@11>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@88 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C ~@32 A B@2 C A B@2 C A B@2 C A B@2 C ~@53 A B@2 C
  A B@2 C A B@2 C A B@2 C A B@2 C ~@11
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!6", C: "~@2 x ~ x!4 ~@2 x ~ x!4",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~@48 [~ x ~ x]!72 ~@24 [~ x ~ x]!24 ~@37 [~ x ~ x]!36 ~@11>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@32 [x!16]!56 ~@48 [x!16]!32 ~@33 [x!16]!40 ~@11>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@56 A@64 ~@8 A@40 ~@41 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@11
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~",
})).gain(0.8)

stack(bass, bass_soft, bass_2, piano, bass_3, harpsichord, marimba, marimba_soft, kick, snare, clap, hihat, open_hat)