Strudelify

Circle In The Sand

Belinda Carlisle

KeyD minorTempo120 bpm
0:00/0:00
// Circle In The Sand — Belinda Carlisle
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 108 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.

// other · flute
const flute = note("<~@9 A B C D E B F G H I J@2 K L@4 ~@82>".pickRestart({
  A: "d5 c5", B: "d5@3 ~ d5@4 a4@8", C: "d5@2 e5@2 d5@2 c5@2 a4@4 g4@2 a4 ~", D: "a4@15 ~", E: "d5@8 c5@3 ~ c5 ~ c5@2",
  F: "d5@2 e5@2 d5@2 c5@2 a4@3 ~ a4@2 c5@2", G: "d5", H: "a4@3 ~ c5@4 d5@3 ~ d5@2 f5@2",
  I: "g5@3 ~ f5@4 d5@4 c5@2 d5 ~", J: "[d5@14 a5@4 g5 ~ g5@2 f5@2 g5@3 ~ g5@2 a5@2]/2", K: "a4@4 c5@4 d5@3 ~ d5@2 f5@2",
  L: "[g5@4 f5@4 d5@6 a5@4 g5 ~ g5@2 f5@2 g5@3 ~ g5@2 a5@18 g5@6 ~@10]/4",
})).s("gm_flute").gain(0.56)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@38 A B C D E B F G H I J@2 K L@3 M ~@53>".pickRestart({
  A: "d6 c6", B: "d6@3 ~ d6@4 a5@8", C: "d6@2 e6@2 d6@2 c6@2 a5@4 g5@2 a5 ~", D: "a5@15 ~", E: "d6@8 c6@3 ~@5",
  F: "d6@2 e6@2 d6@2 c6@2 a5@3 ~ a5@2 c6@2", G: "d6 ~", H: "a5@3 ~ c6@4 d6@3 ~ d6@2 f6@2",
  I: "g6@3 ~ f6@4 d6@4 c6@2 d6 ~", J: "[d6@10 ~@4 a6@4 g6 ~ g6@2 f6@2 g6@3 ~ g6@2 a6@2]/2",
  K: "a5@4 c6@4 d6@3 ~ d6@2 f6@2", L: "[g6@4 f6@4 d6@6 a6@4 g6 ~ g6@2 f6@2 g6@3 ~ g6@2 a6@18]/3", M: "g6 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.1)

// other · harmonica
const harmonica = note("<~@79 A B C@2 D E@4 ~@20>".pickRestart({
  A: "a5@4 c6@4 d6@3 ~ d6@2 f6@2", B: "g6@4 f6@4 d6@4 c6@2 d6 ~", C: "[d6@13 ~ a6@4 g6 ~ g6@2 f6@2 g6@3 ~ g6@2 a6@2]/2",
  D: "d7@2 c7 ~ c7 ~ c7@4 a6@3 ~ a6 ~", E: "[a6@3 ~ a6@3 ~ g6@2 f6@4 a6@4 g6 ~ g6@2 f6@2 g6@3 ~ g6@2 a6@24 ~@10]/4",
})).s("gm_harmonica").gain(0.64).pan(0.1)

// other · acoustic guitar steel
const acoustic_guitar_steel_2 = note("<~@38 A B C D E F G H I J K@2 I L@3 M ~@53>".pickRestart({
  A: "f4 e4", B: "f4@3 ~ f4@4 d4@8", C: "f4@2 g4@2 f4@2 e4@2 c4@3 ~ c4@4", D: "d4@3 ~", E: "f4@8 e4@3 ~@5",
  F: "f4@3 ~ f4@3 ~ d4@8", G: "f4@2 g4@2 f4@2 e4@2 c4@3 ~ c4@2 e4@2", H: "d4 ~", I: "c4@4 e4@4 g4@3 ~ g4@2 a4@2",
  J: "bb4@2 d5@2 bb4@2 a4 bb4", K: "[g4@10 ~@4 f4@4 e4 ~ e4@2 d4@2 e4@3 ~ e4@4]/2",
  L: "[bb4@4 d5@4 bb4@6 d5@4 c5 ~ c5@2 bb4@2 c5@4 c5@2 d5@18]/3", M: "c5 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.9)

// other · piano
const piano = note("<~@86 A@2 B C ~@18>".pickRestart({
  A: "[e4 f4 g4@6]/2", B: "e4 f4 e4 f4", C: "e4 f4 e4 f4 ~@4",
})).s("gm_piano").gain(0.4).pan(0.9)

// other · piano
const piano_2 = note("<~@79 A B C@2 D E@4 ~@20>".pickRestart({
  A: "a3@4 c4@4 d4@3 ~ d4@2 f4@2", B: "g4@4 f4@4 d4@4 c4@2 d4 ~", C: "[d4@13 ~ a4@4 g4 ~ g4@2 f4@2 g4@3 ~ g4@2 a4@2]/2",
  D: "d5@2 c5 ~ c5 ~ c5@4 a4@3 ~ a4 ~", E: "[a4@3 ~ a4@3 ~ g4@2 f4@4 a4@4 g4 ~ g4@2 f4@2 g4@3 ~ g4@2 a4@24 ~@10]/4",
})).s("gm_piano").gain(0.64).pan(0.9)

// other · epiano1
const epiano1 = note(`<
  ~@25 A B C D E F G H I J K J ~@17 A B C D E F G H L J K J ~@23 A B C D E F G H L J K M K M K N@2 O@2
>`.pickRestart({
  A: "~@4 a4 c5 d5 f5", B: "d5@3 ~ d5@4 c5@4 g4@2 a4 ~", C: "a4@4 a4 c5 d5 f5", D: "d5@3 ~ d5@4 e5@3 ~ e5@2 f5@2",
  E: "f5@14 a5 ~", F: "a5@2 f5 ~ f5 ~ f5@4 d5@3 ~ d5@2", G: "c5 ~ c5@3 ~ c5@7 ~ a5@2",
  H: "a5@2 f5@2 f5 ~ f5@4 a5@3 ~ a5@2", I: "g5@4 a4 c5 d5 f5", J: "f5@2 d5@7 ~@7", K: "~@8 a4@2 c5@2 d5@2 f5 ~",
  L: "g5@8 a4@2 c5@2 d5@2 f5 ~", M: "f5@2 d5@13 ~", N: "[f5@2 d5@19 ~@3 f5@2 d5@3 d5@3]/2", O: "[~ c5@4 d5@17 ~@10]/2",
})).s("gm_epiano1").gain(0.4)

// other · piano
const piano_3 = note("<A B C D E F C D G ~@99>".pickRestart({
  A: "~@4 a4 c5 d5 f5", B: "a5 g5 f5@2 g5@2 e5@2", C: "f5 e5 d5 c5 e5@4", D: "a5@2 b5 g5", E: "a5@2 f5@2 e5 f5 e5@2",
  F: "a5 g5 f5@2 g5 f5 e5@2", G: "a5@4 f5@4 e5@2 f5@2 e5@2 c5 ~",
})).s("gm_piano").gain(0.3).pan(0.1)

// chords · harpsichord
const harpsichord = note(`<
  ~ A B A B A B A B ~@17 A B A B C D C E A B A B ~@17 A B A B C D C E A B A B ~@23 A B A B C D C E A B A B A B A F ~@2
>`.pickRestart({
  A: "~@2 [d5,f5,a5] ~ [d5,f5,a5] ~@5 [e5,g5,a5,c6] ~@3 [e5,g5,a5,c6] ~", // Dm Am7
  B: "~@2 [d5,f5,a5] ~ [d5,f5,a5] ~@3 [e5,g5,a5,c6] ~@3 [e5,g5,a5,c6] ~@3", // Dm Am7
  C: "~@2 [bb4,d5,f5,a5] ~ [bb4,d5,f5,a5] ~@5 [bb4,d5,f5,a5] ~@3 [bb4,d5,f5,a5] ~", // Bbmaj7
  D: "~@2 [bb4,c5,e5,g5] ~ [bb4,c5,e5,g5] ~@5 [bb4,c5,e5,g5] ~@3 [bb4,c5,e5,g5] ~", // C7
  E: "[c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~@11", F: "~@2 [d5,f5,a5] ~ [d5,f5,a5] ~@3 [e5,g5,a5,c6] ~@7",
})).s("gm_harpsichord").gain(0.25).pan(0.9)

// chords · glockenspiel
const glockenspiel = note(`<
  ~@9 A B C D E B F G H I J K L M N@3 ~@12 A B C D E B F G H I J K L M N@3 ~@12 O@2 P@2 Q@2 R@2 ~@4 S T U V W X Y Z@4
  ~@18
>`.pickRestart({
  A: "[d5,f5,a5] [c5,e5,g5], a4@15 ~", B: "[a4,d5,f5,a5]@7 ~", C: "[bb4,d5,f5] [c5,e5,g5]", D: "[d5,f5,a5]@7 ~",
  E: "[a4,d5,f5]@7 ~ [c5,g5]@8, a5@4 [a4,e5]@3 ~", F: "[bb4,d5,f5]@8 [c5,e5,g5]@7 ~", G: "[d5,f5]@13 ~@3, a5",
  H: "~ g5, [a4,c5,e5]", I: "[bb4,d5,f5]@7 ~", J: "[g4,bb4,d5]@15 ~", K: "f5@7 e5@8 ~, [c5,g5]", L: "[a4,c5,e5,g5]",
  M: "[bb4,d5,f5]@15 ~", N: "[[g4,bb4]@16 [c5,g5]@19 ~@13, d5@35 ~@13]/3",
  O: "[[f5,a5,d6]@5 ~ [d5,f5,bb5]@5 ~ [e5,g5,c6]@19 ~]/2", P: "[[e5,g5,c6]@5 ~ [d5,f5,bb5]@5 ~ [d5,f5,a5]@17 ~@3]/2",
  Q: "[[f5,a5,d6]@5 ~ [d5,f5,bb5]@5 ~ [e5,g5,c6]@17 ~@3]/2", // Dm Bb C
  R: "[[c5,e5,g5]@5 ~ [bb4,d5,f5]@5 ~ [bb4,d5,f5,a5]@18 ~@2]/2", S: "[g4,a4]@13 ~@3", T: "[bb4,d5]@7 ~",
  U: "[g4,bb4,d5]@13 ~@3", V: "[c5,e5]@7 ~", W: "[e5,g5]@13 ~@3", X: "[d5,f5]@7 ~ [bb4,d5]@6 ~@2", Y: "[g4,bb4,d5]@3 ~",
  Z: "[c4@16 c4@37 ~@11, [d5,a5]@31 ~@33]/4", // D5
})).s("gm_glockenspiel").gain(0.4).pan(0.9)

// other · reed organ
const reed_organ = note("<~@68 A B@2 ~ C D@2 ~@33>".pickRestart({
  A: "~@6 a4@4 c5 ~ c5@2 a4@2", B: "[c5@4 d5@8 a4@17 ~@3]/2", C: "~@3 g4@2 f4 g4 f4", D: "[g4 f4 d4@7 ~@7]/2",
})).s("gm_reed_organ").gain(0.5).pan(0.9)

// other · dulcimer
const dulcimer = note(`<
  ~@75
  [d5@2 c5 d5 f5@2 d5@2]
  [c5@2 d5 ~ d5@2 a4@2 c5@2 d5 ~ d5@4]
  [d5@2 c5 d5 f5@2 d5@2]
  [c5@2 d5 ~ d5@2 a4@2 c5@2 d5 ~ d5@4]
  ~@29
>`).s("gm_dulcimer").gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@106 [~@13 x!3] x>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@75 [x ~@4 x ~@2] x [x ~@4 x ~@2] x ~@29>").gain(0.18)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A@8 B C@8 D@9 E@4 D@4 E@4 C@8 D@9 E@4 D@4 E@4 D@8 ~@4 D@7 F ~@3 E@4 D@4 E@7 A ~@2
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x ~@2 x!2", C: "x ~@2 x!2 ~@3", D: "x ~@4 x ~@2", E: "x ~@2 x ~ x ~@2", F: "x",
})).gain(0.14)

// drums · crash
const crash = s("cr").struct("<A@26 B@12 A@17 B@12 A@8 ~@4 A@9 ~@2 B@15 C D ~>".pickRestart({
  A: "x!4", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~@2", D: "~ x ~@14",
})).gain(0.1)

// drums · high tom
const high_tom = s("ht").struct("<~@8 [~@8 x!4 ~@4] ~@99>").gain(0.1)

// drums · tambourine
const tambourine = s("tb").struct("<~@26 A@4 ~@4 A@4 ~@17 A@4 ~@4 A@4 ~@23 A@4 ~@4 A@7 ~@3>".pickRestart({
  A: "~@3 x",
})).gain(0.2)

// drums · triangle
const triangle = s("triangles:35").struct("<~@37 [~@3 x] ~@28 [~@3 x] ~@11 [~@3 x] ~@29>").gain(1.24)

stack(
  flute, acoustic_guitar_steel, harmonica, acoustic_guitar_steel_2, piano, piano_2, epiano1, piano_3, harpsichord,
  glockenspiel, reed_organ, dulcimer, snare, low_tom, mid_tom, crash, high_tom, tambourine, triangle
)

More by Belinda Carlisle