Strudelify
Take My Breath Away cover art

Take My Breath Away

Take My Breath Away

Berlin

KeyE♭ majorTempo97 bpm
0:00/0:00
// Take My Breath Away — Berlin
// 97 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97/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.

// bass · synth bass 2
const bass = note(`<
  ~ A B C D E B C D E B C D F G H I J B C K J B C K J B C K J B C D E B C D F G H I J B C K J B C D L M N O P M N O Q
  R@2 S@2 B C D E B C T U V W X Y V W X Z AA AB AC AD V W AE AD V W AE AD V W AE AD V W AE AD V W AE AD V AF ~@4
>`.pickRestart({
  A: "~@4 eb2 f2 ab2 bb2", B: "ab2@7 eb2", C: "g2@7 c2", D: "f2@7 eb2", E: "g2@4 eb2 f2 ab2 bb2",
  F: "g2@4 eb2 f2 ab2 c3", G: "bb2@7 f2", H: "ab2@7 db2", I: "eb2@7 db2", J: "eb2@4 eb2 f2 ab2 bb2", K: "db2@7 bb1",
  L: "g2 ab2", M: "bb2@7 ab2", N: "g2@7 eb2", O: "db2@7 db2", P: "ab2@3 ab2", Q: "ab2@7 ab2",
  R: "[bb2@3 f2@4 bb1@8 ~]/2", S: "[eb3@3 bb2@4 eb2@5 eb2 f2 ab2 bb2]/2", T: "f2@7 f2", U: "e2@4 gb2 ab2 b2 db3",
  V: "b2@7 gb2", W: "bb2@7 eb2", X: "ab2@7 gb2", Y: "bb2@4 gb2 ab2 b2 db3", Z: "bb2@4 gb2 ab2 b2 eb3", AA: "db3@7 ab2",
  AB: "b2@7 e2", AC: "gb2@7 e2", AD: "gb2@4 gb2 ab2 b2 db3", AE: "e2@7 db2", AF: "bb2@7 ~",
})).s("gm_synth_bass_2").gain(0.41)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@2 A B C B D@8 E@2 F@4 G H I@2 J K I@2 J K D@8 E@2 F@4 G H L@4 M@2 N@2 O@2 N@2 P@2 Q@2 R@7 S T@8 U@2 V@4 W X Y Z AA
  AB AC Z AA AB AC Z AA AB AC Z AA AB AC Z ~@4
>`.pickRestart({
  A: "[ab3,c4,eb4,ab4]", B: "[g3,c4,eb4,g4]", C: "[f3,ab3,c4,f4]",
  D: "[ab3 g3 [f3,ab3] g3 ab3 g3 [f3,ab3] [g3,eb4], c4, eb4@2 ~ eb4@3 ~@2]/8", E: "[bb3 ab3, [db4,f4]]/2",
  F: "[[g3,bb3]@2 ab3 g3, eb4, ~ c4]/4", G: "[ab3,db4,f4]", H: "[g3,bb3,eb4]", I: "[[ab3,ab4] [g3,g4], [c4,eb4]]/2",
  J: "[f3,ab3,db4,f4]", K: "[g3,bb3,eb4,g4]",
  L: "[[ab3,ab4]@2 [g3,g4]@2 [f3,ab3,f4]@2 [g3,eb4,g4] [ab3,c4,eb4,ab4], c4@7 ~, eb4 ~]/4", // Ab G Fm Cm Ab
  M: "[[db4,f4] [eb4,g4], bb4]/2", N: "[[db4,f4] [c4,eb4], ab3]/2", O: "[[d4,f4] [eb4,g4], bb3]/2", P: "[bb3,d4,f4]/2",
  Q: "[bb3,eb4,g4]/2", // Eb
  R: "[[ab3,ab4] [g3,g4] [f3,ab3,f4] [g3,g4] [ab3,ab4] [g3,g4] [f3,ab3,f4], c4, eb4@2 ~ eb4@3 ~]/7", // Ab G Fm G Ab G Fm
  S: "[e3,ab3,b3,e4]@2 [gb3,bb3,db4,gb4] [bb3,db4,gb4,bb4]", // E Gb
  T: "[b3 bb3 [ab3,b3] bb3 b3 bb3 [ab3,b3] [bb3,gb4], eb4, gb4@2 ~ gb4@3 ~@2]/8", U: "[db4 b3, [e4,ab4]]/2",
  V: "[[bb3,db4]@2 b3 bb3, gb4, ~ eb4]/4", W: "[b3,e4,ab4]", X: "[bb3,db4,gb4]", Y: "[b3,eb4,b4], gb4 ~@15",
  Z: "[bb3,eb4,gb4,bb4]", AA: "[ab3,b3,e4,ab4]", AB: "[bb3,db4,gb4,bb4]", AC: "[b3,eb4,gb4,b4]",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.4)

// other · music box
const music_box = note(`<
  ~@21 A B C D A B C D A E ~@14 A B C F G H ~@7 I ~ J A B C F A B C K L ~@15 L M N O L M N O L M N O L M N O L M P ~@4
>`.pickRestart({
  A: "~@8 eb3 ~ f3 ~ ab3 ~ bb3 ~", B: "ab3 ~@9 eb3 ~ ab3 ~ g3 ~", C: "~@10 eb3 ~ g3 ~ f3 ~", D: "~@10 db3 ~ f3 ~ g3 ~",
  E: "ab3 ~@15", F: "~@10 c3 ~ f3 ~ g3 ~", G: "~@8 ab3 ~@7", H: "bb3 ~@15", I: "[bb3,bb4] ~@5 [f3,f4] ~@7 [bb2,bb3] ~",
  J: "[eb4,eb5] ~@5 [bb3,bb4] ~@7 [eb3,eb4] ~", K: "~@10 c3 ~ f3 ~ e3 ~", L: "~@8 gb3 ~ ab3 ~ b3 ~ db4 ~",
  M: "b3 ~@9 gb3 ~ b3 ~ bb3 ~", N: "~@10 gb3 ~ bb3 ~ ab3 ~", O: "~@10 e3 ~ ab3 ~ bb3 ~", P: "~@10 gb3 ~ bb3 ~@3",
})).s("gm_music_box").gain(0.28)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@30 A B C B A B C D E F G@2 A B H I ~@24 J K L K J K L M N O P@2 J K Q R ~@22
>`.pickRestart({
  A: "~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4]@6 ~@2", // Ab
  B: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4]@6 ~@2", // Cm
  C: "~@2 [ab3,c4,f4] ~@2 [ab3,c4,f4] ~@2 [ab3,c4,f4]@6 ~@2", // Fm
  D: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [g3,c4,eb4,g4]@6 ~@2", // Cm
  E: "~@2 [db4,f4,bb4] ~@2 [db4,f4,bb4] ~@2 [db4,f4,bb4]@6 ~@2", // Bbm
  F: "~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4]@6 ~@2", // Db
  G: "~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4]@6 ~@2", // Eb
  H: "~@2 [ab3,db4,f4] ~@2 [ab3,db4,f4] ~@2 [ab3,db4,f4]@6 ~@2", // Db
  I: "~@2 [g3,bb3,eb4] ~@2 [g3,bb3,eb4] ~@2 [g3,bb3,eb4]@6 ~@2", // Eb
  J: "~@2 [eb4,gb4,b4] ~@2 [eb4,gb4,b4] ~@2 [eb4,gb4,b4]@6 ~@2", // B
  K: "~@2 [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4]@6 ~@2", // Ebm
  L: "~@2 [b3,eb4,ab4] ~@2 [b3,eb4,ab4] ~@2 [b3,eb4,ab4]@6 ~@2", // Abm
  M: "~@2 [eb4,gb4,bb4] ~@2 [eb4,gb4,bb4] ~@2 [bb3,eb4,gb4,bb4]@6 ~@2", // Ebm
  N: "~@2 [e4,ab4,db5] ~@2 [e4,ab4,db5] ~@2 [e4,ab4,db5]@6 ~@2", // Dbm
  O: "~@2 [e4,ab4,b4] ~@2 [e4,ab4,b4] ~@2 [e4,ab4,b4]@6 ~@2", // E
  P: "~@2 [db4,gb4,bb4] ~@2 [db4,gb4,bb4] ~@2 [db4,gb4,bb4]@6 ~@2", // Gb
  Q: "~@2 [b3,e4,ab4] ~@2 [b3,e4,ab4] ~@2 [b3,e4,ab4]@6 ~@2", // E
  R: "~@2 [bb3,db4,gb4] ~@2 [bb3,db4,gb4] ~@2 [bb3,db4,gb4]@6 ~@2", // Gb
})).s("gm_lead_8_bass_lead").gain(0.2)

// other · synth drum
const synth_drum = note("<~@2 [~@12 c4 ~@3]!102 ~@4>").s("gm_synth_drum").gain(0.4)

// other · lead 3 calliope
const lead_3_calliope = note("<~@30 A@3 ~ B@3 ~ C@2 D ~ E F G ~@25 H@3 ~ I@3 ~ J@2 K ~ L M N ~@23>".pickRestart({
  A: "[c5!4 c5@2 ab4 bb4@2 bb4!3 bb4@2 g4 ab4@9]/3", B: "[c5!4 c5@2 ab4 bb4@2 bb4!3 bb4@2 g4 ab4@8 ~]/3",
  C: "[db5!4 db5@2 ab4 db5@2 db5!3 eb5@2 db5 bb4]/2", D: "~ ab4 g4@12 ~@2", E: "c5!3 c5@2 c5@2 g4", F: "bb4!4 bb4@3 g4",
  G: "ab4@3 g4 f4@12", H: "[eb5!4 eb5@2 b4 db5@2 db5!3 db5@2 bb4 b4@9]/3",
  I: "[eb5!4 eb5@2 b4 db5@2 db5!3 db5@2 bb4 b4@8 ~]/3", J: "[e5!4 e5@2 b4 e5@2 e5!3 gb5@2 e5 db5]/2",
  K: "~ b4 bb4@12 ~@2", L: "eb5!3 eb5@2 eb5@2 bb4", M: "db5!4 db5@3 bb4", N: "b4@3 bb4 ab4@12",
})).s("gm_lead_3_calliope").gain(0.35).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~@2 x!2 ~@3]!102 ~@4>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~@2 [~@3 x]!102 ~@4>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [x!2 ~@2] [x!8]!101 [x!7 ~] ~@4>").gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@50 A B C D E B F G C B C H C I C I C I C I C I C I C I C I C I C I C I C I C I C I C I C I C I C I C I C I C B ~@4
>`.pickRestart({
  A: "~ x ~@2 x!2 ~@2", B: "x!4", C: "~ x ~@2 x ~@3", D: "x!3 ~ x ~ x!2", E: "~ x ~@2 x ~@2 x", F: "~@2 x!2",
  G: "x ~ x ~ x ~@2 x", H: "x!3 ~", I: "x ~ x ~ x ~ x!2",
})).gain(0.2)

// drums · cowbell
const cowbell = s("cb").struct("<~@30 [x!16]!20 ~@12 [x!16]!41 [x!14 ~@2] ~@4>").gain(0.1)

// drums · congas
const congas = s("conga:13").struct("<~@2 [~@3 x]!102 ~@4>").gain(0.48)

// drums · congas
const congas_2 = s("conga:18").struct("<~@2 [x ~@2 x!2 ~@3]!102 ~@4>").gain(0.48)

// drums · congas
const congas_3 = s("conga:33").struct("<~@2 [~@5 x ~@2]!102 ~@4>").gain(0.48)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@70 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 ~@4
>`.pickRestart({
  A: "~ x ~@2", B: "~@2 x!2 ~@4",
})).gain(0.97)

stack(
  bass, string_ensemble_1, music_box, lead_8_bass_lead, synth_drum, lead_3_calliope, kick, snare, hihat, tambourine,
  cowbell, congas, congas_2, congas_3, claves
)

More by Berlin