Strudelify

A Rose in the Wind (Chris Lord-Alge remix)

Anggun

KeyA♭ majorTempo81 bpm
0:00/0:00
// A Rose in the Wind (Chris Lord-Alge remix) — Anggun
// 81 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 · synth bass 2
const bass = note(`<
  ~@8 A@3 B A@3 B C D E F C D E G ~@4 A@3 B A@3 B C D E F C D E F C D E H I J K L ~@3 A@3 B A@3 B C D E F C D E F C D E
  F C D M N@2
>`.pickRestart({
  A: "db2 ~ eb2@4 db2 eb2!2 db2 eb2 db2 gb2 ~ ab2 gb2", B: "b1 ~ b1@4 b1 db2@3 db2@2 bb1 db2@2 bb1",
  C: "c2@3 ab2@3 c2@2", D: "db2@3 ab2@4 b1", E: "bb1@3 gb2@3 gb1@2", F: "ab1@3 eb2@5", G: "db2", H: "d2", I: "b1",
  J: "c2", K: "bb1@7 c2", L: "eb2", M: "bb1@6 gb2@7 gb1@3", N: "[~ ab1@18 ~@13]/2",
})).s("gm_synth_bass_2").gain(0.72)

// other · marimba
const marimba = note("<~@4 A B C D E F G H E F G H ~@8 A B C D E F G H E F G H ~@44>".pickRestart({
  A: "eb2 ~ eb3 bb2 eb2 db3 bb2 eb2 eb3 bb2 eb2 gb3 ~ bb2 ab3 gb3",
  B: "eb2 bb2 eb3 eb2 bb2 db3 eb2 bb2 eb3 eb2 bb2 gb3 ~ bb2 ab3 gb3",
  C: "eb2 bb2 eb3 eb2 bb2 db3 eb2 bb2 eb3 eb2 bb2 gb3 ~ eb2 ab3 gb3",
  D: "b1 gb2 db3 b2 b1 eb3 gb2 ~ db2 ~ ab2 db3 ~ db2 eb3 db3", E: "eb2!2 bb2 eb2 ~ eb3 ~ eb2!3 bb2 eb2 ~ eb2 ~ eb2",
  F: "eb2!2 bb2 eb2!2 eb3 ~ eb2!3 bb2 eb2 ~ eb2 db3 eb2", G: "eb2!2 bb2 eb2!2 eb3 ~ eb2!2 ab2 eb2!2 bb2 eb2!2 db3",
  H: "b1!2 ~ gb2 b1 eb3 gb2!2 db2!2 ~ db2 ~ [db2,db3] db2 ab2", // Db
})).s("gm_marimba").gain(0.32)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A@3 B@3 C ~@8 D E F G D E F H I@4 ~@8 D E F J D E F J D E F K L M N O@4 ~@8 D E F J D E F J D E F J D E P@3
>`.pickRestart({
  A: "[~ eb4@5]/3", B: "[eb2,eb3]/3", C: "[b1,b2,gb3,b3,gb4] [gb2,db3,gb3,db4]",
  D: "~ c4 [ab4,eb6] c4 ~ c4 ab4 c4, [c3,ab3]", E: "~ db4 [ab4,db6] db4 ~ db4 ab4 db4, [db3,ab3]",
  F: "~ db4 [gb4,db6] db4 ~ db4 gb4 db4, [bb2,gb3]", // Gb5 Ebm
  G: "~@2 c4@2 ~ c4@3 ~@2 c4@2 ab4@2 c4@2, [ab2,ab3], ~@4 [ab4,eb6]@3 ~@9", H: "[db3,db4,ab5]", I: "[eb2,bb2,eb3]/4",
  J: "~@2 c4@2 ~ c4@3 ~@2 [c4,ab5]@2 [ab4,c6]@2 [c4,ab5]@2, [ab2,ab3], ~@2 bb5@3 ~@3, ~@2 ab4 ~@5", // Fm Ab Fm Ab
  K: "[d3,d4,db5,a5,db6]@7 ~", L: "[b2,b3,db5,gb5,bb5]@7 ~", M: "[c3,c4,c5,eb5,ab5]@7 ~",
  N: "~@2 gb5 f5, [gb3,db4,gb4]@7 ~", O: "eb5/4",
  P: "[~@2 db4@2 [gb4,db6]@2 db4@2 ~@3 db4@2 gb4@2 db4@2 [ab2,ab3,eb4,ab4]@18 ~@13, [bb2,gb3]@17 ~@31]/3", // Gb5 Ab5 Ebm
})).s("gm_string_ensemble_2").gain(0.64)

// other · piccolo
const piccolo = note("<A@2 B C D E@2 F ~@16 D E@2 F ~@52>".pickRestart({
  A: "[~@11 bb6@9 ~@2 eb7@9 ~]/2", B: "~@2 db7@2 bb6@3 ~", C: "~@2 bb6@12 eb7 ~", D: "~@3 bb6@9 eb7 ~@2 bb6",
  E: "[e7@6 eb7 ~ bb6 eb7 ~ [ab6,bb6,db7] db7@7 ab6 bb6@3 ab6 b6 ~@6 ab6, ~@12 eb7 ~@19]/2", F: "bb6@7 ab6 eb7 ~@7",
})).s("gm_piccolo").gain(0.32).pan(0.4)

// other · celesta
const celesta = note("<A B@3 C D@3 ~@16 C D@3 ~@52>".pickRestart({
  A: "~@2 eb4@2 eb5@2 ~ eb5@3 eb4@3 ~ eb4@2, eb3 ~@7, ~ bb3@2 ~@3 bb3@2 ~@8",
  B: "[e5@2 ~@2 bb3@2 b5@2 ~@2 eb5@2 ~@7 eb5@2 ~ ab5@2 eb3@2 ~@6 eb5@2 ~@4 eb5@2 ~@6 [bb3,e5]@2, ~@2 bb5@4 ~@2 eb4@2 ~@2 eb3@2 ab5@2 ab3@2 eb4@2 ~@6 ab4@4 ~@5 eb5@2 bb5@3 b5@4 ab5@4, ~@9 bb4@2 ~@2 eb5@2 e5@4 ~@2 eb5@2 ~@6 bb4@4 ~ bb4@2 e5@2 ~@10, ~@17 b3@2 ~@9 eb3@3 bb3@2 ~@5 eb3@4 bb3@4 ~@2]/3", // Bbdim
  C: "~@2 eb4@2 eb5@2 ~ eb5@3 eb4@3 ~ eb4@2, [eb3,e5]@3 ~@13, ~ bb3@2 ~@3 bb3@2 ~@8", // Emaj7
  D: "[e5@2 ~@2 bb3@2 b5@2 ~@2 eb5@2 ~@7 eb5@2 ~ ab5@2 eb3@2 ~@10 bb5@2 ~@2 gb5@4 db5@4, ~ bb5@2 ~ eb4 ~ eb3 ab5 ab3 eb4 ~@3 ab4@2 ~ eb5 bb5 ~@6, ~@9 bb4@2 ~@2 eb5@2 e5@4 ~@2 eb5@2 ~@6 bb4@4 ab5@2 b5@2 ~@11, ~@17 b3@2 ~@9 eb3@3 bb3@2 ~@5 gb3@4 ~@6]/3",
})).s("gm_celesta").gain(0.4)

// chords · piano
const piano = note("<~@17 A@4 B C@8 ~@7 D@8 B C@8 ~@10 E@8 F@5 ~@3>".pickRestart({
  A: "[~@6 [bb3,db4,e4,ab4]@15 ~ [db3,gb3,ab3]@42]/4", B: "~@3 [bb3,db4,e4,ab4]@5", C: "[~@3 [db3,gb3,ab3]@61]/8",
  D: "[~@6 [bb3,db4,e4,ab4]@15 ~ [db3,gb3,ab3]@47 ~ [bb3,db4,e4,ab4]@15 ~ [db3,gb3,ab3]@42]/8", // Bbm7b5 Dbsus4 Bbm7b5 Dbsus4
  E: "[~@6 [db3,e3,ab3]@63 ~ [bb3,db4,e4,ab4]@15 ~ [db3,gb3,ab3]@42]/8", // Dbm Bbm7b5 Dbsus4
  F: "[~@6 [bb3,db4,e4,ab4]@15 ~ [db3,gb3,ab3]@47 ~ [db3,e3,ab3] ~@9]/5", // Bbm7b5 Dbsus4 Dbm
})).s("gm_piano").gain(0.05)

// other · shakuhachi
const shakuhachi = note(`<
  A B C@2 D@4 E@2 F G E@2 F G ~@8 H@4 E@2 F G E@2 F G ~@14 I@3 J@2 E@2 F G E@2 F G ~@17
>`.pickRestart({
  A: "~@10 gb5 ab5 bb5@2 b5@2", B: "bb5@7 ~@9", C: "[~@10 ab5 bb5 db6@8 c6@5 ~@7]/2",
  D: "[~@11 bb5 db6@16 c6@5 ~@15 bb5@4 b5@4 ab5@3 gb5@2 f5@3, eb4]/4", E: "[db5 ~ eb5@30]/2", F: "db5", G: "b4 db5",
  H: "[ab5@26 ~@6 eb5@6 gb5@2 ab5@23 ~, eb4]/4", I: "[~@14 eb5@23 ~@3 eb5@8]/3",
  J: "[~ bb4@11 ~@3 gb4@2 ab4@2 bb4@4 ab4@2 bb4@5 ~@2]/2",
})).s("gm_shakuhachi").gain(0.24)

// chords · pad warm
const pad_warm = note("<~@8 A@3 B A@3 B ~@12 A@3 B A@3 B ~@19 A@3 B A@3 B ~@17>".pickRestart({
  A: "[eb4@2 db4, [eb3,bb3]]/3", B: "[b2,gb3,b3] [db3,ab3,db4]",
})).s("gm_pad_warm").gain(0.56)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@16 A B C D A B C E ~@12 A B C D A B C D A B C F G H I@2 ~@11 A B C D A B C D A B C D A B J@3
>`.pickRestart({
  A: "~@7 eb4, ab3@5 ab3@3 ab3@5 ab3@3, ~ c4@8 c4@7, ~ eb4@2 eb4@2 eb4@2 ~, ~@3 ab4@8 ab4@5",
  B: "~@7 e4, ab3@5 ab3@3 ab3@5 ab3@3, ~ db4@5 [db4,e4]@4 e4@4 ~@2, ~@2 e4@4 ~@3 db4@7, ~@3 ab4@8 ab4@5", // Dbm
  C: "~@7 db4, gb3@5 gb3@3 gb3@5 gb3@3, ~ bb3@8 bb3@7, ~ db4@2 db4@2 db4@2 ~, ~@3 gb4@8 gb4@5",
  D: "~@3 c5@2 ~ c5@2 ~@4 db5 ~ eb4@2, ab3@5 ab3@3 ab3@5 [ab3,c5]@3, ~ c4@7 db5@2 eb4@4 ~@2, ~@2 eb4@4 eb4@3 c4@7, ~@10 db5 ab4@5", // Ab
  E: "eb4@7 ~@2 db4@2 ~ db4@2 ~ eb4, ab4, ab3@11 ab3@5, db4@9 ~@5 db4@2, ~@7 eb4@8 ~", F: "[a3,d4,e4,a4]@15 ~",
  G: "~@3 gb4@5, b3@15 ~, ~ eb4@15, ~ gb4@2 ~@5, ~@3 bb4@13", H: "~ ab4@15, [ab3,c4,eb4]@15 ~",
  I: "[~@7 db5@8 ~@2 eb4@9 ~@6, gb3 ~, ~ db4@4 db4@11 [bb3,db4]@10 ~@6, ~ gb4@2 gb4@5 ~@8, ~@3 db5@4 ~@8 eb3@10 ~@7]/2", // Bbm
  J: "[~@15 db4@2 ~ [eb4,ab4]@17 ~@13, gb3@5 gb3@3 gb3@5 ~ gb3@3 [ab3,c4]@17 ~@14, ~ bb3@8 bb3@8 ~@31, ~@2 db4@4 db4@4 ~ db4@4 ~@33, ~ gb4@3 gb4@2 ~@10]/3", // Ab5 Ab
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.6)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@16 A@2 B C A@2 B D ~@12 A@2 B C A@2 B C A@2 B E F C B ~@12 A@2 B C A@2 B C A@2 B C A@2 B G@2
>`.pickRestart({
  A: "[eb3 db3, [ab2,ab3]]/2", B: "[gb2,db3,gb3]", C: "[ab2,eb3,ab3]", D: "[ab2,db3,ab3]", E: "[a2,d3,a3]",
  F: "[gb2,b2,gb3]", G: "[~ [ab2,eb3,ab3]@18 ~@13]/2",
})).s("gm_overdriven_guitar").gain(0.48).pan(0.4)

// other · whistle
const whistle = note("<~@28 A@2 B@2 A@2 B@2 ~@19 A@2 B@2 A@2 B@2 ~@17>".pickRestart({
  A: "~@2 eb6 ~ ab6 ~@2 bb6 ~@2 eb6 ~ eb7 ~ eb6 ~",
  B: "[~@2 eb6 ~ ab6 ~@2 bb6 ~@2 eb6 ~ eb7 ~ eb6 db7@3 b6 bb6 ab6 ~@2 db7@3 b6 bb6 ab6@2 bb6@2]/2",
})).s("gm_whistle").gain(0.32)

// other · pad choir
const pad_choir = note(`<
  ~@47
  [d4 a4 d5 gb5 d6 db6 d6@2 ~@8]
  [~ gb4 bb4 eb5 bb5@2 bb5 eb5 gb5@2 ~@6, b3 ~@7]
  [ab3 eb4 ab4 eb5 ab5 eb5 ab5 eb5 ~@8]
  [bb3 db4 bb4 db5 gb5 ~@2 f5 ~@2 db5@6]
  [eb5@15 ~]
  ~@28
>`).s("gm_pad_choir").gain(0.56).pan(0.6)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<~@51 [eb3!16]!12 ~@17>").s("gm_lead_8_bass_lead").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 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 A B A B A B A B A B A B A B A C ~@3 A B A B A B A
  B A B A B A B A B A B A B A B D E ~
>`.pickRestart({
  A: "x ~@6 x!2 ~ x ~@5", B: "x ~@3 x!2 ~@2", C: "x", D: "x ~@7 x ~@2 x ~@4", E: "~ x ~@14",
})).gain(0.8)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@19 A ~@3 A ~@15 A ~@3 A ~@22 A ~@3 A ~@3 A ~@2 B ~@2>".pickRestart({
  A: "~@5 x!2 ~@6 x ~@2", B: "~@5 x!2 ~@7 x ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!4 ~ x ~ x]!47 [x!8]!4 [x!4 ~ x ~ x]!22 [x ~ x ~ x ~ x ~@4 x ~@3 x] ~@2>")
  .gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 [~@2 x!2]!47 ~@4 [~@2 x!2]!22 [~@8 x ~@4 x ~@2] ~@2>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@54 [~@13 x!2 ~] ~@25>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@19 A ~@3 A ~@15 A ~@3 A ~@22 A ~@3 A ~@3 A ~@3 B ~>".pickRestart({
  A: "~@15 x", B: "x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A B C ~ C B C ~ C B C ~ C D ~@3 D ~@3 B C ~ C B C ~ C B C ~ C D ~@3 D ~@3 D ~@10 B C ~ C B C ~ C D ~@3 D ~@3 D ~@3
  D ~@2 E ~
>`.pickRestart({
  A: "~@5 x!11", B: "x ~@14 x", C: "~@15 x", D: "x", E: "~ x ~@14",
})).gain(0.4)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@2 [~@11 x!5] [x!5 ~@11] ~@76>").gain(0.16)

// drums · triangle
const triangle = s("triangles:35").struct("<~@8 A ~@3 A ~@15 A ~@3 A ~@22 A ~@3 A ~@20>".pickRestart({
  A: "~@7 x",
})).gain(4.18)

// drums · shaker
const shaker = s("sh").struct("<~@4 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!73 [~ x ~ x ~ x ~ x ~ x ~@2 x ~ x ~] ~@2>")
  .gain(0.4)

stack(
  bass, marimba, string_ensemble_2, piccolo, celesta, piano, shakuhachi, pad_warm, electric_guitar_clean,
  overdriven_guitar, whistle, pad_choir, lead_8_bass_lead, kick, snare, snare_soft, hihat, hihat_soft, mid_tom,
  high_tom, crash, crash_soft, triangle, shaker
)

More by Anggun