Strudelify

Bluebird

The Ventures

KeyA majorTempo120 bpm
0:00/0:00
// Bluebird — The Ventures
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 82 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 · [...]/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 · electric bass pick · "Bass"
const bass = note(`<
  ~ A B C D E F G H I B C D E F G H J@2 K@2 L@2 M N A B C D E F G H O@2 K@2 L@2 M N A P Q R S T U V W X Y R S T U V Z AA
  AB@2 AC AD AE AF AG X Y R S T U V S T S T S T S AH@2
>`.pickRestart({
  A: "e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~", B: "e2!2 d2!2 c#2!2 b1!2", C: "a1@3 ~@9 e2@2 f2@2",
  D: "f#2@5 ~ a2@3 ~ c#3@2 d3@2 c#3@2", E: "a1@3 ~@3 c#2@3 ~ e2@2 f#2@2 e2@2",
  F: "f#2@3 ~@3 f#2@2 a2@2 c#3@2 d3@2 c#3@2", G: "d2@3 ~@3 f#2@3 ~ a2@2 b2@2 a2@2", H: "e2@5 ~ g#2@3 ~ b2@2 c#3@2 b2@2",
  I: "a1@5 ~ a1@2 c#2@2 e2@2 f#2@2 e2@2", J: "a1@3 ~@3 a1@2 c#2@2 e2@2 f#2@2 e2@2",
  K: "f#2@3 ~@3 a2@3 ~ c#3@2 d3@2 c#3@2", L: "b1@3 ~@3 d2@3 ~ f#2@2 g2@2 f#2@2",
  M: "b2@3 ~@3 d#3@3 ~ f#3@2 g#3@2 f#3@2", N: "b2!2 a2!2 g#2!2 f#2!2", O: "a1@3 ~@3 c2@2 c#2@2 e2@2 f#2@2 e2@2",
  P: "f2!8", Q: "a#2@3 ~@9 f2@2 f#2@2", R: "g2@5 ~ a#2@3 ~ d3@2 d#3@2 d3@2", S: "a#1@3 ~@3 d2@3 ~ f2@2 g2@2 f2@2",
  T: "g2@3 ~@3 a#2@4 d3@2 d#3@2 d3@2", U: "d#2@3 ~@3 g2@3 ~ a#2@2 c3@2 a#2@2", V: "f2@5 ~ a2@3 ~ c3@2 d3@2 c3@2",
  W: "a#1@5 ~ d2@4 f2@2 g2@4", X: "f2!2 d#2!2 d2!2 c2!2", Y: "a#1@3 ~@9 f2@2 f#2@2", Z: "a#2@3 ~@3 d2@4 f2@2 g2@2 f2@2",
  AA: "a#1@3 ~@3 d2@4 f2@2 g2@2 f2@2", AB: "g2@3 ~@3 a#2@3 ~ d3@2 d#3@2 d3@2", AC: "c2@3 ~@3 c2@5 ~ d#2@4",
  AD: "c2@3 ~@3 d#2@3 ~ g2@2 g#2@2 g2@2", AE: "c3@3 ~@3 e3@3 ~ g3@2 a3@2 g3@2", AF: "c3!2 a#2!2 a2!2 g2!2",
  AG: "f2@3 ~ f2@3 ~ f2@3 ~ f2@3 ~", AH: "[a#2 ~@3 a#1@8 ~@4]/2",
})).s("gm_electric_bass_pick").gain(0.35).pan(0.7)

// chords · acoustic guitar steel · "Rhythm"
const acoustic_guitar_steel = note(`<
  ~ A B C D E D F G E B H D E D F G I J K@2 L@2 M@2 N B C D E D F G O P D K L@2 M@2 Q R S T U V W X U Y Z V U V W AA AB
  AC T@2 AD@2 AE@2 AF Y Z T U T AG AH U T U T U T U AI@2
>`.pickRestart({
  A: "[e3,g#3,b3,e4]!4", B: "[e3,b3,e4,g#4]!2 [d3,a3,d4,f#4]!2 [e3,a3,c#4,e4]!2 [b2,e3,g#3,b3]!2",
  C: "[a2,e3,a3,c#4,e4] ~@3", // A
  D: "~@2 [f#2,c#3,f#3,a3,c#4,f#4]!2 [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@4 [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@3 ~", // F#m
  E: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@4 [a2,e3,a3,c#4,e4]@2 [a2,a3,c#4,e4]@3 ~", // A
  F: "~@2 [d3,a3,d4,f#4]!2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@3 ~", // D
  G: "~@2 [e2,b2,e3,g#3,b3,e4]!2 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]@4 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]@3 ~", // E
  H: "[a2,e3,a3,c#4,e4]@3 ~@13", // A
  I: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]!2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@4 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4,e4]@3 ~", // A D A
  J: "[a2,e3,a3,c#4,e4]!8", // A
  K: "[f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]!2 [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@4 [f#2,c#3,f#3,a3,c#4,f#4]@2 [f#2,c#3,f#3,a3,c#4,f#4]@3 ~", // F#m
  L: "[b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]!2 [b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]@4 [b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]@3 ~", // Bm
  M: "[b2,f#3,a3,d#4,f#4]@2 [b2,f#3,a3,d#4,f#4]!2 [b2,f#3,a3,d#4,f#4]@2 [b2,f#3,a3,d#4,f#4]@4 [b2,f#3,a3,d#4,f#4]@2 [b2,f#3,a3,d#4,f#4]@3 ~", // B7
  N: "[e3,b3]!4", // E5
  O: "~@2 [a2,e3,a3,c#4,e4]!2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4,e4]@2 [d3,a3,d4,f#4]@2 [a2,e3,a3,c#4,e4]@2", // A D A D A
  P: "[a2,e3,a3,c#4,e4]!4", Q: "[e2,b2,e3,g#3,b3,e4]!4", R: "[f2,c3,f3,a3,c4,f4]!8", S: "[a#2,f3,a#3,d4,f4,a#4] ~@7",
  T: "[g2,d3,g3,a#3,d4,g4]@2 [g2,d3,g3,a#3,d4,g4]!2 [g2,d3,g3,a#3,d4,g4]@2 [g2,d3,g3,a#3,d4,g4]@4 [g2,d3,g3,a#3,d4,g4]@2 [g2,d3,g3,a#3,d4,g4]@3 ~", // Gm
  U: "[a#2,f3,a#3,d4,f4]@2 [a#2,f3,a#3,d4,f4]!2 [a#2,f3,a#3,d4,f4]@2 [a#2,f3,a#3,d4,f4]@4 [a#2,f3,a#3,d4,f4]@2 [a#2,a#3,d4,f4]@3 ~", // A#
  V: "~@2 [g2,d3,g3,a#3,d4,g4]!2 [g2,d3,g3,a#3,d4,g4]@2 [g2,d3,g3,a#3,d4,g4]@4 [g2,d3,g3,a#3,d4,g4]@2 [g2,d3,g3,a#3,d4,g4]@3 ~", // Gm
  W: "~@2 [d#3,a#3,d#4,g4]!2 [d#3,a#3,d#4,g4]@2 [d#3,a#3,d#4,g4]@4 [d#3,a#3,d#4,g4]@2 [d#3,a#3,d#4,g4]@3 ~", // D#
  X: "~@2 [f2,c3,d#3,a3,c4,f4]!2 [f2,c3,d#3,a3,c4,f4]@2 [f2,c3,d#3,a3,c4,f4]@4 [f2,c3,d#3,a3,c4,f4]@2 [f2,c3,d#3,a3,c4,f4]@3 ~", // F7
  Y: "[f3,c4,f4,a4]!2 [d#3,a#3,d#4,g4]!2 [f3,a#3,d4,f4]!2 [c3,f3,a3,c4]!2", Z: "[a#2,f3,a#3,d4,f4]@3 ~@13",
  AA: "~@2 [f2,c3,f3,a3,c4,f4]!2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@4 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@3 ~", // F
  AB: "~@2 [a#2,f3,a#3,d4,f4]!2 [a#2,f3,a#3,d4,f4]@2 [a#2,f3,a#3,d4,f4]@2 [d#3,a#3,d#4,g4]@2 [a#2,f3,a#3,d4,f4]@2 [d#3,a#3,d#4,g4]@2 [a#2,f3,a#3,d4,f4]@2", // A# D# A# D# A#
  AC: "[a#2,f3,a#3,d4,f4]!6 ~@2", // A#
  AD: "[c3,g3,c4,d#4,g4]@2 [c3,g3,c4,d#4,g4]!2 [c3,g3,c4,d#4,g4]@2 [c3,g3,c4,d#4,g4]@4 [c3,g3,c4,d#4,g4]@2 [c3,g3,c4,d#4,g4]@3 ~", // Cm
  AE: "[c3,g3,a#3,e4,g4]@2 [c3,g3,a#3,e4,g4]!2 [c3,g3,a#3,e4,g4]@2 [c3,g3,a#3,e4,g4]@4 [c3,g3,a#3,e4,g4]@2 [c3,g3,a#3,e4,g4]@3 ~", // C7
  AF: "[f2,c3,f3,a3,c4,f4]!4", // F
  AG: "[d#3,a#3,d#4,g4]@2 [d#3,a#3,d#4,g4]!2 [d#3,a#3,d#4,g4]@2 [d#3,a#3,d#4,g4]@4 [d#3,a#3,d#4,g4]@2 [d#3,a#3,d#4,g4]@3 ~", // D#
  AH: "[f2,c3,d#3,a3,c4,f4]@2 [f2,c3,d#3,a3,c4,f4]!2 [f2,c3,d#3,a3,c4,f4]@2 [f2,c3,d#3,a3,c4,f4]@4 [f2,c3,d#3,a3,c4,f4]@2 [f2,c3,d#3,a3,c4,f4]@3 ~", // F7
  AI: "[[a#2,f3,a#3,d4,f4]@2 [a#2,f3,a#3,d4,f4]!2 [a#2,f3,a#3,d4,f4]@2 [a#2,f3,a#3,d4,f4]@2 [a#2,f3,a#3,d4,f4]@16 ~@8]/2", // A#
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.3)

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

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

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A@5 B ~@2 A@6 B A@6 ~@3 A@6 B A@5 B ~@3 A@5 B ~@2 A@6 B A@6 ~@3 A@5 B A@6 ~@2
>`.pickRestart({
  A: "x ~ x!3 ~ x ~@3 x ~ x ~@3", B: "x ~ x!3 ~ x ~@9",
})).gain(0.32)

stack(bass, acoustic_guitar_steel, kick, snare, ride)

More by The Ventures