Strudelify
KeyE♭ majorTempo75 bpm
0:00/0:00
// Misty — Johnny Mathis
// 75 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 69 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(75/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.

// other · string ensemble 1 · "STRING MELODY"
const string_ensemble_1 = note(`<
  ~@3 A B C D E F G H@2 B C D E F G I@2 J@2 K@2 L@2 M@2 B C D E F G N@2 ~@15 O J@2 K@2 L@2 M@2 B C D E F G P@3
>`.pickRestart({
  A: "~@4 [bb4,bb5] [g4,g5]", B: "[d4,d5]@10 [bb3,bb4] [c4,c5]",
  C: "[db4,db5]@2 [c5,c6]@2 [c5,c6] [eb5,eb6] [c5,c6]@2 [bb4,bb5]@2 [g4,g5] [eb4,eb5]", // Db C Eb C Bb G Eb
  D: "[c4,c5]@7 [ab3,ab4] [bb3,bb4] [c4,c5] [eb4,eb5] [g4,g5]", // C Ab Bb C Eb G
  E: "[bb4,bb5]@2 [bb4,bb5]@2 [bb4,bb5] [ab4,ab5] [bb4,bb5]@4 [ab4,ab5]@2", // Bb Ab Bb Ab
  F: "[g4,g5]@4 [ab4,ab5] [bb4,bb5] [eb4,eb5]@4 [f4,f5] [g4,g5]", // G Ab Bb Eb F G
  G: "[ab4,ab5]@4 [c4,c5]@5 [bb3,bb4]@3 [d4,d5]@4 [eb4,eb5]@4 [f4,f5]@4", H: "[[g4,g5]@9 ~ [bb4,bb5] [g4,g5]]/2",
  I: "[[eb4,eb5]@7 [eb4,eb5] [f4,f5] [g4,g5] [bb4,bb5] [c5,c6]]/2", // Eb F G Bb C
  J: "[[db5,db6]@4 [db5,db6]@4 [db5,db6]@2 [eb5,eb6]@2 [db5,db6]@18 [db5,db6]@3 [eb5,eb6]@3 [e5,e6]@4 [eb5,eb6]@4 [db5,db6]@4]/2", // Db Eb Db Eb E Eb Db
  K: "[[c5,c6]@4 [db5,db6] [eb5,eb6] [c5,c6]@7 ~ [eb4,eb5]@2 [f4,f5]@2 [ab4,ab5]@2 [bb4,bb5]@2 [c5,c6]@2]/2", // C Db Eb C Eb F Ab Bb …
  L: "[[d5,d6]@4 [d5,d6]@4 [d5,d6]@2 [c5,c6]@2 [d5,d6]@14 ~ [d5,d6]@3 [d5,d6]@3 [c5,c6]@3 [f5,f6]@4 [d5,d6]@4 [c5,c6]@4]/2", // D C D C F D C
  M: "[[bb4,bb5]@9 ~ [bb4,bb5] [g4,g5]]/2", N: "[[eb4,eb5]@3 ~]/2", O: "~ [eb4,eb5] [f4,f5] [g4,g5] [bb4,bb5] [c5,c6]",
  P: "[[eb4,eb5]@49 ~@23]/3", // Eb
})).s("gm_string_ensemble_1").gain(0.08)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  A B C D E F G H I J K L M F N O I P Q R S T U@2 V W X Y M Z N AA I AB AC AD E F G H I J K L M F N O I P Q R S T U@2 V
  W X Y M Z N AE I AB AF@3
>`.pickRestart({
  A: "~ bb4!5 bb4@2, [eb2,bb2,g3,eb4,g4]", B: "~ bb4 db5 bb4 bb4@4, [e2,b2,ab3,d4,gb4]",
  C: "~ bb4!4 d4 d4@2, [eb2,bb2,g3,c4,f4] [g2,f3,bb3]", // Cm7 Gm7
  D: "c4@3 g4@3 f4@3 c4@2 ~ [bb2,d3]@6 [bb2,ab3,c4,d4]@6, ab3@3 ~, [f2,eb3]@11 bb3@7 ~@6", // Bb Bb7 F7
  E: "eb2 bb2 eb3 bb2 ~@2 bb3 ~, [g3,bb3,d4]@3 ~, ~ eb2", F: "[bb2,f3,ab3,db4] [eb2,bb2,eb3,db4,eb4]",
  G: "~ bb3 g3 ~ f3@4, c4 ~, eb3@3 eb3@5", H: "[ab2,eb3,b3,eb4]@4 db2 ab2 db3@2, ~ [c4,eb4,f4]",
  I: "eb2 bb2 g3@2 c2 g2 eb3@2, [d4,f4] c4", J: "[f2,c3,ab3,eb4]@2 [bb2,ab3] bb1, ~ [b3,d4]",
  K: "~ g2 ~ c2, [f3,b3,db4] [e3,bb3,c4]", L: "~ f2 [d3,ab3,bb3] [bb2,ab3,c4,d4], [eb3,a3,b3] ~",
  M: "eb2 bb2 eb3 bb2 eb2@4, [g3,bb3,d4]@3 ~", N: "~ bb3 g3 eb3 f3@4, ab2, c4 ~",
  O: "[ab2,eb3,b3,eb4]@4 db2 ab2 f3@2, ~ [c4,eb4,f4]", P: "[f2,c3,ab3,eb4]@2 [bb2,ab3] bb2, ~ [b3,d4]",
  Q: "[eb2,eb3,g3,bb3] [c3,bb3,eb4] [f2,c4,eb4] [bb2,ab3,b3,d4]", // Eb Cm7 F7 Abdim
  R: "[eb2,g3,bb3,eb4] [eb3,g3,bb3,c4,eb4] [d3,ab3,b3,d4,f4] [c3,bb3,c4,eb4,g4] [bb2,c4,eb4,g4,bb4] [g2,eb4,g4,bb4,c5]", // Eb Cm7 Ddim Cm7
  S: "[f4,ab4,bb4,db5]@2 [f4,ab4,bb4,db5]@2 [f4,ab4,bb4,db5]@2 ~@3 bb2@3, bb2@3 ~, ~ [f4,ab4,bb4,db5]", // Bbm7
  T: "~@6 [db4,g4,bb4,db5]@3 [eb4,g4,bb4,eb5]@3 [e4,g4,bb4,e5]@4 ~@4 [db4,g4,bb4,db5]@4, eb2@2 eb3 eb2, ~@4 [eb4,g4,bb4,eb5] ~", // Gdim Eb Edim Gdim Eb
  U: "[[c4,g4,bb4,c5]@3 [c4,g4,bb4,c5]@3 [c4,g4,bb4,c5]@3 ~@9 eb2@6 ab2@4 [f3,ab3,c4,eb4]@4 [eb3,ab3,c4,f4]@4 [c3,c4,eb4,f4,ab4]@4 [bb2,db4,e4,g4,bb4]@4 [ab2,eb4,f4,ab4,c5]@4, ab2@3 ~@5, ~@3 [c4,f4,ab4,c5]@6 ~@7]/2", // C7 Fm7 Bbdim Fm7 Fm
  V: "[d4,g4,a4,d5]!4 ~@2 a2@2, [a2,e3]@3 ~, ~ [d4,g4,a4,d5]", // Dsus4 A5 Dsus4
  W: "~@3 [d4,gb4,a4,d5]@3 [d4,gb4,a4,d5]@3 [c4,gb4,a4,c5]@3 [f4,a4,c5,f5]@4 [d4,f4,a4,d5]@4 [c4,eb4,a4,c5]@4, d2 [f2,c3,a3]", // D Gbdim F Dm Adim F
  X: "~ [f4,ab4] ~ [e4,g4], [bb2,d4] [e3,db4]", Y: "~ [eb4,ab4] [bb2,ab3,b3,d4] [bb2,ab3,c4,d4], [f3,c4] ~",
  Z: "[bb2,f3,ab3,db4] [eb2,bb2,g3,db4,eb4]", AA: "[ab2,eb3,b3,eb4]@4 db2 ab2 ~@2, ~ [f3,b3,eb4,f4]",
  AB: "[f2,ab2,ab3,eb4]@2 [bb2,ab3] bb2, ~ [b3,d4]", // Fm7 Bb7 Bm
  AC: "[g3,bb3,eb4] bb4!3 db5 bb4 bb4@2, [eb2,bb2] [e2,b2,ab3,d4,gb4]", // Eb Eb5 E7
  AD: "~@3 [g4,bb4]@3 [f4,bb4]@3 [c4,bb4]@2 ~ db5@3 bb4@3 bb4@3 g4@3, [f2,c3,eb3,ab3,eb4]@2 [bb2,d3,ab3,d4,gb4] [bb2,ab3,c4,d4], c4@9 ~@2 bb3@7 ~@6", // Gm Bb5 C7 Fm7 Bbaug Bb7
  AE: "[ab2,eb3]@3 ab2 [f3,b3,eb4,f4]@4, [b3,eb4] ~", // Ab5 Fm7b5 B
  AF: "[[eb2,eb3,g3,bb3,eb4]@6 g4@3 ~ c5@4 [g2,d3,bb3,f4,bb4]@9 d4@4 ab4@5 ~@9 d5@2 eb5@2 g5@2 bb5@2 d6@14 ~@9, ~@6 [ab2,eb3,c4]@7 ~@10 [e2,b2,ab3]@9 [eb2,bb2,g3]@30 ~@10, ~@32 [c4,d4,f4]@23 ~@17]/3", // Eb Gm7 Ab E Eb Dm7
})).s("gm_string_ensemble_1").gain(0.18)

// chords · acoustic guitar steel · "ACC.GUITAR"
const acoustic_guitar_steel = note(`<
  ~@4 A B C D E F G H I J C K E L M N O P Q R S T U V A W C X E Y Z AA A B C D E F G H I J C K E L M N O P Q R S T U V A
  W C X E Y AB@3
>`.pickRestart({
  A: "eb3 [g3,bb3,d4,eb4] eb3 [g3,bb3,d4,eb4]", B: "bb2 [f3,ab3,bb3,db4] eb3 [g3,bb3,db4,eb4,f4]",
  C: "ab2 [g3,ab3,c4,eb4] ab2 [g3,ab3,c4,eb4]", D: "ab2 [ab3,b3,eb4] db3 [ab3,b3,db4,eb4,f4]",
  E: "eb3 [g3,bb3,d4,eb4] c3 [g3,c4,eb4]", F: "f2 [ab3,c4,eb4,f4] bb2 [ab3,bb3,d4,f4]",
  G: "g2 [g3,b3,db4,f4] c3 [g3,bb3,e4]", H: "f2 [a3,b3,eb4,f4] bb2 [ab3,bb3,c4,d4,f4]",
  I: "eb3 [bb3,d4,eb4,g4] eb3 [bb3,d4,eb4,g4]", J: "bb2 [ab3,bb3,db4,f4] eb3 [g3,bb3,db4,eb4]",
  K: "ab2 [ab3,b3,eb4] db3 [ab3,b3,db4,eb4,f4,ab4]", L: "f2 [ab3,c4,eb4,f4] bb2 [ab3,bb3,b3,d4,f4]",
  M: "eb3 [g3,bb3,c4,eb4] f2 [ab3,bb3,d4,f4]", N: "eb3@3 ~ eb3@4 f3@4 g3@4 bb3@4 c4@3 ~",
  O: "bb2 [ab3,bb3,db4,f4] bb2 [ab3,bb3,db4,f4]", P: "eb3 [g3,bb3,db4,eb4,e4] eb3 [g3,bb3,db4,eb4,e4]",
  Q: "ab2 [g3,ab3,c4,eb4] ab2 [f3,ab3,c4,eb4]", R: "ab2 [f3,ab3,c4,eb4] ab2 [f3,ab3,c4,eb4]",
  S: "a2 [g3,a3,c4,e4] a2 [g3,a3,c4,e4]", T: "d3 [a3,c4,d4,gb4] f2 [f3,a3,c4,eb4]",
  U: "bb2 [ab3,bb3,d4,f4] e3 [g3,bb3,db4,e4]", V: "f3 [f3,ab3,c4,eb4] bb2 [ab3,bb3,d4,f4]",
  W: "bb2 [ab3,bb3,d4,f4] eb3 [g3,bb3,db4,eb4,e4]", X: "ab2 [ab3,b3,eb4] db3 [f3,ab3,b3,db4,eb4]",
  Y: "f2 [f3,ab3,c4,eb4] bb2 [ab3,b3,d4,f4,bb4]", Z: "eb3 [g3,bb3,eb4] e3 [ab3,b3,e4]",
  AA: "f3 [ab3,c4,eb4] bb2 [ab3,bb3,d4,f4]", // Ab Bb7
  AB: "[[eb3,g3,bb3,eb4]@6 [g3,ab3,c4,eb4]@7 ~ [f3,g3,bb3,d4]@9 [e3,ab3,b3,d4]@9 [eb3,g3,bb3,d4]@30 ~@10]/3", // Eb Abmaj7 Gm7 E7 Ebmaj7
})).s("gm_acoustic_guitar_steel").gain(0.15)

// bass · electric bass finger · "BASS"
const bass = note(`<
  ~@3 A B C D E F G H I B J D E F G K L M B D N O P Q R S J T E F G U V B C D E F G H I B J D E F G K L W B D@2 O P Q R
  B J D E F G X@3
>`.pickRestart({
  A: "~@3 bb1", B: "eb2!2", C: "bb1@2 eb2 bb1", D: "ab1!2", E: "ab1 db2", F: "eb2 c2", G: "f1 bb1", H: "g1 c2",
  I: "f1@6 bb1@3 bb1@2 ~", J: "bb1 eb2", K: "eb2 c2 f1 bb1", L: "eb1@3 ~ eb1@4 f1@4 g1@4 bb1@4 c2@4",
  M: "bb1@11 ~ bb1@11 ~", N: "ab1@11 ~ ab1@12", O: "a1!2", P: "d2 f1", Q: "bb1 e2", R: "f1@12 bb1@6 bb1@5 ~",
  S: "eb2@11 ~ eb2@12", T: "ab1@11 ~ ab1@11 ~", U: "eb2 e2", V: "f2@6 bb1@5 ~", W: "bb1!2",
  X: "[eb2@6 ab1@7 ~ g1@9 e1@9 eb1@30 ~@10]/3",
})).s("gm_electric_bass_finger").gain(0.5)

// other · vibraphone · "VIBES"
const vibraphone = note("<~@35 A B C D E F G H@2 B C D E F G I@2 ~@17>".pickRestart({
  A: "~@15 [g4,ab4,a4] bb4@4 g4@4", B: "d4@10 bb3 c4", C: "db4@2 c5@2 c5 eb5 c5@2 bb4@2 g4 eb4",
  D: "c4@7 ab3 bb3 c4 eb4 g4", E: "bb4@2 bb4@2 bb4 ab4 bb4@4 ab4@2", F: "g4@4 ab4 bb4 eb4@4 f4 g4",
  G: "ab4@4 c4@4 ~ bb3@3 d4@2 ~@2 eb4@4 f4@4", H: "[g4@36 ~@3 [g4,ab4,a4] bb4@4 [g4,g6]@4]/2", I: "[eb4@7 ~@5]/2",
})).s("gm_vibraphone").gain(0.6)

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

// drums · rim
const rim = s("rim").struct("<~@4 [~ x ~ x]!15 ~@9 [~ x ~ x]!7 ~@25 [~ x ~ x]!6 [~@6 x ~@16 x] ~@2>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@19 x [~ x ~ x]!8 ~@8 [~ x ~ x]!15 x [~ x ~ x]!8 ~@9>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<~@19 x ~@31 x ~@17>").gain(0.24)

// drums · ride bell
const ride_bell = s("rd").struct("<~@4 A@15 B A@31 B A@13 C D E ~>".pickRestart({
  A: "x ~@5 x ~@4 x!2 ~@5 x ~@4 x", B: "x!6", C: "x ~@5 x ~@4 x!2 ~@5 x ~@5", D: "~@6 x ~@7 x ~@8 x", E: "~ x ~",
})).gain(0.2)

// drums · cowbell
const cowbell = s("cb").struct("<~@20 x ~@31 x ~@16>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@19 A ~@8 B ~@7 B ~@14 A ~@8 B ~@5 C D ~>".pickRestart({
  A: "~ x!5", B: "x", C: "~@6 x ~@7 x ~@8 x", D: "~ x ~",
})).gain(0.2)

stack(
  string_ensemble_1, string_ensemble_1_2, acoustic_guitar_steel, bass, vibraphone, kick, rim, snare, hihat, ride_bell,
  cowbell, crash
)