Strudelify

vagabond

Beirut

KeyB majorTempo160 bpm
0:00/0:00
// vagabond — Beirut
// 160 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6034976; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 H I@2 J@2 K@2 L M I@2 J@2 K@2 L M N@2 C D E F G H A B C D E F G H I@2 J@2 K@2 L M I@2 J@2 K@2 L M I@2
  J@2 K@2 L M I@2 J@2 K@2 L M O@2 P@2 Q@2 R S T@2 U@2 V@2 W X Y Z AA@2 AB@2 AC AD Y Z AA@2 AB@2 AC AD Y Z AA@2 AB@2 AC
  AD Y Z AA@2 AB@2 AC AD Y Z AA@2 AB@2 AC AD AE@2 ~
>`.pickRestart({
  A: "[b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 b2@2", B: "[b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 b2 c#3",
  C: "[d#3,f#3,a#3] ~@2 [d#3,f#3,a#3]@3 d#3@2", D: "[d#3,f#3,a#3] ~@2 [d#3,f#3,a#3]@2 a#2@3",
  E: "[g#2,b2,e3] ~@2 [g#2,b2,e3]@3 e2@2", F: "[g#2,b2,e3] ~@2 [g#2,b2,e3]@3 e2 f#2",
  G: "[g#2,b2,d#3] ~@2 [g#2,b2,d#3]@3 g#2@2", H: "[f#2,a#2,c#3] ~@2 [f#2,a#2,c#3]@3 f#2@2",
  I: "[[b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 b2@2 [b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 b2 c#3, f#5@27 ~ g#5@4]/2", // B
  J: "[[d#3,f#3,a#3]@2 ~@4 [d#3,f#3,a#3]@6 d#3@4 [d#3,f#3,a#3]@2 ~@6 f#5@2 ~ e5@2 d#5@3, f#5@11 [d#3,f#3,a#3]@2 a#2@3]/2", // D#m
  K: "[[g#2,b2,e3]@2 ~@4 [g#2,b2,e3]@6 e2@4 [g#2,b2,e3]@2 ~@6 e5@3 ~@3 f#2@2, e5@22 [g#2,b2,e3]@5 d#5@2 c#5@3, ~@14 e2 ~]/2", // E
  L: "[g#2,b2,d#3] ~@2 [g#2,b2,d#3]@3 [g#2,b4]@2, d#5@11 ~@5", // G#m
  M: "[f#2,a#2,c#3] ~@5 f#2@2, c#5 f#4, ~@3 [f#2,a#2,c#3]@3 ~@2", // F#
  N: "[[b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 b2@2 [b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 b2 c#3, f#5@15 ~]/2", // B
  O: "b3 d#4 f#4 d#4 b4 f#4 d#4 f#4", P: "d#4 f#4 a#4 f#4 c#5 a#4 f#4 a#4", Q: "e4 g#4 b4 g#4 e5 b4 g#4 b4",
  R: "d#4 g#4 b4 g#4 d#5 b4 g#4 b4", S: "f#4 a#4 c#5 a#4 f#5 c#5 a#4 c#5",
  T: "[b3,b4] [d#4,d#5] [f#4,f#5] [d#4,d#5] [b4,b5] [f#4,f#5] [d#4,d#5] [f#4,f#5]", // B D# F# D# B F# D# F#
  U: "[d#4,d#5] [f#4,f#5] [a#4,a#5] [f#4,f#5] [c#5,c#6] [a#4,a#5] [f#4,f#5] [a#4,a#5]", // D# F# A# F# C# A# F# A#
  V: "[e4,e5] [g#4,g#5] [b4,b5] [g#4,g#5] [e5,e6] [b4,b5] [g#4,g#5] [b4,b5]", // E G# B G# E B G# B
  W: "[d#4,d#5] [g#4,g#5] [b4,b5] [g#4,g#5] [d#5,d#6] [b4,b5] [g#4,g#5] [b4,b5]", // D# G# B G# D# B G# B
  X: "[f#4,f#5] [a#4,a#5] [c#5,c#6] [a#4,a#5] [f#5,f#6] [c#5,c#6] [a#4,a#5] [c#5,c#6]", // F# A# C# A# F# C# A# C#
  Y: "[b2,d#3,f#3,b3,b4] [d#4,d#5] [f#4,f#5] [d#4,d#5] [b4,b5] [f#4,f#5] [d#4,d#5] [f#4,f#5], ~@6 [b2,d#3,f#3]@9 ~", // B D# F# D# B F# D# F# …
  Z: "[b2,d#3,f#3,b3,b4] [d#4,d#5] [f#4,f#5] [d#4,d#5] [b4,b5] [f#4,f#5] [d#4,d#5] [f#4,f#5], ~@3 [b2,d#3,f#3]@4 ~", // B D# F# D# B F# D# F# …
  AA: "[d#3,f#3,a#3,d#4,d#5] [f#4,f#5] [a#4,a#5] [f#4,f#5] [c#5,c#6] [a#4,a#5] [f#4,f#5] [a#4,a#5], ~@3 [d#3,f#3,a#3]@4 ~", // D#m F# A# F# C# A# F# A# …
  AB: "[g#2,b2,e3,e4,e5] [g#4,g#5] [b4,b5] [g#4,g#5] [e5,e6] [b4,b5] [g#4,g#5] [b4,b5], ~@3 [g#2,b2,e3]@4 ~", // E G# B G# E B G# B …
  AC: "[g#2,b2,d#3,d#4,d#5] [g#4,g#5] [b4,b5] [g#4,g#5] [d#5,d#6] [b4,b5] [g#4,g#5] [b4,b5], ~@3 [g#2,b2,d#3]@4 ~", // G#m G# B G# D# B G# B …
  AD: "[f#2,a#2,c#3,f#4,f#5] [a#4,a#5] [c#5,c#6] [a#4,a#5] [f#5,f#6] [c#5,c#6] [a#4,a#5] [c#5,c#6], ~@3 [f#2,a#2,c#3]@4 ~", // F# A# C# A# F# C# A# C# …
  AE: "[b2,d#3,f#3] ~@2 [b2,d#3,f#3]@3 ~@2", // B
})).s("gm_piano").gain(0.25)

// other · trumpet
const trumpet = note(`<
  ~@40 A@2 B@2 C@2 D E A@2 F@2 C@2 G E A@2 B@2 C@2 D E A@2 F@2 C@2 G E ~@48 A@2 F@2 C@2 H I ~@3
>`.pickRestart({
  A: "[b4@7 c#5]/2", B: "a#4/2", C: "[g#4@12 g#4@2 g#4 a#4]/2", D: "b4@3 b4", E: "a#4 f#4",
  F: "[a#4@24 a#4@3 a#4@2 a#4@3]/2", G: "b4@3 g#4", H: "b4@3 ~", I: "a#4 ~",
})).s("gm_trumpet").gain(0.15)

// other · flute
const flute = note("<~@56 A B A B ~@4 A B A B ~@3 C ~@59>".pickRestart({
  A: "~ f#4 f#5@2", B: "d#5@15 ~", C: "~@5 f#4 g#4 f#4",
})).s("gm_flute").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@25 A B@2 C@2 D E F G@3 H@2 D E ~@17 I J K L@2 ~@3 I J K L@2 ~ M ~@17 A N@2 O@2 D E F G@3 H@2 D E F A N@2 O@2 D E F
  G@3 H@2 D E ~@11
>`.pickRestart({
  A: "~@2 b4!2 b4@2 a#4@2", B: "[f#4@5 ~ b4 a#4]/2", C: "[g#4 f#4@9 ~@2 f#4@3 f#4]/2", D: "f#4@3 b3", E: "c#4 f#4",
  F: "f#4", G: "[~@2 b4!2 b4@2 a#4@3 g#4 f#4@8 ~ b4 b4@2 a#4@2]/3", H: "[g#4@2 f#4@8 ~ f#4 f#4@3 f#4]/2",
  I: "~ f#4 f#5@2", J: "d#5", K: "~@3 f#5", L: "[d#5 c#5@2 b4@11 ~@2]/2", M: "~@5 f#4 g#4 f#4",
  N: "[f#4@11 b4 b4@2 a#4@2]/2", O: "[g#4 f#4@11 f#4@3 f#4]/2",
})).s("gm_clarinet").gain(0.4)

// chords · cello · "Violoncello"
const cello = note("<~@88 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E ~@11>".pickRestart({
  A: "[b3,d#4]/2", B: "[a#3,d#4]/2", C: "[g#3,e4]/2", D: "[g#3,d#4]", E: "[a#3,c#4]",
})).s("gm_cello").gain(0.2)

// other · accordion
const accordion = note(`<
  ~@80 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E F@3
>`.pickRestart({
  A: "b4 d#5 f#5 d#5 b5 f#5 d#5 f#5", B: "d#5 f#5 a#5 f#5 c#6 a#5 f#5 a#5", C: "e5 g#5 b5 g#5 e6 b5 g#5 b5",
  D: "d#5 g#5 b5 g#5 d#6 b5 g#5 b5", E: "f#5 a#5 c#6 a#5 f#6 c#6 a#5 c#6", F: "[[b3,d#4,f#4]@5 ~]/3",
})).s("gm_accordion").gain(0.2)

// other · acoustic guitar nylon · "Guitar (Treble Clef)"
const acoustic_guitar_nylon = note(`<
  ~@72 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E
  ~@3
>`.pickRestart({
  A: "b3 d#4 f#4 d#4 b4 f#4 d#4 f#4", B: "d#4 f#4 a#4 f#4 c#5 a#4 f#4 a#4", C: "e4 g#4 b4 g#4 e5 b4 g#4 b4",
  D: "d#4 g#4 b4 g#4 d#5 b4 g#4 b4", E: "f#4 a#4 c#5 a#4 f#5 c#5 a#4 c#5",
})).s("gm_acoustic_guitar_nylon").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@8 [x ~@2 x ~@4]!16 ~@16 [x ~@2 x ~@4]!32 ~@16 [x ~@2 x ~@4]!40 ~@3>").gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@40 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@27 B@32 ~@3>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@4",
})).gain(0.3)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@40 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@61>".pickRestart({
  A: "~@5 x ~ x", B: "x",
})).gain(0.15)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@14 B@2 A@30 B@2 A@14 B@2 ~@24 C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D C@3 D ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@2 x ~", C: "x ~ x!3 ~@5 x ~ x ~@3", D: "x ~ x!3 ~@5 x ~@3 x ~",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~@96 [~ x]!32 ~@3>").gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A@64 ~@24 B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A ~@3>".pickRestart({
  A: "x ~@2 x ~ x ~ x", B: "x ~@2 x ~ x!2 ~",
})).gain(0.15)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@8 [~ x ~@2]!64 ~@59>").gain(0.15)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [x!8]!16 [~ x ~ x]!16 [x!8]!32 ~@24 [x!8]!32 ~@3>").gain(0.1)

stack(
  piano, trumpet, flute, clarinet, cello, accordion, acoustic_guitar_nylon, kick, rim, rim_soft, snare, clap, low_tom,
  pedal_hat, tambourine
)

More by Beirut