Strudelify

Edvard Grieg - Lyric Pieces Op.38 No.4 'Halling' (Norwegian Dance)

Edvard Grieg

KeyB♭ majorTempo116 bpm
0:00/0:00
// Edvard Grieg - Lyric Pieces Op.38 No.4 'Halling' (Norwegian Dance) — Edvard Grieg
// 116 bpm, 2/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 1 "Flute" named as a pipe, played on flute (its pizzicato strings patch is not one); ch 2 "Oboe" named as a reed, played on oboe (its tremolo strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/1807456; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/2)

// 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.

// other · oboe
const oboe = note("<A@2 B C D@2 E ~ F G H ~@6 I A@2 B C D@2 E ~ F G H ~@6 I A J E ~ K@4>".pickRestart({
  A: "~ [g4,d5]@3", B: "~@2 a5@2 [d5,g5] gb5 a4@2, ~@6 d5 ~", C: "[d4,g4]@2 gb4@2 d4 ~ gb4 ~ g4@8",
  D: "eb5 d5@3 bb4@2 g4@2 g4@4 gb4@2 d4@2", E: "a5@2 d5 ~ a4@2 d4 ~", F: "g5 f5@3 f5@2 d5@2 eb5@4 eb5@2 c5@2",
  G: "d5@2 d5 bb4 c5@2 c5 a4", H: "bb4 ~@3", I: "eb5 d5@7 ~@8", J: "d5!2 a4!2",
  K: "[~@15 g4@3 gb4@3 d4@2 ~ gb4@2 ~ g4@24 ~@13]/4",
})).s("gm_oboe").gain(0.25)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<A@2 B C D@2 E F ~@4 G H I ~ J ~ A@2 B C D@2 E F ~@4 G H I ~ J ~ A K L ~ M@4>".pickRestart({
  A: "eb6 d6@3 bb5@2 g5@2 [c5,g5]@4 gb5@2 d5@2, ~ d5 ~ a4", B: "~@2 g5 gb5 d5 ~ g4 gb4", C: "d4 ~ d3 ~ g3@4",
  D: "d5 [d4,d5] [c4,a4] [a3,a4]", E: "g5 gb5 a4@2 [d4,g4] gb4 a3@2, ~@2 d5 ~@3 d4 ~",
  F: "[d3,g3]@2 gb3@2 d3 ~ gb3 ~ g3@8", G: "g4 f4@3 f4@2 d4@2 eb4@4 eb4@2 c4@2", H: "d4@2 d4 bb3 c4@2 c4 a3",
  I: "bb3 ~@3", J: "~@8 bb4 a4@7", K: "eb5 d5@3 bb4@2 g4@2 [c4,g4]@4 gb4@2 d4@2, ~ d4 ~ a3",
  L: "g5 gb5 [g4,d5] gb4 [d4,g4] gb4 [g3,d4] gb3", M: "[~@15 g3@3 gb3@3 d3@2 ~ gb3@2 ~ g3@24 ~@13]/4",
})).s("gm_clarinet").gain(0.25)

// other · bassoon
const bassoon = note("<~@3 A B@2 C D ~@2 E F G H@2 I J ~@4 A B@2 C D ~@2 E F G H@2 I J ~@2 B K ~@2 L@3>".pickRestart({
  A: "~@2 d3 ~ [g2,g3]@4", B: "~ d4 c4 a3", C: "~@2 g4 gb4 d4 ~ g3 gb3", D: "d3 ~ d2 ~ g2@4",
  E: "~@2 f3 bb2 d4 ~ f3 bb2", F: "d4 ~ f3 bb2 d4 ~@3", G: "~ [bb2,f3]@3", H: "[~@2 [bb2,f3]@8 a2 d2 gb3 ~ a2 d2]/2",
  I: "gb3 ~ a2 d2 gb3 ~@3", J: "eb4 d4@7 ~@8", K: "~@3 a3", L: "[~@5 d2@3 ~@3 g2@24 ~@13]/3",
})).s("gm_bassoon").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note("<~@4 A@2 ~ B C D@2 ~ E F G ~@7 A@2 ~ B C D@2 ~ E F G ~@4 A H ~@5>".pickRestart({
  A: "~ [g3,d4]@3", B: "a3@2 d3 ~ g3@4", C: "~ [bb3,f4]@3", D: "[~ [bb3,f4]@4 ~@3]/2", E: "~ f3 g3 a3",
  F: "~ f3 eb3 c3", G: "d3 ~@3", H: "~@2 a4@2 d4 ~@3",
})).s("gm_french_horn").gain(0.2)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@16 A B ~@16 A B ~ C D ~@5>".pickRestart({
  A: "eb4 d4 eb4 d4 eb4 d4 eb4 d4 bb4 a4 bb4 a4 bb4 a4 bb4 a4",
  B: "eb5 d5 eb5 d5 eb5 d5 eb5 d5 bb5 a5 bb5 a5 bb5 a5 bb5 a5", C: "eb5 d5@3 bb4@2 g4@2 g4@4 gb4@2 d4@2, ~ [g3,d4]@3",
  D: "g5 gb5 a4@2 [d4,g4] gb4 d4 ~, ~@2 d5 ~@5", // G5
})).s("gm_string_ensemble_1").gain(0.3)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@8 A B@3 ~@2 C@2 ~@10 A B@3 ~@2 C@2 ~@7 D@3>".pickRestart({
  A: "~@2 g4 a4, ~ [bb3,f4]@3", B: "[~@2 eb4 c4 d4 [bb4,f5,bb5]@2 [bb4,f5,bb5]@2 [bb4,f5,bb5]@2 ~, ~ [bb3,f4]@4 ~@7]/3",
  C: "[~ [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 ~]/2", D: "[~@11 [g4,bb4,d5,g5]@24 ~@13]/3",
})).s("gm_string_ensemble_1").gain(0.05)

// other · pizzicato strings · "Violins" · Gm
const pizzicato_strings = note("<~@6 [a5 d5 a4 d4] ~@17 [a5 d5 a4 d4] ~@18 [~ [g3,d4,bb4,g5]@3]>")
  .s("gm_pizzicato_strings").gain(0.25)

// other · string ensemble 1
const string_ensemble_1_2 = note("<~@12 A B C ~@15 A B C ~@4 D E ~ F@2 ~@2>".pickRestart({
  A: "~ f3 g3 a3", B: "~ f3 eb3 c3", C: "d3 ~@3", D: "~ d4 c4 a3", E: "~@2 g4 gb4 d4 ~ g3 gb3",
  F: "[~@15 g3@3 gb3@3 d3@2 ~ gb3@2 ~@6]/2",
})).s("gm_string_ensemble_1").gain(0.2)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft_2 = note("<~@10 A@2 ~@2 B@2 ~@12 A@2 ~@2 B@2 ~@7 C@3>".pickRestart({
  A: "[~ d4@2 d4@2 d4@2 ~]/2", B: "[~ gb3@2 gb3@2 gb3@2 ~]/2", C: "[~@11 [g3,d4]@24 ~@13]/3",
})).s("gm_string_ensemble_1").gain(0.05)

// other · pizzicato strings · Gm
const pizzicato_strings_2 = note("<~@6 [~@2 a4 d4] [a3 d3 g3@2] ~@16 [~@2 a4 d4] [a3 d3 g3@2] ~@17 [~ [g3,d4,bb4]@3]>")
  .s("gm_pizzicato_strings").gain(0.25)

// chords · string ensemble 1
const string_ensemble_1_3 = note("<~@10 A@2 B C@3 ~@12 A@2 B C@3 ~@10>".pickRestart({
  A: "[~ [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 ~]/2", B: "~ [bb2,f3]@3",
  C: "[~ [bb2,f3]@4 [d2,a2]@2 [d2,a2]@2 [d2,a2]@2 ~]/3", // Bb5 D5
})).s("gm_string_ensemble_1").gain(0.05)

// other · pizzicato strings
const pizzicato_strings_3 = note("<~@3 A B@2 ~ C ~@13 A B@2 ~ C ~@11 B D ~@2 E@2 F>".pickRestart({
  A: "~ d3 g3@2", B: "d3", C: "a3 d3 g2@2", D: "~@3 a3", E: "[~@5 d2@6 g2@12 ~@9]/2", F: "~ g2@3",
})).s("gm_pizzicato_strings").gain(0.25)

// drums · triangle
const triangle = s("triangles:35").struct("<A@2 B C ~@4 A ~@7 D E A@2 B C ~@4 A ~@7 D E A ~@7>".pickRestart({
  A: "x", B: "x!2", C: "x!8 ~@8", D: "~@2 x!14", E: "x!16",
})).gain(1.73)

// drums · triangle · soft notes
const triangle_soft = s("triangles:35").struct(`<
  ~@16
  [x!2 ~@14]
  ~@17
  [x!2 ~@14]
  ~@6
  [~@11 x ~ x!2 ~]
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]
  [~ x!2 ~ x ~@11]
>`).gain(0.43)

stack(
  oboe, clarinet, bassoon, french_horn, string_ensemble_1, string_ensemble_1_soft, pizzicato_strings,
  string_ensemble_1_2, string_ensemble_1_soft_2, pizzicato_strings_2, string_ensemble_1_3, pizzicato_strings_3,
  triangle, triangle_soft
)

More by Edvard Grieg