Strudelify

Just One Look

Linda Ronstadt

KeyD minorTempo115 bpm
0:00/0:00
// Just One Look — Linda Ronstadt
// 115 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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.

// chords · baritone sax · "Sax"
const baritone_sax = note(`<
  A B C D E F G@3 H@2 I J F G@3 H@2 I J K@4 L@2 I J K@4 M N O P Q R S T U V W X F G@3 H@2 I J F G@3 H@2 I J Y Z Y Z Y AA
>`.pickRestart({
  A: "~@6 c5 d5", B: "[a4,f5]@2 [a4,f5]@3 ~ [a4,f5]@8 ~@2",
  C: "[c5,a5]@2 [bb4,g5]@3 ~ [c5,a5]@2 [bb4,g5]@2 [c5,a5]@2 [bb4,g5]@2 [a4,f5]@2", // F Eb F Eb F Eb Dm
  D: "[bb4,g5]@2 [a4,f5]@3 ~ [a4,f5]@2 [a4,f5]@6 ~@2", E: "[c5,a5]!2 [bb4,g5]!2 [a4,f5]!2 [g4,e5]!2",
  F: "a3@2 a3@3 ~ a3@10",
  G: "[~@4 a3@2 g3@2 a3@2 c4@3 ~ [f3,d4]@6 ~@2 [a3,f4]@6 ~@2 [d4,f4,a4]@11 ~@3 [d4,a4]@2 f4@2]/3", // Dm D5
  H: "[[bb3,g4]@2 [d4,f4]@21 ~@5 [d4,f4,a4]@3 ~]/2", I: "c4@13 ~@3",
  J: "[c4,f4,a4]@3 ~ [e4,g4]@2 ~@2 [c4,f4,a4]@3 ~ [e4,g4]@2 f4@2", // F Em F Em
  K: "[a3@2 a3@3 ~ a3@14 ~@4 a3@2 c4@3 ~ [f3,d4]@6 ~@2 [a3,f4]@6 ~@2 [d4,f4,a4]@11 ~@3 [d4,a4]@2 f4@2]/4", // Dm D5
  L: "[[bb3,g4]@2 [d4,f4]@18 ~@4 [d4,f4,a4]@3 ~ [d4,f4,a4]@2 g4@2]/2", M: "[bb3,g4] [d4,f4]@7",
  N: "~@4 [c4,g4]@2 [c4,g4]@2 [c4,f4]@3 ~ [c4,g4]@2 f4@2", O: "[a3,c4]@7 ~@3 f4@2 g4@2 f4@2",
  P: "a4@5 ~ g4@2 a4 g4 f4@2 ~@4", Q: "[bb3,d4]@5 ~ f4@2 g4@2 f4@2 f4@3 ~", R: "g4@2 f4@2 ~@2 d4@2 f4@2 f4@5 ~",
  S: "[a4,c5]@8 ~@2 a4@3 ~ g4@2", T: "~@2 a4 g4 f4@4 ~@2 f4@3 ~ d4@2", U: "[b3,f4]@3 ~ [b3,f4]@2 d4@2 f4@2 a4@5 ~",
  V: "[e4,g4]@2 [d4,f4]@5 ~ [d4,f4,a4]@2 [d4,f4,a4]@2 [d4,f4,a4]@3 ~", // Em Dm
  W: "[c4,f4,a4]@2 [e4,g4]@5 ~ [c4,f4,a4]@2 [c4,f4,a4]@2 [c4,f4,a4]@3 ~", X: "[bb3,e4]@7 ~",
  Y: "[c4,a4]@2 [c4,a4]@3 ~ [a3,f4]@10", Z: "~@2 [d4,bb4]@2 [d4,bb4]@2 [d4,bb4]@2 [e4,c5]@7 ~",
  AA: "~ [d4,bb4]!3 [e4,c5]@3 ~", // Gm C
})).s("gm_baritone_sax").gain(0.44).pan(0.1)

// chords · piano
const piano = note(`<
  ~ A B C D E F G H I J K@2 L M N O P Q K@2 R S T U I J V W X M Y Z AA AB AC@2 AD AE R S AF AG AH AI E F Y Z AJ@2 K@2
  AK@2 N O AL AM AN AO C AP AQ AR A AS
>`.pickRestart({
  A: "f4@8 f4@2 a4@2 c5@2 f5 ~, [a3,c4]@5 ~@3", B: "bb3@8 bb3@2 d4@2 f4@2 bb4 ~, [f3,d4]@5 ~@3",
  C: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4,f4]@6 ~@4", D: "[bb3,c4,e4,g4]@15 ~", E: "[a3,c4,f4]@4 ~ [a3,c4,f4]@2 ~",
  F: "[a3,c4,f4]@5 ~ [a3,c4,f4] ~", G: "[a3,d4,f4]@10 d3@2 [a3,d4,f4]@3 ~",
  H: "[a3,d4,f4]@2 [a3,d4,f4] ~@3 [a3,d4,f4]@8 ~@2", I: "[bb3,d4,f4]@11 ~ [bb3,d4,f4]@3 ~",
  J: "~ [bb3,d4,f4] ~@2 [bb3,d4,f4]@3 ~", // Bb
  K: "[[g3,c4,e4]@14 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~@3 [g3,c4] ~@3 c2@2 [g3,e4]@2 ~@2, ~@14 c2@8 e4@2 ~@4 c4 ~@3]/2", // C C5 C
  L: "f4@4 ~ a4 c5 f5, [a3,c4]@7 ~, ~@4 f4@3 ~", M: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4,f4]@8 ~@2",
  N: "[a3,d4,f4]@5 d3 [a3,d4,f4] ~", O: "[a3,d4,f4]@5 d4 f4 ~", P: "~@2 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@7 ~",
  Q: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4]@8 ~@2", R: "[a3,c4,f4]@5 f3 [a3,c4,f4] ~", S: "[a3,c4,f4]@5 f4 a4 ~",
  T: "d4@4 ~@2 a4 d5, a3@7 ~, f4@5 f4@2 ~, ~@4 d4@3 ~", U: "[a3,d4,f4] ~ [a3,d4,f4] ~@3 [a3,d4,f4]@8 ~@2",
  V: "[g3,c4,e4]@10 c3@2 [g3,c4,e4]@3 ~", W: "[g3,c4,e4]@2 [g3,c4,e4] ~@3 [g3,c4,e4]@8 ~@2",
  X: "~@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@7 ~", Y: "[a3,d4,f4]@4 ~ [a3,d4,f4]@2 ~", Z: "[a3,d4,f4]@5 ~ [a3,d4,f4] ~",
  AA: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4]@6 ~@4", AB: "[g3,c4,e4]@6 c3@2 [g3,c4,e4]@3 ~ [g3,c4,e4] ~@3",
  AC: "[[a3,c4,f4]@25 ~@3 a4@2 c5@2, ~@13 f4@3]/2", AD: "[bb3,d4,f4]@4 ~ [bb3,d4,f4]@2 ~",
  AE: "[bb3,d4,f4]@5 ~ [bb3,d4,f4] ~", AF: "[b3,d4,f4,g4]@10 g2@2 [b3,d4,f4,g4]@3 ~",
  AG: "[b3,d4,f4,g4]@2 [b3,d4,f4,g4] ~@3 [b3,d4,f4,g4]@8 ~@2", AH: "[g3,c4,e4] ~ [g3,c4,e4] ~@3 [g3,c4,e4]@6 ~@4",
  AI: "~@2 [bb3,d4,e4,a4]@4 ~@2 [bb3,c4,e4,g4]@7 ~", AJ: "[[bb3,d4,f4]@25 ~@3 d4@2 f4@2, ~@13 bb3@3]/2",
  AK: "[[f4,a4,c5]@14 ~@2 [f4,a4,c5] ~ [f4,a4,c5] ~@3 [f4,a4] ~@3 f3@2 [f4,c5]@2 ~@2, ~@14 f3@8 c5@2 ~@4 a4 ~@3]/2", // F F5
  AL: "[bb3,d4,f4]@5 bb2 [bb3,d4,f4] ~", AM: "[bb3,d4,f4]@5 bb3 d4 ~", AN: "[g3,c4,e4]@5 c3 [g3,c4,e4] ~",
  AO: "[g3,c4,e4]@5 c4 e4 ~", AP: "~@2 [bb3,d4,f4]@4 ~@2 [g3,c4,e4]@7 ~",
  AQ: "~@2 [a3,c4,f4]@2 ~@2 f3@2 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~@3", AR: "[bb3,d4,f4]@7 ~@3 [g3,c4,e4]@4 ~@2",
  AS: "[f3,bb3,d4]@7 ~@3 [g3,c4,e4]@3 ~@3", // Bb C
})).s("gm_piano").gain(0.38).pan(0.9)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A B A C D E F G H I J K D E F G H I J K D E F G H I J K D E F G H L D M H I D@2 N O J P D E F G H I J K D E F G H I
  J K D Q D Q D R
>`.pickRestart({
  A: "[f2,c3,f3]@3 ~ [f2,c3,f3]@3 ~", B: "[bb2,f3,bb3]@3 ~ [bb2,f3,bb3]@3 ~", C: "[c3,g3,c4]@3 ~ [c3,g3,c4]@3 ~",
  D: "[f2,c3]@5 ~ [f2,c3]@2 [f2,c3]@5 ~ [f2,c3]@2", E: "[f2,c3]@5 ~ [f2,c3]@2 [f2,c3]@6 ~@2",
  F: "[a2,d3]@5 ~ [a2,d3]@2 [a2,d3]@5 ~ [a2,d3]@2", G: "[a2,d3]@5 ~ [a2,d3]@2 [a2,d3]@6 ~@2",
  H: "[bb2,f3]@5 ~ [bb2,f3]@2 [bb2,f3]@5 ~ [bb2,f3]@2", I: "[bb2,f3]@5 ~ [bb2,f3]@2 [bb2,f3]@6 ~@2",
  J: "[c3,g3]@5 ~ [c3,g3]@2 [c3,g3]@5 ~ [c3,g3]@2", K: "[c3,g3]@5 ~ [c3,g3]@2 [c3,g3]@6 ~@2", L: "[c3,g3]@13 ~@3",
  M: "[f2,c3]@5 ~ [f2,c3]@2 [f2,c3]@3 ~ [f2,c3]@3 ~", N: "[g2,d3]@5 ~ [g2,d3]@2 [g2,d3]@5 ~ [g2,d3]@2",
  O: "[g2,d3]@5 ~ [g2,d3]@2 [g2,d3]@6 ~@2", P: "[c3,g3]@5 ~ [c3,g3]@2 [c3,g3]@3 ~ [c3,g3]@3 ~",
  Q: "[bb2,f3]@5 ~ [bb2,f3]@2 [bb2,f3]@3 ~ d3@2 c3@2", R: "[bb2,f3]@5 ~ [bb2,f3]@2 [bb2,f3]@3 ~ d3@2 ~@2",
})).s("gm_fretless_bass").gain(0.28).pan(0)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@7 B ~@7 B ~@31 C ~ C ~@4>".pickRestart({
  A: "~ x!4 ~ x ~", B: "~@13 x!2 ~", C: "~@7 x",
})).gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@20 A ~@7 A ~@15 B ~@15 C ~ C ~@4>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@12 x!4", C: "~@3 x ~ x!2 ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~@3 A ~@3 A ~@5 A ~@3 B ~ A ~@5 B ~@7 A ~ A ~@2 C ~@8 A ~@5 A ~@3 B ~ D ~@4
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@15 x", D: "~@2 x ~@4 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@20 A ~@7 A ~@31 A ~ A ~@4>".pickRestart({
  A: "~ x",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct("<~ A ~@3 A ~@6 A@2 ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~ A ~ A ~>".pickRestart({
  A: "x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@6 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@11 A ~ A ~ A ~@3 A ~ A ~ A ~@7 A
>`.pickRestart({
  A: "~@3 x",
})).gain(0.72)

stack(baritone_sax, piano, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine)

More by Linda Ronstadt