Strudelify

Songs of Freedom

Santana

KeyC majorTempo140 bpm
0:00/0:00
// Songs of Freedom — Santana
// 140 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 139 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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.

// chords · pad choir
const pad_choir = note("<~ A@8 B@8 C@8 A@8 D ~@8 A@8 C@8 A@8 D ~@8 A@8 C@8 A@8 B@8 D ~@8 A@8 B@8 D ~@6>".pickRestart({
  A: "[~@15 [a3,c4,e4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 c4@8 b3@8 [a3,c4,e4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,d4], ~@63 [g3,d4]@16 ~@49]/8", // Am F C Am F C Gsus4 G5
  B: "[~@7 b3@8 [a3,c4,e4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 c4@8 b3@8 [a3,c4,e4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 [g3,c4,d4], ~@63 [g3,d4]@16 ~@49]/8", // Am F C Am F C Gsus4 G5
  C: "[~@7 b3@8 [a3,c4,e4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 c4@8 b3@8 [a3,c4,e4]@16 [f3,a3,c4,f4]@16 [g3,c4,e4]@16 ~, ~@63 [g3,d4]@16 ~@49]/8", // Am F C Am F C G5
  D: "~@7 b3@8 ~",
})).s("gm_pad_choir").gain(0.26)

// other · pad new age
const pad_new_age = note(`<
  ~@2 A B C D A B C D A B C D A B C D A B C D A B C ~@18 A B C D A B C D A B C D A B C ~@18 A B C D A B C D A B C D A B
  C ~@9 A B C D A B C D ~@9 A B C D A B C D A B C D A B C D E@6
>`.pickRestart({
  A: "[e5,e6] [a5,a6] [e5,e6] [a5,a6] [e5,e6] [a5,a6] [g5,g6] [f5,f6]", // E A E A E A G F
  B: "[c5,c6] [f5,f6] [c5,c6] [f5,f6] [c5,c6] [f5,f6] [g5,g6] [e5,e6]", // C F C F C F G E
  C: "[c5,c6] [e5,e6] [c5,c6] [e5,e6] [c5,c6] [e5,e6] [f5,f6] [g5,g6]", // C E C E C E F G
  D: "[d5,d6] [g5,g6] [d5,d6] [g5,g6] [d5,d6] [g5,g6] [e5,e6] [a5,a6]", // D G D G D G E A
  E: "[e5,e6] [a5,a6] [e5,e6] [a5,a6] [e5,e6] [a5,a6] [e5,e6] [a5,a6]", // E A E A E A E A
})).s("gm_pad_new_age").gain(0.24).pan(0.7)

// other · pan flute
const pan_flute = note(`<
  ~@3 A ~@3 A B ~@10 A ~@3 A B ~@27 A ~@3 A B ~@27 A ~@3 A B ~@35 A ~@3 A B ~@2 A ~@4
>`.pickRestart({
  A: "a4 a4@7", B: "g4",
})).s("gm_pan_flute").gain(0.26).pan(0.9)

// chords · percussive organ
const percussive_organ = note(`<
  ~@10 A B C D A B C D A B C D A B C ~@17 E F G H E F G H E F G H E F G H ~ F G H E F G H E ~@8 E F G H E F G H E F G H
  E F G H ~ F G H E F G H E A B C D A B C D ~@8 E F G H E F G H E F G H E F G H E I@6
>`.pickRestart({
  A: "[a2,a4,c5]", B: "[f2,a4,c5]", C: "[c3,g4,c5]", D: "c5 b4, [g2,g4]", E: "g2", F: "a2", G: "f2", H: "c3", I: "a2/6",
})).s("gm_percussive_organ").gain(0.24).pan(0.4)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@18 A B C D A B C ~ E@2 F G E@2 F G ~@9 A B C D A B C D A B C D A B C ~ E@2 F G E@2 F G ~@9 A B C D A B C D A B C D A
  B C ~ E@2 F G E@2 F G A B C D A B C D ~@9 A B C D A B C D A B C D A B C D ~@6
>`.pickRestart({
  A: "e4 a4 e4 a4 e4 a4 g4 f4", B: "c4 f4 c4 f4 c4 f4 g4 e4", C: "c4 e4 c4 e4 c4 e4 f4 g4",
  D: "d4 g4 d4 g4 d4 g4 e4 a4", E: "a4!2 ~ a4 b4 ~ b4 c5 ~ c5 a4@2 b4@2 c5@2",
  F: "c5!2 ~ c5 d5 ~ d5 e5 ~ e5 c5@2 d5@2 e5@2", G: "g4!2 ~ g4 a4 ~ a4 b4 ~ b4 g4@2 a4@2 b4@2",
})).s("gm_lead_2_sawtooth").gain(0.31).pan(0.3)

// other · lead 1 square
const lead_1_square = note("<~@26 A@2 B C A@2 B C ~@25 A@2 B C A@2 B C ~@25 A@2 B C A@2 B C ~@39>".pickRestart({
  A: "a3!2 ~ a3 b3 ~ b3 c4 ~ c4 a3@2 b3@2 c4@2", B: "c4!2 ~ c4 d4 ~ d4 e4 ~ e4 c4@2 d4@2 e4@2",
  C: "g3!2 ~ g3 a3 ~ a3 b3 ~ b3 g3@2 a3@2 b3@2",
})).s("gm_lead_1_square").gain(0.3).pan(0.7)

// bass · synth bass 2
const bass = note(`<
  ~@26 A B C D A B C D A B A B A B A B E A B C D A B C D A B C D A B C ~ A B C D A B C D A B A B A B A B E A B C D A B C
  D A B C D A B C ~ A B C D A B C D ~@8 A B A B A B A B E A B C D A B C D A B C D A B C D ~@6
>`.pickRestart({
  A: "a1 ~ a2!2 a1 ~ a2!2 a1 ~ a2!2 a1 ~ a2!2", B: "f1 ~ f2!2 f1 ~ f2!2 f1 ~ f2!2 f1 ~ f2!2",
  C: "c2 ~ c3!2 c2 ~ c3!2 c2 ~ c3!2 c2 ~ c3!2", D: "g1 ~ g2!2 g1 ~ g2!2 g1 ~ g2!2 g1 ~ g2!2", E: "g1 ~@7",
})).s("gm_synth_bass_2").gain(0.45)

// other · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@26 A B C D A B C D E F E F E F E F G H I H J H I H J H I H J H I H ~ A B C D A B C D E F E F E F E F G H I H J H I H
  J H I H J H I H ~ A B C D A B C D ~@8 E F E F E F E F G H I H J H I H J H I H J H I H J ~@6
>`.pickRestart({
  A: "a4!16", B: "f4!16", C: "c5!16", D: "g4!16",
  E: "[a2,a3] ~ [a2,a3] ~ [g2,g3] [a2,a3] ~ [g2,g3] [a2,a3] ~ [a2,a3] ~ [g2,g3] [a2,a3] ~ [a2,a3]", // A G A G A G A
  F: "[f2,f3] ~ [f2,f3] ~ [f2,f3]!2 ~ [f2,f3]!2 ~ [f2,f3] ~ [f2,f3]!2 ~ [f2,f3]", G: "[g2,g3] ~@15",
  H: "~@2 e4!2 ~@2 e4!2 ~@2 e4!2 ~@2 e4!2", I: "~@2 f4!2 ~@2 f4!2 ~@2 f4!2 ~@2 f4!2",
  J: "~@2 d4!2 ~@2 d4!2 ~@2 d4!2 ~@2 d4!2",
})).s("gm_lead_8_bass_lead").gain(0.21).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note("<~@37 A B ~@31 A B ~@39 A B ~@26>".pickRestart({
  A: "~@14 e3!2", B: "[a2,e3,a3] ~@3",
})).s("gm_distortion_guitar").gain(0.22)

// drums · kick
const kick = s("bd").struct(`<
  ~@25 A B@7 C B@3 D B@3 E F B@7 C B@7 A B@7 C B@3 D B@3 E F B@7 C B@7 A B@7 C F ~@7 B@3 D B@3 E F B@7 C B@7 C F ~@5
>`.pickRestart({
  A: "x ~@9 x!3 ~@3", B: "x!4", C: "x ~@3 x ~@2 x!2 ~ x ~ x!4", D: "x ~@3 x ~@3 x ~@2 x!2 ~ x!2",
  E: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", F: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@23 [~@7 x!9] [x!16] ~@81 [~@7 x!9] [x!16] ~@31>").gain(0.3)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 [x!7 ~@9] ~@82 [x!7 ~@9] ~@32>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@25 A ~@16 B ~@15 A ~@16 B ~@15 A ~@24 B ~@22>".pickRestart({
  A: "x ~@2 x", B: "x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A B ~@24 C@32 ~ C@32 ~ C@8 ~@8 C@25 ~@6>".pickRestart({
  A: "x!2", B: "x!4", C: "~ x ~@3 x ~@3 x ~@3 x ~@2",
})).gain(0.05)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 A ~@16 B ~@15 A ~@16 B ~@15 A ~@24 B ~@22>".pickRestart({
  A: "x ~@2 x", B: "x",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@26 A@32 ~ A@32 ~ A@8 ~@8 A@25 ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.3)

// drums · china
const china = s("cr").struct(`<
  ~@25 A@2 ~@7 A ~@7 A@2 ~@7 A ~@6 A@2 ~@7 A ~@7 A@2 ~@7 A ~@6 A@2 ~@7 A ~@7 A ~@7 A@2 ~@7 A ~@7 A ~@5
>`.pickRestart({
  A: "x",
})).gain(0.5)

// drums · shaker
const shaker = s("sh").struct("<~@26 A@32 ~ A@32 ~ A@8 ~@8 A@25 ~@6>".pickRestart({
  A: "x!16",
})).gain(0.3)

stack(
  pad_choir, pad_new_age, pan_flute, percussive_organ, lead_2_sawtooth, lead_1_square, bass, lead_8_bass_lead,
  distortion_guitar, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, china, shaker
)

More by Santana