Strudelify
Ooh Ahh Just a Little Bit cover art

1996 · Ooh Aah...Just a Little Bit

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, A@4 for four bars: 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 A C A B A C A B A C A B A C ~@8 A B A C A B A C ~@24 A B A C A B A C ~@32 A B A C A B A C ~@8 A B A C A B A C
  A B A C A B A C ~@16 A B A C A B A C A B A C A B A C ~@9
>`.pickRestart({
  A: "db4 ~ ab4 ~ gb4 ~ f4 ~ gb4 ~ f4 gb4 ~ f4 gb4 ab4", B: "db4 ~ ab4 ~ gb4 ~ f4 ~ gb4 ~ f4 ab4@4 ~",
  C: "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 B C D A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D
  A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@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@2 [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
})).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 [~ db2 ~ db2 ~ db2 ~ db2]!7 ~ [~ db2 ~ db2 ~ db2 ~ db2]!12 ~@165>")
  .s("gm_electric_bass_finger").gain(0.33).pan(0)

// other · flute
const flute = note(`<
  ~@15 A@2 B ~ C ~ B ~@5 C D E ~ A@2 ~@15 F G F H F G F I J K L M J N ~@2 O P@3 O Q@2 R O S@2 T U V W X F G F H F G F I
  J K L M J N ~@2 O Y@2 R Z AA AB AC AD AA AB AE AF AG AH AI F G F H F G F I F G F H F G F I J K L M J N ~@26 F G F H F
  G F I F G F H F G F I J K L M J N ~ AJ@2 K L M J N ~ 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: "ab4@3 ~ ab4@3 ~ ab4@3 ~ ab4@3 ~", E: "ab4@3 ~ ab4@3 ~ ab4@2 ~@2 ab4 ~@3",
  F: "f4@3 ~ db4@2 ~@2 db4 ~ db4!2 ~ db4!2 ~", G: "gb4@2 ~@2 db4@3 ~ gb4!3 ~ ab4@3 ~",
  H: "eb4!2 ~ eb4@2 ~ db4@2 f4 ~ eb4 ~ db4@3 ~", I: "eb4!2 ~ eb4@2 db4@2 ~ f4 ~ eb4@2 db4@4",
  J: "~@8 b4 ~ b4!2 ~ b4 db5@2", K: "~@7 b4!4 ~ db5@3 ~", L: "~@8 b4 ~ b4!2 ~ b4 db5 ~",
  M: "e5@3 ~ eb5@2 ~@2 db5@3 ~ db5@3 ~", N: "~@6 b4 ~ b4!3 ~ db5@2 ~@2", O: "~@4 ab4 ~ ab4 ~ ab4@3 ~ gb4 ~ f4 ~",
  P: "[f4 gb4 ~ ab4@5 ~@2 gb4 ~ gb4 ~ gb4 f4@6 ~@5 eb4 ~ eb4 ~ eb4 db4@3 ~@14]/3",
  Q: "[f4 ~ gb4 ab4@5 ~@2 db4 ~ db4@2 eb4 f4@6 ~@5 eb4@2 ~ eb4 ~@2]/2", R: "db4@3 ~@5",
  S: "[f4 gb4 ~ ab4@6 ~ bb4 ~ bb4@2 gb4 ab4@3 bb4@5 ~@3 gb4 ~ gb4@2 ab4@2]/2", T: "~@2 eb4@3 ~ db4@8 ~@2",
  U: "~@4 ab4 ~ ab4 ~ ab4@3 gb4 ~@2 gb4 ~", V: "gb4@2 ~ gb4@3 bb4 ~ ab4@6 ~@2",
  W: "~@2 eb4@2 ~ eb4 ~@2 eb4@2 ~ bb4@2 ~ bb4 ~", X: "bb4@2 ~ ab4@2 ~ f4 ~ ab4@3 ~ bb4@3 ~",
  Y: "[f4@2 gb4 ab4@4 ~@3 db4 ~ db4@2 eb4 f4@2 ~ f4@7 ~ f4@3 db4@2 ~]/2", Z: "~@4 ab4 ~ ab4 ab4@4 ~ gb4 ~ f4 ~",
  AA: "f4@2 gb4 ab4@6 ~ bb4@2 ~ ab4@2 ~", AB: "ab4@2 ~ gb4 f4@5 ~ f4 ~ gb4@2 ab4 ~", AC: "f4@2 ~ eb4 db4@6 ~@6",
  AD: "~@6 ab4 ~ ab4!2 ~@2 gb4@2 f4 ~", AE: "f4@3 eb4 db4@8 ~@4", AF: "~@4 ab4 ~ ab4 ~ ab4@3 gb4@2 ~ f4 ~",
  AG: "f4@2 ~ f4@3 bb4@2 ab4@7 ~", AH: "~@2 eb4@2 ~ eb4@2 ~ eb4@2 ~ eb4@3 bb4 ~",
  AI: "bb4@2 ~ ab4@3 f4@2 ab4@4 bb4@3 ~", AJ: "[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
)