Strudelify

Funk Baseline

A.Rehm

KeyG majorTempo120 bpm
0:00/0:00
// Funk Baseline — A.Rehm
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/140966; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
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.

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B D E F G H E F G H E F G H E F G H E F G H E F G H
  E F G H E F G H ~@12 E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H ~@13
>`.pickRestart({
  A: "~@2 a1 ~ a#1 ~ b1 ~", B: "c2@3 a2 ~@2 a#2 ~@3 d1 ~ d#1 ~ e1 ~", C: "f1@3 d2 ~@2 e2 ~@3 a1 ~ a#1 ~ b1 ~",
  D: "f1@3 d2 ~@2 e2 ~@9", E: "g1@3 e2 ~@2 f2 ~@7 f#1 ~", F: "a1@3 f#2 ~@2 g#2 ~@7 f#1 ~",
  G: "a1@3 f#2 ~@2 g#2 ~@7 f1 ~", H: "g1@3 e2 ~@2 f2 ~@7 f1 ~",
})).s("gm_electric_bass_finger").gain(0.33)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@24 A B A B C B A B C D@2 ~@4 E F G H E F G H ~@16 I J K L M N M O ~@4 M N M O ~@4 E F G H E F G H ~@16 I J K L M N M
  O ~@4 M N M P@2
>`.pickRestart({
  A: "~@8 a#4 a4 g4 f4 e4 d4 a#4@2", B: "e4 ~ a4@2 g4 f4 e4 d4 ~@2 a4 f4@5", C: "~@8 a#4@4 e4 d4 a#4@2",
  D: "[e4 ~ a4@2 g4 f4 e4 d4 ~@2 a4 f4@9 ~@12]/2", E: "~@2 g3 ~ a3@2 b3@2 f4@4 d4@2 b3 ~", F: "~@2 e4 ~@3 e4@2 c#4@8",
  G: "~@2 e4@2 a4@4 e4 f4 g4 a4 b4@2 e4 ~", H: "~@2 b3 ~@3 b3@2 g3@8", I: "~@2 g3@2 b3 ~ d4 ~ f4@2 d4 ~@3 f4@2",
  J: "c#4 ~@3 e4@6 c#4 e4 g4@4", K: "~@2 a3@2 c#4 ~ e4 ~ g4@2 e4 ~@3 g4@2", L: "d4 ~@3 f4@6 b3@2 g3@4",
  M: "~@2 a3@2 c4 ~ e4 ~ g4@2 e4 ~@3 g4@2", N: "e4 ~@3 e4@6 c4 e4 g4@4", O: "e4 ~@3 g4@6 d4@2 c4@4",
  P: "[e4 ~@3 g4@6 d4@2 c4@16 ~@4]/2",
})).s("gm_alto_sax").gain(0.22)

// chords · lead 2 sawtooth · "Keyboard Synthesizer"
const lead_2_sawtooth = note(`<
  ~ A B A B A B A C D C D C D C D E F E F G H G H B A B A B A B A B A B I J K L I J K L I J K L I J K L I J K L I J K L
  I J K L I J K L ~@12 I J K L I J K L I J K L I J K L I J K L I J K L I J K L I J K L ~@13
>`.pickRestart({
  A: "c3@3 a3 ~@2 a#3 ~@9", B: "f2@3 d3 ~@2 e3 ~@9", C: "f2@3 d3 ~@2 e3 ~ c5 d5 e5!2 ~ d5 c5@2",
  D: "c3@3 a3 ~@2 a#3 ~ f4 g4 a4!2 ~ g4 f4@2",
  E: "f2@3 d3 [c5,e5,g5]@2 [e3,a#5] g5 e5 ~ [a#4,e5,g5]@4 c5 ~, ~@9 c5@5 ~@2", // C Edim
  F: "c3@3 a3 [f4,a4,c5]@2 [a#3,d#5] c5 a4 ~ [d#4,a4,c5]@4 f4 ~, ~@9 f4@5 ~@2", // F D#5 Adim
  G: "f2@3 d3 ~@2 e3 ~@2 d5 e5 e5@2 d5 c5@2", H: "c3@3 a3 ~@2 a#3 ~@2 g4 a4 a4@2 g4 f4@2",
  I: "g2@3 e3 ~@2 f3 ~ [b4,d5,f5]@8, [g4,b4,d5] ~", J: "a2@3 f#3 ~@2 g#3 ~ [a4,c#5,e5]@8, [g4,a4,c#5] ~",
  K: "a2@3 f#3 ~@2 g#3 ~ [g4,a4,c#5]@8, [e4,g4,a4] ~", L: "g2@3 e3 ~@2 f3 ~@9, [d4,f4,g4,b4]",
})).s("gm_lead_2_sawtooth").gain(0.21)

// drums · snare
const snare = s("sd").struct("<~@4 [~@3 x] [~ x ~ x]!62 ~@12 [~ x ~ x]!32 ~@13>").gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!4 ~@4 x!4 ~@4]!63 ~@12 [x!4 ~@4 x!4 ~@4]!32 ~@13>").gain(0.38)

stack(bass, alto_sax, lead_2_sawtooth, snare, hihat)