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()