Strudelify

somewhere only we know

Keanearr. Olivia Edwards

KeyA majorTempo87 bpm
0:00/0:00
// somewhere only we know — Keanearr. Olivia Edwards
// 87 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5859919; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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.

// other · flute
const flute = note(`<
  ~@8 A B C D A E C D F A G H F I G H A E C D A J C K L@2 G H M I G N ~ O ~ O ~ O ~ P ~@4 L@2 G H M I G N ~ O ~ O ~ O Q
  R S T U V ~ O Q W ~@3 X Y@2
>`.pickRestart({
  A: "~@2 e5@2 a5@2 a5 e5@8 ~", B: "~@2 d5@2 e5@2 d5 e5@8 ~", C: "~@2 f#5@2 f#5@2 f#5 f#5@3 f#5@2 f#5@2 f#5@2",
  D: "f#5@2 e5@2 d5@2 f#5@5 ~ e5@4, ~@6 e5 ~@9", E: "~@2 d5@2 e5@2 e5@3 ~ e5@4 ~@2, ~@6 d5 ~@9",
  F: "~@2 e5@2 c#6@2 c#6 a5@8 ~", G: "~ f#5!7", H: "f#5 e5 d5 e5 f#5@2 e5@2", I: "~ e5!3 g#5@2 g#5 e5@8 ~",
  J: "~@2 d5@2 e5@2 a5 e5@9", K: "b4@2 d5@4 f#5@5 ~ e5@4, ~@6 e5 ~@9",
  L: "[~@2 e5@2 c#6@2 c#6 a5@6 g#5 e5@4 e5@2 a5@2 a5 e5@8 ~]/2", M: "~@2 e5@2 c#6@2 c#6 a5@6 g#5 e5@2",
  N: "f#5@2 e5@2 d5@2 e5@2 f#5@3 ~ e5@4, ~@8 e5 ~@7", O: "e5 d5 e5 a5 e5@2 d5@2", P: "e5 d5 e5 a5 d5@2 c#5@2",
  Q: "e5 d5 a5 e5@2 d5@2 ~", R: "e5 d5 a5 e5 ~@4", S: "a4 b4!2 a4 b4!2 a4 b4", T: "b4 a4!2 b4 a4 b4 a4!2",
  U: "a4 b4 a4 b4!3 a4 b4", V: "a4 b4 a4!2 b4!2 a4 b4", W: "c#5 b4 c#5 e5 g#5@2 a5@2",
  X: "e5@2 d5@2 ~ e5@2 f#5@2 ~ g#5@5 ~", Y: "[c#5@7 ~]/2",
})).s("gm_flute").gain(0.03)

// chords · piano · "Grand Piano"
const piano = note(`<
  A@2 B C A@2 B D ~@16 E F G H E F G H I J K L I J K L M N O P Q R S T ~@2 U V I J K L I J K L M N O P Q R S T M N O P Q
  R S T ~@6
>`.pickRestart({
  A: "[[a3,e4,a4]!7 [e4,a4] [g#3,e4,a4] [a3,e4,a4]!2 [a3,d4,a4]!3 [a3,c#4,a4]!2, [a2,e3]@21 ~ [a2,d3]@6 [a2,c#3]@4, ~@7 a3@2 ~@7]/2", // A5 Amaj7 A5 D5 A A5 D5 A
  B: "[a3,d4,a4]!4 [b3,d4,b4] [d4,b4] [a3,d4,a4]!2, [b2,d3]!2, ~@5 b3@3", // D5 Bm G D5 Bm
  C: "[a3,d4,e4,a4]!3 [g#3,e4,g#4]!3 [a3,e4,a4]!2, [e2,a2]@11 ~ [a2,e3]@4", // Asus4 C#m A5
  D: "[a3,d4,a4]!3 [a3,e4,g#4]!3 [a3,e4,a4]!2, [e2,a2]@11 ~ [a2,e3]@4", E: "a3!8, [a2,c#3,e3]@15 ~",
  F: "g#3!3 [g#3,d4,e4]!3 c#4!2, [a2,c#3,e3,a3]@15 ~", G: "[b3,f#4]!8, [b2,d3,f#3]@15 ~",
  H: "[a3,f#4,a4]!2 [f#4,a4] [b3,e4,g#4]!3 [c#4,e4,a4]!2, [a2,e3]@2 [a2,e3,g#3] [a2,c#3,e3,a3], ~ a3 ~@2", // D F#m E A A5 Amaj7 A
  I: "[c#4,a4,c#5]!8, [c#3,f#3,a3]@15 ~", // F#m
  J: "[g#3,c#4,g#4]!5 [g#3,c#4,g#4,a4] [g#3,c#4,g#4]!2, [c#3,e3]@15 ~, ~@3 a4@2 ~@3", K: "[f#4,a4]!8, [d3,f#3,a3]@15 ~",
  L: "[f#4,a4]!4 [e2,b2,e3,g#3,f#4,a4] [f#4,a4]!3, [b2,e3,g#3,b4] c#5, ~@5 [e2,b2,e3,g#3]@2 ~", // F#m E F#m E
  M: "[b3,d4,f#4,a4,d5] [b3,d4,f#4,b4,d5]!2 [b3,d4,f#4,a4,d5] [b3,d4,f#4,b4,d5]!2 [b3,d4,f#4,a4,d5] [b3,d4,f#4,b4,d5], [b2,d3,f#3]@15 ~", // Bm7 Bm Bm7 Bm Bm7 Bm
  N: "[c#4,e4,g#4,b4,e5] [c#4,e4,g#4,a4,e5]!2 [c#4,e4,g#4,b4,e5] [c#4,e4,g#4,a4,e5] [c#4,e4,g#4,b4,e5] [c#4,e4,g#4,a4,e5]!2, [c#3,e3,g#3]@15 ~", // C#m7 Amaj7 C#m7 Amaj7 C#m7 Amaj7 C#m
  O: "[b3,d4,f#4,a4,d5] [b3,d4,f#4,b4,d5] [b3,d4,f#4,a4,d5] [b3,d4,f#4,b4,d5]!3 [b3,d4,f#4,a4,d5] [b3,d4,f#4,b4,d5], [b2,d3,f#3]@15 ~", // Bm7 Bm Bm7 Bm Bm7 Bm
  P: "[c#4,e4,g#4,a4,e5] [c#4,e4,g#4,b4,e5] [c#4,e4,g#4,a4,e5]!2 [c#4,e4,g#4,b4,e5]!2 [c#4,e4,g#4,a4,e5] [c#4,e4,g#4,b4,e5], [c#3,e3,g#3]@15 ~", // Amaj7 C#m7 Amaj7 C#m7 Amaj7 C#m7 C#m
  Q: "[b3,d4,f#4,a4,d5]!2 [b3,d4,f#4,b4,d5]!2 [b3,d4,f#4,a4,d5]!2 [b3,d4,f#4,b4,d5]!2, [b2,d3,f#3]@15 ~", // Bm7 Bm Bm7 Bm
  R: "[c#4,e4,g#4,b4,e5]!2 [c#4,e4,g#4,a4,e5]!2 [c#4,e4,g#4,b4,e5]!2 [c#4,e4,g#4,a4,e5]!2, [c#3,e3,g#3]@15 ~", // C#m7 Amaj7 C#m7 Amaj7 C#m
  S: "[a4,b4]!8, [a2,d3,f#3]@15 ~", // Asus2 D
  T: "[a3,c#4,b4]!2 [a3,c#4,a4] [a3,c#4,b4] [c#4,e4,b4]@2 a4@2, [d3,f#3,b3] [a2,c#3,e3,a3]", // A C#m7 Bm A
  U: "~@3 [d4,f#4,b4]@2 [d4,f#4,b4] [d4,f#4,b4]@2", // Bm
  V: "[c#4,e4,c#5]@2 [c#4,e4,c#5] [c#4,e4,c#5]@2 [c#4,e4,c#5] [c#4,e4,c#5]@2", // C#m
})).s("gm_piano").gain(0.31)

// chords · piano · "Grand Piano" · soft notes
const piano_soft = note("<~@8 A B C D A B C D E F G H E F G I ~@24 J K L ~@25 J K M N O@2>".pickRestart({
  A: "a3!8, [a2,c#3,e3]@15 ~", B: "g#3!3 [g#3,d4,e4]!3 c#4!2, [a2,c#3,e3,a3]@15 ~", C: "[b3,f#4]!8, [b2,d3,f#3]@15 ~",
  D: "[a3,f#4,a4]!2 [f#4,a4] [b3,e4,g#4]!3 [c#4,e4,a4]!2, [a2,e3]@2 [a2,e3,g#3] [a2,c#3,e3,a3], ~ a3 ~@2", // D F#m E A A5 Amaj7 A
  E: "[c#4,a4]!8, [c#3,f#3,a3]@15 ~", // F#m
  F: "[g#3,c#4,g#4]!5 [g#3,c#4,g#4,a4] [g#3,c#4,g#4]!2, [c#3,e3]@15 ~, ~@3 a4@2 ~@3", G: "[f#4,a4]!8, [d3,f#3,a3]@15 ~",
  H: "[f#4,a4]!4 [e2,b2,e3,g#3,f#4,a4] [f#4,a4]!3, [b2,e3,g#3,b4] c#5, ~@5 [e2,b2,e3,g#3]@2 ~", // F#m E F#m E
  I: "[f#4,a4]!4 [e2,b2,e3,g#3,f#4,a4] [f#4,a4] [e4,a4]!2, [b2,e3,g#3,b4] c#5, ~@5 [e2,b2,e3,g#3]@2 ~", // F#m E F#m A5 E
  J: "[d4,f#4,b4]@2 [d4,f#4,b4] [d4,f#4,b4]@2 [d4,f#4,b4] [d4,f#4,b4]@2, [b2,d3,f#3]@15 ~", // Bm
  K: "[c#4,e4,c#5]@2 [c#4,e4,c#5] [c#4,e4,c#5]@2 [c#4,e4,c#5] [c#4,e4,c#5]@2, [c#3,e3,g#3]@15 ~", // C#m
  L: "[d4,f#4,b4]@2 [d4,f#4,b4] ~@5", M: "[d4,f#4,b4]@2 [d4,f#4,b4] [d4,f#4,b4]@2 [d4,f#4,b4] [d4,f#4,b4]@2",
  N: "[c#4,e4,c#5]@2 [c#4,e4,b4]@2 ~ [c#4,e4,c#5]@2 [c#4,f#4,e5]@2 ~ [b3,g#4,b4]@5 ~", // C#m C#m7 C#m F#7 E
  O: "[[a3,e4,a4]@5 ~ [a3,c#4,e4,a4,c#5,e5,a5]@22 ~@4]/2", // A5 A
})).s("gm_piano").gain(0.14)

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

// drums · snare
const snare = s("sd").struct("<A@2 B C A@2 B C ~@16 A@7 D C@7 D A@8 ~@3 E C@7 D A@7 D A@3 D A@4 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@2 x!2 ~@2 x!2", D: "~@4 x ~@2 x ~@2 x ~ x ~@3", E: "~@2 x ~@4 x ~@3 x ~@4",
})).gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@7 A ~@11 B ~@7 A ~@7 A ~@3 A ~@10>".pickRestart({
  A: "~@8 x ~@4 x ~@2", B: "~@4 x ~@3 x ~@3 x!3 ~",
})).gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@16 [x!2]!8 ~@58>").gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 [~ x ~ x]!8 ~@58>").gain(0.2)

// drums · splash
const splash = s("cr").struct("<A ~@3 A ~@3 A ~@15 A ~@7 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "x",
})).gain(0.4)

stack(flute, piano, piano_soft, kick, snare, low_tom, ride, tambourine, splash)