Strudelify

Dont Let Me Go

cigarettes after sex

KeyD♭ majorTempo100 bpm
0:00/0:00
// Dont Let Me Go — cigarettes after sex
// 100 bpm, 6/8, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5855818; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 130 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/3)

// 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 · french horn · "Horn in F"
const french_horn = note(`<
  ~@33 A B A B C D ~@2 A B A B C D ~@26 A B A B C D ~@2 A B A B C D ~ E F G H E F G H I J K L I M N O ~ A B A B C D ~@2
  A B A B C D ~@11
>`.pickRestart({
  A: "ab4@8 bb4@8 bb4 b4@3 bb4@4", B: "bb4", C: "ab4@8 gb4@8 eb4 f4@3 gb4@4", D: "gb4", E: "bb3 db4!5",
  F: "db4@4 db4@4 db4@4 db4 eb4@3 db4@4 bb3@4", G: "bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3 a3", H: "ab3!3 gb3!3", I: "gb4!6",
  J: "f4!6", K: "eb4!6", L: "b3!4 bb3 gb3", M: "ab4!6", N: "bb4!6", O: "b4!6",
})).s("gm_french_horn").gain(0.3)

// other · flute
const flute = note(`<
  ~@16 A B A C@2 B A D@2 E F G H B I J@2 K L K L M N ~@2 K L K L M N ~@9 A B A C@2 B A D@2 E F G H B I J@2 K L K L M N
  ~@2 K L K L M N ~ O P Q R O P Q R S T U V S W X Y ~ Z AA Z AA AB AC ~@2 Z AA Z AA AB AC ~@11
>`.pickRestart({
  A: "~@2 eb4 gb4@2 ab4", B: "gb4 ab4@14 ~@9", C: "[ab4 bb4@7 ab4@4 ab4@8 gb4@15 ~ gb4@8 ab4@4]/2",
  D: "[ab4 bb4@7 ab4@4 ab4@8 gb4@15 ~ gb4@8 f4@4]/2", E: "f4@5 ~@3", F: "~@2 db4 eb4@2 db4",
  G: "eb4@8 gb4@8 gb4 ab4@3 gb4@4", H: "gb4@11 ~ gb4@8 ab4@4", I: "~@2 f4 gb4@2 ab4",
  J: "[ab4 bb4@7 ab4@4 ab4@8 gb4@11 ~@17]/2", K: "ab4@8 bb4@8 bb4 b4@3 bb4@4", L: "bb4@23 ~",
  M: "ab4@8 gb4@8 eb4 f4@3 gb4@4", N: "gb4@23 ~", O: "bb3 db4!5", P: "db4@4 db4@4 db4@4 db4 eb4@3 db4@4 bb3@4",
  Q: "bb3@2 bb3@2 bb3@2 bb3@2 bb3@2 bb3 a3", R: "ab3!3 gb3!3", S: "gb4!6", T: "f4!6", U: "eb4!6", V: "b3!4 bb3 gb3",
  W: "ab4!6", X: "bb4!6", Y: "b4!6", Z: "[ab4,ab5]@8 [bb4,bb5]@8 bb4 [b4,b5]@3 [bb4,bb5]@4", AA: "[bb4,bb5]@23 ~",
  AB: "[ab4,ab5]@8 [gb4,gb5]@8 eb4 [f4,f5]@3 [gb4,gb5]@4", AC: "[gb4,gb5]@23 ~",
})).s("gm_flute").gain(0.25)

// chords · piano
const piano = note(`<
  A@8 B C D E B C D E ~@16 F G H I F G H I F G H I F G H I ~@24 F G H I F G H I F G H I F G H I F G H I F G H I F G H I
  F G H I F G H I F G H I F G H I F G H I ~@10
>`.pickRestart({
  A: "gb4 db4 gb4!2 db4 gb4",
  B: "db4 ~ gb4 db4 ~ gb4, [gb3,bb4,db5]@11 ~ [gb3,bb4,db5]@11 ~, gb4@2 ~ gb4@2 ~, ~@4 db4@7 ~@5 db4@7 ~", // Gb
  C: "[db4,gb4] ~ gb4 [db4,gb4] ~ gb4, [f3,ab3,f4,ab4]@11 ~ [f3,ab3,f4,ab4]@11 ~, ~@4 db4@7 ~@5 db4@7 ~", // Gb5 Fm
  D: "~ db4 gb4 ~ db4 gb4, [gb3,bb3,eb4,bb4]@11 ~ [gb3,bb3,eb4,bb4]@11 ~, gb4@2 ~ gb4@2 ~", // Ebm
  E: "~ db4 gb4 ~ db4 gb4, [gb3,b3,b4,eb5]@11 ~ [gb3,b3,b4,eb5]@11 ~, gb4@2 ~ gb4@2 ~", F: "[gb3,db4,gb4,bb4,db5]!6",
  G: "[f3,ab3,db4,f4,gb4,ab4] [f3,ab3,db4,f4,ab4] [f3,ab3,db4,f4,gb4,ab4]!2 [f3,ab3,db4,f4,ab4] [f3,ab3,db4,f4,gb4,ab4]", // Db
  H: "[gb3,bb3,eb4,gb4,bb4] [gb3,bb3,db4,eb4,gb4,bb4] [gb3,bb3,eb4,gb4,bb4]!2 [gb3,bb3,db4,eb4,gb4,bb4] [gb3,bb3,eb4,gb4,bb4]", // Ebm Ebm7 Ebm Ebm7 Ebm
  I: "[gb3,b3,gb4,b4,eb5] [gb3,b3,db4,gb4,b4,eb5] [gb3,b3,gb4,b4,eb5]!2 [gb3,b3,db4,gb4,b4,eb5] [gb3,b3,gb4,b4,eb5]", // B
})).s("gm_piano").gain(0.2)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  A B A C A B A C ~@24 D E F G D E F G D E F G D E F G ~@24 D E F G D E F G D E F G D E F G D E F G D E F G D E F G D E
  F G D E F G D E F G D E F G D E F G ~@8 H@2
>`.pickRestart({
  A: "gb3!2 eb4 gb4@2 ab4", B: "ab4", C: "bb4@3 ab4@2 gb4", D: "[gb3,bb3,db4]!6", E: "[db3,f3,ab3]!6",
  F: "[eb3,gb3,bb3]!6", G: "[gb3,b3,eb4]!6", H: "[~ gb4@47, [gb3,db4]]/2",
})).s("gm_acoustic_guitar_steel").gain(0.2)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@8 A B A C A B A C A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B A C A B A C A B D E A B D E A
  B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B A C
  A B A C ~@2
>`.pickRestart({
  A: "gb2!2", B: "db2!2", C: "ab2!2", D: "eb2@12 eb2@8 eb2 d2 db2 c2", E: "b1!2",
})).s("gm_electric_bass_finger").gain(0.25)

// other · synth strings 1 · "String Synthesizer"
const synth_strings_1 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 E@2 F@2 E@2 F@2 ~@16 C@2 D@2 C@2 D@2 C@2 D@2 C@2
  D@2 ~@16 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 E@2 F@2 E@2 F@2 ~@2
>`.pickRestart({
  A: "[~ gb2@2 gb2@2 eb3@2 gb3@4 ab3@2 ab3@11]/2", B: "[~@2 gb2@4 gb2@4 eb3@4 gb3@8 ab3@4 ab3 bb3@11 ab3@8 gb3@2]/2",
  C: "[~ gb3@2 gb3@2 eb4@2 gb4@4 ab4@2 ab4@11]/2", D: "[~@2 gb3@4 gb3@4 eb4@4 gb4@8 ab4@4 ab4 bb4@11 ab4@8 gb4@2]/2",
  E: "[~@5 eb3@2 gb3@4 ab3@2 ab3@11]/2", F: "[~@10 eb3@4 gb3@8 ab3@4 ab3 bb3@11 ab3@8 gb3@2]/2",
})).s("gm_synth_strings_1").gain(0.25)

// chords · pad warm · "Warm Synthesizer"
const pad_warm = note(`<
  A@16 B C B D@2 C B E@2 F G H I J K L M N O P M N O P M N O P M N O P ~@8 B C B D@2 C B E@2 F G H I J K L M N O P M N O
  P M N O P M N O P ~@8 Q R S T Q R S T M N O P M N O P M N O P M N O P ~@10
>`.pickRestart({
  A: "[bb4@5 [gb4,ab4]]/4", B: "~@2 eb4 gb4@2 ab4", C: "gb4 ab4@23",
  D: "[ab4 bb4@7 ab4@4 ab4@8 gb4@8 ~@8 gb4@8 ab4@4]/2", E: "[ab4 bb4@7 ab4@4 ab4@8 gb4@8 ~@8 gb4@8 f4@4]/2",
  F: "f4@2 ~", G: "~@2 db4 eb4@2 db4", H: "eb4@8 gb4@8 gb4 ab4@3 gb4@4", I: "gb4@3 gb4@2 ab4", J: "gb4 ab4@15 ~@8",
  K: "~@2 f4 gb4@2 ab4", L: "ab4 bb4@7 ab4@4 ab4@8 gb4@4", M: "[gb4,bb4,db5]", N: "[db4,f4,ab4]", O: "[eb4,gb4,bb4]",
  P: "[gb4,b4,eb5]", Q: "[gb4,bb4,db5,gb5]", R: "[db4,f4,ab4,f5]", S: "[eb4,gb4,bb4,eb5]", T: "[eb4,gb4,b4]",
})).s("gm_pad_warm").gain(0.3)

// chords · pad warm · "Warm Synthesizer" · soft notes
const pad_warm_soft = note("<~@48 A@8 ~@32 B C D E B C D E ~@24 B C D E B C D E F@2>".pickRestart({
  A: "bb3/4", B: "[gb4,bb4,db5]", C: "[db4,f4,ab4]", D: "[eb4,gb4,bb4]", E: "[gb4,b4,eb5]", F: "[gb4,db5,gb5]/2",
})).s("gm_pad_warm").gain(0.2)

// chords · cello · "Violoncello"
const cello = note(`<
  ~@8 A@8 ~@16 B C D E B C D E B C D E B C D E F@8 ~@16 B C D E B C D E B C D E B C D E ~@8 B C D E B C D E B C D E B C
  D E B C D E B C D E ~@8 G@2
>`.pickRestart({
  A: "[gb3,bb3]/4", B: "[gb3,bb3,db4]", C: "[db3,f3,ab3]", D: "[eb3,gb3,bb3]", E: "[gb3,b3,eb4]", F: "bb2/4",
  G: "[db3,gb3]/2", // Gb5
})).s("gm_cello").gain(0.25)

// chords · cello · "Violoncello" · soft notes
const cello_soft = note(`<
  A@8 ~@8 B C D E B C D E B C D E B C D E ~@24 B C D E B C D E B C D E B C D E ~@16 F G H I F G H I ~@24 F G H I F G H I
  ~@2
>`.pickRestart({
  A: "[gb3,bb3]/4", B: "gb2", C: "db2", D: "eb2@20 eb2 d2 db2 c2", E: "b1", F: "[gb3,bb3,db4]", G: "[db3,f3,ab3]",
  H: "[eb3,gb3,bb3]", I: "[gb3,b3,eb4]",
})).s("gm_cello").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@8 x!84 ~@12 x!24 ~@2>").gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@8 [~ x]!84 ~@12 [~ x]!24 ~@2>").gain(0.25)

// drums · ride
const ride = s("rd").struct("<[x!2]!8 [x!6]!84 ~@12 [x!6]!24 ~@2>").gain(0.25)

stack(
  french_horn, flute, piano, acoustic_guitar_steel, bass, synth_strings_1, pad_warm, pad_warm_soft, cello, cello_soft,
  kick, snare, ride
)