Strudelify

Shangri-La

CORDALIS,COSTA

KeyG majorTempo120 bpm
0:00/0:00
// Shangri-La — CORDALIS,COSTA
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: 
// note: Full arrangement: all 114 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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A C D E F@2 G H A C D E F@2 G B A I G H A I G J K L D M A N O P A B A C D E F@2 G H Q C D E F@2 G B A I G H A I
  G J K L D M A N O P A B A C D E F@2 G H A C D E F@2 G B A C D E F@2 G H A C D E F@2 G H A R S ~@8
>`.pickRestart({
  A: "g2@5 ~ d3 ~ d3@3 ~ d2@3 ~", B: "g2 ~ g2 ~ d3 ~ g2 ~@9", C: "g2@5 ~ d3 ~@3 d3 ~ d2@3 ~", D: "c2@5 ~ g2@5 ~ g1@3 ~",
  E: "c2@5 ~ c2 ~ g2 ~ g2 ~ c3 ~@3", F: "[d2@2 a2@2 e3@2 d3@7 ~ a2@7 ~ a2 ~@3 a2 ~ a1@3 ~]/2",
  G: "g2@5 ~ d3@5 ~ d2@3 ~", H: "g2@5 ~ g2 ~ d3 ~ d3 ~ g3 ~@3", I: "d2@5 ~ a2 ~@3 a2 ~ a1@3 ~",
  J: "g2@5 ~ g2 ~@3 g2 ~ d2@2 ~@2", K: "c2@5 ~ g2 ~ g2@3 ~ g1@3 ~", L: "c2@5 ~ g2@2 ~@2 g2 ~ c3@2 ~@2",
  M: "c2@5 ~ g2 ~ g2@4 c3 ~@3", N: "e2@5 ~ b2 ~@3 b2 ~ b1@3 ~", O: "a1@5 ~ e2@5 ~ e1@3 ~",
  P: "d2@5 ~ a2 ~@3 a2 ~ a1@2 ~@2", Q: "g2 g2@4 ~ d3 ~ d3@3 ~ d2@3 ~", R: "g2@5 ~ d3@2 ~@2 g3 ~ g3@2 ~@2",
  S: "g2 ~ d2@2 g1@4 ~@8",
})).s("gm_acoustic_bass").gain(0.35)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  ~@3 A B@5 C@2 D@8 E@4 F G H@4 I@3 J@2 K@3 L@8 M@6 N@2 O@4 P@6 Q@3 R@2 S@3 T U@7 V@2 W@6 X@8 T Y@3 Z@6 ~@9
>`.pickRestart({
  A: "[g3,b3,d4]@15 ~", B: "[[g3,b3,d4,f4]@15 ~@33 [f#3,d4]@31 ~, ~@15 [g3,e4]@31 ~@34, ~@16 c4@63 ~]/5",
  C: "[[g3,b3,d4]@31 ~]/2", // G
  D: "[[g3,b3,d4]@15 ~ [b3,f4]@16 e4@31 ~ [f#3,d4]@31 [g3,b3,d4]@29 ~@4, ~@15 d4@15 ~@2 c4@63 ~@33, ~@16 g3@47 ~@65]/8", // G Bdim D G
  E: "[[g3,b3]@15 ~ f#3@14 ~@2 [g3,b3]@29 ~@3, d4@61 ~@3, ~@15 c4@15 ~@34]/4", F: "[g3,d4], b3@7 ~",
  G: "[c4,d4], f#3@7 ~", H: "[[g3,b3,d4]@23 [b3,d4,f4]@8 ~ [c4,e4]@32, ~@23 g3@39 ~@2]/4",
  I: "[[c4,d#4]@31 ~ [b3,d4]@16, g3@47 ~]/3", J: "[[g#3,d4]@15 ~ c4@16, e4@31 ~, ~@15 a3@15 ~@2]/2",
  K: "[[f#3,c4]@15 [g3,b3]@23 ~@10, d4@13 ~@3]/3", // F#dim G
  L: "[g3@15 ~ [g3,f4]@15 [g3,e4]@31 ~@2 f#3@31 ~ [g3,b3]@32, [b3,d4]@31 c4@63 ~@34, ~ d4]/8", // G7 C G Bm
  M: "[a#3 ~@15 f4@15 e4@31 ~@2 d4@32, g3@63 ~ f#3@30 ~@2, [b3,d4]@31 c4@64 ~]/6", N: "[[g3,b3,d4]@7 ~]/2",
  O: "[[g3,b3]@15 ~ [f#3,c4]@15 ~ b3@31 ~, d4@63 ~, ~@31 g3@31 ~@2]/4", // G F#dim
  P: "[[g3,b3]@15 ~ [f#3,c4]@15 ~@24 f4@7 ~@2 [c4,e4]@32, d4@31 [g3,b3,d4]@32 g3@31 ~@2]/6", // G F#dim C G
  Q: "[[c4,d#4]@31 ~ [b3,d4]@15 ~, g3@47 ~]/3", R: "[[g#3,d4]@15 [a3,c4]@16 ~, e4@31 ~]/2",
  S: "[[f#3,c4]@15 ~ [g3,b3]@24 ~@8, d4@13 ~@3]/3", T: "[g3,b3,d4]",
  U: "[[g3,b3,d4,f4]@15 ~ e4@31 ~ f#3@31 ~ [g3,b3]@31 ~, ~@15 g3@31 ~@2 d4@63 ~, ~@16 c4@63 ~@33]/7", // G7 G
  V: "[[g3,b3,d4]@15 ~ [b3,d4,f4]@15 ~, ~@15 g3@15 ~@2]/2", // G Bdim
  W: "[[g3,e4]@31 ~ d4@31 ~ [b3,d4]@31 ~, c4@21 ~@11, ~@32 f#3@30 ~ g3@31 ~@2]/6", // C Bm
  X: "[[g3,b3,d4]@15 ~ [b3,d4,f4]@16 e4@31 ~ f#3@30 ~@2 [g3,b3]@31 ~, ~@15 g3@47 ~@2 d4@63 ~, ~@32 c4@63 ~@33]/8", // G Bdim G
  Y: "[[b3,d4,f4]@5 c4@11, g3@47 ~, ~@15 e4@31 ~@2]/3", Z: "[f#3@31 ~ [g3,b3]@59 ~@5, d4@23 ~]/6",
})).s("gm_synth_strings_1").gain(0.15)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~ A B C D E@2 F G C H I D E J K L M N O P Q C R S T U V W X@2 C Y Z G O N O AA E@2 G@2 O@3 AB E AC G@2 O N O G C@2 O G
  AD AE E@2 X@2 AF Y Z G O N O AB E@2 G@2 O@3 AB E@2 AG@2 O N O AB E@2 G@2 O@3 AB E@2 G@2 O@4 AH ~@8
>`.pickRestart({
  A: "~@2 [g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  B: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~@9", // G
  C: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  D: "[d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~", // Bdim
  E: "[c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C
  F: "[d4,f#4,a4] ~ [d4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~", // D F#dim
  G: "[c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~", // F#dim
  H: "[d4,g4,b4] ~ [d4,g4,b4] ~ [g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  I: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  J: "[c4,e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C Em C Em C
  K: "[c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~", // F#dim F#m
  L: "[c4,f#4,a4] ~ [f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~", // F#dim F#m F#dim F#m F#dim F#m
  M: "[b3,g4] ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] ~ [b3,g4] ~", // Em
  N: "[b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~@9", // G
  O: "[b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~", // G
  P: "[c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~", // F#dim F#m F#dim F#m
  Q: "[d4,g4,b4,c5] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  R: "[b3,d4,f4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~", // G7 G
  S: "[c4,f#4,a4] ~ [f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~ [c4,f#4,a4] ~ [c4,f#4,a4] ~ [f#4,a4] ~", // F#dim F#m F#dim F#m F#dim F#m
  T: "[d4,g4,b4] ~ [g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~", // G
  U: "[d4,g4,b4] ~ [g4,b4] ~ [d4,g4,b4] ~ [g4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~ [d4,f4,b4] ~", // G Bdim
  V: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  W: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,f4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  X: "[c4,d#4,g4] ~ [c4,d#4,g4] ~ [c4,d#4,g4] ~ [c4,d#4,g4] ~ [c4,d#4,g4] ~ [c4,d#4,g4] ~ [c4,d#4,g4] ~ [c4,d#4,g4] ~", // Cm
  Y: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // E
  Z: "[c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~ [c4,e4,a4] ~", // Am
  AA: "[b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~", // G7 Bdim G7
  AB: "[b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~ [b3,f4,g4] ~", // G7
  AC: "[c4,e4,g4] ~ [e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~", // C Em C
  AD: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,g4,b4] ~", // G G7 G
  AE: "[d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~ [d4,f4,g4,b4] ~", // G7
  AF: "[b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,f4,g4] ~", // G G7
  AG: "[d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // D
  AH: "[b3,d4,g4] ~@15", // G
})).s("gm_pizzicato_strings").gain(0.3)

// other · trumpet
const trumpet = note("<~@70 A@3 B@4 C@4 D@6 ~@27>".pickRestart({
  A: "[~@8 b4@4 c5@2 d5@14 c5@2 b4@10 b4@5 a4@2 ~, ~@14 c5 ~@33]/3",
  B: "[g4@8 e4@17 ~ e5@12 d5@15 ~ c5@2 c5@3 b4@2 a#4@2 ~]/4",
  C: "[b4@24 ~ b4@3 c5@2 ~ d5@13 c5@2 b4@10 b4@5 ~ a4@2, ~@44 d5 ~@19]/4",
  D: "[g4@8 e4@16 ~ e5@13 d5@18 ~@3 d5 f#4@3 g4@21 ~@12, ~@56 c5@5 ~@35]/6",
})).s("gm_trumpet").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~ A B A@15 B A@17 B A@15 B A@17 B A@15 B A@18 C ~@8>".pickRestart({
  A: "x ~ x!2", B: "x ~ x!2 ~@4", C: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~ A ~ A@15 ~ A@17 ~ A@15 ~ A@17 ~ A@15 ~ A@19 ~@8>".pickRestart({
  A: "~ x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~ A ~ A@15 ~ A@17 ~ A@15 ~ A@17 ~ A@15 ~ A@18 B ~@8>".pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x ~ x!3 ~ x ~ x ~@7",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<[~@3 x] ~@113>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~ A ~ A@15 ~ A@17 ~ A@15 ~ A@17 ~ A@15 ~ A@18 ~@9>".pickRestart({
  A: "~ x",
})).gain(0.35)

// drums · bongos
const bongos = s("bongo:4").struct("<~ A B A@15 B A@17 B A@15 B A@17 B A@15 B A@19 ~@8>".pickRestart({
  A: "x ~@2 x ~@12", B: "x ~@9 x!6",
})).gain(1.04)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~ A B A@15 B A@17 B A@15 B A@17 B A@15 B A@18 B ~@8>".pickRestart({
  A: "~ x ~@2 x!2 ~@2", B: "~ x ~@6",
})).gain(1.04)

// drums · congas
const congas = s("conga:13").struct("<~ A B A@15 B A@17 B A@15 B A@17 B A@15 B A@19 ~@8>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@3 x ~@12",
})).gain(1.59)

// drums · congas
const congas_2 = s("conga:18").struct("<~ A B A@15 B A@17 B A@15 B A@17 B A@15 B A@18 ~@9>".pickRestart({
  A: "~@6 x!2", B: "~@2 x!2 ~@4",
})).gain(1.59)

// drums · ht
const ht = s("ht").struct(`<
  ~ A@3 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@4 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2
  ~@2 A@2 ~@2 A@4 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@10
>`.pickRestart({
  A: "~@3 x",
})).gain(0.35)

// drums · shaker
const shaker = s("sh").struct("<~ A B A@15 B A@17 B A@15 B A@17 B A@15 B A@18 B ~@8>".pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x ~ x!3 ~ x ~@9",
})).gain(0.3)

stack(
  bass, synth_strings_1, pizzicato_strings, trumpet, kick, snare, hihat, crash, ride, bongos, bongos_2, congas,
  congas_2, ht, shaker
)

More by CORDALIS,COSTA