|
Bela
Real-time, ultra-low-latency audio and sensor processing system for BeagleBone Black
|
Public Member Functions | |
| Touch (float x, float y, float diameter, float fricative_intensity, bool alive, bool enabled, float endTime) | |
Public Attributes | |
| float | x |
| float | y |
| float | diameter |
| float | fricative_intensity |
| bool | alive |
| bool | enabled |
| float | index |
| float | endTime |
Touch::fricative_intensity is the amount of turbulence In the original implementation it has a 100ms linear AR envelope (done by UI::updateTouches())
Glottis::UITenseness (amount of noise (breath) in the generator) it also affects Glottis::loudness
Glottis::intensity (0,1) AR global envelope
Glottis::UIFrequency target pitch, smoothed in Glottis::smoothFrequency
Glottis::handleTouches() (currently not implemented) would set Glottis::frequency, Glottis::tenseness also it sets Glottis::isTouched which is needed when the auto voice is turned off.
UI::touchesWithMouse contains all the current touches. If one of these is in the Toungue area, it will become the new TongueTouch
After any touch is added/removed/moved, you need to call TractUI::handleTouches (and Glottis::handleTouches if you are using it).
Every time a touch is added or moved, diameter and index should be set for each touch with TractUI::getIndex and TractUI::getDiameter.
To end a touch, set its alive=false and/or remove it form the list. The original implementation uses updateTouches() to apply the AR envelope to Touch::fricative_intensity. This is bad because it would be handled at evey GUI call. We should look into incorporating it somewhere else.
In Tract the diameter of a touch is the diameter of the tract (when it is negative there is an obstruction) at the index.
TractUI bladeStart, tipStart, lipStart are constants set at init(). They are the idnex in the tract where each section starts.
Tract* reshapeTract() and calculateReflections() are called once for every block:
reshapeTract() smooths the diameter of the tract and checks for obstructions in the vocal tract. When an obstruction is removed it generates a transient (addTransient). It then does something with noseDiameter and noseA
calculateReflections() sets the reflections...
Tract::handleTouches()