Show HN: Contrapunk – Real-time counterpoint harmony from guitar input, in Rust

https://contrapunk.com/

Contrapunk

Real-time MIDI harmony generator and guitar-to-MIDI converter. Built in Rust.

Hi HN, I built Contrapunk because I wanted to play guitar and hear
counterpoint harmonies generated in real-time. It takes audio from your guitar, MIDI player or your computer keyboard and generates harmony voices that follow counterpoint rules to generate harmonies. You can choose the key you would like to improvise/play in and the voice leading style and which part of the harmony you would like to play as, as well.

macOS DMG:
https://github.com/contrapunk-audio/contrapunk/releases/tag/...

Source: https://github.com/contrapunk-audio/contrapunk (do open any issues if you have any)

Would love feedback on the DSP approach and the harmony algorithms. I am also looking at training a ML model for better realtime guitar to midi detection. I believe that will take some time.

Release Contrapunk v1.0.0 · contrapunk-audio/contrapunk

🎵 Contrapunk v1.0.0 Real-time MIDI harmony generator and guitar-to-MIDI converter with classical voice leading rules, built in Rust. ✨ Highlights 🎹 8 harmony modes with proper counterpoint rules (...

GitHub
"Realtime" as in "while playing guitar" has some pretty challenging latency requirements. Even if your solution is optimal, hardware specs will play a meaningful role. I'd be really interested if you've solved for this e2e.

Cool idea!

I've got a few thoughts for features, if you're open to them:

1. Ability to specify where your "played" voice resides in the voicing: As the bass note, as an inner voice, or as the top line.

2. Options for first species, second species, third, florid, etc counterpoint for each of the generated voices. Ex: You play a single note and the upper voice plays two notes for every one of yours, etc, etc.

3. If you want to get real fancy, make the generated voices perform a canon of your played notes.

What a cool idea. I don't have a music setup capable of running this right now - perhaps in a couple of months - but if you were to post some sample recordings, I'd gladly listen to them.

How do you generate velocity values for the accompaniment notes?

Given that you already have a pitch tracker, it could be interesting to add key detection; just start playing, instead of telling the machine what key you're in, and it starts following along as soon as it catches on.

Wow that's is really cool! Thanks for sharing! I will definitely take a look