Strudelify

Love In The First Degree

Alabama

KeyA♭ majorTempo100 bpm
0:00/0:00
// Love In The First Degree — Alabama
// 100 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 acoustic guitar steel (copy of ch 2 shamisen)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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.

// chords · shamisen
const shamisen = note(`<
  A@8 B C@6 D@8 E F G ~@3 H@2 I@6 J@8 K@2 E L E M E F G ~@3 N O P M O P M O P M O P M O P M O P M Q ~@5
>`.pickRestart({
  A: "[~@16 [eb4,ab4]@31 ~ [eb4,ab4]@15 ~ [db4,ab4]@15 ~ [db4,f4]@15 ~ ab4@15 ~ [db4,gb4]@15 c4, ~@15 c4@32 c4@16 ab3@16 ab3@16 [c4,eb4]@16 bb3@16 ~]/8", // Ab5 Db5 Db Gb5 Cm
  B: "[eb4,f4]@15 ab3", // Ebsus2
  C: "[[bb3,db4]@7 ~ [bb3,db4]@7 ~ [g4,bb4]@15 ~ [eb4,ab4]@15 ~ [eb4,f4]@15 ~ [db4,f4]@15 ~ [eb4,ab4]@15 bb3, ~@7 ab3@8 eb4@16 c4@16 c4@16 ab3@16 c4@16 ~]/6", // Bbm Gm Ab5 Ebsus2 Db Ab5
  D: "[db4@15 ~ [eb4,f4]@15 ~ [db4,f4]@15 ~ [bb3,db4]@7 ~@3 eb4@2 [eb4,g4,bb4]@2 [g4,bb4,eb5]@2 f4@16 [eb4,ab4]@16 f4@16 [ab4,db5,ab5]@8 [g4,eb5,g5]@8, gb4, ~@15 c4@16 bb3@16 ab3@8 eb4@3 ~@70, ~@14 [g4,bb4] ~@17]/8", // Ebsus2 Db Bbm Eb Ab5 Db5 Cm Gm
  E: "f4", F: "eb4", G: "[db4,bb4]@2 [eb4,c5] [f4,db5]@5", H: "[c4,ab4]",
  I: "[ab4@15 ~ [db4,ab4]@15 ~ [db4,f4]@15 ~ ab4@15 ~ db4@15 ~ [eb4,f4]@15 ab3, ~@15 ab3@16 ab3@16 [c4,eb4]@16 bb3@16 c4@16 ~]/6", // Db5 Db Ebsus2 Cm
  J: "[[bb3,db4]@7 ~ [bb3,db4]@7 ~ [g4,bb4]@15 ~ [eb4,ab4]@15 ~ [eb4,f4]@15 ~ [db4,f4]@15 ~ [eb4,ab4]@15 ~ db4@15 ~ [eb4,f4]@15 bb3, ~@7 ab3@8 eb4@16 c4@16 c4@16 ab3@16 c4@16 bb3@16 c4@16 ~]/8", // Bbm Gm Ab5 Ebsus2 Db Ab5 Ebsus2
  K: "[[db4,f4]@15 ~ [bb3,db4]@7 ~@3 eb4@2 [eb4,g4,bb4]@2 [g4,bb4,eb5]@2, ~@15 ab3@8 eb4@3 ~@6, ~@6 [g4,bb4] ~]/2", // Db Bbm Eb Gm
  L: "[eb4,ab4]", M: "[ab4,db5,ab5] [g4,eb5,g5]", N: "[c4,f4,c5] ~", O: "c4@3 c4@3 ~@2", P: "[db4,f4,ab4,db5] ab4",
  Q: "c4@3 ~@5",
})).s("gm_shamisen").gain(0.35)

// chords · shamisen · soft notes · Db Db5 Cm Db Db5 Cm
const shamisen_soft = note(`<
  ~@76
  [~@3 c4@3 ~@2]
  [[db4,f4,ab4,db5] ab4]
  [[ab4,db5,ab5] [g4,eb5,g5]]
  [c4@3 c4@3 ~@2]
  [[db4,f4,ab4,db5] ab4]
  [[ab4,db5,ab5] [g4,eb5,g5]]
>`).s("gm_shamisen").gain(0.12)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A@2 B C@2 D E F G H I J@2 K L M N O P Q P R S T U V W X B@3 C@2 D E F G H I J@2 K L M N O P Q P R S T U Y W X P Z P
  R Z P R Z P R Z P R Z P R Z P R AA ~@5
>`.pickRestart({
  A: "[ab2,eb3,ab3]/2", B: "[ab2,eb3,ab3]", C: "[ab2,db3,ab3]", D: "ab2@4 ab2 bb2 c3 eb3, [eb3,ab3]@5 ~@3",
  E: "[gb2,db3,gb3]", F: "[f2,c3,f3]", G: "[eb3,ab3,bb3,db4] [eb2,bb2]", H: "[eb3,g3,bb3,db4]@3 eb2 eb4 bb3 g3 eb3",
  I: "[ab2,eb3,ab3]@3 [ab2,eb3,ab3] [ab2,eb3,ab3]@4", J: "[ab2,db3,ab3]@3 [ab2,db3,ab3] [ab2,db3,ab3]@4",
  K: "[ab2,eb3,ab3]@3 ab2!2 bb2 c3 eb3, ~@3 ab3@5, ~@3 eb3@4 ~", L: "[gb2,db3,gb3]@5 gb2 db3 gb3",
  M: "[f2,c3,f3]@5 f2 c3 f3", N: "[bb2,f3]@3 bb2 [bb2,f3]@2 bb1@2", O: "[eb3,ab3,bb3,db4] eb2 [eb3,g3,bb3,db4]@2",
  P: "[db2,ab2]@3 [db2,ab2] [db2,ab2]@4", Q: "[ab2,eb3]@3 ab2 c4 ab3 eb3 ab2", R: "eb2 bb2 eb3 ab3 [eb3,bb3]@2 eb2@2",
  S: "[db2,ab2]@3 [db2,ab2] [db2,ab2]@2 db3@2", T: "[c3,ab3]@3 [c3,ab3] [c3,ab3]@2 c3@2",
  U: "[bb2,f3]@3 [bb2,f3] [bb2,f3]@2 bb1@2", V: "[f3,ab3,c4] eb2 [g3,bb3,db4]@2",
  W: "[db3,f3,ab3,db4]@3 db2 ab2 db3 ab3@2", X: "[eb3,g3,bb3,db4]", Y: "[f3,g3,bb3] eb2 [eb3,g3,bb3,db4]@2",
  Z: "[ab2,eb3]@3 [ab2,eb3] [ab2,eb3]@2 ab2@2", AA: "[ab2,eb3]@3 ~@5",
})).s("gm_acoustic_bass").gain(0.47)

// bass · acoustic bass · "Bass" · soft notes · Ab5 Db5 Eb5 Ab5 Db5 Eb5
const bass_soft = note(`<
  ~@76
  [~@3 [ab2,eb3] [ab2,eb3]@2 ab2@2]
  [[db2,ab2]@3 [db2,ab2] [db2,ab2]@4]
  [eb2 bb2 eb3 ab3 [eb3,bb3]@2 eb2@2]
  [[ab2,eb3]@3 [ab2,eb3] [ab2,eb3]@2 ab2@2]
  [[db2,ab2]@3 [db2,ab2] [db2,ab2]@4]
  [eb2 bb2 eb3 ab3 [eb3,bb3]@2 eb2@2]
>`).s("gm_acoustic_bass").gain(0.13)

// chords · shamisen
const shamisen_2 = note(`<
  ~@19 A B C D C E F G H I J ~@17 A B C D C E F G H I K@2 L G K L G K L G K L G K L G K L G M ~@5
>`.pickRestart({
  A: "[db4,f4]!3 [db4,f4]@2 [db4,f4]@2 [db4,f4], ab4 ~@3", // Db
  B: "[c4,eb4]!2 eb4!2 [c4,eb4] [ab3,c4] [eb3,g3] [c4,eb4], ab4 c4 ab4 ~", // Cm Ab Eb Cm
  C: "[db4,f4]!3 ~@2 [db4,f4]@2 [db4,f4], ab4@2 ~ [db4,f4]@2 ~@3, ~@2 ab4 ~", D: "[ab3,db4]!4 [g3,eb4]!4, ab4 ~ g4 ~",
  E: "[c4,eb4]!2 eb4!2 [c4,eb4]!2 eb4!2, ab4 c4 ab4 c4", F: "[db4,f4]!8, bb4 ~ bb4 ~",
  G: "[ab3,db4]!4 [eb4,g4]!2 g4!2, ab4 ~ bb4 eb4", H: "[db4,f4]!3 ~@2 [db4,f4]@3, ab4@2 ~ [db4,f4]@2 ~@3, ~@2 ab4 ~",
  I: "[eb4,g4,bb4]@3 ~", J: "[ab3,c4], eb4 ~@3", K: "[c4,f4]!2 f4!2 [c4,f4,c5]@2 [c4,f4]@2, c5 c4 ~@2",
  L: "~ [c4,eb4] eb4!2 [c4,eb4]!2 eb4!2, ~ c4 ab4 c4", M: "[c4,f4]!2 c4@2 ~@4, c5@2 f4 ~@5",
})).s("gm_shamisen").gain(0.18)

// chords · shamisen · soft notes · F5 Cm Db5 Eb F5 Cm Db5 Eb
const shamisen_soft_2 = note(`<
  ~@76
  [~@3 f4 [c4,f4,c5]@2 [c4,f4]@2]
  [~ [c4,eb4] eb4!2 [c4,eb4]!2 eb4!2, ~ c4 ab4 c4]
  [[ab3,db4]!4 [eb4,g4]!2 g4!2, ab4 ~ bb4 eb4]
  [[c4,f4]!2 f4!2 [c4,f4,c5]@2 [c4,f4]@2, c5 c4 ~@2]
  [~ [c4,eb4] eb4!2 [c4,eb4]!2 eb4!2, ~ c4 ab4 c4]
  [[ab3,db4]!4 [eb4,g4]!2 g4!2, ab4 ~ bb4 eb4]
>`).s("gm_shamisen").gain(0.06)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~@19 A B C D C E F G H I J ~@17 A B C D C E F G H I ~@25>".pickRestart({
  A: "[db3,f3]!3 [db3,f3]@2 [db3,f3]@2 [db3,f3], ab3 ~@3", // Db
  B: "[c3,eb3]!2 eb3!2 [c3,eb3] [ab2,c3] [eb2,g2] [c3,eb3], ab3 c3 ab3 ~", // Cm Ab Eb Cm
  C: "[db3,f3]!3 ~@2 [db3,f3]@2 [db3,f3], ab3@2 ~ [db3,f3]@2 ~@3, ~@2 ab3 ~", D: "[ab2,db3]!4 [g2,eb3]!4, ab3 ~ g3 ~",
  E: "[c3,eb3]!2 eb3!2 [c3,eb3]!2 eb3!2, ab3 c3 ab3 c3", F: "[db3,f3]!8, bb3 ~ bb3 ~",
  G: "[ab2,db3]!4 [eb3,g3]!2 g3!2, ab3 ~ bb3 eb3", H: "[db3,f3]!3 ~@2 [db3,f3]@3, ab3@2 ~ [db3,f3]@2 ~@3, ~@2 ab3 ~",
  I: "[eb3,g3,bb3]@3 ~", J: "[ab2,c3], eb3 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.03)

// drums · kick
const kick = s("bd").struct("<~ A@17 B C@8 D E C@2 A@15 B C@8 D E C@19 F ~@5>".pickRestart({
  A: "x!2", B: "x ~@3 x!3 ~", C: "x ~@2 x!2 ~@3", D: "x ~@3 x!2 ~@2", E: "x ~@2 x", F: "x",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@76 [~@3 x!2 ~@3] [x ~@2 x!2 ~@3]!5>").gain(0.13)

// drums · snare
const snare = s("sd").struct("<~ A@17 B A@8 C D A@17 B A@8 C D A@19 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@9 x!2", C: "~@4 x ~ x!2 ~@4 x ~ x ~", D: "~@3 x",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@76 [~ x ~ x]!6>").gain(0.13)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!27 [x ~@5 x!2] [x!8]!27 [x ~@5 x!2] [x!8]!19 [x!2 ~@6] ~@5>").gain(0.6)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@76 [~@2 x!6] [x!8]!5>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@18 [~@8 x ~ x ~ x ~ x!2] ~@27 [~@8 x ~ x ~ x ~ x!2] ~@35>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@28 [~@3 x] ~@27 [~@3 x] ~@25>").gain(0.47)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@17 A ~@7 B C A ~@17 A ~@7 B C A ~@3 A ~ A@2 ~@2 A ~ A@2 ~@2 A ~ A@2 ~@2 A ~ A
>`.pickRestart({
  A: "x", B: "~@4 x!2 ~@2", C: "x ~@2 x",
})).gain(0.47)

// drums · ride
const ride = s("rd").struct("<~@18 A ~@9 B ~@17 A ~@9 B ~@25>".pickRestart({
  A: "~@8 x ~ x ~ x ~ x!2", B: "x",
})).gain(0.6)

stack(
  shamisen, shamisen_soft, bass, bass_soft, shamisen_2, shamisen_soft_2, acoustic_guitar_steel, kick, kick_soft, snare,
  snare_soft, hihat, hihat_soft, low_tom, high_tom, crash, ride
)

More by Alabama