Strudelify

Fly

Sugar Ray

KeyA♭ majorTempo98 bpm
0:00/0:00
// Fly — Sugar Ray
// 98 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "guitar" electric guitar clean (copy of ch 2 "guitar" electric guitar muted)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · electric guitar muted · "guitar"
const electric_guitar_muted = note("<A B C ~ A B D ~@17 A B E ~@76>".pickRestart({
  A: "~@2 [c5,eb5]!2 [c5,eb5]@2 [bb4,db5]!2 [bb4,db5]@2 [ab4,c5]!2 [ab4,c5]@2 [e4,a4]!2", // Cm Bbm Ab A5
  B: "[e4,a4]@6 [eb4,ab4]!2 [eb4,ab4]@2 [db4,g4]@4 [c4,f4] [db4,g4]", C: "[eb4,ab4]", D: "[eb4,ab4] ~@7",
  E: "[eb4,ab4] [db4,g4] ~@6", // Ab5 Dbdim
})).s("gm_electric_guitar_muted").gain(0.64)

// chords · electric guitar muted · "guitar" · soft notes
const electric_guitar_muted_2 = note("<~@6 A@2 ~@18 B ~@76>".pickRestart({
  A: "[~@2 [db4,g4]@2 [c4,f4] [db4,g4] [c4,f4] [c4,eb4]@2 c4@9 ~@14, ~@9 eb4@7 ~@16]/2", // Dbdim F5 Dbdim F5 Cm
  B: "~@4 [c4,f4] [db4,g4] [c4,f4] [c4,eb4]@2 [c4,eb4]@7", // F5 Dbdim F5 Cm
})).s("gm_electric_guitar_muted").gain(0.4)

// chords · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~@16 A B A B A B A B ~@12 A B A B A B A B ~@2 A B ~@2 A B ~@21 A B A B A B A B ~@2 A B ~@2 A B C@4 A B A B A B A B ~@2
>`.pickRestart({
  A: "[ab3,eb4,ab4]@2 ~ [ab3,eb4,ab4]@2 ~ [f3,c4,f4]@2 ~@2 [c4,f4] ~ [f3,c4,f4] [f3,c4,f4]@2 ~", // Ab5 F5
  B: "[ab3,eb4,ab4]@2 ~ [ab3,eb4,ab4]@2 ~ [f3,c4,f4]@2 ~@4 [f3,c4,f4] [f3,c4,f4]@2 ~", C: "~ eb4 c4@2 ab4 eb4@3",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// other · lead 7 fifths · "fifths"
const lead_7_fifths = note("<~@46 A@2 ~@2 A@2 ~@31 A@2 ~@2 A@2 ~@10 A B ~@2>".pickRestart({
  A: "ab3@3 ab3!2 ~ f3@3 ~ f3@2 f3!4", B: "ab3@3 ab3!2 ~ f3@3 ~ f3@2 f3!3 ~",
})).s("gm_lead_7_fifths").gain(0.24)

// bass · slap bass 1 · "bass"
const bass = note("<A@44 B C A@2 B C A@2 D E F E F E F E ~@9 A@12 B C A@2 B C A@14 ~@2>".pickRestart({
  A: "ab1!2 c2 db2@5", B: "eb2 eb2@4 eb1 eb2 eb1", C: "db2 db2@4 db1 db2 db1",
  D: "ab1@2 ab1 ab1@2 ab1 ab1@2 ab1 ab1@2 ab1 ab1@2 bb1!2, ~@7 c2",
  E: "ab1@2 ab1 ab1@2 ab1 ab1@2 ab1 ab1@2 ab1 ab1@2 bb1!2, ~@7 eb2",
  F: "ab1@2 ab1 ab1@2 ab1 ab1@2 ab1 ab1@2 ab1 ab1@2 bb1!2, ~@7 db2",
})).s("gm_slap_bass_1").gain(0.64)

// other · pad sweep · "synth"
const pad_sweep = note("<A@44 B@3 A B@3 A ~@13 A@16 B@3 A B@3 A C@4 A@8 ~@2>".pickRestart({
  A: "ab4@3 f4@5", B: "[~@16 ab4@3 f4@5, eb4 db4 ~, ~@3 eb5@6 ~@2 db5@6 ~@7]/3", C: "~ eb4 c4@2 ab4 eb4@3",
})).s("gm_pad_sweep").gain(0.25)

// other · clavinet · "supercat"
const clavinet = note(`<
  ~@2 A@2 ~@2 A@2 ~@7 B ~ C ~@3 D ~@3 E F G ~@9 H ~@3 H ~@3 I ~@3 I J@2 ~@6 K L M@2 ~@6 N ~@3 O ~ H ~@3 H ~@10 H P@3 ~
  J@2 Q ~ J Q I R S
>`.pickRestart({
  A: "~@2 c4!2 bb3 ab3@2 ab3 f3@2 ~@6", B: "~@11 eb4 db4@2 c4@2", C: "~ eb4!3 ~ eb4!3 db4@2 ~@6",
  D: "~ eb4!3 ~ eb4!6 eb4@2 ~@3", E: "~@7 c4", F: "~@2 c4!2 bb3 ab3@2 ab3 f3@2 ab3@2 bb3@2 ~ bb3",
  G: "c4@2 c4!2 bb3 ab3@2 ab3 f3@2 ~@6", H: "~@2 b3 c4 b3 c4 b3 c4!2 ~ c4 ~ c4 ~@3",
  I: "~@2 c4!2 bb3 ab3@3 ab3 f3@2 ~@5", J: "~@2 c4!10 c4@2 ~@2", K: "~@10 bb3@2 bb3 bb3@2 bb3", L: "c4 ~@7",
  M: "[~@4 db5@4 eb5@2 e5@2 eb5 db5 c5@6 ~@12]/2", N: "~@9 c4!2 c4@2 ~@3", O: "~@5 ab3 c4 ab3",
  P: "~@2 ab3!6 bb3!6 c4@2", Q: "bb3@2 c4!10 c4@2 ~@2", R: "c5@10 c5@2 bb4@2 ab4 bb4", S: "ab4 ~@7",
})).s("gm_clavinet").gain(0.64)

// chords · distortion guitar · "guitar" · Ab5
const distortion_guitar = note(`<
  ~@52
  [[ab2,eb3,ab3]!4 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]!5 [ab2,eb3,ab3]@2 ~ [ab2,eb3,ab3]]!8
  ~@43
>`).s("gm_distortion_guitar").gain(0.54)

// chords · distortion guitar · "guitar" · Ab5
const distortion_guitar_2 = note(`<
  ~@52
  [[eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@2 ~@2]!3
  [[eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@4 ~@2 [eb4,ab4]@2 ~@2]
  [[eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@2 ~@2]!3
  [[eb4,ab4]@2 ~ [eb4,ab4]@2 ~ [eb4,ab4]@4 ~@2 [eb4,ab4]@2 ~@2]
  ~@43
>`).s("gm_distortion_guitar").gain(0.37)

// chords · orchestral harp · "harp"
const orchestral_harp = note("<~@60 A@2 ~@41>".pickRestart({
  A: "[~@5 db6@3 ~@2 [e5,b5,e6]@2 [eb5,bb5,eb6] [db5,ab5,db6] [c5,g5,c6]@5 ~@13, [e5,b5] [eb5,bb5] [db5,ab5]@2 [eb5,bb5] ~@11, ~ e6@2 eb6@2 ~@4 eb6@2 ~@21]/2", // E5 Eb5 Db5 C5 E5 Eb5 Db5 Eb5
})).s("gm_orchestral_harp").gain(0.05)

// drums · rim
const rim = s("rim").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@9 B@12 ~@11 A ~@15 A ~@2
>`.pickRestart({
  A: "~@5 x!3", B: "x ~ x ~ x ~ x!5 ~ x ~ x ~",
})).gain(0.64)

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

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!60 ~ [~ x ~ x]!40 x ~>").gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@64 [~@4 x!2 ~@6 x!2 ~@2] ~@7 [~@4 x!2 ~@6 x!2 ~@2] ~@30>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@64 [x!2 ~@2 x!2 ~@2] ~@7 [x!2 ~@2 x!2 ~@2] ~@30>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!53 [~ x!7]!7 ~ [x!8]!40 x ~>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@52 A@8 ~@4 B ~@7 B ~@28 C ~>".pickRestart({
  A: "x!8", B: "~@5 x ~@2", C: "x",
})).gain(0.64)

stack(
  electric_guitar_muted, electric_guitar_muted_2, acoustic_guitar_steel, lead_7_fifths, bass, pad_sweep, clavinet,
  distortion_guitar, distortion_guitar_2, orchestral_harp, rim, kick, snare, clap, low_tom, hihat, open_hat
)

More by Sugar Ray