Strudelify

lupang hinirang

Daniel Valenzuela

KeyA♭ majorTempo95 bpm
0:00/0:00
// lupang hinirang — Daniel Valenzuela
// 95 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Tenor/Bass" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5917511; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 24 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/4)

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

// chords · piano · "Soprano/Alto"
const piano = note("<A B A C A D A E F G F H F G F I J K L M J K L N>".pickRestart({
  A: "ab4@4 g4@3 bb4 ab4@4 eb4@4", B: "bb4@3 c5@2 db5@3 c5@6 bb4@2 c5@8 ab4@8", C: "bb4@3 c5@2 db5@3 c5@6 bb4@2 ab4@16",
  D: "[eb4,bb4]@3 [eb4,c5]@2 [eb4,db5]@3 [eb4,c5]@6 [eb4,bb4]@2 [c4,c5]@8 [c4,ab4]@8", // Eb5 Cm Eb7 Cm Eb5 C Fm
  E: "[g4,bb4]@3 [ab4,c5]@2 [bb4,db5]@3 [ab4,c5]@6 [eb4,bb4]@2 [eb4,ab4]@8 ab4@3 g4@2 ab4@3", // Gm Ab Bbm Ab Eb5 Ab5
  F: "[g4,bb4]@3 [g4,bb4] eb4@3 eb4 [g4,bb4]@3 [g4,bb4] eb4@3 eb4", // Gm
  G: "[ab4,c5]@6 [bb4,db5]@2 [c5,eb5]@6 [db5,f5]@2 [c5,eb5]@8 ab4@3 g4@2 ab4@3", // Ab Bbm Cm Db Cm
  H: "[eb4,c5]@3 [f4,db5]@2 [eb4,c5]@3 [db4,bb4]@3 [eb4,c5]@2 [db4,bb4]@3 [c4,ab4]@8 ab4@3 g4@2 ab4@3", // Cm Db Cm Gb Cm Gb Fm
  I: "[eb4,c5]@3 [f4,db5]@2 [eb4,c5]@3 [db4,bb4]@3 [eb4,c5]@2 [db4,bb4]@3 [c4,ab4]@8 ab4@3 f4@2 ab4@3", // Cm Db Cm Gb Cm Gb Fm
  J: "[ab4,db5]!2 [c5,eb5]!2", K: "[db5,f5]@6 [ab4,eb5]@2 [f4,db5]@6 [ab4,eb5]@2 [db5,f5]@8 gb5@3 f5@2 eb5@3",
  L: "[ab4,f5]@4 [bb4,db5]@4 [ab4,eb5]@4 [ab4,c5]@3 [ab4,c5]", M: "[f4,db5]@24 ab4@3 f4@2 ab4@3", N: "[f4,db5]@3 ~",
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Tenor/Bass"
const bass = note("<A B A C A D A E F G F H F G F I J K L M J K L N>".pickRestart({
  A: "ab3@4 g3@3 bb3 ab3@4 eb3@4", B: "eb3@3 eb3@2 eb3@3 eb3@6 eb3@2 ab3@8 ab3@8",
  C: "eb3@3 eb3@2 eb3@3 eb3@6 eb3@2 ab3@16",
  D: "[eb3,db4]@3 [eb3,eb4]@2 [eb3,f4]@3 [eb3,eb4]@6 [eb3,db4]@2 [ab3,eb4]@8 [ab3,c4]@8", // Eb7 Eb Ebsus2 Eb Eb7 Ab5 Ab
  E: "[eb3,db4]@3 [eb3,db4]@2 [eb3,db4]@3 [eb3,db4]@6 [eb3,db4]@2 [ab3,eb4]@8 ab3@3 g3@2 ab3@3", // Eb7 Ab5
  F: "[eb3,bb3]@3 [eb3,bb3] [bb2,eb3]@3 [bb2,eb3] [eb3,bb3]@3 [eb3,bb3] [bb2,eb3]@3 [bb2,eb3]", // Eb5
  G: "[ab2,eb3]@6 [ab2,eb3]@2 [ab2,eb3]@6 [ab2,eb3]@2 [ab2,eb3]@8 ab3@3 g3@2 ab3@3", // Ab5
  H: "[eb3,c4]@3 [f3,db4]@2 [eb3,c4]@3 [db3,bb3]@3 [eb3,c4]@2 [db3,bb3]@3 [c3,ab3]@8 ab3@3 g3@2 ab3@3", // Cm Db Cm Gb Cm Gb Fm
  I: "[eb3,c4]@3 [f3,db4]@2 [eb3,c4]@3 [db3,bb3]@3 [eb3,c4]@2 [db3,bb3]@3 [c3,ab3]@8 ab3@3 f3@2 ab3@3", // Cm Db Cm Gb Cm Gb Fm
  J: "[db3,db4]!2 [ab2,eb4]!2", // Db Ab5
  K: "[ab3,db4]@6 [ab3,eb4]@2 [db3,db4]@6 [ab3,eb4]@2 [ab3,f4]@8 [gb3,gb4]@3 [f3,f4]@2 [eb3,eb4]@3", // Db5 Ab5 Db Ab5 Db Gb F Eb
  L: "[ab3,f4]@4 [f3,db4]@4 [gb3,eb4]@4 [ab3,c4]@3 [ab3,c4]", M: "[f3,db4]@24 ab3@3 f3@2 ab3@3", N: "[f3,db4]@3 ~",
})).s("gm_electric_bass_finger").gain(0.3)

stack(piano, bass)