Chowdhury-DSP / ChowKick

Kick synthesizer based on old-school drum machine circuits
BSD 3-Clause "New" or "Revised" License
155 stars 16 forks source link

[FEATURE] MIDI Velocity support #40

Open DeerTears opened 1 year ago

DeerTears commented 1 year ago

Is your feature request related to a problem? Please describe. As a drummer I use velocity a ton when sequencing my electronic drum tracks. I love giving accented notes to double kicks, fake echoing "ghost" notes, or making a kick drum roll into the next downbeat. It's just ways that I like to make electronic sounds have more personality. I use this all the time with my DAW's native sampler and other instrument VSTs.

The problem is that I love Chowkick's analog versatility when automated, but it doesn't seem to respond to velocity at all. I'd rather not render out a kick from Chowkick every time I want to use velocity in my sequences, especially since I like tweaking the parameters during playback, or just while producing.

Describe the solution you'd like To input midi notes with different velocities (0-255) and get an equivalent volume level (0%-100%).

Additional context Windows 10, FL Studio 20.9 64bit Chowkick 1.1.0 VST3

Love this VST and your other projects by the way. Outstanding work all around. 😊

jatinchowdhury18 commented 1 year ago

Thanks for the detailed feature request! Velocity sensitivity is actually something I was thinking about in moving towards a next release of ChowKick.

The synthesis mechanism in ChowKick works basically as follows: when the plugin receives a MIDI "Note On" message, the plugin generates a little "pulse" which goes through a "pulse shaping" algorithm, and then hits a "resonant filter" resulting in the eventual sound that you hear (a similar approach is used by many voices in the TR-808 and other analog drum machines). Currently, the pulse has a width and amplitude determined by the parameters in that section of the plugin.

Probably the most sensible way to add some velocity sensitivity would be to multiply the pulse amplitude by some value depending on the velocity of the incoming MIDI message. The code describing that part of the algorithm is all right here if you're interested in hacking on it, otherwise I can take a look at it in the coming weeks.

jatinchowdhury18 commented 1 year ago

Hey, sorry it's taken me so long to get back to this! I've just opened #47, which adds a parameter to turn on a "velocity sensitive" mode. I think the parameter should be on by default, but I had to make some changes to make sure that patches saved with older versions of the plugin are not affected by that decision.

Anyway, after that PR is merged, you can try it out either with the nightly builds or by building from source. I wouldn't be surprised if the implementation might need some tweaks in order to make the best musical use of the velocity range.

xparq commented 1 year ago

Hey, @jatinchowdhury18, thank you! ChowKick has now become an actually useful plugin. 👍

I think the parameter should be on by default,

Yep. (Currently it's off, in 1.1.2 ("nightly").) Probably it should also be on the main screen (below the output level slider, if you could make space for it; just "Vel." could do. (BTW, you could decrease the font size if needed -- or, better yet, an option for that (font size) could go to Settings, instead of having the sound synth. parameter of vel. sense there.)

jatinchowdhury18 commented 1 year ago

Yep. (Currently it's off, in 1.1.2 ("nightly").)

Was this loading an instance of ChowKick from a previously saved session or loading a new instance? For sessions that were saved with previous versions of ChowKick, the velocity sensitivity parameter will be turned off. This is necessary since otherwise updating the plugin could drastically change the sound of someone's project. For new instances of the plugin, the velocity sensitivity parameter should be on by default, which has been working correctly in my testing, but obviously there could be something I've missed.

Yeah, having that option on the main screen could be cool. I'm going to need to re-work some layout things anyway, so I'll try it out then.

I'm not sure how feasible it would be to have a setting for the font sizes, but I am planning to work on improving the way the font scales with the overall UI size.

xparq commented 1 year ago

Oh, yes, thanks for the clarification, it was indeed a "legacy" session.