Strudelify

Happy

Alexia

KeyB majorTempo123 bpm
0:00/0:00
// Happy — Alexia
// 123 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(123/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 A B A B A B A B A B C D A B C E F G F G F G F D F G F G F G F G H I J K H I L@2 A B A B A B C D F G F G F G F D H
  I J K H I L@2 A B A B A B C D M N M N M N M N A B A B A B A B A B A B A B C O ~
>`.pickRestart({
  A: "b1@2 ~@4 b1 ~ f#1@2 ~@4 f#1 ~", B: "e1@2 ~@4 e1 ~ f#1 ~ f#1 ~ g#1 ~ f#1 ~", C: "b1@2 ~@4 b1 ~ f#1 ~@5 f#1 ~",
  D: "e1@2 e1@2 f#1@2 b1@2 f#1 ~ f#1@2 g#1@2 c#2@2", E: "e1 ~ e1@2 f#1@2 b1@2 f#1 ~ f#1@2 g#1@2 c#2@2",
  F: "b1 ~@2 b1 f#1 ~@2 f#1", G: "e1@2 ~@4 e1@2 f#1 ~@5 f#1@2", H: "g#1@5 ~ g#1 ~ g#1@4 ~@2 g#1 ~",
  I: "g#1@4 ~@2 g#1 ~ g#1@5 ~ g#1 ~", J: "c#2@5 ~ c#2 ~ c#2@4 ~@4", K: "d#1@4 ~@2 d#1 ~ d#1@5 ~ d#1 ~", L: "[e1@7 ~]/2",
  M: "b1 ~ b1 ~ b1 ~ b1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~", N: "e1 ~ e1 ~ e1 ~ e1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~", O: "e1 ~@7",
})).s("gm_electric_bass_finger").gain(0.74)

// chords · synth strings 1
const synth_strings_1 = note("<~@33 A B@3 C D@4 ~@16 B@3 C D@4 ~@24 E@8 ~>".pickRestart({
  A: "f#4 b4 a#4 f#4", B: "[[d#4,g#4,b4] [c#4,f#4,a#4] [c#2,d#4,g#4,b4], g#2@11 ~@5]/3", C: "[d#2,c#4,f#4,a#4]",
  D: "[[d#4,g#4,b4] [c#4,f#4,a#4] [e3,b3,e4,f#4,b4]@2, g#2@33 ~@31]/4", E: "[f#6@113 ~@15]/8",
})).s("gm_synth_strings_1").gain(0.35)

// chords · pad bowed
const pad_bowed = note("<~@50 A@8 ~@16 B C B C B C B C ~@17>".pickRestart({
  A: "[[d#4,f#4,b4]@4 [c#4,f#4,a#4]@3 [b3,e4,g#4]@5 [c#4,f#4,a#4]@4]/2", B: "f#4 g#4, [b3,d#4]",
  C: "[b3,e4,g#4] [a#3,c#4,f#4]", // E F#
})).s("gm_pad_bowed").gain(0.2)

// chords · piano
const piano = note("<~@74 A B A B A B A B ~@17>".pickRestart({
  A: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [g#4,b4,d#5] ~ [g#4,b4,d#5] ~ [g#4,b4,d#5] ~ [g#4,b4,d#5] ~", // B G#m
  B: "[g#4,b4,d#5] ~ [g#4,b4,d#5] ~ [g#4,b4,d#5] ~ [g#4,b4,d#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~", // G#m F#
})).s("gm_piano").gain(0.16)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@10 A B A B A B A C ~@7 D E F E G E G E F ~@6 H@2 A B A B A B A B ~@7 D ~@6 I@2 A B A B A B A B ~@16 A B A B A B A J
  ~
>`.pickRestart({
  A: "[b4,d#5,f#5]@2 [b4,d#5,f#5] ~ [b4,d#5,f#5] ~ [a#4,c#5,f#5]!3 ~ [a#4,c#5,f#5] ~ [a#4,c#5,f#5] ~ [g#4,b4,f#5]@2", // B F# G#m7
  B: "[g#4,b4,f#5] ~ [g#4,b4,f#5] ~ [g#4,b4,f#5]@2 [g#4,b4,f#5] ~ [g#4,b4,f#5] ~ [g#4,b4,f#5] ~ [g#4,b4,f#5] ~ [g#4,b4,f#5]@2", // G#m7
  C: "[g#4,b4,f#5] ~ [g#4,b4,f#5] [b4,f#5] [g#4,b4,f#5] [b4,f#5] [g#4,b4,f#5] ~ [g#4,b4,f#5] [b4,f#5] [g#4,b4,f#5] [b4,f#5] [g#4,b4,f#5] [b4,f#5] [g#4,b4,f#5] [b4,f#5]", // G#m7 B5 G#m7 B5 G#m7 B5 G#m7 B5 …
  D: "e2@2 e2@2 f#2@2 b2@2 f#2 ~ f#2@2 g#2@2 c#3@2",
  E: "[b4,f#5]!4 [b4,d#5]@2 c#5 ~@5 [b4,c#5,f#5]@2 [b4,f#5] ~, ~@4 f#5 ~@11", // B5 B Bsus2 B5
  F: "~@4 [b4,f#5]@2 ~ f#5 ~@4 [c#5,f#5] ~@3, ~@3 [b4,f#5] ~@4", // B5 F#5 B5
  G: "~@4 [b4,f#5]@2 ~ f#5 ~@4 [c#5,f#5]!2 ~@2, ~@3 [b4,f#5] ~@4", H: "[~@15 e4@16 ~, ~@14 [f#4,b4]@17 ~]/2",
  I: "[~@14 e4 e4@16 ~, ~@14 [f#4,b4]@17 ~]/2", J: "[g#4,b4,e5] ~@15",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.6)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@2 A ~ B ~ A ~ C ~ D E D E D E D E ~@16 F@3 G F@2 ~@2 D E D E D E D E ~@8 F@3 G F@2 ~@2 D E D E D E D E ~@8 A ~ B ~ A
  ~ C ~ D E D E D E D H ~
>`.pickRestart({
  A: "~@2 f#3 [b3,d#4] f#4 ~@11", B: "~@2 f#3 ~ f#4 ~@11, ~@3 [b3,d#4]@2 ~@11",
  C: "~@3 [d#4,f#4]@2 ~@11, ~ [f#3,b3] ~@6", D: "~@4 f#4 ~@11, ~ f#3 ~@6, ~@3 [b3,d#4]@2 ~@11",
  E: "~ e3 [g#3,b3,e4] ~@5", F: "~@4 [d#4,g#4] ~@7 [d#4,g#4] ~@3", G: "~@4 [c#4,f#4] ~@7 [c#4,f#4] ~@3",
  H: "[e3,g#3,b3,e4] ~@7", // E
})).s("gm_electric_guitar_jazz").gain(0.22).pan(0.9)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  A B A B A B A B A B A B C D A B C E F G F G F H F G F G F G F H F I@3 ~@5 J A B C ~ A B C D F G F G F H F G ~@3 K ~
  L@2 M A B A B A B A B N O N O N O N O A B A B A B A B A B A B A B A P ~
>`.pickRestart({
  A: "b3 ~@5 b3 ~ f#3 ~@5 f#3 ~", B: "e3 ~@5 e3 ~ f#3 ~ f#3 ~ g#3 ~ f#3 ~", C: "b2@2 ~@4 b2 ~ f#2 ~@5 f#2 ~",
  D: "e2@2 e2@2 f#2@2 b2@2 f#2 ~ f#2@2 g#2@2 c#3@2", E: "e2 ~ e2@2 f#2@2 b2@2 f#2 ~ f#2@2 g#2@2 c#3@2",
  F: "~@4 [d#4,f#4,b4] ~@3 [a#3,c#4,f#4] ~ [a#3,c#4,f#4] ~@5", G: "~@4 [g#3,b3,e4] ~@5 [a#3,c#4,f#4] ~@5",
  H: "~@2 [e3,g#3]@2 [g#3,b3,e4] ~@3 [a#3,c#4,f#4]@2 [a#3,c#4,f#4] ~@5", // E F#
  I: "[~@4 [g#3,b3,e4] ~@5 [a#3,c#4,f#4] ~@5 b4@20 ~@12, ~@5 [d#4,g#4]@7 ~@4]/3", J: "[e4,f#4,b4]@15 ~",
  K: "~@3 c#4@4 ~, ~@2 [a#3,f#4]@5 ~", L: "[~@8 g#3@7 ~, ~@14 e4@15 ~@3, ~@15 b3@14 ~@3]/2", M: "[e4,f#4,b4]@7 ~",
  N: "~@2 [b3,d#4,f#4] ~@7 [b3,d#4,g#4] ~@5", O: "~@2 [b3,e4,g#4] ~@7 [a#3,c#4,f#4] ~@5", P: "e3 ~@15",
})).s("gm_electric_guitar_clean").gain(0.38).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_3 = note("<~@74 A B A B A B A B ~@17>".pickRestart({
  A: "[b3,d#4,f#4] ~@7 [b3,d#4,g#4] ~@7", B: "[b3,e4,g#4] ~@7 [a#3,c#4,f#4] ~@7",
})).s("gm_electric_guitar_clean").gain(0.19).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@10 A B A B A B A C@2 ~@13 D E ~@8 A B A B A B A B ~@9 F ~@6 A B A B A B A B ~@16 A B A B A B A ~@2
>`.pickRestart({
  A: "[f#3,b3,d#4]@2 [f#3,b3,d#4] ~ [f#3,b3,d#4]@2 [f#3,b3,d#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4]@3 ~ [e3,g#3,b3]@2", // B F# E
  B: "~@4 [e3,g#3,b3]@3 ~ [e3,g#3,b3] ~ [e3,g#3,b3]@2 [e3,g#3,b3] ~ [e3,g#3,b3] ~", // E
  C: "[~@4 [e3,g#3,b3]@3 ~ [e3,g#3,b3] ~@2 [e4,f#4,b4] [e3,g#3,b3] ~ [e3,g#3,b3] ~@17, ~@10 [e3,g#3,b3,e4,f#4,b4]@2 [e4,f#4,b4]@13 ~@7]/2", // E Esus2 E Esus2
  D: "~@11 [d4,d#4] f#4@2 g#4 ~", E: "c#4 b3@4 ~@3", F: "~@4 c#4@3 b3@3 g#3@6",
})).s("gm_acoustic_guitar_steel").gain(0.35)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@11 A ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ B ~
>`.pickRestart({
  A: "~@2 [e3,g#3,b3] ~@13", B: "[e3,g#3,b3] ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.2)

// chords · electric guitar clean
const electric_guitar_clean_4 = note("<~@34 A@2 ~ B@3 ~ C@2 ~@15 A@2 ~ D A@2 ~ C@2 ~@6 E ~@25>".pickRestart({
  A: "[d#3@15 ~]/2", B: "[~@8 d#3@15 ~, ~@4 b3@41 ~@3, ~@2 a#3@13 ~, ~@10 f#3@35 ~@3]/3",
  C: "[~@2 f#2@2 f#2@2 a2@2 b2@2 ~ b2@2 ~ b2@5 ~@13]/2", D: "b3@2 ~ a#3@4 ~", E: "~ e2 f#2 b2 ~@3 c#3",
})).s("gm_electric_guitar_clean").gain(0.24).pan(0.8)

// chords · piano
const piano_2 = note("<~@2 A@8 ~@32 B@8 ~@16 B@8 ~@8 B@16 ~>".pickRestart({
  A: "[g#3@3 f#3@16 ~ g#3@2 f#3@2 g#3@2 f#3@2 g#3@2 f#3@2 g#3@3 f#3@16 ~ c#3@2 d#3@2 e3@2 f#3@2 g#3@2 a#3@2 g#3@3 f#3@16 ~ g#3@2 f#3@2 g#3@4 g#3@2 f#3@2 g#3@3 f#3@16 ~@13, [e4,b4]@4 ~ [d#4,d#5]@4 ~@4 [d#4,d#5]@4 ~@4 [d#4,d#5]@4 ~@7, ~@2 [e4,b4] ~ [e4,b4] ~@3]/8", // E5 D# E5
  B: "[g#3@3 f#3@16 ~ g#3@2 f#3@2 g#3@2 f#3@2 g#3@2 f#3@2 g#3@3 f#3@16 ~ c#3@2 d#3@2 e3@2 f#3@2 g#3@2 a#3@2 g#3@3 f#3@16 ~ g#3@2 f#3@2 g#3@4 g#3@2 f#3@2 g#3@3 f#3@16 ~@13, [e4,b4]@4 ~ [d#4,d#5]@4 ~@4 [d#4,d#5]@4 ~@4 [d#4,d#5]@4 ~@7, ~@2 [e4,b4] ~ [e4,b4] ~ [e4,b4] ~]/8", // E5 D# E5
})).s("gm_piano").gain(0.05)

// drums · kick
const kick = s("bd").struct("<~@2 A@7 B C@30 ~@2 C@22 ~@2 C@8 D@8 A@7 B C@7 B ~>".pickRestart({
  A: "x ~@2 x!3 ~ x", B: "x", C: "x ~@2 x!2 ~@2 x", D: "x!2 ~ x!3 ~ x",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@2 A@7 ~ A@30 ~@2 A@22 ~@2 A@23 ~ A@7 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@9 A B@7 C B@22 ~ A B@7 C B@7 D B@6 ~ A B@7 C E@7 F ~@7 A B@7 G ~>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~ x ~ x", C: "~@4 x ~@5 x!3 ~@3", D: "~@4 x ~@3 x!5 ~@3", E: "~@4 x ~@2 x ~ x ~@2 x ~@3",
  F: "~@4 x!12", G: "x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@7 B A@9 C A C A C A C A C A C A C A C A C A C A C ~@2 A@9 C A C A C A C A C A C A C ~@2 A@8 ~@8 A@7 B A@7 ~@2
>`.pickRestart({
  A: "x!8", B: "x", C: "x!5 ~ x!2",
})).gain(0.64)

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

// drums · ride
const ride = s("rd").struct("<~@40 A B ~@22 A B ~@8 C@8 ~@17>".pickRestart({
  A: "~ x", B: "x!2", C: "x!8",
})).gain(0.64)

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

// drums · shaker
const shaker = s("sh").struct(`<
  ~@18 A B A B A B A B A B A B A B A B A B A B A B ~@10 A B A B A B A B A B A B A B ~@35
>`.pickRestart({
  A: "x!3 ~ x ~ x!10", B: "x!16",
})).gain(0.4)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@18 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~@36
>`.pickRestart({
  A: "~@3 x ~ x ~@10",
})).gain(0.16)

stack(
  bass, synth_strings_1, pad_bowed, piano, electric_guitar_clean, electric_guitar_jazz, electric_guitar_clean_2,
  electric_guitar_clean_3, acoustic_guitar_steel, acoustic_guitar_steel_2, electric_guitar_clean_4, piano_2, kick, clap,
  snare, hihat, open_hat, ride, splash, shaker, shaker_soft
)

More by Alexia