let harmony = Engine.new(Palestrina);
fn detect_pitch(buf) -> Note
const MAX_VOICES: usize = 4;
voice_leading.reject_parallels()
struct GuitarInput { onset }
engine.harmonize(note, scale)

CONTRAPUNK

Real-time MIDI harmony generator and guitar-to-MIDI converter. Proper counterpoint rules. Sub-10ms latency. Built in Rust.

Free. No login. Browser works in Chrome with any MIDI controller.

CONTRAPUNK WITH A GUITAR

COMING SOON

CONTRAPUNK CLOUD

AI is not going to kill music as long as people keep playing music together. So let's jam!

Low-latency audio meets real-time counterpoint harmony across players.

No spam. Just a heads up when Cloud launches.

🎹 HARMONY ENGINE

8 harmony modes with real counterpoint rules. Palestrina, Bach, Jazz, Free. 28 scale modes. Deterministic voicing.

🎸 GUITAR INPUT

Plug in your guitar. Real-time pitch detection, onset tracking, auto-calibration. Play guitar, hear counterpoint.

⚡ SUB-10MS LATENCY

Single-cycle detection, 2-frame voting, 128-sample buffers. Fast enough for live performance.

🌐 RUNS EVERYWHERE

Native desktop via Tauri. Browser via WebAssembly. Server mode for studios. Same Rust core everywhere.

🎼 VOICE LEADING

Parallel fifths rejection. Voice crossing prevention. Spacing rules. Centuries of music theory, in code.

🔓 OPEN SOURCE

MIT licensed. Counterpoint rules are centuries of human knowledge. They should be accessible to every musician.

FUN FACT

There was a 1970s Indonesian progressive rock band also called Contrapunk that released an album called "Putri Mohon Diri". They blended traditional Indonesian instruments, intense guitar work, and classical influences. Listen on YouTube.