Strudelify

I Am Free

Mariah Carey

KeyA majorTempo50 bpm
0:00/0:00
// I Am Free — Mariah Carey
// 50 bpm, 12/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 25 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(50/6)

// 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("<~@6 A B C D E F G H I J K L M N O P Q R ~>".pickRestart({
  A: "f2@8 ~ f2@2 f2@8 ~ f2 f2@8 ~ c2 ~", B: "f2@7 f2 ~ f2 ~ f2@8 ~ c2 f2@8 ~ f1 ~",
  C: "f2@6 ~@3 f2 ~ e2@5 a1@5 d2@5 ~ c#2@5", D: "c2@5 f2@5 ~ a#1@8 ~ f1 e2@5 ~ a1@5",
  E: "d2@5 c2@5 ~ b1@5 a#1@5 c2@6 ~@3 c2 ~", F: "c2@5 c2@5 ~ f2@8 ~ c2 f2@5 ~ f2@5",
  G: "f2@5 f2@5 ~ f2@8 ~ f2 f2@5 ~ f2@5", H: "f2@8 ~ f2 ~ d2@5 a1@5 d2@5 ~ c2@5",
  I: "b1@8 ~ b1 ~ b1@9 b0 c2@7 ~@2 c2 ~", J: "c2@4 ~ c2@3 ~ c2 ~ f2@8 ~ c2 f2@7 ~ f2!2 ~, ~@2 a2 ~@13",
  K: "f2@8 ~ c2 ~ f2@8 ~ f1 f2@8 ~ c2 ~", L: "e2@5 a1@5 ~ d2@8 ~ a1 c2@5 ~ f2@5",
  M: "a#1@8 ~ f1 ~ e2@5 a1@5 d2@5 ~ c2@5", N: "b1@5 a#1@5 ~ c2@8 ~ c2 c2@7 ~ c2!2 ~",
  O: "c2@6 ~@3 c2 ~ c2@8 ~ f1 d2@5 ~ c2@5", P: "b1@5 c2@5 ~ f2@5 f2@5 f2@5 ~ f2@5",
  Q: "f2@7 f2 ~ f2 ~ f2@5 c2@5 f2@7 ~@2 f2 ~", R: "f2@7 f2 ~ f2 ~ f2@7 ~@2 f2 f2@7 c#2 ~ e2 ~",
})).s("gm_fretless_bass").gain(0.31)

// bass · fretless bass · "Bass" · soft notes
const bass_soft = note("<~@6 A B C D E F ~@3 F G H I J K ~@4>".pickRestart({
  A: "~@28 f1 ~@3", B: "~@18 f1 ~@9 f1 ~@3", C: "~@7 f2 ~@24", D: "~@18 a#0 ~@13", E: "~@28 c2 ~@3", F: "~@18 f1 ~@13",
  G: "~@7 f1 ~@10 f1 ~@9 f1 ~@3", H: "~@18 d1 ~@13", I: "~@7 a#0 ~@24", J: "~@18 c1 ~@13", K: "~@7 c2 ~@10 c1 ~@13",
})).s("gm_fretless_bass").gain(0.18)

// chords · piano
const piano = note("<A@3 B C D E F G H I J K L M@2 N O P Q R S T@2 ~>".pickRestart({
  A: "[~@2 c5@3 [a#3,d4,f4,a#4]@5 a#4@3 a#4@2 [a3,d4,f4,a4]@5 ~@3 a4@3 [g3,b3,d4,g4]@5 e3@3 ~@5 [a#3,c4]@3 [a3,c4,f4]@11 [c#4,f4,g4,a#4]@10 ~@4 c4@2 ~@2 f4@2 a4 ~ [c#4,f4,g4,a#4]@7 g3@2 c#4 [a3,c4,f4]@7 f4@2 a4 ~, [a3,c4,f4]@5 ~@5 [c#4,f4,g4]@5 ~@6 [a3,d4,f4]@5 ~@5 [f2,a#3,c4,e4]@9 ~@23 [f2,a4]@10 ~@23, ~@31 g3@5 ~ [g3,f4]@5 ~@21 f4@8 ~@25, ~@34 [c3,e3,g4]@6 ~@23 c4@4 ~@2 c4@4 ~@23, ~@65 a3@8 ~@23]/3", // A# Dm G A#sus2 F Gm7b5 F Gm7b5 …
  B: "[a#3,d4,e4,g4]@5 [c#4,e4,g4,a4]@5 ~ [c4,d4,f4,a4]@5 [b3,c#4,e4,g#4]@5 [a#3,c4,d#4,g4]@5 ~ [a3,c4,f4]@5", // Em7b5 A7 Dm7 C#m7 Cm7 F
  C: "[d4,f4,a4,c5]@7 a3@2 d4 ~ [b3,d4,e4,g4]@5 [c#4,e4,g4,a4]@5 [c4,d4,f4,a4]@5 ~ [a3,c4,f4]@5", // Dm7 Em7 A7 Dm7 F
  D: "[d4,f4,a4,b4]@5 [c#4,f4,g4,a#4]@5 ~ [a3,c4,f4]@10 [g3,a#3,d4]@5 ~ [a#3,c4,e4,g4]@5", // Bm7b5 Gm7b5 F Gm C7
  E: "[a#3,d4,f4]@7 a#3@2 d4 ~@4 c4@2 ~@2 f4@2 a4 ~@4 c4@2 ~ f4@2 a4 ~, ~@11 [f2,a4]@9 ~ [f2,a4]@9 ~@2, ~@11 f4@7 ~@3 f4@7 ~@4, ~@11 c4@3 ~@2 c4@4 ~ c4@4 ~@2 c4@4 ~, ~@12 a3@7 ~@4 a3@7 ~@2", // A# F
  F: "[c#4,f4,g4,a#4]@11 [a3,c4,f4]@7 f4@2 a4 [c#4,f4,g4,a#4]@7 g3@2 c#4 ~", // Gm7b5 F Gm7b5
  G: "~@4 c4 ~@2 f4@2 a4 ~ [a#3,d4,e4,g4]@5 [c#4,e4,g4,a4]@5 [c4,d4,f4,a4]@5 ~ [b3,c#4,e4,g#4]@5, [f2,a4]@9 ~@23, f4@7 ~@25, c4@4 ~ c4@4 ~@23, ~@2 a3@7 ~@23", // Em7b5 A7 Dm7 C#m7 F
  H: "[a#3,c4,d#4,g4]@5 [a3,c4,f4]@5 ~ [d4,f4,a4,c5]@7 a3@2 d4 [b3,d4,e4,g4]@5 ~ [c#4,e4,g4,a4]@5", // Cm7 F Dm7 Em7 A7
  I: "[c4,d4,f4,a4]@5 [a3,c4,f4]@5 ~ [d4,f4,a4,b4]@5 [c#4,f4,g4,a#4]@5 [a3,c4,f4]@7 f4@2 a4 ~", // Dm7 F Bm7b5 Gm7b5 F
  J: "[g3,a#3,d4]@5 [a#3,c4,e4,g4]@5 ~@4 c4@2 ~@2 f4@2 a4 [f3,a#3,d4]@5 ~ a4 c5@4, ~@11 [f2,a4]@9 ~@12, ~@11 f4@7 ~@14, ~@11 c4@3 ~@2 c4@4 ~@12, ~@12 a3@7 ~@8 [a3,c4,f4]@5", // Gm C7 A# F
  K: "[a#3,d4,f4,a#4]@5 g4@2 a#4@3 a4 f4@5 ~@2 a4@3 [g3,b3,d4,g4]@5 e4 g4 g4@3 f4, ~@5 [g3,a#3,c#4,f4]@5 ~ [c4,d4]@11 ~@5 [a#3,c4,e4]@5, ~@11 a4@7 ~@14, ~@16 f4@5 ~@11", // A# G Gm7b5 Csus2 C7
  L: "~@4 c4 ~@4 a4 ~ [a3,d4,f4,d5]@5 [c#4,e4,g4,a4]@4 ~@2 a4@5 ~@3 a4@2, [f2,a4]@4 d#5 ~@5 c5 ~@5, f4@7 [f4,e5,f5]@2 ~@23, c4@4 ~ [c4,c5]@4 ~@23, ~@2 a3@7 ~@12 [a3,d4,f4]@5 ~ [a3,c4,f4]@5", // Dm A7 F Fmaj7 C Dm F
  M: "[~@16 [g3,g4]@2 ~@2 d4 [a#3,d4,f4,g4]@16 f3@2 a#3@2 d4 ~ [a3,c4,f4]@10 [c#4,f4,g4,a#4]@7 g3@2 c#4 ~, [b1,d4]@5 ~@11, b3@9 b3 ~@22, [g3,g4]@14 f3@5 a4@2 ~@43, f3@3 d3@2 ~@11]/2", // G Gm7 F Gm7b5 Bm G
  N: "[a3,c4,f4]@11 [g3,a#3,c#4,f4]@7 g3@2 c#4 [a3,c4,f4]@11", // F Gm7b5 F
  O: "[a#3,d4,e4,g4]@5 [c#4,e4,g4,a4]@5 ~ [a3,d4,f4]@10 [a#3,c4,d#4,g4]@5 ~ [c4,d#4,f4,a4]@5", // Em7b5 A7 Dm Cm7 F7
  P: "[a3,c4,d4,f4]@7 a3@2 d4 ~ [b3,d4,e4,g4]@5 [c#4,e4,g4,a4]@5 [a3,d4,f4]@5 ~ [a3,c4,f4]@5", // Dm7 Em7 A7 Dm F
  Q: "[g3,b3,d4]@5 [a#3,c#4,f4]@5 ~ [a3,c4,f4]@7 f4@2 a4 [g3,a#3,d4]@7 g3@2 a#3 ~", // G A#m F Gm
  R: "[a3,c4,f4]@11 [g3,a#3,c#4,f4]@7 g3@2 c#4 [a3,d4,f4]@5 ~ [a3,c4,f4]@5", // F Gm7b5 Dm F
  S: "[a3,b3,d4,f4]@5 [a#3,c#4,f4,g4]@5 ~ [a3,c4,f4]@5 ~ c5@4 [a#3,d4,f4,a#4]@5 g4 [c#4,f4,g4,a#4]@5, ~@16 [c4,d#4,f4,a4]@5 ~@11", // Bm7b5 Gm7b5 F A# Gm7b5 F7
  T: "[~@7 c4@2 d4 ~ [g3,b3,d4]@5 g4 g4@4 c4@13 ~@2 c4 c4@2 f4@2 a4 ~ [a3,c4,f4]@15 ~@6, [f2,d4]@6 a4@4 g4@6 ~@5 f4@18 ~@25, [c4,a4]@5 [a3,f4]@4 ~@7 [a#3,c4,e4]@5 ~@13 a3@8 ~@22, [f3,a3]@4 f3@5 ~@55, ~@2 d3@7 ~@12 [f2,a4]@20 ~@23]/2", // G F Dm F Dm C7 F
})).s("gm_piano").gain(0.48)

// chords · pad warm · "Pad 2 (warm)"
const pad_warm = note("<~@11 A B@2 C ~@10>".pickRestart({
  A: "~@27 [c4,f4,a4] [f4,a4,c5]@4", // F
  B: "[[d4,f4,a#4]@5 [a#3,c#4,g4]@2 [c#4,f4,a#4]@3 [c4,f4,a4]@6 [a3,c4,f4]@2 [c4,f4,a4]@3 [b3,d4,g4]@5 [g3,a#3,e4]@2 [a#3,e4,g4]@3 [a3,c4,f4]@6 [f4,a4,c5]@2 [a4,c5,e5] [a4,c5,d#5]@2 ~ [f4,a4,d5]@5 [c#4,e4,a4]@4 ~ [f4,a4] [d4,f4,a4]@5 [a3,c4,f4]@3 [c4,f4,a4]@2, ~@39 f5@2 ~@11 [e4,g4,c5]@2 ~@10]/2", // A# Gdim A#m F G Edim F Am …
  C: "[b3,d4,g4]@16 [b3,d4,g4]@3 [c4,e4,a4]@2 [a#3,d4,g4]@11", // G Am Gm
})).s("gm_pad_warm").gain(0.46)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@6 A B C D E F ~@3 G H I J K L M N@2 ~>".pickRestart({
  A: "~@21 f6@11", B: "c#6@11 [c6,f6]@10 [a#5,c#6]@11", C: "f6@11 d6@5 c#6@5 f6@5 ~ e6@5",
  D: "d#6@5 f6@5 ~ [c6,d6]@10 d6@5 ~ c#6@5", E: "f6@5 f6@5 ~ d6@5 c#6@5 f6@11", F: "g6@5 e6@5 ~ f6@10 d6@5 ~ f6@5",
  G: "~@11 f6@10 c#6@11", H: "[c6,f6]@11 c#6@10 f6@11", I: "d6@5 c#6@5 ~ f6@10 d#6@5 ~ d#6@5",
  J: "[d6,a6]@10 ~ d6@5 c#6@5 f6@5 ~ f6@5", K: "g6@5 c#6@5 ~ [c6,f6]@11 [g6,d7]@10",
  L: "f6@11 [a#5,c#6]@10 f6@5 ~ f6@5", M: "d6@5 f6@5 ~ f6@5 d#6@5 d6@5 ~ c#6@5",
  N: "[[f6,c7]@10 ~ g6@5 e6@5 [f6,a6]@21 ~ [a5,f6]@21]/2", // F5 F Dm
})).s("gm_string_ensemble_1").gain(0.24)

// chords · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note("<~@6 A B C D E F ~@3 G H I J K L M N ~@2>".pickRestart({
  A: "~@21 a5@11", B: "g5@11 ~@21", C: "a5@11 g5@5 g5@5 c6@5 ~ b5@5", D: "a#5@5 a5@5 ~@11 g5@5 ~ g5@5",
  E: "c6@5 a5@5 ~ a5@5 g5@5 a5@11", F: "a#5@5 a#5@5 ~ a5@10 f5@5 ~ a5@5", G: "~@11 a5@10 g5@11", H: "~@11 g5@10 a5@11",
  I: "g5@5 g5@5 ~ a5@10 a#5@5 ~ a5@5", J: "~@11 g5@5 g5@5 a5@5 ~ a5@5", K: "b5@5 f5@5 ~@22",
  L: "a5@11 ~@10 a5@5 ~ a5@5", M: "a5@5 a#5@5 ~ a5@5 a5@5 f5@5 ~ g5@5", N: "~@11 b5@5 a#5@5 ~@11",
})).s("gm_string_ensemble_1").gain(0.16)

// other · clarinet
const clarinet = note("<~ A B C D E F G H I@3 ~@3 J@2 K L M N O@3 ~>".pickRestart({
  A: "~@10 a3@10 [g3,a3] g3@7 ~ g3@2 a3, ~@14 f3 ~", B: "f3 c3@9 c#3 g3@7 ~ g3@2 a3@11, ~@9 f3 ~@6",
  C: "a#3@5 a3@3 e3 g3 f3@8 c4 c4@2 d4@3 c4 a3@3 a#3 c4 a3@2",
  D: "g3 f3@12 ~ c#4@3 d4@2 e4@2 g4@3 f4@2 f4@3 ~@2 g4, ~ a3 ~@28 e4@2",
  E: "f4@7 ~ g3@2 a3@7 c4 d4 g3@10 a3@2 g3, ~@7 f3@2 ~@23",
  F: "~ g3@4 ~ f3@9 ~ c3 d3 ~ g3@2 a3@7 c4 d4@3, a3@2 ~@4 g3 ~@11 f3@2 ~@12", G: "g3@7 f3@2 g3@2 a3 f3 c3@8 c#3 g3@10",
  H: "a3@10 a#3@5 ~ a3@3 e3@2 f3@7 c4 ~ c4@2, ~@21 g3 ~@10",
  I: "[d4@3 c4 a3@3 a#3 c4 a3 g3 f3@12 ~ c#4@4 ~ e4@2 g4@4 f4@2 f4@3 e4@2 g4 f4@7 f3@2 g3 a3@7 c4 d4 g3@10 a3@2 [g3,a3] g3@2 [g3,a3] f3@8 ~@10, ~@11 a3 ~@16 d4@2 ~@66]/3", // Gsus2
  J: "[~@5 c4 d4 f4 g4@2 a4@9 c4@2 d4@2 ~ g4@4 ~@3 a4@2 f4@2 c4@6 c#4@3 g4 g4@5 ~ g4@2 a4@7 c5 d5@3, ~@23 a4@2 ~@4 f4@2 ~@19 f4@2 ~@12, ~@30 g4@2 ~@13 a4 ~@18]/2",
  K: "a#4@4 [a4,a#4] a4@3 d4@2 g4 f4@6 c5 ~ c5@2 d5@3 c5 a4@3 a#4 ~ a4 g4, ~@29 c5@2 ~", // A#maj7
  L: "f4@12 ~ c#5@2 d5@2 ~ e5@2 g5@3 f5 f5@2 f5@3 ~@2 g5, ~@24 g5 ~@5 e5@2", M: "f5@8 f4 g4 a4@7 c5 d5@2 g4@11 ~",
  N: "~ c5 d5@4 f5 g5@2 a5 g5 f5@6 f4@2 g4@2 ~@7 c5 d5@2 ~, a4@2 ~@19 a4@9 ~@2",
  O: "[~ g4@8 a4 [g4,a4] f4@37 g4@2 a4@2 [g4,a4] f4@17 ~@26, f4@2 ~@9 g4 ~@41 g4 ~@42]/3", // Gsus2
})).s("gm_clarinet").gain(0.12)

// drums · kick
const kick = s("bd").struct("<~@6 A B A C D A@5 D B A C D B A C ~>".pickRestart({
  A: "x ~@8 x ~ x ~@8 x!2 ~@8 x ~", B: "x ~@8 x ~ x ~@8 x!2 ~@3 x ~@4 x ~", C: "x ~@3 x ~@4 x ~ x ~@8 x!2 ~@8 x ~",
  D: "x ~@8 x ~ x ~@2 x ~@5 x!2 ~@8 x ~",
})).gain(0.36)

// drums · rim
const rim = s("rim").struct("<~@6 [~@5 x ~@26] ~@4 [~ x] [~@5 x ~@10 x ~@10 x ~@4]!3 ~@8 [~ x] ~>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@6 A B C B D E ~@3 F B@7 E ~>".pickRestart({
  A: "~@12 x ~ x ~ x ~@10 x ~@4", B: "~@5 x ~@10 x ~@10 x ~@4", C: "~@5 x ~@10 x ~@10 x ~@2 x ~",
  D: "~@5 x ~@3 x ~@6 x ~@10 x ~@4", E: "~@5 x ~@17 x ~ x ~ x ~@4", F: "~@2 x ~ x!2 ~@3 x ~@6 x ~@10 x ~@4",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@6 A B C D E F G H G I J K L M N O P Q ~>".pickRestart({
  A: "x ~@3 x!2 ~@3 x ~ x!2 ~@3 x ~@4 x ~@3 x ~ x!2 ~ x ~",
  B: "x ~@3 x!2 ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x!2 ~@3 x ~ x!2 ~@3",
  C: "x ~@3 x!2 ~ x ~ x ~ x!2 ~@3 x ~ x ~ x!2 ~@3 x ~ x ~@4",
  D: "x ~ x ~ x!2 ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x!2 ~ x ~",
  E: "x ~@3 x!2 ~ x ~@3 x!2 ~ x ~ x ~ x ~ x!2 ~@3 x ~ x!2 ~ x ~",
  F: "x ~@3 x!2 ~ x ~ x ~ x ~@2 x ~ x ~@3 x!2 ~ x ~@3 x ~@4",
  G: "x ~@3 x!2 ~@3 x ~ x ~@2 x ~ x ~@3 x!2 ~@3 x ~ x ~@2 x ~",
  H: "x ~@3 x!2 ~@3 x ~ x ~@2 x ~ x ~@3 x!2 ~@3 x ~ x ~@4", I: "x ~@10 x ~@2 x ~ x ~ x ~ x!2 ~@3 x ~ x!2 ~ x ~",
  J: "x ~ x ~ x!2 ~ x ~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2 x ~",
  K: "x ~@4 x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x!2 ~@3 x ~ x!2 ~@3",
  L: "x ~ x ~ x!2 ~ x ~ x ~ x!2 ~ x ~ x ~ x ~ x!2 ~@3 x ~ x!2 ~ x ~",
  M: "x ~ x ~ x!2 ~ x ~@3 x ~@2 x ~ x ~ x ~ x!2 ~ x ~@3 x!2 ~ x ~",
  N: "x ~@3 x!2 ~ x ~ x ~ x!2 ~ x ~ x ~ x ~@2 x ~@3 x ~ x!2 ~ x ~",
  O: "x ~@3 x!2 ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x!2 ~ x ~ x ~ x!2 ~@3",
  P: "x ~ x ~ x!2 ~@3 x ~ x ~@4 x ~ x ~ x!2 ~@3 x ~ x!2 ~ x ~",
  Q: "x ~ x ~ x!2 ~ x ~ x ~ x ~@2 x ~ x ~@3 x!2 ~ x ~@3 x ~@4",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@6 A B C ~@2 B ~ B ~@2 A D ~ E A B F B ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@15 x", C: "~@7 x ~@6 x ~", D: "~@2 x ~@12 x", E: "~@9 x ~@15 x ~@6", F: "~@7 x ~@8",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@6 [~@21 x ~@10] ~@5 x ~@2 [~@11 x ~@20] ~@9>").gain(0.42)

stack(
  bass, bass_soft, piano, pad_warm, string_ensemble_1, string_ensemble_1_soft, clarinet, kick, rim, snare, hihat,
  open_hat, crash
)

More by Mariah Carey