Strudelify

A Garagem da Vizinha

Sandro & Gustavo

KeyC majorTempo138 bpm
0:00/0:00
// A Garagem da Vizinha — Sandro & Gustavo
// 138 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(138/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 · electric bass finger
const bass = note(`<
  ~ A B C D E F G B A@2 H@2 A E I B A@2 H@2 A E I G B A@2 H@2 A E I B A@2 H@2 A E B A H E J K L M@2 N@2 M O P L M@2 N@2
  M O P Q L M@2 N@2 M O P L M@2 N@2 M O L M N O R S T U@2 V@2 U W X T U@2 V@2 U W T U V W Y Z
>`.pickRestart({
  A: "g1 d2 g1 d2", B: "c2 g1 c2 g2", C: "g1 d2 g2 e1", D: "a1 e1 a1 g1", E: "f1 c2 g1 d2", F: "c2@2 g1@2 c2 g1 a1 g1",
  G: "c2@3 ~@13", H: "a1 e1 a1 e1", I: "c2 g1 c2 g1", J: "c2 g1 c2 c#2", K: "c#2 ~@7", L: "c#2 g#1 c#2 g#2",
  M: "g#1 d#2 g#1 d#2", N: "a#1 f1 a#1 f1", O: "f#1 c#2 g#1 d#2", P: "c#2 g#1 c#2 g#1", Q: "c#2@3 ~@13",
  R: "c#2 g#1 c#2 d2", S: "d2@3 ~@13", T: "d2 a1 d2 a2", U: "a1 e2 a1 e2", V: "b1 f#1 b1 f#1", W: "g1 d2 a1 e2",
  X: "d2 a1 d2 a1", Y: "d2 ~ f#2 ~ e2 d2 b1 ~ f#2 ~ f#2 ~ e2 d2 b1 ~", Z: "~ d1 ~@6",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B A C D E ~ E F@2 C@2 F D E@2 F@2 C@2 F D E ~ E F@2 C@2 F D E@2 F@2 C@2 F D E F C D G ~ H I@2 J@2 I K H@2 I@2 J@2
  I K H ~ H I@2 J@2 I K H@2 I@2 J@2 I K H I J K L ~ M N@2 O@2 N P M@2 N@2 O@2 N P M N O P ~ Q
>`.pickRestart({
  A: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // G
  B: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  C: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  D: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // F G
  E: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // C
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  G: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [c#4,f4,g#4] ~@3 [c#4,f4,g#4] ~", // C C#
  H: "~@2 [f4,g#4,c#5] ~@3 [f4,g#4,c#5] ~@3 [f4,g#4,c#5] ~@3 [f4,g#4,c#5] ~", // C#
  I: "~@2 [d#4,g#4,c5] ~@3 [d#4,g#4,c5] ~@3 [d#4,g#4,c5] ~@3 [d#4,g#4,c5] ~", // G#
  J: "~@2 [c#4,f4,a#4] ~@3 [c#4,f4,a#4] ~@3 [c#4,f4,a#4] ~@3 [c#4,f4,a#4] ~", // A#m
  K: "~@2 [c#4,f#4,a#4] ~@3 [c#4,f#4,a#4] ~@3 [d#4,g#4,c5] ~@3 [d#4,g#4,c5] ~", // F# G#
  L: "~@2 [f4,g#4,c#5] ~@3 [f4,g#4,c#5] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // C# D
  M: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~", // D
  N: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // A
  O: "~@2 [d4,f#4,b4] ~@3 [d4,f#4,b4] ~@3 [d4,f#4,b4] ~@3 [d4,f#4,b4] ~", // Bm
  P: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", Q: "~ [d4,f#4,a4] ~@6",
})).s("gm_acoustic_guitar_steel").gain(0.5).pan(0.6)

// other · accordion
const accordion = note("<A B C@3 D E@2 ~@32 F@3 G H I ~@33 J K L M N ~@15 O P Q R S T>".pickRestart({
  A: "~@3 g5, ~@12 f#5 ~@3", B: "~@2 f5@3 ~ b4@2 a4@4 f#4@2 g4@2",
  C: "[e4@4 g4 e4 g4 c4 c5@3 f#5 g5@6 f5@2 d5@2 b4@2 a4@3 g#4 g4@2 a4@4 a4@2 [d#5,e5] d5 ~ c5 a4@2 a4@2 c5@2 a4@2]/3", // Emaj7
  D: "f4@3 ~ a4 f4 a4 f4 b4 g4 b4 g4 d5 g4 b4 g4",
  E: "[c5@3 ~ [e4,g4] g4 e4 c5 e4 g4 c4 g4 e4 g4 e4 ~ [e4,g4]@3 ~@13, ~@15 c5@3 ~@14]/2", // Em
  F: "[e4@4 g4 e4 g4 c4 c5@3 f#5 g5@6 f5@2 d5@2 b4@2 a4@3 g#4 g4@2 a4@5 ~ a4 e4 [e4,b4] ~ c5@2 b4@2 a4@2 g4@2]/3", // E5
  G: "f4 a4 c5 f4 g4 b4 d5 b4", H: "~@2 g4 e4 c5 e4 [e4,g4] c5 ~@2 f5 ~ d#5 c#5 a#4@2, c5 ~@3", I: "c#5 ~@15",
  J: "~ d#4 g#4 ~ [g#4,c5] ~ d#4 g#4 c5 g#4 d#4 g#4 c5 g#4 d#4 ~", // G#
  K: "~ g#4 [a#4,c#5] d#5 f5 [d#5,e5] e5 f5@5 f5 ~ f#5 ~", // A#m Emaj7
  L: "~@2 c#5 f#5 ~@2 [a#4,c#5] f#5 g#5@4 f#5@2 g#5@2, ~@12 a#4 ~@3", M: "f5@2 c#5 ~ g#4@3 ~@3 f#5 ~ e5 d5 b4@2",
  N: "d5 ~@15", O: "~@10 [g#5,a5] ~ a5 ~ a5@2", P: "a5 g5 e5 c#5 b4@2 a4 b5",
  Q: "~ f#5 e5 d5 ~ e5 d5 b4 f#4@2 b4@2 d5@2 g4@2",
  R: "g4@2 ~ d5@2 g4 d5 ~ c#5@2 a4 c#5 e5 a4 c#5 e5, ~@2 b4@2 ~ b4@2 ~@9",
  S: "d5 ~ f#5 ~ e5 d5 b4 ~ f#5 ~ f#5 ~ e5 d5 b4 ~", T: "~ [f#4,a4,d5] ~@6",
})).s("gm_accordion").gain(0.6).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A@7 B@6 C@7 D E@3 F@3 G@3 H@8 I@5 J@2 K@6 L@7 M N@3 O@3 P@3 Q@8 R@5 S ~ T@3 U@3 V@8 W@5 ~@2
>`.pickRestart({
  A: "[[b3,d4]@16 [c4,e4]@16 [b3,d4]@15 ~ a4@16 [a3,f4]@8 [b3,d4]@8 [c4,e4]@18 ~@14, g4@47 c4@23 ~@42, ~@47 e4@17 ~@8 g4@27 ~@13]/7", // Bm C Bm Dm Bm C
  B: "[[c4,e4]@16 [b3,d4]@31 ~ [a3,c4]@31 ~ [d4,g4]@16, g4@47 e4@32 b3@17]/6", // C Bm Am G5
  C: "[[a3,c4,f4]@8 [b3,d4]@8 [c4,e4]@31 [b3,d4]@32 ~ a3@31 ~, ~@8 g4@71 [c4,e4]@33]/7", D: "[b3,d4,g4]",
  E: "[[a3,c4,f4]@8 [b3,d4]@8 [c4,e4]@17 ~@15, ~@8 g4@25 ~@15]/3", F: "[[c4,e4] [b3,d4]@2, g4]/3",
  G: "[[a3,c4,e4]@31 ~ [d4,g4]@16, ~@31 b3@16 ~]/3", // Am G5
  H: "[[a3,c4,f4]@7 ~ d4@8 [c4,e4]@32 [b3,d4]@31 ~ a3@31 [b3,d4,g4]@17, ~@7 b3@9 ~@63 [c4,e4]@33 ~@16, ~@8 g4@71 ~@49]/8", // F C Bm G C
  I: "[[a3,c4,f4]@8 [b3,d4]@8 [c4,e4]@16 [b3,d4]@15 ~ e4@16 f4@8 [b3,d4,g4]@8, ~@8 g4@39 a3@25 ~@8, ~@6 c4@3 ~]/5", // F Bm C Bm G
  J: "[[c4,e4,g4]@10 ~ f4@7 ~@14, ~@5 [c#4,g#4]@4 ~@7]/2", // C C#5
  K: "[[c#4,f4]@16 [c4,d#4]@31 ~ [a#3,c#4]@31 ~ [d#4,g#4]@16, g#4@47 f4@32 c4@17]/6", // C# Cm A#m G#5
  L: "[[a#3,c#4,f#4]@8 [c4,d#4]@8 [c#4,f4]@31 [c4,d#4]@32 ~ a#3@31 ~, ~@8 g#4@71 [c#4,f4]@33]/7", M: "[c4,d#4,g#4]",
  N: "[[a#3,c#4,f#4]@8 [c4,d#4]@8 [c#4,f4]@17 ~@15, ~@8 g#4@25 ~@15]/3", O: "[[c#4,f4] [c4,d#4]@2, g#4]/3",
  P: "[[a#3,c#4,f4]@31 ~ [d#4,g#4]@16, ~@31 c4@16 ~]/3", // A#m G#5
  Q: "[[a#3,c#4,f#4]@7 ~ d#4@8 [c#4,f4]@32 [c4,d#4]@31 ~ a#3@31 [c4,d#4,g#4]@17, ~@7 c4@9 ~@63 [c#4,f4]@33 ~@16, ~@8 g#4@71 ~@49]/8", // F# C# Cm G# C#
  R: "[[a#3,c#4,f#4]@8 [c4,d#4]@8 [c#4,f4]@16 [c4,d#4]@15 ~ f4@16 f#4@8 [c4,d#4,g#4]@8, ~@8 g#4@39 a#3@25 ~@8, ~@6 c#4@3 ~]/5", // F# Cm C# Cm G#
  S: "[c#4,f4,g#4]@10 ~ f#4@5, ~@5 [d4,a4]@3", T: "[[d4,f#4] [c#4,e4]@2, a4]/3",
  U: "[[b3,d4,f#4]@31 ~ [e4,a4]@16, ~@31 c#4@16 ~]/3", // Bm A5
  V: "[[b3,d4,g4]@7 ~ e4@8 [d4,f#4]@32 [c#4,e4]@31 ~ b3@31 [c#4,e4,a4]@17, ~@7 c#4@9 ~@63 [d4,f#4]@33 ~@16, ~@8 a4@71 ~@49]/8", // G D C#m A D
  W: "[[b3,d4,g4]@8 [c#4,e4]@8 [d4,f#4]@16 [c#4,e4]@15 ~ f#4@16 g4@8 [c#4,e4,a4]@8, ~@8 a4@39 b3@25 ~@8, ~@6 d4@3 ~]/5", // G C#m D C#m A
})).s("gm_synth_strings_1").gain(0.36).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!6 x [x!4]!37 x [x!4]!57 x [~ x ~@6]>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~ A@6 ~ A@16 B A@20 ~ A@16 B A@20 B A@19 C ~>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~@2 x ~ x!2 ~@2 x ~ x ~ x!2 ~@2",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~ A B@5 C A B@15 C B@8 A B@11 C A B@15 C B@8 A B@11 C B@8 A B@10 C D>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x", D: "~ x ~@6",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@7 B ~@12 C ~@16 A ~@7 B ~@12 A ~@7 B ~@13>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@3 x",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@32 [~@5 x!2 ~] ~@37 [~@5 x!2 ~] ~@20 [~@5 x!2 ~] ~@13>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~ A@6 ~ A@16 ~ A@20 ~ A@16 ~ A@20 ~ A@19 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A@16 ~ A@20 ~ A@16 ~ A@20 ~ A@19 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~ A ~@6 A ~@15 B ~@8 A ~@12 A ~@15 B ~@8 A ~@11 B ~@8 A ~@12>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.56)

stack(
  bass, acoustic_guitar_steel, accordion, synth_strings_1, kick, snare, hihat, low_tom, mid_tom, open_hat, tambourine,
  crash
)