Real-time, ultra-low-latency audio and sensor processing system for BeagleBone Black
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
Public Member Functions | Public Attributes | List of all members
Touch Class Reference

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

Detailed Description

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...


The documentation for this class was generated from the following file: