Strudelify

I Believe in Music

Gallery

KeyA majorTempo91 bpm
0:00/0:00
// I Believe in Music — Gallery
// 91 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 lead 2 sawtooth (copy of ch 11 lead 1 square)
// note: Full arrangement: all 61 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(91/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass pick
const bass = note(`<
  ~@11 A B C D E F G D E H I J K L M N K B C D E F G D E B C D E F G D E ~@7 K B C D E O ~@4
>`.pickRestart({
  A: "~@9 e2 f#2 e2 c#2@2 e2@2", B: "a1 ~ a1@4 ~ e2 a2 a1 e2@3 a1 a#1@2", C: "b1 ~ b1@6 f#1@2 b1@3 c2@2 c#2",
  D: "d2 ~ d2@4 d2 d#2 e2 ~ e2@3 b1 e2@2", E: "d2@3 c#2@3 b1@3 e2 f#2 e2 c#2@2 e2@2",
  F: "a1 ~ a1@4 ~@2 e2 f#2 a2@3 e2 c#2 a1", G: "b1 ~ b1@6 f#1 b1 ~ b1 b1@2 c2 c#2", H: "a1 ~ a1@8 ~@2 a1 ~ e2@2",
  I: "b1 ~ b1@8 ~@3 b1 b1@2", J: "e2@2 e2@6 e2 g#1@2 e1 ~ a1 b1 c#2", K: "d2@2 c#2@2 b1@2 a1@2 ~ e2 f#2 e2 c#2@2 e2@2",
  L: "a2 ~ a2@8 e2@3 a1@2 a#1", M: "b1 ~ b1@8 f#2@2 b2 f#2 b1@2", N: "e2@2 e2@6 e2 b1 g#1@2 e1@2 b1 c#2",
  O: "a1 ~ a1@4 ~@2 e2 f#2 a2@3 ~@3",
})).s("gm_electric_bass_pick").gain(0.64)

// bass · electric bass pick · soft notes
const bass_soft = note(`<
  ~@56
  [~@13 e2 c#2 a1]
  [b1 ~ b1@6 f#1 b1 ~ b1 b1@2 c2 c#2]
  [d2 ~ d2@4 d2 d#2 e2 ~ e2@3 b1 e2@2]
  [d2@3 c#2@3 b1@3 e2 f#2 e2 c#2@2 e2@2]
  ~
>`).s("gm_electric_bass_pick").gain(0.21)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D E F C D G F C H I J K L I J K M N O C P G O C H I J K L I J K M I J K L Q J K M ~@5 F C H I J K L R ~@4
>`.pickRestart({
  A: "e3@4 [c#4,a4]@4 ~@2 a4@3 c#4@2 a2, a2 ~", B: "~@2 d4@2 a4 ~@2 a4, a2@4 ~ a2@2 ~, ~@2 a3@8 ~ d4@5",
  C: "e3 ~@3 d4@4 g#4@2 ~ a4@2 ~ g#4@2, ~@2 e3@4 ~@4 e3@3 e3@3",
  D: "~@2 f#4@3 a4@3 ~@2 [e3,c#4]@3 [f#3,d4]@2 ~, d3 ~ a2@2", E: "a2 ~@3 c#4@4 ~@2 a4@3 c#4@2 a2, e3 ~@3, ~ a2@6 ~",
  F: "~@2 d4@2 a4 ~@2 a4, a2@4 ~ a2@2 ~, ~@11 d4@5", G: "a2 ~@3 c#4@4 ~@2 a4@3 c#4@2 a2, ~ a2@6 ~",
  H: "~@2 f#4@3 a4@4 [c#4,e4,a4]!3 [e4,a4] [d4,f#4,a4] ~@2, d3 ~", // A A5 D
  I: "[c#4,e4,a4] ~@3 [c#4,e4,a4]@2 [c#4,e4,a4]!4 ~@2 [c#4,e4,a4]@4", // A
  J: "[d4,f#4,b4] ~@3 [d4,f#4,b4]@2 [d4,f#4,b4]!4 ~@2 [d4,f#4,b4]@4", // Bm
  K: "[d4,f#4,a4] ~@3 [d4,f#4,a4]@2 [d4,f#4,a4]!2 [e4,g#4,b4]!2 ~@2 [e4,g#4,b4]@4", // D E
  L: "[d4,f#4,a4]@3 [f#4,a4]@2 [d4,f#4,a4]!2 ~ [c#4,a4]!7 [e4,a4]", // D F#m D F#m A5
  M: "[d4,f#4,a4]@3 [f#4,a4]@2 [d4,f#4,a4]!2 ~ [c#4,e4,a4]!8", N: "a2 ~@3 c#4@4 ~@2 a4@3 c#4@2 a2, e3 ~, ~ a2@6 ~",
  O: "~@2 d4@2 a4 ~@2 a4, b2@4 ~ b2@2 ~, ~@11 d4@5",
  P: "~@2 e4 f#4@2 e4 f#4@2 e3@2 c#4@3 [f#3,d4]@2 ~, d3 ~ a2@2, ~@5 e3@3", // D
  Q: "[c#4,a4] ~@3 [c#4,e4,a4]@2 [c#4,e4,a4]!4 ~@2 [c#4,e4,a4]@4", R: "[c#4,e4,a4] ~@3 [c#4,e4,a4]@2 [c#4,e4,a4]!4 ~@6",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.7)

// chords · electric guitar clean · soft notes · A Bm D E D F#m D A
const electric_guitar_clean_2 = note(`<
  ~@56
  [~@3 [c#4,e4,a4]]
  [[d4,f#4,b4] ~@3 [d4,f#4,b4]@2 [d4,f#4,b4]!4 ~@2 [d4,f#4,b4]@4]
  [[d4,f#4,a4] ~@3 [d4,f#4,a4]@2 [d4,f#4,a4]!2 [e4,g#4,b4]!2 ~@2 [e4,g#4,b4]@4]
  [[d4,f#4,a4]@3 [f#4,a4]@2 [d4,f#4,a4]!2 ~ [c#4,e4,a4]!8]
  ~
>`).s("gm_electric_guitar_clean").gain(0.1).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@11 A B C D E B C D F ~@7 A B C D E B C D F B C D E B C D F ~@7 A B C D E G ~@4
>`.pickRestart({
  A: "~@12 e5 f#5 a5 b5", B: "c#6@6 e6 f#6", C: "c#6 b5@3", D: "a5 b5", E: "d6@2 ~ c#6@2 ~ b5@2 ~@4 e5 f#5 a5 b5",
  F: "d6@2 ~ c#6@2 ~ b5@2 ~@8", G: "c#6@3 ~",
})).s("gm_string_ensemble_1").gain(0.4).pan(1)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@56 [~@6 e6 f#6] [c#6 b5@3] [a5 b5] [d6@2 ~ c#6@2 ~ b5@2 ~@8] ~>")
  .s("gm_string_ensemble_1").gain(0.15).pan(1)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@12 A B C D A B C E ~@8 A B C D A B C E A B C D A B C E ~@8 A B C D F ~@4
>`.pickRestart({
  A: "c#5@6 e5 f#5", B: "c#5 b4@3", C: "d5 e5", D: "d5@2 ~ c#5@2 ~ b4@2 ~@4 e4 f#4 a4 b4", E: "d5@2 ~ c#5@2 ~ b4@2 ~@8",
  F: "c#5@3 ~",
})).s("gm_string_ensemble_1").gain(0.4).pan(0)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft_2 = note("<~@56 [~@6 e5 f#5] [c#5 b4@3] [d5 e5] [d5@2 ~ c#5@2 ~ b4@2 ~@8] ~>")
  .s("gm_string_ensemble_1").gain(0.15).pan(0)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@20 A B C D A B C D A B E D A B E D A B E D F B E D ~@8 A B E D G ~@4
>`.pickRestart({
  A: "[a3,c#4,e4]!8", B: "[b3,d4,f#4,a4]!8", C: "[e3,g#3,b3]!8", D: "[d4,f#4,a4]!4 [a3,c#4,e4]!3 [d4,f#4,a4]",
  E: "[d3,f#3,a3]!4 [e3,g#3,b3]!4", F: "[c#4,e4] [a3,c#4,e4]!7", G: "[a3,c#4,e4]!6 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.03).pan(0)

// chords · acoustic guitar steel · soft notes · A Bm7 D E D A
const acoustic_guitar_steel_2 = note(`<
  ~@56
  [~@6 [a3,c#4,e4]!2]
  [[b3,d4,f#4,a4]!8]
  [[d3,f#3,a3]!4 [e3,g#3,b3]!4]
  [[d4,f#4,a4]!4 [a3,c#4,e4]!3 ~]
  ~
>`).s("gm_acoustic_guitar_steel").gain(0.01).pan(0)

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

// drums · snare
const snare = s("sd").struct("<~@4 A@7 B A@7 C A@7 B A@23 B A@4 D ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x!3 ~ x ~@3", C: "~@2 x ~ x!3 ~", D: "~ x ~@2",
})).gain(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@56 [~@3 x] [~ x ~ x]!3 ~>").gain(0.23)

// drums · hihat
const hihat = s("hh").struct("<A@4 B@7 C B@7 D B@7 C E B@7 E B@14 C E B@3 F ~@4>".pickRestart({
  A: "x!4", B: "x!8", C: "x!4 ~@2 x!2", D: "x!4 ~ x!3", E: "~ x!7", F: "x!6 ~@2",
})).gain(0.7)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@56 [~@6 x!2] [x!8]!3 ~>").gain(0.23)

// drums · crash
const crash = s("cr").struct("<~@28 x ~@7 x ~@15 x ~@8>").gain(0.7)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [x!16]!8 ~@8 [x!16]!16 [~ x ~ x]!4 [x!16]!8 [x!12 ~@4] ~@4>").gain(0.7)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@56 [~@12 x!4] [x!16]!3 ~>").gain(0.23)

// drums · cowbell
const cowbell = s("cb").struct("<~@12 [x!4]!44 [x!3 ~] ~@4>").gain(0.7)

// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct("<~@56 [~@3 x] [x!4]!3 ~>").gain(0.23)

stack(
  bass, bass_soft, electric_guitar_clean, electric_guitar_clean_2, string_ensemble_1, string_ensemble_1_soft,
  string_ensemble_1_2, string_ensemble_1_soft_2, acoustic_guitar_steel, acoustic_guitar_steel_2, kick, snare,
  snare_soft, hihat, hihat_soft, crash, tambourine, tambourine_soft, cowbell, cowbell_soft
)

More by Gallery