Strudelify
Mademoiselle Ninette cover art

Soul Masters: Coconuts From Congoville

Mademoiselle Ninette

Soulful Dynamics

KeyC majorTempo130 bpm
0:00/0:00
// Mademoiselle Ninette — Soulful Dynamics
// 130 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 "DISTORTION" distortion guitar (copy of ch 3 "MUTED GTR" electric guitar muted)
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B A B C@2 D@2 E@2 C E C@2 D@2 E@2 C@3 D E C E@2 C D E C E@2 C@2 D@2 E@2 C E C@2 D@2 E@2 C E C@2 D@2 E@2 C@3 D E C
  E@2 C D E C E@2 C D E C E@2 C F
>`.pickRestart({
  A: "f1 ~@2 f1 a#1 ~@2 c2", B: "~@2 c2@2 ~@2 c2@2 a#1 ~ a#1@2 c2@2 ~@2", C: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~",
  D: "a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~", E: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  F: "a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~@3",
})).s("gm_electric_bass_finger").gain(0.47)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@3 A B C D E F G H I B C D E F G J@2 B D F B F@2 B D F B F@2 B C D E F G H I B C D E F G H I B C D E F G J@2 B D F B
  F@2 B D F B F@2 B D F B F@2 B K
>`.pickRestart({
  A: "~@7 [d2,b2]", B: "[f2,c3] ~ [f2,c3] ~ [f2,d3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [e2,b2]@2",
  C: "[f2,c3] ~ [f2,c3] ~ [f2,d3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3]@2 [f2,d3] ~ [a2,e3]@2", // F5 Dm F5 Dm A5
  D: "[a#2,f3] ~ [a#2,f3] ~ [a#2,g3]@2 [a#2,f3] ~ [a#2,f3] ~ [a#2,f3] ~ [a#2,g3] ~ [a2,e3]@2", // A#5 D# A#5 D# A5
  E: "[a#2,f3] ~ [a#2,f3] ~ [a#2,g3]@2 [a#2,f3] ~ [a#2,f3] ~ [a#2,f3] ~ [a#2,g3] ~ [b2,f#3]@2", // A#5 D# A#5 D# B5
  F: "[c3,g3] ~ [c3,g3] ~ [c3,a3]@2 [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,a3] ~ [b2,f#3]@2", // C5 F C5 F B5
  G: "[c3,g3] ~ [c3,g3] ~ [c3,a3]@2 [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,a3] ~ [e2,b2]@2", // C5 F C5 F E5
  H: "[f2,c3] ~ [f2,c3] ~ [f2,d3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,d3] ~ [b2,f#3]@2", // F5 Dm F5 Dm B5
  I: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [e2,b2]@2", // C5 E5
  J: "[f2,c3] ~ [f2,c3] ~ [f2,d3]@2 [f2,c3] ~ [f2,c3] ~ [f2,c3] ~ [f2,d3] ~ [e2,b2]@2", // F5 Dm F5 Dm E5
  K: "[a#2,f3] ~ [a#2,f3] ~ [a#2,g3]@2 [a#2,f3] ~ [a#2,f3] ~ [a#2,f3] ~ [a#2,g3] ~@3", // A#5 D# A#5 D#
})).s("gm_electric_guitar_muted").gain(0.38).pan(0.6)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  A B C B D E F G H I E J D E F G H I E@2 D F H D H@2 D F H D H@2 D E F G H I E J D E F G H I E J D E F G H I E@2 D F H
  D H@2 D F H D H@2 D F H D H@2 D K
>`.pickRestart({
  A: "[a3,c4,d#4,f4,a#4,d#5,d#6] ~@5 [a3,c4,f4] ~ [d4,f4,a#4] ~@5 [e4,g4,c5] ~", // F7 F A# C
  B: "~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~ [d4,f4,a#4] ~ [d4,f4,a#4] ~ [e4,g4,c5] ~@3", // C A# C
  C: "[a3,c4,f4] ~@5 [a3,c4,f4] ~ [d4,f4,a#4] ~@5 [e4,g4,c5] ~", // F A# C
  D: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // F Am F
  E: "[a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~", // F
  F: "[d4,f4,a#4] ~ [d4,f4,a#4] ~ [d4,f4,a#4] ~ f4 ~@3 [d4,f4,a#4] ~@3 [d4,f4,a#4] ~", // A#
  G: "[d4,f4,a#4] ~ [d4,f4,a#4] ~ [d4,f4,a#4] ~ [d4,f4,a#4] ~@3 [d4,f4,a#4] ~@3 [d4,f4,a#4] ~", // A#
  H: "[e4,g4,c5] ~ g4 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  I: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  J: "c5 ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  K: "[d4,f4,a#4] ~ [d4,f4,a#4] ~ [d4,f4,a#4] ~ f4 ~@3 [d4,f4,a#4] ~@5", // A#
})).s("gm_percussive_organ").gain(0.17).pan(0.7)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@10 A B ~@6 A@2 ~@4 C@2 ~@4 C@2 D E F G H I A J ~@6 A B ~@6 A@2 ~@4 C@2 ~@4 C@2 ~@4 C@2 ~@2
>`.pickRestart({
  A: "f5 c5 a4 c5 f5 c5 a4 c5", B: "e5@2 c5@2 g4@2 c5@2 e5@2 c5@2 g4@2 c5 ~", C: "e5 c5 g4 c5 e5 c5 g4 c5",
  D: "f5 ~@3 c5@2 ~@2 a4@2 ~@2 c5@2 ~@2", E: "f5 ~ g5 ~@3 a5 ~@3 a#5@2 a5 ~ g5@2",
  F: "f5@2 ~@2 d5 ~@3 a#4@2 ~@2 d5@2 ~@2", G: "f5 ~ g5 ~@3 a5 ~ a#5 ~ a5@2 g5@2 f5@2", H: "g5 ~@3 e5 ~@3 c5 ~@3 e5 ~@3",
  I: "g5@2 a5 ~@3 a#5 ~@3 a5@2 g5@2 f5 ~", J: "e5@2 c5@2 g4 ~ c5 ~ e5@2 c5@2 g4@2 c5 ~",
})).s("gm_drawbar_organ").gain(0.37).pan(0.6)

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

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

// drums · hihat
const hihat = s("hh").struct("<A@3 B A@7 ~ A@7 ~ A@5 ~ A@5 ~ A@7 ~ A@7 ~ A@7 ~ A@5 ~ A@5 ~ A@5 ~ A C>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x!2 ~ x ~", C: "~ x ~ x ~ x ~@2",
})).gain(0.32)

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

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

stack(bass, electric_guitar_muted, percussive_organ, drawbar_organ, kick, snare, hihat, open_hat, crash)