Strudelify
KeyD majorTempo126 bpm
0:00/0:00
// Little Swing — Little Sis Nora AronChupa
// 126 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5008548; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 43 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet · "Trompete"
const trumpet = note("<~@10 A B A C A B A C ~@8 A B A C A B D ~ A B A C A B D E ~>".pickRestart({
  A: "a4@2 e4!2 f4 e4 d#4 e4", B: "~@3 e4 ~@2 e4@2 f4@2 e4@2 d#4@2 e4@2", C: "~@3 e4 ~@2 e4@2 f4@2 e4@2 c4@2 b3@2",
  D: "a4@2 e4!2 f4 e4 c4 b3", E: "a4!3 ~",
})).s("gm_trumpet").gain(0.45)

// other · trumpet · "Trompete" · soft notes
const trumpet_soft = note("<~@2 A@6 B ~@9 A@4 C@2 B ~@16 D E>".pickRestart({
  A: "~ e4 ~ e4 ~ e4 ~ e4", B: "g#4 ~@3", C: "~@3 e4 ~@2 e4@2 f4@2 e4@2 d#4@2 e4@2", D: "~@3 a4", E: "a4!4",
})).s("gm_trumpet").gain(0.25)

// other · tenor sax · "Tenor Saxophon"
const tenor_sax = note("<A ~ B@5 C D ~ B@7 E B@5 C D ~ B@7 ~@10>".pickRestart({
  A: "a3 ~@3", B: "a3 e3 a3 e3", C: "a3@2 e3@2 a3@2 e3 g3", D: "g#3 ~@3", E: "a3@3 ~",
})).s("gm_tenor_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophon" · soft notes
const tenor_sax_soft = note("<~@33 [b3@2 d4 e4@5] [a3 e3 a3 e3]!7 ~@2>").s("gm_tenor_sax").gain(0.2)

// other · french horn · "Horn in B"
const french_horn = note("<A B A@6 C ~ A@7 D A@4 E@2 C ~ A@6 D ~@10>".pickRestart({
  A: "~ a3 ~ a3 ~ a3 ~ a3", B: "~ a3 ~ a3 ~@4", C: "b4 ~@3", D: "~ a3 ~ a3 ~ a3 ~@2",
  E: "~@3 e4 ~@2 e4@2 f4@2 e4@2 d#4@2 e4@2",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in B" · soft notes
const french_horn_soft = note("<~@33 [e4@2 g4 a4@5] [~ a3 ~ a3 ~ a3 ~ a3]!6 [~ a3 ~ a3 ~ a3 ~@2] ~@2>")
  .s("gm_french_horn").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@9 A B@7 C ~@7 A B@6 C ~@10>".pickRestart({
  A: "~@6 x!2", B: "x!4", C: "x!3 ~",
})).gain(0.3)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@33 [x!4]!7 [x!3 ~] ~@2>").gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@9 A B@7 C ~@8 B@6 C ~ B@6 C ~@2>".pickRestart({
  A: "~@12 x ~@2 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.3)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@2 [~ x ~ x]!6 x ~@9 [~ x ~ x]!6 x [~@12 x ~@2 x] ~@17>").gain(0.2)

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

stack(
  trumpet, trumpet_soft, tenor_sax, tenor_sax_soft, french_horn, french_horn_soft, kick, kick_soft, rim, rim_soft, hihat
)