Strudelify

L'empordà

sopa de cabra

KeyE majorTempo120 bpm
0:00/0:00
// L'empordà — sopa de cabra
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "Piano" named as a piano, played on piano (its rock organ patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/2362986; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitarra elèctrica.
setcpm(120/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.

// other · clarinet · "Clarinet en Si♭"
const clarinet = note(`<
  ~@8 A B C D E B C D F G H ~ I@4 J@2 K@2 J@2 L@2 ~@4 A B C D E B C D F G H ~ I@4 J@2 K@2 J@2 L@2 ~@8 J@2 K@2 J@2 L@2
  M@2 N@2 J@2 L@2 O P Q R O P S T U
>`.pickRestart({
  A: "g#3 b3!4 b3@2 g#3", B: "b3!2 c#4@4 ~@2", C: "~ b3 ~ b3 b3@2 b3!2", D: "c#4 b3@2 g#3@2 f#3 e3@2",
  E: "g#3 b3!6 g#3", F: "a3@2 a3 a3@2 a3 ~ a3", G: "~ g#3 a3 g#3 a3 g#3 a3 g#3", H: "b3 g#3@5 ~@2",
  I: "[g#3 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 b3@2 c#4@5 ~ b3@2 g#3@5 ~@4]/4",
  J: "[~ g#3!2 f#3 e3@2 e3 g#3@2 b3@2 b3@2 b3@2 ~]/2", K: "[g#3 b3@2 b3@2 b3@2 c#4@2 b3@2 g#3@3 ~@2]/2",
  L: "[g#3 b3@2 b3@2 b3@2 c#4@2 b3@2 b3@3 ~@2]/2", M: "[~ e4!3 e4@2 e4 e4@2 e4@2 e4@2 b3@2 ~]/2",
  N: "[b3 b3@2 b3@2 b3@2 c#4@2 b3@2 g#3@3 ~@2]/2", O: "d#4 e4@2 e4@3 d#4@2", P: "d#4 c#4@2 c#4@5",
  Q: "~ b3@2 b3@3 a3@2", R: "a3 g#3@2 e4@3 ~@2", S: "~ b3@2 b3@3 g#3@2", T: "f#3 e3@2 e3@3 ~@2", U: "e3",
})).s("gm_clarinet").gain(0.3)

// chords · electric guitar clean · "Guitarra elèctrica"
const electric_guitar_clean = note(`<
  A B C D A B E F ~@12 G ~@11 A B E F ~@12 G ~@11 H I J K L@4 ~@16 A B C D A B E F ~
>`.pickRestart({
  A: "d#4 e4@2 ~@3 d#4@2", B: "d#4 c#4@2 c#4@5", C: "~ b3@2 ~@3 a3@2", D: "a3 g#3@2 ~@5", E: "~ b3@2 ~@5",
  F: "f#3 e3@2 ~@5", G: "~@5 f#2 g#2 f#2", H: "~ c#4 e4@4 ~@6 f#4@2 e4@2", I: "g#4@3 f#4@3 ~@2",
  J: "~ c#4 e4@4 c#4@2 e4@4 f#4@2 e4@2", K: "g#4@4 g#4 b4 g#4@2 f#4@2 e4@2 ~@4",
  L: "[c#5@5 e5@2 g#5@2 f#5 e5@3 g#5@2 b5@6 a5 g#5 f#5@4 c#5 c#5@2 d#5@2]/4",
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · electric guitar clean · "Guitarra elèctrica"
const electric_guitar_clean_2 = note(`<
  A B C A@2 B C A@2 B C A@2 B C D B@2 A@2 E@2 F@2 G H G I G H G I A B C A@2 B C A@2 B C D B@2 A@2 E@2 F@2 G H G I G H G
  I A B C A@2 B E@2 G H G I G H G I G H G I G H G I A B C A@2 B C A J
>`.pickRestart({
  A: "[e2,b2]@3 [e2,b2]@2 b2 c#3 b2", B: "[a2,e3]@3 [a2,e3]@2 e3 f#3 e3", C: "[b2,f#3]@3 [b2,f#3]@2 f#2 g#2 f#2",
  D: "[e2,b2]@3 [e2,b2]@2 e2 f#2 g#2", E: "[b2,f#3]@3 [b2,f#3]@5",
  F: "[[c#3,g#3]@5 [b2,f#3]@2 [a2,e3]@4 [a2,e3] [a2,e3]@2 [b2,f#3]@2]/2", G: "[c#3,g#3]@3 [a2,e3]@5",
  H: "[e2,b2]@3 [a2,e3]@5", I: "[b2,f#3]@3 [a2,e3] [a2,e3]@2 [b2,f#3]@2", J: "[e2,b2]",
})).s("gm_electric_guitar_clean").gain(0.3)

// chords · piano
const piano = note(`<
  A B C D A B E F G H I G J K L M K@2 J@2 N@2 O@2 P Q P R P Q P R A B E F G H I G J K L M K@2 J@2 N@2 O@2 P Q P R P Q P
  R J K L J@2 K N@2 P Q P R P Q P R P Q P R P Q P R A B C D A B E F S
>`.pickRestart({
  A: "d#5 e5@2 e3 ~@3 e3, e3@3 e5@3 d#5@2, ~@4 e3@3 ~", B: "d#5 c#5@2 a3 a3@3 a3, a3@6 c#5@9 ~",
  C: "~ b4@2 b3 ~@3 b3, b3@3 b4@3 a4@2, ~@4 b3@3 ~", D: "a4 g#4@2 e3 e3@3 e3, e3@3 e5@3 ~@2",
  E: "~ b4@2 b3 ~@3 b3, b3@3 b4@3 g#4@2, ~@4 b3@3 ~", F: "f#4 e4@2 e3 e3@3 e3, e3@3 e4@3 ~@2",
  G: "[e3,b3]@3 [e3,b3]@2 b3 c#4 b3", H: "[a3,e4]@3 [a3,e4]@2 e4 f#4 e4", I: "[b3,f#4]@3 [b3,f#4]@2 f#3 g#3 f#3",
  J: "[e2,b2]@3 [e2,b2]@2 b2 c#3 b2", K: "[a2,e3]@3 [a2,e3]@2 e3 f#3 e3", L: "[b2,f#3]@3 [b2,f#3]@2 f#2 g#2 f#2",
  M: "[e2,b2]@3 [e2,b2]@2 e2 f#2 g#2", N: "[b2,f#3]@6 [b2,f#3]@9 ~",
  O: "[[c#3,g#3]@9 ~ [b2,f#3]@4 [a2,e3]@8 [a2,e3]@2 [a2,e3]@4 [b2,f#3]@4]/2", P: "[c#3,g#3]@6 [a2,e3]@9 ~",
  Q: "[e2,b2]@6 [a2,e3]@9 ~", R: "[b2,f#3]@3 [a2,e3] [a2,e3]@2 [b2,f#3]@2", S: "[e3,b3,e4,b4]@15 ~",
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Baix elèctric"
const bass = note(`<
  A B C A@2 B C A@2 B C A@2 B C A B@2 A@2 C D E@2 F G F H F G F H A B C A@2 B C A@2 B C A B@2 A@2 C D E@2 F G F H F G F
  H A B C A@2 B C D F G F H F G F H F G F H F G F H A B C A@2 B C A I
>`.pickRestart({
  A: "e1@3 e1 e1@3 e1", B: "a1@3 a1 a1@3 a1", C: "b1@3 b1 b1@3 b1", D: "b1@3 b1 b1@2 ~ b1",
  E: "[c#2@5 b1@2 a1@4 a1 a1@2 b1@2]/2", F: "c#2@3 a1@5", G: "e1@3 a1@5", H: "b1@3 a1 a1@2 b1@2", I: "e1",
})).s("gm_electric_bass_finger").gain(0.3)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@2 x]!92 x>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!92 ~>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<A ~@7 A ~@7 A ~@7 A ~@11 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A>".pickRestart({
  A: "x",
})).gain(0.3)

stack(clarinet, electric_guitar_clean, electric_guitar_clean_2, piano, bass, kick, snare, crash)