thanks for catching that, I have improved the functional harmony here and how it works, let me know what you think https://github.com/contrapunk-audio/contrapunk/commit/dc25aa... I haven't made a release for this yet but you can build and test it
HN user
waveywaves
"It's a build and deploy world"
Yes sir, that is the best way. Learning music by ear is the best way to get through yes. What does your practice session usually look like ?
Really appreciate you sharing your workflow honestly.
I have a few follow up questions. When you're using SonoBus, are your musicians running local synths/instruments, or are you working with audio streams? And are you on macOS? Asking because you can actually use Contrapunk with SonoBus today then route guitar through Contrapunk, send the harmony MIDI to a synth via IAC buses, and pipe the audio into SonoBus through BlackHole. But there's clearly an extra step you probably shouldn't have to do. Your session hears the harmonized output and you can mute/unmute the Contrapunk voices like any other musician. Longer term we can look at native SonoBus integration via the AOO protocol so Contrapunk would show up as a peer in your session directly. What do you think about it ? Would love your input on what that should look liked.
Would be nice to have it be realtime no, is this something you are looking to have? Do sign up on the cloud waitlist so I can get in touch wrt progression on the chord detection work.
Unfortunately not right now, it's in the works. Polyphonic guitar to midi is a problem I am yet to understand and try solving in this one. Jam Origin's Midi Guitar is good like that, I still need to get there.
No worries!
Sorry about that, you will have to download the app again there was an issue with the midi out for guitar atleast. Just to be sure, have you setup the IAC buses. I usually like to have 4 and then configure them as output devices.
You can use your computer keyboard as well. Setup the IAC buses and use the keyboard and you should be sorted.
Thank you!
I haven't, this looks neat. Have you tried it ?
Ah, thanks for catching that really appreciate it ! Updated the website now.
Ah thanks for referring sonobus, hadn't seen it before. Would defintiely be good to get some inspiration from there. Do you use sonobus by any chance ? If so, what has your experience been with it ?
That's awesome thank you for sharing, really appreacite it ! Hope you have a good time with Contrapunk. Just let me know if you are facing any issues as well.
thanks ! go ahead and download the DMG and try it, let me know what you think ! :D
This is callback heavy audio code so this was the bigger problem for me mainly and learning about lifetimes was a pain initially. cpal's stream callback wants 'static which means you can't just pass references around. You end up using channels (crossbeam / std::sync::mpsc) between the audio thread and everything else. Once I structured around that it got smoother. I also got a lot of help from AI to understand and reimplement a lot of the parts for this as you can tell from the commit messages.
IKR ! and thank you, let me know if you were able to download and play around with it !
Added to the README, apologies for that.
Ah banger from the get go. Guess this is what I will be listening to through rest of the day. And I will add this as a fun fact to the website as well. Thank you for sharing :)
Thank you! The idea is not completely mine, I have to give thanks to Abhinav Arora who had this idea initially during the ADCx music hackathon. Kudos to him! Also love the phrase Gradus ad Parnassum! Maybe this should be the motto of contrapunk :)
Ah perfect ! Let me know what you think ! Also you can ping me on twitter if required https://x.com/BobadeVibhav/ Not really a twitter user, never been, but would be a easier way to connect obviously.
created https://github.com/contrapunk-audio/contrapunk/issues/8 https://github.com/contrapunk-audio/contrapunk/issues/9, let me know what you think
The quickest way to fix this is clone the repo and run `cargo tauri dev` I believe.
I had added a metronome and a note generator to this earlier which aren't working well exactly right now. But this would definitely increase playability. I agree that there should be a VST plugin version of this as well. It can also live as a standalone app and a plugin. Could you elaborate on the analyze timing? If you had to play using this, what would you like to hear ?
The quickest workaround for this would be running ` xattr -cr /Applications/Contrapunk.app`. Are you able to use the web version though at app.contrapunk.com
Ah sorry about that. Let me see what's up. I am able to run it locally on my M2 Pro. Not running Tahoe. Filed an issue https://github.com/contrapunk-audio/contrapunk/issues/7
Yes, latency was the main problem to solve here. Because of which I opted for Rust. The pipeline is:
- 128-sample cpal audio buffers (~2.7ms at 48kHz) - Single-cycle pitch detection - 2-frame McLeod pitch voting for confirmation - Entire DSP pipeline is Rust, pre-allocated ring buffers with minimal heap pressure
The e2e from pluck to MIDI "note-on" signal, is under 10ms on an M-series Mac. Hardware matters for sure so an audio interface with low-latency drivers (I use an Audient iD14) helped a lot. The web version (app.contrapunk.com) adds AudioWorklet latency on top, so the native Mac app is noticeably tighter. I am still working on figuring out how to have lesser noise and pitch jitter in the final output. Also this works really well for higher notes, bass not so much right now. Still need to figure out how to handle harmonics better. I have created this issue for you for now, let me know if you would like to add anything else to this as well. https://github.com/contrapunk-audio/contrapunk/issues/6.
Have you been able to try it as well would love to hear what you think! Coming back to the features, regarding 1. you can already choose between soprano, alto, tenor or bass. I have still filed an issue for this, will help me remember to take vet this feature. Sometimes it's not as strict as it should be but that's also something I need to work on. Regarding 2. it's a good idea, helps you be in control of the kind of counterpoint you are doing, filed an issue for the same. Please feel free to comment on the issue. 3. is just feels is a little goofy as well I love it. I haver filed an issue for this as well check https://github.com/contrapunk-audio/contrapunk/issues/
Thank you! The best part about this project is that you don't actually need a elaborate setup :) All you need is a DAW like garage band or logic and a few IAC buses configured on your mac. I really like the idea of key detection, it is something I have already thought about as well: based on the song it should pick up the key which you can then jam to with contrapunk and I think it can act as an educational moment for the player as well at the time. https://github.com/contrapunk-audio/contrapunk/issues/4 I have created a github issue over here as well for this. For the velocity currently I am inheriting the onset strength of the input signal for the accompanied notes. The guitar input measures RMS energy in the first ~5ms of each pluck (the attack transient) and maps that to MIDI velocity. I will post more sample recordings on the website soon! Were you able to check the one which was already posted?
Thanks for taking a look! Let me know if you have any issues with it, it's still in a nascent stage and has a lot of room to grow especially in the Guitar to MIDI detection. If you don't have a midi controller you can use your keyboard as well !
I had created this chrome plugin for myself because I didn't want to pay anyone else for a similar plugin to improve my French reading. The aim of this project is to create a open source platform which can be used to learn a language through reading initially and track progress on the app platform. I would like to share it here and understand what things would be good to keep in mind when making an app like this. I plan on making the platform free as well for as long as I can trying to keep the costs to an extreme minimum by making an extremely optimized service. I know that right now there's nothing substantial in the repository apart from a working MVP which you can start using locally, but would love to hear your comments on what you think.