Strudelify

He Wasn't Man Enough

Toni Braxton

KeyG majorTempo95 bpm
0:00/0:00
// He Wasn't Man Enough — Toni Braxton
// 95 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · fretless bass · "Bass"
const bass = note(`<
  ~@4 A B C D E B F G H B I J E B F G H B I J K B L M N O P Q ~ B F R S B I J E T U G H B I J K B L M N O P Q V B L M N
  O P Q W X W Y W Z AA AB K B L M N O P Q K B L M N O P Q AC B L M AD AE P AF
>`.pickRestart({
  A: "e2!2 b1 e2 ~@2 e2 a1 ~ a1!2 ~ a1!3 ~", B: "a1!2 ~ a1 ~@2 e1!2 ~ e1!2 ~ e1 ~ d2 c2",
  C: "b1!2 ~ b1 ~@2 e1!2 ~ e1 g1 ~ e2 ~ d2 c2", D: "b1!2 a1 b1 ~@2 d#2 e2 ~ e2!2 ~ e2 ~ e2!2",
  E: "e2!2 b1 e1 ~ e1 a1!2 ~ a1!2 ~ a1 g1 a1 ~", F: "e2!2 b1 e2 e1 ~ a1!2 ~ a1!2 ~ a1 ~ a1 ~",
  G: "a1!2 ~ a1 b1 ~ e1!2 ~ e1 b1 ~ e1 g1 e2 b1", H: "e2!2 b1 e2 ~@2 e2 a1 ~ a1!2 ~ a1 g1 a1 ~",
  I: "b1!2 ~ b1 ~ e1!2 ~@2 e1 g1 ~ e2 ~ d2 c2", J: "b1!2 a1 b1 ~ d#2 e2 ~@2 e2!2 ~ e2 ~ e2!2",
  K: "e2!2 b1 e1 ~@2 e2 a1 ~ a1!2 ~ a1 g1!2 ~", L: "e1!2 ~ e1@2 ~ e1 ~@2 a1!2 ~ a1 ~ a1 ~",
  M: "a1!2 ~ a1 b1 ~ e1!2 ~ e1!2 ~ e1 g1 e2 d2", N: "e2!2 b1 e2 ~@2 e2 a1 ~ a1!2 ~ a1 e1 a1 ~",
  O: "a1!2 ~ a1 ~ e1!2 ~@2 e1!2 ~ e1 ~ d2 c2", P: "b1!2 ~ b1 ~@2 e1!2 ~ e1 f#1 ~ e1 ~ d2 c2",
  Q: "b1!2 a1 b1 ~@2 d#2 e2 ~ e2 ~ e2!2 ~ e2!2", R: "a1!2 ~ a1 b1 ~ e1!2 ~@8", S: "~@6 e2 a1 ~ a1!2 ~ a1 g1 a1 ~",
  T: "a1!2 ~ a1 ~@2 e1!2 ~ e1!2 ~ e2@2 ~ e2", U: "~@3 b1@2 ~ a1!2 ~ a1!2 ~ a1 ~ a1 ~", V: "~@6 a1!2 ~ a1!2 ~ a1 g1!2 ~",
  W: "c2 d2", X: "b1 e2", Y: "d#2 b1 e2@2", Z: "d#2@7 e2@9", AA: "c2", AB: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  AC: "e2!2 b1 e2 ~@8 a1 g1!2 ~", AD: "e2!2 b1 e2 ~@2 e2 a2 ~ a2!2 ~ a2 e2 a2 ~",
  AE: "a2!2 ~ a2 ~ e1!2 ~@2 e1!2 ~ e1 ~ d2 c2", AF: "b1 ~@15",
})).s("gm_fretless_bass").gain(0.54)

// chords · acoustic guitar steel · "Steel Guitar"
const acoustic_guitar_steel = note(`<
  A B A B A B C@2 A B A B A B C@2 A B A B A B C@2 A B D B A B C@2 ~ B A E F B C@2 A B A B A B C@2 A B D B A B C@2 A B D
  B A B C@2 ~@12 A B C@2 A B D B A B C@2 ~ B D B G ~@3
>`.pickRestart({
  A: "[e4,g4,b4]!6 [e4,a4,c5]!10", B: "[e4,a4,c5]!6 [e4,g4,b4]!10", C: "[d#4,f#4,b4]!6 [e4,g4,b4]!10",
  D: "[e4,f#4,b4]!6 [e4,a4,c5]!10", E: "[e4,a4,c5]!6 [e4,g4,b4]!2 ~ b3 [e4,g4] [b4,d5] [e5,g5] [d5,e5] [g4,b4] [b3,e4]",
  F: "~@4 [e4,g4,b4]!2 [e4,a4,c5]!10", G: "[e4,g4,b4]!6 [e4,a4,c5]!2 ~@8",
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.6)

// chords · epiano2 · "Piano"
const epiano2 = note("<A B@2 C@2 ~@27 D E F G H ~@27 I J I K I L M N ~@24>".pickRestart({
  A: "e3@3 e3@3 a2@3 a2@3 a2@4", B: "[a2@3 a2@3 e3@3 e3@3 e3@2 d3 ~@4 e3@3 a2@3 a2@3 a2@4, ~@15 c3@6 ~@11]/2",
  C: "[a2@3 a2@3 e3@3 e3@3 e3@2 e3 c3@3 ~@14]/2",
  D: "[b3,e4,g4]@2 [a3,d4,f#4] [g3,c4,e4]@2 [f#3,b3,d4]@3 [a3,c4,e4,g4]@7 ~", // Em D C Bm Am7
  E: "~@8 [b3,d4,e4,g4]@4 [b3,d4,e4,g4] [d4,a4]@3", // Em7 D5
  F: "[b3,d4,e4,g4]@3 [b3,d4,e4,g4]@2 [b3,d4,e4,g4]@3 [a3,c4,e4,g4]@7 ~", // Em7 Am7
  G: "e3 a3 c4 e4 c4 a3 e3 ~@2 b3 [e4,g4] [b4,d5] [e5,g5] [d5,e5] [g4,b4] [b3,e4]", H: "[e3,b3,g4]@3 ~@5",
  I: "[e4,g4] [f#4,a4]", J: "[d#4,f#4] [b3,g4]", K: "[d#4,f#4,a4]!2 [b3,g4]@2", L: "[d#4,f#4]@7 [e4,g4]@9",
  M: "[a#3,d4,f4]", N: "[c4,e4,g4]",
})).s("gm_epiano2").gain(0.19).pan(0.2)

// chords · synth strings 1 · "Low Strings"
const synth_strings_1 = note("<~@24 A@6 B@2 ~@8 A@6 B@2 A@6 B@2 A@6 B@2 ~@12 C@2 B@2 A@6 B@2 ~ D@4 ~@3>".pickRestart({
  A: "[[g3,b3]@3 [a3,c4]@8 [g3,b3,e4]@8 [a3,c4,e4]@8 [g3,b3,e4]@8 [a3,c4,e4]@8 [g3,b3,e4]@5, e4@11 ~@37]/6", // G Am Em Am Em Am Em
  B: "[f#3,b3,d#4]@3 [g3,b3,e4]@5", C: "[[g3,b3,e4]@3 [a3,c4,e4]@8 [g3,b3,e4]@5]/2",
  D: "[~@3 [g3,b3,e4]@8 [a3,c4,e4]@8 [g3,b3,e4]@8 [a3,c4,e4] ~@4]/4", // Em Am Em Am
})).s("gm_synth_strings_1").gain(0.07)

// other · string ensemble 1 · "High Strings"
const string_ensemble_1 = note("<~@31 A@2 ~@8 B C ~@20 D ~@6 E F ~@6 G H I@3 J@2 ~ K L ~ M@4 ~ N L>".pickRestart({
  A: "[~@15 [e5,e6]@4 ~@13]/2", B: "~@10 [g4,g5] [a4,a5] [b4,b5] ~@2 [e5,e6]", C: "~@3 [b4,b5] ~@2 [d5,d6] [c5,c6] ~@8",
  D: "a5 ~ a5!2 ~ g5!2 ~@7 b5 e6", E: "~@2 a5 g5", F: "a5", G: "~@10 b5 ~ b5 ~ c6 b5", H: "a5 ~@2 a5 ~@2 g5 ~@9",
  I: "[b5 c6@2 b5@2 ~]/3", J: "[~ b5@2 ~]/2", K: "f#5@8 ~@5 b5 c6 b5", L: "a5 ~ a5!2 ~ g5!2 ~@9",
  M: "[a5 b5@2 c6@2 b5@2 ~]/4", N: "~@13 b5 c6 b5",
})).s("gm_string_ensemble_1").gain(0.19)

// other · string ensemble 1 · "High Strings" · soft notes
const string_ensemble_1_soft = note("<~@82 A@2 B@2 C ~@9>".pickRestart({
  A: "[~ c6@2 ~]/2", B: "[~ c6@2 b5]/2", C: "~@2 g5 ~",
})).s("gm_string_ensemble_1").gain(0.12)

// chords · drawbar organ · "Organ" · B Em
const drawbar_organ = note("<~@38 [[f#4,b4,d#5]@3 [g4,b4,e5]@5]!2 ~@56>").s("gm_drawbar_organ").gain(0.11)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel_2 = note(`<
  ~@64
  [~@6 c4@2 ~@3 f#4@5, c3 d3, ~ g3@3 ~ a3@3, ~@3 e4@5 ~@8]
  [~@3 f#4@5 ~@8, ~ d#4@3 ~@4]
  [~@6 c4@2 ~@3 f#4@5, c3 d3, ~ g3@3 ~ a3@3, ~@3 e4@5 ~@8]
  [~@3 f#4@5 ~@8, ~ d#4@3 ~@4]
  [~@6 c4@2 ~@3 f#4@5, c3 d3, ~ g3@3 ~ a3@3, ~@3 e4@5 ~@8]
  [~@3 f#4@5 ~@8, ~ d#4@3 ~@4]
  ~@26
>`).s("gm_acoustic_guitar_steel").gain(0.22).pan(1)

// drums · kick
const kick = s("bd").struct("<~@4 A@28 B A@2 C D A@4 E F A@13 D A@6 E A@7 C A@6 ~ G A@8 G A@6 B>".pickRestart({
  A: "x!2 ~ x ~@2 x!2 ~@2 x ~@3 x ~", B: "x", C: "x!2 ~ x ~@2 x!2 ~@8", D: "~@6 x!2 ~@2 x ~@3 x ~",
  E: "x!2 ~ x ~@2 x!2 ~@2 x ~@3 x!2", F: "~@3 x ~@2 x!2 ~@2 x ~@3 x ~", G: "~@7 x",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@4 A@28 ~ A@2 B C A@27 ~@7 D A@23 ~>".pickRestart({
  A: "~@2 x ~@2 x ~@6 x ~@3", B: "~@2 x ~@2 x ~@10", C: "~@3 x", D: "~@5 x!2 ~",
})).gain(0.64)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@4 B C D@2 E F@2 G C E H D I D@2 J H K E K L E K@2 M K@2 F N F G O P F@2 D M Q G@2 J@2 E K B C G F G D H D R K G E F
  K H F M H@2 J E H@2 S T J C E D E ~ U V F D F J K@3 U E J H E K F W
>`.pickRestart({
  A: "x!2", B: "~@2 x!5 ~ x ~ x!6", C: "x ~ x!7 ~ x!6", D: "x!9 ~ x!6", E: "x ~ x!14", F: "x!7 ~ x!8",
  G: "x ~ x!5 ~ x ~ x!6", H: "x!7 ~ x ~ x!6", I: "~ x!8 ~ x!6", J: "x ~ x!5 ~ x!8", K: "x!16", L: "~@2 x!7 ~ x!6",
  M: "~@2 x!14", N: "~@3 x", O: "x!8 ~@8", P: "~@4 x!5 ~ x!6", Q: "x!7 ~ x ~ x!2 ~ x!2 ~", R: "~@4 x!12",
  S: "x ~ x!8 ~@6", T: "~ x!15", U: "~@12 x!4", V: "~ x!6 ~ x ~ x!6", W: "x",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4 A B C@2 D E@2 A B D F C@4 G F ~ D ~ B D ~@2 D ~@2 E ~ E A ~ C E@2 C D F B A G@2 D ~ A B A E A C F C ~@2 A D E ~ F
  E D F@2 G D F@2 D ~ G B D C D ~@2 F E C E G ~@4 D G F D ~ E ~
>`.pickRestart({
  A: "~ x ~@5 x ~ x ~@6", B: "~ x ~@7 x ~@6", C: "~@9 x ~@6", D: "~ x ~@14", E: "~@7 x ~@8", F: "~@7 x ~ x ~@6",
  G: "~ x ~@5 x ~@8",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@42 [~@7 x ~@8] ~@53>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@11 A ~@7 A ~@3 A ~@3 A ~@7 A B ~@6 A ~@15 A ~@7 A ~@7 A ~@15>".pickRestart({
  A: "x", B: "~@12 x ~@2 x",
})).gain(0.64)

// drums · lt
const lt = s("lt").struct("<~@78 [x!7 ~@2 x!2 ~ x ~@3] [x!7 ~@2 x!2 ~@5] ~@16>").gain(0.32)

stack(
  bass, acoustic_guitar_steel, epiano2, synth_strings_1, string_ensemble_1, string_ensemble_1_soft, drawbar_organ,
  acoustic_guitar_steel_2, kick, clap, snare, hihat, hihat_soft, open_hat, crash, lt
)

More by Toni Braxton