Strudelify

Az jednou

Shalom

KeyB minorTempo123 bpm
0:00/0:00
// Az jednou — Shalom
// 123 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 2 "Ch  2" Syn Bass 3 -> synth bass 1; ch 7 "Ch  7" Elec Org 4 -> drawbar organ
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · sitar · "Ch  1"
const sitar = note(`<
  A@2 B C A@2 B D E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H I J K L I J K L M N O P M N O P M N O
  P M N O P ~@16 Q R S T Q R S T E F G H E F G H I J K L I J K L M N O P M N O P ~@8 I J K L I J K L M N O P M N O P M N
  O P M N O P U
>`.pickRestart({
  A: "e4 ~ f#4 ~ e4 ~ e4 ~ f#4 ~ e4 ~ e4 ~ f#4 ~", B: "e4 ~ a4 ~ e4 ~ e4 ~ a4 ~ e4 ~ e4 ~ a4 ~",
  C: "e4 ~ g#4 ~ e4 ~ e4 ~ g#4 ~ e4 ~ e4 ~ f#4 ~", D: "e4 ~ g#4 ~ e4 ~ e4 ~ g#4 ~ e4 ~ e4 ~ g#4 ~",
  E: "[f#4,b4] ~ [f#4,b4]!3 ~ [f#4,b4]!2 ~ [f#4,b4] ~ [f#4,b4]!2 ~ [f#4,b4] ~", // B5
  F: "[f#4,a4] ~ [f#4,a4]!3 ~ [f#4,a4]!2 ~ [f#4,a4] ~ [f#4,a4]!2 ~ [f#4,a4] ~", // F#m
  G: "[e4,a4] ~ [e4,a4]!3 ~ [e4,a4]!2 ~ [e4,a4] ~ [e4,a4]!2 ~ [e4,a4] ~", // A5
  H: "[e4,g#4] ~ [e4,g#4]!3 ~ [e4,g#4]!2 ~ [e4,g#4] ~ [e4,g#4]!2 ~ [e4,a4] ~", // E A5
  I: "[f#4,b4,d5] ~ [f#4,b4,d5] ~@2 [f#4,b4,d5] ~ [f#4,b4,d5]!2 ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~", // Bm
  J: "[f#4,a4,d5] ~ [f#4,a4,d5] ~@2 [f#4,a4,d5] ~ [f#4,a4,d5]!2 ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~", // D
  K: "[e4,a4,c#5] ~ [e4,a4,c#5] ~@2 [e4,a4,c#5] ~ [e4,a4,c#5]!2 ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~", // A
  L: "[e4,g#4,b4] ~ [e4,g#4,b4] ~@2 [e4,g#4,b4] ~ [e4,g#4,b4]!2 ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,a4,c#5] ~", // E A
  M: "d5 ~@2 e5 d5 ~ b4 ~ b4 e5 [f#4,b4]@2 b4 e5 [f#4,b4]@2, ~@2 [f#4,b4]@2 ~@6 d5 ~@3 d5 ~", // B5
  N: "d5 ~@2 e5!2 ~ d5 ~ b4 e5 [f#4,b4]@2 b4 e5 [f#4,b4]@2, ~@2 [f#4,b4]@2 ~@6 d5 ~@3 d5 ~", // B5
  O: "d5 ~ b4 e5 d5 ~ b4 ~ b4 e5 [f#4,a4]@2 b4 e5 [f#4,a4]@2, ~@2 [f#4,a4]@2 ~@6 d5 ~@3 d5 ~", // F#m
  P: "d5 ~ b4 e5!2 ~ d5 ~ e5 a5 [e4,g#4]@2 e5 a5 [e4,g#4]@2, ~@2 [e4,a4]@2 ~@6 g#5 ~@3 g#5 ~", // E A5
  Q: "[f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ b4 [f#5,b5] ~ [f#5,b5] ~ [f#5,b5]!2 ~ b4 [f#5,b5]", // B5
  R: "[f#5,a5] ~ [f#5,a5] ~ [f#5,a5] ~ b4 [f#5,a5] ~ [f#5,a5] ~ [f#5,a5]!2 ~ b4 [f#5,a5]", // F#m
  S: "[e5,a5] ~ [e5,a5] ~ [e5,a5] ~ b4 [e5,a5] ~ [e5,a5] ~ [e5,a5]!2 ~ b4 [e5,a5]", // A5
  T: "[e5,g#5] ~ [e5,g#5] ~ [e5,g#5] ~ b4 [e5,g#5] ~ [e5,g#5] ~ b4 [e5,g#5] ~ [e5,g#5] [e5,a5]", U: "[b4,f#5]!8 ~@8",
})).s("gm_sitar").gain(0.2)

// bass · synth bass 1 · "Ch  2"
const bass = note(`<
  ~@2 A@4 B@2 C@31 D E F G H E F G H ~@16 I@24 C@7 D E F G H E F G H ~@16 E F G H E F G H ~@17
>`.pickRestart({
  A: "b1 ~ d2 c#2 ~ b1 ~ a1", B: "b1 d2 c#2 a1 b1 d2 c#2 a1", C: "b1 ~ b1 ~ b1 ~ a1 b1 ~ b1 ~ b1!2 ~ a1 ~",
  D: "b1 ~ b1 ~ b1 ~ a1 b1 ~ b1 ~ b1 e1@2 ~@2", E: "b1 ~ b1 ~@3 b1 ~@2 b1 ~ b1!2 ~ b1 ~",
  F: "d2 ~ d2 ~@3 d2 ~@2 d2 ~ d2!2 ~ d2 ~", G: "a1 ~ a1 ~@3 a1 ~@2 a1 ~ a1!2 ~ a1 ~",
  H: "e1 ~ e1 ~@3 e1 ~@2 e1 ~ e1!2 ~ e1 ~", I: "b1 ~ a1 ~ b1 ~ a1 b1 ~ b1 a1 ~ b1 ~ a1 ~",
})).s("gm_synth_bass_1").gain(0.48)

// bass · synth brass 2 · "Ch  5"
const bass_2 = note(`<
  ~@40 A B C D A B C D E@2 F@2 E@2 F@2 E@2 F@2 E@2 F@2 ~@32 A B C D A B C D E@2 F@2 E@2 F@2 ~@8 A B C D A B C D E@2 F@2
  E@2 F@2 E@2 F@2 E@2 F@2 ~
>`.pickRestart({
  A: "b1!2", B: "d2!2", C: "a1!2", D: "e1!2", E: "[b1@6 a1 b1@9]/2", F: "[d2@12 b1@2 e1@17 ~]/2",
})).s("gm_electric_bass_finger").gain(0.59)

// other · lead 3 calliope · "Ch  6"
const lead_3_calliope = note(`<
  ~@41 A ~@3 A ~@25 B C ~@2 B C ~@3 C ~@2 B C ~@12 A ~@3 A ~@19 A ~@3 A ~@19
>`.pickRestart({
  A: "~@9 f#5 ~ f#5 e5 ~ d5 ~", B: "~@14 f#6 ~", C: "b6 ~ f#6 ~ b6 ~ f#6 b6 ~ f#6 b6 ~@5",
})).s("gm_lead_3_calliope").gain(0.3)

// other · lead 3 calliope · "Ch  6" · soft notes
const lead_3_calliope_soft = note("<~@72 A ~@3 A ~@3 A ~@3 A ~@60>".pickRestart({
  A: "~@12 f#6 b6 ~ f#6",
})).s("gm_lead_3_calliope").gain(0.15)

// chords · drawbar organ · "Ch  7"
const drawbar_organ = note("<~@40 A B C D A B C D ~@48 A B C D A B C D ~@16 A B C D A B C D ~@17>".pickRestart({
  A: "[f#5,b5,d6]", B: "[f#5,a5,d6]", C: "[e5,a5,c#6]", D: "[e5,g#5,b5]",
})).s("gm_drawbar_organ").gain(0.06)

// chords · drawbar organ · "Ch  7" · soft notes
const drawbar_organ_soft = note("<~@40 A B C D A B C D ~@48 A B C D A B C D ~@16 A B C D A B C D ~@17>".pickRestart({
  A: "[b6,d7]", B: "[a6,d7]", C: "[a6,c#7]", D: "[g#6,b6]",
})).s("gm_drawbar_organ").gain(0.03)

// other · string ensemble 1 · "Ch  9"
const string_ensemble_1 = note(`<
  ~@48 A@2 B@2 ~@4 A@2 B@2 A@2 B@2 ~@40 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 ~@4 A@2 B@2 A@2 B@2 C
>`.pickRestart({
  A: "[[b1,b2]@6 [a1,a2] [b1,b2]@9]/2", B: "[[d2,d3]@12 [b1,b2]@2 [e2,e3]@5 [f#2,f#3]@5 ~@8]/2",
  C: "[b2,b3] ~ [b2,b3] [a2,a3] [b2,b3] ~ [a2,a3] [b2,b3] ~@2 [b1,b2]@6", // B A B A B
})).s("gm_string_ensemble_1").gain(0.7)

// other · string ensemble 1 · "Ch  9" · soft notes
const string_ensemble_1_soft = note("<~@72 A B C D A B C D E F G H E F G H ~@57>".pickRestart({
  A: "[b4,d5,f#5,b5]@15 ~", B: "[b4,d5,f#5,a5]@15 ~", C: "[b4,d5,f#5,g#5]@15 ~", D: "[b4,d5,g5]@15 ~",
  E: "[b4,d5,f#5,b5]", F: "[b4,d5,f#5,a5]", G: "[b4,e5,a5]", H: "[b4,e5,g#5]",
})).s("gm_string_ensemble_1").gain(0.23)

// chords · french horn · "Ch 11"
const french_horn = note(`<
  ~@48 A@2 B@2 ~ C D@2 E@2 F@2 E@2 F@2 ~@40 E@2 F@2 E@2 F@2 ~@16 A@2 B@2 ~ C D@2 E@2 F@2 E@2 F@2 ~
>`.pickRestart({
  A: "[b3@6 a3 b3@9]/2", B: "[d4@12 b3@2 e4@5 f#4@4 ~@9]/2", C: "~@2 [g#3,g#4]@2 [b3,b4]@2 [d4,d5]@3 ~@7",
  D: "[[e3,e4]@2 [d3,d4]@3 ~@7 [a3,a4]@2 [g#3,g#4]@4 [a3,a4]@2 [g#3,g#4]@2 [a3,a4]@2 [b3,b4]@3 ~@5]/2", // E D A G# A G# A B
  E: "[b3@12 a3@2 ~@4 [g#3,g#4]@2 b4@2 [d4,d5]@3 ~@7, ~@7 b3@3 b3@6]/2", // G# D
  F: "[[e3,d4,e4]@2 d4@10 [a3,b3,a4]@2 [g#3,g#4]@4 ~@2 [g#3,g#4]@2 [a3,a4]@2 [b3,b4]@3 ~@5, ~@2 d3@3 ~@9 e4@5 f#4@4 ~@9, ~@9 [a3,a4] ~@6]/2", // E7 Asus2 G# A B A
})).s("gm_french_horn").gain(0.57)

// chords · lead 1 square · "Ch 13"
const lead_1_square = note("<~@112 A B C D A B C D ~@25>".pickRestart({
  A: "b3 ~ [b3,b7] ~ [b4,b7] ~ [b4,b7] ~ [b3,b7] [b4,b6] ~ [b3,b6] b4 ~ b4 ~", // B
  B: "d4 ~ [d4,b7] ~ [d5,b7] ~ [d5,b7] ~ [d4,b7] [d5,b6] ~ [d4,b6] d5 ~ d5 ~", // G
  C: "a3 ~ [a3,b7] ~ [a4,b7] ~ [a3,b7] ~ [a3,b7] [a4,b6] ~ [a3,b6] a4 ~ a4 ~", // Asus2
  D: "e3 ~ [e3,b7] ~ [e4,b7] ~ [e4,b7] ~ [e3,b7] [e4,b6] ~ [e3,b6] e4 ~ e4 ~", // E5
})).s("gm_lead_1_square").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@2 B A B C@9 D@8 E@8 F@2 E F@3 E F G E G H G E G H D@16 C@4 D@12 E@8 F@2 E F@3 E F G E G H G E G H D@8 C@3 I J C
  K ~ G E G H G E G H D@16 ~
>`.pickRestart({
  A: "x", B: "x!2 ~@2", C: "x!4", D: "x ~ x!2", E: "x!2", F: "x ~@6 x!2 ~@7", G: "x!2 ~ x!2 ~@3",
  H: "x ~@6 x!2 ~ x ~@5", I: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@3", J: "x ~@3 x ~@3 x ~@3 x ~@2 x", K: "x!5 ~@3 x ~@3 x ~@3",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@8 B@15 C B@3 D B@3 D E@16 ~@4 A@12 B@15 C B@3 D B@3 D E@8 ~@7 C B@3 D B@3 D E@16 F
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "x!5 ~ x!5 ~ x ~@3", D: "~@4 x ~@7 x!2 ~ x", E: "~@2 x ~@2 x ~ x",
  F: "x!9 ~ x ~ x ~@3",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@40
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!8
  ~@16
  [x!16]!32
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!8
  ~@16
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!8
  ~@17
>`).gain(0.64)

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

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

stack(
  sitar, bass, bass_2, lead_3_calliope, lead_3_calliope_soft, drawbar_organ, drawbar_organ_soft, string_ensemble_1,
  string_ensemble_1_soft, french_horn, lead_1_square, kick, snare, hihat, crash, cabasa
)