Strudelify

O Canada

Calixa Lavallée

KeyG majorTempo112 bpm
0:00/0:00
// O Canada — Calixa Lavallée
// 112 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/139233; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 29 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano
const piano = note("<A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC>".pickRestart({
  A: "[g2,g3]@4 [g2,g3]@3 [g2,g3] [g2,g3]@4 ~@4, [b3,d4,g4]@3 ~", // G
  B: "[g2,g3] g2 [d3,d4,f#4,c5] [d3,c4,f#4,a4], [b3,d4,g4] ~", C: "e3 b2 e3 [d3,f#4,a4], [b3,e4,g4]@3 ~",
  D: "[g2,d4,g4,b4] [a2,c4,g4,a4] [b2,d4,g4,b4] [c3,e4,g4,c5]", E: "d3 a2 [d2,d4,f#4] ~, c4@3 ~, [e4,g4] ~",
  F: "[g2,g3] [f#2,f#3] [c#4,g4,a4]!2, [d4,b4] [e2,e3]", G: "[f#2,f#3,a4] [e2,e3,g4] [d2,d3,f#4] [g2,e4,b4], d4@3 ~",
  H: "[a2,f#4,a4,d5] [a2,e4,g4,c#5]", // D A7
  I: "[d2,d3]@4 [d3,d4]@3 [d3,d4] [d3,d4]@4 [c3,c4,d4,f#4,a4]@3 [b2,b3,b4], [f#4,a4,d5]@3 ~", // D D7 B D
  J: "[a2,a3,c5]@6 [b2,b3,b4]@2 [c3,c4,d4,f#4,a4]@4 [d3,d4,f#4,b4]@3 [c3,c4,c5], [d4,f#4] ~", // Am B D7 Bm C D
  K: "[b2,b3,d5]@6 [a2,a3,c5]@2 [g2,g3,d4,g4,b4]@4 [a2,a3,d4,g4,c5]@3 [b2,b3,d5], [d4,g4] ~", // Bm Am G Am7 Bm G5
  L: "[c3,c4,e4,g4,e5] [b2,b3,d4,g4] [c3,c4,e4,g4] [c#3,c#4,e4,g4,b4]", // C G C C#m7b5
  M: "[d3,d4]@4 [d3,d4]@3 [d3,d4] [d3,d4]@4 [d3,c4,f#4,a4]@3 [b3,b4], [f#4,a4]@3 ~", // D D7 B F#m
  N: "[a3,c5]@6 [b3,b4]@2 [c4,f#4,a4]@4 [d4,f#4,b4]@3 [c4,c5], d3, f#4 ~", // Am B F#dim Bm C
  O: "[b3,g4,d5]@3 [a3,f#4,c5] [g3,g4,b4]@2 [g2,g#3,d4,f4,b4]@2, [g2,d4]@3 ~", P: "[a2,a3,d4,f#4,a4] [a2,a3,e4,g4,a4]",
  Q: "d3 c3 b2 a2, [a3,d4,f#4,a4]", R: "[g2,g3] [e2,e3] [d2,d3]!2, [b3,d4,g4] [c4,d4,f#4]",
  S: "[g2,g3] [d2,d3] [c2,c3] [b1,b2], [b3,d4,g4]@3 ~", T: "[a1,a2,e4,a4,c5] [g2,g3,e4,a4,c5]",
  U: "[f#2,f#3] [e2,e3,g4] [d2,d3,f#4] [f#2,f#3], [d4,a4]@3 ~", V: "[g2,g3,d4,g4,b4] [g2,g3,d#4,f4,b4]",
  W: "[c3,c4,e4,g4,c5] [a2,a3,e4,g4,c5] [b2,b3,d4,g4,b4] [c3,c4,e4,a4]", X: "e3 d3 [c3,c4,e4,f#4,a4]@2, [b3,e4,g4] ~",
  Y: "[b2,b3]@4 [b2,b3]@3 [b2,b3] [b2,b3]@4 [b2,b3]@4, [d#4,f#4,a4,b4]@3 ~", // B B7
  Z: "[b2,b3,d4,g4,d5]@4 [b2,b3,d#4,g4,d#5]@3 [b2,b3,d4,g4,d#5]", // G Baug G
  AA: "[c3,c4,e4,g4,e5] [a2,a3,e4,a4,c5] [b2,b3,d4,g4,b4] [c3,c4,e4,a4]", // C Am G Am
  AB: "d3@4 [d2,d3]@3 [d2,d3] [d2,d3]@4 [d2,d3]@4, [d4,g4,b4] [c4,d4,f#4]", AC: "[g2,g3,b3,d4,g4]",
})).s("gm_piano").gain(0.3)

stack(piano)