Harmony
Harmony is what happens when multiple notes sound together. It’s what makes music feel happy, sad, tense, or resolved. This guide teaches harmony through Strudel’s powerful chord and voicing system, with a focus on jazz harmony—the richest harmonic tradition in Western music.
What is Harmony?
When you play a single note, that’s melody. When you play multiple notes at the same time, that’s harmony:
A single note (melody):
note("c4").room(.5)Multiple notes together (harmony):
note("<[c3,e3,g3]>").room(.5)The second example plays three notes at once—this is called a chord. Chords are the building blocks of harmony.
Your First Chord
Writing [c3,e3,g3] every time is tedious. Strudel has a shortcut—the chord() function combined with voicing():
chord("C").voicing().room(.5)That’s it! chord("C") specifies a C major chord, and voicing() turns it into actual notes.
Multiple chords in sequence:
chord("<C Am F G>").voicing().room(.5)This plays four chords, one after another. The < > brackets create a sequence that cycles through.
Major vs Minor: The Two Flavors
Every chord has a quality—major or minor. This is the most important distinction in harmony:
- Major = bright, happy, resolved
- Minor = dark, sad, mysterious
Major chord:
chord("C").voicing().room(.5)Minor chord:
chord("Cm").voicing().room(.5)Side by side:
chord("<C Cm C Cm>").voicing().room(.5)Notation: C = C major, Cm = C minor. You can also write C- for minor.
Pop & Rock Progressions
Before diving into jazz, let’s explore the chord progressions that power most popular music. These use simple major and minor chords—no fancy extensions needed.
Understanding Roman Numerals
Musicians use Roman numerals to describe chord progressions. Each number represents a chord built on that note of the scale:
In the key of C major, the scale is: C - D - E - F - G - A - B
| Number | Note | Chord | Type |
|---|---|---|---|
| I | C | C | Major |
| ii | D | Dm | minor |
| iii | E | Em | minor |
| IV | F | F | Major |
| V | G | G | Major |
| vi | A | Am | minor |
| vii° | B | Bdim | diminished |
Uppercase = Major, lowercase = minor
This system lets you play the same progression in any key. “I-V-vi-IV” in C is C-G-Am-F, but in G it’s G-D-Em-C.
The I-V-vi-IV: The Most Popular Progression
This four-chord progression appears in hundreds of hit songs:
I-V-vi-IV in C = C - G - Am - F
chord("<C G Am F>").voicing().room(.5)Songs using I-V-vi-IV:
- “Let It Be” — The Beatles
- “No Woman No Cry” — Bob Marley
- “With or Without You” — U2
- “Someone Like You” — Adele
- “Demons” — Imagine Dragons
Try it in different keys:
In G:
chord("<G D Em C>").voicing().room(.5)In D:
chord("<D A Bm G>").voicing().room(.5)The I-vi-IV-V: The 50s Progression
This “doo-wop” progression defined 1950s rock and roll:
chord("<C Am F G>").voicing().room(.5)Songs using I-vi-IV-V:
- “Stand By Me” — Ben E. King
- “Every Breath You Take” — The Police
- “Earth Angel” — The Penguins
The vi-IV-I-V: The Emotional Minor Start
Starting on the minor chord creates a more emotional, melancholic feel:
chord("<Am F C G>").voicing().room(.5)Songs using vi-IV-I-V:
- “Despacito” — Luis Fonsi
- “Africa” — Toto
- “Grenade” — Bruno Mars
The I-IV: The Two-Chord Wonder
Sometimes two chords are all you need:
chord("<C F C F>").voicing().room(.5)Songs using mostly I-IV:
- “Achy Breaky Heart” — Billy Ray Cyrus
- “Jamming” — Bob Marley
- Many folk and country songs
Adding Bass to Pop Progressions
Make your progressions fuller by adding a bass line with rootNotes():
chord("<C G Am F>").layer(
x => x.voicing(),
x => x.rootNotes(2).note().s('sawtooth').lpf(600)
).room(.5)With a simple drum beat:
stack(
chord("<C G Am F>").voicing().gain(0.6),
chord("<C G Am F>").rootNotes(2).note().s('sawtooth').lpf(600),
sound("bd bd bd bd"),
sound("~ sd ~ sd")
).room(.4).cpm(30)Power Chords: Rock Guitar Sound
In rock music, “power chords” use just the root and fifth—no third. This creates an ambiguous sound that works with distortion:
chord("<C5 G5 A5 F5>").voicing()
.s('sawtooth')
.distort(2)
.lpf(1500)
.room(.3)Classic rock riff:
stack(
chord("<E5 E5 A5 E5 E5 B5 A5 E5>").voicing()
.s('sawtooth')
.distort(2.5)
.lpf(1200)
.gain(0.6),
sound("bd ~ bd ~ bd ~ bd bd"),
sound("~ ~ sd ~ ~ ~ sd ~")
).room(.3).cpm(35)Strumming Patterns
Add rhythm to your chords with .struct():
Basic strum (all beats):
chord("<C G Am F>").voicing()
.struct("x x x x")
.room(.5)Down-up strum pattern:
chord("<C G Am F>").voicing()
.struct("x ~ [x x] ~")
.room(.5)Syncopated rhythm:
chord("<C G Am F>").voicing()
.struct("x ~ x ~ ~ x ~ x")
.room(.5)Complete Pop Song Structure
Here’s a full pop arrangement with drums, bass, and chords:
stack(
// Chords
chord("<C G Am F>").voicing()
.struct("[~ x] [~ x]")
.gain(0.5),
// Bass
chord("<C G Am F>").rootNotes(2).note()
.s('sawtooth')
.lpf(500)
.gain(0.6),
// Drums
sound("bd ~ bd ~"),
sound("~ sd ~ sd"),
sound("hh*8").gain(0.4)
).room(.4).cpm(30)Acoustic Ballad Style
Softer, arpeggiated chords for ballads:
n("0 1 2 1 0 1 2 1").chord("<C G Am F>").voicing()
.room(.5)
.cpm(25)With bass:
stack(
n("0 1 2 1 0 1 2 1").chord("<C G Am F>").voicing().gain(0.5),
chord("<C G Am F>").rootNotes(2).note().s('sawtooth').lpf(400)
).room(.5).cpm(25)Minor Key Pop
Many modern pop songs use minor keys for emotional depth:
Am-Em-F-G (minor progression):
chord("<Am Em F G>").voicing().room(.5)Cm-Ab-Eb-Bb (darker feel):
chord("<Cm Ab Eb Bb>").voicing().room(.5)With full arrangement:
stack(
chord("<Am Em F G>").voicing().struct("[~ x] [~ x]").gain(0.5),
chord("<Am Em F G>").rootNotes(2).note().s('sawtooth').lpf(500),
sound("bd ~ bd ~"),
sound("~ sd ~ sd"),
sound("hh").euclid(8,8).gain(0.3)
).room(.4).cpm(28)Country & Folk Progressions
Country music often uses the I-IV-V progression:
chord("<G G C D>").voicing().room(.5)Country train beat:
stack(
chord("<G G C D>").voicing().struct("x ~ x ~").gain(0.5),
note("<g2 g2 c2 d2>").s('sawtooth').lpf(500),
sound("bd ~ bd ~"),
sound("~ sd ~ sd"),
sound("hh").euclid(8,8).gain(0.4)
).room(.4).cpm(35)Reggae: Offbeat Chords
Reggae emphasizes the offbeats (the “and” of each beat):
chord("<C G Am F>").voicing()
.struct("~ x ~ x ~ x ~ x")
.room(.5)
.cpm(22)With reggae drums:
stack(
chord("<C G Am F>").voicing().struct("~ x ~ x ~ x ~ x").gain(0.5),
chord("<C G Am F>").rootNotes(2).note().s('sawtooth').lpf(500),
sound("bd ~ ~ bd ~ ~ bd ~"),
sound("~ ~ ~ ~ sd ~ ~ ~").gain(0.8),
sound("hh").euclid(8,8).gain(0.3)
).room(.4).cpm(22)Moving to Jazz: Adding the Seventh
Now that you’re comfortable with basic progressions, let’s add more color. Jazz adds a seventh note to chords for richness.
Seventh Chords: The Jazz Sound
Jazz rarely uses plain major/minor chords. It adds a seventh note for richness:
Plain C major (3 notes):
chord("C").voicing().room(.5)C major seventh (4 notes):
chord("C^7").voicing().room(.5)The seventh adds sophistication. There are three main types of seventh chords:
Major 7th (^7)
Smooth, dreamy, resolved. Used on the “home” chord in jazz.
chord("C^7").voicing().room(.5)Minor 7th (m7 or -7)
Mellow, relaxed. Very common in jazz.
chord("Cm7").voicing().room(.5)Dominant 7th (7)
Bluesy, tense, wants to resolve. The engine of jazz harmony.
chord("C7").voicing().room(.5)Compare all three:
chord("<C^7 Cm7 C7>").voicing().room(.5)The ii-V-I Progression: Jazz Foundation
The ii-V-I (two-five-one) is the most important progression in jazz. Nearly every jazz standard contains it:
- ii = minor 7th chord built on the 2nd note of the scale
- V = dominant 7th chord built on the 5th note
- I = major 7th chord built on the 1st note (home)
In the key of C:
- ii = Dm7 (D minor 7)
- V = G7 (G dominant 7)
- I = C^7 (C major 7)
chord("<Dm7 G7 C^7 C^7>").voicing().room(.5)The ii-V creates tension that resolves to the I. This is the heart of jazz harmony.
Classic recordings featuring ii-V-I:
- “Autumn Leaves” — the entire song is built on ii-V-I progressions
- “All The Things You Are” — Jerome Kern’s standard
- “Satin Doll” — Duke Ellington
ii-V-I in Different Keys
The same pattern works in any key:
In F:
chord("<Gm7 C7 F^7 F^7>").voicing().room(.5)In Bb:
chord("<Cm7 F7 Bb^7 Bb^7>").voicing().room(.5)In G:
chord("<Am7 D7 G^7 G^7>").voicing().room(.5)Voicing Dictionaries: Different Styles
Strudel includes multiple voicing dictionaries—different ways to play the same chords. Use .dict() to select one:
Default (ireal)
Full, rich jazz voicings:
chord("<Dm7 G7 C^7 A7>").voicing().room(.5)Lefthand
Rootless voicings—what jazz pianists play with their left hand while soloing:
chord("<Dm7 G7 C^7 A7>").dict('lefthand').voicing().room(.5)Guide Tones
Just the 3rd and 7th—the essential notes that define each chord:
chord("<Dm7 G7 C^7 A7>").dict('guidetones').voicing().room(.5)Triads
Simple three-note chords—good for pop/rock:
chord("<Dm G C Am>").dict('triads').voicing().room(.5)Compare them all on the same progression:
chord("<Dm7 G7 C^7 A7>*4")
.dict("<ireal lefthand guidetones triads>")
.voicing().room(.5)Voice Leading with anchor() and mode()
Voice leading is the art of moving smoothly between chords. Good voice leading keeps notes close together rather than jumping around.
The anchor() Function
anchor() tells the voicing where to center. Voicings will cluster around this note:
Without anchor (might jump around):
chord("<C^7 F^7 Dm7 G7>").voicing().room(.5)With anchor at C5 (smooth):
chord("<C^7 F^7 Dm7 G7>").anchor("c5").voicing().room(.5)Higher anchor for brighter sound:
chord("<C^7 F^7 Dm7 G7>").anchor("g5").voicing().room(.5)Lower anchor for darker sound:
chord("<C^7 F^7 Dm7 G7>").anchor("g3").voicing().room(.5)The mode() Function
mode() controls whether voicings go above or below the anchor:
below(default) — top note at or below anchorabove— bottom note at or above anchorroot— root note in bass position
chord("C^7").mode("below").anchor("c5").voicing().room(.5)chord("C^7").mode("above").anchor("c4").voicing().room(.5)chord("C^7").mode("root").anchor("c3").voicing().room(.5)Adding Bass with rootNotes()
Jazz typically has a bass player playing the root notes. Use rootNotes() to extract bass notes from chords:
Just the bass notes:
chord("<C^7 A7 Dm7 G7>").rootNotes(2).note().room(.5)Combining Chords and Bass with layer()
The layer() function lets you create multiple parts from the same chord progression:
chord("<C^7 A7 Dm7 G7>").layer(
x => x.voicing().room(.5),
x => x.rootNotes(2).note().s('sawtooth').lpf(800)
)Piano comping with bass (jazz rhythm section):
chord("<Dm7 G7 C^7 A7>*2").layer(
x => x.struct("[~ x]*2").dict('lefthand').voicing(),
x => x.rootNotes(2).note().s('sawtooth').lpf(600)
).room(.5).cpm(32)The .struct("[~ x]*2") creates the classic jazz comping rhythm—playing on beats 2 and 4.
Walking Bass Lines
In jazz, the bass often “walks”—playing a note on every beat, moving stepwise between chord tones. You can create walking bass patterns:
Simple root motion:
chord("<C^7 A7 Dm7 G7>*2").layer(
x => x.struct("[~ x]*2").dict('lefthand').voicing(),
x => x.rootNotes(2).struct("x x x x").note().s('sawtooth').lpf(600)
).room(.5).cpm(32)With chromatic approach notes:
stack(
chord("<Dm7 G7 C^7 A7>").struct("[~ x]*2").dict('lefthand').voicing(),
note("d2 e2 f2 f#2 g2 a2 b2 bb2 c2 d2 e2 eb2 a2 b2 c3 c#3")
.s('sawtooth').lpf(600)
).room(.5).cpm(32)Jazz Blues: 12-Bar with 7ths
The jazz blues takes the standard 12-bar blues and enriches it with jazz harmony:
Basic Jazz Blues in F:
chord(`< F7 Bb7 F7 Cm7 F7 Bb7 Bo F7 Am7 D7 Gm7 C7 F7 D7 Gm7 C7 >`).voicing().room(.5).cpm(28)
Jazz Blues with Rhythm Section:
let chords = chord(`<
F7 Bb7 F7 [Cm7 F7]
Bb7 Bo F7 [Am7 D7]
Gm7 C7 [F7 D7] [Gm7 C7]
>`)
stack(
chords.struct("[~ x]*2").dict('lefthand').voicing(),
chords.rootNotes(2).note().s('sawtooth').lpf(600)
).room(.5).cpm(32)The Turnaround: I-vi-ii-V
The turnaround is a progression that leads back to the beginning. It’s used at the end of sections:
chord("<C^7 Am7 Dm7 G7>").voicing().room(.5)With tritone substitution (advanced):
chord("<C^7 Eb7 Dm7 Db7>").voicing().room(.5)Turnaround with rhythm section:
chord("<C^7 Am7 Dm7 G7>*2").layer(
x => x.struct("[~ x] [x ~]").voicing(),
x => x.rootNotes(2).note().s('sawtooth').lpf(600)
).room(.5).cpm(36)Extended Chords: 9ths, 11ths, 13ths
Jazz often uses extended chords that add more notes above the 7th:
9th Chords
Add color without changing the function:
chord("<Dm9 G9 C^9>").voicing().room(.5)Altered Dominants
For maximum tension, use altered chords (b9, #9, b13):
chord("<Dm7 G7b9 C^7>").voicing().room(.5)chord("<Dm7 G7#9 C^7>").voicing().room(.5)chord("<Dm7 G7alt C^7>").voicing().room(.5)Arpeggios: Chords as Melody
An arpeggio plays chord notes one at a time instead of together. Use n() with chord() to select individual notes:
Basic arpeggio:
n("0 1 2 3").chord("C^7").voicing().room(.5)Arpeggio pattern over chord changes:
n("0 1 2 3 2 1").chord("<C^7 Am7 Dm7 G7>").voicing().room(.5)Jazz arpeggio with rhythm:
n("0 [0,2] 1 [1,3]").chord("<Dm7 G7 C^7 A7>")
.voicing().fast(2).room(.5).cpm(30)The arp() Function
You can also use .arp() to create arpeggio patterns:
chord("<C^7 Am7 Dm7 G7>").voicing().arp("0 1 2 3").room(.5)chord("<C^7 Am7 Dm7 G7>").voicing().arp("0 2 1 3 2 0").room(.5)Beyond Jazz: Pop Progressions
Jazz harmony enriches other genres too. Here’s the famous I-V-vi-IV pop progression with jazz voicings:
Simple triads (pop style):
chord("<C G Am F>").dict('triads').voicing().room(.5)With 7ths (neo-soul style):
chord("<C^7 G7 Am7 F^7>").voicing().room(.5)Pop with bass:
chord("<C G Am F>").layer(
x => x.dict('triads').voicing(),
x => x.rootNotes(2).note().s('sawtooth').lpf(600)
).room(.5).cpm(30)Blues Harmony
Blues uses dominant 7th chords throughout, even where major or minor would normally go:
12-Bar Blues in E:
chord(`< E7 E7 E7 E7 A7 A7 E7 E7 B7 A7 E7 B7 >`).voicing().room(.5).cpm(25)
Shuffle Blues with Bass:
chord("<E7!4 A7!2 E7!2 B7 A7 E7 B7>").layer(
x => x.voicing().struct("x [~ x] x [~ x]"),
x => x.rootNotes(2).note().s('sawtooth').lpf(400)
).room(.5).cpm(28)Neo-Soul & R&B
Modern R&B uses rich extended chords and smooth voice leading:
chord("<C^9 Am9 Dm9 G7b13>")
.anchor("c5")
.voicing()
.s('sawtooth')
.lpf(1500)
.room(.4)
.cpm(24)Neo-soul with rhythm section:
chord("<C^9 Am9 Dm9 G7b13>*2").layer(
x => x.struct("[~ x]*2").voicing().s('sawtooth').lpf(1500),
x => x.rootNotes(2).note().s('sine').lpf(400)
).room(.4).cpm(24)Bossa Nova
Brazilian jazz features flowing rhythm and minor 7th cycles:
chord("<Am7 Am7 Dm7 E7>").layer(
x => x.struct("x ~ [x ~] ~ x ~ ~ ~").voicing(),
x => x.rootNotes(2).struct("x ~ ~ x ~ x ~ ~").note()
).room(.4).cpm(35)“Girl From Ipanema” style:
chord("<F^7 F^7 G7 G7 Gm7 Gb7 F^7 Gb7>").layer(
x => x.struct("x ~ [x ~] ~").voicing(),
x => x.rootNotes(2).note().s('sawtooth').lpf(600)
).room(.4).cpm(35)Modal Jazz
Modal jazz, pioneered by Miles Davis on “Kind of Blue”, uses fewer chord changes and focuses on scales/modes:
So What / Impressions style (Dm7 for 8 bars, Ebm7 for 8 bars):
chord("<Dm7!4 Ebm7!4>")
.dict('lefthand')
.voicing()
.struct("[~ x] [~ x]")
.room(.5)
.cpm(36)Quartal voicings (stacked 4ths, characteristic of modal jazz):
note("<[d3,g3,c4,f4] [d3,g3,c4,f4] [eb3,ab3,db4,gb4] [eb3,ab3,db4,gb4]>")
.struct("[~ x] [~ x]")
.room(.5)
.cpm(36)Complete Jazz Combo Examples
Swing Standard
stack(
// Piano comping
chord("<Dm7 G7 C^7 A7>*2")
.dict('lefthand')
.struct("[~ x] [x ~] [~ x] x")
.voicing()
.gain(0.6),
// Bass
chord("<Dm7 G7 C^7 A7>*2")
.rootNotes(2)
.note()
.s('sawtooth')
.lpf(600)
.gain(0.7),
// Drums
sound("hh").euclid(6, 8).gain(0.4),
sound("rim").euclidRot(2, 8, 4).gain(0.3)
).room(.3).cpm(40)Medium Swing Blues
let chords = chord(`<F7 Bb7 F7 [Cm7 F7] Bb7 Bo F7 [Am7 D7] Gm7 C7 [F7 D7] [Gm7 C7]>`)
stack(
chords.dict('lefthand').struct("[~ x]*2").voicing().gain(0.5),
chords.rootNotes(2).note().s('sawtooth').lpf(600).gain(0.6),
sound("hh").euclid(6, 8).gain(0.3),
sound("rim").euclidRot(3, 8, 4).gain(0.25)
).room(.3).cpm(36)Bossa Nova
stack(
chord("<Am7 Am7 Dm7 E7>*2")
.struct("x ~ [x ~] ~ x ~ ~ ~")
.voicing()
.gain(0.5),
chord("<Am7 Am7 Dm7 E7>*2")
.rootNotes(2)
.struct("x ~ ~ x ~ x ~ ~")
.note()
.s('sawtooth')
.lpf(600)
.gain(0.6),
sound("rim").euclid(5, 8).gain(0.3),
sound("hh").euclid(8, 8).gain(0.2)
).room(.4).cpm(35)Ballad
chord("<C^9 Am9 Dm9 G7b13>")
.layer(
x => x.voicing().s('supersaw').lpf(2000).attack(0.1).release(0.5).gain(0.3),
x => x.rootNotes(2).note().s('sine').lpf(300).gain(0.6)
)
.room(.5)
.slow(1.5)Uptempo Bebop
stack(
chord("<Dm7 G7 C^7 A7 Dm7 G7 Em7 A7>")
.dict('guidetones')
.struct("~ x ~ x")
.voicing()
.gain(0.5),
chord("<Dm7 G7 C^7 A7 Dm7 G7 Em7 A7>")
.rootNotes(2)
.note()
.s('sawtooth')
.lpf(500)
.gain(0.6),
sound("hh").euclid(8, 8).gain(0.3),
sound("rim").euclidRot(3, 8, 2).gain(0.25)
).room(.3).cpm(55)Chord Symbol Quick Reference
| Symbol | Name | Character |
|---|---|---|
| C | Major | Bright, happy |
| Cm or C- | Minor | Dark, sad |
| C7 | Dominant 7 | Bluesy, wants to resolve |
| C^7 or CM7 | Major 7 | Smooth, dreamy |
| Cm7 or C-7 | Minor 7 | Mellow, relaxed |
| Cdim or Co | Diminished | Tense, unstable |
| Caug or C+ | Augmented | Mysterious, floating |
| C9 | Dominant 9 | Rich dominant |
| C^9 | Major 9 | Lush, beautiful |
| Cm9 | Minor 9 | Warm, sophisticated |
| C7b9 | Dominant b9 | Tense altered |
| C7#9 | Dominant #9 | ”Hendrix chord” |
| C7alt | Altered dominant | Maximum tension |
| Csus | Suspended | Ambiguous, floating |
| C6 | Major 6 | Vintage jazz |
| Cm7b5 or Ch | Half-diminished | Minor ii chord |
Voicing Dictionary Reference
| Dictionary | Character | Best For |
|---|---|---|
| ireal | Full, rich | General jazz comping |
| ireal-ext | Extended | Complex jazz voicings |
| lefthand | Rootless | Piano left-hand, trio settings |
| guidetones | Minimal (3rd+7th) | Sparse arrangements, sketching |
| triads | Simple 3-note | Pop, rock, folk |
Common Jazz Progressions
| Progression | Chords (in C) | Usage |
|---|---|---|
| ii-V-I | Dm7 G7 C^7 | Foundation of jazz |
| I-vi-ii-V | C^7 Am7 Dm7 G7 | Turnaround |
| iii-vi-ii-V | Em7 Am7 Dm7 G7 | Extended turnaround |
| Jazz Blues | F7 Bb7 F7… | 12-bar with substitutions |
| Rhythm Changes | Bb^7 Gm7 Cm7 F7… | ”I Got Rhythm” |
| Coltrane Changes | C^7 Eb7 Ab^7 B7… | Giant Steps |
More Jazz Styles
Cool Jazz
Cool jazz features a relaxed, laid-back feel with softer dynamics and slower harmonic rhythm:
chord("<C^9 C^9 Dm9 Dm9 Em9 Em9 Dm9 G7b9>")
.anchor("c5")
.voicing()
.s('sawtooth')
.lpf(1200)
.room(.4)
.cpm(28)Cool Jazz with bass:
chord("<C^9 Dm9 Em9 Dm9>*2").layer(
x => x.struct("[~ x] ~ [~ x] ~").voicing().s('sawtooth').lpf(1200),
x => x.rootNotes(2).note().s('sawtooth').lpf(500)
).room(.4).cpm(30)Latin Jazz
Latin jazz combines jazz harmony with Afro-Cuban rhythms like the clave:
stack(
chord("<Dm7 G7 C^7 A7>").struct("x ~ x ~ ~ x ~ x").voicing().gain(0.6),
chord("<Dm7 G7 C^7 A7>").rootNotes(2).note().s('sawtooth').lpf(600).gain(0.7),
sound("rim").euclid(5, 16).gain(0.4)
).room(.3).cpm(45)Montuno pattern:
stack(
n("0 2 4 2 0 2 4 2").chord("<Dm7 G7 C^7 A7>").voicing().gain(0.5),
chord("<Dm7 G7 C^7 A7>").rootNotes(2).note().s('sawtooth').lpf(500).gain(0.6),
sound("rim").euclid(5, 16).gain(0.35)
).room(.3).cpm(50)Funk & Soul
Funk uses rhythmic chord stabs with 9th and 13th chords:
chord("<E9!4 A9!2 E9!2>")
.struct("x ~ [~ x] ~ x ~ [x ~] ~")
.voicing()
.s('sawtooth')
.lpf(2000)
.room(.3)
.cpm(28)Funk with bass and drums:
stack(
chord("<E9!4 A9!2 E9!2>")
.struct("x ~ [~ x] ~ x ~ [x ~] ~")
.voicing()
.s('sawtooth')
.lpf(2000)
.gain(0.5),
note("e2 ~ e2 ~ e2 g2 a2 ~")
.s('sawtooth')
.lpf(600)
.gain(0.7),
sound("bd").euclid(5, 8),
sound("sd").euclidRot(2, 8, 4),
sound("hh").euclid(8, 8).gain(0.4)
).room(.3).cpm(28)Gospel
Gospel uses rich extended chords and dramatic resolutions:
chord("<C^7 C^7/E F^7 Fm7 C^7/G G7 C^7 C^7>")
.voicing()
.room(.5)
.cpm(25)Gospel with passing chords:
chord("<C^7 Dm7 Em7 Ebm7 Dm7 Db7 C^7 C^7>")
.voicing()
.room(.5)
.cpm(28)Lofi Hip-Hop
Lofi beats combine jazz harmony with lo-fi drums:
stack(
chord("<Dm9 G7 C^9 Am9>")
.struct("[~ x] [~ x]")
.voicing()
.s('sawtooth')
.lpf(900)
.gain(0.4),
chord("<Dm9 G7 C^9 Am9>")
.rootNotes(2)
.note()
.s('sawtooth')
.lpf(400)
.gain(0.5),
sound("bd ~ ~ bd ~ ~ bd ~"),
sound("~ ~ sd ~ ~ ~ sd ~"),
sound("hh").euclid(5, 8).gain(0.3)
).room(.4).cpm(22)Lofi with vinyl crackle feel:
stack(
n("0 2 1 3").chord("<Dm9 G7 C^9 A7b9>").voicing()
.s('sawtooth').lpf(1000).gain(0.35),
chord("<Dm9 G7 C^9 A7b9>").rootNotes(2).note()
.s('sawtooth').lpf(400).gain(0.5),
sound("bd").euclidRot(3, 8, 0),
sound("sd").euclidRot(1, 4, 2).gain(0.8)
).room(.5).cpm(20)Chord Progressions by Feel
Happy & Uplifting
chord("<C G Am F>").dict('triads').voicing().room(.5)Melancholic & Reflective
chord("<Am F C G>").voicing().room(.5)Mysterious & Tense
chord("<Cm7 Fm7 Abm7 Db7>").voicing().room(.5)Dreamy & Floating
chord("<C^9 E^9 Ab^9 B^9>")
.anchor("c5")
.voicing()
.s('supersaw')
.lpf(2000)
.attack(0.1)
.release(0.5)
.room(.6)Dark & Cinematic
chord("<Cm Gm Ab Eb>")
.voicing()
.s('sawtooth')
.lpf(800)
.room(.5)
.slow(1.5)Energetic & Driving
chord("<Am F C G>*2").layer(
x => x.struct("x x x x").voicing().gain(0.6),
x => x.rootNotes(2).note().s('sawtooth').lpf(500)
).room(.3).cpm(35)What You Learned
chord()creates chord symbols,voicing()turns them into notes- Major (C) = bright, Minor (Cm) = dark
- 7th chords:
C^7(major 7),Cm7(minor 7),C7(dominant 7) - The ii-V-I progression is the foundation of jazz
dict()selects voicing styles: ireal, lefthand, guidetones, triadsanchor()controls voicing placement for smooth voice leadingrootNotes()extracts bass notes from chordslayer()combines multiple parts from one chord progression- Extended chords (9, 11, 13) and altered dominants add color
n()andarp()create arpeggios from chords- Jazz harmony enriches pop, blues, bossa nova, and other genres