0:00/0:00
// So Here I Am — UB40
// 93 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(93/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
~ A@2 B C@6 D E C E C E C E C F G F H F G F I@2 B C@6 D E C E C E C E C F G F H F G F I@2 J K L M@2 N O@2 J@2 P Q@2 R
S@2 F G F H F G F G F H F G F G F H F G ~
>`.pickRestart({
A: "[f3@7 ~ eb3 ~ eb3@3 ~ f3@16 ~@2]/2", B: "~@2 f3 ~ f3!4 eb3!4 c3@2 f3@2", C: "~@2 f2@2 f3!4 eb3!4 c3@2 f3@2",
D: "~@2 f2@2 f3!4 eb3!4 c3@2 f2@2", E: "~@2 f2@2 bb2!4 ab2!4 ab2@2 bb2@2", F: "~@4 ab2@2 c3@2 eb3 ~ eb3 ~@5",
G: "~@4 ab2@2 c3@2 eb3 ~ eb3 ~ bb2@4", H: "~@4 ab2@2 c3@2 eb3@2 bb3 ~ bb3@4", I: "[eb3@6 f3@25 ~]/2",
J: "~@2 ab2@2 ab3!6 ~ ab3 eb3 ~ ab2@2", K: "~@2 ab2 ~ ab3!6 ~ ab3 eb3 ~ ab2@2",
L: "~@2 db3@2 db4!6 ~ db4 ab3 ~ db3@2", M: "~@2 bb2@2 bb3!6 ~ bb3 f3 ~ bb2@2", N: "~@2 bb2@2 bb3!6 ~ bb3 f3 ~ bb2 ~",
O: "[f3@7 ~ eb3 ~ eb3@4 f3@16 ~@2]/2", P: "~@2 db3@2 db4!6 ~ db4 ab3@2 db3@2", Q: "~@2 bb2@2 bb3!6 ~ bb3 f3@2 bb2@2",
R: "~@2 bb2@2 bb3!6 ~ bb3 f3@2 bb2 ~", S: "[f3@6 ~@2 eb3 ~ eb3@4 f3@17 ~, ~@14 e3 ~@17]/2",
})).s("gm_acoustic_bass").gain(0.56)
// chords · piano · "A.PIANO 1"
const piano = note(`<
~@3 A@8 B A B A B A B A C@7 D E A@8 B A B A B A B A C@7 D E F@2 G H I@2 ~@2 F@2 G H I J ~@2 C@18 ~
>`.pickRestart({
A: "~@2 [f5,ab5,c6] ~@3 [f5,ab5,c6] ~@3 [f5,ab5,c6] ~@3 [f5,ab5,c6] ~", // Fm
B: "~@2 [f5,bb5,db6] ~@3 [f5,bb5,db6] ~@3 [f5,bb5,db6] ~@3 [f5,bb5,db6] ~", // Bbm
C: "~@2 [ab5,c6,eb6] ~@3 [ab5,c6,eb6] ~@3 [g5,bb5,eb6] ~@3 [g5,bb5,eb6] ~", // Ab Eb
D: "~@2 [g5,bb5,eb6] ~@3 [ab5,c6,f6] ~@3 [ab5,c6,f6] ~@3 [ab5,c6,f6] ~", // Eb Fm
E: "~@2 [ab5,c6,f6] ~@3 [ab5,c6,f6] ~@3 [ab5,c6,f6] ~@3 [ab5,c6,f6] ~", // Fm
F: "~@2 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~", // Ab
G: "~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~", // Db
H: "~@2 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~", // Bbm
I: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // Bb
J: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,db5,d5] ~", // Bb
})).s("gm_piano").gain(0.52)
// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
~@3 A@8 B A B A B A B A C@2 D@3 E F G A@9 B A B A B A B A C@2 D@3 E F G A H@2 I J K L ~@2 H@2 I J L@2 ~@2 C@2 D@3 E
C@2 D@3 E C@2 D@3 E ~
>`.pickRestart({
A: "~@2 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~", // Fm
B: "~@2 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~@3 [bb3,db4,f4] ~", // Bbm
C: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~", // Ab Eb
D: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [bb3,eb4,gb4,g4] ~@3 [bb3,eb4,g4] ~", // Ab Eb
E: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [bb3,eb4,gb4,g4] ~@3 [bb3,eb4,gb4,g4] ~", // Ab Eb
F: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,gb4,g4] ~", // Ab Eb
G: "~@2 [bb3,eb4,g4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~@3 [ab3,c4,f4] ~", // Eb Fm
H: "~@2 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~", // Ab
I: "~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~", // Db
J: "~@2 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~@3 [f4,bb4,db5] ~", // Bbm
K: "~@2 [f4,bb4,db5,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // Bb
L: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~", // Bb
})).s("gm_electric_guitar_muted").gain(0.44)
// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@52 A B A C D E F ~ G H I J D E K ~@21>".pickRestart({
A: "~@4 bb4@2 c5@2 f5@3 eb5@3 c5@2", B: "bb4@4 ab4 ~ ab4@10", C: "bb4@4 c5@2 bb4@9 ~", D: "~@8 c5@2 ~ c5@2 ~ c5 ~",
E: "c5@3 bb4@3 f4@2", F: "~@4 bb4 ab4 f4 ~", G: "~@6 eb5 f5 ab5@2 ~ ab5@2 ~ ab5 ~", H: "ab5@6 f5 eb5 f5 ab5@7",
I: "~@6 c5 eb5 f5@2 ~ eb5@3 c5@2", J: "bb4@3 c5 ab4@4", K: "~@8 bb4@3 ab4@3 f4@2",
})).s("gm_acoustic_guitar_steel").gain(0.72)
// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@70 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~>".pickRestart({
A: "~@8 [eb4,g4,bb4]@4 [db4,f4,ab4]@3 ~", // Eb Db
})).s("gm_string_ensemble_2").gain(0.5)
// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@53 A@6 ~@2 A@6 ~@21>".pickRestart({
A: "[eb4@32 ~@31 d5@32 ~, ab4@47 bb4@49, c5@31 ~ f4@64, ~ db5 ~]/6",
})).s("gm_string_ensemble_2").gain(0.21)
// chords · brass section · "BRASS 1"
const brass_section = note(`<
~ A@2 ~@8 B C ~@2 D E ~@2 F ~ G ~ G ~ G H@2 ~@8 B C ~@2 D E ~@2 F ~ G ~ G ~ G I@2 ~@6 J@2 ~@6 J@2 F ~ G ~ G ~ F ~ G ~
G ~ F ~ G ~ G ~@2
>`.pickRestart({
A: "[[c4,f4,ab4,c5,f5]@7 ~ [bb3,eb4,g4,bb4,eb5] ~ [bb3,eb4,g4,bb4,eb5]@4 [c4,f4,ab4,c5,f5,c6]@17 ~]/2", // Fm Eb Fm
B: "[db4,f4,bb4,db5]", C: "[c4,f4,ab4,c5]@3 ~", D: "[db4,f4,bb4,db5]@15 ~", E: "[c4,f4,ab4,c5]@5 ~@3",
F: "~@4 c5@2 [ab4,db5]@2 eb5@2 [bb4,eb5] ~@5, ~@4 ab4 ~@3 bb4 ~@7", // Db5 Eb5
G: "~@4 c5@2 [ab4,db5]@2 [bb4,eb5]@2 [bb4,eb5] ~@5, ~@4 ab4 ~@11", H: "[[bb3,eb4,bb4,eb5]@3 [f3,c4,c5,f5]@13]/2",
I: "[[bb3,eb4,bb4,eb5]@6 ~@10 c6@15 ~, ~@3 [f3,c4,c5,f5]@13]/2", // Eb5 F5
J: "[[c4,f4,ab4,c5,f5]@7 ~ [bb3,eb4,g4,bb4,eb5] ~ [bb3,eb4,g4,bb4,eb5]@4 [c4,f4,ab4,c5,f5]@18]/2", // Fm Eb Fm
})).s("gm_brass_section").gain(0.55)
// drums · kick
const kick = s("bd").struct("<A B C D@56 E F D@6 E F D@18 ~>".pickRestart({
A: "~@7 x!2 ~@7", B: "x ~@6 x!2 ~ x ~@3 x ~", C: "~@7 x!2 ~ x ~ x ~ x ~", D: "x ~@2 x!2 ~@2 x", E: "x ~@3 x!2 ~ x",
F: "~@7 x!2 ~ x!2 ~@4",
})).gain(0.64)
// drums · rim
const rim = s("rim").struct("<~@19 [~ x ~@2]!7 ~@18 [~ x ~@2]!7 ~@18 [~ x ~@2]!18 ~>").gain(0.56)
// drums · snare
const snare = s("sd").struct("<A B C B@57 D B@7 D B@18 ~>".pickRestart({
A: "~@9 x!7", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@6 x!2 ~@3",
})).gain(0.72)
// drums · clap
const clap = s("cp").struct("<~@19 [~ x ~@2]!7 ~@18 [~ x ~@2]!7 ~@18 [~ x ~@2]!18 ~>").gain(0.72)
// drums · hihat
const hihat = s("hh").struct("<~@3 [x!8]!56 ~@2 [x!8]!6 ~@2 [x!8]!18 ~>").gain(0.72)
// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
~@3
[~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!56
~@2
[~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!6
~@2
[~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!17
[~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2]
~
>`).gain(0.48)
// drums · ride
const ride = s("rd").struct("<~ A B ~@56 A B ~@6 A B ~@19>".pickRestart({
A: "x ~@3 x!2 ~ x", B: "~@2 x ~@4 x!2 ~ x ~ x ~ x ~",
})).gain(0.64)
// drums · ht
const ht = s("ht").struct("<~@2 [~@12 x!2 ~@2] ~@24 [~@12 x!2 ~@2] ~@60>").gain(0.56)
stack(
bass, piano, electric_guitar_muted, acoustic_guitar_steel, string_ensemble_2, string_ensemble_2_soft, brass_section,
kick, rim, snare, clap, hihat, hihat_soft, ride, ht
)
More by UB40
Red Red Wine1984 · D♭ major · 92 bpmThe Way You Do The Things You Do1990 · A♭ major · 159 bpm(I Can't Help) Falling In Love With YouC major · 88 bpmHigher GroundD major · 101 bpmKingston TownA♭ major · 102 bpmHomely GirlG major · 82 bpmI'll Be Your Baby TonightD major · 88 bpmGroovin'A♭ major · 99 bpm
Not in the database
That song isn't here.
Nothing in the database matches this link. It may have been renamed, or the address was mistyped. The closest songs to :
Real transcriptions · Editable patterns · Instrumental
Type a song.
Get Strudel code.
Chords, structure, melody, bass and drums compiled from open transcriptions into Strudel live-coding patterns. Play it here, scrub through the bars, then open it in strudel.cc and start hacking.
Smells Like Teen SpiritNirvana
The JokerSteve Miller Band · 1973
Love Me DoThe Beatles · 1964
I Don't MindJames Brown · 1961
- Real transcriptionsMcGill chord charts, Lakh MIDI and quality-filtered PDMX scores. The library includes alternate transcriptions of some songs.
- One bar, one cycleEvery layer follows the same bar timeline, keeping the code, playback and song structure aligned.
- Instrumental by designDetected vocal parts are removed. Guitar riffs, harmonica and other instrumental leads stay.