Strudelify
KeyF majorTempo96 bpm
0:00/0:00
// Mr. Magic — Grover Washington Jr.
// 96 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5982452; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · clarinet · "Bb Clarinet"
const clarinet = note("<~@16 A@5 B ~@12 A@5 B ~@12 A@5 B ~@12 A@5 B C D E D F D E D F G H G H I J I J K>".pickRestart({
  A: "eb5", B: "f5 ~ f5 ~ f5 ~@11", C: "~@2 f5!2 ~@12", D: "~@8 f4 g4 bb4 c5@2 bb4 eb5 ~",
  E: "~@4 f4 g4 bb4 c5@3 eb5 ~@5", F: "~@4 f5 eb5 c5 bb4@3 c5 ~ f4 g4!2 ~", G: "d5@2 ~@4 d5 ~@3 d5 ~@2 d5 ~@2",
  H: "c5@2 ~@4 c5 ~@3 f4@2 ~ bb4@2 ~", I: "g5@2 ~@4 g5 ~@3 g5 ~@2 g5 ~@2", J: "f5@2 ~@4 f5 ~@3 bb4@2 ~ eb5@2 ~",
  K: "g5 ~",
})).s("gm_clarinet").gain(0.4)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@4 A B A B ~@8 C D C D C E A B A B ~@8 C D C D C E A B A B ~@8 C D C D C E A B A B ~@8 C D C D C E F G H G I G H G I
  J K J K L M L M N
>`.pickRestart({
  A: "~@2 f4 eb4 ~@4 d4 c4 ~@4 bb3 a3", B: "~@4 a3!2 ~@3 a3 bb3@2 c4@2 ~@2", C: "bb3", D: "c4", E: "d4 ~ d4 ~ d4 ~@11",
  F: "~@2 d4!2 ~@12", G: "~@8 f3 g3 bb3 c4@2 bb3 eb4 ~", H: "~@4 f3 g3 bb3 c4@3 eb4 ~@5",
  I: "~@4 f4 eb4 c4 bb3@3 c4 ~ f3 g3!2 ~", J: "bb3@2 ~@4 bb3 ~@3 bb3 ~@2 bb3 ~@2", K: "a3@2 ~@4 a3 ~@3 eb3@2 ~ g3@2 ~",
  L: "d4@2 ~@4 d4 ~@3 d4 ~@2 d4 ~@2", M: "c4@2 ~@4 c4 ~@3 f3@2 ~ bb3@2 ~", N: "d4 ~",
})).s("gm_tenor_sax").gain(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet = note("<~@39 A ~@17 A ~@17 A B C D C E C D C E F G F G H I H I J>".pickRestart({
  A: "g4 ~ g4 ~ g4 ~@11", B: "~@2 g4!2 ~@12", C: "~@8 f4 g4 bb4 c5@2 bb4 eb5 ~", D: "~@4 f4 g4 bb4 c5@3 eb5 ~@5",
  E: "~@4 f5 eb5 c5 bb4@3 c5 ~ f4 g4!2 ~", F: "d5@2 ~@4 d5 ~@3 d5 ~@2 d5 ~@2", G: "c5@2 ~@4 c5 ~@3 f4@2 ~ bb4@2 ~",
  H: "g5@2 ~@4 g5 ~@3 g5 ~@2 g5 ~@2", I: "f5@2 ~@4 f5 ~@3 bb4@2 ~ eb5@2 ~", J: "g5 ~",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft = note("<~@16 A B A B A C ~@12 A B A B A ~@13 A B D E F ~@13 A B D E F ~@19>".pickRestart({
  A: "d4", B: "eb4", C: "g4 ~ g4 ~ g4 ~@11", D: "f4", E: "g4", F: "bb4",
})).s("gm_trumpet").gain(0.2)

// other · trombone
const trombone = note("<~@39 A ~@17 A B C B C ~@13 A D E F E G E F E G H I H J K L K L M>".pickRestart({
  A: "b3 ~ b3 ~ b3 ~@11", B: "eb4@2 ~@4 eb4 ~@3 eb4 ~@2 g3 ~@2", C: "a3@2 ~@4 a3 ~@3 d4@2 ~ g4@3", D: "~@2 b3!2 ~@12",
  E: "~@8 f3 g3 bb3 c4@2 bb3 eb4 ~", F: "~@4 f3 g3 bb3 c4@3 eb4 ~@5", G: "~@4 f4 eb4 c4 bb3@3 c4 ~ f3 g3!2 ~",
  H: "eb3@2 ~@4 eb3 ~@3 eb3 ~@2 g3 ~@2", I: "a3@2 ~@4 a3 ~@3 d3@2 ~ g3@2 ~", J: "a3@2 ~@4 a3 ~@3 d3@2 ~ g3@3",
  K: "eb4@2 ~@4 eb4 ~@3 eb4 ~@2 g4 ~@2", L: "a4@2 ~@4 a4 ~@3 d4@2 ~ g4@2 ~", M: "eb4 ~",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@4 A B A B ~@8 C@5 D A B A B ~@8 C@5 ~ A B A B ~@8 C@5 ~@13 C@5 ~@19>".pickRestart({
  A: "eb4@2 ~@4 eb4 ~@3 eb4 ~@2 g3 ~@2", B: "a3@2 ~@4 a3 ~@3 d4@2 ~ g4@3", C: "g3", D: "b3 ~ b3 ~ b3 ~@11",
})).s("gm_trombone").gain(0.2)

// chords · electric guitar jazz · "Guitar"
const electric_guitar_jazz = note(`<
  A B A B A B A B A B C ~ D@2 ~@2 E F E F G H A B A B A B C ~@5 E F E F G H A B A B A B C ~@5 E F E F G H A B A B A B C
  ~@5 E F E F G H I A B A B A B A B J K J K J K J K L
>`.pickRestart({
  A: "~@2 [c4,f4] [c4,eb4] ~@4 [bb3,d4] [bb3,c4] ~@4 [g3,bb3] [f3,a3]", // F5 Cm Bb Bbsus2 Gm F
  B: "~@4 [f3,a3]!2 ~@3 [a3,c4] [bb3,d4]@2 [c4,eb4]@2 ~@2", C: "~ ab4@5 [d4,g4,bb4]@6 ~@4, [db4,f4]@3 ~@5",
  D: "[~@14 [eb4,g4,bb4]@5 [eb4,g4,bb4] ~@2 [d4,f4,ab4]@4 ~@2 [d4,f4,bb4]@4]/2", // Eb Ddim Bb
  E: "[d4,f4] g4@2 [d4,g4]!2 ~ [d4,g4]@6 ~@2 [d4,g4]@2", F: "[c4,f4] g4@2 [c4,g4] [c4,f4] ~ [c4,eb4]@6 ~@2 [c4,f4]@2",
  G: "[d4,f4] g4@2 [d4,g4]!2 ~ [d4,g4]@6 ~@2 [d4,ab4]@2", H: "[g4,bb4]!3 ~@5", I: "~@2 [g4,bb4]!2 ~@12",
  J: "[bb4,d5]@3 [bb4,d5] ~@2 [bb4,d5] ~@3 [bb4,d5] ~@2 [bb4,d5] ~@2, db5 ~@15", // Bb
  K: "[a4,c5]@3 [a4,c5] ~@2 [a4,c5] ~@3 [a4,c5] ~@2 [a4,c5] ~@2", L: "[bb4,d5] ~",
})).s("gm_electric_guitar_jazz").gain(0.3)

// chords · electric guitar jazz · "Guitar" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@10 A@2 B ~ C D ~@12 A@2 E@2 C D ~@12 A@2 E@2 C D ~@12 A@2 E@2 C D ~@24
>`.pickRestart({
  A: "[~@14 [c4,eb4,g4,bb4]@4 ~ [g4,bb4] [c4,eb4,g4] ~ eb4 [eb4,g4] [g3,c4] ~ [c4,eb4] [bb3,c4,eb4] ~@4]/2", // Cm7 Gm Cm Eb C5 Cm Cm7
  B: "[f4,ab4,c5]@3 [f4,ab4,c5] ~@2 [eb4,g4,bb4]@6 ~@4", // Fm Eb
  C: "~@2 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@4 [eb4,g4,bb4] ~@2", // Eb
  D: "[eb4,g4,a4] ~ [eb4,g4,a4] ~@3 [eb4,g4,a4] ~ [eb4,g4,a4] ~ [eb4,g4,a4] ~@2 [eb4,g4,a4] ~@2", // Am7b5
  E: "[[f4,ab4,c5]@3 [f4,ab4,c5] ~@2 [eb4,g4,bb4]@6 ~@2 [eb4,g4,bb4]@5 [eb4,g4,bb4] ~@2 [d4,f4,ab4]@4 ~@2 [d4,f4,bb4]@4]/2", // Fm Eb Ddim Bb
})).s("gm_electric_guitar_jazz").gain(0.2)

// chords · piano
const piano = note(`<
  ~@4 A B A B A B C D E F G B H I H I H J A B A B A B C D E F G B H I H I H J A B A B A B C D E F G B H I H I H J A B A
  B A B C D E F G B H I H I H J K A B A B A B A B A B A B A B A B L
>`.pickRestart({
  A: "[g4,bb4,c5,eb5] ~@5 [g4,bb4,c5,eb5] ~@3 [g4,bb4,c5,eb5] ~@2 [g4,bb4,c5,eb5]@3", // Cm7
  B: "[g4,a4,c5,eb5] ~@5 [g4,a4,c5,eb5] ~@3 [g4,a4,c5,eb5] ~@2 [g4,a4,c5,eb5]@3", // Am7b5
  C: "[bb4,db5,f5,ab5]@3 [bb4,db5,f5,ab5] ~@2 [d5,g5,bb5]@2 ~@6 [d5,g5,bb5]@2", // Bbm7 Gm
  D: "[bb4,c5,eb5,g5]@6 [g4,bb4,c5,eb5]@6 ~ [bb4,c5,eb5,g5]@3", // Cm7
  E: "[db5,f5,ab5,c6]@3 [db5,f5,ab5,c6] ~@2 [eb5,g5,bb5]@2 ~@6 [eb5,g5,bb5]@2", // Dbmaj7 Eb
  F: "[eb5,g5,bb5]@3 [eb5,g5,bb5] ~@2 [d5,f5,ab5]@2 ~@6 [d5,f5,bb5]@2", // Eb Ddim Bb
  G: "[bb4,c5,eb5,g5] ~@5 [g4,bb4,c5,eb5] ~@3 [g4,bb4,c5,eb5] ~@2 [g4,bb4,c5,eb5]@3", // Cm7
  H: "[bb4,d5,eb5,g5]@3 [bb4,d5,eb5,g5] ~@2 [bb4,d5,eb5,g5]@2", // Ebmaj7
  I: "[ab4,c5,eb5,g5]@3 [ab4,c5,eb5,g5] ~@2 [ab4,c5,eb5,g5]@2", J: "[d5,f5,g5]!3 ~@5", K: "~@2 [d5,f5,g5]!2 ~@12",
  L: "[g4,bb4,c5,eb5] ~", // Cm7
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@4 A B A B A C D A E@2 A F G H G H G I A B A B A C D A E@2 A F G H G H G I A B A B A C D A E@2 A F G H G H G I A B A
  B A C D A E@2 A F G H G H G I J A B A B A C A B A B A C A B A C K
>`.pickRestart({
  A: "c2@2 ~@4 c2 ~@3 c2 ~@2 c2 ~@2", B: "f1@2 ~@4 f1 ~@3 bb1@2 ~ eb2@3", C: "f1@2 ~@4 f1 ~@3 bb1@2 ~ c2@3",
  D: "bb1 b1", E: "[bb1@3 eb2@4 ab1@4 g1@4 ~]/2", F: "f1@2 ~@4 f1 ~@3 bb1@2 ~ f2@3", G: "eb2@2 bb1 eb2@4 bb1",
  H: "ab1@2 eb1 ab1@4 bb1", I: "g1!3 ~@5", J: "~@2 g1!2 ~@12", K: "c2 ~",
})).s("gm_electric_bass_finger").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@3 A B@17 C B@17 C B@17 C B@17 C D B@16 E>".pickRestart({
  A: "~@13 x ~@2", B: "x ~@6 x!2 ~@7", C: "x!3 ~@5", D: "~@2 x!2 ~@12", E: "x",
})).gain(0.5)

// drums · rim
const rim = s("rim").struct("<~@21 A ~@17 A ~@17 A ~@17 B C ~@17>".pickRestart({
  A: "~@7 x", B: "~@2 x!2", C: "x ~ x ~ x ~@2 x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@3 A B@17 C B@17 C B@17 C B@17 D E B@16 F>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~ x ~ x", C: "x ~ x ~ x ~@5 x ~ x ~ x!2", D: "x!3 ~@5", E: "~@2 x!2 ~@6 x ~ x ~ x!2", F: "x",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@4 B@17 C B@17 C B@17 C B@17 D E B@16 F>".pickRestart({
  A: "x!4", B: "x ~@2 x!2 ~@2 x!3 ~ x!2 ~@2 x", C: "x ~ x ~ x ~@5 x ~ x ~ x!2", D: "x!3 ~@5", E: "~@10 x ~ x ~ x!2",
  F: "x",
})).gain(0.45)

// drums · splash
const splash = s("cr").struct("<~@93 x>").gain(0.4)

stack(
  clarinet, tenor_sax, trumpet, trumpet_soft, trombone, trombone_soft, electric_guitar_jazz, electric_guitar_jazz_2,
  piano, bass, kick, rim, snare, pedal_hat, splash
)