0:00/0:00
// Banks of the Ohio — Olivia Newton-John
// 154 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(154/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.
// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
~@53 A@2 B@4 A@4 C@2 A B A@4 B@4 A@4 C@2 A B A@4 B@4 A@4 C@2 A B A C A B A D ~
>`.pickRestart({
A: "[d3,d4] ~@2 [d3,d4]!2 ~@2 [d3,d4]!2 ~@2 [d3,d4]!2 ~@2 [d3,d4]", // D
B: "[a2,a3] ~@2 [a2,a3]!2 ~@2 [a2,a3]!2 ~@2 [a2,a3]!2 ~@2 [a2,a3]", // A
C: "[g2,g3] ~@2 [g2,g3]!2 ~@2 [g2,g3]!2 ~@2 [g2,g3]!2 ~@2 [g2,g3]", D: "[d3,d4] ~@15",
})).s("gm_pizzicato_strings").gain(0.12).pan(0.3)
// other · string ensemble 2 · "STRINGS"
const string_ensemble_2 = note(`<
~@37 A@2 B@4 C@4 D@2 E F G@4 H@4 I@4 J@2 E K C@4 L@4 G@4 M@2 N K G@4 L@4 O@4 P@2 N Q R S R T U@2 ~
>`.pickRestart({
A: "d2/2", B: "a2/4", C: "[d2@63 ~]/4", D: "[g2@31 ~]/2", E: "d2@15 ~", F: "a2@15 ~", G: "[d2@61 ~@3]/4",
H: "[a2@57 ~@7]/4", I: "[d2@29 ~@3]/4", J: "[g2@25 ~@7]/2", K: "a2@13 ~@3", L: "[a2@59 ~@5]/4", M: "[g2@7 ~]/2",
N: "d2@3 ~", O: "[d2@31 ~]/4", P: "[g2@15 ~]/2", Q: "a2", R: "d2@13 ~@3", S: "g2@3 ~", T: "a2@3 ~",
U: "[d2@21 ~@11]/2",
})).s("gm_string_ensemble_2").gain(0.36).pan(0.7)
// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
~@2 A@5 B@4 C@4 D@2 E F G@8 C@4 D@2 E F C@4 H@4 I@4 D@2 E F C@4 H@4 C@4 D@2 J F K@4 H@4 C@4 D@2 E L C@4 M@4 C@4 D@2 E
F N O N P E Q ~
>`.pickRestart({
A: "[[a3,d4,f#4]@79 ~]/5", B: "[a3,c#4,g4]/4", C: "[[a3,d4,f#4]@63 ~]/4", D: "[[b3,d4,g4]@31 ~]/2",
E: "[a3,d4,f#4]@15 ~", F: "[a3,c#4,g4]@15 ~", G: "[f#4@32 [c#4,g4]@31 ~, a3@127 ~, d4@61 ~@67]/8",
H: "[[a3,c#4,g4]@31 ~]/4", I: "[a3,d4,f#4]/4", J: "[a3,d4,f#4]@7 ~", K: "[[a3,d4,f#4]@31 ~]/4", L: "[a3,c#4,g4]@7 ~",
M: "[[a3,c#4,g4]@63 ~]/4", N: "[a3,d4,f#4]", O: "[b3,d4,g4]@15 ~", P: "[a3,c#4,e4]@15 ~", Q: "[a3,d4,f#4] ~@7",
})).s("gm_string_ensemble_1").gain(0.24)
// chords · piano · "A.PIANO"
const piano = note(`<
A ~@52 B@2 C@4 D@4 E@2 F G H@4 I@4 J@4 K@2 L G M@2 N@2 O@4 P@4 E@2 Q R S@2 Q G T@2 ~
>`.pickRestart({
A: "c#-1", B: "[[a4,d5]@31 ~]/2", C: "[[a4,e5]@31 ~]/4", D: "[[a4,d5]@61 ~@3]/4", E: "[[b4,d5,g5]@15 ~]/2",
F: "[a4,d5,f#5]@15 ~", G: "[a4,c#5,e5]@15 ~", H: "[[a4,d5]@15 ~]/2", I: "[[a4,c#5,e5]@31 ~]/4",
J: "[[a4,d5,f#5]@61 ~@3]/4", K: "[~@4 g5@25 ~@3, [b4,d5]@15 ~]/2", L: "[a4,d5]@7 ~", M: "[[a4,d5]@29 ~@3]/2",
N: "[[a4,d5,f#5]@15 ~]/2", O: "[[a4,c#5,e5]@63 ~]/4", P: "[[a4,d5,f#5]@31 ~]/4", Q: "[a4,d5,f#5]@7 ~",
R: "[a4,c#5,e5]@7 ~", S: "[[a4,d5]@8 [b4,g5]@7 ~, f#5@9 ~@7, ~@4 [c5,d5] ~@3]/2", T: "[[a4,d5]@23 ~@9]/2",
})).s("gm_piano").gain(0.28).pan(0.2)
// bass · electric guitar jazz · "BASS GTR"
const bass = note(`<
~@37 A B C D@2 E A@3 F G@2 B H I J A@2 K L C M A@2 N F O G A H B P A@2 L Q C Q R A S T G U A H A V A@2 C D C W A N@2 F
U X A Y Z U B H AA AB ~
>`.pickRestart({
A: "d2@5 ~@3 a1@5 ~@3", B: "d2@6 ~@2 a1@5 ~@3", C: "a1@5 ~@3 e2@6 ~@2", D: "a1@5 ~@3 e2@5 ~@3",
E: "a1@5 ~@3 [a1,b1]@3 ~ c#2@3 ~", F: "d2 ~ d2@2 e2@2 f#2@2", G: "g2@5 ~@3 d2@5 ~@3", H: "e2@5 ~@3 a1@5 ~@3",
I: "d2@3 ~ a1@3 ~", J: "d2@6 ~@2 a1@2 ~@2 a1@3 ~", K: "[a1,e2]@6 ~@2 e2@5 ~@3", L: "a1@6 ~@2 e2@5 ~@3",
M: "a1 ~ a1@2 b1@2 c#2@2", N: "d2@5 ~@3 a1@6 ~@2", O: "g2@5 ~@3 d2@6 ~@2", P: "d2@3 ~ a1 ~ a1@2", Q: "a1@3 ~ e2@3 ~",
R: "d2@5 ~@3 a1@7 ~", S: "d2@3 ~ a1@4", T: "d2 ~@3 d2@4 e2@4 f#2@4", U: "g2@6 ~@2 d2@5 ~@3",
V: "d2@5 ~@3 a1@2 ~@2 a1@4", W: "a1@3 ~ a1@4 b1@4 c#2@4", X: "g2@5 ~@3 d2@4 ~@4", Y: "e2@6 ~@2 a1@5 ~@3",
Z: "d2@3 ~ e2@2 f#2@2", AA: "d2@4 a1@3 ~", AB: "d2@11 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.5)
// drums · kick
const kick = s("bd").struct("<~@2 [x!2]!102 x ~>").gain(0.45)
// drums · clap
const clap = s("cp").struct("<~@37 [~ x ~ x]!67 ~@2>").gain(0.35)
// drums · snare
const snare = s("sd").struct("<~@52 A B@15 C B@15 C B@18 D ~@2>".pickRestart({
A: "~@5 x!2 ~", B: "~ x ~ x", C: "~ x!2 ~ x ~ x ~", D: "~@2 x ~@2 x!2 ~",
})).gain(0.4)
// drums · hihat
const hihat = s("hh").struct("<~@2 [~ x ~ x]!19 [x!2 ~ x] [~ x ~ x]!14 [~ x!3] [x!4]!67 x ~>").gain(0.4)
// drums · crash
const crash = s("cr").struct("<~@37 A ~@15 A ~@15 A ~@15 A ~@18 A ~>".pickRestart({
A: "x",
})).gain(0.3)
stack(pizzicato_strings, string_ensemble_2, string_ensemble_1, piano, bass, kick, clap, snare, hihat, crash)
More by Olivia Newton-John
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.