Strudelify

Walk the Dinosaur

Was (Not Was)

KeyE♭ minorTempo120 bpm
0:00/0:00
// Walk the Dinosaur — Was (Not Was)
// 120 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · brass section · "BRASS 1"
const brass_section = note(`<
  ~@4 A B ~ C ~ B ~ C ~@10 D@2 A B ~ E ~ B ~ C ~ B ~ C ~@3 F G H ~ I ~@2 D@2 A B ~ E ~ B ~ C A B ~ C ~ B ~ I A B ~ C ~ B
  ~ C ~@3 F G H ~ I ~@2 D@2 A B ~ E ~ B ~ J K L K M K L K N K L K M K L K N K L K M K L K N O P
>`.pickRestart({
  A: "[eb5,bb5,eb6]@3 ~@13", B: "~@12 [eb5,bb5,eb6]@3 ~",
  C: "~@9 [db4,db5] [eb4,eb5] [db4,db5] [gb4,gb5] [eb4,eb5] [db4,db5] [eb4,eb5]", // Db Eb Db Gb Eb Db Eb
  D: "[~@12 [eb4,eb5]@8 [bb4,gb5,bb5] ~@3 [bb4,gb5,bb5]@3 ~ [bb4,gb5,bb5] ~ [bb4,gb5,bb5] ~]/2", // Eb Ebm
  E: "~@8 [db4,db5] [eb4,eb5] ~ [gb4,gb5] ~ [eb4,eb5] ~@2", // Db Eb Gb Eb
  F: "~@8 [db4,db5] [eb4,eb5] ~ [gb4,gb5] ~ [gb4,gb5] [eb4,eb5] [db4,db5]", G: "[eb4,eb5] ~@15",
  H: "~@12 [gb4,gb5]@3 ~", I: "[gb4,gb5,bb5] ~ [gb4,gb5] ~ [f4,f5] ~ [eb4,eb5] ~",
  J: "[bb4,bb5] ~ [ab4,ab5] ~ [gb4,gb5] ~ [eb4,eb5] ~", // Bb Ab Gb Eb
  K: "[db4,db5] [eb4,eb5] ~ [gb4,gb5] ~ [gb4,gb5] ~ [gb4,gb5] ~@8", // Db Eb Gb
  L: "[db4,db5] [eb4,eb5] ~ [gb4,gb5] ~ [gb4,gb5] ~@2 [gb4,gb5] ~ [ab4,ab5] ~ [gb4,gb5] ~@3", // Db Eb Gb Ab Gb
  M: "[db4,db5] [eb4,eb5] ~ [gb4,gb5] ~@2 [gb4,gb5] [ab4,ab5] [bb4,bb5] [ab4,ab5] [gb4,gb5] ~ [ab4,ab5] [gb4,gb5] [eb4,eb5] ~", // Db Eb Gb Ab Bb Ab Gb Ab …
  N: "[bb4,bb5] ~@3 [ab4,ab5] ~@3 [gb4,gb5] ~@3 [eb4,eb5]@2 ~@2", // Bb Ab Gb Eb
  O: "~@7 [db4,db5] [eb4,eb5] [gb4,gb5] [ab4,ab5]@3 ~@2 gb5", // Db Eb Gb Ab
  P: "[gb4,ab4,ab5] [bb4,bb5] [db5,db6]@3 ~@2 [bb4,bb5] [db5,db6] [eb5,eb6] ~@6", // Gbsus2 Bb Db Bb Db Eb
})).s("gm_brass_section").gain(0.51)

// bass · slap bass 2 · "SLAPBASS 2"
const bass = note(`<
  ~@4 A B A C A B A C D B D C D B D C E F G H A B A C A B A C D B D C D B D C I B J C E F G H I B J C I B J C D B D C D
  B D C D B D C D B D C D B D C D B D C E F G H A B A C A B A C A B A C A B A C D B D C D B D C D B D C D B D C K L
>`.pickRestart({
  A: "eb1@5 ~@5 db2 d2 eb2 ~ db2 eb2", B: "bb1 ~ bb1 ~ c2 ~ c2 ~ db2 ~ db2 ~ d2 ~ d2 ~",
  C: "bb1 ~ bb1 ~ a1 ~ a1 ~ ab1 ~ ab1 ~ gb1 ~ gb1 ~", D: "eb1@4 ~@2 eb2@2 ~@2 bb1 db2 eb1 ~ db2 ~",
  E: "ab1@3 ~ ab1 ~ ab1 ~@3 ab1 ~ gb1@3 ~", F: "gb1 ~ gb1@2 ~@2 gb1@2 ~@2 gb1@2 ~@2 gb1@2",
  G: "f1@4 ~@2 f1 ~@3 f1 ~ e1@4", H: "~ e1 bb1 ~ bb1 ~ bb1 ~", I: "eb1@4 ~@6 db2 eb2!2 ~ db2 eb2",
  J: "eb1@5 ~@5 db2 eb2!2 ~ db2 eb2", K: "eb1@3 ~ eb1@3 bb1 eb2 bb1 db2@5 ab1", L: "bb1 gb1 ab1@5 gb1 eb1!2 ~@6",
})).s("gm_slap_bass_2").gain(0.51)

// chords · soprano sax · "SOPRAN SAX"
const soprano_sax = note(`<
  ~@4 A ~ B ~ A ~ B ~@9 C@2 D@2 A ~ B ~ A ~ B ~ A ~ B ~@9 C@2 D@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@9 C@2
  D@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@3
>`.pickRestart({
  A: "eb4@4 ~@4 [db5,f5]@2 [d5,gb5]@2 [eb5,g5] ~@3", B: "eb4@4 ~@4 [db5,f5]@2 [d5,gb5]@2 [eb5,g5]@2 [eb5,bb5] ~",
  C: "[ab4@3 ~ ab4@2 ab4@2 ~@4 [gb4,bb4]@8 gb4 ~ gb4 ~ gb4 ~ gb4 ~ bb3 db4 ~ eb4, ~@15 d4]/2", // Gb
  D: "[f4@3 ~ f4@2 f4@2 ~@4 [bb4,eb5]@7 ~ [bb4,gb5]@2 ~@2 [bb4,gb5]@4 [bb4,gb5] ~ [bb4,gb5] ~]/2", // Eb5 Ebm
})).s("gm_soprano_sax").gain(0.46)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@4 A B A B A B A B ~@8 C@2 D@2 A B A B A B A B A B A B A B A B A B A B C@2 D@2 A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B C@2 D@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B E F
>`.pickRestart({
  A: "~@4 [db4,f4,g4,bb4]@3 [db4,f4,g4,bb4] ~@8", B: "~@4 [eb4,f4,ab4,c5]@3 [eb4,f4,ab4,c5] ~@8",
  C: "[[c4,eb4,ab4]@11 ~ [bb3,db4,ab4]@20]/2", D: "[[c4,eb4,ab4]@5 ~ [b3,eb4,gb4]@4 [d4,gb4,bb4]@6]/2",
  E: "[eb4,bb4,eb5]@2 ~ [eb4,bb4,eb5]@13", F: "[eb4,ab4,db5,eb5]@2 ~ [eb4,ab4,db5,eb5]@5 [bb4,eb5]@2 ~@6, ~@8 eb4 ~@7",
})).s("gm_percussive_organ").gain(0.46)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note(`<
  ~@4 A B A C A B A C D B D C D B D C E F G H A B A C A B A C D B D C D B D C I B I C E F G H I B I C I B I C D B D C D
  B D C D B D C D B D C D B D C D B D C E F G H A B A C A B A C A B A C A B A C D B D C D B D C D B D C D B D C J K
>`.pickRestart({
  A: "eb3@5 ~@5 db4 d4 eb4 ~ db4 eb4", B: "bb3 ~ bb3 ~ c4 ~ c4 ~ db4 ~ db4 ~ d4 ~ d4 ~",
  C: "bb3 ~ bb3 ~ a3 ~ a3 ~ ab3 ~ ab3 ~ gb3 ~ gb3 ~", D: "eb3@4 ~@2 eb4@2 ~@2 bb3 db4 eb3@2 db4 ~",
  E: "ab3@3 ~ ab3 ~ ab3 ~@3 ab3 ~ gb3@3 ~", F: "gb3 ~ gb3@2 ~@2 gb3@2 ~@2 gb3@2 ~@2 gb3@2", G: "f3@2 ~ f3 ~ f3 e3@2",
  H: "~@2 e3@2 bb3@2 ~@2 bb3@3 ~ bb3@3 ~", I: "eb3@5 ~@5 db4 eb4!2 ~ db4 eb4", J: "eb3@4 eb3@3 bb3 eb4 bb3 db4@5 ab3",
  K: "bb3 gb3 ab3@5 gb3 eb3!2 ~@6",
})).s("gm_synth_bass_1").gain(0.51)

// other · pad new age · "FANTASIA"
const pad_new_age = note("<~@3 A ~@42 B@2 ~@34 B@2 ~@34>".pickRestart({
  A: "[eb6,ab6]", B: "[~@12 eb6 gb6@7 ab6@2 ~@2 ab6@3 ~ ab6 ~ ab6@2]/2",
})).s("gm_pad_new_age").gain(0.51)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note("<~@20 A@3 B ~@20 A@3 B ~@32 A@3 B ~@32 C D>".pickRestart({
  A: "[ab4,ab5]!2 ~@4 [ab4,ab5]!2 ~@4 [ab4,ab5]!2 ~@2", // Ab
  B: "[ab4,ab5]!2 ~@2 [gb4,bb4] ~@3 [gb4,bb4]@2 ~@2 [gb4,bb4] ~ [gb4,bb4] ~", // Ab Gb
  C: "[eb4,eb5] ~@3 [eb4,eb5]!2 ~@2 [eb4,eb5] ~@3 [eb4,eb5]!2 ~@2", D: "[eb4,eb5] ~@3 [eb4,eb5]!2 ~@2 [eb4,eb5]!2 ~@6",
})).s("gm_electric_guitar_jazz").gain(0.46)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@20 A@2 B@2 C D C D C D C D ~@12 A@2 B@2 C D C D C D C D E F E G E F E G E F E G E F E G E F E G E F E G A@2 B@2 C D
  C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D H I
>`.pickRestart({
  A: "[[ab3,c4,eb4]@12 [gb3,bb3,db4]@19 ~]/2", // Ab Gb
  B: "[[f3,ab3,c4]@10 ~@2 [e3,ab3,b3,eb4]@7 ~ [ab3,d4,gb4]@2 ~@2 [ab3,d4,gb4]@3 ~ [ab3,d4,gb4]@2 [ab3,d4,gb4]@2]/2", // Fm Emaj7 Abm7b5
  C: "~@4 [bb3,db4,f4]@2 [bb3,db4,f4]!2 ~@4 [bb3,db4,f4] ~ [bb3,db4,f4]!2", // Bbm
  D: "~@4 [c4,eb4,g4]@2 [c4,eb4,g4]!2 ~@4 [c4,eb4,g4]!3 ~", E: "~@2 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~",
  F: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", G: "~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4]@2 ~@2",
  H: "~@4 [eb3,bb3,eb4]@3 ~@5 [eb3,bb3,eb4]@3 ~", I: "~@4 [ab3,eb4]@3 ~@2 [eb3,bb3,eb4] ~@6",
})).s("gm_acoustic_guitar_steel").gain(0.46)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B A C A D A D A D A D E F E G B@7 H B@4 A D A D A D A D E F E G B@7 H B@16 A D A D A D A D E F E G B@32
  I J
>`.pickRestart({
  A: "x!2", B: "x ~@3 x!2 ~@2", C: "x ~@6 x!2 ~ x ~ x ~@3", D: "x ~@3 x!3 ~", E: "x ~ x!2 ~ x ~ x",
  F: "~ x ~ x ~ x ~ x", G: "~ x ~@4 x!2", H: "x ~@3 x!2 ~ x", I: "x ~@2 x!2 ~ x ~@3 x!2 ~@2 x ~",
  J: "~@2 x!2 ~@2 x ~ x!2 ~@6",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B C@6 D B C@2 E B C@2 E F@3 G C@3 E B C@2 H B C@2 E B C@2 E B C@2 E F@3 G C@3 E B C@2 H B C@2 E B C@2 I B C@2 E
  B C@2 I B C@2 E B C@2 E F@3 G C@3 E B C@2 E B C@2 E B C@2 E B C@2 E B C@2 I B C@2 E B C@2 I J K
>`.pickRestart({
  A: "~@4 x!2 ~@2 x!8", B: "x ~@3 x!2 ~@6 x!2 ~@2", C: "~@4 x!2 ~@6 x!2 ~@2", D: "~@2 x!6 ~ x!7", E: "~@4 x!2 ~@6 x!4",
  F: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", G: "x!2 ~@2 x!2 ~@2 x!8", H: "~@3 x!3 ~ x!3 ~ x!5", I: "~@2 x!14",
  J: "x!2 ~@6 x!2 ~@6", K: "x!2 ~@6 x!3 ~@5",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  A B A B A B A B A B A B C@8 D@4 A B A@3 B A B A B A@3 B A B A B A B D@4 A B A@3 B A B A B A B A B E@2 A B A B A B E@2
  A B A B A B A B D@4 A B A@3 B A@3 B A@3 B A@3 B A B A B E@2 A B A B A B E@2 F G
>`.pickRestart({
  A: "x ~@2 x ~@6 x ~@2 x ~ x", B: "~@3 x ~@6 x ~@2 x ~@2", C: "x!4", D: "x!2", E: "x ~@2 x ~@6 x ~@2 x ~@2",
  F: "x ~@3 x!5 ~@3 x!4", G: "x ~@3 x!3 ~ x!2 ~@6",
})).gain(0.41)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A ~@3 A ~@3 A ~@7 A ~@3 A ~@15 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A
  ~@3 B ~
>`.pickRestart({
  A: "x", B: "x ~@6 x",
})).gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@8 ~@8 B C B C A@12 ~@8 B C B C A@24 ~@8 B C B C A@32 D E>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x", C: "~ x ~ x", D: "~ x ~ x ~ x!3", E: "~@2 x ~ x ~ x ~ x!2 ~@6",
})).gain(0.51)

// drums · cowbell
const cowbell = s("cb").struct("<A@20 B@4 A@20 B@4 A@32 B@4 A@32 C D>".pickRestart({
  A: "x!16", B: "~ x!4 ~ x!2 ~ x!4 ~ x!2", C: "x!5 ~ x!7 ~ x!2", D: "x!5 ~ x!4 ~@6",
})).gain(0.41)

// drums · bongos
const bongos = s("bongo:4").struct("<A B C D A B C D A B C D ~@8 E@4 F@12 ~@8 E@4 F@24 ~@8 E@4 F@33 G>".pickRestart({
  A: "~@2 x!2 ~@2 x ~@2 x ~@4 x!2", B: "x ~@2 x ~@2 x!2 ~@2 x!2 ~ x ~ x", C: "~@2 x!2 ~@2 x ~ x ~ x!2 ~@2 x!2",
  D: "x ~@2 x ~@2 x!3 ~ x ~@2 x ~ x", E: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", F: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4",
  G: "~@2 x!2 ~@2 x!4 ~@6",
})).gain(1.35)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@20 A@4 B@12 ~@8 A@4 B@24 ~@8 A@4 B@33 ~>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@14 x!2",
})).gain(1.35)

// drums · congas
const congas = s("conga:13").struct("<~@56 A B@3 A B@3 A B@3 A B@3 ~@28 A B@3 A B@3 A B@3 A B@3 ~@2>".pickRestart({
  A: "~ x!3", B: "x!4",
})).gain(1.47)

stack(
  brass_section, bass, soprano_sax, percussive_organ, bass_2, pad_new_age, electric_guitar_jazz, acoustic_guitar_steel,
  kick, snare, crash, ride, tambourine, cowbell, bongos, bongos_2, congas
)