Strudelify

There Is a Star

Pharao

KeyF♯ majorTempo143 bpm
0:00/0:00
// There Is a Star — Pharao
// 143 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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 1 · "SYN BASS 1"
const bass = note(`<
  ~@8 A@2 B C A@2 B C A@2 B C A@2 B C A@3 D A@3 D A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@3 D E@3 F A@3 D A@3
  D A@2 B C A@2 B C A@3 D E@3 F ~@8 A@2 B C A@2 B C A@2 B C A@2 B C ~
>`.pickRestart({
  A: "~ d#2 ~ d#2 ~ d#2 ~ d#2", B: "~ c#2 ~ c#2 ~ c#2 ~ c#2", C: "~ a#1 ~ a#1 ~ a#1 ~ a#1",
  D: "~ f2 ~ f2 f#1 f#2 g#1 g#2", E: "~ b1 ~ b1 ~ b1 ~ b1", F: "~ b1 ~ b1 ~ b1 c#1 c#2",
})).s("gm_synth_bass_1").gain(0.17)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@4 D@4 ~@8 A@2
  B@2 A@2 B@2 C@4 D@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~
>`.pickRestart({
  A: "[a#4 b3, [d#4,f#4]@31 ~]/2", B: "[[f#4,g#4] [a#3,f4], c#4@31 ~]/2",
  C: "[d#5@32 ~@16 f5@15 ~, [f#4,a#4]@63 ~, ~ c#5]/4", D: "[d#5@2 ~ g#5, b4, f#4@3 ~, ~ c#5]/4",
})).s("gm_synth_strings_1").gain(0.04)

// other · synth strings 1 · "SYN STR 1"
const synth_strings_1_2 = note(`<
  A B C D A B C D ~@24 A B C D A B C D ~@8 A B C D A B C D ~@16 A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "[d#5,d#6] ~ [a#4,a#5] ~ [d#5,d#6] ~ [a#4,a#5] ~ [d#5,d#6] ~ [a#4,a#5] ~ [d#5,d#6] ~ [a#4,a#5] ~", // D# A# D# A# D# A# D# A#
  B: "[f#5,f#6] ~ [a#4,a#5] ~ [f#5,f#6] ~ [a#4,a#5] ~ [a#5,a#6] ~ [g#5,g#6] ~ [f#5,f#6] ~ [f5,f6] ~", // F# A# F# A# G# F# F
  C: "[c#5,c#6] ~ [g#4,g#5] ~ [c#5,c#6] ~ [g#4,g#5] ~ [c#5,c#6] ~ [g#4,g#5] ~ [c#5,c#6] ~ [g#4,g#5] ~", // C# G# C# G# C# G# C# G#
  D: "[f5,f6] ~ [g#4,g#5] ~ [f5,f6] ~ [g#4,g#5] ~ [c#5,c#6] ~ [f5,f6] ~ [f#5,f#6] ~ [g#5,g#6] ~", // F G# F G# C# F F# G#
})).s("gm_synth_strings_1").gain(0.17)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@16 A B C D A B C D ~@16 A B C D A B C D ~@8 E@2 F@2 G@2 H@2 ~@16 E@2 F@2 G@2 H@2 ~@16 A B C D A B C D ~
>`.pickRestart({
  A: "~@2 f#4@2 f4@2 f#4 d#4@2 ~@7", B: "~@2 [d#4,f#4]@2 ~@2 [d#4,f#4]@3 ~ [c#4,f4]@2 f#4@2 g#4@2",
  C: "~@2 f4@2 d#4 ~ f4 c#4@2 ~ [d#4,f#4]@2 ~@2 [d#4,f#4]@2", D: "~ [c#4,f4] ~ [c#4,f4] ~ d#4 f4 f#4",
  E: "[~@2 [f#4,a#4]@2 f4@2 ~@4 g#4 ~@3 g#4 ~@3 f#4 ~@3 f#4@2 ~@2 f4@2 f#4@2 g#4@2, a#3@31 ~, ~@3 [f#4,a#4] ~@12, ~@7 d#4@10 ~@15]/2", // F#
  F: "[~@2 [f#4,a#4]@2 f4@2 ~@4 g#4 ~@3 g#4@2 ~@2 f#4 ~@3 f#4@2 ~@2 f4@2 f#4@2 g#4@2, a#3, ~@3 [f#4,a#4] ~@12, ~@7 d#4@10 ~@15]/2", // F#
  G: "[~@2 [f#4,a#4]@2 f4@2 [f#4,a#4] ~@3 g#4 ~@3 g#4 ~@3 f#4 ~@3 f#4 ~@3 f4@2 f#4@2 g#4@2, b3@31 ~, ~@7 d#4@10 ~@15]/2", // F#
  H: "[~@2 [f#4,a#4]@2 f4@2 [f#4,a#4] ~@3 g#4 ~@3 g#4 ~@3 f#4 ~@3 f#4 ~@3 f4@2 f#4@2 g#4@2, b3@15 ~, ~@7 d#4@9 ~@16]/2", // F#
})).s("gm_acoustic_guitar_steel").gain(0.21)

// other · clavinet
const clavinet = note("<~@32 A B C D E B C D ~@73>".pickRestart({
  A: "~ a#3 c#4 d#4 a#3 c#4 d#4 a#3 c#4 d#4 a#3 b3 d#4 a#3 b3 d#4",
  B: "a#3 b3 d#4 a#3 b3 d#4 a#3 b3 d#4 g#3 b3 c#4 g#3 b3 c#4 g#3",
  C: "b3 c#4 g#3 b3 c#4 g#3 b3 c#4 g#3 b3 c#4 g#3 b3 c#4 g#3 b3",
  D: "c#4 g#3 b3 c#4 g#3 b3 c#4 g#3 b3 c#4 g#3 b3 c#4 g#3 b3 c#4",
  E: "g#3 a#3 c#4 d#4 a#3 c#4 d#4 a#3 c#4 d#4 a#3 b3 d#4 a#3 b3 d#4",
})).s("gm_clavinet").gain(0.12)

// chords · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@16 A B C D A B C D ~@16 E B C D A F C D ~@8 G H I J K L M N ~@16 G H I J K L M N ~@25
>`.pickRestart({
  A: "[d#5,f#5,a#5]!3 ~ [d#5,f#5,a#5]!2 [d#5,f#5,a#5]@2 [d#5,f#5,a#5]!2 [d#5,f#5,a#5]@2 [d#5,f#5,a#5]!2 [d#5,a#5]@2, ~@14 f#5 ~", // D#m D#5
  B: "[b4,d#5,f#5]!3 ~ [b4,d#5,f#5]!2 [d#5,f#5] ~ [b4,d#5,f#5]!2 [d#5,f#5] ~ [b4,d#5,f#5]!2 [d#5,f#5] ~, ~@3 b4 ~ b4 ~ b4", // B D#m B D#m B D#m
  C: "[c#5,f#5,g#5]!2 [c#5,g#5] ~ [c#5,f#5,g#5]!2 [f#5,g#5]@2 [c#5,f#5,g#5]!2 [c#5,f#5]@2 [c#5,f#5,g#5]!2 [c#5,f#5,g#5]@2, ~@2 f#5@2 ~@2 c#5 ~@3 g#5 ~@5", // C#sus4 C#5 C#sus4 F#sus2 C#sus4 F#5 C#sus4
  D: "[c#5,f5,g#5]!2 [c#5,f5,g#5]@2 [c#5,f5,g#5]!2 [c#5,f5,g#5]@2 [c#5,f5,g#5]!2 [c#5,f5,g#5]@2 [c#5,f5,g#5]!2 [c#5,f5]@2, ~@14 g#5 ~", // C#
  E: "[d#5,f#5,a#5]!2 [d#5,a#5]@2 [d#5,f#5,a#5]!2 [d#5,f#5,a#5]@2 [d#5,f#5,a#5]!2 [d#5,f#5,a#5]@2 [d#5,f#5,a#5]!2 [d#5,a#5]@2, ~@2 f#5 ~@11 f#5 ~", // D#m D#5 D#m D#5
  F: "[b4,d#5,f#5]!2 [d#5,f#5] ~ [b4,d#5,f#5]!2 [d#5,f#5] ~ [b4,d#5,f#5]!2 [d#5,f#5] ~ [b4,d#5,f#5]!2 [d#5,f#5] ~, ~ b4 ~ b4 ~ b4 ~ b4", // B D#m B D#m B D#m B D#m
  G: "[f#4,a#4,d#5]!3 ~ [f#4,a#4,d#5]!2 [f#4,a#4,d#5]@2 [f#4,a#4,d#5]!2 [f#4,a#4,d#5]@2 [f#4,a#4,d#5]!2 [a#4,d#5]@2, ~@14 f#4 ~", // D#m D#5
  H: "[f#4,a#4,d#5]!3 ~ [f#4,a#4,d#5]!2 [f#4,a#4] ~ [f#4,a#4,d#5]!2 [f#4,a#4] ~ [f#4,a#4,d#5]!2 [f#4,a#4] ~, ~@3 d#5 ~ d#5 ~ d#5", // D#m F# D#m F# D#m F#
  I: "[f#4,a#4,c#5]!2 [a#4,c#5] ~ [f#4,a#4,c#5]!2 [f#4,a#4]@2 [f#4,a#4,c#5]!2 [f#4,c#5]@2 [f#4,a#4,c#5]!2 [f#4,a#4,c#5]@2, ~@2 f#4@2 ~@2 c#5 ~@3 a#4 ~@5", // F# A#m F# F#5 F#
  J: "[f#4,a#4,c#5,f5]!2 [f#4,a#4,c#5,f5]@2 [f#4,a#4,c#5,f5]!2 [f#4,a#4,c#5,f5]@2 [f#4,a#4,c#5,f5]!2 [f#4,a#4,c#5,f5]@2 [f#4,a#4,c#5,f5]!2 [f#4,c#5]@2, ~@14 [a#4,f5] ~", // F#maj7 F#5 A#5
  K: "[f#4,b4,d#5]!2 [f#4,b4,d#5]@2 [f#4,b4,d#5]!2 [f#4,d#5] ~ [f#4,b4,d#5]!2 [f#4,d#5] ~ [f#4,b4,d#5]!2 [f#4,b4]@2, ~@6 b4@2 ~@2 b4@2 ~@2 d#5 ~", // B D#m B D#m B B5
  L: "[f#4,b4,d#5]!2 [f#4,b4,d#5]@2 [f#4,b4,d#5]!2 [f#4,b4,d#5]@2 [f#4,b4,d#5]!2 [b4,d#5]@2 [f#4,b4,d#5]!2 [f#4,d#5] ~, ~@10 f#4 ~@3 b4@2", // B D#m
  M: "[f#4,b4,c#5]!2 [f#4,b4]@2 [f#4,b4,c#5]!2 [f#4,b4,c#5]@2 [f#4,b4,c#5]!2 [f#4,b4]@2 [f#4,b4,c#5]!2 [f#4,b4] ~, ~@2 c#5 ~@7 c#5 ~@3 c#5@2", // F#sus4 B5 F#sus4 B5 F#sus4 B5
  N: "[g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2", // C#
})).s("gm_drawbar_organ").gain(0.06)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@7 A@2 B C D E F@4 B C D E G@3 ~@15 A@2 B C D E G@3 ~@39 A@2 B C D E F@4 B C D E G@3 ~@9
>`.pickRestart({
  A: "[~@8 f4@2 f#4 ~ f4 ~ f4@4 d#4@4 ~@10]/2", B: "f#4@2 g#4 ~ a#4 ~ a#4@4 ~@6", C: "a#4 ~ a#4 ~ b4@2 g#4@5 ~@3 f4 ~",
  D: "f4@2 f#4 ~ g#4 ~ a#4@3 ~ g#4@3 ~ f4@2", E: "~@2 g#4@4 f#4@4 ~@4 f#4 ~",
  F: "[f#4@2 g#4@2 a#4@2 d#5@6 c#5@2 f#4@4 g#4 ~ a#4 ~ a#4@4 g#4@4 a#4@4 g#4@4 ~@2 f4@2 f#4 ~ f4 ~ f4@4 d#4@4 ~@10]/4",
  G: "[f#4@2 g#4@2 a#4@2 d#5@6 c#5@2 f#4@4 g#4 ~ a#4 ~ a#4@4 g#4@4 a#4@4 g#4@4 ~@10]/3",
})).s("gm_distortion_guitar").gain(0.12)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~@3 A@3 ~@21 A@3 ~@37 A@3 ~@13 A@3 ~@27>".pickRestart({
  A: "[[b3,b5]@43 ~@5]/3", // B
})).s("gm_tubular_bells").gain(0.11).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@7 A ~@14 B A ~@22 B A ~@6 B A ~@22 B A ~@15 A ~@6 B A ~@9>".pickRestart({
  A: "x!16", B: "~@10 x!6",
})).gain(0.23)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@22 A ~@23 A ~@7 A ~@23 A ~@23 A ~@10>".pickRestart({
  A: "~@8 x!2 ~@6",
})).gain(0.14)

// drums · hihat
const hihat = s("hh").struct("<A B A B A B A B C@23 ~ C@24 ~@8 C@7 ~ C@8 ~@16 C@15 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.28)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@23 ~ A@24 ~@8 A@7 ~ A@8 ~@16 A@15 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.23)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A@16 ~@8 A@24 ~@16 A@8 ~@16 A@15 ~@2>".pickRestart({
  A: "x!16",
})).gain(0.19)

// drums · splash
const splash = s("cr").struct("<A ~@3 A ~@3 B@15 ~ A ~@7 B@24 A ~@3 A@5 ~@7 B@8 A ~@3 A@5 ~@7 B@15 ~ A>".pickRestart({
  A: "x", B: "x!4",
})).gain(0.19)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@56 [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!8 ~@16 [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!8 ~@25>")
  .gain(0.71)

// drums · shaker
const shaker = s("sh").struct("<~@8 A@16 ~@8 A@24 ~@16 A@8 ~@16 A@15 ~@2>".pickRestart({
  A: "x!16",
})).gain(0.23)

stack(
  bass, synth_strings_1, synth_strings_1_2, acoustic_guitar_steel, clavinet, drawbar_organ, distortion_guitar,
  tubular_bells, kick, snare, snare_soft, hihat, open_hat, tambourine, splash, cabasa, shaker
)

More by Pharao