Strudelify

solveigs song

Edvard Grieg

KeyA minorTempo70 bpm
0:00/0:00
// solveigs song — Edvard Grieg
// 70 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 24, 4/4 at bar 32, 3/4 at bar 49, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Accordion" named as an organ, played on accordion (its oboe patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5829062; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 67 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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 · accordion
const accordion = note(`<
  A@2 B@2 C D ~ E F G H I J K L M N O P Q R S T ~@8 U@8 V@5 W@5 ~@3 X@3 Y@3 ~ Z@2 AA@2 AB ~@3
>`.pickRestart({
  A: "[e4@8 c4@2 e4@2 a4@2 b4@4 b4 a4 g4@8 ~@4]/2", B: "[g4@4 e4 g4 c5 d5@2 b4 e5@5 ~]/2", C: "b3@2 e4@5 ~",
  D: "b2@2 e3@5 ~", E: "~ [c4,e4,a4] ~ [c4,e4,a4]", F: "~ [c4,e4,a4] ~ e4", G: "~ [c4,e4,a4] ~ [b3,e4,g#4]",
  H: "~ [c4,e4,a4] ~ [c4,e4]", I: "~ [b3,e4,g#4] ~@2", J: "[c5,e5,a5] ~", K: "~ [c4,e4,a4] ~ [d4,g4,b4]",
  L: "~ [e4,g4,c5] ~ [c4,f4]", M: "~ [b3,f4] e4@2", N: "[e5,g5,c6] ~", O: "~ e4 ~ e4",
  P: "[d#4,a4] [d4,g#4] [c#4,e4] g4", Q: "f#4@2 f4@2 e4@3 ~", R: "d4 [e4,g#4] [e4,c5] [e4,a4]",
  S: "[d#4,a4] [d4,a4] [c#4,e4] [c4,e4]", T: "f4@2 e4 ~",
  U: "[~@14 a2@4 [c4,e4,a4]@4 a2@4 [c4,e4,a4]@4 a2@4 [c4,e4,a4]@4 a2@4 e4@4 [a2,a4]@4 b4@2 c5@2 [a2,d5]@4 e5@2 f5@2 f5@2 e5@2 e5@2 c5@2 [c3,a4]@4 a4@2 c5@2 c5@2 b4@2 b4@2 g#4@2 g#4 ~@7 [c5,e5,a5]@8 ~@4 e4@4 a4@2 a4@2 b4@2 c5@2 [g3,d5]@4 e5@2 f5@2 [c4,f5]@2, ~@62 a2@4 ~@12 e3@4 ~@5 e4@11 ~@12 a3@4 ~@14]/8", // Am A D5 F Am G5 F5
  V: "[e5@2 e5@2 c5@2 [f3,a4]@4 a4@2 c5@2 c5@2 b4@2 b4@2 g4@2 g4 e4@7 [c5,e5,g5]@8 ~@6 e4@2 e4@2 g#4@2 b4@2 c5@2 a4@4 e5@2 d#5@2 [b3,b4]@4 d5@2 c#5@2 a3@4 ~@2 a4@2 [d3,c5]@2, ~@5 d3@2 g3@2 ~@2 c3@2 ~@10 d4@4 c4@4 ~@2 a#3@2 a4@3 ~@2, ~@37 d#3@2 ~]/5", // F C B D7
  W: "[b4!2 a4 e5@3 e4!2 g#4 b4 c5 a4 e5!2 d#5 b4 b4 d5 c#5 a4@3 a4 c5@3 b4 b4@3 a4 a4@5 ~@4, ~@3 e3@2 ~@2 d3@4 c3@4 f3@4 e3@4 e3@4 e3@4 a2@4 ~@5]/5",
  X: "[~ e5@4 d5@4 ~ d5@4 b4@4 g#4@4 b4@4 c#5@4 ~ e5@4 g#5@17 b4@8 e5@13 d5@4 d5@4 c#5@4 c#5@4 a4@4 ~ a4@8 b4@8 g#5@13 f#5@4 f#5@4 e5@4 ~ e5@4 c#5@4]/3",
  Y: "[a4@4 ~@17 g#4@9 [c#5,e5]@10 ~@32, ~@2 g#5@13 ~@21, ~@25 e5@35 a4@41 ~@43]/3", // C#m
  Z: "[~@2 e4@24 c4@6 e4@6 a4@6 b4@12 b4@3 a4@3 g4@24 ~@10]/2", AA: "[~ c4@12 a3@3 c4@3 f4@3 g4@6 e4@3 a4@15 ~@2]/2",
  AB: "~ e3@6 a3@15 ~@2",
})).s("gm_accordion").gain(0.25)

// chords · accordion · soft notes
const accordion_soft = note("<~@6 A ~@15 B C D E@3 F@3 G ~@33 H ~>".pickRestart({
  A: "[e5,g#5,b5,e6] ~", B: "~@3 d4", C: "a3@5 ~@3", D: "e4@17 d5@8 e4@17 c#5@6",
  E: "[~@2 e4@17 d5@8 ~ e4@16 c#5@8 ~ e4@17 d5@8 e4@17 c#5@8 e4@17 d5@8 e4@16]/3",
  F: "[~ c#5@8 ~ e4@16 d5@8 ~ e4@17 c#5@8 d5@25 d5@25 c#5@8 ~ d5@8 c#5@8 ~ d5@8]/3", G: "[e5,a5]@17 ~@31",
  H: "~ [a4,c5,e5,a5]@23", // Am
})).s("gm_accordion").gain(0.15)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@33 A B C D@2 E F G@6 H@3 ~@3 I@3 J@2 ~@10>".pickRestart({
  A: "~@5 e4@2 ~", B: "~ e4@2 ~@2 g#4@2 ~", C: "~ a4@2 ~@2 a4@2 ~", D: "[~ g#4@2 a4@8 ~@5]/2", E: "~ a4@2 ~@2 b4@2 ~",
  F: "~ c5@2 f4@2 d4@2 ~",
  G: "[~ f4@2 e4@8 ~@4 d4@4 c4@4 d#4@2 d4@2 c#4@2 g4@2 f#4@2 f4@2 e4@3 ~ d5@2 g#4@2 c5@2 a4@2 d#4]/6",
  H: "[~ d4@2 c#4@2 e4@2 d4@4 d4@4 a3@5 ~@4]/3",
  I: "[~@43 a4@8 ~ g#4@8 ~@8 g#4@8 ~ a4@8 ~@9 a4@8 f#4@8 ~@9 f#4@8 e4@8 ~@9]/3", J: "[e4@2 b3@13 a3@5 ~@4]/2",
})).s("gm_alto_sax").gain(0.25)

// chords · piano
const piano = note(`<
  A@2 B@2 C D E F G H I J K L M N@2 O P Q R S T U V W@3 X Y@2 Z@8 AA@4 AB@6 AC@3 AD@3 AE@4 AF@2 AG@2 AH AI AJ ~
>`.pickRestart({
  A: "[e4@23 ~ c4@6 e4@6 a4@6 b4@11 ~ b4@3 a4@3 g4@23 ~@13]/2", B: "[g4@4 e4 g4 c5 d5@2 b4 e5@5 ~]/2",
  C: "b3@3 e4@7 ~@2", D: "[b1,b2]@2 [e2,e3]@5 ~", E: "[e4,b4,e5,g#5,b5,e6]@23 ~@25",
  F: "~@12 [c4,e4,a4]@11 ~@13 [c4,e4,a4]@11 ~, [a2,e3]@23 ~ [a2,e3]@23 ~", // Am A5
  G: "~@12 [c4,e4,a4]@11 ~ [a2,e3]@11 ~ [e3,c4,e4]@11 ~, [a2,e3]@23 ~@25", // Am A5 C A5
  H: "~@12 [c4,e4,a4]@11 ~@13 [b3,e4,g#4]@11 ~, [a2,e3]@23 ~ [a2,e3]@23 ~", // Am E A5
  I: "~@12 [c4,e4,a4]@11 ~@13 [c4,e4]@11 ~, [a2,e3]@23 ~ c3@23 ~", J: "~@12 [b3,e4,g#4]@11 ~ [a2,e3]@23 ~, e3@23 ~@25",
  K: "e4@11 ~@37", L: "~@12 [c4,e4,a4]@11 ~@13 [d4,g4,b4]@11 ~, a3@23 ~ g3@23 ~",
  M: "~@12 [e4,g4,c5]@11 ~ f3@11 ~ [d3,c4,f4]@11 ~, c4@23 ~@25", // C Dm7
  N: "[~@12 [b3,f4]@11 ~@25 [e5,g5,c6]@23 ~@25, g3@23 ~ [c3,g3]@46 ~@26]/2", // Bdim C C5
  O: "~@12 e4@11 ~@13 [e4,a4]@11 ~, d4@23 ~ c4@23 ~", // A5
  P: "[b3,d#4,a4]@11 ~ [a#3,d4,g#4]@11 ~ c#4@11 ~ g4@11 ~, ~@24 a3@23 ~", // B7 A#7
  Q: "[d4,f#4]@12 [d4,f4]@11 ~ [g#3,b3,e4]@17 ~@7, [d3,a3]@23 ~@25", // D Dm E D5
  R: "~@12 [g#3,e4]@11 ~ [a3,e4]@11 ~ [e4,a4]@11 ~, [d2,d3]@23 ~ [c2,c3]@23 ~", // C#m A5 D C
  S: "[d#4,a4]@11 ~ [d4,a4]@11 ~ c#4@11 ~ c4@11 ~, [f2,f3]@23 ~ [e2,e3]@23 ~", // D#dim D5 F E
  T: "[e2,a3,d4,f4]@24 [g#3,d4,e4]@12 [f#3,d4]@11 ~", U: "[a2,e3]@7 ~@5, a1@23 ~@25",
  V: "[a2,e3,g#4]@16 ~ [e3,d4,g#4]@8 [a2,e3,a4]@16 ~ [e3,c#4,a4]@6", // Amaj7 E7 A5 A
  W: "[~@2 [a2,e3,g#4]@16 ~ [e3,d4,g#4]@8 ~ [a2,e3,a4]@16 [e3,c#4,a4]@8 ~ [a2,e3,g#4]@16 ~ [e3,d4,g#4]@8 [a2,e3,a4]@16 ~ [e3,c#4,a4]@8 [a2,e3,g#4]@16 ~ [e3,d4,e4]@8 [a2,e3,a4]@16]/3", // Amaj7 E7 A5 A Amaj7 E7 A5 A …
  X: "~ [e3,c#4,a4]@8 ~ [a2,e3,g#4]@16 [e3,d4,g#4]@8 ~ [a2,e3,a4]@13", // A Amaj7 E7 A5
  Y: "[~@4 [e3,c#4,a4]@8 ~ [e3,d4]@24 ~@2 d4@23 [e3,c#4]@8 ~ [f#3,d4]@8 [e4,c#5]@8 ~ [f#4,d5]@8, ~@12 a2@25 a2@25 a2@16 ~@18, ~@12 g#4@16 ~@10 e3@24 ~@17 a3@16 ~]/2", // A E7 C#m D C#m D
  Z: "[[a4,e5,a5,c#6,a6]@16 ~@38 [c4,e4,a4]@11 ~@13 [c4,e4,a4]@11 ~@13 [c4,e4,a4]@11 ~ [a2,e3]@11 ~ [e3,c4,e4]@11 ~@13 [c4,e4,a4]@11 ~@13 [b3,e4,g#4]@11 ~@13 [c4,e4,a4]@11 ~@13 [c4,e4]@11 ~@13 [b3,e4,g#4]@11 ~ [a2,e3]@11 ~ a4@12 [c5,e5,a5]@23 ~@37 [c4,e4,a4]@11 ~@13 [d4,g4,b4]@11 ~ c4@6, ~@42 [a2,e3]@23 ~ [a2,e3]@23 ~ [a2,e3]@23 ~@25 [a2,e3]@23 ~ [a2,e3]@23 ~ [a2,e3]@23 ~ c3@23 ~ e3@23 ~@13 [a3,c4]@46 ~@14 a3@23 ~ g3@23 ~@7, ~@141 a4@17 ~@34]/8", // A Am A5 C Am E Am C …
  AA: "[~@6 [e4,g4,c5]@11 ~ f3@11 ~ [d3,c4,f4]@11 ~@13 [b3,f4]@11 ~@25 e4@11 ~@49 e4@11 ~@13 [e4,a4]@11 ~ [b3,d#4,a4]@6, ~@42 g3@23 ~ [c3,g3]@46 ~@26 d4@23 ~ c4@23 ~@7]/4", // C Dm7 Bdim A5 B7 C5
  AB: "[~@6 [a#3,d4,g#4]@11 ~ [a3,c#4]@11 ~ [d#3,g4]@11 ~ [d4,f#4]@12 [d4,f4]@11 ~ [g#3,b3,e4]@17 ~@19 [g#3,e4]@11 ~ [a3,e4]@11 ~ [e4,a4]@11 ~ [d#4,a4]@11 ~ [d4,a4]@11 ~ c#4@11 ~ c4@11 ~ [e2,a3,d4,f4]@24 [g#3,d4,e4]@12 [f#3,d4]@11 ~ [a2,e3]@28 ~@8 e6@11 ~ [a3,e4,g#5,e6]@6, ~@42 [d3,a3]@23 ~@25 [d2,d3]@23 ~ [c2,c3]@23 ~ [f2,f3]@23 ~ [e2,e3]@23 ~@25 e2@24 a1@23 ~@31]/6", // A#7 A D# D Dm E C#m A5 …
  AC: "[f#6@2 e6@6 ~ d6@2 [a3,e4,g#5,c#6]@6 d6@2 e6@8 ~@9 [a3,e4,a5]@8 ~@7 f#6@2 e6@6 d6@2 [a3,e4,g#5,c#6]@6 d6@2 ~ [a3,e4,a5]@16 [a3,e4,a5]@8 ~@18 [a3,e4,g#5]@8 ~@4 e6@4 e6@4 ~ c#6@4 [a3,e4,a5]@7, ~@19 [a3,e4,a5]@16 ~@9 [a3,e4,g#5]@17 ~@34 [a3,e4,g#5]@16 ~@9 [a3,e4,a5]@17 ~@7, ~@28 e6@23 ~@19 e6@28 ~@5 f#6@21 ~@20]/3", // Amaj7 A5 Amaj7 A5 Amaj7 A5 Amaj7 A5
  AD: "[~ c#6@4 b5@4 ~ b5@4 g#5@4 ~@4 g#5@4 ~@5 c#6@4 ~@8 [a3,e4,a5]@8 ~@22 f#6@4 f#6@4 e6@4 e6@4 c#6@4 ~ [a3,e4,a5]@8 b5@8 ~@13 d6@4 d6@4 c#6@4 ~ c#6@4 a5@4, ~ [a3,e4,g#5]@16 ~ [a3,e4,e5]@8 [a3,e4,a5]@17 ~@9 [a3,e4,g#5]@16 [a3,e4,g#5]@8 ~ [a3,e4,a5]@17 ~@8 [a3,e4,g#5]@16 ~ [a3,e4,g#5]@8 [a3,e4,a5]@16 ~, ~@35 e6@24 ~ g#6@13 ~@37 e6@13 ~@21]/3", // A5 Amaj7 A5 Amaj7 A5 Amaj7 A5
  AE: "[[a3,e4,e5,a5]@8 c#6@4 ~ b5@4 b5@4 g#5@4 ~@4 g#5@4 ~ b5@4 e5@4 g#5@4 b5@4 ~ e5@3 g#5@3 b5@3 [e4,c#5]@10 [f#4,d5]@10 [c#5,e5]@10 [d5,f#5]@10 ~ c#6@12 d6@13 [a5,a6,c#7,a7]@25 ~@41, ~@8 [a3,b3,e4]@24 ~@2 [a3,b3,e4]@25 ~ [a3,a5]@20 ~@112, ~@8 a5@17 e5@8 ~@47 [a4,a5]@20 ~ a6@25 ~@66]/4", // A5 C#m D C#m D A Asus2 A
  AF: "[~@2 e4@23 ~ c4@6 e4@6 a4@6 b4@11 ~ b4@3 a4@3 g4@23 ~@11]/2",
  AG: "[~ c4@12 a3@3 c4@3 f4@3 g4@6 e4@3 a4@15 ~@2]/2", AH: "~ e3@6 a3@15 ~@2", AI: "~ [e1,e2]@6 [a1,a2]@15 ~@2",
  AJ: "~ [a4,c5,e5,a5]@23", // Am
})).s("gm_piano").gain(0.2)

stack(accordion, accordion_soft, alto_sax, piano)

More by Edvard Grieg