Strudelify

Istanbul (Not Constantinople)

They Might Be Giants

KeyF minorTempo114 bpm
0:00/0:00
// Istanbul (Not Constantinople) — They Might Be Giants
// 114 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 63 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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.

// other · lead 1 square · "John I"
const lead_1_square = note(`<
  ~@12 A B@2 C D E@2 F G ~@3 H B@2 I J K ~@3 L ~@3 M N O ~ P ~@10 Q H R@2 I S T U V@2 ~
>`.pickRestart({
  A: "~@14 c4!2", B: "[f4 ~ ab4 ~ c5 ~ c4 f4 ~ ab4 ~ b4 c5 ~ c5@4 ~@12 c4 ~]/2",
  C: "e4 ~ g4@2 bb4 ~ e4!2 ~ g4 ~ bb4@2 ~ g4 ~", D: "f4!4 ~@2 f4!4 ~ f4@2 ~@3",
  E: "[f4 ~ ab4 ~ c5 ~@2 f4 ~ ab4 ~ b4 c5 ~ c5@4 ~@12 c4 ~, ~@6 c4@3 ~@23]/2",
  F: "e4 ~ g4 ~ bb4 ~ e4 g4 ~ g4 ~@2 bb4 ~ f4 ~", G: "f4!4 e4@2 g4 ~ f4 ~@7", H: "~@15 c5",
  I: "e4 ~ g4@2 bb4 ~ e4!2 ~ g4 ~ bb4@2 ~@2 g4, ~@7 ab4", J: "f4@2 f4!3 g4 ab4 bb4 c5 ~@5 c5 ~",
  K: "c4 ~ c4 ~@2 d4 e4 ~ f4@8, ~@2 c4 ~@5", L: "~ f4 ~ f4@9 ~@4", M: "~ f4 ~ f4@9 ~@2 g4@2", N: "ab4@2 g4@2 ~@3 g4",
  O: "ab4 c5 g4 ab4 ~@4", P: "f3!3 ~ ab3 ~ bb3 ~ c4!3 ~ c4@3 ~", Q: "c4 ~ c4 ~ c4@2 c4!2 ~ c4 ~ c4 c4@2 ~@2",
  R: "[f4 ~ ab4 ~ c5 ~ c4 ~@2 ab4 ~ b4 c5 ~ c5@4 ~@12 c4 ~]/2", S: "f4@2 f4 ~@2 g4 ab4 bb4 c5 ~@5 c5 ~, ~@3 f4@4 ~@9",
  T: "c4@4 c4 ~ c4@2 e4@2 e4@2 g4 ~ g4@2", U: "c5, f4@13 ~@3", V: "[c5@2 ~@2 c5@2 ~ c5@14 ~@11]/2",
})).s("gm_lead_1_square").gain(0.72)

// other · lead 2 sawtooth · "John II"
const lead_2_sawtooth = note(`<
  ~@13 A B@2 C A D ~ E F G H I J B@2 K L ~@3 M@2 ~@2 N F G H ~@11 O ~ P B@2 ~ Q R ~@3
>`.pickRestart({
  A: "~@14 c4 ~", B: "[f4@2 ab4 ~ c5 ~ c4 f4 ~ ab4 ~ b4 c5 ~ c5@4 ~@14]/2", C: "f4!4 ~@2 f4!4 ~ f4@2 ~@3",
  D: "f4 ~ ab4 ~ c5 ~ c4 f4 ~ ab4 ~ b4 c5 c5@3", E: "f4!4 e4@2 g4 ~ f4 ~@3 f4@2 g4@2", F: "ab4@2 g4@2 f4@3 g4",
  G: "ab4 c5 g4 ab4 f4@3 ~", H: "e4 ~ e4 ~ e4@2 e4!2 ~ e4 ~ e4 e4@2 ~@2", I: "f3 ~ f3@2 ab3 ~ bb3@2 c4 ~ c4 c4@3 ~@2",
  J: "~@14 f4 ~", K: "f4@2 f4!3 g4 ab4 bb4 c5 ~@5 c5 ~", L: "c4 ~ c4 ~@2 d4 e4 ~ f4@8, ~@2 c4 ~@5",
  M: "[~@7 c5 ~ c5@9 ~@14]/2", N: "~@7 c5 ~ c5@6 ~", O: "c4 ~ c4 ~ c4@2 c4!2 ~ c4 ~ c4 c4@2 ~@2", P: "~@14 c5 ab4",
  Q: "c4@2 ~@2 c4 ~@3", R: "f4, ab3@13 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.8)

// other · lead 2 sawtooth · "John II" · soft notes
const lead_2_sawtooth_soft = note("<~@58 A ~ B@2 ~>".pickRestart({
  A: "~@4 c4 ~ c4@2 ~@2 c4@2 bb3 ~ bb3@2", B: "[f4@2 ~@2 f4@2 ~ f4@14 ~@11]/2",
})).s("gm_lead_2_sawtooth").gain(0.48)

// other · electric bass finger · "Violin"
const electric_bass_finger = note("<~@60 A@2 B>".pickRestart({
  A: "[f4 ~ f4 ~@2 f5@2 f6@9, ~@7 f4@14 ~@11]/2", B: "f6 ~@15",
})).s("gm_lead_8_bass_lead").gain(0.64)

// chords · accordion · "Accordian"
const accordion = note(`<
  ~@5 A B A B C D E F G H I J K L M N O P Q ~ K R S T ~ G H I U G H I V O P Q ~ G H I J K L M W O P X ~ K R S T ~ Y Z@2
  ~
>`.pickRestart({
  A: "[f4,c5] [ab4,c5]", B: "[bb4,d5] [ab4,c5]", C: "[f4,c5] [eb4,bb4]", D: "d4@8 db4@5 ~@3", E: "f4@2 eb4 db4",
  F: "c4@9 ~@7", G: "~@2 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~@3 [f3,ab3,c4] ~",
  H: "~@2 [f3,ab3,c4] ~@3 [f3,ab3]@2 ~@2 [f3,ab3,c4]@2 ~@2 [f3,ab3,c4] ~, ~@6 c4 ~@9", // Fm
  I: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4] ~@3 [c4,e4,g4] ~, ~@5 g4 ~@2", J: "[f4,ab4,c5] ~ [e4,g4,c5] ~",
  K: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5]!2", // Fm
  L: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5]!2 ~@2 [f4,ab4,c5] ~", // Fm
  M: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // C
  N: "[f4,ab4,c5]@2 ~@2 [e4,g4,c5] ~ [e4,g4,c5] ~ [f4,ab4,c5] ~@3 [f4,ab4]@2 [g4,bb4]@2", // Fm C Fm Gm
  O: "[ab4,c5]@2 [g4,bb4]@2 f4@3 [g4,bb4], ~@2 ab4 ~", P: "[ab4,c5] [c5,f5] [g4,bb4] [ab4,c5] ab4@4, ~@4 f4@3 ~",
  Q: "e4 ~ e4 ~ e4@2 e4!2 ~ e4 ~ e4 e4@2 ~@2", R: "~@2 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~@3 [f4,ab4,c5] ~",
  S: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4] ~@3 [e4,g4,c5] ~, ~@5 c5 ~@2", T: "[f4,ab4,c5] ~@9 [b4,c5] c4@4 ~",
  U: "[f4,ab4,c5] ~@3", V: "[f4,ab4,c5]@2 ~@4 [f4,ab4] [g4,bb4]", W: "~@6 [f4,ab4] [g4,bb4]",
  X: "[e4,g4,c5] ~ [e4,g4,c5] ~ [g4,c5] ~ [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] [e4,g4,c5]@2 ~@2, ~@2 e4 ~@5", // C C5 C
  Y: "f4@13 ~@3", Z: "[[f4,c5]@2 ~@2 [f4,c5]@2 ~ [f4,c5]@14 ~@11]/2",
})).s("gm_accordion").gain(0.64)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@12 A B@2 C D B@2 C E F G H I J K C L M B@2 N O B@2 C O F P Q R J B S T K@2 U V W F X ~ B Y Z AA AB AC AD@2 ~
>`.pickRestart({
  A: "~@8 c3 ~ bb2 ~ ab2 ~ g2 ~", B: "f2 g2 ab2 g2", C: "e2 c2 e2 g2", D: "f2@8 c2@7 ~", E: "f2@4 e2@4 f2 ~@7",
  F: "f2@3 ~ f2@3 ~", G: "f2@5 ~@3 f2@5 ~@3", H: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 ~ c2@2 ~@3",
  I: "f2 ~ f2@2 ab2 ~ bb2@2 c3 ~ c3 c3@3 ~ c3", J: "f2@3 ~ g2@4 ab2@4 g2@4", K: "~ g2 ab2 g2, f2", L: "f2@2 c2 ~",
  M: "c2 f2", N: "e2 c2 e2 g2, ~@12 a2 ~@3", O: "f2 ~@7", P: "f2@5 ~@3 f2@7 ~",
  Q: "~ c2!2 ~ c2@2 ~ c2 ~ c2 ~ c2 c2@2 ~@2", R: "f2!3 ~ ab2 ~ bb2 ~ c3!3 ~ c3@3 ~", S: "e2@4 c2@4 e2@4 g2@3 ~",
  T: "f3@4 eb3@2 db3@2 c3@7 ~", U: "e2@4 c2@4 e2@4 g2@3 ~, f2", V: "f2@4 eb2 ~ db2 ~ c2@6 ~@2", W: "f2@6 ~@2 f2@7 ~",
  X: "c2 ~ c2 ~ c2@2 ~ c2 ~ c2 ~ c2@3 ~@2", Y: "f2@4 g2@4 ab2@4 g2@3 ~", Z: "e2@3 ~ c2@4 e2@4 g2@4", AA: "f2@4 c2 ~@3",
  AB: "c2@7 ~ c2@8", AC: "f2@7 ~", AD: "[f2@3 ~ f2@3 f2@17 ~@8]/2",
})).s("gm_electric_bass_pick").gain(0.71)

// other · drawbar organ · "Organ Leslie"
const drawbar_organ = note("<~@29 A B ~@2 A B ~@5 C ~@22>".pickRestart({
  A: "~@12 a2 ~ [d3,e3,f3,g3] [a3,b3,c4,d4,e4,f4,g4,a4]", B: "[b4,e5] f4@8 ~@7, f5@7 ~",
  C: "e4 ~ e4 ~ e4@2 e4!2 ~ e4 ~ e4 e4@2 ~@2",
})).s("gm_drawbar_organ").gain(0.72)

// other · drawbar organ · "Organ Leslie" · soft notes · Csus2
const drawbar_organ_soft = note("<~@29 [~@13 c3 ~@2] [[c5,d5] ~@15] ~@2 [~@13 c3 ~@2] [[c5,d5] ~@15] ~@28>")
  .s("gm_drawbar_organ").gain(0.4)

// chords · distortion guitar · "Crunchy Guitar>>>>>>>>>>>>>" · C
const distortion_guitar = note(`<
  ~@23
  [[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] [e4,g4,c5]@2 ~@2]
  ~@16
  [[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] [e4,g4,c5]@2 ~@2]
  ~@11
  [[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]!2 ~ [e4,g4,c5] ~ [e4,g4,c5] [e4,g4,c5]@2 ~@2]
  ~@10
>`).s("gm_distortion_guitar").gain(0.72)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A@2 B@15 C ~@2 D E B@3 F B@4 G B@3 H ~@2 D E B@7 H B@2 D I B@3 H ~ J ~@2 H
>`.pickRestart({
  A: "x ~@3 x ~@2 x!2 ~ x ~ x ~@3", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", C: "x!5 ~@3",
  D: "x ~ x ~ x ~ x!2 ~ x ~ x!2 ~@3", E: "~@15 x", F: "x!4 ~@4", G: "x ~@14 x", H: "x", I: "x!16", J: "~@9 x!3 ~@4",
})).gain(0.5)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~
>`.pickRestart({
  A: "x",
})).gain(0.57)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A@15 B ~@2 A ~ A@3 B A@4 C A@3 C ~@4 A@7 C ~@4 A@3 C ~ D ~@2 C>".pickRestart({
  A: "x!16", B: "x!8 ~@8", C: "x", D: "~@9 x!3 ~@4",
})).gain(0.64)

stack(
  lead_1_square, lead_2_sawtooth, lead_2_sawtooth_soft, electric_bass_finger, accordion, bass, drawbar_organ,
  drawbar_organ_soft, distortion_guitar, low_tom, ride_bell, tambourine
)

More by They Might Be Giants