Strudelify
If You Don't Know Me By Now cover art

A New Flame

If You Don't Know Me By Now

Simply Red

KeyB majorTempo95 bpm
0:00/0:00
// If You Don't Know Me By Now — Simply Red
// 95 bpm, 3/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 107 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F G@2 A H I J K@2 L M N@2 O@2 P@2 Q R S T U V W X Y Z AA AB AC AD AE AF AG AH A H I J K@2 L M A H I J K@2
  L M N@2 O@2 P@2 Q R S T U V W X Y Z AA AB AC AD AE AF AG AH A B C D E F G@2 A B C D E F G@2 A B C D E F AI@3 ~
>`.pickRestart({
  A: "b1@7 ~", B: "b1@8 g#1@7 ~ f#1@7 ~", C: "d#1", D: "d#2@8 d#1@8 f#1@7 ~", E: "e1@11 ~", F: "e1@7 ~", G: "a#1",
  H: "b1@6 ~@2 g#1@7 ~ f#1@6 ~@2", I: "d#1@11 ~", J: "d#1@7 ~ e1@7 ~ f#1@7 ~", K: "[e1@9 ~ e2@2]/2", L: "e1@23 ~",
  M: "a#1@23 ~", N: "[b1@15 ~]/2", O: "[d#2@42 ~@3 d#2@2 ~]/2", P: "[e2@32 e1@8 e2@7 ~]/2", Q: "f#2@20 ~ f#2@3",
  R: "f#1@8 g#1@7 ~ a#1@7 ~", S: "b1@23 ~", T: "b2 g#2 f#2", U: "d#2@20 ~ d#2@2 ~", V: "d#1@2 d#2", W: "e2@7 b1",
  X: "e1@15 ~ e2@7 ~", Y: "f#2@19 ~@2 f#2@3", Z: "f#1@7 ~ f#1@7 ~ f#1@5 ~@3", AA: "d2@20 ~ a1@3",
  AB: "d2@8 e2@7 ~ f#2@6 ~@2", AC: "g2@17 ~@2 g2@2 d2@3", AD: "g1@8 g2@3 ~", AE: "e2@20 ~ b1@3", AF: "e2@14 ~@2 e2@7 ~",
  AG: "f#2@6 ~ f#2", AH: "f#1@4 g#1@4 a#1@3 ~", AI: "[a#1@3 ~]/3",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A@2 B@2 C@2 D E F@2 G@2 H@2 I J K@2 L@2 M@2 N O K@2 L@2 M@2 N O P Q R@2 S@2 T U F@2 G@2 H@2 I J F@2 G@2 H@2 I J K@2
  L@2 M@2 N O K@2 L@2 M@2 N O P Q R@2 S@2 T U A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 V@4
>`.pickRestart({
  A: "[[f#3,b3,d#4] [f#3,b3,d#4,f#4,b4,d#5], b2]/2", // B
  B: "[d#4@8 [d#4,f#4,a#4,c#5,f#5]@3 [d#4,f#4,a#4,c#5,f#5]@2 [d#4,f#4,a#4,c#5,f#5]@3 [d#4,f#4,a#4,c#5,f#5]@3 [d#4,f#4,a#4,c#5,f#5]@2 [d#4,f#4,a#4,c#5,f#5]@3 f#3@6 ~@2 a#3@6 ~@2 d#4@3 ~@5, [d#2,a#2]@37 ~@11, [f#3,a#3]@24 [f#4,a#4,c#5,f#5]@19 ~@5, d#3@7 d#3@5 ~@4, ~@12 d#4 ~@11]/2", // D#m7 D#5 F#
  C: "[~@24 [e5,g#5,b5]@17 ~@7, [e2,g#3,b3,e4]@23 ~]/2", D: "g3@19 ~@2 g3@3, [a#3,c#4,g4,a#4,c#5], a#2@16 ~@3 a#2@5",
  E: "[a#2,g3,a#3,c#4]@7 ~", F: "[[f#3,b3,d#4] [f#3,b3,d#4], b2]/2",
  G: "[d#3@21 ~@19 d#4@8, [d#2,a#2], d#4@2 a#3, a#3 f#3, f#3@7 d#3@9]/2", H: "[[e2,g#3,b3,e4]@23 ~]/2",
  I: "g3@19 ~@2 g3@3, [a#3,c#4], a#2@16 ~@3 a#2@5", J: "~@8 g5@3 a#5@2 c#6@3 e6@6 ~@2, [a#2,g3,a#3,c#4]@7 ~",
  K: "[[b2,f#3,b3,d#4,f#4,b4,d#5]@41 ~@4 [b3,d#4,f#4]@3]/2", // B
  L: "[~@21 a#4@3 d#4@8 d#4@3 f#4@2 g#4@3 a#4@8, [d#2,a#2,d#3,f#3,a#3,c#4]@43 ~@5, ~@21 f#4@11 ~@16]/2", // D#m7
  M: "[[e2,e3,g#3,b3]@23 ~]/2", N: "[g#3,b3]@19 ~@2 b3@3, [f#2,e4], ~@19 g#3@5", O: "[f#2,a#3,c#4,f#4]@7 ~",
  P: "[a3,d4]@19 ~@2 d4@3, [d2,d3,f#4], ~@19 a3@5", Q: "[a3,d4,f#4]!3, [d2,d3]",
  R: "[[b3,d4]@19 ~@5 d4@8 [b3,d4,f#4]@14 ~@2, g2@23 ~, f#4@2 ~, g3@14 ~@5 g3@27 ~@2, ~@21 b3@11 ~@16]/2", // Bm
  S: "[[g3,b3]@19 ~@5 b3@8 [b3,e4]@8 [g3,b3,e4]@6 ~@2, e2@23 ~, e4@2 ~, e3@10 ~@9 e3@27 ~@2, ~@21 g3@19 ~@8]/2", // G E5 Em
  T: "f#2@16 ~@5 b3@3, e4, [g#3,b3]@19 g#3@5, ~@2 f#2", // G#m
  U: "[a#3,c#4,f#4]@8 [a#3,c#4,f#4]@8 [a#3,c#4,f#4]@7 ~, f#2@23 ~", // F#
  V: "[~@8 e6@13 ~@3, c#4@18 g5@67 ~@11, a#3@13 c#5@15 c#6@57 ~@11, g3@3 a#4@25 ~@4, a#2@2 g4@9 a#5@31 ~@6]/4",
})).s("gm_piano").gain(0.63)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~ A@2 B@4 C@2 D@2 E@2 F@4 ~@8 G@4 H@3 I J@4 K@3 L D@2 E@2 F@4 D@2 E@2 F@4 ~@8 G@4 H@3 I J@4 K@3 L A@2 B@4 C@2 A@2 B@4
  C@2 A@2 M@4 N@3 ~
>`.pickRestart({
  A: "[[d#4,f#4,d#5]@4 f#5 [g#4,g#5], b4, ~@2 f#4]/2", // D#m G#
  B: "[f#5@31 ~@22 [e4,e5]@3 [e4,e5]@3 ~@9 [f#4,f#5]@3 ~ [f#4,f#5]@8 [e4,e5]@8 [d#4,d#5]@8, [d#4,a#4] [b3,g#4], f#4@16 ~@16 [f#4,f#5]@21 ~@43]/4", // E F# E D# D#5 E F#
  C: "[[a#3,c#4,g4,c#5]@23 ~]/2", D: "[[f#3,b3,d#4]@47 ~]/2", E: "[d#3,f#3,a#3,c#4,f#4]/2",
  F: "[[g#3,b3]@47 ~ [g3,c#4]@46 ~@2, e4]/4", G: "[[b3,d#4]@47 ~ [a#3,c#4]@47 ~, f#4@95 ~]/4", H: "[g#3,b3,e4]/3",
  I: "[a#3,c#4,f#4]@11 ~", // F#
  J: "[[f#4,a4,f#5]@43 a5@2 [b4,b5]@3 [f#4,f#5]@38 ~@2 [b3,b4]@8, d5@47 ~, ~@43 a4@43 ~@10, ~@16 b4 ~@15]/4", // F#m B F# B
  K: "[[g4,b4]@23 ~ g#4@12, [e4,e5], ~@47 b4@25]/3", L: "[f#4,a#4,c#5,f#5]@23 ~",
  M: "[f#5@31 ~@22 [e4,e5]@3 [e4,e5]@3 ~@9 [f#4,f#5]@3 ~ [f#4,f#5]@8 [e4,e5]@8 [d#4,d#5]@8, [d#4,a#4,c#6]@49 ~@47, a#5@23 ~ [b3,g#4]@24, f#4@16 ~@16 [f#4,f#5]@21 ~@43]/4", // E F# E D# D#7 E F#
  N: "[[e4,g4]@19 ~@5, c#5@3 ~]/3", // Em
})).s("gm_string_ensemble_2").gain(0.38)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~ A@2 B@4 C@2 D@2 E@2 F@4 ~@8 G@2 H@2 I@3 ~ J@2 K@5 L D@2 E@2 F@4 D@2 E@2 F@4 ~@8 G@2 H@2 I@3 ~ J@2 K@5 L A@2 B@4 C@2
  A@2 B@4 C@2 A@2 B@4 ~@4
>`.pickRestart({
  A: "[d#5@31 ~ f#5@8 g#5@8]/2", B: "[f#5@53 e5@15 ~ f#5@8 e5@11 d#5@8]/4", C: "[c#5@23 ~]/2",
  D: "[[f#3,b3,d#4]@47 ~]/2", E: "[d#3,f#3,a#3,c#4,f#4]/2", F: "[[g#3,b3]@47 ~ [g3,c#4]@46 ~@2, e4]/4",
  G: "[[b3,d#4]@47 ~]/2", H: "[[a#3,c#4]@47 ~]/2", I: "[g#3,b3]/3", J: "[[d4,f#4,a4]@47 ~]/2",
  K: "[~@24 f#4@21 ~@3 e4@16 g4@8 ~@8 e5@16 g#4@22 ~@2, b3@97 ~@23, d4@46 ~ d4@49 ~@24, g3@41 ~@4 g3@52 ~@23, ~@72 b4@25 ~@23]/5",
  L: "[c#4,f#4,a#4]@11 ~", // F#
})).s("gm_rock_organ").gain(0.44)

// chords · brass section · "BRASS 1"
const brass_section = note("<~ A@2 B@2 C@2 D@2 ~@72 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 ~@4>".pickRestart({
  A: "[[d#4,f#4]@23 ~]/2", B: "[[f#4,a#4]@47 ~]/2", C: "[[e4,g#4]@23 ~]/2", D: "[[e4,g4,a#4]@47 ~]/2",
})).s("gm_brass_section").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@3
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "x", B: "x!3",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@7 B ~@7 C ~@23 A ~@7 B ~@7 C ~@21 A ~@4>".pickRestart({
  A: "~@7 x", B: "~@16 x ~@4 x ~@2", C: "~@2 x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~ A@7 B A@39 B A@7 B A@31 B A@7 B A@6 ~@4>".pickRestart({
  A: "x!3", B: "~ x!2",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@7 B ~@7 C ~@23 A ~@7 B ~@7 C ~@21 A ~@4>".pickRestart({
  A: "~@16 x ~@2 x ~@4", B: "~@8 x ~@10 x ~@4", C: "x!2 ~",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<A ~@7 B ~@39 B ~@7 B ~@31 B ~@7 B ~@6 B ~@3>".pickRestart({
  A: "~@2 x", B: "x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~ A ~@7 A ~@23 A ~@7 A ~@7 A ~@23 A ~@7 A ~@7 A ~@7 A ~@9>".pickRestart({
  A: "x",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@8 A ~@39 A ~@7 A ~@31 A ~@7 A ~@6 B ~@3>".pickRestart({
  A: "x ~@12 x ~@2 x ~@2 x ~ x ~@2", B: "x",
})).gain(0.8)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@8 A ~@39 A ~@7 A ~@31 A ~@7 A ~@10>".pickRestart({
  A: "~@8 x ~@2 x ~@12",
})).gain(0.32)

stack(
  bass, piano, string_ensemble_2, rock_organ, brass_section, kick, snare, low_tom, hihat, mid_tom, open_hat, crash,
  ride, ride_soft
)

More by Simply Red