0:00/0:00
// 14 Canons BWV 1087 — J.S. Bach
// 92 bpm, 2/4, key G major. 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 (1/4 at bar 1, 2/4 at bar 2, 1/4 at bar 5, 2/4 at bar 6, ...) are rendered on a constant 2/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1085451; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 280 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/2)
// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · harpsichord
const harpsichord = note(`<
A@2 B@7 C D E@4 F G H@4 I J@5 K ~ L@3 M N O@4 P Q R@3 ~ S T@5 U V@4 W X ~@2 Y Z AA AB AC Z AA AB AC Z AA AB AC Z AA AB
AC Z AD ~ AE AF AG AH AI AF AG AH AI AF AG AH AI AF AG AH AI AF AG AJ AK AL AM AN AK AL AM AN AK AL AM AN AK AL AM AN
AK AL AM AO ~ AP AQ AR AS AT AQ AR AS AT AQ AR AS AT AQ AR AU AV AW AX AY AV AW AX AY AV AW AX AY AV AW AX AY AV AW AX
AZ ~ BA@2 BB BC BD@2 BB BC BD@2 BB BC BD@2 BB BC BD@2 BE ~ BF BG BH BI BJ BG BH BI BJ BG BH BI BJ BG BH BI BJ BG BH BI
BJ BG BK AJ BL BM BN BO BP BQ BR BS BL BM BN BO BP BQ BR BS BL BM BN BO BP BQ BR BS BL BM BN BO BP BQ BR BT BU@6 BV
BW@2 BX BY BZ CA CB@4 CC@24 CD@6
>`.pickRestart({
A: "[~@14 g3@9 f#3@9]/2", B: "[e3@9 ~ d3@9 b2@9 c3@9 d3@9 g2@9 ~ g2@7 d3@7 c3@7 ~ b2@7 d3@7 e3@7 ~ f#3@7 g3@5]/7",
C: "~@3 g2@7 d3@6", D: "~ c3@7 ~ b2@7", E: "[d3@7 e3@7 ~ f#3@7 g3@7 g2@7 ~ d3@7 c3@7 ~ b2@7 d3@5]/4",
F: "~@2 e3@7 ~ f#3@6", G: "~ g3@7 d3@7 ~", H: "[e3@7 f#3@7 g3@7 ~ b3@7 a3@7 g3@7 ~ d4@7 d3@7 ~ e3@5]/4",
I: "~@2 f#3@7 g3@7", J: "[~ b3@7 a3@7 g3@7 ~ d4@7 d3@7 e3@7 ~ f#3@7 g3@7 ~ b3@7 a3@7 g3@6]/5", K: "~@2 d4@7 ~@7",
L: "[~@6 d3@7 ~ e3@7 f#3@7 g3@7 ~ b3@7 a3@5]/3", M: "~@3 g3@7 d4@6", N: "~ d3@7 ~ e3@7",
O: "[f#3@7 g3@7 ~ b3@7 a3@7 g3@7 ~ d4@7 d3@7 ~ e3@7 f#3@5]/4", P: "~@2 g3@7 ~ b3@6", Q: "~ a3@7 g3@7 ~",
R: "[d4@7 d3@7 e3@7 ~ f#3@7 g3@7 ~@12]/3", S: "~@2 g3@7 f#3@7",
T: "[~ e3@7 d3@7 b2@7 ~ c3@7 d3@7 g2@7 ~ g3@7 f#3@7 ~ e3@7 d3@7 b2@6]/5", U: "~@2 c3@7 d3@7",
V: "[g2@7 ~ g3@7 f#3@7 e3@7 ~ d3@7 b2@7 c3@7 ~ d3@7 g2@5]/4", W: "~@3 g3@7 f#3@6", X: "~ e3@7 ~ d3@7",
Y: "~@2 d5 e5 d5 c5 b4 a4", Z: "g4 c5 e5 g5 f#5 e5 d5 c5", AA: "b4 e5 d5@2",
AB: "~@2 c5 b4 a4@2 b4@2 c5@2 d5@2 b4@2 c5@2", AC: "d5 c5 d5 e5 d5 c5 b4 a4", AD: "b4 e5 ~@2", AE: "~@5 d4 e4 f#4",
AF: "g4 g#4 a4 e4", AG: "f4 f#4 g4@2", AH: "~ e4 d4 c#4 d4 f#4 a4@2", AI: "~@2 g4 f#4 g4@2 a4@2 b4@2 d4@2 e4@2 f#4@2",
AJ: "~ d4 e4 f#4 g4 b4 a4 g4", AK: "d5@5 e5 d5 c#5", AL: "d5@5 b3 c4 d4", AM: "e4 g4 f#4 e4 b4@2 a4@2",
AN: "g4 d4 e4 f#4 g4 b4 a4 g4", AO: "g4 d4 e4 f#4 ~@4", AP: "~@6 d4 e4", AQ: "f#4 g#4 a4 c5", AR: "b4 a4 e5@2",
AS: "~ d5 a5 a4", AT: "b4@2 c#5@2 d5@2 d4 e4", AU: "~ g4 b4 d5 g5 d5 b4 g4", AV: "d5 d4 g4 b4 c#4 e4 g4 c#5",
AW: "~ d5 a4 f#4 d4 g4 b4 d5", AX: "g4@2 d5@2 c5@2 a4@2 c5@2 f#4@2 a4@2 d5 c5",
AY: "b4 a4 g4@2 b4@2 d5@2 g5@2 d5@2 b4@2 g4@2", AZ: "b4 a4 g4@2 b4@2 d5@2 ~@8", BA: "[~@3 g3@2 a3@2 b3]/2",
BB: "~ c4 b3 a3 g3 e3 f#3 g3", BC: "a3 b3 c4 d4 e4 f#4 g4 a4", BD: "[b4 a4 g4@2 ~@2 g3@4 a3@4 b3@2]/2",
BE: "~ c4 b3 a3 ~@4", BF: "~@3 d4", BG: "d#4 e4 f4 f#4", BH: "g4 f#4 g4 a4 b4@2 ~@2", BI: "~@2 f#4@2 b3 c#4 d4 e4",
BJ: "f#4@2 ~ d4", BK: "g4 f#4 g4 a4 ~@4", BL: "d5 g5 b5@5 a5", BM: "g5 f#5 e5 d5 c#5@2 g5@2",
BN: "~ e5 f#5 g5 f#5@2 a4@2", BO: "~ d4 e4 f#4 g4@2 g5@2", BP: "~ b4 a4 g4 e5@2 e4@2", BQ: "~ f#4 g4 a4!2 c4 a4@2",
BR: "~ c5 a4 e4 d4@2 c4@2", BS: "b3 d4 e4 f#4 g4 b4 a4 g4", BT: "b3 d4 e4 f#4 ~@4",
BU: "[~@15 g4@9 f#4@5 e4@4 d4@5 ~@2 f#4@2 ~ g4@2 a4@2 b4@2 ~ a4@2 g4@9 f#4@5 e4@4 d4@5 ~@2 f#4@2 g4@2 ~ a4@2 b4@2 a4@2 ~ g4@7]/6",
BV: "~@2 f#4@4 e4@5 d4@5", BW: "[~@2 f#4@2 g4@2 ~ a4@2 b4@2 a4@2 g4@9 ~ f#4@4 e4@5]/2",
BX: "d4@5 ~@2 f#4@2 g4@2 a4@2 ~ b4@2", BY: "a4@2 g4@9 f#4@5", BZ: "e4@5 d4@5 ~@2 f#4@2 g4@2",
CA: "a4@2 b4@2 ~ a4@2 g4@9",
CB: "[f#4@5 ~@2 d4@2 e4@2 f#4@2 g4@2 b4@2 a4@2 g4@2 d5@4 d4@4 ~@2 a3@2 b3@2 c#4@2 d4@2 f#4@2 e4@2 d4@2 a4@2 g4@2 f#4@2 d5@2 ~@2 e5 f#5 g5@2 g4@4 a4]/4",
CC: "[b4 e4@2 f#4 g4 f#4@2 g5@2 f#5@2 e5@2 d5@2 b4@2 c5@2 d5@2 g4@2 f#4@2 g4@2 a4@2 b4@2 d5@2 c5@2 b4@2 e5@2 f5@2 e5@2 d5@2 c5@2 a4@2 b4@2 c5@2 f#4@2 c#4@2 d4@2 e4@2 f#4@2 a4@2 g4@2 f#4@2 b4@2 d4@2 e4@2 f#4@2 g4@2 b4@2 a4@2 g4@2 d5@4 d4@4 ~@2 a3@2 b3@2 c#4@2 d4@2 f#4@2 e4@2 d4@2 a4@2 g4@2 f#4@2 d5@2 ~@2 e5 f#5 g5@2 g4@4 a4]/8",
CD: "[b4 e4@2 f#4 g4 f#4@2 g5@2 f#5@2 e5@2 d5@2 b4@2 c5@2 d5@2 g4@2 f#4@2 g4@2 a4@2 b4@2 d5@2 c5@2 b4@2 e5@2 f5@2 e5@2 d5@2 c5@2 a4@2 b4@2 c5@2 f#4@2 c#4@2 d4@2 e4@2 f#4@2 a4@2 g4@2 f#4@2 b4@2 d4@2 e4@2 f#4@2 g4@2 b4@2 a4@2 g4@2 ~@11]/6",
})).s("gm_harpsichord").gain(0.3)
// other · harpsichord
const harpsichord_2 = note(`<
~@59 A B C D E B C D E B C D E B C D E B F G H I J G H I J G H I J G H I J G H I J K L M N O L M N O L M N O L M N O L
M N P G H I J G H I J G H I J G H I J K L M N O L M N O L M N O L M N O L M N Q@2 R S T@2 R S T@2 R S T@2 R S T@2 R S
U ~ V W X Y Z W X Y Z W X Y Z W X Y Z W X Y Z W AA ~ AB AC AD AE AF AG AH@2 AB AC AD AE AF AG AH@2 AB AC AD AE AF AG
AH@2 AB AC AD AE AF AG AI@2 AJ@7 AK AL@3 AM AN AO AP AQ AR@2 AS AT AU AV AP AQ AR@2 AS AT AU AV AP AQ AR@2 AS AT AU AV
AP AQ AR@2 AS AT AU AV ~
>`.pickRestart({
A: "~ d3", B: "e3 f#3", C: "g3 b3", D: "a3 g3", E: "d4 d3", F: "g3 ~", G: "g3 f#3", H: "e3 d3", I: "b2 c3",
J: "d3 g2", K: "~ g3", L: "f#3 e3", M: "d3 b2", N: "c3 d3", O: "g2 g3", P: "g2 ~", Q: "[g2@2 ~ b4@2 a4@2 g4]/2",
R: "~ f#4 g4 a4 b4 d5 c5 b4", S: "a4 g4 f#4 e4 d4 c4 b3 a3", T: "[g3 a3 b3@2 ~@2 b4@4 a4@4 g4@2]/2",
U: "g3 a3 b3@2 ~@4", V: "~@3 d5", W: "c5@2 a#4@2 a4@2 d5 c5", X: "b4@2 e5@2 d5 c#5 d5 e5", Y: "f#5@2 ~ b5",
Z: "~ b4@2 c#5 d5 e5 d5@2", AA: "b4 e5 ~@2", AB: "~@3 d4", AC: "e4 f#4 g4 b4", AD: "a4 g4 d5 d4", AE: "a4 g4",
AF: "~@3 b4", AG: "a4 g4 f#4 d4", AH: "[e4 f#4 g4@3 a4 b4@2]/2", AI: "[e4 f#4 g4@3 a4 ~@2]/2",
AJ: "[~@10 d4@9 ~ c4@4 a3@5 b3@9 c4@9 d4@9 c4@5 a3@5 b3@9 c4@9 d4@9 c4@5 a3@4 b3@9 ~]/7", AK: "c4@9 d4@7",
AL: "[~@2 c4@5 a3@4 b3@9 c4@9 ~ d4@9 c4@4 a3@5]/3", AM: "b3@9 c4@7", AN: "~@2 d4@9 ~ c4@4", AO: "a3@5 ~@11",
AP: "~@9 g4@4 f#4@3", AQ: "~ e4@4 d4@4 b3@4 c#4@3", AR: "[~ d4@4 g3@8 g4@8 ~@4 c5@4 b4@3]/2",
AS: "~ a4@4 g4@4 e4@4 f#4@3", AT: "~ g4@4 c4@4 d4@4 e4@3", AU: "~ g3@4 ~@4 f#3@2 e3@2 d3@3", AV: "~ d4@4 ~@11",
})).s("gm_harpsichord").gain(0.3)
// other · harpsichord
const harpsichord_3 = note(`<
~@57 A B C D E B C D E B C D E B C D E B C D F ~@77 A B C D E B C D E B C D E B C D E B C D G H I J K H I J K H I J K
H I J K H I J K H I J L M N O P Q R S@2 M N O P Q R S@2 M N O P Q R S@2 M N O P Q R S@2 A T@4 U@3 V W@3 X@3 Y@32 ~
>`.pickRestart({
A: "~ g3", B: "f#3 e3", C: "d3 b2", D: "c3 d3", E: "g2 g3", F: "g2 ~", G: "g2@2 ~ b4", H: "c#5@2 d#5@2 e5@2 b4 c#5",
I: "d5@2 a4@2 b4 c5 b4 a4", J: "g4@2 ~ d4", K: "~ d5@2 c5 b4 a4 b4@2", L: "~ d5@2 c5 ~@4", M: "~@3 g4",
N: "f#4 e4 d4 b3", O: "c#4 d4 g3 g4", P: "c#4 d4", Q: "~@3 b3", R: "c4 d4 e4 g4", S: "[f#4 e4 d4@3 c4 b3@2]/2",
T: "[~ a3@5 c4@4 b3@9 ~ a3@9 g3@9 a3@5 c4@4 b3@9 a3@8]/4", U: "[~@2 g3@9 a3@4 c4@5 b3@9 a3@9 g3@9 ~]/3",
V: "a3@4 c4@5 b3@7", W: "[~@2 a3@9 g3@9 a3@5 c4@5 b3@9 a3@9]/3", X: "[g3@9 a3@5 c4@4 b3@9 ~ a3@9 ~@11]/3",
Y: "[~@5 g3@16 f#3@16 e3@16 d3@16 b2@16 c3@16 d3@16 g2@11]/8",
})).s("gm_harpsichord").gain(0.3)
// other · harpsichord
const harpsichord_4 = note(`<
~@175 A B C D E B C D E B C D E B C D E B C D E B C D F G@32 H@8 I@2 J@2 K@2 L ~@33
>`.pickRestart({
A: "~ g3", B: "f#3 e3", C: "d3 b2", D: "c3 d3", E: "g2 g3", F: "g2 ~",
G: "[~ g3@2 f#3@2 e3@2 d3@2 b2@2 c3@2 d3@2 g2]/8",
H: "[~@13 g3@4 f#3@5 e3@4 d3@5 [b2,d3]@5 [c3,e3]@4 [d3,f#3]@5 [g2,g3]@4 [g3,b3]@5 [f#3,a3]@5 [e3,g3]@4 [d3,d4]@5 [b2,d3]@4 [c3,e3]@5 [d3,f#3]@5 [g2,g3]@4 [g3,b3]@5 [f#3,a3]@4 [e3,g3]@5 [d3,d4]@5 [b2,d3]@4 [c3,e3]@5 [d3,f#3]@4 [g2,g3]@5 [g3,b3]@5]/8", // Bm C D G F#m Em D Bm …
I: "[[f#3,a3]@4 [e3,g3]@5 [d3,d4]@4 [b2,d3]@5 [c3,e3]@5 [d3,f#3]@4 [g2,g3]@5]/2", // F#m Em D Bm C D G
J: "[[g3,b3]@4 [f#3,a3]@5 [e3,g3]@5 [d3,d4]@4 [b2,d3]@5 [c3,e3]@4 [d3,f#3]@5]/2", // G F#m Em D Bm C D
K: "[[g2,g3]@5 [g3,b3]@4 [f#3,a3]@5 [e3,g3]@4 [d3,d4]@5 [b2,d3]@5 [c3,e3]@4]/2", L: "[d3,f#3]@5 ~@11",
})).s("gm_harpsichord").gain(0.3)
stack(harpsichord, harpsichord_2, harpsichord_3, harpsichord_4)
More by J. S. Bach
1. MenuettF major · 120 bpmAir 'on the G string' Orchestral Suite No. 3 in D major BWV 1068D major · 60 bpmAllein Gott in der Höh' sei Ehr' BWV 676G major · 74 bpmBrandenburg Concerto No.2 in F major BWV 1047C major · 100 bpmBrandenburg Concerto No.3 in G major BWV 1048G major · 100 bpmBWV 0779 duo mandolineC major · 120 bpmbwv 972 concerto after vivaldi op 3 no 9 1 allegro duetB♭ major · 100 bpmConcerto in G minor BWV 1056RA♭ major · 60 bpm
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.