Strudelify

Dizzy

Tommy Roe

KeyF majorTempo104 bpm
0:00/0:00
// Dizzy — Tommy Roe
// 104 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar2.
setcpm(104/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.

// bass · acoustic bass · "bass"
const bass = note(`<
  ~ A B A B C ~ A D E D E D E D F G F G F G F G F G H I J K A D E D E D E D F G L ~ F G F G F G F G H I J K A D E D E D
  E D F G F G L ~ F G F G F G F G H I J K A D E D E D E D F G F G M G N O P G ~
>`.pickRestart({
  A: "d2@2 d2@3 ~ d2@2 g2@2 g2@3 ~ g2@2", B: "c2@2 c2@3 ~ c2@2 g2@2 g2@3 ~ g2@2", C: "d2 ~@7",
  D: "b1@2 b1@3 ~ b1@2 b1@2 b1@3 ~ b1@2", E: "e2@2 e2@3 ~ e2@2 a2@2 a2@3 ~ a2@2",
  F: "f2@2 f2@3 ~ f2@2 bb2@2 bb2@3 ~ bb2@2", G: "c2@2 c2@3 ~ c2@2 bb2@2 a2@2 g2@2 e2@2",
  H: "c2@3 ~ c2@3 ~ c2@3 ~ c2@2 g1@2", I: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@2 c2@2",
  J: "f1@3 ~ f1@2 ~@2 f2@2 c2@2 f2@2 c2@2, ~@7 c2@2 ~@7", K: "a1!8", L: "f2 ~@7",
  M: "f2@2 f2@3 ~ f2@2 bb2@2 c3@2 d3@2 bb2@2", N: "f3 a2 f3 c3 bb2 c3 d3 ~",
  O: "c3@2 g2@3 ~ c3@2 bb2@2 c3@2 d3@2 bb2@2", P: "f2@2 f2@2 f3@3 ~ bb2 c3 d3 ~ f3@2 bb2@2",
})).s("gm_acoustic_bass").gain(0.36)

// chords · electric guitar clean · "wah guitar"
const electric_guitar_clean = note("<~ A B A C D ~@81 E F E G E F E G E F ~>".pickRestart({
  A: "[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~", B: "[a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]!2 ~@2 [a4,d5]@2 ~@2",
  C: "[a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,d5]!2 ~@2 [a4,d5]!2 ~@2", D: "[a4,d5] ~@7",
  E: "[c5,f5] ~ [c5,f5] ~ [c5,f5] ~ [c5,f5] ~", F: "[c5,f5]@2 ~@2 [c5,f5]@2 ~@2 [c5,f5]!2 ~@2 [c5,f5]@2 ~@2",
  G: "[c5,f5]@2 ~@2 [c5,f5]@2 ~@2 [c5,f5]!2 ~@2 [c5,f5]!2 ~@2", // F5
})).s("gm_electric_guitar_clean").gain(0.15).pan(0)

// chords · drawbar organ · "organ"
const drawbar_organ = note("<~ A B A C D ~@81 E F E G E F E G E F ~>".pickRestart({
  A: "[a5,d6] ~ [a5,d6] ~ [a5,d6] ~ [a5,d6] ~", B: "[a5,d6]@2 ~@2 [a5,d6]@2 ~@2 [a5,d6]!2 ~@2 [a5,d6]@2 ~@2",
  C: "[a5,d6]@2 ~@2 [a5,d6]@2 ~@2 [a5,d6]!2 ~@2 [a5,d6]!2 ~@2", D: "[a5,d6] ~@7",
  E: "[c6,f6] ~ [c6,f6] ~ [c6,f6] ~ [c6,f6] ~", F: "[c6,f6]@2 ~@2 [c6,f6]@2 ~@2 [c6,f6]!2 ~@2 [c6,f6]@2 ~@2",
  G: "[c6,f6]@2 ~@2 [c6,f6]@2 ~@2 [c6,f6]!2 ~@2 [c6,f6]!2 ~@2", // F5
})).s("gm_drawbar_organ").gain(0.15).pan(0)

// chords · acoustic guitar steel · "acoustic guitar"
const acoustic_guitar_steel = note(`<
  ~ A B A B C ~ A D E D E D E D F G H I@6 J@2 K L M A D E D E D E D F G N ~ H I@6 J@2 K L M A D E D E D E D F G F G N ~
  H I@6 J@2 K L M A D E D E D E D F G F G F G F G F G ~
>`.pickRestart({
  A: "[d3,a3,d4,gb4]!2 [d3,a3]!2 [g3,d4,g4,b4]!2 d4 [g2,d4], ~ [d4,gb4] ~ [g3,g4,b4]", // D D5 G G5 D G
  B: "[c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3]@2 [c3,g3]@2 [g3,d4,g4,b4] [d4,g4,b4] [g3,d4,g4,b4]@2 [g3,d4]@2 [g3,d4]@2, ~ [c4,e4] ~ [g4,b4]", // C C5 G G5 C G
  C: "[d3,a3,d4,gb4] ~@7", D: "[b2,gb3,b3,eb4]!2 [b2,gb3]!2 [b2,gb3,b3,eb4]!2 [b2,gb3]!2, ~ [b3,eb4] ~ [b3,eb4]",
  E: "[e3,b3,e4,ab4]!2 [e3,b3]!2 [a3,e4,a4,db5]!2 e4 [a2,e4], ~ [e4,ab4] ~ [a3,a4,db5]", // E E5 A A5 E A
  F: "[f3,c4,f4,a4]!2 [f3,c4]!2 [bb3,f4,bb4,d5]!2 f4 [bb2,f4], ~ [f4,a4] ~ [bb3,bb4,d5]", // F F5 Bb Bb5 F Bb
  G: "[c3,g3,c4,e4]!2 [c3,g3]!2 [bb2,f3,bb3,d4]!2 [bb2,f3]!2, ~ [c4,e4] ~ [bb3,d4]", // C C5 Bb Bb5 C Bb
  H: "[f3,c4,f4,a4]@2 [f3,c4,f4,a4]@2 [f3,c4,f4,a4]@3 [f3,c4] [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4,bb4]@3 [bb3,f4]", // F F5 Bb Bb5
  I: "[[c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@3 [c3,g3] [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]@3 ~ [f3,c4,f4,a4]@2 [f3,c4,f4,a4]@2 [f3,c4,f4,a4]@3 [f3,c4] [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4,bb4]@3 [bb3,f4], ~@15 [bb2,f3]@2 ~@15]/2", // C C5 Bb F F5 Bb Bb5
  J: "[[c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@3 [c3,g3] [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]@3 ~ [c3,g3,c4,e4]@4 [c3,g3,c4,e4]@4 [c3,g3,c4,e4]@4 [c3,g3,c4,e4]@4, ~@15 [bb2,f3]@2 ~@15]/2", // C C5 Bb C Bb5
  K: "[bb2,f3,bb3,d4]!4", L: "[f2,c3,f3,a3]!4", M: "[a2,e3,a3,db4]!8", N: "[f3,c4,f4,a4] ~@7",
})).s("gm_acoustic_guitar_steel").gain(0.06).pan(1)

// chords · piano
const piano = note(`<
  ~ A B A B C ~ D E@2 F G F G F H I ~@12 J F G F G F G F H I K ~ H ~@11 J F G F G F G F H I H I K ~ H ~@11 J F G F G F G
  F H I H I H I H I ~@3
>`.pickRestart({
  A: "[d4,gb4,a4]@2 [d4,gb4,a4]@2 [d4,gb4,a4]@3 ~ [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@4", // D G
  B: "[e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@3 [d4,g4,b4]@3 [d4,g4,b4]@2 [d4,g4,b4]@4", C: "[d2,a4] ~@3",
  D: "[a3,d4,gb4]@3 ~ [d3,a3,d4,gb4]@4 [d4,g4,b4]@3 ~ [g3,d4,g4,b4]@4", // D G
  E: "[[gb3,b3,eb5]!2 [eb4,gb4,b4]@2 [eb4,gb4,b4] [b3,eb4,gb4]@2 b3 [e3,b3,e4,ab4] ~ [e3,b3,e4,ab4]@2 [a3,e4,a4,db5] ~ [a3,e4,a4,db5]@2, ~@7 [b2,eb4,gb4]@2 ~@7]/2", // B E A B
  F: "[b2,gb3,b3,eb4] ~ [b2,gb3,b3,eb4]@2 [b2,gb3,b3,eb4] ~ [b2,gb3,b3,eb4]@2", // B
  G: "[e3,b3,e4,ab4] ~ [e3,b3,e4,ab4]@2 [a3,e4,a4,db5] ~ [a3,e4,a4,db5]@2", // E A
  H: "[f3,c4,f4,a4] ~ [f3,c4,f4,a4]@2 [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5]@2", // F Bb
  I: "[c3,g3,c4,e4] ~ [c3,g3,c4,e4]@2 [bb2,f3,bb3,d4] ~ [bb2,f3,bb3,d4]@2", // C Bb
  J: "[d3,a3,d4,gb4] ~ [d3,a3,d4,gb4]@2 [g3,d4,g4,b4] ~ [g3,d4,g4,b4]@2", K: "[f3,c4,f4,a4] ~@7",
})).s("gm_piano").gain(0.03).pan(0)

// other · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@7 A B C D C D C E F G ~@2 H I ~@2 H J K L M N A B C D C D C E F G ~@4 H I ~@2 H J K L O@2 A B C D C D C E F G F G
  ~@4 H I ~@2 H J K L O@2 A B C D C D C E F G F G F G F G F G ~
>`.pickRestart({
  A: "~@2 gb4 ~@3 g4 ~", B: "~@2 gb4 ~@3 a4 ~", C: "~@2 ab4 ~@3 a4 ~", D: "~@2 b4 ~@3 a4 ~", E: "~@2 b4 ~@3 b4 ~",
  F: "~@4 a5@2 ~@4 bb5 ~ bb5@2 ~@2", G: "~@4 c5@2 ~@4 bb5 ~ bb5@2 ~@2", H: "~@10 c4 d4 f4 d4 c4 d4", I: "f4", J: "f3",
  K: "c4", L: "bb3", M: "a3", N: "[a3,db4]", O: "a3/2",
})).s("gm_string_ensemble_1").gain(0.32).pan(0)

// other · string ensemble 1 · "strings2"
const string_ensemble_1_2 = note(`<
  ~@7 A B C D C D C D E F ~@8 G H I J A B C D C D C D E F ~@10 G H I J A B C D C D C D E F E F ~@10 G H I J A B C D C D
  C D E F E F E F E F E F ~
>`.pickRestart({
  A: "~@2 d6 ~@3 d6 ~", B: "~@2 eb6 ~@3 eb6 ~", C: "~@2 e6 ~@3 e6 ~", D: "~@2 gb6 ~@3 gb6 ~",
  E: "~@4 f6@2 ~@4 f6 ~ f6@2 ~@2", F: "~@4 g6@2 ~@4 f6 ~ f6@2 ~@2", G: "c4", H: "d4", I: "f4",
  J: "a4 ~ a4 ~ a5 ~ a5 ~ a5 ~ a5 ~ db6 ~ e6 ~, e4",
})).s("gm_string_ensemble_1").gain(0.19).pan(1)

// other · alto sax · "lead"
const alto_sax = note(`<
  ~@7 A ~ B ~ B ~ B ~ C ~@13 A ~ B ~ B ~ B ~ C ~@15 A ~ B ~ B ~ B ~ C ~@17 A ~ B ~ B ~ B ~ C ~ C ~ C ~ C ~ C ~@2
>`.pickRestart({
  A: "a4@3 ~ gb4@3 ~@9", B: "b4@3 ~ ab4@3 ~@9", C: "c5@3 ~ a4@3 ~@9",
})).s("gm_alto_sax").gain(0.4).pan(0)

// chords · electric guitar clean · "guitar2"
const electric_guitar_clean_2 = note("<~@18 A ~ A ~ A ~ B ~@17 A ~ A ~ A ~ B ~@19 A ~ A ~ A ~ B ~@23>".pickRestart({
  A: "~@7 [f3,bb3,d4]", B: "~@11 [bb3,d4,f4] ~@2 [bb3,d4,f4]@2",
})).s("gm_electric_guitar_clean").gain(0.11).pan(1)

// other · string ensemble 1 · "strings3"
const string_ensemble_1_3 = note("<~@67 A B A B A B A C ~@23>".pickRestart({
  A: "f3 bb3", B: "c4@8 bb3@6 f3 ~", C: "c4 ~",
})).s("gm_string_ensemble_1").gain(0.12).pan(0)

// drums · kick
const kick = s("bd").struct("<~ A@5 B A@17 C D@4 A@11 B A@7 C D@4 A@13 B A@7 C D@4 A@18 ~>".pickRestart({
  A: "x ~ x ~@4 x!2 ~ x ~@4 x", B: "x!2 ~@6", C: "x ~ x ~@4 x!2 ~@7", D: "~@7 x",
})).gain(0.57)

// drums · snare
const snare = s("sd").struct(`<
  A B@5 C D@10 B@7 E F@3 ~ D@10 B C B@7 E F@3 ~ D@12 B C B@7 G F@3 ~ D@15 B@3 ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@2 x ~@4 x ~@2 x", E: "~@4 x ~@4 x!6 ~", F: "x!4",
  G: "~@4 x ~@4 x!4 ~ x ~",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@5 A B ~@17 C ~@14 A B ~@7 C ~@16 A B ~@7 C ~@23>".pickRestart({
  A: "~@4 x!2 ~@2", B: "x!2 ~@6", C: "~ x ~@2",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 A ~@21 B ~@11 A ~@11 B ~@13 A ~@11 B ~@19>".pickRestart({
  A: "~@8 x!8", B: "x!8",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~ A@5 B A@17 C D@3 ~ A@11 B A@7 C D@3 ~ A@13 B A@7 C D@3 ~ A@18 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x ~@4", D: "x!4",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@7 A ~@23 A ~@25 A ~@22>".pickRestart({
  A: "x",
})).gain(0.57)

stack(
  bass, electric_guitar_clean, drawbar_organ, acoustic_guitar_steel, piano, string_ensemble_1, string_ensemble_1_2,
  alto_sax, electric_guitar_clean_2, string_ensemble_1_3, kick, snare, hihat, mid_tom, open_hat, crash
)

More by Tommy Roe