Strudelify
Mi Chico Latino cover art

1999 · Schizophonic

Mi Chico Latino

Geri Halliwell

KeyE♭ majorTempo105 bpm
0:00/0:00
// Mi Chico Latino — Geri Halliwell
// 105 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger
const bass = note(`<
  ~@5 A B C D E B C D A B C D F G H I A B C D A B C D A B C D E B C D A B C D F G H I A B C D A B C D ~@5 A B C J A B C
  D A B C D A B C D A B C D K
>`.pickRestart({
  A: "c2@3 g2 ~@2 c3@5 g2 f2 ~ g2 ~", B: "c2@3 g2 ~@2 c3@6 ~@4", C: "bb1@3 f2 ~@2 bb2@5 bb1 ab1@4",
  D: "g1@3 d2 ~@2 g2@5 d2 g1 ~ g1@2", E: "c2@3 g2 ~@2 c3@5 ~@3 g2 ~", F: "ab1!2 ~ ab1 ab1@2 ~@10",
  G: "g1!2 ~ g1 g1@2 ~@6 g2@4", H: "f1!2 ~ f1 f1@2 ~@6 f1@4", I: "g1@3 ~ g1@4 b1@4 b1@2 ~@2", J: "g1@3 ~@13",
  K: "c2!2 ~ c2!2 ~@11",
})).s("gm_electric_bass_finger").gain(0.59)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@4 B C D E F G@2 H I G@2 H I J K J I C D E F C D E F C D E F G@2 H I G@2 H I J K J I C D E F C D E F ~@5 C D E L C D
  E F C D E F C D E F C D E F M
>`.pickRestart({
  A: "[~@16 [eb4,g4]@13 ~@3 g4@10 ~@6 [d4,f4]@8 ~@4 [eb4,ab4]@2 ~@2, ~@15 [g3,c4]@14 ~@2 [g3,c4,eb4]@13 ~@3 [f3,bb3]@9 ~@3 [ab3,c4]@3 ~@2]/4", // Eb Dm Ab5 C5 Cm Bb5 Ab
  B: "[g3,b3,d4,g4]@5 [g3,b3,d4,g4] ~ [g3,b3,d4,g4]@2 [g3,b3,d4,g4] ~@2 [b3,d4,g4]@2 [g3,b3,d4,g4] ~, ~@11 g3@3 ~@2", // G
  C: "[c4,eb4,g4]!4 ~ [c4,eb4,g4]!3 ~ [c4,eb4,g4]!3 ~ [c4,eb4,g4]!2 ~", // Cm
  D: "[c4,eb4,g4] [eb4,g4] [c4,eb4,g4]!2 ~ [c4,eb4,g4]!3 ~ [c4,eb4,g4]!3 ~ [c4,eb4,g4]!3", // Cm Eb Cm
  E: "[bb3,d4,f4]!2 [bb3,d4] [bb3,d4,f4] ~ [bb3,d4,f4] [bb3,d4] [bb3,d4,f4] ~ [bb3,d4,f4] [bb3,d4] [bb3,d4,f4] [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Bb Ab
  F: "[b3,d4,g4]!2 [b3,d4] [b3,d4,g4] ~ [b3,d4,g4] [b3,d4] [b3,d4,g4] ~ [b3,d4,g4] [b3,d4] [b3,d4,g4]@2 [b3,d4,g4]!2 ~", // G Bm G Bm G Bm G
  G: "~@2 [g3,eb4] [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4] [g3,c4,eb4] [g3,c4,eb4,g4] ~ [g3,c4,eb4,g4]!2 [g3,eb4,g4] ~ [g3,c4,eb4,g4] [g3,c4,g4] [g3,c4,eb4,g4], ~ [g3,c4,eb4,g4]@2 ~@13", // Cm C5 Cm
  H: "~@2 [f3,d4] [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4] [f3,bb3,d4] [f3,bb3,d4,f4] ~ [f3,bb3,d4,f4]!2 [f3,d4,f4] ~ [ab3,db4,f4,ab4]!2 [ab3,f4,ab4], ~ [f3,bb3,d4,f4]@2 ~@13", // Dm Bb Dm Db Bb
  I: "~@2 [g3,d4] [g3,b3,d4,g4] ~ [g3,b3,d4,g4] [g3,b3,d4] [g3,b3,d4,g4] ~ [g3,b3,d4,g4]!2 [g3,d4,g4] ~ [g3,b3,d4,g4] [g3,b3,g4] [g3,b3,d4,g4], ~ [g3,b3,d4,g4]@2 ~@13", // G5 G G5 G
  J: "[ab3,c4,eb4,g4]!2 ~ [ab3,c4,eb4,g4] [ab3,c4,eb4,g4]@2 ~@10", // Abmaj7
  K: "[g3,c4,eb4,g4]!2 ~ [g3,c4,eb4,g4] [g3,c4,eb4,g4]@2 ~@10", L: "[b3,d4,g4] ~@15", M: "[eb4,g4] [eb4,g4,c5]!4 ~@11",
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.6)

// other · rock organ
const rock_organ = note(`<
  ~@8 A@2 B@5 C@2 D E F G H I J G K L M N O@2 P@8 Q@2 R S T G H I J G K L M N U ~@8 V W M G K L M N U X Y G Z AA AB N ~
>`.pickRestart({
  A: "[~@10 g4@2 ~ eb5 ~ d5@2 c5@8 ~ g4 ~@2 eb5 ~ d5, ~@6 d5 ~@7 d5 ~]/2",
  B: "[~ c5@8 ~ c5 ~ c5@2 c5 c5@2 bb4@5 bb4 ~ bb4 ~ bb4@2 c5@2 ~ g4@9 ~@4 eb5 ~ d5 c5@8 ~@3 g4 ~ eb5 d5@2 c5@7 ~@6 c5@2 c5!2, ~@15 ab4 ~@24]/5",
  C: "[~ bb4@5 bb4@2 bb4@2 bb4@2 c5@2 ~ g4@8 ~@8 g4, ~@7 ab4 ~@8]/2", D: "eb5 eb5@2 eb5@2 eb5@2 d5@2 c5@2 c5@3 ~@2",
  E: "eb5@2 eb5 eb5@2 eb5@2 f5@2 eb5@2 d5@4 ~, g4 ~@15", F: "eb5@2 eb5 eb5@2 eb5@2 d5@2 c5@2 c5@3 c5@2",
  G: "b4@4 b4@4 c5@4 d5@3 ~", H: "d5 ~@2 c5@2 ~ g4@4 d5@2 ~@2 c5@2", I: "d5@3 c5@2 ~ d5@3 eb5@6 ~",
  J: "d5 ~@2 bb4@2 ~ f4@8 b4@2", K: "d5@2 ~ c5@2 ~ g4@7 ~ c5 ~", L: "d5@2 ~ c5@2 ~ eb5@7 ~@3",
  M: "d5@3 bb4@2 ~ f4@7 ~ b4 ~", N: "b4@3 b4@3 b4@2 c5@4 d5@4",
  O: "[c5@10 ~@2 d5@2 eb5 ~ c5@10 ~@2 c5@2 c5!2, ~@15 d5@2 ~@15]/2",
  P: "[bb4@9 ~@3 ab4@2 ab4 ~ g4@8 ~@4 d5 ~ eb5 d5@2 c5@7 ~@3 g4 d5@2 eb5 d5@2 c5@9 ~@2 c5@2 c5 c5@2 bb4@3 bb4 ~ bb4@2 bb4@2 bb4@2 c5@2 ~ g4@9 ~@2 g4 ~ eb5 d5@2 c5@10 ~ g4 ~ eb5 d5@2 c5@10 ~@3 c5@2 c5!2, ~@15 ab4@2 ~@61 ab4@2 ~@48]/8",
  Q: "[~ bb4@5 bb4@2 bb4@2 bb4@2 c5@2 ab4 g4@9 ~@8]/2", R: "eb5 eb5@2 eb5@2 eb5@2 d5@2 c5@2 c5@2 ~@2 g4",
  S: "eb5 eb5@2 eb5@2 eb5@2 f5@2 eb5@2 d5@3 ~@2", T: "eb5!2 ~ eb5 ~ eb5@2 d5 ~ c5@2 c5@2 ~ c5@2", U: "c5@5 ~@3",
  V: "d5@3 c5@2 ~ g4@4 d5@2 ~@2 c5@2", W: "d5@3 c5@2 ~ d5@3 ~ eb5@6", X: "g5@3 f5@2 ~ f5@3 eb5@6 ~",
  Y: "d5@2 c5 d5@2 c5 ~ g5 ~ c5 c5@3 ~ c5@2", Z: "d5@3 c5@2 ~ eb5@8 c5 ~", AA: "g5@3 f5@3 f5@2 eb5@6 ~@2",
  AB: "d5@3 bb4@3 f4@7 ~ c5@2",
})).s("gm_rock_organ").gain(0.45).pan(0.8)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B C D A B C D ~@11 E A B C D A B C D A B C D ~@11 E A B C D A B C D ~@9 F@2 G H F@2 G H F@2 G H F@2 G H ~
>`.pickRestart({
  A: "g5@2 c5 f5 ~ bb4 ~ eb5 ~ ab4 ~ d5 g4@2 g4@2", B: "g5@2 c5 f5 ~ bb4 ~ eb5 ~ d5 ~ eb5 d5@2 d5 ~",
  C: "d5@2 c5 f5 ~ bb4 ~ eb5 ~ d5 ~ eb5 b4@2 b4 ~", D: "d5@2 c5 eb5 ~ d5 ~ f5 ~ eb5 ~ f5 g5@2 g5 ~",
  E: "~ b4 c5 d5, g4@13 ~@3", F: "[g4,g5]/2", G: "[f4,f5]@3 [eb4,eb5]", H: "[d4,d5]@15 ~",
})).s("gm_string_ensemble_1").gain(0.48)

// chords · piano · Cm Bb Ab G Cm Bb Ab G
const piano = note(`<
  ~
  [[g3,c4,eb4,g4]@2 ~ [g3,c4,eb4,g4] ~@2 [g3,c4,eb4,g4]@2 ~ [g3,c4,eb4,g4] ~@2 [g3,c4,eb4,g4] ~@3]!2
  [[f3,bb3,d4,f4]@2 ~ [f3,bb3,d4,f4] ~@2 [f3,bb3,d4,f4]@2 ~ [f3,bb3,d4,f4] ~@2 [ab3,c4,eb4,ab4]@2 ~@2]
  [[g3,b3,d4,g4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4] ~@3]
  [[g3,c4,eb4,g4]@2 ~ [g3,c4,eb4,g4] ~@2 [g3,c4,eb4,g4]@2 ~ [g3,c4,eb4,g4] ~@2 [g3,c4,eb4,g4] ~@3]!2
  [[f3,bb3,d4,f4]@2 ~ [f3,bb3,d4,f4] ~@2 [f3,bb3,d4,f4]@2 ~ [f3,bb3,d4,f4] ~@2 [ab3,c4,eb4,ab4]@2 ~@2]
  [[g3,b3,d4,g4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4]@2 ~ [g3,b3,d4] ~@2 [g3,b3,d4] ~@3]
  ~@70
>`).s("gm_piano").gain(0.4).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@5 B C D@2 ~@8 E F G H ~ I J K ~ L M N ~@7 O P Q R S E F G H ~ T U V W ~ X Y ~@5 Z AA AB AC ~ AD AE AF ~ AG AH AI ~
  AJ@2 AK AL ~@2 AM AN
>`.pickRestart({
  A: "[~@16 g4@14 ~@2 [eb4,g4]@13 ~@3 [d4,f4]@9 ~@3 ab4@2 ~@2 [b3,d4,g4]@11 d4 eb4 f4 d4 eb4, ~@15 [g3,c4,eb4]@15 ~ [g3,c4]@14 ~@2 [f3,bb3]@10 ~@2 [ab3,c4,eb4]@3 ~ g3@12 ~@5]/5", // Eb Dm G Cm C5 Bb5 Ab
  B: "c4@5 ~@6 d4 g3 g3@2 d4", C: "eb4@3 d4@3 c4@5 ~@3 [d4,eb4] [c4,d4]",
  D: "[bb3@6 ~@3 bb4 ~@2 ab4!3 ab4@2 ab4 g4 ~ g4 f4 ~ f4 eb4 ~ eb4 d4 ~ d4!2 ~]/2",
  E: "[ab3,c4,eb4,g4]!2 ~ [ab3,c4,eb4,g4] [ab3,c4,eb4,g4]@3 ~@9", F: "[g3,c4,eb4,g4]!2 ~ [g3,c4,eb4,g4]!2 ~@11",
  G: "[ab3,c4,eb4,g4]!2 ~ [ab3,c4,eb4,g4]!2 ~@11", // Abmaj7
  H: "~ d3 eb3 [d3,f3] [eb3,g3] [f3,ab3] [g3,b3] [ab3,c4] [b3,d4] [c4,eb4] [d4,f4] [eb4,g4] [f4,ab4] [g4,b4] [ab4,c5] [b4,d5]", // Dm Eb Fm G Ab Bm Cm Dm …
  I: "~@10 eb4 d4 c4 d4!2 eb4", J: "d4@9 ~@3 c4@3 [c4,d4]", K: "b3@3 ~", L: "~@13 f4@2 eb4", M: "f4@12 eb4@3 f4",
  N: "d4@5 ~@3, eb4 ~@15", O: "~@5 b3 d4 f4 ab4 g4 f4 g4 eb4 f4 d4 eb4", P: "c4@5 ~@11", Q: "~@11 [c5,d5] eb5 d5 ~ c5",
  R: "bb4@11 [bb4,c5] ab4@3 [ab4,bb4]", S: "g4 ~", T: "~@12 [gb4,g4] ~ ab4 bb4", U: "~ f4@6 ~@5 c4@3 [c4,d4]",
  V: "b3@11 [d4,eb4] [e4,f4] e4 eb4 d4", W: "eb4@7 ~@9", X: "~@12 ab4@3 [g4,ab4]", Y: "g4@7 ~@9",
  Z: "~@9 g4 ~ c5 ~ d5 ~ eb5", AA: "d5@2 eb5 c5@6 c5 ~ d5 eb5 d5 c5 d5, ~@3 d5 ~@12",
  AB: "bb4@3 f4@3 d4@3 bb3@3 ab3@2 ~ [ab3,bb3]", AC: "g3 ~@15", AD: "~@12 g4 ~ ab4 bb4", AE: "f4@11 ~ eb4@3 ~",
  AF: "~@2 d4@2 ~@7 g4 f4@2 eb4 d4", AG: "~@9 d4 eb4 f4 g4 ab4 bb4 c5",
  AH: "d5@2 ~ bb4 ~@2 f4@5 g4 eb4@3 ~, ~@12 f4 ~@3", AI: "d4 ~@3",
  AJ: "[~@9 g4 c5 d5@2 eb5 ~ d5@3 bb4 f4@7 ~ [f4,g4] ~ eb4@2 f4]/2", AK: "d4@4 ~@2 d5 eb5@2 f5 ~ f5@3 eb5 d5, eb4 ~@15",
  AL: "c5@3 ~@5", AM: "~@7 f5 eb5 d5 c5 eb5 d5 c5 b4 d5", AN: "c5 c4@2 c4!2 ~@11",
})).s("gm_acoustic_guitar_nylon").gain(0.64)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@17 [~@3 x ~@4]!3 [~@3 x ~@3 x] ~@20 [~@3 x ~@4]!3 [~@3 x ~@3 x] ~@34>").gain(0.4)

// drums · clap
const clap = s("cp").struct("<~ A@8 B C@2 D B E B D F@4 A@12 B G C D B E B D F@4 A@8 ~@5 A@20 ~>".pickRestart({
  A: "x!3 ~ x!3 ~ x!3 ~ x ~@3", B: "x ~ x ~ x!3 ~ x!3 ~ x ~@3", C: "x ~ x ~ x!3 ~ x ~ x ~ x ~@3",
  D: "x!3 ~ x!3 ~ x!3 ~ x ~ x ~", E: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", F: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
  G: "x ~@3 x!3 ~ x ~ x ~ x ~@3",
})).gain(0.48)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@9 A B@2 ~ A B A ~ C@4 ~@12 A D B ~ A B A ~ C@4 ~@34>".pickRestart({
  A: "~ x ~@14", B: "~ x ~@7 x ~@6", C: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", D: "~ x!2 ~@6 x ~@6",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@17 [~@3 x ~@12]!2 [~ x ~ x ~@12] ~@21 [~@3 x ~@12]!2 [~ x ~ x ~@12] ~@35>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@13 B C A D A@20 B C A D A@8 ~ A@7 ~ A@16 ~>".pickRestart({
  A: "x!4", B: "~ x!3", C: "~@2 x!2", D: "x!2",
})).gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 A@13 B C D E A@20 B C D E A@8 ~ A@7 ~ A@16 ~>".pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~ x ~@4 x ~@3 x ~@3 x ~", C: "x!4 ~ x ~ x", D: "~ x ~ x ~ x ~ x", E: "~ x ~@6",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@7 B C D@2 E ~@3 A ~@3 A F ~@2 A ~@7 B C G D E ~@3 A ~@3 A ~@3 A@2 ~@3 H ~@3 A ~ I ~@2 J K ~ A ~ L I@2 M
>`.pickRestart({
  A: "~@6 x!2", B: "~@11 x ~@2 x ~", C: "x!2 ~ x!2 ~@11", D: "x ~@2 x!2 ~@11", E: "~@5 x ~@7 x ~@2", F: "~@9 x ~@6",
  G: "x!2 ~@2", H: "~ x ~@2 x ~@2 x ~@4 x ~@3", I: "~@7 x", J: "~@9 x ~@2 x ~@2 x", K: "~@10 x!6", L: "~@12 x ~ x!2",
  M: "~ x!4 ~@11",
})).gain(0.48)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@18 [~ x ~@14]!2 ~@22 [~ x ~ x ~@12] [~ x ~@14] ~@34 x>").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@13 ~@4 A@11 ~ A@8 ~@4 A@8 ~ A@7 ~ A@16 ~>".pickRestart({
  A: "~@7 x",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@8 A ~@7 B C D ~ E ~@3 A ~@3 A F ~@2 A ~@7 B C D ~ E ~@3 A ~@3 A G H I J K ~@3 L ~@3 A M N O ~ P Q R S T U V W ~
>`.pickRestart({
  A: "~@9 x ~ x ~@4", B: "~@9 x ~@2 x ~@3", C: "~ x ~@2", D: "x!2 ~@2 x ~@11", E: "~@4 x!4 ~@4 x!4",
  F: "~@9 x ~ x!2 ~ x ~", G: "x!2 ~ x!2 ~@4 x ~@2 x ~@2 x", H: "~@11 x!5", I: "x ~ x ~@6 x ~@2 x ~ x ~",
  J: "~ x ~@2 x ~@7 x ~@3", K: "~ x ~@2 x ~@2 x ~ x ~ x!2 ~ x ~", L: "~ x ~@2 x ~@2 x ~@3 x!2 ~ x ~", M: "~@11 x!2 ~@3",
  N: "~@6 x!2 ~@4 x ~@3", O: "x ~@10 x ~@4", P: "~@9 x ~@2 x ~@2 x", Q: "~@10 x ~@2 x!3", R: "x ~@12 x!2 ~",
  S: "~@9 x!3 ~@4", T: "~@15 x", U: "x ~@2 x ~@12", V: "~@8 x ~@2 x ~ x ~@2", W: "~@9 x ~ x!2 ~@3",
})).gain(0.64)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@17 A ~@2 B ~@20 A ~@2 B ~@9 C D@2 ~@10 E ~@3 F D ~ G D H ~@2>".pickRestart({
  A: "x", B: "~@3 x ~@7 x ~@4", C: "~@6 x ~ x!3 ~@5", D: "~@11 x ~@4", E: "~@5 x ~@5 x ~@4", F: "~@3 x", G: "~@7 x",
  H: "~@7 x ~@8",
})).gain(0.32)

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

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~ A B ~@2 C@5 D E F C@2 E C ~@4 C@13 D E F C@2 E G ~@4 C@8 ~ C@7 H C@16 ~
>`.pickRestart({
  A: "~@8 x!3 ~ x!2 ~ x", B: "x!10 ~@3 x ~ x", C: "~@3 x!2 ~@6 x!2 ~@3", D: "~@3 x!2 ~@3 x!2 ~ x!2 ~@3",
  E: "~@4 x ~@6 x!2 ~@3", F: "~@3 x!2 ~@4 x ~ x!2 ~@3", G: "~@3 x!7 ~ x!2 ~@3", H: "~@6 x!7 ~@3",
})).gain(1.68)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~ [~@11 x ~@2 x ~] [~@3 x] ~@37 [~ x ~@3 x ~@2] ~@20 [x!6 ~@7 x!3] ~@17>")
  .gain(0.63)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@4 A@13 ~@4 A@20 ~@4 A@8 ~ A@7 ~ A@16 ~>".pickRestart({
  A: "~@3 x ~@3 x",
})).gain(1.68)

// drums · congas
const congas = s("conga:13").struct("<~@4 [~ x ~ x] ~@74>").gain(1.54)

// … 48 more lines

More by Geri Halliwell