Strudelify

Joga

Bjork

KeyE majorTempo147 bpm
0:00/0:00
// Joga — Bjork
// 147 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 12 "Sylvain" choir aahs (copy of ch 13 synth choir)
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(147/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.

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D A B C E A B C B A B C B A B F@2 G B H C G I@4 ~@2 J@2 ~@10 K@8 L@8 M@8 N@6 ~@22
>`.pickRestart({
  A: "[g#2,d#3]", B: "[a2,e3]", C: "[b2,f#3]", D: "[c#3,f3]", E: "[c#2,c#3,f3]", F: "[b2,f#3]/2", G: "[c#3,g#3]",
  H: "[f#2,c#3]", I: "[[a2,e3]@15 ~]/4", J: "e4 c#4 e4 c#4",
  K: "[~ [g#2,d#3]@2 [a2,e3]@2 [b2,f#3]@2 [c#2,c#3,f3]@2 [g#2,d#3]@2 [a2,e3]@2 [b2,f#3]@2 [a2,e3]]/8", // G#5 A5 B5 C# G#5 A5 B5 A5
  L: "[~ [g#2,d#3]@2 [a2,e3]@2 [b2,f#3]@2 [a2,e3]@2 [g#2,d#3]@2 [a2,e3]@2 [b2,f#3]@3]/8", // G#5 A5 B5 A5 G#5 A5 B5
  M: "[~ [c#3,g#3]@2 [a2,e3]@2 [f#2,c#3]@2 [b2,f#3]@2 [c#3,g#3]@2 [a2,e3]@2 [f#2,c#3]@2 [b2,f#3]]/8", // C#5 A5 F#5 B5 C#5 A5 F#5 B5
  N: "[~@2 [c#3,g#3]@4 [a2,e3]@15 ~@3]/6", // C#5 A5
})).s("gm_string_ensemble_1").gain(0.25)

// chords · string ensemble 1 · "from"
const string_ensemble_1_2 = note(`<
  A B C D A B E F ~@11 G@8 ~@2 H@2 I J K L M N O P Q R S T U V@4 ~@11 W@8 ~@5 X N O P Y R Z H@2 AA J K L M N AB P Y R
  ~@4
>`.pickRestart({
  A: "d#4@6 e4 d#4 c#4@4 b3@4", B: "c#4", C: "b3", D: "c#4@15 ~", E: "[b3,d#4]", F: "[g#3,c#4]",
  G: "[[e5,g#5]@29 ~@3]/8", H: "[e4,e5] [d#4,d#5] [c#4,c#5] [b3,b4]",
  I: "[a3,e5] [c#4,e5,e6] [e4,d#5,d#6] [c#4,d#4,d#5]", J: "[e4,b4,b5] [c#4,c#5,c#6] [e4,a4,a5] [c#4,b4,b5]",
  K: "d#4@2 [d#4,d#5] [c#4,c#5] [d#4,d#5]@2 [b3,b4]@2, ~ b3 ~@2", // D# C# D# B
  L: "[c#4,d#4,c#5] [b3,d#4,d#5] [d#4,g#4,g#5] [b3,f#4,f#5]", M: "[e4,g#4,g#5] [c#4,b4] [e4,e5] [d#4,d#5], ~@2 b5 ~@5",
  N: "[c#4,c#5] [b3,b4] [e4,e5] [d#4,d#5]", O: "[c#4,c#5]@4 [b3,b4]@4 e5 e5@3 [c#4,e5,e6]@4, ~@2 [a3,e4] ~",
  P: "[e4,d#5,d#6] [c#4,d#4,d#5] [e4,b4,b5] [c#4,c#5,c#6]", // Emaj7 C#sus2 E5 C#
  Q: "[e4,a4,a5]@2 [c#4,b4]@2 d#4@2 [d#4,d#5] [c#4,c#5], ~@2 b5 ~@3 b3@2", // A5 C#7 D# C#
  R: "[d#4,d#5] [b3,b4] [c#4,d#4,c#5] [b3,d#4,d#5]", S: "[d#4,g#4,g#5] [b3,f#4,f#5] [e4,g#4,g#5] c#4, ~@6 b5 ~",
  T: "c#5 b4 b3 c#4", U: "c#5@4 b4@4 d#4@6 e4 d#4", V: "[c#4 b3 c#4@4 [b3,d#4]@4 [g#3,c#4]@4 ~@2]/4", W: "[e5,g#5]/8",
  X: "~@2 [e4,e5] [d#4,d#5]", Y: "[e4,a4,a5]@2 [c#4,b4,b5]@2 d#4@2 [d#4,d#5] [c#4,c#5], ~@3 b3",
  Z: "[d#4,g#4,g#5] [b3,f#4,f#5] [e4,g#4,g#5] [c#4,b4], ~@6 b5 ~", // G#5 B5 E C#7
  AA: "e5!2 [c#4,e5,e6]@2 [e4,d#5,d#6]@2 [c#4,d#4,d#5]@2, [a3,e4] ~@3", // C#m Emaj7 C#sus2 A5
  AB: "[c#4,c#5]@2 [b3,b4]@2 e5!2 [c#4,e5,e6]@2, ~@2 [a3,e4] ~", // C# B C#m A5
})).s("gm_string_ensemble_1").gain(0.12)

// chords · string ensemble 1 · "from" · soft notes
const string_ensemble_1_soft = note("<~@29 A B ~@5 C@2 ~@35 C@2 ~@4 A B ~@5 C@2 ~@7>".pickRestart({
  A: "~ [f#4,g#4]", B: "~ [f#4,g#4]@2 ~", C: "[[f#4,g#4]@2 ~ [f#4,g#4]@2 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.08)

// other · string ensemble 1
const string_ensemble_1_3 = note("<~@28 A B@2 C@2 D@2 E@7 ~@53>".pickRestart({
  A: "~@3 a1", B: "[e1,e2]/2", C: "[a1,a2]/2", D: "[g#1,g#2]/2",
  E: "[[a1,a2] [e1,e2]@4 [a1,a2]@4 [g#1,g#2]@4 [a1,a2]]/7", // A E A G# A
})).s("gm_string_ensemble_1").gain(0.19)

// chords · viola
const viola = note("<A B C D A B E F G H I H G H I H G H I J@6 K@4 ~@14 L@8 M@8 N@8 O@6 ~@22>".pickRestart({
  A: "d#4@6 e4 d#4 c#4@4 b3@4, [g#2,d#3]", B: "[a2,e3,c#4]", C: "[b2,f#3,b3]", D: "[c#3,f3,c#4]", E: "[b2,f#3,b3,d#4]",
  F: "[c#2,c#3,f3,g#3,c#4]", G: "[g#2,d#3]", H: "[a2,e3]", I: "[b2,f#3]",
  J: "[~ [c#3,g#3] [a2,e3] [f#2,c#3] [b2,f#3] [c#3,g#3], [e5,g#5]]/6", K: "[[a2,e3]@15 ~]/4",
  L: "[~@8 d#4@6 e4 d#4 c#4@4 b3@4 [a2,e3,c#4]@16 [b2,f#3,b3,d#4]@16 [c#2,c#3,f3,g#3,c#4]@16 [g#2,d#3]@16 [a2,e3]@16 [b2,f#3]@16 [a2,e3]@8, ~ [g#2,d#3]@2 ~@13]/8", // A B C# G#5 A5 B5 A5 G#5
  M: "[~ [g#2,d#3]@2 [a2,e3]@2 [b2,f#3]@2 [a2,e3]@2 [g#2,d#3]@2 [a2,e3]@2 [b2,f#3]@3]/8", // G#5 A5 B5 A5 G#5 A5 B5
  N: "[~ [c#3,g#3]@2 [a2,e3]@2 [f#2,c#3]@2 [b2,f#3]@2 [c#3,g#3]@2 [a2,e3]@2 [f#2,c#3]@2 [b2,f#3], [e5,g#5]]/8", // C#5 A5 F#5 B5 C#5 A5 F#5 B5 …
  O: "[~@2 [c#3,g#3]@4 [a2,e3]@15 ~@3]/6", // C#5 A5
})).s("gm_viola").gain(0.13)

// bass · synth bass 1
const bass = note("<~@72 A B@3 C D@2 E F G H I J K L@3 M N@2 ~@3>".pickRestart({
  A: "~@4 c#1@3 f#1", B: "[g#1@2 ~@2 g#1 ~ b1@2 c#1@6 f#1@4 g#1@2 b1@4 c#1@6 f#1@4 g#1@2 b1@2 ~@6 c#2 ~@3]/3",
  C: "b1 ~ a1 ~ f#1@4 c#1@6 f#1@2", D: "[g#1 ~@3 g#1@2 b1@2 c#1@6 f#1@4 g#1@2 b1@2 ~@10]/2",
  E: "c#1@6 f#1@2 g#1 ~@3 g#1@2 b1 ~", F: "c#1@3 f#1@2 g#1 b1 ~", G: "c#1@2 ~ f#1@2 g#1 b1 ~",
  H: "~@4 c#2 ~@3 b1 ~ a1 ~ f#1@4", I: "c#1@6 f#1@2 g#1@4 g#1 ~ b1@2", J: "c#1@5 ~ f#1@4 g#1@2 b1 ~@3",
  K: "c#1@2 ~@2 c#1@2 ~ f#1", L: "[g#1 ~@3 g#1 ~ b1@2 c#1@6 f#1@4 g#1@2 b1 ~@3 c#1@6 f#1@4 g#1@2 b1 ~@7 c#2 ~@3]/3",
  M: "b1 ~ a1 ~ f#1@2 ~@2 c#1@6 f#1@2", N: "[g#1 ~ g#1 b1 c#1@2 ~ f#1@2 ~@7]/2",
})).s("gm_synth_bass_1").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@59 A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B ~@4>".pickRestart({
  A: "x", B: "x!2 ~@10 x ~@3", C: "x ~@2 x",
})).gain(0.17)

// drums · clap
const clap = s("cp").struct(`<
  ~@43 A B ~ A B ~ A B ~ A B ~ A B@4 ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~@5
>`.pickRestart({
  A: "~ x", B: "~ x!2 ~",
})).gain(0.13)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@42 A B@2 A B@2 A B@2 A B@2 A B@5 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A ~@4
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.1)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@43 A ~@2 A ~@2 A ~@2 A ~@2 A ~@5 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@2 A ~@6
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.1)

// drums · guiro
const guiro = s("guiro:0").struct(`<
  ~@43 A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@5 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~@5
>`.pickRestart({
  A: "x",
})).gain(2.21)

// drums · guiro
const guiro_2 = s("guiro:4").struct(`<
  ~@42 A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~@4 A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~ A ~@4
>`.pickRestart({
  A: "~ x",
})).gain(2.21)

// drums · shaker
const shaker = s("sh").struct("<~@42 [~@7 x]!49 ~@4>").gain(0.1)

stack(
  string_ensemble_1, string_ensemble_1_2, string_ensemble_1_soft, string_ensemble_1_3, viola, bass, kick, clap,
  pedal_hat, open_hat, guiro, guiro_2, shaker
)

More by Bjork