Transpose whistling to bass range. Optimized for responsiveness, with 1-2ms latency.
Example:
Version that runs in the browser, with latency that depends on the platform. In Firefox on a Mac it's solid, other platforms and browswers less so: bass-whistle-js.
Download:
| • | VST plugin, for Mac: | (VST3) | 
| • | Plugin source, for Mac/Windows: | (source) | 
| • | Stand-alone source, with PortAudio: | (source) | 
 
- Gate: how sensitive should the input be? The higher you set this, the more sensitive it will be. For noisy environments, set the gate as low as you can. 
- Attack: how sharply should sounds begin? The higer you set this, the more smoothly sounds will start. 
- Release: how sharply should sounds end? The higher you set this, the longer sounds will linger. 
- Octave: how many octaves down should it transpose? 
- F1: how much of the first harmonic (the fundamental) should there be? 
- F2: second harmonic 
- F3: third harmonic 
- F4: fourth harmonic 
- Slide: how quickly should pitch update when sliding between pitches? Lower values make it move more responsively. 
- Range Low: what's the maximum wavelength to recognize as whistling? Higher values mean recognizing lower pitches. Set this to match your whistling range, to as small a number as possible to minimize misrecognition. 
- Range High: what's the minimum wavelength to recognize as whistling? Opposite of Range High. 
- Response: how much should output volume vary based on input volume? At 0% output volume will be constant, while at 100% output volume will be fully responsive to input volume. 
This is intended to be used with a low-pass filter following it, a shelf at around 400Hz. The output is not clean in the high frequencies.
Blog posts: