Skip to content
Techniques & Technology

Arpeggio

Chords from a single channel

Arpeggios rapidly cycled through notes of a chord, simulating polyphony on sound chips limited to single-note channels—a defining technique of chiptune music.

commodore-64nintendo-entertainment-systemsinclair-zx-spectrumcommodore-amiga audiochiptunemusic 1980–present

Overview

When a sound chip can only play one note per channel, how do you play chords? Arpeggios cycle through chord tones faster than the ear can separate them, creating the perception of multiple simultaneous notes. The trick predates 8-bit hardware (early computer-music research used it on PDP machines), but the SID, AY, and NES APU pushed it from a workaround into a defining sonic signature.

The technique

Basic concept

Instead of playing C-E-G simultaneously, the routine rewrites the channel's pitch every video frame:

Frame 0: C
Frame 1: E
Frame 2: G
Frame 3: C  (cycle restarts)
...

With a 3-note chord at one note per frame, the cycle restarts every 3 frames. On a 50 Hz PAL system that's 50/3 ≈ 16.67 Hz; on a 60 Hz NTSC system, 20 Hz. Around 17-20 Hz the ear stops separating the notes and starts hearing a chord with a buzzy edge — the classic "chip arpeggio" sound.

Note stride vs cycle rate

Stride (frames per note)Cycle rate (3-note chord, 50 Hz)Effect
4~4 HzAudibly stepped — sounds like a sequence
2~8 HzBuzzy chord with rhythmic flutter
1~17 HzSmooth chord perception (classic chip sound)

Some musics use a 4-note arpeggio (e.g. major 7) at stride 1 — that's 50/4 = 12.5 Hz on PAL, slower and more obviously stepped.

Chord types

Common arpeggio patterns, expressed as semitone offsets from the root:

ChordNotesSemitone offset
MajorC-E-G0-4-7
MinorC-Eb-G0-3-7
DiminishedC-Eb-Gb0-3-6
Sus4C-F-G0-5-7
Major 7thC-E-G-B0-4-7-11

Implementation

SID (C64) — full example

The SID expects a 16-bit frequency value at $D400/$D401 for voice 1. A note table maps semitones to frequency words:

; 12-entry chromatic frequency table for one octave
; (real code uses a multi-octave table, indexed by MIDI note)
note_freq_lo:  .byte $17, $27, $39, $4B, $5F, $74, $8A, $A1, $BA, $D5, $F1, $0F
note_freq_hi:  .byte $11, $12, $13, $14, $15, $16, $17, $18, $19, $1A, $1B, $1D

arp_offsets:   .byte 0, 4, 7        ; major triad
ARP_LEN = 3

base_note:     .byte 36              ; C3 in this scheme
arp_pos:       .byte 0

update_arp:
    ldx arp_pos
    lda arp_offsets,x
    clc
    adc base_note            ; effective semitone
    tay                      ; index into note table
    lda note_freq_lo,y
    sta $d400                ; voice 1 freq lo
    lda note_freq_hi,y
    sta $d401                ; voice 1 freq hi

    inx
    cpx #ARP_LEN
    bcc :+
    ldx #0
:   stx arp_pos
    rts

Called from a 50/60 Hz IRQ, this gives stride-1 arpeggio. Stride-2 is one extra frame between writes; just gate the update with a counter.

Tracker notation

ProTracker, FastTracker, FamiTracker, GoatTracker — all use the MOD-format command:

0xy   Arpeggio
      x = first semitone offset above base note
      y = second semitone offset above base note

The cycle is base / +x / +y, looping for as long as the command is on. Example: 047 plays a major triad above the row's base note.

Musical uses

ApplicationPurpose
ChordsHarmonic support without spending three voices
Lead decorationAdd motion to a melody held over a single voice
Bass linesImplied harmony — bass + chord on one channel
Rhythmic driveThe buzzy texture itself becomes part of the groove

Variations

Direction

  • Up (C-E-G-C-E-G…)
  • Down (G-E-C-G-E-C…)
  • Up-down (C-E-G-E-C-E-G…)

Speed changes

Varying the arpeggio stride within a single sustained note creates expression — a fast intro that slows into a held chord, for example.

Combined with effects

Arpeggios layer with:

  • Volume envelope (attack/decay shape)
  • Pulse width modulation
  • Vibrato
  • Filter sweeps

By platform

SID advantages

  • The filter can smooth the buzz between notes.
  • Ring modulation adds inharmonic content for metallic arpeggios.
  • All three SID voices are independent — arpeggio on one voice frees the other two for bass and lead, where a chip without it would have to spend three voices on the chord alone.

NES approach

  • Clean, sharp arpeggios with no filtering.
  • Two pulse channels lets you stack two arpeggios for thicker chords.
  • Triangle channel arpeggios produce muscular bass lines.

AY-3-8910 / YM2149

  • Bright, cutting timbre — Spectrum 128K and CPC favourites.
  • Hardware envelope can interact, giving auto-modulated arpeggios.
  • The reason "Spectrum AY music" sounds the way it does.

Composition tips

  • Don't overuse — extended arpeggios become tiring to listen to.
  • Match arpeggio speed to tempo (faster songs tolerate stride 1; slower songs may want stride 2).
  • Consider root motion — moving the base note while the arp pattern stays constant changes the implied chord.
  • Use to add energy at key moments rather than as the default texture.

See also