Acoustic / Speech

Here is the documentation on the acoustic model of the vocal tract and its application to speech using the Liljencrants-Fant glottal wave model and real-time DSP processing.

Graphical User Interface

Here is the GUI if Acoustic / Speech is checked at the bottom right of the Settings dialog and Active is checked in the Speech Controller. One cycle of the glottis signal is plotted in the audio view (here with stereo unchecked).

Graph View

Each edge of a graph displayed in the Graph View of represents an acoustic duct with variable cross section modelled by an area function. The edge arrow orientation shows the x increasing direction of the area function. Each vertex of a graph represents a duct end if it belong to only one edge or a junction if it is connected to several edges.

If Edge Drawing Mode is not printed in the bottom left of the view, a Right Click in an empty space of the Graph View opens the view menu with a Graph submenu.

Edge Drawing Mode is toggled on with the corresponding menu and off by a Right Mouse Click in the Graph View.

if Edge Drawing Mode is on, an Edge is created by clicking two times with the left mouse button. The first click sets the first edge vertex and the second click sets the second one. If a vertex is already present at the cursor position when the mouse click occurs, the existing vertex is selected as the edge vertex. A new vertex is created otherwise.

Right Click or press the Esc key in the Graph View for quitting the Edge Drawing Mode.

if Edge Drawing Mode is off, you can move a vertex by clicking on it, move the mouse to the final position and release the mouse button.

Left Mouse Click on an edge selects it, adds it to the edge selection if the Ctrl key (Cmd key on Mac) is pressed and selects all the connected graph containing the edge if the Shift key is pressed. The selected edges must belong to a connected graph.

Copy the edge selection by selecting the menu Graph > Copy (Ctrl C). Afterward, the selection can be moved to its destination by using the left mouse button. Right Click (Ctrl v) to Paste .

Cut the edge selection with the menu Graph > Cut (Ctrl X): same as Copy but the initial selction is deleted afterwards.

The menu Graph > Delete (Del) delete the edge selection.

The menu Graph > Clear (Alt+D) delete all graphs in the view.

Right clicking on an edge shows the edge the menu.

Right clicking on a vertex shows the menu that allows to set the vertex as the input or output point for computing the transfer function.

If the vertex is a duct end (i.e is connected to only one edge), the menu also contains an item Edit Boundary That opens the following dialog.

This allows you to set the parameters a and b of the the radiation impendence defined in the theory pdf section 1.3 by

where ρ is the air density (1.292 kg / m3), U(x,s) and P(x,s) are the Laplace transform of the volume velocity and the average pressure. Radiation parameters have no effect if the vertex is the input.

Area Function Editor

The Area Function Editor dialog box opens either by double clicking on an edge in the Graph View or by right clicking on the edge and select the menu item Edit Area Function.

Curve Type

The area function is defined by a set of points (x, y=A(x)) and can have three different representations:

💡 Spline area functions can be transformed to step functions for acoustic computations using numerical parameters.

Edit Using The Mouse

The points can be moved by Left Mouse Click > Drag > Left Mouse Release on a point in the graphic view. Right Mouse Click on a point in the graphic view pops up a menu that allows to delete that point.

Edit Using The Table Sheet

Area function coordinates can also be edited using the Table Sheet beside the graphic view.

Left Mouse Click on a sheet's row select the corresponding row and highligth the corresponding point in the graphic view.

If the Ctrl key is pressed while clicking, the point is added to the selection.

If the Shift key is pressed while clicking, all rows from the previously selected row to the current one are selected.

Right Mouse Clicking on a sheet's row pops up a menu that allows you to:

Append Mode: Easily encode area functions whose points are equally spaced. When checked, if you enter the y = A(x) value for the last point, a new point is automatically created at the end of the list.

Bottom Toolbar

The Label entry sets the label of the corresponding edge in the Graph View.

If Compute is checked, the transfer function is computed each time the area function is updated, either by pressing the Enter key in the table sheet or by releasing the left mouse button after moving a point in the graphic view.

If Units is checked, the x axis label is set to x (cm) and the y axis label is set to A(x) (cm2).

When the Apply button is pressed, the area function is saved and the transfer function is computed.

The Ok button acts as the Apply button and closes the are function editor afterwards.

When the Cancel button is pressed, the area function editor is closed and the area function is reset to the last saved configuration.

Speech Controller

The Toolbar

The button Opens an acoustic graph file that has a .agr extension. This can also be done with the menu File > Acoustic Graph > Open or using the shortcut Alt+O.

The button Save the current acoustic graph, its area functions, acoustic and numerical parameters. If the current Acoustic Graph is not already associated to a file, a file chooser allows to select the output file.

The button behaves as the button but opens the file chooser anyway.

The button computes the poles and zeros of the transfer function (theory sec 4.2-4.8) of the active Acoustic Graph in the Graph View. The module of the transfer function approximation is plotted in the Transfer Function View. The transfer function approximation is given by

where the pk and zl are np the first poles and nz first zeros of the transfer function.
A Digital Signal Processing filter is created with all second order poles and zeros computed. It can be viewed and modified by opening the DSP Filter Dialog.

If Active is checked, the and buttons are enabled and one cycle of the Liljencrants-Fant glottal wave signal is plotted in the Audio GUI.

The and buttons start and stop speech synthesis. Buffers are filled with glottal wave signal cycles, sent to the DSP Filter containing the transfer function poles and zeros and then to your Audio Device in real-time. Check your Audio Settings if you ear cracklings in the audio output.

If Save is checked, the speech output is saved in a file that can be selected by pressing the button beside.

If Smooth is checked, the transition from a given set of glottis parameters to another is smoothed while generating speech output. Intermediate glotal wave forms are generated using interpolation values of the parameters in order to avoid sharp transitions.

If Clip is checked, the amplitude of the resulting speech output if checked after the pole-zero IIR filter in order to ensure stay in the range of audio signal (-1, 1) by decreasing the U0 value.

The button opens the Solution Viewer.

The button clears the Transfer Function View.

If the Auto Clear is checked, the Transfer Function View is cleared before each computation.

Real time update of the transfer function

If the Graph View view contains several graphs and the glottis is active and playing, when you click on a graph in the view, the associated transfer function is computed and the IIR filter is updated, as if you had pressed the button.

As example, the figure below shows the graph view when the story.agr file is loaded. You will find it in your Acoustic Graph directory and that contains area functions obtain from magnetic resonance imaging by Story. It is loaded from the story.py python script.

The Graph View when story.agr is loaded.

Here is the resulting audio output.

Oral vowels (Liljencrants-Fant Glottal Wave Model)

You may notice that some vowels does not sound as expected using the original data obtained from MRI but you can improve the perceptive result by increasing the effect of sharp constrictions using the δR parameter. e.g setting it to 0.15 produce a more realistic u (bottom down of the graph view) without modifying the area function.

Check your Audio Settings if you ear cracklings in the audio output while doing it yourself with the application.

💡 Real-time update of the transfer function can also be used on any source signal. If the glottis is not active but an audio track is playing and real-time DSP filter is checked, the transfer function is also updated when you click on a graph. The next audio track is obtained using this french_vowels.agr acoustic graph file that contains simplified area functions for french vowels and apply it on a cello recording.

Singing cello

Audio Settings

You may ear crackling sounds if the number of poles and zeros (order of the DSP filter) is too high in order to achieve real time processing on your CPU. This can often be avoided by increasing the Buffer Size or the Latency. The previous and following examples have been obtained With the MME Windows Audio Device, a latency of 180 ms and a buffer size of 512 samples.

High latency, large buffer size

Using a low latency audio device such as WASAPI also allows to reduce the buffer size and the transition duration between two successive glottal waveform when Smooth is checked. The following example has been obtained With the WASAPI Audio Device, a latency of 10 ms and a buffer size of 64 samples.

Low latency, small buffer size

The number of poles and zeros can be lowered by decreasing the Max Frequency parameter but this can also have an effect on lower frequency poles and zeros.

Liljencrants-Fant Glottal Wave Model

The glottal source model used here is the extended Liljencrants-Fant proposed proposed by Fant. It relies on four parameters T0, Te, Ta and Tp.

Implementation details are descibed in this pdf document.

One cycle of the Liljencrants-Fant glottal wave signal. The derivative is normalized for the plot so that the signal and its derivative have the same amplitude.

The extended model proposes to replace the four parameters by three parameters more easy to handel

The input parameter Rg can also be replaced by the opening quotient

or

Fant also propose a single shape parameter Rd for controlling the glottis signal

This single parameter allows to go from tight adducted phonation to breathy abducted phonation.

User Inputs

LF Input allows your to choose between the two Oq definitions of the three parameter model defined in equations or to use the single parameter model Rd.

If LF Input is on Rd, the Rd silder and the entry beside allow to set the Rd parameter that controls the three others. The Oq, Rk and Ra parameters are disabled. The range for this parameter is 0.209 ≤ Rd ≤ 3.377.

If LF Input is on Oq=Te/To or Oq=Te/To+Ra, the Oq, Rk and Ra sliders and entries beside allows te set the three-parameter model according to the selected Oq definition definitions. The Rd parameter is disabled.

If LF Input is on Oq=Te/To, the range for the parameters are
0.05 ≤ Oq ≤ 0.95, 0.08 ≤ Rk ≤ 0.92 and 10-3 ≤ Ra ≤ 0.3.

If LF Input is on Oq=Te/To + Ra, the range for the parameters are
0.2 ≤ Oq ≤ 0.95, 0.08 ≤ Rk ≤ 0.92 and 10-3 ≤ Ra ≤ 0.5.

The f0 slider and entry control the fundamental frequency in Hz of the glottal wave signal and hence T0 = 1 / f0 (20Hz ≤ f0 ≤ 1500Hz).

The U0 slider and entry control its maximum amplitude (10-3 ≤ U0 ≤ 1).

if Control E is checked, the U0 slider becomes the E slider and controls the derivative amplitude instead of the glottal waveform amplitude as shown in the figure below. The U0 parameter is computed accordingly and shown in the U0 text entry that replaces the E text entry.

This is useful for avoiding large loudness perception differences when modifying other perameters such as f0 or Rd.

⚠ you will see the E slider move when you modify those parameters while the value remains unchanged. This is because the slider upper bound changes in order to keep the right slider position correspond to U0 = 1. When the E slider position is an extremity while modifying other parameters, the E text entry is modified because otherwise, the corresponding U0 value would be greater than 1.

If ∂/∂t is checked, the glottal signal derivative is also plotted. The signal derivative is normalized for the view so that E = U0.

Acoustic Model Settings

The Settings dialog opens when you press the button in the top toolbar of the application. Then, press the Acoustic Model tab to set acoustic parameters.

The Speed Of Sound entry allows you to set it.

The Max Frequency entry determines the highest pole or zero frequency that will be taken into account for generating the transfer function IIR filter. It cannot exceed the Nyquist frequency: (Sample Rate)/2. It is also used to calculate the number of basis functions nα, used for the contribution of a duct of length Lα to the numerical method presented in theory (sec 3.3).

where the floor function ⌊ x ⌋ returns the greatest integer less than or equal to x.

The three Sondhi Parameters w0, a and c1 fix the values of the wall admitance and visco-thermal losses parameters used in the acoustic model. (see theory section 1.2.).

Numerical Model Settings

The Settings dialog opens when you press the button in the top toolbar of the application. Then, press the Numerical Model tab to set acoustic parameters.

If Split Long Ducts is checked and the number of basis function nα correponding to a duct of length Lα, is greater than the maximum number of basis functions, the duct is splitted into several parts of length Lαnew defined as

This is illustrated by the next figure where the original area function has been spliited into six parts. The points with white centers shows the start/end of ducts joined numerically by imposing pressure continuity and flow conservation.

This option should only be used with the Step To Tubes option described below. (see theory sec 5.1)

if Step To Tubes is checked, the area function is splitted into uniform pipes. This is not only more robust but also better fits experimental results (see theory sec 5.1) This has a numerical cost since the size of the matrix whose eigenvalues give the resonance frequencies (theory sec 3.3) increases.

if Spline To Step is checked and an area function is a cubic spline, the area function is transformed to step function before computation. Each interval between two points of the spline is transformed to a uniform tube whose area function is the average of the two point ordinates.

Here is an example where a cubic spline area function (left) has been transformed to step function before being decomposed in a concatenation of uniform tubes(right)

Before performing Spline To Step, it is possible to automatically add points to the spline by using either Webster Spline or Cut Spline.

Max Ratio: The Webster equation is valid if the duct area cross section varies little across distances of up to the duct width. If we consider circular area cross sections A(x), the duct width is given by 2 A(x)/π. For a given portion of a spline area function whose minimum and maximum values are Amin and Amax>, we define the Max Ratio ρmax as

If the Webster Spline is checked, points are added on the spline using the following algorithm. for each point on the spline whose area is Ax, we first compute Amin and Amax by solving the two second degree equations

Afterwards, we search for the nearest intersections of the spline with the lines A(x)=Amin and A(x)=Amax. If intersections are found and are nearer that the points neighbours, points are added to the spline. This allows to add more points where they are the most required so that when converting splines to step functions, CPU cost does not increases too much. This is illustrated by then next figure where the original cubic spline area function (left) on which points have been added using Max Ratio value of 1.2 (right).

If instead, Cut Spline is checked, points are added at fixed interval of at most Max Dx.

If the Compute H0 checkbox is checked, the H0 value to be used for the transfer function approximation is computed by solving a nonhomogeneous linear system (see theory sec 4.1 and 4.2)

If the Pole-Zero pair at f=0 checkbox is checked, a pole-zero pair is added at f=0 in order to make the transfer function approximation by its poles and zeros matches the the Slow Transfer Function computation (see theory sec 4.6)

Cycle δf: If the acoustic graph contains cycles, it will exhibit zeros whose precision is set using the Cycle δf entry (see theory sec 4.7).

The Max Basis entry sets the maximum number of basis function used for modelling a single duct of the acoustic graph (see theory sec 3.3).

If the δR entry is not 0, it decreases each area function point as if the radius had been decreased by δR:

This is useful in order to fit experimental results when the area function contains very sharp constriction (see theory sec 5.1 and 5.2).

Solution Viewer

Pressing the button at the bottom of the Speech Controller opens the Solution Viewer.

Slow Transfer Function

Pressing the button computes the thransfer function by solving a nonhomogeneous linear system (theory sec 4.1). This is much slower than computing its approximation by computing the poles and zeros . Moreover it does not provides those poles and zeros required for generating an IIR filter for digital signal processing. Nevertheless, it makes no assumption on zero origins and therefore validates the numerical methods used for identifying the transfer function zeros as shown below.

Comparison between a transfer function computed by solving a nonhomogeneous linear system (blue) and its approximation (black).

Pressing the button stops the transfer function since this can be quite long if the matrix size is large and/or the number of transfer function points beeing compute is large.

The N Points entry sets the number of transfer function points beeing compute.

If φ is checked, the transfer function phase is added to the plot.

It Offset is checked, the transfer function is shifted up in the Transfer Function View. The entry beside sets the offset value.

The colored button and the Width entry sets the transfer function curve color and width. You can still modify the curve color and width afterwards by right clicking on it and select the menu Edit Function.

Solutions Of The Webster Equation

The equation that is studied here is the Webster equation, improved by Sondhi in order to take wall admitance and visco-themal losses into account with low computational cost (theory sec 1.2).

where A(x) is are the area cross section of the duct at a distance x from the duct input, P(x) is the laplace transform of the pressure and c is the speed of sound. ω0, a and c1 are the Sondhi parameters that can be set using the Acoustic Model Settings.

The relationship between pressure and volume velocity in the laplace transform domain U(x) is given by (theory sec 1.1).

where ρ is the air density.

Sondhi showed that resonances frequencies of a lossy duct could be obtained from the resonances of the corresponding lossless one (ω0 = a = c1 = 0). If ̂ω is a given resonance frequency of the lossless rigid-walled tract, the resonance frequency and bandwidth of the corresponding lossy reacting-walled are obtained by solving

For the lossless case, σ2 = s2 = (iω)2= -ω2, the original equation becomes

In such a case, if we impose the closed input condition U(0,s)=0, and therefore xP(x)=0 for the duct starting at the graph input point, the lossless equation has solutions only for discrete values of ω that correspond to the resonance frequencies.

Resonance

When the Solution Type selector is on resonance, resonance modes of the corresponding lossless mode are plotted as illustrated by the two slides of the next figure..

The resonance mode can be chosen by setting the frequency selector to the corresponding lossy resonance frequency obtained from the lossless one by solving the non linear equation σ(̂ω). In such case, the pressure P(x) is an imaginary function and U(x) is a real function. The initial area function A(x) is compared to the modified one Ã(x) using the Numerical Model Settings.

In the A(x)P(x) plot in the second slide, two versions of the function are ploted that are identical if P(x) is solution of the Webster equation. We can see a slight difference (red curves not hidden by black ones) since we have set the numerical parameters for that purpose: Split Long Ducts unchecked, high resonance frequency and low Max Basis.

The errors are printed in the last plot. See theory sec 3.6-3.8 for error definitions and computation details.

Frequency

When the Solution Type selector is on frequency, solutions of the lossy Webster equation can be computed for any frequency value (theory sec 3.6-3.8). The frequency is set using the f= entry. In that case, as shown below, both P(x) and U(x) have an imaginary part (in black) and a real one (in grey).

Some plots of the solution for f=10500 Hz, moving away from the resonance to get significant real and imaginary parts in all plots.
Zero

When the Solution Type selector is on zero and the acoustic graph has subgraphs responsible for zeros (theory sec 4.3-4.8), each such subgraph in the Graph View is colored (left side of the next figure).

A frequency selector is available for choosing a zero frequency for each of them (right side of the next figure). When clicking on the button, only lossless solutions corresponding to the ducts included in the associated subgraph are plotted.

A graph containing two subgraphs responsible for zeros (left).
The Solution Viewer Dialog with the Solution Type selector set to zero (right).

If the DSP Filter Dialog is open, the zeros are also colored with the subgraph color as shown below.

DSP Filter Dialog once the poles and zeros of the graph shown in the previous figure have been computed.

Glottal Waveform From Speech Record

First, put the cursor at the begining of a cycle of a sustained vowel ɑ recording in the Audio GUI.

Then, create a DSP filter using LPC with cascade (pole decomposition) and inverse (pole ⇒ zero) checked. Select and remove the gain (y[n] =a0 x[n]), the first 2nd order and all 1st order zeros.

Here is the resulting transfer function.


Eventually, apply the resulting filter to the speech signal by pressing the button.
must be unchecked for this operation.

Python

Here are the functions that can be called from Python scripts.


            #### Graph View ####.
            
# It is not recommended to code yourself the commands in this section
# but rather do your graph operation in the Graph View
# and use Macro > Save afterwards to get the equivalent
# python code. Indeed, graph, edge and vertex indices are difficult
# to know after several graph manipulations.
            CreateEdge(float x1, float y1, float x2, float y2)
            
# Create an edge whose vertices have coordinates (x1,y1)
# and (x2,y2).
            MoveGraphPoint(int pointIndex, float x, float y)
            
# Move the vertex whose index (creation order) is pointIndex to
# the coordinates (x,y).
            SelectGraph(int graphIndex)
            
# Select the grap whose index is graphIndex.
            SelectEdges(int edgeIndex1, int edgeIndex2, .....)
            
# Select the edges whose indices are edgeIndex1, edgeIndex2,...
# The edges belong to the selected graph.
            CopyEdgeSelection()
            
# Copy the edge selection to a temporary buffer.
            PasteEdgeSelection(flat dx, float dy)
            
# Pastes the edge int the temporary buffer and
# applies a translation (dx,dy).
            CutEdgeSelection()
            
# Same as CopyEdgeSelection but the original edges are deleted
# after PasteEdgeSelection.
            DeleteEdgeSelection() 
            
# Delete the edge selection.
            UnselectAll()
            
# Clear edge selection.
            SplitEdge(float x,float y)
            
# x and y are the coordinates of the point where
# the mouse is when you split edge from the GUI.
            DisconnectEdge(float x, float y)
            
# x and y are the coordinates of the point where
# the mouse is when you disconnect edge from the GUI.
            ReverseEdge(int graphIndex, int edgeIndex)
            
# graphIndex and edgeIndex are the
# graph and edge indexes of the reversed edge
# ⚠ Only from version 1.0.17.
            SetTransferInput(int graphIndex, int vertexIndex)
            
# Set the vertex vertexIndex as the transfer function input
# for the graph graphIndex.
            SetTransferOutput(int graphIndex, int vertexIndex)
            
# Set the vertex vertexIndex as the transfer function output
# for the graph graphIndex.
            SetPlaneBaffle(int graphIndex, int vertexIndex, float a, float b)
            
# Set the radiation impendence parameters a and b
# for the vertex vertexIndex of graph graphIndex.

            #### Area Function Editor ####.
        
            EditAreaFunction(int graphIndex, int edgeIndex)
            
# Opens the Area Function Editor dialog
# for the edge edgeIndex of graph graphIndex.
            SetAreaFunction(int graphIndex, int edgeIndex, string edgeLabel, 
            int numPoint, float x1, float y1, ..., 
            float xnumPoint, float ynumPoint, string curveType,
            float dxStart, float dxEnd)
            
# Set the area function for edge edgeIndex of graph graphIndex.
# curveType can be "step", "cspline_fixed", or "cspline_free".
# dxStart and dxEnd are optional and only used for "cspline_fixed".
# The default is dxStart = dxEnd = 0.
# ⚠ Versions prior to 1.0.17 does not support dxStart and dxEnd.
            ComputeOnAreaFunctionChange(int b)
            
# Check the Compute checkbox if b != 0,
# uncheck it otherwise.
# ⚠ This has no effect on SetAreaFunction,
# you have to call AcousticGraphComputeTransfer
# for computing the transfer function.
            ShowAreaFunctionUnits(int b)
            
# Check the show Units checkbox if b != 0,
# uncheck it otherwise.

            #### Speech Controller ####.
        
            AcousticGraphOpen(string fileName)
            
# Opens acoustic graph file fileName (.agr extension).
            AcousticGraphSave()
            
# Saves the current acoustic graph file.
# ⚠ If no file name is currently associated with the graph,
# you have to use AcousticGraphSaveAs instead.
            AcousticGraphSaveAs(string fileName)
            
# Saves the current acoustic graph to the file
# fileName (.agr extension).
            AcousticGraphComputeTransfer()
            
# Computes the poles and zeros of the
# active graph transfer function.
            CheckSpeechActive(int b)
            
# Check the Active checkbox if b != 0,
# deactivates it otherwise.
            StartGlottis()
            
# Starts speech synthesis
            StopGlottis(float delay)
            
# Waits delay sec and Stops speech synthesis
            UpdateGlottis(float f0, float U0, int option,...)
            
# Update the glottal wave signal.
# f0 is the fundamental frequency and
# U0 is the maximum amplitude of the signal.
# If option is 0 or 1, it corresponds to Liljencrants-Fant input
# Oq=Te/To or Oq=Te/To+Ra and there must be 3 more
# float arguments: Oq, Rk, Ra.
# if option is 2, it corresponds to Liljencrants-Fant input Rd
# and it bust be 1 more float argument: Rd.
            AcousticGraphCheck()
            
# Opens the Solution Viewer.
            AcousticGraphCleanResult()
            
# Clears the Transfer Function View.
            AcousticGraphAutoClean(int b)
            
# Check the Auto Clear checkbox.
            GlottisCheckECtrl(int b) 
            
# Check the Control E checkbox if b != 0, uncheck it otherwise.
            GlottisCheckDeriv(int b)
            
# Check the ∂/∂t checkbox if b != 0, uncheck it otherwise.
            #### Acoustic Model ####.
        
            AcousticGraphSpeedOfSound(float c)
            
# Sets the Speed of Sound.
            AcousticGraphMaxFrequency(float f)
            
# Sets the maximum frequency.
            AcousticGraphSondhiParameters(float w0, float a, float c1)
            
# Sets the tree parameters of the Sondhi acoustic model.
            AcousticGraphSetLossless(int b)
            
# Sets the tree parameters of the Sondhi acoustic model
# to 0 if != 0, ssets it back to the previous value otherwise.
            #### Numerical Model ####.
        
            AcousticGraphSplitLongDucts(int b)
            
# Activates the Split Long Ducts
# option if b != 0, deactivates it otherwise.
            AcousticGraphStepToTubes(int b)
            
# Activates the Step To Tubes
# option if b != 0, deactivates it otherwise.
            AcousticGraphSplineToStep(int b)
            
# Activates the Spline To Step
# option if b != 0, deactivates it otherwise.
            AcousticGraphComputeH0(int b)
            
# Activates the Compute H0
# option if b != 0, deactivates it otherwise.
            AcousticGraphComputePoleZeroAtNullFrequency(int b)
            
# Activates the Pole-Zero pair at f=0
# option if b != 0, deactivates it otherwise.
            AcousticGraphMinDfCycle(float df)
            
# Sets the Cycle δf parameter to f.
            AcousticGraphNumberOfBaseFunctions(int maxBasis)
            
# Sets the number of basis function.
            AcousticGraphDecreaseRadius(float dR)
            
# Sets the δR papameter to dR.

            #### Solution Viewer ####.
        
            AcousticGraphComputeTransfer(int nPoints, int hasOffset, float offset, in unused,
            int r, int g, int b, int lineWidth)
            
# Computes the Slow Transfer Function.
# nPoints is the number of transfer function points computed.
# if hasOffset != 0, an the curve is shifted by offset dB.
# unused is no more used, set it to 0.
# r, g and b set the color of the curve and
# curveWidth its width.
            SlowTransferSetNumPoints(int nPoints)
            
# Sets the number of points
# of transfer function to be computed.
            SolutionViewerShowPhase(int b)
            
# Shows the phase of the Slow Transfer Function.
# in the Transfer Function View if b != 0, hides it otherwise.
            SetCheckSolutionType(int type)
            
# Sets the Solution Type
# type = 0 correspond to frequency.
# type = 1 correspond to resonance.
# type = 2 correspond to zero.
            CheckSolutionSelectFrequency(float f)
            
# If Solution Type is 0 (frequency)
# The frequency value is set to f.
            CheckSolutionSelectPole(int poleIndex)
            
# If Solution Type is 1 (resonance)
# poleIndex correspong to the line index of the combo box beside
# that replaces the frequency entry.
            CheckSolutionSetlectZero(int subGraphIndex, int zeroIndex) 
            
# If Solution Type is 2 (zero), there is one
# combo box for each subgraph responsible fore it.
# subGraphIndex is the index of the combo box and zeroIndex
# is the line index of the zero in the box.
            CheckSolutionUpdate()
            
# Updates the the figures in the view.
            SetCheckSolutionA(int b)
            
# Check the A(x) check box if b != 0, uncheck it otherwise.
            SetCheckSolutionP(int b)
            
# Check the P(x) check box if b != 0, uncheck it otherwise.
            SetCheckSolutionU(int b)
            
# Check the A(x) check box if b != 0, uncheck it otherwise.
            SetCheckSolutionAModified(int b)
            
# Check the Ã(x) check box if b != 0, uncheck it otherwise.
            SetCheckSolutionAP(int b)
            
# Check the A(x)P(x) check box if b != 0, uncheck it otherwise.
            SetCheckSolutionError(int b) 
            
# Check the Error check box if b != 0, uncheck it otherwise.