Strudelify

postcards from italy

Beirut

KeyF majorTempo120 bpm
0:00/0:00
// postcards from italy — Beirut
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5912911; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · oboe
const oboe = note(`<
  ~@3 A B@2 C D B@2 C E F@2 G H ~@8 I@2 J K L@2 G M N O P Q N O R@2 N O S T U@2 S ~@12 V W X Y Z ~@2 A AA AB AC@2 AD W X
  Y AE AF@2 AG@2 AF@2 AH@2 AI@2 AJ@2 AK AL AM AN@2 ~@7
>`.pickRestart({
  A: "~@7 f4", B: "[f4@3 c5@2 c5@16 ~@3 a4@3 bb4@2 c5@3]/2", C: "c5@3 bb4 bb4@3 a4", D: "a4@3 g4 g4@3 f4",
  E: "a4@6 ~@2 g4@3 f4@2 a4@3", F: "[a4@21 ~@3 g4@3 f4@2 e4@3]/2", G: "a4@14 g4 f4", H: "e4@3 ~",
  I: "[f4@3 c5@2 c5@19 a4@3 bb4@2 c5@3]/2", J: "c5@6 bb4 a4 bb4@6 a4 g4", K: "a4@6 ~@2 g4@3 f4@3 a4@2",
  L: "[a4@24 g4@3 f4@3 e4@2]/2", M: "e4@6 ~ bb4", N: "a4@3 c5 a4@3 bb4 a4@2 g4@2 ~@2 bb4@2",
  O: "a4@3 c5 a4@3 bb4 a4@2 g4@4 g4 f4", P: "e4@12 ~@2 f4 g4", Q: "a4@2 g4@2 f4@2 e4 bb4", R: "[e4@9 ~@6 bb4]/2",
  S: "e4", T: "e4 d4 db4 d4 e4@2 f4@2", U: "f4/2", V: "~@3 f4", W: "d5@6 c5!2", X: "c5@3 a4 c5@2 a4@2", Y: "g4@6 ~ f4",
  Z: "g4 c5@2 c5@3 ~@2", AA: "g4 c5@2 c5@3 ~ a4", AB: "bb4@6 c5 d5",
  AC: "[f5@2 d5@3 ~ c5@2 ~@2 bb4@4 g4@12 ~@4 f4@2]/2", AD: "g4 c5@2 c5@3 f4@2", AE: "g4 c5@2 c5@4 ~",
  AF: "[d4@2 e4@4 f4@4 g4@4 a4@14 ~@2 g4 a4]/2", AG: "[c5@3 a4@2 ~ c5@4 a4@4 g4@10 ~@6 f4 e4]/2",
  AH: "[c5@3 a4@2 ~ c5@4 a4@4 g4@8 ~@10]/2", AI: "[d4@2 e4@4 f4@4 g4@4 a4@10 ~@6 g4 a4]/2",
  AJ: "[c5@3 a4@2 ~ c5@4 a4@4 g4@10 ~@8]/2", AK: "f4@3 g4", AL: "a4@3 a4", AM: "d4@6 ~ d4",
  AN: "[a4 g4@2 f4@2 e4@2 f4@7 ~@2]/2",
})).s("gm_oboe").gain(0.3)

// other · piano · "Klavier"
const piano = note("<~@12 A B C D A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C E F ~@51>".pickRestart({
  A: "f2 ~@6 c2", B: "f2 ~@2 f2 ~ f2 ~ g2", C: "a2 ~@6 g2", D: "a2 ~@2 a2 ~ a2 ~ g2", E: "a2 ~@2 a2 bb2 a2 g2 a2",
  F: "f2 ~@7",
})).s("gm_piano").gain(0.48)

// chords · acoustic guitar nylon · "Ukulele [Tabulatur]"
const acoustic_guitar_nylon = note(`<
  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 E@2 F@2 G H I J G H I
  J G H I J G H I J G H I J G H I ~ K L M N K L M N K L M N K L M N O P Q R O P Q R
>`.pickRestart({
  A: "g4 a4@2 [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a4]@2 g4 a4@2 [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a4]@2", // F
  B: "g4 a4@2 [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4,bb4]@2 [c4,f4,a4]@2 [c4,f4,g4,a4]@2 [c4,f4,a4]@2", // F
  C: "g4 a4@2 [db4,e4,a4] [db4,e4,a4]@2 [db4,e4,a4]@2 g4 a4@2 [db4,e4,a4] [db4,e4,a4]@2 [db4,e4,a4]@2", // A
  D: "g4 a4@2 [db4,e4,a4] [db4,e4,a4]@2 [db4,e4,a4]@2 [db4,e4,a4,bb4]@2 [db4,e4,a4]@2 [db4,e4,g4,a4]@2 [db4,e4,a4]@2", // A A7 A
  E: "g4 a4@2 [c4,f4,a4] [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]@2", // F
  F: "[c4,f4,a4,c5]@3 [c4,f4,a4,c5] [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2", // F
  G: "[d4,f4,bb4,c5]@3 [d4,f4,bb4,c5]@3 [d4,f4,bb4,c5]@3 [d4,f4,bb4,c5]!3 [d4,f4,bb4,c5]@2 [d4,f4,bb4,c5] ~", // Bb
  H: "[c4,f4,a4,c5]@3 [c4,f4,a4,c5]@3 [c4,f4,a4,c5]@3 [c4,f4,a4,c5]!3 [c4,f4,a4,c5]@2 [c4,f4,a4,c5] ~", // F
  I: "[d4,f4,a4,c5]@3 [d4,f4,a4,c5]@3 [d4,f4,a4,c5]@3 [d4,f4,a4,c5]!3 [d4,f4,a4,c5]@2 [d4,f4,a4,c5] ~", // Dm7
  J: "[c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]!3 [c4,e4,g4,c5]@2 [c4,e4,g4,c5] ~", // C
  K: "[d4,f4,bb4]@2 [d4,f4,bb4]!3 ~ [d4,f4,bb4]@2 [d4,f4,bb4]!3 ~ [d4,f4,bb4]!4", // Bb
  L: "[c4,f4,a4]@2 [c4,f4,a4]!3 ~ [c4,f4,a4]@2 [c4,f4,a4]!3 ~ [c4,f4,a4]!4", // F
  M: "[d4,f4,a4]@2 [d4,f4,a4]!3 ~ [d4,f4,a4]@2 [d4,f4,a4]!3 ~ [d4,f4,a4]!4", // Dm
  N: "[c4,e4,g4,c5]@2 [c4,e4,g4,c5]!3 ~ [c4,e4,g4,c5]@2 [c4,e4,g4,c5]!3 ~ [c4,e4,g4,c5]!4", // C
  O: "[d4,f4,bb4]@3 [d4,f4,bb4]@3 [d4,f4,bb4]@3 [d4,f4,bb4]@3 [d4,f4,bb4]@2 [d4,f4,bb4] ~", // Bb
  P: "[c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@2 [c4,f4,a4] ~", // F
  Q: "[d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@2 [d4,f4,a4] ~", // Dm
  R: "[c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@2 [c4,e4,g4,c5] ~", // C
})).s("gm_acoustic_guitar_nylon").gain(0.13)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@76 [~ x ~ x]!16 ~@8>").gain(0.23)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@76 [x ~@2 x ~@2 x ~ x ~ x ~@5]!16 ~@8>").gain(0.23)

stack(oboe, piano, acoustic_guitar_nylon, woodblocks, woodblocks_2)

More by Beirut