Strudelify

Ooh Ahh Just a Little Bit

Gina G

KeyD♭ majorTempo129 bpm
0:00/0:00
// Ooh Ahh Just a Little Bit — Gina G
// 129 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "BrassSyn1" named as a brass, played on synth brass 1 (its electric guitar muted patch is not one); ch 3 "BrassSyn2" named as a brass, played on synth brass 1 (its lead 1 square patch is not one); ch 4 "PianoBrite" named as a piano, played on piano (its electric guitar muted patch is not one); ch 7 "BrassLead" named as a brass, played on brass section (its slap bass 1 patch is not one); ch 8 "Flute" named as a pipe, played on flute (its lead 1 square patch is not one)
// note: Full arrangement: all 201 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(129/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.

// bass · slap bass 1 · "SlapBass1"
const bass = note(`<
  ~@24 A B A B A B A B A B A ~ A B A ~ A C A D A C A D A C A D A C A D A C A D A C A D A C A D A C A D A C A D A C E@2 A
  C A D A C A D A C A D A C A D A C A D A C A D A C A D A C E@2 A C A D A C A D A C A D A C A D A C A D A C A D ~@16 A C
  A D A C A D A C A D A C A D A C A D A C A D A C A D A C A D A C A D A C A D ~@9
>`.pickRestart({
  A: "db1@2 db2!2 db1@2 db2!2 db1@2 db2!2 db1@2 db2!2", B: "db1@2 db2!2 db1 ~ db2!2 db1@2 db2!2 db1 ~ db2!2",
  C: "gb1@2 gb2!2 gb1@2 gb2!2 gb1@2 gb2!2 gb1@2 gb2!2", D: "gb1@2 gb2!2 gb1@2 gb2!2 ab1@2 ab2!2 ab1@2 ab2!2",
  E: "ab1@2 ab2!2 ab1@2 ab2!2 ab1@2 ab2!2 ab1@2 ab2!2",
})).s("gm_slap_bass_1").gain(0.3).pan(0)

// chords · synth brass 1 · "BrassSyn1"
const synth_brass_1 = note(`<
  ~@20 A@2 B C D@3 E D@3 E D@3 E D@3 E F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G I J F
  G F H F G F H F G F H F G F H F G F H F G F H F G F H F G I J F G F H F G F H F G F H F G F H F G F H F G F H ~@16 F G
  F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H F G F H ~@9
>`.pickRestart({
  A: "~@2 [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5]!2 ~ [f4,ab4,db5]!2 ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~", // Db
  B: "[f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5]!2 ~ [f4,ab4,db5]!2 ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~", // Db
  C: "[f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~ [f4,ab4,db5] ~", // Db
  D: "[ab3,db4,f4] ~ [ab3,db4,f4]!2 ~@2 [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4]!2 ~ [ab3,db4,f4]!2 ~", // Db
  E: "[ab3,db4,f4] ~ [ab3,db4,f4]!2 ~@2 [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4]!2 ~ [ab3,db4,f4] [ab3,db4] ~, ~@7 f4", // Db Db5
  F: "[ab3,db4,f4] ~ [ab3,db4,f4] ab3 [ab3,db4,f4] ~ [ab3,db4,f4] ab3 [ab3,db4,f4] ab3 [ab3,db4,f4] ab3 [ab3,db4,f4] ab3 [ab3,db4,f4] ab3", // Db
  G: "[bb3,db4,gb4] bb3 [bb3,db4,gb4] bb3 [bb3,db4,gb4] ~ [bb3,db4,gb4] bb3 [bb3,db4,gb4] bb3 [bb3,db4,gb4] bb3 [bb3,db4,gb4] bb3 [bb3,db4,gb4] bb3", // Gb
  H: "[bb3,db4,gb4] bb3 [bb3,db4,gb4] bb3 [bb3,db4,gb4] ~ [bb3,db4,gb4] bb3 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4", // Gb Ab
  I: "[c4,eb4,ab4] ~ [c4,eb4,ab4] c4 [c4,eb4,ab4] ~ [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4", // Ab
  J: "[c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] ~ [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4 [c4,eb4,ab4] c4", // Ab
})).s("gm_synth_brass_1").gain(0.11)

// chords · synth brass 1 · "BrassSyn1" · soft notes
const synth_brass_1_soft = note(`<
  ~@24 A@16 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D E B C B C B C B C B C B C B C
  B C B C B C B C B C B C B C B C D E B C B C B C B C B C B C B C B C B C B C B C B C ~@16 B C B C B C B C B C B C B C B
  C B C B C B C B C B C B C B C B C B C B C B C B C ~@9
>`.pickRestart({
  A: "~@5 [ab3,db4,f4] ~@10", B: "~ ab3 ~@3 ab3 ~@10", C: "~@5 bb3 ~@10", D: "~ c4 ~@3 c4 ~@10", E: "~@5 c4 ~@10",
})).s("gm_synth_brass_1").gain(0.07)

// other · synth brass 1 · "BrassSyn2"
const synth_brass_1_2 = note(`<
  ~@32 A B C D A B C D C B C D A B C D ~@8 A B C D C B C D ~@24 A B C D A B C D ~@32 A B C D A B C D ~@8 A B C D A B C D
  A B C D A B C D ~@16 A B C D C B C D A B C D A B C D ~@9
>`.pickRestart({
  A: "db4@2 ab4 ~ gb4 ~ f4 ~ gb4 ~ f4 gb4 ~ f4 gb4 ab4", B: "db4 ~ ab4 ~ gb4 ~ f4 ~ gb4 ~ f4 ab4@4 ~",
  C: "db4 ~ ab4 ~ gb4 ~ f4 ~ gb4 ~ f4 gb4 ~ f4 gb4 ab4", D: "db4@2 ab4 ~ gb4 ~ f4 ~ gb4 ~ f4 db4@4 ~",
})).s("gm_synth_brass_1").gain(0.28)

// chords · piano · "PianoBrite"
const piano = note(`<
  ~@40 A B C D A E C D A E C F A E C D A E C D A B C D ~@16 A B C D A E C D A B C F A E C D ~@16 A E C D A E C F A B C D
  A E C D A E C F A E C D ~@16 A E C D A E C F A B C D A E C D A B C F A E C D A E C F A B C D A E C D A B C F ~@9
>`.pickRestart({
  A: "[ab3,db4,f4]@2 ~@2 [db4,f4]@2 ab3 [db4,f4]@2 ab3 [ab3,db4,f4] ~ [db4,f4]@2 ab3 ~, ~@4 ab3 ~@2 ab3 ~@4 ab3 ~@3", // Db
  B: "[gb3,bb3,db4]@2 ~@2 [bb3,db4]@2 gb3 [gb3,bb3,db4] ~ [gb3,bb3,db4] gb3 ~ [bb3,db4]@2 gb3 ~, ~@4 gb3 ~@7 gb3 ~@3", // Gb Bbm Gb Bbm
  C: "[ab3,db4,f4]@2 ~@2 [db4,f4]@2 ab3 [ab3,db4,f4] ~ [ab3,db4,f4] ab3@2 [db4,f4]@2 ab3 ~, ~@4 ab3 ~@7 ab3 ~@3", // Db
  D: "[gb3,bb3,db4]@2 ~@2 [bb3,db4]@2 gb3 [ab3,c4,eb4] ~ [ab3,c4,eb4] ab3@2 [c4,eb4]@2 ab3 ~, ~@4 gb3 ~@7 ab3 ~@3", // Gb Bbm Ab Cm
  E: "[gb3,bb3,db4]@2 ~@2 [bb3,db4]@2 gb3 [gb3,bb3,db4] ~ [gb3,bb3,db4] gb3@2 [bb3,db4]@2 gb3 ~, ~@4 gb3 ~@7 gb3 ~@3", // Gb Bbm Gb Bbm
  F: "[gb3,bb3,db4]@2 ~@2 [bb3,db4]@2 gb3 [ab3,c4,eb4] ~ [ab3,c4,eb4] ab3 ~ [c4,eb4]@2 ab3 ~, ~@4 gb3 ~@7 ab3 ~@3", // Gb Bbm Ab Cm
})).s("gm_piano").gain(0.22)

// chords · celesta · "StrSyn1"
const celesta = note("<~@72 A B A C A D E@2 ~@24 A B A C A D E@2 ~@89>".pickRestart({
  A: "[f4,ab4,db5]@7 ~", B: "[gb4,bb4,db5]@15 ~", C: "[gb4,bb4,db5]@7 ~ [ab4,c5,eb5]@6 ~@2", D: "[gb4,bb4,db5]@7 ~",
  E: "[ab4 ab5, [c5,eb5]]/2", // Cm
})).s("gm_celesta").gain(0.15)

// bass · brass section · "BrassLead"
const bass_2 = note("<~@16 A B C D E A F ~ D C A C E C G A F C D E ~@165>".pickRestart({
  A: "~@2 db2@2 ~@2 db2@2 ~@2 db2 ~@3 db2@2", B: "~@2 db2@2 ~@2 db2@2 ~@2 db2@2 ~@2 db2 ~",
  C: "~ db2 ~ db2 ~ db2 ~ db2", D: "~@2 db2 ~@3 db2@2 ~@2 db2 ~@3 db2@2", E: "~@2 db2@2 ~@2 db2 ~@3 db2@2 ~@2 db2@2",
  F: "~@2 db2 ~@3 db2@2 ~@2 db2@2 ~@2 db2 ~", G: "~@2 db2@2 ~@2 db2 ~@3 db2@2 ~@2 db2 ~",
})).s("gm_electric_bass_finger").gain(0.33).pan(0)

// other · flute
const flute = note(`<
  ~@15 A@2 B ~ C ~ B ~@5 D E F ~ A@2 ~@15 G H I J I H K L M N O P M Q ~@2 R S@3 R T@2 U V W@2 X Y Z AA AB G H I J I H K
  AC M N O P M Q ~@2 R AD@2 U AE AF AG AH AI AJ AK AL AM AN AO AP G H I J I H K AQ G H I J I H K AC M N O P M Q ~@26 G H
  I J I H K AC G H I J I H K L M N O P M Q ~ AR@2 N O P M Q ~ A@2 ~@8
>`.pickRestart({
  A: "[bb3 db4 eb4 e4 f4 eb4 db4@5 ~@5]/2", B: "~@8 db4 ~ db4!2 ~ db4 db4@2", C: "~@8 gb4!3 ~ ab4@3 ~",
  D: "~@8 gb4!3 ~ ab4@4", E: "ab4@3 ~ ab4@3 ~ ab4@3 ~ ab4@3 ~", F: "ab4@3 ~ ab4@3 ~ ab4@2 ~@2 ab4 ~@3",
  G: "f4@2 ~@2 db4@2 ~@2 db4 ~ db4!2 ~ db4 db4@2", H: "gb4@2 ~@2 db4@3 ~ gb4!3 ~ ab4@3 ~",
  I: "f4@3 ~ db4@2 ~@2 db4 ~ db4!2 ~ db4!2 ~", J: "eb4!2 ~ eb4@2 ~ db4@2 f4 ~ eb4 ~ db4@3 ~",
  K: "f4@3 ~ db4@3 ~ db4 ~ db4!2 ~ db4 db4@2", L: "eb4!2 ~ eb4@2 db4@2 ~ f4@2 eb4@2 db4@4",
  M: "~@8 b4 ~ b4!2 ~ b4 db5@2", N: "~@7 b4!4 ~ db5@3 ~", O: "~@8 b4 ~ b4!2 ~ b4 db5 ~",
  P: "e5@3 ~ eb5@2 ~@2 db5@3 ~ db5@3 ~", Q: "~@6 b4 ~ b4!3 ~ db5@2 ~@2", R: "~@4 ab4 ~ ab4 ~ ab4@3 ~ gb4 ~ f4 ~",
  S: "[f4 gb4 ~ ab4@5 ~@2 gb4 ~ gb4 ~ gb4 f4@6 ~@5 eb4 ~ eb4 ~ eb4 db4@3 ~@14]/3",
  T: "[f4 ~ gb4 ab4@5 ~@2 db4 ~ db4@2 eb4 f4@6 ~@5 eb4@2 ~ eb4 ~@2]/2", U: "db4@3 ~@5",
  V: "~@4 ab4 ~ ab4 ~ ab4@3 ~ gb4@2 f4 ~", W: "[f4 gb4 ~ ab4@6 ~ bb4 ~ bb4@2 gb4 ab4@3 bb4@5 ~@3 gb4 ~ gb4@2 ab4@2]/2",
  X: "~@2 eb4@3 ~ db4@8 ~@2", Y: "~@4 ab4 ~ ab4 ~ ab4@3 gb4 ~@2 gb4 ~", Z: "gb4@2 ~ gb4@3 bb4 ~ ab4@6 ~@2",
  AA: "~@2 eb4@2 ~ eb4 ~@2 eb4@2 ~ bb4@2 ~ bb4 ~", AB: "bb4@2 ~ ab4@2 ~ f4 ~ ab4@3 ~ bb4@3 ~",
  AC: "eb4!2 ~ eb4@2 db4@2 ~ f4 ~ eb4@2 db4@4", AD: "[f4@2 gb4 ab4@4 ~@3 db4 ~ db4@2 eb4 f4@2 ~ f4@7 ~ f4@3 db4@2 ~]/2",
  AE: "~@4 ab4 ~ ab4 ab4@4 ~ gb4 ~ f4 ~", AF: "f4@2 gb4 ab4@6 ~ bb4@2 ~ ab4@2 ~",
  AG: "ab4@2 ~ gb4 f4@5 ~ f4 ~ gb4@2 ab4 ~", AH: "f4@2 ~ eb4 db4@6 ~@6", AI: "~@6 ab4 ~ ab4!2 ~@2 gb4@2 f4 ~",
  AJ: "f4@2 gb4 ab4@5 ~@2 bb4@2 ~ ab4@2 ~", AK: "ab4@2 ~ gb4 f4@5 ~ f4@2 gb4 ~ ab4@2", AL: "f4@3 eb4 db4@8 ~@4",
  AM: "~@4 ab4 ~ ab4 ~ ab4@3 gb4@2 ~ f4 ~", AN: "f4@2 ~ f4@3 bb4@2 ab4@7 ~",
  AO: "~@2 eb4@2 ~ eb4@2 ~ eb4@2 ~ eb4@3 bb4 ~", AP: "bb4@2 ~ ab4@3 f4@2 ab4@4 bb4@3 ~",
  AQ: "eb4!2 ~ eb4@2 db4@2 ~ f4@2 eb4 ~ db4@4",
  AR: "[bb3@2 db4@2 eb4@2 e4@2 f4@2 eb4@2 db4@10 ~@2 b4 ~ b4!2 ~ b4 db5@2]/2",
})).s("gm_flute").gain(0.28)

// drums · kick
const kick = s("bd").struct("<A@23 ~ A@11 ~ A@3 ~ A@111 ~ A@48 ~>".pickRestart({
  A: "x!4",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct("<A@23 ~ A@7 B A@3 C A@3 C A@111 C A@48 ~>".pickRestart({
  A: "~ x ~ x", B: "x!16", C: "x!2 ~ x!3 ~ x!9",
})).gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@4 B@15 ~ B@11 ~ B@3 ~ B@111 ~ B@48 ~>".pickRestart({
  A: "~ x!3", B: "x!4",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@35 [~@7 x] ~@3 [~@7 x] ~@111 [~@7 x] ~@49>").gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@3 B@16 ~ B@11 ~ B@3 ~ B@111 ~ B@48 ~>".pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~ x ~ x ~ x ~ x",
})).gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@13 x ~@2] ~@3 [~@13 x ~@2] ~@111 [~@13 x ~@2] ~@49>").gain(0.22)

// drums · high tom
const high_tom = s("ht").struct("<~@35 [~@3 x] ~@3 [~@3 x] ~@111 [~@3 x] ~@49>").gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct("<A@23 ~ A@11 ~ A@3 ~ A@111 ~ A@48 ~>".pickRestart({
  A: "x!16",
})).gain(0.22)

// drums · bongos
const bongos = s("bongo:18").struct("<A@23 ~ A@11 ~ A@3 ~ A@111 ~ A@48 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.86)

// drums · congas
const congas = s("conga:13").struct("<A@23 ~ A@11 ~ A@3 ~ A@111 ~ A@48 ~>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(1.05)

// drums · congas
const congas_2 = s("conga:18").struct("<A@23 ~ A@11 ~ A@3 ~ A@111 ~ A@48 ~>".pickRestart({
  A: "x ~@5 x!3 ~@5 x!2",
})).gain(1.05)

stack(
  bass, synth_brass_1, synth_brass_1_soft, synth_brass_1_2, piano, celesta, bass_2, flute, kick, snare, hihat, low_tom,
  open_hat, mid_tom, high_tom, tambourine, bongos, congas, congas_2
)