Strudelify

'O scarrafone

Daniele

KeyG majorTempo105 bpm
0:00/0:00
// 'O scarrafone — Daniele
// 105 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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.

// bass · fretless bass
const bass = note(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B C D C D A B A B A B A B E F E G E G E G A B A B A B C D C D A B A B A B A
  B E F E G E G E G A B A B A B H D H D A B A B C D C D A B A B A I
>`.pickRestart({
  A: "a1@2 ~ a1@3 g1 ~ e1@2 ~ e1@3 g1 ~", B: "a1@2 ~ a1@3 g1 ~ e1@2 e1@2 g1 ~ g#1 ~",
  C: "b1@2 ~ b1@3 a1 ~@2 f#1@2 f#1 ~@2 a1 ~", D: "b1@2 ~ b1@3 a1 ~ f#1@2 f#1@2 a1 ~ a#1 ~",
  E: "b1@3 f#2@3 b1 ~ g1@3 d2@3 g1 ~", F: "f#1 ~ f#1 ~ c#2 ~ c#2@2 b1@2 ~ b1 f#2@2 d2 ~",
  G: "f#1 ~ f#1 ~ c#1 ~ c#1@2 b1@2 ~ b1 f#2@2 d2 ~", H: "b1@2 ~ b1@3 a1 ~ f#1@2 ~ f#1@3 a1 ~", I: "a1@2 ~ a1@3 g1 ~@9",
})).s("gm_fretless_bass").gain(0.59)

// chords · epiano2
const epiano2 = note(`<
  ~ A@2 B@2 A@2 C@2 D@2 C@2 E F E F E F E F E F E F G H G H E F E F E F E F ~@8 C@2 D@2 C@2 G H G H E F E F E F E F ~@8
  E F E F E F G I G I E F E F G H G H A@2 C@2 J@2
>`.pickRestart({
  A: "[~@3 [b3,c4,g4]@3 [b3,c4,g4] ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4]@3 [c4,g4] ~@4 g3 ~ [g3,a3,d4] ~ [g3,a3,d4] ~, ~@21 b3@2 ~@9]/2", // Cmaj7 C5 Gsus2
  B: "[~@3 [b3,c4,g4]@3 [b3,c4,g4] ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4]@3 [b3,c4,g4] ~@3 [g3,a3,d4] ~@2 [g3,a3,d4]@3 ~]/2", // Cmaj7 Gsus2
  C: "[~@3 [b3,c4,g4]@3 [b3,c4,g4] ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4]@3 [c4,g4] ~@3 [g3,a3,d4] ~@2 [g3,a3,d4]@3 ~, ~@21 b3@2 ~@9]/2", // Cmaj7 C5 Gsus2
  D: "[~@3 [b3,c4,g4]@3 [b3,c4,g4] ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4]@3 [b3,c4,g4] ~@4 g3 ~ [g3,a3,d4] ~ [g3,a3,d4] ~]/2", // Cmaj7 Gsus2
  E: "~@3 [b3,c4,g4]@3 [b3,c4,g4] ~@2 [b3,c4,g4] ~@2 [b3,c4,g4] ~ [b3,c4,g4] ~", // Cmaj7
  F: "~@3 [b3,c4,g4]@2 ~ [b3,c4,g4] ~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~ [g3,c4,d4]@2", // Cmaj7 Gsus4
  G: "~@3 [c#4,d4,a4]@3 [c#4,d4,a4] ~@2 [c#4,d4,a4] ~@2 [c#4,d4,a4] ~ [c#4,d4,a4] ~", // Dmaj7
  H: "~@3 [c#4,d4,a4]@2 ~ [c#4,d4,a4] ~@2 [a3,d4,e4] ~@2 [a3,d4,e4] ~ [a3,d4]@2, ~@14 e4 ~", // Dmaj7 Asus4 D5
  I: "~@3 [c#4,d4,a4]@2 ~ [c#4,d4,a4] ~@2 [a3,d4,e4] ~@2 [a3,d4,e4] ~ [a3,d4,e4]@2", // Dmaj7 Asus4
  J: "[~@3 [b3,c4,g4]@3 [b3,c4,g4] ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4] ~ [b3,c4,g4]@2 ~ [b3,c4,g4]@3 [b3,c4,g4] ~@10]/2", // Cmaj7
})).s("gm_epiano2").gain(0.4).pan(0.3)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@5 A B A B A B A B C D C E C D C F C D C D G H G I C D C F C D C J K@2 L M N O P Q A B A B A B G H G I C D C F C D C
  J K@2 L M N O P Q C D C D C E G H G R C D C D G H G I A B A B A S
>`.pickRestart({
  A: "~@3 [c4,g4]@2 ~ [c4,g4] ~@2 [c4,g4] ~@2 [c4,g4] ~ [c4,g4] ~", // C5
  B: "~@3 [c4,g4]@2 ~ [c4,g4] ~@2 [a3,d4] ~@2 [a3,d4] ~ [a3,d4] ~", // C5 D5
  C: "~@3 [b3,c4,g4]@3 [b3,c4,g4] ~@2 [b3,c4,g4] ~@2 [b3,c4,g4] ~ [b3,c4,g4] ~", // Cmaj7
  D: "~@3 [b3,c4,g4]@2 ~ [b3,c4,g4] ~@2 [g3,c4,d4] ~@2 [g3,c4,d4] ~ [g3,c4,d4]@2", // Cmaj7 Gsus4
  E: "~@3 [b3,c4,g4]@2 ~ [b3,c4,g4] ~@2 [g3,c4,d4] ~@2 [g3,c4,d4,f#4] ~ [g3,c4,d4,f#4]@2", // Cmaj7 Gsus4
  F: "~@3 [b3,c4,g4]@2 ~ [b3,c4,g4] ~@2 [g3,c4,d4,f#4] ~@2 [g3,c4,d4,f#4] ~ [g3,c4,d4,f#4]@2", // Cmaj7 Gsus4
  G: "~@3 [c#4,d4,a4]@3 [c#4,d4,a4] ~@2 [c#4,d4,a4] ~@2 [c#4,d4,a4] ~ [c#4,d4,a4] ~", // Dmaj7
  H: "~@3 [c#4,d4,a4]@2 ~ [c#4,d4,a4] ~@2 [a3,d4,e4] ~@2 [a3,d4,e4] ~ [a3,d4,e4]@2", // Dmaj7 Asus4
  I: "~@3 [c#4,d4,a4]@2 ~ [c#4,d4,a4] ~@2 [a3,d4,e4] ~@2 [a3,d4,e4,g#4] ~ [a3,d4,e4,g#4]@2", // Dmaj7 Asus4
  J: "~@3 [b3,c4,g4]@2 ~ [b3,c4,g4] ~@2 [g3,c4,f#4] ~@2 [g3,c4,f#4] ~ [g3,c4,f#4]@2", // Cmaj7 C
  K: "[[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~ [g3,b3]!2 ~ [g3,b3]!3 [g3,a3] [g3,b3]@2 [f#3,b3] ~ [f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~]/2", // B5 G Gsus2 G B5
  L: "[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~ [g3,b3] ~ [g3,b3]!2 ~ [g3,b3]!2 [g3,a3]", // B5 G Gsus2
  M: "[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~ [f#3,a3] ~ [f#3,a3]!2 ~ [f#3,a3] [f#3,b3] ~", // B5 F#m B5
  N: "[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~ [g3,b3] ~ [g3,b3]!2 ~ [g3,b3]!3", // B5 G
  O: "[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~ [f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~", // B5
  P: "[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3]!2 ~ [g3,b3]!2 ~ [g3,b3] ~ [g3,b3]!2 ~", // B5 G
  Q: "[f#3,b3] ~ [f#3,b3]!2 ~ [f#3,b3] [f#3,a3]@2 [f#3,b3]@2 [f#3,b3]!2 ~ [f#3,b3]!2 ~", // B5 F#m B5
  R: "~@3 [c#4,d4,a4]@2 ~ [c#4,d4,a4] ~@2 [a3,d4,e4,g#4] ~@2 [a3,d4,e4,g#4] ~ [a3,d4,e4,g#4]@2", // Dmaj7 Asus4
  S: "~@3 [c4,g4]@2 ~ [c4,g4] ~@9", // C5
})).s("gm_electric_guitar_muted").gain(0.44).pan(0.7)

// chords · rock organ
const rock_organ = note(`<
  ~ A@4 B@7 C D E D E D E D F D E D G H@2 I J D E D F D E D E K L K L K L K L B@5 C H@2 I J D E D F D E D E K L K L K L
  K L D E D E D E I H I M D E D G H@2 I J B@5 N
>`.pickRestart({
  A: "[g5@3 d5]/2", B: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~",
  C: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5,a5] ~@3 [d5,g5,a5] ~", // G5 Dsus4
  D: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~, a4@3 g4", // G5
  E: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~, a4@3 c5", // G5
  F: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5,a5] ~@3 [d5,g5,a5] ~, a4@3 c5", // G5 Dsus4
  G: "~@2 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~@3 [d5,g5] ~, a4@11 ~@5", // G5
  H: "~@2 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5] ~, b4@3 d5", // A5
  I: "~@2 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5] ~, b4@3 a4", // A5
  J: "~@2 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5] ~, b4@3 b4", K: "[f#4,b4,d5]@3 [g4,b4,d5]@5",
  L: "[f#4,a4,c#5]@3 [f#4,b4,d5]@5", M: "~@2 [e5,a5] ~@3 [e5,a5] ~@3 [e5,a5,b5] ~@3 [e5,a5,b5] ~, b4@3 d5",
  N: "~@2 [d5,g5] ~@3 [d5,g5] ~@9", // G5
})).s("gm_rock_organ").gain(0.44).pan(0.2)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@28 A@3 B@2 C@2 D ~ E@2 F@2 E@2 F@2 ~@9 A@3 B@2 C@2 G@2 E@2 F@2 E@2 F@2 ~@17 H ~@6
>`.pickRestart({
  A: "[~@6 [e5,b5]@7 ~@9 [g4,e5,d6]@2, ~@6 c5@17 ~]/3", B: "[~ b5@4 ~@23 [d4,g5,g6]@4, e4@25 ~@7, c5@5 ~@27]/2",
  C: "[~ e6@4 ~@23 [d4,g4,d5]@4, e4@19 ~@13, b4@5 ~@27]/2", D: "~ e5@4 ~@11, [e4,b4]@5 ~@11",
  E: "[~@4 b4 c#5 d5 a5@5 ~@2 f#5@2]/2", F: "[c#5@4 b4 c#5 d5 e5@2 a4@2 b4@4 ~]/2",
  G: "[~ e5@4 ~@27, e4@21 ~@11, b4@5 ~@27]/2", H: "~@3 [c5,e5,b5]",
})).s("gm_lead_8_bass_lead").gain(0.44).pan(0.7)

// other · overdriven guitar
const overdriven_guitar = note("<~@4 A@7 B C ~@33 D@4 E ~@20 F G@2 H I J K L M N O P Q R ~@3 S T@6>".pickRestart({
  A: "[~@12 a4 c5 d5 ~ d5@12 c5@3 a4@13 d4 f4 g4 ~ g4@12 d4@2 c4 d4@12 ~ a4 c5 d5 ~ d5@12 c5@3 a4@13 d4 f4 g4 a4, ~@15 e5@2 ~@30 a4@2 ~@30 e5@2 ~@31]/7",
  B: "g4@6 d4 c4", C: "d4 c4@3 ~@4",
  D: "[~@12 a4 c5 d5 ~ d5@12 c5@3 a4@13 d4 f4 g4 ~ g4@12 d4@2 c4@2, ~@15 e5@2 ~@30 a4@2 ~@15]/4", E: "d4 c4@5 ~@2",
  F: "~ g4 ~ g4 g4@2 f#4@2 g4@2 f#4 d4@2 a3@2 ~",
  G: "[~ g4 ~ g4 g4@2 f#4 g4 a4 ~ a4 [g4,a4]@2 f#4 ~ d4@2 [e4,g4] ~ [e4,g4] [e4,g4]@2 [d4,f#4] ~ f#4@2 d4 a3@3 ~@2]/2", // Gsus2 Em D
  H: "~ a3 d4 f#4 g4 a4 f#4 d4 a3 f#3 d3 a2 d2@3 ~", I: "~ c3 ~ e3@2 ~@2 e3 g3@2 ~ g3 f#3@2 ~ f#3",
  J: "a3@2 ~ a3 b3@2 ~ b3 c4@2 ~ d4 e4 ~ e4 ~", K: "e4@2 d4 e4@2 e4@2 d4 e4@2 [f#4,b4]@2 ~ e4 d4 b3, ~@6 [f#4,b4] ~",
  L: "a3 b3 b4@5 ~@2 [e4,g4] ~ [e4,g4]!2 [f#4,a4] ~ [g4,b4], ~@2 d#4@3 ~@11", // Em F#m G
  M: "[f#4,a4]!2 ~ [f#4,a4]!2 [g4,b4] ~ [f#4,a4] [e4,g4]!2 ~ [e4,g4]!2 [f#4,a4] ~ [e4,g4]", // F#m G F#m Em F#m Em
  N: "[d4,f#4]!2 ~ [d4,f#4]!2 [e4,g4] ~ [d4,f#4] [c#4,e4]!2 ~ [c#4,e4]!2 [d4,f#4] ~ [c#4,e4]", // D Em D C#m D C#m
  O: "[c4,e4]!2 ~ [c4,e4]!2 [d4,f#4] ~ [c4,e4] [b3,d4]!2 ~ [b3,d4]!2 [c4,e4] ~ [b3,d4]", // C D C Bm C Bm
  P: "[a3,c4]@4 ~ b3 c4 e4 g4 b4 d5@3 d5 ~ d5", Q: "d5@2 e4 g4 d5 b4 [g4,b4] [d4,e4] b3 a3@7",
  R: "~@3 d5 [d5,d#5] c5 d5@2 c5@6 d5 ~, ~ c4@2 ~@13, ~ [e4,a4,d5] ~@6", S: "~@12 a4 c5 d5 e5",
  T: "[d5@12 c5@3 a4@13 d4 f4 g4 ~ g4@12 d4@2 c4 d4@12 ~ a4 c5 d5 ~ d5@12 c5@3 a4@13 ~@4, ~@31 a4@2 ~@30 e5@2 ~@31]/6",
})).s("gm_overdriven_guitar").gain(0.55).pan(0.4)

// other · marimba
const marimba = note(`<
  A B C B C B C B C B C B C D E D E D E D E D E D E F G F G D E D E D E D E ~@8 B C B C B C F G F G D E D E D E D E ~@8
  D E D E D E F G F G D E D E F G F G B C B C B H
>`.pickRestart({
  A: "~@15 e2", B: "a2 ~@6 e2 a2 ~@6 e2", C: "a2 ~@6 e2!2 ~@2 e2!2 ~@2 e2",
  D: "[d4,g4] ~@2 [e4,a4] ~@2 [d4,g4] ~@3 [e4,a4] ~ [d4,g4] ~ [d4,g4] [e4,a4]", // G5 A5 G5 A5 G5 A5
  E: "[d4,g4] ~@2 [e4,a4] ~@2 [d4,g4] ~@7 [d4,g4] [e4,a4]", // G5 A5 G5 A5
  F: "[e4,a4] ~@2 [f#4,b4] ~@2 [e4,a4] ~@3 [f#4,b4] ~ [e4,a4] ~ [e4,a4] [f#4,b4]", // A5 B5 A5 B5 A5 B5
  G: "[e4,a4] ~@2 [f#4,b4] ~@2 [e4,a4] ~@7 [e4,a4] [f#4,b4]", H: "a2 ~@6 e2!2 ~@7",
})).s("gm_marimba").gain(0.42).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@12 B C D E F@2 G B@2 F H B@2 C D E F@2 G B@2 F H B I@8 A@6 B C D E F@2 G B@2 F H B I@8 B C B C D E F@2 G B@2 F H
  B@2 C D E A@5 J
>`.pickRestart({
  A: "x!4", B: "x ~@2 x!2 ~@3 x ~@3 x ~@2 x", C: "x ~@3 x ~@2 x!2 ~@3 x ~@3", D: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x",
  E: "x ~@3 x ~@3 x ~@3 x ~@2 x", F: "x ~@3 x ~@2 x!2 ~@3 x ~@2 x", G: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@3",
  H: "x ~@2 x!2 ~@2 x!2 ~@3 x ~@3", I: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", J: "x!3 ~",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~@2]!36 [~ x ~ x]!8 [~ x ~@2]!18 [~ x ~ x]!8 [~ x ~@2]!24>").gain(0.42)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@37 A B A B A B A B ~@18 A B A B A B A B ~@24>".pickRestart({
  A: "~@3 x ~@7 x ~@2 x ~", B: "~@11 x ~@2 x ~",
})).gain(0.21)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~@2]!36 ~@8 [~ x ~@2]!18 ~@8 [~ x ~@2]!24>").gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B C D E@2 B F A B C D E@2 B F A B C D A B C D E@2 B F A B C D G@8 C D E@2 B F A B C D E@2 B F A B C D G@8 A B A
  B C D E@2 B F A B C D A B C D A B C D E H
>`.pickRestart({
  A: "~@2 x!2 ~ x!3 ~@2 x ~@2 x!3", B: "~@2 x ~@2 x!2 ~@3 x!2 ~ x!2 ~", C: "~@2 x!2 ~ x!2 ~@3 x!2 ~ x!2 ~",
  D: "~@2 x!2 ~ x!2 ~@3 x!2 ~ x!3", E: "~@2 x ~@2 x!2 ~@3 x ~@2 x!2 ~", F: "~ x!2 ~@2 x!2 ~@3 x ~@2 x!2 ~",
  G: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", H: "~@2 x!2 ~ x!2 ~@9",
})).gain(0.21)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A B ~@3 B ~@2 A B ~@3 B ~@2 A B ~@2 A B ~@3 B ~@2 A B ~@13 B ~@2 A B ~@3 B ~@2 A B ~@10 A B A B ~@3 B ~@2 A B ~@2
  A B ~@2 A B ~@4
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@3 x ~@12",
})).gain(0.07)

// drums · low tom
const low_tom = s("lt").struct("<~@38 x!7 ~@19 x!7 ~@24>").gain(0.49)

// drums · open hat
const open_hat = s("oh").struct("<~@37 [~ x ~ x ~ x ~ x]!8 ~@18 [~ x ~ x ~ x ~ x]!8 ~@24>").gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@37 [~@7 x]!8 ~@18 [~@7 x]!8 ~@24>").gain(0.35)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A B ~@7 B ~@7 B ~@3 B ~@7 B ~@2 C B ~@2 C B ~@2 C ~@6 B ~@7 B ~@2 C B ~@2 C B ~@2 C B ~ B ~@7 B ~@3 B ~@3 B ~@5
>`.pickRestart({
  A: "~@11 x ~@4", B: "x", C: "~@7 x",
})).gain(0.28)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!36
  ~@8
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!18
  ~@8
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!23
  [~@2 x!2 ~@2 x!2 ~@8]
>`).gain(0.28)

// drums · congas
const congas = s("conga:18").struct(`<
  ~ A B ~ B A B A B A B A B A B ~ B A B A B A B A B A B ~ B A B A B A B A B ~@8 A B A B A B A B ~ B A B A B A B A B ~@8
  A B A B ~ B A B A B A B A B A B ~ B A B A B A@2
>`.pickRestart({
  A: "x!2", B: "x ~ x!2",
})).gain(1.35)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  A B C D C B C B C B C B C B C D C B C B C B C B C B C D C B C B C B C B C ~@8 B C B C B C B C D C B C B C B C B C ~@8
  B C B C D C B C B C B C B C B C D C B C B C B E
// … 25 more lines

More by Daniele