Strudelify

Sittin' Up in My Room

Brandy

KeyF♯ majorTempo93 bpm
0:00/0:00
// Sittin' Up in My Room — Brandy
// 93 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~ A B C B C B C B C D E F G H I J K L M N O P Q R S T U V W X U Y Z AA E F G H I J K L M N O P Q R S T U V W X U Y Z B
  C B C B C B C AB AC AD AE AF AG AH AI AJ U V W X U AK Z AL U V W X U AK Z AL U AK
>`.pickRestart({
  A: "a#4@3 ~ [d#4,a#4]@3 ~, d#5@7 ~", // D#5
  B: "[a#3,c#4,d#4,f4]@2 [c#4,d#4,f4,g#4]@2 [d#4,f4,f#4,a#4]@2 ~@2 g#4@3 ~ f#4@2 [a#3,c#4,d#4]@2", // A#m C# D#m D#7
  C: "[a#3,c#4,d#4,f4]@2 [c#4,d#4,f4,g#4]@2 [d#4,f4,f#4,a#4]@2 ~@2 g#4@3 ~ f#4@2 ~@2", D: "~@4 g#3!3 a#3",
  E: "a#3@3 ~@5 g#3@2 g#3@2 g#3@2 g#3@2", F: "g3@3 ~@5 g#3@2 g#3@2 g#3@2 a#3@2", G: "a#3 ~ d#4 ~ c#4 a#3 g#3 f#3",
  H: "a#3 ~ [d#4,a#4] ~ [g#3,d#4,g#4] g#3!2 a#3", I: "a#3 ~ [d#4,a#4] ~ [g#3,c#4,g#4] g#3!3",
  J: "g3 ~ [d#4,a#4] ~ [g#3,c#4,g#4] g#3!2 a#3", K: "a#3 ~ [d#4,a#4] d#4 [c#4,g#4] [a#3,d#4] g#3 [f#3,a#3]",
  L: "a#3 g#3 f#3@2 ~@4 [f#3,a#3,d#4]@2 c#4@2 [f#3,a#3]@2 c#4@2", M: "[f3,g#3,c#4]@5 ~@2 f#3 a#3@2 a#3@2 b3@2 c#4@2",
  N: "[a#3,b3,d#4,f#4]@3 ~@3 f#4@2 [b3,d#4,f#4,g#4]@2 g#4@2 [b3,d#4,f#4,g#4]@2 a#4@2", // Bmaj7 G#m7
  O: "[g#3,c#4,d#4]@3 ~ b4@2 a#4@2 g#4@2 f#4@2 f#4@2 f#4@2", // G#sus4
  P: "g#4 f#4 d#4@2 ~@2 f#3@2 [b3,d#4,f#4]@2 f4@2 [b3,d#4]@2 f4@2, [b3,d#4]@3 ~@13", // B
  Q: "[f3,g#3,c#4]@3 ~@3 f#3@2 a#3@2 a#3@2 [a#3,b3]@2 c#4@2", // C# Bmaj7
  R: "[c#4,d#4,f#4]@3 ~ b4@2 a#4@2 [c#4,d#4,g#4]@3 ~ f#4@2 ~@2", // D#m7 C#sus2
  S: "[b3,d#4,f#4,b4]@3 ~ [b3,d#4,f#4,a#4]@3 ~@3 [b3,d#4,f#4,g#4]@3 [b3,d#4,f#4]@2 ~", // B Bmaj7 G#m7 B
  T: "~ d#4 ~@6 a#3@2 a#3@2 b3@2 c#4@2, [a#3,c#4,f#4] ~@7", U: "[a#3,c#4,d#4,f#4]@3 ~@5 a#3@2 a#3@2 b3@2 c#4@2",
  V: "[b3,d#4,f#4,a#4]@3 ~@7 f#4@2 [b3,d#4,f#4]@2 a#4@2", // Bmaj7 B
  W: "[b3,d#4,f#4,a#4]@2 ~@2 b4@2 a#4@2 [b3,d#4,g#4]@2 ~@2 [b3,d#4,f#4]@3 ~", // Bmaj7 G#m B
  X: "~ d#4 c#4@5 ~ [f#3,a#3]@2 a#3@2 [f#3,b3]@2 c#4@2, [a#3,c#4,f#4] ~@7", // F# B5 F#
  Y: "[c#4,f#4,a#4]@2 [d#4,g#4] [c#4,f#4,a#4] ~@6 f#4@2 [b3,d#4,f#4]@2 a#4@2", // F# G#5 F# B
  Z: "[d4,f#4,a#4]@2 ~@2 b4@2 a#4@2 [b3,d4,g#4]@3 ~ [a#3,d4,f#4]@3 ~", AA: "d#4 c#4 a#3@2 ~@4 g#3@2 g#3@2 g#3@2 a#3@2",
  AB: "[f#3,a#3,b3,d#4,f#4]@3 ~ [b3,d#4,a#4] g#4 [b3,d#4,f#4] g#4", AC: "[g#3,c#4,f4,g#4]@3 ~@5 b4@2 a#4@2 g#4@2 f4@2",
  AD: "g#4 f#4 d#4@2 ~@2 f#4@2 [b3,d#4,a#4]@2 a#4@2 [b3,d#4,a#4]@2 a#4@2, [b3,d#4]@3 ~@13", // Bmaj7 B
  AE: "[g#3,c#4,f4,g#4]@3 ~ b4@2 a#4@2 [c#4,d#4,g#4]@2 f#4@2 [c#4,d#4,f#4]@2 f#4@2", // C# C#sus2 D#m7
  AF: "g#4 f#4 d#4@2 ~@3 d#4 [b3,f#4]@2 f#4@2 [b3,d#4,f#4]@2 f#4@2, [b3,d#4]@3 ~@13", // B5 B
  AG: "[b3,f4,g#4,b4]@3 ~@3 g#4@2 [c#4,f#4]@2 f#4@2 [f#4,c#5]@2 c#5@2", // Fdim F#5
  AH: "[b3,d#4,f#4,a#4]@2 g#4@2 [b3,d#4,g#4]@2 f#4@2 [a#3,c#4,g#4]@3 ~ [a#3,c#4,f#4]@3 ~", // Bmaj7 G#m A#m7 F#
  AI: "~@2 [d#4,f#4,b4,d#5]@3 [d#4,f#4,c#5]@2 ~ [b3,d#4,f#4,b4]@3 ~ [d#4,f#4,a#4]@2 d#5@2", // B D#m7 B D#m
  AJ: "g#4 f#4 d#4 f#4@4 ~ a#3@2 a#3@2 b3@2 c#4@2, [a#3,c#4]@3 ~@13", // A#m
  AK: "[c#4,f#4,a#4]@2 [d#4,g#4] [c#4,f#4,a#4] ~@6 f#4@2 f#4@2 a#4@2", AL: "[a#3,c#4,d#4]@3 ~@5 a#3@2 a#3@2 b3@2 c#4@2",
})).s("gm_acoustic_guitar_steel").gain(0.36).pan(0.9)

// bass · slap bass 2 · "bass"
const bass = note(`<
  A B C@16 D E@2 F G E H I J K L M J K L N C@8 D E@2 F G E H O J K L M J K L N C P@2 Q P Q P R S T@2 U T V H W J X L Y J
  K L Z J X L Y J K L Z J X L
>`.pickRestart({
  A: "c#2@2 d#2@2 d#3@2 ~ c#3 ~@2 d#2@2 d#2@2 c#2@2", B: "c#2@2 d#2@2 d#3@2 ~ c#3 ~@8",
  C: "c#2@2 d#2@2 d#3@2 ~ c#3 ~@2 [f#1,f#2]@4 [g#1,g#2]@2", D: "[g#1,g#2,b2,d#3]@3 ~@3 g#2@2 ~@2 f#2@4 g#2@2",
  E: "d#2@3 ~@3 d#3@2 ~@2 f#2@4 g#2@2", F: "d#2 ~@4 a#2@2 c#3", G: "d#2 ~@2 d#3 ~ f#2@2 g#2",
  H: "[g#2,f#3]@3 g#2 [a#2,g#3]@3 a#2", I: "a2@3 ~@5 c#2@3 ~ c#2@3 ~", J: "f#2@2 ~@4 f#3@2 ~@2 f#2@3 ~ f#3@2",
  K: "d#2@2 ~@4 d#3@2 ~@2 d#2@3 ~ f#3@2", L: "g#1@2 ~@4 g#2@2 ~@2 g#1@3 ~ g#2@2", M: "c#2@2 ~@8 c#2@3 ~ c#3@2",
  N: "a#2 ~@2 a#1@2 a#1 a#2 a#1", O: "g#2@3 ~@5 c#2@3 ~ c#2@3 ~",
  P: "c#2@2 d#2@2 d#3@2 ~ c#3 ~@2 [f#1,d#2]@3 ~ [f#1,f#2]@2", Q: "c#2@2 d#2@2 d#3@2 ~ c#3 ~@2 a#1@3 ~ c#2@2",
  R: "[f#1,d#2]@3 ~ a#1@3 ~ g#1@3 ~ f#1@3 ~", S: "g#1@2 ~@4 g#2@2 ~@2 f#2@3 ~ g#2@2",
  T: "d#2@2 ~@4 d#3@2 ~@2 f#2@3 ~ g#2@2", U: "d#2@2 ~@4 d#3@2 ~@2 a#1@3 ~ c#2@2",
  V: "d#2@2 ~@4 d#3@2 ~@2 f#2@3 ~ a#2@2", W: "a2@6 ~@2 c#2@3 ~ c#2@3 ~", X: "d#2@2 ~@4 d#3@2 ~@2 d#2@3 ~ d#3@2",
  Y: "c#2 ~@4 c#2 c#3 c#2", Z: "a#1 ~@2 a#1@2 a#1 a#2 a#1",
})).s("gm_slap_bass_2").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@3
  [x ~@4 x ~ x]!21
  [x ~@2 x!2 ~@2 x]
  [x ~@4 x ~ x]!23
  [x ~@2 x!2 ~@2 x]
  [x ~@4 x ~ x]!23
  [x ~@2 x!2 ~@2 x]
  [x ~@4 x ~ x]!20
>`).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@3 [~ x ~ x]!90>").gain(0.41)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@3 [x!8]!90>").gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [x ~@4 x ~ x]!90>").gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 [x!8]!90>").gain(0.41)

stack(acoustic_guitar_steel, bass, kick, clap, pedal_hat, mid_tom, tambourine)

More by Brandy