Strudelify
Sent From Up Above cover art

1990 · Mariah Carey

Sent From Up Above

Mariah Carey

KeyA minorTempo103 bpm
0:00/0:00
// Sent From Up Above — Mariah Carey
// 103 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 10 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(103/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, A@4 for four bars: edit a riff to change every repeat.

// chords · sitar
const sitar = note(`<
  A B C@2 D E F@3 ~@15 A B C@2 D E F@3 ~@15 A B C@2 D E F@3 A B C@2 D E F@3 ~@9 A B C@2 D E G@3 B C@2 D E G@3 B C@2 D E
  F@3 ~
>`.pickRestart({
  A: "~@4 a4 b4 c5 d5", B: "[c5,e5]@5 ~@5 c5@2 ~ d5@2 ~",
  C: "[[d4,g4,b4]@5 ~@3 [b4,d5]@4 a5 ~@3 c5@11 ~@5, ~@8 g5@3 ~@3 e5@16 ~@2]/2", D: "~@8 a4 ~ b4 ~ c5 ~ d5 ~",
  E: "[c5,e5]@5 ~@5 c5@2 ~ d5@2 ~, d5 ~@15", // C
  F: "[[g4,b4]@5 ~@3 e4@3 ~ g4 ~@3 a4@4 a4@16 ~@12, d4@11 ~@3 g4@5 ~@29, ~@16 [c4,e4]@27 ~@5]/3", // G C
  G: "[[g4,b4]@5 ~@3 e4@3 ~ g4 ~@3 a4@4 a4@16 ~@4 a4@2 b4@2 c5@2 d5@2, d4@11 ~@3 g4@5 ~@29, ~@16 [c4,e4]@27 ~@5]/3", // G C
})).s("gm_sitar").gain(0.6)

// chords · acoustic guitar steel · "guitar 2"
const acoustic_guitar_steel = note(`<
  ~ A B C D E B F G H I J K L M N O H I J P L M Q O A B C D E B F G H I J K L M N O H I J P L M Q O A B C D E B F G O A
  B C D E B F G ~@9 O A B C D E B F R A B C D E B F R A B C D E B F G ~
>`.pickRestart({
  A: "[f4,a4,c5]@2 ~ [f4,a4] [f4,a4,c5]@2 c4!2 [f4,a4,c5]@2 ~ [f4,a4] [f4,a4,c5]@3 ~", // F
  B: "[e4,g4,b4]@2 ~ [e4,g4] [e4,g4,b4]@3 ~ [e4,g4,b4]@2 ~ [e4,g4] [e4,g4,b4]@3 ~", // Em
  C: "[e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@2 [e4,a4,c5] ~ [e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@2 [e4,a4,c5] ~", // Am
  D: "[e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@3 ~ [e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@2 [a4,c5] ~", // Am
  E: "[d4,f4,a4]@2 ~ [d4,f4,a4]!5 [d4,f4,a4]@2 ~ [d4,f4,a4] [d4,f4,a4]@3 ~", // Dm
  F: "[e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@3 ~ [e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@2 [e4,a4,c5] ~", // Am
  G: "[e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@3 ~ [e4,a4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@3 ~", // Am
  H: "[e4,g4,c5]!3 ~@2 [e4,g4,c5]!4 ~@3 [e4,g4,c5]!3 ~", I: "~ [e4,g4,c5]!4 ~@3 [e4,g4,c5]!3 ~@2 [e4,g4,c5]!3",
  J: "[d4,f#4,a4] ~@3 [d4,f#4,a4]!3 ~@2 [d4,f#4,a4]!4 ~@3", K: "[d4,f#4,a4]!3 ~@2 [d4,f#4,a4]!3 [d4,f#4,a4]@2 ~@6",
  L: "[d4,f4,a4]!3 ~@2 [d4,f4,a4]!4 ~@3 [d4,f4,a4]!3 ~", M: "~ [c4,f4,a4]!4 ~@3 [c4,f4,a4]!2 [f4,a4]@2 ~ [c4,f4,a4]!3",
  N: "[c4,f4,b4] ~@3 [c4,f4,b4] ~ [f4,b4] ~@2 [c4,f4,b4]!4 ~@3, ~@5 [c4,f4]@2 ~@9", // F Fdim F F5
  O: "[e4,g#4,b4]!2 [e4,g#4,b4]@2 ~ [e4,g#4,b4]!4 ~@7", P: "[d4,f#4,a4]!3 ~@2 [d4,f#4,a4]!4 ~@7",
  Q: "[c4,f4,b4]@2 ~@2 [c4,f4,b4] [c4,f4] [f4,b4] ~@2 [c4,f4,b4]!4 ~@3", // F F5 Fdim F
  R: "[e4,g#4,a4,b4,c5] [e4,g#4,b4]!2 [e4,a4,c5] e4 [e4,g#4,b4]!3 [e4,g#4,a4,b4,c5]@2 ~ [e4,a4,c5] [e4,a4,c5]@3 ~, ~@4 [a4,c5]@3 ~@9", // E Am E Am
})).s("gm_acoustic_guitar_steel").gain(0.3)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~ A B C@2 D B E@2 F G H I J K L M F G H I J K L N O P Q R S T Q U F G H I J K L M F G H I J K L N O P Q R S T Q U N O
  P Q R S T Q U Q V ~@4 W X F N O P Q R S T Q Y O P Q R S T Q Y O P Q R S T Q U ~
>`.pickRestart({
  A: "f2@11 ~@5", B: "e2@11 ~@5", C: "a2@11 ~@5", D: "d2@11 ~@5", E: "[a2@27 ~@3 g2 ~, ~@27 a2@5]/2",
  F: "a2@3 ~ a2@2 ~ g2 a2@2 g2 ~ a2 ~ c3 ~", G: "a2@3 ~ a2@2 ~ a2 e3@3 ~ d3 c3 a2 g2",
  H: "a2@3 ~ g2@2 ~ g2 a2 ~ g2 ~ a2 ~ c3 ~", I: "a2@3 ~ a2@2 ~ g2 a2@2 ~ g2 a2@2 g2 e2",
  J: "d2@3 ~ d2@2 ~ c2 d2@4 ~@2 d2 e2", K: "f2@3 ~ f2@2 ~ e2 f2 ~ f2@3 ~ f2 ~",
  L: "e2@3 ~ e2@2 ~ d2 e2 ~ d2 ~ e2 ~ d2 ~", M: "e2@3 ~ e2@2 ~ d2 e2@3 ~@2 g#2@2 ~", N: "e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~",
  O: "f2@3 ~ f2@2 ~ e2 f2@3 ~@3 f2 ~", P: "e2@3 ~ e2@2 ~ d2 e2 ~ d2 ~ e2 ~ g2 ~",
  Q: "a2@3 ~ a2@2 ~ g2 a2 ~ g2 ~ a2 ~ g2 ~", R: "a2@3 ~ a2@2 ~ g2 a2 ~ g2 a2@2 ~ a2 ~",
  S: "d2@3 ~ d2@2 ~ c2 d2 ~ d2@3 ~ d2!2", T: "e2@3 ~ e2@2 ~ d2 e2 ~ e2@3 ~ e2 g2",
  U: "a2@3 ~ a2@2 ~ g2 a2 ~ g2 a2 ~ c3 d3 e3", V: "a2@3 ~ a2@2 ~ g2 a2 ~ g2 a2 ~ c2 d2 e2",
  W: "d2@3 ~ d2@2 ~ c2 d2 ~@5 d2!2", X: "e2@3 ~ e2@2 ~ e2 ~@2 e2 ~@3 g2 ~",
  Y: "[e2,a2]@3 ~ [e2,a2]@3 g2 e2@2 g2 a2 ~ c3 d3 e3, ~@8 a2 ~@3 e2@3 ~", // A5
})).s("gm_electric_bass_finger").gain(0.71)

// chords · pad warm · "sinth"
const pad_warm = note(`<
  ~ A B C@2 D B C@2 ~@16 A B C@2 D B C@2 ~@16 A B C@2 D B C@2 ~ A B C@2 D B C@2 ~@10 A B C@2 D B C@2 A B C@2 D B C@2 A B
  C@2 D B C@2 ~
>`.pickRestart({
  A: "[f4,a4,c5]", B: "[e4,g4,b4]", C: "[e4,a4,c5]", D: "[f4,a4,d5]",
})).s("gm_pad_warm").gain(0.3)

// chords · synth strings 1 · "sinth 2"
const synth_strings_1 = note(`<
  ~ A B C@2 A D E@2 ~@16 A B C@2 A D E@2 ~@16 A B C@2 A D E@2 ~ A B C@2 A D E@2 ~@10 A B C@2 A D E@2 A B C@2 A D E@2 A B
  C@2 A D E@2 ~
>`.pickRestart({
  A: "[a3,c4,f4]", B: "[b3,e4,g4]", C: "[c4,e4,a4]", D: "[g3,b3,e4]", E: "[a3,c4,e4]",
})).s("gm_synth_strings_1").gain(0.45).pan(0.6)

// chords · piano · "keyboard"
const piano = note(`<
  ~@9 A@2 B@2 C@2 D E A@2 B@2 C@2 D F ~@8 A@2 B@2 C@2 D E A@2 B@2 C@2 D F ~@8 F ~@12 G@2 ~@3 F ~@7 F ~@7 F ~@9
>`.pickRestart({
  A: "[g4@3 e4]/2", B: "[[f#4,a4]@24 ~@2 d#4@3 ~@3]/2", C: "[[f4,a4,c5]@8 ~@6 [f4,a4,c5]@4 [c4,e4,a4]@11 ~@3]/2",
  D: "d4@11 ~@5", E: "[d4,g#4]@5 ~@5 a4@2 ~ c5@2 ~", F: "[d4,g#4]@5 ~@11",
  G: "[g4 ~ a4 ~ g4 e4 [e4,a4,c#5] ~ g4 ~ a4 ~ a4 ~ g4 a4@2 ~ c5@3 ~ [e4,a4,c#5] ~@3 [e4,a4,c#5] ~ [e4,a4,c#5]@3 ~]/2", // A
})).s("gm_piano").gain(0.38)

// drums · kick
const kick = s("bd").struct("<~@9 A@23 ~ A@23 ~ A@8 ~ A@33 ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3",
})).gain(0.66)

// drums · snare
const snare = s("sd").struct("<~@8 A B@23 A B@23 A B@8 A B@17 A B@7 A B@7 A ~>".pickRestart({
  A: "x!16", B: "~ x ~@3 x ~@2",
})).gain(0.66)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!5 ~ x!4 ~@6]!68 ~@4 [x!5 ~ x!4 ~@6]!28 ~>").gain(0.66)

// drums · open hat
const open_hat = s("oh").struct("<A B@6 C B C@23 B C@23 B C@8 B C@2 B@4 C@27 B ~>".pickRestart({
  A: "~@5 x ~@6 x ~@3", B: "~@3 x", C: "~ x ~ x",
})).gain(0.66)

stack(sitar, acoustic_guitar_steel, bass, pad_warm, synth_strings_1, piano, kick, snare, pedal_hat, open_hat)

More by Mariah Carey